diff --git a/.gitignore b/.gitignore index 1c8ca3d8c9c..b1a739b148d 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,8 @@ src/fsharp/FSharp.Compiler/*.userprefs src/*.log Debug Release +vsdebug +vsrelease Proto .libs Makefile @@ -94,4 +96,10 @@ tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/Utils.dll tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/ComputationExprLibrary.dll *.csproj.user + +*.ide +*.log +*.jrs +*.chk +*.bak *.orig diff --git a/CHANGELOG.md b/CHANGELOG.md index 1ec7018de4f..ae07beb021a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,51 +4,186 @@ Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - Visual F# ====================== All notable changes to this project will be documented in this file. +### [4.0.0] - 20 July 2015 + +Includes commits up to `dd8252eb8d20aaedf7b1c7576cd2a8a82d24f587` + +#### Language, compiler, runtime, interactive + +* Normalization and expansion of `Array`, `List`, and `Seq` modules + * New APIs for 4.0: `chunkBySize`, `contains`, `except`, `findBack`, `findInstanceBack`, `indexed`, `item`, `mapFold`, `mapFoldBack`, `sortByDescending`, `sortDescending`, `splitInto`, `tryFindBack`, `tryFindIndexBack`, `tryHead`, `tryItem`, `tryLast` + ![Collection API additions](http://i.imgur.com/SdJ7Doh.png) +* Other new APIs + * `Option.filter`, `Option.toObj`, `Option.ofObj`, `Option.toNullable`, `Option.ofNullable` + * `String.filter` + * `Checked.int8`, `Checked.uint8` + * `Async.AwaitTask` (non-generic) + * `WebClient.AsyncDownloadFile`, `WebClient.AsyncDownloadData` + * `tryUnbox`, `isNull` +* New active pattern to match constant `Decimal` in quotations +* Slicing support for lists +* Support for consuming high-rank (> 4) arrays +* Support for units of measure in `printf`-family functions +* Support for constructors/class names as first-class functions +* Improved exception stack traces in async code +* Automatic `mutable`/`ref` conversion +* Support for static arguments to provided methods +* Support for non-nullable provided types +* Added `NonStructuralComparison` module containing non-structural comparison operators +* Support for rational exponents in units of measure +* Give fsi.exe, fsiAnyCpi.exe nice icons +* `Microsoft.` optional in namepsace paths from FSharp.Core +* Support for extension properties in object initializers +* Pre-support (not yet used) for additional nativeptr intrinsics +* Simplified, more robust resolution of type references in quotations +* Support for inheritance of types that have multiple interface instantiations +* Extended preprocessor grammar +* Support for implicit quotation of expressions used as method arguments +* Support for multiple properties in `[]` +* Eliminate tuple allocation for implicitly returned formal arguments +* Perf: fsc.exe now uses `GCLatencyMode.Batch` +* Perf: Improved `hash`/`compare`/`distinctBy`/`groupBy` performance +* Perf: `Seq.toArray` perf improvement +* Perf: Use `OptimizedClosures.FSharpFunc` in seq.fs where applicable +* Perf: Use literals and mutable variables instead of ref cells for better performance in SHA1 calc +* Perf: Use smart blend of `System.Array.Copy` and iterative copy for array copies +* Perf: Change `Seq.toList` to mutation-based to remove reliance on `List.rev` +* Perf: Change `pdbClose` to test if files are locked before inducing GCs +* Perf: Use server GC mode for compiler +* Bugfix: Changed an error message within the Set module to use the correct module name. +* Bugfix: Fix assembly name of warning FS2003 +* Bugfix [#132](http://visualfsharp.codeplex.com/workitem/132): FSI Shadowcopy causes a significant degrade in the fsi first execute time +* Bugfix [#131](https://visualfsharp.codeplex.com/workitem/131): Fix getentryassembly return value when shadowcopy is enabled in FSI +* Bugfix [#61](https://visualfsharp.codeplex.com/workitem/61) Nonverifiable code generated with units of measure conversion +* Bugfix [#68](https://visualfsharp.codeplex.com/workitem/68) BadImageFormatException with Units of Measure +* Bugfix [#146](https://visualfsharp.codeplex.com/workitem/146) BadImageFormatException in both Release and Debug build with units of measure +* Bugfix: Incorrent cross-module inlining between different .NET profiles +* Bugfix: Properly document exceptions in `Array` module +* Bugfix [#24](https://visualfsharp.codeplex.com/workitem/24): Error reporting of exceptions in type providers `AddMemberDelayed` +* Bugfix [#13](https://github.com/fsharp/fsharp/issues/13): Error on FSI terminal resize +* Bugfix [#29](https://github.com/fsharp/fsharp/issues/29): Module access modifier `internal` does not give internal access if no namespaces are used +* Bugfix: Fix typo in error message for invalid attribute combination +* Bugfix [#27](https://github.com/microsoft/visualfsharp/issues/27): Private module values can be mutated by other modules +* Bugfix [#38](https://github.com/microsoft/visualfsharp/issues/38): ICE - System.ArgumentException: not a measure abbreviation, or incorrect kind +* Bugfix [#44](https://github.com/microsoft/visualfsharp/issues/44): Problems using FSI to `#load` multiple files contributing to the same namespace +* Bugfix [#95](https://github.com/microsoft/visualfsharp/issues/95): `[]` allows access to DU member if qualified only by module name +* Bugfix [#89](https://github.com/microsoft/visualfsharp/issues/89): Embedding an untyped quotation in a typed quotation results in ArgumentException +* Bugfix: Show warning when Record is accessed without type but `[]` was set +* Bugfix [#139](https://visualfsharp.codeplex.com/workitem/139): Memory leak in `Async.AwaitWaitHandle` +* Bugfix [#122](https://github.com/microsoft/visualfsharp/issues/122): `stfld` does not give `.volatile` annotation +* Bugfix [#30](https://github.com/microsoft/visualfsharp/issues/30): Compilation error "Incorrect number of type arguments to local call" +* Bugfix [#163](https://github.com/microsoft/visualfsharp/issues/163): Array slicing does not work properly with non 0-based arrays +* Bugfix [#148](https://github.com/microsoft/visualfsharp/issues/148): XML doc comment generation adding empty garbage +* Bugfix [#98](https://github.com/Microsoft/visualfsharp/issues/98): Using a single, optional, static parameter to a type provider causes failure +* Bugfix [#109](https://github.com/Microsoft/visualfsharp/issues/109): Invalid interface generated by --sig +* Bugfix [#123](https://github.com/Microsoft/visualfsharp/issues/123): Union types without sub-classes should be sealed +* Bugfix [#68](https://github.com/Microsoft/visualfsharp/issues/68): F# 3.1 / Profile 259: `<@ System.Exception() @>` causes AmbiguousMatchException at runtime +* Bugfix [#9](https://github.com/Microsoft/visualfsharp/issues/9): Internal error in FSI: FS0192: binding null type in envBindTypeRef +* Bugfix [#10](https://github.com/Microsoft/visualfsharp/issues/10): Internal error: binding null type in envBindTypeRef +* Bugfix [#266](https://github.com/Microsoft/visualfsharp/issues/266): `windowed` error message incorrectly flags "non-negative" input when "positive" is what's needed +* Bugfix [#270](https://github.com/Microsoft/visualfsharp/issues/270): "internal error: null: convTypeRefAux" in interactive when consuming quotation containing type name with commas or spaces +* Bugfix [#276](https://github.com/Microsoft/visualfsharp/issues/276): Combining struct field with units of measure will result managed type instead of unmanaged type +* Bugfix [#269](https://github.com/Microsoft/visualfsharp/issues/269): Accidentally `#load`ing a DLL in script causes internal error +* Bugfix [#293](https://github.com/Microsoft/visualfsharp/issues/293): `#r` references without relative path are not loaded when file is local +* Bugfix [#237](https://github.com/Microsoft/visualfsharp/issues/237): Problems using FSI on multiple namespaces in a single file +* Bugfix [#338](https://github.com/Microsoft/visualfsharp/issues/338): Escaped unicode characters are encoded incorrectly +* Bugfix [#370](https://github.com/Microsoft/visualfsharp/issues/370): `Seq.sortBy` cannot handle sequences of floats containing NaN +* Bugfix [#368](https://github.com/Microsoft/visualfsharp/issues/368): Optimizer incorrectly assumes immutable field accesses are side-effect free +* Bugfix [#337](https://github.com/Microsoft/visualfsharp/issues/337): Skip interfaces that lie outside the set of referenced assemblies +* Bugfix [#383](https://github.com/Microsoft/visualfsharp/issues/383): Class with `[]` barred from inheriting from normal non-nullable class +* Bugfix [#420](https://github.com/Microsoft/visualfsharp/issues/420): Compiler emits incorrect visibility modifier for internal constructors of abstract class +* Bugfix [#362](https://github.com/Microsoft/visualfsharp/issues/362): Depickling assertion followed by nullref internal errors in units-of-measure case +* Bugfix [#342](https://github.com/Microsoft/visualfsharp/issues/342): FS0193 error when specifying sequential struct layout of a type +* Bugfix [#299](https://github.com/Microsoft/visualfsharp/issues/299): AmbiguousMatchException with `[]` on overloaded extension methods +* Bugfix [#316](https://github.com/Microsoft/visualfsharp/issues/316): Null array-valued attribute causes internal compiler error +* Bugfix [#147](https://github.com/Microsoft/visualfsharp/issues/147): FS0073: internal error: Undefined or unsolved type variable: 'a +* Bugfix [#34](https://github.com/Microsoft/visualfsharp/issues/34): Error in pass2 for type FSharp.DataFrame.FSharpFrameExtensions, error: duplicate entry 'Frame2.GroupRowsBy' in method table +* Bugfix [#212](https://github.com/Microsoft/visualfsharp/issues/212): Record fields initialized in wrong order +* Bugfix [#445](https://github.com/Microsoft/visualfsharp/issues/445): Inconsistent compiler prompt message when using `--pause` switch +* Bugfix [#238](https://github.com/Microsoft/visualfsharp/issues/238): Generic use of member constraint solved to record field causes crash + +#### Visual Studio + +* Updated all templates (except tutorial) to include AssemblyInfo.fs setup in the same manner as default C# project templates +* Add keyboard shortcuts for FSI reset and clear all +* Improved debugger view for Map values +* Improved performance reading stdout/stderr from fsi.exe to F# Interactive window +* Support for VS project up-to-date check +* Improved project template descriptions, make it clearer how to target Xamarin platforms +* Intellisense completion in object initializers +* Add menu entry "Open folder in File Explorer" on folder nodes +* Intellisense completion for named arguments +* `Alt+Enter` sends current line of code to interactive if there is no selection +* Support for debugging F# scripts with the VS debugger +* Add support for hexadecimal values (like 0xFF) ??to MSBuild property BaseAddress +* Updated menu icons used for F# interactive to align with other VS interactive windows +* Bugfix: Fix url of fsharp.org website in vs templates +* Bugfix [#141](https://visualfsharp.codeplex.com/workitem/141): The "Error List" window does not parse MSBuild messages correctly +* Bugfix [#147](https://visualfsharp.codeplex.com/workitem/147): Go to definition doesn't work for default struct ctors +* Bugfix [#50](https://github.com/microsoft/visualfsharp/issues/50): Members hidden from IntelliSense still show up in tooltips +* Bugfix [#57](https://github.com/microsoft/visualfsharp/issues/57) (partial): Visual Studio locking access to XML doc files +* Bugfix [#157](https://github.com/Microsoft/visualfsharp/issues/157): Should not allow Framework 4 / F# 3.1 combination in project properties +* Bugfix [#114](https://github.com/Microsoft/visualfsharp/issues/114): Portable Library (legacy) template displays wrong target framework version +* Bugfix [#273](https://github.com/Microsoft/visualfsharp/issues/273): VS editor shows bogus errors when scripts use multi-hop `#r` and `#load` with relative paths +* Bugfix [#312](https://github.com/Microsoft/visualfsharp/issues/312): F# library project templates and portable library templates do not have `AutoGenerateBindingRedirects` set to true +* Bugfix [#321](https://github.com/Microsoft/visualfsharp/issues/321): Provided type quickinfo shouldn't show hidden and obsolete members from base class +* Bugfix [#319](https://github.com/Microsoft/visualfsharp/issues/319): Projects with target runtime 3.0 don't show up correctly on the VS project dialog +* Bugfix [#283](https://github.com/Microsoft/visualfsharp/issues/283): Changing target framework causes incorrect binding redirects to be added to app.config +* Bugfix [#278](https://github.com/Microsoft/visualfsharp/issues/278): NullReferenceException when trying to add some COM references +* Bugfix [#259](https://github.com/Microsoft/visualfsharp/issues/259): Renaming files in folders causes strange UI display +* Bugfix [#350](https://github.com/Microsoft/visualfsharp/issues/350): Renaming linked file results in error dialog +* Bugfix [#381](https://github.com/Microsoft/visualfsharp/issues/381): Intellisense stops working when referencing PCL component from script (requires `#r "System.Runtime"`) +* Bugfix [#104](https://github.com/Microsoft/visualfsharp/issues/104): Using paste to add files to an F# project causes the order of files in the project and on the UI to get out of sync +* Bugfix [#417](https://github.com/Microsoft/visualfsharp/issues/417): 'Move file up/down' keybindings should be scoped to solution explorer +* Bugfix [#246](https://github.com/Microsoft/visualfsharp/issues/246): Fix invalid already rendered folder error +* Bugfix [#106](https://github.com/Microsoft/visualfsharp/issues/106) (partial): Visual F# Tools leak memory while reloading solutions + ### [3.1.2] - 20 August 2014 +Includes commits up to `3385e58aabc91368c8e1f551650ba48705aaa285` + #### Language, compiler, runtime, interactive * Allow arbitrary-dimensional slicing +* Ship versions FSharp.Core.dll built on portable profiles 78 and 259 +* Support "shebang" (`#!`) in F# source files +* Vertical pipes disallowed in active pattern case identifiers +* Enable non-locking shadow copy of reference assemblies in fsi/fsianycpu +* Inline codegen optimization using structs +* Perf improvement for `Seq.windowed` +* exe.config files for fsc, fsi, fsianycpu now use simple version range instead of long set of explicit version redirects * Bugfix [#72](https://visualfsharp.codeplex.com/workitem/72): Indexer properties with more than 4 arguments cannot be accessed * Bugfix [#113](https://visualfsharp.codeplex.com/workitem/113): `Async.Sleep` in .NETCore profiles does not invoke error continuation -* Ship versions FSharp.Core.dll built on portable profiles 78 and 259 * Bugfix [#91](https://visualfsharp.codeplex.com/workitem/91): String module documentation is false -* Support "shebang" (`#!`) in F# source files * Bugfix [#78](https://visualfsharp.codeplex.com/workitem/78): Allow space characters in active pattern case identifiers -* Vertical pipes disallowed in active pattern case identifiers * Bugfix: Invalid code generated when calling VB methods with optional byref args * Bugfix [#69](https://visualfsharp.codeplex.com/workitem/69): Invalid code generated when calling C# method with optional nullable args * Bugfix [#9](https://visualfsharp.codeplex.com/workitem/9): XML doc comments on F# record type fields do not appear when accessing in C# * Bugfix [#59](https://visualfsharp.codeplex.com/workitem/59): Compiler always requires System.Runtime.InteropServices, this is not present in all portable profiles * Bugfix [#17](https://visualfsharp.codeplex.com/workitem/17): Incorrect generation of XML from doc comments for Record fields -* Enable non-locking shadow copy of reference assemblies in fsi/fsianycpu -* Inline codegen optimization using structs -* Perf improvement for `Seq.windowed` * Bugfix [#7](https://visualfsharp.codeplex.com/workitem/17): NullRef in list comprehension, when for loop works * Bugfix [#1](https://visualfsharp.codeplex.com/workitem/1): Type inference involving generic param arrays * Bugfix [#37](https://visualfsharp.codeplex.com/workitem/37): Perf regression in 3.1.0 related to resolving extension methods * Bugfix: Can't run F# console application with 'update' in name * Bugfix: Slicing and range expression inconsistent -* exe.config files for fsc, fsi, fsianycpu now use simple version range instead of long set of explicit version redirects * Bugfix: Invalid code is generated when using field initializers in struct constructor #### Visual Studio +* Project templates for F# portable libraries targeting profiles 78 and 259 +* Enable non-locking shadow copy of reference assemblies in fsi/fsianycpu (VS options added) +* Allow breakpoints to be set inside of quotations +* Support "Publish" action in project system for web, Azure * Bugfix [#126](https://visualfsharp.codeplex.com/workitem/126): F# package installer does not honor custom install paths for express SKUs * Bugfix [#75](https://visualfsharp.codeplex.com/workitem/75): Microsoft.FSharp.targets shim not deployed with F# SDK * Bugfix: Fix crash in smart indent provider * Bugfix [#55](https://visualfsharp.codeplex.com/workitem/55): Cannot add reference to F# PCL project -* Project templates for F# portable libraries targeting profiles 78 and 259 * Bugfix: Typos in tutorial project script -* Enable non-locking shadow copy of reference assemblies in fsi/fsianycpu (VS options added) -* Allow breakpoints to be set inside of quotations -* Support "Publish" action in project system for web, Azure * Bugfix: Required C# event members do not appear in intellisense when signature is (object, byref) @@ -63,12 +198,12 @@ All notable changes to this project will be documented in this file. #### Visual Studio -* Bugfix: Errors when attempting to add reference to .NET core library -* Bugfix: Crash in `FSComp.SR.RunStartupValidation()` * Enable installation of Visual F# on VS Desktop Express * Added support for showing xml doc comments for named arguments * Visual F# package deployable on non-VS machines. Deploys compiler and runtime toolchain plus msbuild targets +* Bugfix: Errors when attempting to add reference to .NET core library +* Bugfix: Crash in `FSComp.SR.RunStartupValidation()` - +[4.0.0]: http://fsharp.org [3.1.2]: http://blogs.msdn.com/b/fsharpteam/archive/2014/08/20/announcing-the-release-of-visual-f-tools-3-1-2.aspx [3.1.1]: http://blogs.msdn.com/b/fsharpteam/archive/2014/01/22/announcing-visual-f-3-1-1-and-support-for-desktop-express.aspx diff --git a/DEVGUIDE.md b/DEVGUIDE.md index 8d9bb430d06..257bceef898 100644 --- a/DEVGUIDE.md +++ b/DEVGUIDE.md @@ -10,7 +10,7 @@ To get a free F# environment, go to [fsharp.org](http://fsharp.org/use/windows). > Contributions made to this repo are subject to terms and conditions of the Apache License, Version 2.0. A copy of the license can be found in the [License.txt](License.txt) file at the root of this distribution. > By using this source code in any fashion, you are agreeing to be bound by the terms of the Apache License, Version 2.0. You must not remove this notice, or any other, from this software. -**Questions?** If you have questions about the source code, please ask in the issues and discussion forums. +**Questions?** If you have questions about the source code, please ask in the issues. ## 0. A Shortcut to Build and Smoke Test @@ -33,10 +33,8 @@ Note that you need the .NET framework 3.5 installed on your machine in order to This uses the proto compiler to build `FSharp.Core.dll`, `FSharp.Compiler.dll`, `fsc.exe`, and `fsi.exe`. -``` -msbuild src/fsharp-library-build.proj -msbuild src/fsharp-compiler-build.proj -``` + msbuild src/fsharp-library-build.proj + msbuild src/fsharp-compiler-build.proj You can now use the updated F# compiler in `debug\net40\bin\fsc.exe` and F# Interactive in `debug\net40\bin\fsi.exe` to develop and test basic language and tool features. @@ -48,73 +46,81 @@ See [TESTGUIDE.md](TESTGUIDE.md) for full details on how to run tests. Prior to a **Debug** test run, you need to complete **all** of these steps: -``` -msbuild src/fsharp-library-build.proj -msbuild src/fsharp-compiler-build.proj -msbuild src/fsharp-typeproviders-build.proj -msbuild src/fsharp-library-build.proj /p:TargetFramework=net20 -msbuild src/fsharp-library-build.proj /p:TargetFramework=portable47 -msbuild src/fsharp-library-build.proj /p:TargetFramework=portable7 -msbuild src/fsharp-library-build.proj /p:TargetFramework=portable78 -msbuild src/fsharp-library-build.proj /p:TargetFramework=portable259 -msbuild src/fsharp-library-unittests-build.proj -msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable47 -msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable7 -msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable78 -msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable259 -src\update.cmd debug -ngen -tests\BuildTestTools.cmd debug -``` + msbuild src/fsharp-library-build.proj + msbuild src/fsharp-compiler-build.proj + msbuild src/fsharp-typeproviders-build.proj + msbuild src/fsharp-compiler-unittests-build.proj + msbuild src/fsharp-library-build.proj /p:TargetFramework=net20 + msbuild src/fsharp-library-build.proj /p:TargetFramework=portable47 + msbuild src/fsharp-library-build.proj /p:TargetFramework=portable7 + msbuild src/fsharp-library-build.proj /p:TargetFramework=portable78 + msbuild src/fsharp-library-build.proj /p:TargetFramework=portable259 + msbuild src/fsharp-library-unittests-build.proj + msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable47 + msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable7 + msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable78 + msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable259 + src\update.cmd debug -ngen + tests\BuildTestTools.cmd debug + [Optional] If testing the Visual Studio bits (see below) you will also need: -``` -msbuild vsintegration\fsharp-vsintegration-build.proj -msbuild vsintegration\fsharp-vsintegration-unittests-build.proj -``` + msbuild vsintegration\fsharp-vsintegration-build.proj + msbuild vsintegration\fsharp-vsintegration-unittests-build.proj Prior to a **Release** test run, you need to do **all** of these: -``` -msbuild src/fsharp-library-build.proj /p:Configuration=Release -msbuild src/fsharp-compiler-build.proj /p:Configuration=Release -msbuild src/fsharp-typeproviders-build.proj /p:Configuration=Release -msbuild src/fsharp-library-build.proj /p:TargetFramework=net20 /p:Configuration=Release -msbuild src/fsharp-library-build.proj /p:TargetFramework=portable47 /p:Configuration=Release -msbuild src/fsharp-library-build.proj /p:TargetFramework=portable7 /p:Configuration=Release -msbuild src/fsharp-library-build.proj /p:TargetFramework=portable78 /p:Configuration=Release -msbuild src/fsharp-library-build.proj /p:TargetFramework=portable259 /p:Configuration=Release -msbuild src/fsharp-library-unittests-build.proj /p:Configuration=Release -msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable47 /p:Configuration=Release -msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable7 /p:Configuration=Release -msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable78 /p:Configuration=Release -msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable259 /p:Configuration=Release -src\update.cmd release -ngen -tests\BuildTestTools.cmd release -``` - -[Optional] If testing the Visual F# IDE Tools (see below) you will also need: - -``` -msbuild vsintegration\fsharp-vsintegration-build.proj /p:Configuration=Release -msbuild vsintegration\fsharp-vsintegration-unittests-build.proj /p:Configuration=Release -``` - -## 4. [Optional] Build and Install the Visual F# IDE Tools - -To build the VS components: - -``` -msbuild vsintegration\fsharp-vsintegration-build.proj -``` - -To install the VS components: - -1. Ensure that the VSIX package is uninstalled. - - In VS, select Tools/Extensions and Updates - - If the package `VisualStudio.FSharp.EnableOpenSource` is installed, select Uninstall -1. Run ```debug\net40\bin\EnableOpenSource.vsix``` -1. Restart Visual Studio, it should now be running your freshly-built Visual F# IDE Tools. + msbuild src/fsharp-library-build.proj /p:Configuration=Release + msbuild src/fsharp-compiler-build.proj /p:Configuration=Release + msbuild src/fsharp-typeproviders-build.proj /p:Configuration=Release + msbuild src/fsharp-compiler-unittests-build.proj /p:Configuration=Release + msbuild src/fsharp-library-build.proj /p:TargetFramework=net20 /p:Configuration=Release + msbuild src/fsharp-library-build.proj /p:TargetFramework=portable47 /p:Configuration=Release + msbuild src/fsharp-library-build.proj /p:TargetFramework=portable7 /p:Configuration=Release + msbuild src/fsharp-library-build.proj /p:TargetFramework=portable78 /p:Configuration=Release + msbuild src/fsharp-library-build.proj /p:TargetFramework=portable259 /p:Configuration=Release + msbuild src/fsharp-library-unittests-build.proj /p:Configuration=Release + msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable47 /p:Configuration=Release + msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable7 /p:Configuration=Release + msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable78 /p:Configuration=Release + msbuild src/fsharp-library-unittests-build.proj /p:TargetFramework=portable259 /p:Configuration=Release + src\update.cmd release -ngen + tests\BuildTestTools.cmd release + + +[Optional] If testing **Release** build of the Visual F# IDE Tools (see below) you will also need: + + msbuild vsintegration\fsharp-vsintegration-build.proj /p:Configuration=Release + msbuild vsintegration\fsharp-vsintegration-unittests-build.proj /p:Configuration=Release + +## 4. [Optional] Install the Visual F# IDE Tools and Clobber the F# 4.0 SDK on the machine + +**Note:** Step #3 will install a VSIX extension into Visual Studio 2015 that changes the Visual F# IDE Tools +components installed into Visual Studio 2015. You can revert this step by disabling or uninstalling the addin. + +**Note:** Step #4 will clobber the machine-wide installed F# 4.0 SDK on your machine. This replaces the ``fsi.exe``/``fsiAnyCpu.exe`` used +by Visual F# Interactive and the ``fsc.exe`` used by ``Microsoft.FSharp.targets``. Repairing Visual Studio 2015 is currently the +only way to revert this step. + +**Note:** After you complete the install, the FSharp.Core referenced by your projects will not be updated. If you want to make +a project that references your updated FSharp.Core, you must explicitly change the ``TargetFSharpCoreVersion`` in the .fsproj +file to ``4.4.0.5099`` (or a corresponding portable version number with suffix ``5099``). + +For **Debug**: + +1. Ensure that the VSIX package is uninstalled. In VS, select Tools/Extensions and Updates and if the package `VisualStudio.FSharp.EnableOpenSource` is installed, select Uninstall +1. Run ``debug\net40\bin\EnableOpenSource.vsix`` +1. Run ``vsintegration\update-vsintegration.cmd debug`` (clobbers the installed F# 4.0 SDK) + +For **Release**: + +1. Ensure that the VSIX package is uninstalled. In VS, select Tools/Extensions and Updates and if the package `VisualStudio.FSharp.EnableOpenSource` is installed, select Uninstall +1. Run ``release\net40\bin\EnableOpenSource.vsix`` +1. Run ``vsintegration\update-vsintegration.cmd release`` (clobbers the installed F# 4.0 SDK) + +Restart Visual Studio, it should now be running your freshly-built Visual F# IDE Tools with updated F# Interactive. + ### Notes on the build diff --git a/README.md b/README.md index 72268334db6..cf7dccba927 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ [![Issue Stats](http://issuestats.com/github/Microsoft/visualfsharp/badge/pr)](http://issuestats.com/github/microsoft/visualfsharp) [![Issue Stats](http://issuestats.com/github/Microsoft/visualfsharp/badge/issue)](http://issuestats.com/github/microsoft/visualfsharp) -[![Build status](https://img.shields.io/appveyor/ci/KevinRansom/visualfsharp-radou/master.svg)](https://ci.appveyor.com/project/KevinRansom/visualfsharp-radou/branch/master) +[![Build status](https://img.shields.io/appveyor/ci/KevinRansom/visualfsharp-radou/fsharp4.svg)](https://ci.appveyor.com/project/KevinRansom/visualfsharp-radou/branch/fsharp4) + +[![Join the chat at https://gitter.im/Microsoft/visualfsharp](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/Microsoft/visualfsharp?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) #Visual F# Tools @@ -41,3 +43,4 @@ Although the primary focus of this repo is F# for Windows and the Visual Studio ###Get In Touch Keep up with the Visual F# Team and the development of the Visual F# Tools by following us [@VisualFSharp](https://twitter.com/VisualFSharp) or subscribing to our [team blog](http://blogs.msdn.com/b/fsharpteam/). + diff --git a/TESTGUIDE.md b/TESTGUIDE.md index 23cb45213ab..c676493d187 100644 --- a/TESTGUIDE.md +++ b/TESTGUIDE.md @@ -11,8 +11,8 @@ The test cases for this suite reside under `tests\fsharp`. This suite dates back The test cases for this suite reside under `tests\fsharpqa\source`. This suite was first created when F# 2.0 was being added to Visual Studio 2010. Tests for this suite are driven by the "RunAll" framework, implemented in Perl. This suite is rather large and has broad and deep coverage of a variety of compiler, runtime, and syntax scenarios. -### Compiler and Library Core Unit Test Suite -The test cases for this suite reside next to the F# core library code, at `src\fsharp\FSharp.Core.Unittests`. This suite is a set of standard NUnit test cases, implemented in F#. This suite focuses on validation of the core F# types and the public surface area of `FSharp.Core.dll`. +### Compiler and Library Core Unit Test Suites +The test cases for these suites reside next to the F# core library code, at `src\fsharp\FSharp.Core.Unittests` and `src\fsharp\FSharp.Compiler.Unittests`. These suites are standard NUnit test cases, implemented in F#. The FSharp.Core.Unittests suite focuses on validation of the core F# types and the public surface area of `FSharp.Core.dll`, and the FSharp.Compiler.Unittests suite focuses on validation of compiler internals. ### Visual F# Tools IDE Unit Test Suite The test cases for this suite reside next to the Visual F# Tools code, at `vsintegration\src\unittests`. This suite is a set of standard NUnit test cases, implemented in F#. This suite exercises a wide range of behaviors in the F# Visual Studio project system and language service. @@ -38,6 +38,7 @@ The script `tests\RunTests.cmd` has been provided to make execution of the above ``` RunTests.cmd fsharp [tags to run] [tags not to run] RunTests.cmd fsharpqa [tags to run] [tags not to run] +RunTests.cmd compilerunit RunTests.cmd coreunit RunTests.cmd coreunitportable47 RunTests.cmd coreunitportable7 @@ -48,7 +49,7 @@ RunTests.cmd ideunit `RunTests.cmd` sets a handful of environment variables which allow for the tests to work, then puts together and executes the appropriate command line to start the specified test suite. -All test execution logs and result files will be dropped into the `tests\TestResults` folder, and have file names matching `FSharp_*.*`, `FSharpQA_*.*`, `CoreUnit_*.*`, `IDEUnit_*.*`, e.g. `FSharpQA_Results.log` or `FSharp_Failures.log`. +All test execution logs and result files will be dropped into the `tests\TestResults` folder, and have file names matching `FSharp_*.*`, `FSharpQA_*.*`, `CompilerUnit_*.*`, `CoreUnit_*.*`, `IDEUnit_*.*`, e.g. `FSharpQA_Results.log` or `FSharp_Failures.log`. For the FSharp and FSharpQA suites, the list of test areas and their associated "tags" is stored at @@ -93,9 +94,14 @@ Test area directories in this suite will contain a number of source code files a Test cases will run an optional "pre command," compile some set of source files using some set of flags, optionally run the resulting binary, then optionally run a final "post command." If all of these steps complete without issue, the test is considered to have passed. -### Core Unit Test Suite +### FSharp.Compiler and FSharp.Core Unit Test Suites -To build the unit test binary, call `msbuild fsharp-library-unittests-build.proj` from the `src` directory. Tests are contained in the binary `FSharp.Core.Unittests.dll`. +To build these unit test binaries, from the `src` directory call + +- `msbuild fsharp-compiler-unittests-build.proj` + - Output binary is `FSharp.Compiler.Unittests.dll` +- `msbuild fsharp-library-unittests-build.proj` + - Output binary is `FSharp.Core.Unittests.dll` You can execute and re-run these tests using any standard NUnit approach - via graphical `nunit.exe` or on the command line via `nunit-console.exe`. @@ -123,4 +129,4 @@ You can execute and re-run these tests using any standard NUnit approach - via g * Making the tests run faster * NGen-ing the F# bits (fsc, fsi, FSharp.Core, etc) will result in tests executing much faster. Make sure you run `src\update.cmd` with the `-ngen` flag before running tests. * The Fsharp and FsharpQA suites will run test cases in parallel by default. You can comment out the relevant line in `RunTests.cmd` (look for `PARALLEL_ARG`) to disable this. - * By default, tests from the FSharpQA suite are run using a persistent, hosted version of the compiler. This speeds up test execution, as there is no need for the `fsc.exe` process to spin up repeatedly. To disable this, uncomment the relevant line in `RunTests.cmd` (look for `HOSTED_COMPILER`). \ No newline at end of file + * By default, tests from the FSharpQA suite are run using a persistent, hosted version of the compiler. This speeds up test execution, as there is no need for the `fsc.exe` process to spin up repeatedly. To disable this, uncomment the relevant line in `RunTests.cmd` (look for `HOSTED_COMPILER`). diff --git a/appveyor-build.cmd b/appveyor-build.cmd index 56d019dea12..c6039fa1148 100644 --- a/appveyor-build.cmd +++ b/appveyor-build.cmd @@ -3,9 +3,19 @@ set APPVEYOR_CI=1 :: Check prerequisites -set _msbuildexe="%ProgramFiles(x86)%\MSBuild\12.0\Bin\MSBuild.exe" -if not exist %_msbuildexe% set _msbuildexe="%ProgramFiles%\MSBuild\12.0\Bin\MSBuild.exe" -if not exist %_msbuildexe% echo Error: Could not find MSBuild.exe. Please see http://www.microsoft.com/en-us/download/details.aspx?id=40760. && goto :failure +if not '%VisualStudioVersion%' == '' goto vsversionset +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\common7\ide\devenv.exe" set VisualStudioVersion=14.0 +if exist "%ProgramFiles%\Microsoft Visual Studio 14.0\common7\ide\devenv.exe" set VisualStudioVersion=14.0 +if not '%VisualStudioVersion%' == '' goto vsversionset +if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\common7\ide\devenv.exe" set VisualStudioVersion=12.0 +if exist "%ProgramFiles%\Microsoft Visual Studio 12.0\common7\ide\devenv.exe" set VisualStudioVersion=12.0 + +:vsversionset +if '%VisualStudioVersion%' == '' echo Error: Could not find an installation of Visual Studio && goto :eof + +if exist "%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" set _msbuildexe="%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" +if exist "%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" set _msbuildexe="%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" +if not exist %_msbuildexe% echo Error: Could not find MSBuild.exe. && goto :eof set _ngenexe="%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\ngen.exe" if not exist %_ngenexe% echo Error: Could not find ngen.exe. && goto :failure @@ -13,7 +23,7 @@ if not exist %_ngenexe% echo Error: Could not find ngen.exe. && goto :failure .\.nuget\NuGet.exe restore packages.config -PackagesDirectory packages @if ERRORLEVEL 1 echo Error: Nuget restore failed && goto :failure -::Build +:: Build %_msbuildexe% src\fsharp-proto-build.proj @if ERRORLEVEL 1 echo Error: compiler proto build failed && goto :failure @@ -38,6 +48,9 @@ if not exist %_ngenexe% echo Error: Could not find ngen.exe. && goto :failure %_msbuildexe% src/fsharp-library-build.proj /p:TargetFramework=portable259 /p:Configuration=Release @if ERRORLEVEL 1 echo Error: library portable259 build failed && goto :failure +%_msbuildexe% src/fsharp-compiler-unittests-build.proj /p:Configuration=Release +@if ERRORLEVEL 1 echo Error: compiler unittests build failed && goto :failure + %_msbuildexe% src/fsharp-library-unittests-build.proj /p:Configuration=Release @if ERRORLEVEL 1 echo Error: library unittests build failed && goto :failure @@ -67,7 +80,6 @@ call tests\BuildTestTools.cmd release @if ERRORLEVEL 1 echo Error: 'tests\BuildTestTools.cmd release' failed && goto :failure @echo on - pushd tests call RunTests.cmd release fsharp Smoke @@ -76,6 +88,9 @@ call RunTests.cmd release fsharp Smoke call RunTests.cmd release fsharpqa Smoke @if ERRORLEVEL 1 type testresults\fsharpqa_failures.log && echo Error: 'RunTests.cmd release fsharpqa Smoke' failed && goto :failure +call RunTests.cmd release compilerunit +@if ERRORLEVEL 1 echo Error: 'RunTests.cmd release compilerunit' failed && goto :failure + call RunTests.cmd release coreunit @if ERRORLEVEL 1 echo Error: 'RunTests.cmd release coreunit' failed && goto :failure @@ -84,4 +99,4 @@ popd goto :eof :failure -exit /b 1 \ No newline at end of file +exit /b 1 diff --git a/appveyor.yml b/appveyor.yml index f5c58edda01..0dbbaa64802 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,6 +1,14 @@ +os: Windows Server 2012 R2 + init: build_script: - cmd: appveyor-build.cmd + +# scripts that run after cloning repository +install: + # by default, all script lines are interpreted as batch + - set PATH=%ProgramFiles(x86)%\MSBuild\14.0\Bin;%PATH% + test: off version: 0.0.1.{build} artifacts: diff --git a/src/FSharpSource.Settings.targets b/src/FSharpSource.Settings.targets index 5ad8a11bbb5..75ceab8fd90 100644 --- a/src/FSharpSource.Settings.targets +++ b/src/FSharpSource.Settings.targets @@ -1,4 +1,4 @@ - + @@ -26,7 +26,7 @@ false prompt AnyCPU - $(OtherFlags) --no-jit-optimize --jit-tracking + $(OtherFlags) --no-jit-optimize --jit-tracking /warnon:3180 DEBUG;TRACE;CODE_ANALYSIS;$(DefineConstants) DEBUG=True,TRACE=True,CODE_ANALYSIS=True,$(DefineConstants) false @@ -71,4 +71,14 @@ bin\$(Configuration) 3 + + + $(DefineConstants),VS_VERSION_DEV12=True + $(DefineConstants);VS_VERSION_DEV12 + + + + core + V12.0 + \ No newline at end of file diff --git a/src/FSharpSource.targets b/src/FSharpSource.targets index 84b6e0db5ef..27b47b1c008 100644 --- a/src/FSharpSource.targets +++ b/src/FSharpSource.targets @@ -11,12 +11,12 @@ true - $(OtherFlags) --version:4.3.1.9055 - $(OtherFlags) --version:2.3.1.9055 - $(OtherFlags) --version:3.3.1.9055 - $(OtherFlags) --version:2.3.5.9055 - $(OtherFlags) --version:3.78.3.9055 - $(OtherFlags) --version:3.259.3.9055 + $(OtherFlags) --version:4.4.0.9055 + $(OtherFlags) --version:2.4.0.9055 + $(OtherFlags) --version:3.7.4.9055 + $(OtherFlags) --version:3.47.4.9055 + $(OtherFlags) --version:3.78.4.9055 + $(OtherFlags) --version:3.259.4.9055 $(OtherFlags) --delaysign+ --keyfile:"$(FSharpSourcesRoot)\fsharp\msft.pubkey" STRONG_NAME_AND_DELAY_SIGN_FSHARP_COMPILER_WITH_MSFT_KEY;$(DefineConstants) true @@ -24,19 +24,19 @@ - $(OtherFlags) --version:12.0.0.9055 --delaysign+ --keyfile:"$(FSharpSourcesRoot)\fsharp\msft.pubkey" + $(OtherFlags) --version:14.0.0.9055 --delaysign+ --keyfile:"$(FSharpSourcesRoot)\fsharp\msft.pubkey" STRONG_NAME_AND_DELAY_SIGN_FSHARP_COMPILER_WITH_MSFT_KEY;$(DefineConstants) true - $(OtherFlags) --version:4.3.1.9055 --delaysign+ --keyfile:"$(FSharpSourcesRoot)\fsharp\msft.pubkey" + $(OtherFlags) --version:4.4.0.9055 --delaysign+ --keyfile:"$(FSharpSourcesRoot)\fsharp\msft.pubkey" STRONG_NAME_AND_DELAY_SIGN_FSHARP_COMPILER_WITH_MSFT_KEY;$(DefineConstants) true - $(OtherFlags) --version:4.3.1.9055 --keyfile:"$(FSharpSourcesRoot)\fsharp\test.snk" + $(OtherFlags) --version:4.4.0.9055 --keyfile:"$(FSharpSourcesRoot)\fsharp\test.snk" STRONG_NAME_FSHARP_COMPILER_WITH_TEST_KEY;$(DefineConstants) true @@ -58,7 +58,7 @@ - $(OtherFlags) --version:4.3.1.9055 + $(OtherFlags) --version:4.4.0.9055 NO_STRONG_NAMES;$(DefineConstants) @@ -112,6 +112,7 @@ $(DefineConstants);FX_ATLEAST_35 $(DefineConstants);FX_NO_STRUCTURAL_EQUALITY $(DefineConstants);FX_NO_CANCELLATIONTOKEN_CLASSES + $(DefineConstants);FX_NO_EXCEPTIONDISPATCHINFO $(DefineConstants);FX_NO_TASK $(DefineConstants);FX_NO_IOBSERVABLE $(DefineConstants);FX_NO_LAZY @@ -120,13 +121,14 @@ $(DefineConstants);FX_NO_TPL_PARALLEL $(DefineConstants);FX_NO_CUSTOMATTRIBUTEDATA $(DefineConstants);FX_NO_BIGINT + $(DefineConstants);FX_NO_CONDITIONAL_WEAK_TABLE $(OtherFlags) --simpleresolution v4.5 $(DefineConstants);FSHARP_CORE_4_5 - $(DefineConstants);FX_ATLEAST_45 + $(DefineConstants);FX_ATLEAST_45 $(DefineConstants);FX_ATLEAST_40 $(DefineConstants);FX_ATLEAST_35 $(DefineConstants);BE_SECURITY_TRANSPARENT @@ -180,6 +182,7 @@ $(DefineConstants);FX_NO_PARAMETERIZED_THREAD_START $(DefineConstants);FX_EVENTWAITHANDLE_NO_IDISPOSABLE $(DefineConstants);FX_NO_REGISTERED_WAIT_HANDLES + $(DefineConstants);FX_NO_EXCEPTIONDISPATCHINFO $(DefineConstants);FX_ATLEAST_LINQ $(DefineConstants);FX_NO_THREAD $(DefineConstants);FX_NO_THREADPOOL @@ -306,6 +309,7 @@ v3.0 $(DefineConstants);SILVERLIGHT $(DefineConstants);FX_NO_CANCELLATIONTOKEN_CLASSES + $(DefineConstants);FX_NO_EXCEPTIONDISPATCHINFO $(DefineConstants);FX_NO_TASK $(DefineConstants);FX_NO_ARRAY_LONG_LENGTH $(DefineConstants);FX_NO_DEBUG_PROXIES @@ -347,6 +351,7 @@ $(DefineConstants);SILVERLIGHT $(DefineConstants);FX_NO_ISIN_ON_PARAMETER_INFO $(DefineConstants);FX_NO_CANCELLATIONTOKEN_CLASSES + $(DefineConstants);FX_NO_EXCEPTIONDISPATCHINFO $(DefineConstants);FX_NO_TASK $(DefineConstants);FX_NO_BIGINT $(DefineConstants);FX_NO_CUSTOMATTRIBUTEDATA @@ -436,6 +441,7 @@ Silverlight $(DefineConstants);SILVERLIGHT $(DefineConstants);FX_NO_CANCELLATIONTOKEN_CLASSES + $(DefineConstants);FX_NO_EXCEPTIONDISPATCHINFO $(DefineConstants);FX_NO_TASK $(DefineConstants);FX_NO_ARRAY_LONG_LENGTH $(DefineConstants);FX_NO_DEBUG_PROXIES @@ -482,6 +488,7 @@ CompactFramework $(DefineConstants);FX_ATLEAST_COMPACT_FRAMEWORK_20 $(DefineConstants);FX_NO_CANCELLATIONTOKEN_CLASSES + $(DefineConstants);FX_NO_EXCEPTIONDISPATCHINFO $(DefineConstants);FX_NO_TASK $(DefineConstants);COMPACT_FRAMEWORK $(DefineConstants);FX_NO_ARRAY_LONG_LENGTH @@ -521,6 +528,7 @@ $(DefineConstants);FX_NO_LAZY $(DefineConstants);FX_NO_TUPLE $(DefineConstants);FX_NO_DELEGATE_CREATE_DELEGATE_FROM_STATIC_METHOD + $(DefineConstants);FX_NO_CONDITIONAL_WEAK_TABLE $(DefineConstants) $(OtherFlags) --simpleresolution -r:"C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\mscorlib.dll" -r:"C:\Program Files\Microsoft.NET\SDK\CompactFramework\v2.0\WindowsCE\System.dll" @@ -569,6 +577,7 @@ CompactFramework $(DefineConstants);FX_ATLEAST_COMPACT_FRAMEWORK_35 $(DefineConstants);FX_NO_CANCELLATIONTOKEN_CLASSES + $(DefineConstants);FX_NO_EXCEPTIONDISPATCHINFO $(DefineConstants);FX_NO_TASK $(DefineConstants);COMPACT_FRAMEWORK $(DefineConstants);FX_NO_ARRAY_LONG_LENGTH @@ -720,7 +729,7 @@ Outputs="@(CustomCopyLocal->'$(OutDir)%(TargetFilename)')" Condition="'$(targetCLIDir)'!='Silverlight/4.0/'" > - + diff --git a/src/absil/il.fs b/src/absil/il.fs index abf2097f33e..f1d827216f5 100644 --- a/src/absil/il.fs +++ b/src/absil/il.fs @@ -3,6 +3,7 @@ module internal Microsoft.FSharp.Compiler.AbstractIL.IL #nowarn "49" +#nowarn "44" // This construct is deprecated. please use List.item #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'. ... @@ -214,22 +215,18 @@ module SHA1 = else k60to79 - type chan = SHABytes of byte[] - type sha_instream = - { stream: chan; + type SHAStream = + { stream: byte[]; mutable pos: int; mutable eof: bool; } - let rot_left32 x n = (x <<< n) ||| (x >>>& (32-n)) + let rotLeft32 x n = (x <<< n) ||| (x >>>& (32-n)) - let inline sha_eof sha = sha.eof - - (* padding and length (in bits!) recorded at end *) - let sha_after_eof sha = + + // padding and length (in bits!) recorded at end + let shaAfterEof sha = let n = sha.pos - let len = - (match sha.stream with - | SHABytes s -> s.Length) + let len = sha.stream.Length if n = len then 0x80 else let padded_len = (((len + 9 + 63) / 64) * 64) - 8 @@ -244,22 +241,21 @@ module SHA1 = elif (n &&& 63) = 63 then (sha.eof <- true; int32 (int64 len * int64 8) &&& 0xff) else 0x0 - let sha_read8 sha = - let b = - match sha.stream with - | SHABytes s -> if sha.pos >= s.Length then sha_after_eof sha else int32 s.[sha.pos] - sha.pos <- sha.pos + 1; + let shaRead8 sha = + let s = sha.stream + let b = if sha.pos >= s.Length then shaAfterEof sha else int32 s.[sha.pos] + sha.pos <- sha.pos + 1 b - let sha_read32 sha = - let b0 = sha_read8 sha - let b1 = sha_read8 sha - let b2 = sha_read8 sha - let b3 = sha_read8 sha + let shaRead32 sha = + let b0 = shaRead8 sha + let b1 = shaRead8 sha + let b2 = shaRead8 sha + let b3 = shaRead8 sha let res = (b0 <<< 24) ||| (b1 <<< 16) ||| (b2 <<< 8) ||| b3 res - let sha1_hash sha = + let sha1Hash sha = let mutable h0 = 0x67452301 let mutable h1 = 0xEFCDAB89 let mutable h2 = 0x98BADCFE @@ -271,21 +267,21 @@ module SHA1 = let mutable d = 0 let mutable e = 0 let w = Array.create 80 0x00 - while (not (sha_eof sha)) do + while (not sha.eof) do for i = 0 to 15 do - w.[i] <- sha_read32 sha + w.[i] <- shaRead32 sha for t = 16 to 79 do - w.[t] <- rot_left32 (w.[t-3] ^^^ w.[t-8] ^^^ w.[t-14] ^^^ w.[t-16]) 1 + w.[t] <- rotLeft32 (w.[t-3] ^^^ w.[t-8] ^^^ w.[t-14] ^^^ w.[t-16]) 1 a <- h0 b <- h1 c <- h2 d <- h3 e <- h4 for t = 0 to 79 do - let temp = (rot_left32 a 5) + f(t,b,c,d) + e + w.[t] + k(t) + let temp = (rotLeft32 a 5) + f(t,b,c,d) + e + w.[t] + k(t) e <- d d <- c - c <- rot_left32 b 30 + c <- rotLeft32 b 30 b <- a a <- temp h0 <- h0 + a @@ -296,7 +292,7 @@ module SHA1 = h0,h1,h2,h3,h4 let sha1HashBytes s = - let (_h0,_h1,_h2,h3,h4) = sha1_hash { stream = SHABytes s; pos = 0; eof = false } // the result of the SHA algorithm is stored in registers 3 and 4 + let (_h0,_h1,_h2,h3,h4) = sha1Hash { stream = s; pos = 0; eof = false } // the result of the SHA algorithm is stored in registers 3 and 4 Array.map byte [| b0 h4; b1 h4; b2 h4; b3 h4; b0 h3; b1 h3; b2 h3; b3 h3; |] @@ -677,8 +673,8 @@ type ILTypeRef = member tref.FullName = String.concat "." (tref.Enclosing @ [tref.Name]) - member tref.BasicQualifiedName = - String.concat "+" (tref.Enclosing @ [ tref.Name ]) + member tref.BasicQualifiedName = + (String.concat "+" (tref.Enclosing @ [ tref.Name ] )).Replace(",", @"\,") member tref.AddQualifiedNameExtensionWithNoShortPrimaryAssembly(basic) = let sco = tref.Scope.QualifiedNameWithNoShortPrimaryAssembly @@ -1184,7 +1180,8 @@ and ILFilterBlock = [] type ILLocal = { Type: ILType; - IsPinned: bool } + IsPinned: bool; + DebugInfo: (string * int * int) option } type ILLocals = ILList let emptyILLocals = (ILList.empty : ILLocals) @@ -3021,9 +3018,10 @@ let mkILReturn ty : ILReturn = Type=ty; CustomAttrs=emptyILCustomAttrs } -let mkILLocal ty = +let mkILLocal ty dbgInfo = { IsPinned=false; - Type=ty; } + Type=ty; + DebugInfo=dbgInfo } type ILFieldSpec with member fr.ActualType = @@ -4385,6 +4383,8 @@ and encodeCustomAttrValue ilg ty c = match ty, c with | ILType.Boxed tspec, _ when tspec.Name = tname_Object -> [| 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 ilg elemType elem |] | _ -> @@ -4685,7 +4685,7 @@ type ILTypeSigParser(tstring : string) = let ilty = x.ParseType() ILAttribElem.Type(Some(ilty)) -let decodeILAttribData ilg (ca: ILAttribute) scope = +let decodeILAttribData ilg (ca: ILAttribute) = let bytes = ca.Data let sigptr = 0 let bb0,sigptr = sigptr_get_byte bytes sigptr @@ -4752,6 +4752,7 @@ let decodeILAttribData ilg (ca: ILAttribute) scope = parseVal ty sigptr | ILType.Array(shape,elemTy) when shape = ILArrayShape.SingleDimensional -> let n,sigptr = sigptr_get_i32 bytes sigptr + if n = 0xFFFFFFFF then ILAttribElem.Null,sigptr else let rec parseElems acc n sigptr = if n = 0 then List.rev acc else let v,sigptr = parseVal elemTy sigptr @@ -4778,15 +4779,19 @@ let decodeILAttribData ilg (ca: ILAttribute) scope = let et,sigptr = sigptr_get_u8 bytes sigptr // We have a named value let ty,sigptr = - // REVIEW: Post-M3, consider removing the restriction for scope - it's unnecessary - // because you can reconstruct scope using the qualified name from the CA Blob - if (0x50 = (int et) || 0x55 = (int et)) && Option.isSome scope then + if (0x50 = (int et) || 0x55 = (int et)) then let qualified_tname,sigptr = sigptr_get_serstring bytes sigptr - // we're already getting the qualified name from the binary blob - // if we don't split out the unqualified name from the qualified name, - // we'll write the qualified assembly reference string twice to the binary blob - let unqualified_tname = qualified_tname.Split([|','|]).[0] - let scoref = Option.get scope + let unqualified_tname, rest = + let pieces = qualified_tname.Split(',') + if pieces.Length > 1 then + pieces.[0], Some (String.concat "," pieces.[1..]) + else + pieces.[0], None + let scoref = + match rest with + | Some aname -> ILScopeRef.Assembly(ILAssemblyRef.FromAssemblyName(System.Reflection.AssemblyName(aname))) + | None -> ilg.traits.ScopeRef + let tref = mkILTyRef (scoref,unqualified_tname) let tspec = mkILNonGenericTySpec tref ILType.Value(tspec),sigptr diff --git a/src/absil/il.fsi b/src/absil/il.fsi index c141a6267f0..0d27c0c764e 100644 --- a/src/absil/il.fsi +++ b/src/absil/il.fsi @@ -970,7 +970,8 @@ type ILNativeType = [] type ILLocal = { Type: ILType; - IsPinned: bool } + IsPinned: bool; + DebugInfo: (string * int * int) option } type ILLocals = ILList @@ -1796,11 +1797,9 @@ val destTypeDefsWithGlobalFunctionsFirst: ILGlobals -> ILTypeDefs -> ILTypeDef l /// Note: 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. -/// It also does not completely decode System.Type attributes val decodeILAttribData: ILGlobals -> ILAttribute -> - ILScopeRef option -> ILAttribElem list * (* fixed args *) ILAttributeNamedArg list (* named args: values and flags indicating if they are fields or properties *) @@ -1955,7 +1954,7 @@ val mkILParam: string option * ILType -> ILParameter val mkILParamAnon: ILType -> ILParameter val mkILParamNamed: string * ILType -> ILParameter val mkILReturn: ILType -> ILReturn -val mkILLocal: ILType -> ILLocal +val mkILLocal: ILType -> (string * int * int) option -> ILLocal val mkILLocals : ILLocal list -> ILLocals val emptyILLocals : ILLocals diff --git a/src/absil/ilascii.fs b/src/absil/ilascii.fs index f2bd0a4b2d3..bd4e1e8c354 100644 --- a/src/absil/ilascii.fs +++ b/src/absil/ilascii.fs @@ -12,7 +12,7 @@ open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.Types open Microsoft.FSharp.Compiler.AbstractIL.IL -// set to the proper value at build.fs (BuildFrameworkTcImports) +// set to the proper value at CompileOps.fs (BuildFrameworkTcImports) let parseILGlobals = ref EcmaILGlobals // -------------------------------------------------------------------- diff --git a/src/absil/illib.fs b/src/absil/illib.fs index 7f2cb63dd4f..ae7d81e0652 100644 --- a/src/absil/illib.fs +++ b/src/absil/illib.fs @@ -465,6 +465,7 @@ module Dictionary = // FUTURE CLEANUP: remove this adhoc collection type Hashset<'T> = Dictionary<'T,int> + [] module Hashset = let create (n:int) = new Hashset<'T>(n, HashIdentity.Structural) @@ -498,6 +499,28 @@ type ResultOrException<'TResult> = | Result of 'TResult | Exception of System.Exception +[] +module ResultOrException = + + let success a = Result a + let raze (b:exn) = Exception b + + // map + let (|?>) res f = + match res with + | Result x -> Result(f x ) + | Exception err -> Exception err + + let ForceRaise res = + match res with + | Result x -> x + | Exception err -> raise err + + let otherwise f x = + match x with + | Result x -> success x + | Exception _err -> f() + //------------------------------------------------------------------------- // Library: extensions to flat list (immutable arrays) diff --git a/src/absil/ilmorph.fs b/src/absil/ilmorph.fs index 8df078b7db6..396db5de82a 100644 --- a/src/absil/ilmorph.fs +++ b/src/absil/ilmorph.fs @@ -292,7 +292,7 @@ let cattr_typ2typ ilg f c = // 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 (Some(meth.MethodRef.EnclosingTypeRef.Scope)) + let elems,namedArgs = IL.decodeILAttribData ilg c let elems = elems |> List.map (celem_typ2typ f) let namedArgs = namedArgs |> List.map (cnamedarg_typ2typ f) IL.mkILCustomAttribMethRef ilg (meth, elems, namedArgs) diff --git a/src/absil/ilread.fs b/src/absil/ilread.fs index 3905acda34f..11acfcee40c 100644 --- a/src/absil/ilread.fs +++ b/src/absil/ilread.fs @@ -8,6 +8,7 @@ module internal Microsoft.FSharp.Compiler.AbstractIL.ILBinaryReader #nowarn "42" // This construct is deprecated: it is only for use in the F# library +#nowarn "44" // This construct is deprecated. please use List.item open System open System.IO @@ -2205,7 +2206,8 @@ and sigptrGetLocal ctxt numtypars bytes sigptr = false, sigptr let typ, sigptr = sigptrGetTy ctxt numtypars bytes sigptr { IsPinned = pinned; - Type = typ }, sigptr + Type = typ; + DebugInfo = None }, sigptr and readBlobHeapAsMethodSig ctxt numtypars blobIdx = ctxt.readBlobHeapAsMethodSig (BlobAsMethodSigIdx (numtypars,blobIdx)) diff --git a/src/absil/ilreflect.fs b/src/absil/ilreflect.fs index bd1e1ec1a6d..efc6b644d83 100644 --- a/src/absil/ilreflect.fs +++ b/src/absil/ilreflect.fs @@ -323,26 +323,8 @@ type cenv = // [] ,name -> name // [ns] ,name -> ns+name // [ns;typeA;typeB],name -> ns+typeA+typeB+name -let getTRefType (cenv:cenv) (tref:ILTypeRef) = - - // If an inner nested type's name contains a space, the proper encoding is "\+" on both sides - otherwise, - // we use "+" - let rec collectPrefixParts (l : string list) (acc : string list) = - match l with - | h1 :: (h2 :: _ as tl) -> - collectPrefixParts tl - (List.append - acc - [ yield h1 - if h1.Contains(" ") || h2.Contains(" ") then - yield "\\+" - else - yield "+"]) - | h :: [] -> List.append acc [h] - | _ -> acc - - let prefix = collectPrefixParts tref.Enclosing [] |> List.fold (fun (s1 : string) (s2 : string) -> s1 + s2) "" - let qualifiedName = prefix + (if prefix <> "" then (if tref.Name.Contains(" ") then "\\+" else "+") else "") + tref.Name // e.g. Name.Space.Class+NestedClass +let convTypeRefAux (cenv:cenv) (tref:ILTypeRef) = + let qualifiedName = (String.concat "+" (tref.Enclosing @ [ tref.Name ])).Replace(",", @"\,") match tref.Scope with | ILScopeRef.Assembly asmref -> let assembly = @@ -355,11 +337,11 @@ let getTRefType (cenv:cenv) (tref:ILTypeRef) = let asmName = convAssemblyRef asmref FileSystem.AssemblyLoad(asmName) let typT = assembly.GetType(qualifiedName) - typT |> nonNull "GetTRefType" + typT |> nonNull "convTypeRefAux" | ILScopeRef.Module _ | ILScopeRef.Local _ -> let typT = Type.GetType(qualifiedName,true) - typT |> nonNull "GetTRefType" + typT |> nonNull "convTypeRefAux" @@ -425,11 +407,11 @@ let envUpdateCreatedTypeRef emEnv (tref:ILTypeRef) = #endif emEnv -let envGetTypT cenv emEnv preferCreated (tref:ILTypeRef) = +let convTypeRef cenv emEnv preferCreated (tref:ILTypeRef) = match Zmap.tryFind tref emEnv.emTypMap with - | Some (_typT,_typB,_typeDef,Some createdTyp) when preferCreated -> createdTyp |> nonNull "envGetTypT: null create type table?" - | Some (typT,_typB,_typeDef,_) -> typT |> nonNull "envGetTypT: null type table?" - | None -> getTRefType cenv tref + | Some (_typT,_typB,_typeDef,Some createdTyp) when preferCreated -> createdTyp |> nonNull "convTypeRef: null create type table?" + | Some (typT,_typB,_typeDef,_) -> typT |> nonNull "convTypeRef: null type table?" + | None -> convTypeRefAux cenv tref let envBindConsRef emEnv (mref:ILMethodRef) consB = {emEnv with emConsMap = Zmap.add mref consB emEnv.emConsMap} @@ -512,7 +494,7 @@ let convCallConv (Callconv (hasThis,basic)) = //---------------------------------------------------------------------------- let rec convTypeSpec cenv emEnv preferCreated (tspec:ILTypeSpec) = - let typT = envGetTypT cenv emEnv preferCreated tspec.TypeRef + let typT = convTypeRef cenv emEnv preferCreated tspec.TypeRef let tyargs = ILList.map (convTypeAux cenv emEnv preferCreated) tspec.GenericArgs match ILList.isEmpty tyargs,typT.IsGenericType with | _ ,true -> typT.MakeGenericType(ILList.toArray tyargs) |> nonNull "convTypeSpec: generic" @@ -565,12 +547,20 @@ and convTypeAux cenv emEnv preferCreated typ = /// Uses TypeBuilder/TypeBuilderInstantiation for emitted types let convType cenv emEnv typ = convTypeAux cenv emEnv false typ +// Used for ldtoken +let convTypeOrTypeDef cenv emEnv typ = + match typ with + // represents an uninstantiated "TypeDef" or "TypeRef" + | ILType.Boxed tspec when tspec.GenericArgs.IsEmpty -> convTypeRef cenv emEnv false tspec.TypeRef + | _ -> convType cenv emEnv typ + let convTypes cenv emEnv (typs:ILTypes) = ILList.map (convType cenv emEnv) typs let convTypesToArray cenv emEnv (typs:ILTypes) = convTypes cenv emEnv typs |> ILList.toArray /// Uses the .CreateType() for emitted type (if available) let convCreatedType cenv emEnv typ = convTypeAux cenv emEnv true typ +let convCreatedTypeRef cenv emEnv typ = convTypeRef cenv emEnv true typ //---------------------------------------------------------------------------- @@ -601,7 +591,14 @@ let convFieldInit x = // 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 // it isn't we resort to this technique... -let TypeBuilderInstantiationT = Type.GetType("System.Reflection.Emit.TypeBuilderInstantiation" ) +let TypeBuilderInstantiationT = + let ty = + if runningOnMono then + Type.GetType("System.Reflection.MonoGenericClass") + else + Type.GetType("System.Reflection.Emit.TypeBuilderInstantiation") + assert (not (isNull ty)) + ty let typeIsNotQueryable (typ : Type) = (typ :? TypeBuilder) || ((typ.GetType()).Equals(TypeBuilderInstantiationT)) @@ -1043,7 +1040,7 @@ let rec emitInstr cenv (modB : ModuleBuilder) emEnv (ilG:ILGenerator) instr = | I_ldstr s -> ilG.EmitAndLog(OpCodes.Ldstr ,s) | I_isinst typ -> ilG.EmitAndLog(OpCodes.Isinst ,convType cenv emEnv typ) | I_castclass typ -> ilG.EmitAndLog(OpCodes.Castclass,convType cenv emEnv typ) - | I_ldtoken (ILToken.ILType typ) -> ilG.EmitAndLog(OpCodes.Ldtoken ,convType cenv emEnv typ) + | I_ldtoken (ILToken.ILType typ) -> ilG.EmitAndLog(OpCodes.Ldtoken ,convTypeOrTypeDef cenv emEnv typ) | I_ldtoken (ILToken.ILMethod mspec) -> ilG.EmitAndLog(OpCodes.Ldtoken ,convMethodSpec cenv emEnv mspec) | I_ldtoken (ILToken.ILField fspec) -> ilG.EmitAndLog(OpCodes.Ldtoken ,convFieldSpec cenv emEnv fspec) | I_ldvirtftn mspec -> ilG.EmitAndLog(OpCodes.Ldvirtftn,convMethodSpec cenv emEnv mspec) @@ -1237,7 +1234,11 @@ let emitCode cenv modB emEnv (ilG:ILGenerator) code = let emitLocal cenv emEnv (ilG : ILGenerator) (local: ILLocal) = let ty = convType cenv emEnv local.Type - ilG.DeclareLocalAndLog(ty,local.IsPinned) + let locBuilder = ilG.DeclareLocalAndLog(ty, local.IsPinned) + match local.DebugInfo with + | Some(nm, start, finish) -> locBuilder.SetLocalSymInfo(nm, start, finish) + | None -> () + locBuilder let emitILMethodBody cenv modB emEnv (ilG:ILGenerator) ilmbody = // XXX - REVIEW: @@ -1658,20 +1659,20 @@ let typeAttributesOfTypeEncoding x = let typeAttributesOfTypeLayout cenv emEnv x = - let attr p = + let attr x p = if p.Size =None && p.Pack = None then None else Some(convCustomAttr cenv emEnv (IL.mkILCustomAttribute cenv.ilg (mkILTyRef (cenv.ilg.traits.ScopeRef,"System.Runtime.InteropServices.StructLayoutAttribute"), [mkILNonGenericValueTy (mkILTyRef (cenv.ilg.traits.ScopeRef,"System.Runtime.InteropServices.LayoutKind")) ], - [ ILAttribElem.Int32 0x02 ], + [ 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)))))) in match x with | ILTypeDefLayout.Auto -> TypeAttributes.AutoLayout,None - | ILTypeDefLayout.Explicit p -> TypeAttributes.ExplicitLayout,(attr p) - | ILTypeDefLayout.Sequential p -> TypeAttributes.SequentialLayout, (attr p) + | ILTypeDefLayout.Explicit p -> TypeAttributes.ExplicitLayout,(attr 0x02 p) + | ILTypeDefLayout.Sequential p -> TypeAttributes.SequentialLayout, (attr 0x00 p) //---------------------------------------------------------------------------- @@ -1999,7 +2000,7 @@ let emitModuleFragment (ilg, emEnv, asmB : AssemblyBuilder, modB : ModuleBuilder // 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. -let LookupTypeRef emEnv tref = Zmap.tryFind tref emEnv.emTypMap |> Option.map (function (_typ,_,_,Some createdTyp) -> createdTyp | (typ,_,_,None) -> typ) +let LookupTypeRef cenv emEnv tref = convCreatedTypeRef cenv emEnv tref let LookupType cenv emEnv typ = convCreatedType cenv emEnv typ // Lookups of ILFieldRef and MethodRef may require a similar non-Builder-fixup post Type-creation. diff --git a/src/absil/ilsupp.fs b/src/absil/ilsupp.fs index 95043734b7d..e419537b66b 100644 --- a/src/absil/ilsupp.fs +++ b/src/absil/ilsupp.fs @@ -1048,7 +1048,7 @@ let pdbCloseDocument(documentWriter : PdbDocumentWriter) = |> ignore [] -let pdbClose (writer:PdbWriter) = +let pdbClose (writer:PdbWriter) dllFilename pdbFilename = writer.symWriter.Close() // CorSymWriter objects (ISymUnmanagedWriter) lock the files they're operating // on (both the pdb and the binary). The locks are released only when their ref @@ -1061,18 +1061,21 @@ let pdbClose (writer:PdbWriter) = let rc = Marshal.ReleaseComObject(writer.symWriter) for i = 0 to (rc - 1) do Marshal.ReleaseComObject(writer.symWriter) |> ignore - - System.GC.Collect(); - System.GC.Collect(); - System.GC.WaitForPendingFinalizers(); - - System.GC.Collect(); - System.GC.Collect(); - System.GC.WaitForPendingFinalizers(); - - System.GC.Collect(); - System.GC.Collect(); - System.GC.WaitForPendingFinalizers() + + let isLocked filename = + try + use x = File.Open (filename, FileMode.Open, FileAccess.ReadWrite, FileShare.None) + false + with + | _ -> true + + let mutable attempts = 0 + while (isLocked dllFilename || isLocked pdbFilename) && attempts < 3 do + // Need to induce two full collections for finalizers to run + System.GC.Collect() + System.GC.Collect() + System.GC.WaitForPendingFinalizers() + attempts <- attempts + 1 let pdbSetUserEntryPoint (writer:PdbWriter) (entryMethodToken:int32) = writer.symWriter.SetUserEntryPoint((uint32)entryMethodToken) diff --git a/src/absil/ilsupp.fsi b/src/absil/ilsupp.fsi index db6e059c56e..5e54476a072 100644 --- a/src/absil/ilsupp.fsi +++ b/src/absil/ilsupp.fsi @@ -95,7 +95,7 @@ val pdbInitialize: string (* .exe/.dll already written and closed *) -> string (* .pdb to write *) -> PdbWriter -val pdbClose: PdbWriter -> unit +val pdbClose: PdbWriter -> string -> string -> unit val pdbCloseDocument : PdbDocumentWriter -> unit val pdbSetUserEntryPoint: PdbWriter -> int32 -> unit val pdbDefineDocument: PdbWriter -> string -> PdbDocumentWriter diff --git a/src/absil/ilwrite.fs b/src/absil/ilwrite.fs index 1ea6925fb12..b6aaa862c3f 100644 --- a/src/absil/ilwrite.fs +++ b/src/absil/ilwrite.fs @@ -35,7 +35,7 @@ let reportTime = let t = System.Diagnostics.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 - dprintf "ilwrite: TIME %10.3f (total) %10.3f (delta) - %s\n" (t - first) (t - prev) descr; + dprintf "ilwrite: TIME %10.3f (total) %10.3f (delta) - %s\n" (t - first) (t - prev) descr tPrev := Some t //--------------------------------------------------------------------- @@ -85,12 +85,12 @@ type ByteBuffer with if n >= 0 && n <= 0x7F then buf.EmitIntAsByte n elif n >= 0x80 && n <= 0x3FFF then - buf.EmitIntAsByte (0x80 ||| (n >>> 8)); + buf.EmitIntAsByte (0x80 ||| (n >>> 8)) buf.EmitIntAsByte (n &&& 0xFF) else - buf.EmitIntAsByte (0xc0l ||| ((n >>> 24) &&& 0xFF)); - buf.EmitIntAsByte ( (n >>> 16) &&& 0xFF); - buf.EmitIntAsByte ( (n >>> 8) &&& 0xFF); + buf.EmitIntAsByte (0xc0l ||| ((n >>> 24) &&& 0xFF)) + buf.EmitIntAsByte ( (n >>> 16) &&& 0xFF) + buf.EmitIntAsByte ( (n >>> 8) &&& 0xFF) buf.EmitIntAsByte ( n &&& 0xFF) member buf.EmitPadding n = @@ -142,15 +142,15 @@ let markerForUnicodeBytes (b:byte[]) = /// 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 lcoation. 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 + 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 = - data.[offset] <- b0 v; - data.[offset+1] <- b1 v; - data.[offset+2] <- b2 v; + data.[offset] <- b0 v + data.[offset+1] <- b1 v + data.[offset+2] <- b2 v data.[offset+3] <- b3 v // -------------------------------------------------------------------- @@ -160,39 +160,39 @@ let applyFixup32 (data:byte[]) offset v = type PdbDocumentData = ILSourceDocument type PdbLocalVar = - { Name: string; - Signature: byte[]; + { Name: string + Signature: byte[] /// the local index the name corresponds to Index: int32 } type PdbMethodScope = - { Children: PdbMethodScope array; - StartOffset: int; - EndOffset: int; - Locals: PdbLocalVar array; - (* REVIEW open_namespaces: pdb_namespace array; *) } + { Children: PdbMethodScope array + StartOffset: int + EndOffset: int + Locals: PdbLocalVar array + (* REVIEW open_namespaces: pdb_namespace array *) } type PdbSourceLoc = - { Document: int; - Line: int; - Column: int; } + { Document: int + Line: int + Column: int } type PdbSequencePoint = - { Document: int; - Offset: int; - Line: int; - Column: int; - EndLine: int; - EndColumn: int; } + { Document: int + Offset: int + Line: int + Column: int + EndLine: int + EndColumn: int } override x.ToString() = sprintf "(%d,%d)-(%d,%d)" x.Line x.Column x.EndLine x.EndColumn type PdbMethodData = - { MethToken: int32; - MethName:string; - Params: PdbLocalVar array; - RootScope: PdbMethodScope; - Range: (PdbSourceLoc * PdbSourceLoc) option; - SequencePoints: PdbSequencePoint array; } + { MethToken: int32 + MethName:string + Params: PdbLocalVar array + RootScope: PdbMethodScope + Range: (PdbSourceLoc * PdbSourceLoc) option + SequencePoints: PdbSequencePoint array } module SequencePoint = let orderBySource sp1 sp2 = @@ -210,10 +210,10 @@ let sizeof_IMAGE_DEBUG_DIRECTORY = 28 [] type PdbData = - { EntryPoint: int32 option; + { EntryPoint: int32 option // MVID of the generated .NET module (used by MDB files to identify debug info) - ModuleID: byte[]; - Documents: PdbDocumentData[]; + ModuleID: byte[] + Documents: PdbDocumentData[] Methods: PdbMethodData[] } //--------------------------------------------------------------------- @@ -222,7 +222,7 @@ type PdbData = //--------------------------------------------------------------------- let WritePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = - (try FileSystem.FileDelete fpdb with _ -> ()); + (try FileSystem.FileDelete fpdb with _ -> ()) let pdbw = ref Unchecked.defaultof try @@ -235,12 +235,12 @@ let WritePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = let docs = info.Documents |> Array.map (fun doc -> pdbDefineDocument !pdbw doc.File) let getDocument i = - if i < 0 || i > docs.Length then failwith "getDocument: bad doc number"; + if i < 0 || i > docs.Length then failwith "getDocument: bad doc number" docs.[i] - reportTime showTimes (sprintf "PDB: Defined %d documents" info.Documents.Length); - Array.sortInPlaceBy (fun x -> x.MethToken) info.Methods; + reportTime showTimes (sprintf "PDB: Defined %d documents" info.Documents.Length) + Array.sortInPlaceBy (fun x -> x.MethToken) info.Methods - reportTime showTimes (sprintf "PDB: Sorted %d methods" info.Methods.Length); + reportTime showTimes (sprintf "PDB: Sorted %d methods" info.Methods.Length) // This next bit is a workaround. The sequence points we get // from F# (which has nothing to do with this module) are actually expression @@ -258,7 +258,7 @@ let WritePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = let allSps = Array.mapi (fun i sp -> (i,sp)) allSps if fixupOverlappingSequencePoints then // sort the sequence points into source order - Array.sortInPlaceWith (fun (_,sp1) (_,sp2) -> SequencePoint.orderBySource sp1 sp2) allSps; + Array.sortInPlaceWith (fun (_,sp1) (_,sp2) -> SequencePoint.orderBySource sp1 sp2) allSps // shorten the ranges of any that overlap with following sequence points // sort the sequence points back into offset order for i = 0 to Array.length allSps - 2 do @@ -269,9 +269,9 @@ let WritePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = (sp1.EndLine = sp2.Line && sp1.EndColumn >= sp2.Column)) then let adjustToPrevLine = (sp1.Line < sp2.Line) - allSps.[i] <- n,{sp1 with EndLine = (if adjustToPrevLine then sp2.Line-1 else sp2.Line); - EndColumn = (if adjustToPrevLine then 80 else sp2.Column); } - Array.sortInPlaceBy fst allSps; + allSps.[i] <- n,{sp1 with EndLine = (if adjustToPrevLine then sp2.Line-1 else sp2.Line) + EndColumn = (if adjustToPrevLine then 80 else sp2.Column) } + Array.sortInPlaceBy fst allSps @@ -279,15 +279,15 @@ let WritePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = info.Methods |> Array.iteri (fun i minfo -> let sps = Array.sub allSps !spOffset spCounts.[i] - spOffset := !spOffset + spCounts.[i]; + spOffset := !spOffset + spCounts.[i] begin match minfo.Range with | None -> () | Some (a,b) -> - pdbOpenMethod !pdbw minfo.MethToken; + pdbOpenMethod !pdbw minfo.MethToken pdbSetMethodRange !pdbw (getDocument a.Document) a.Line a.Column - (getDocument b.Document) b.Line b.Column; + (getDocument b.Document) b.Line b.Column // Partition the sequence points by document let spsets = @@ -304,34 +304,34 @@ let WritePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = spsets |> List.iter (fun spset -> if spset.Length > 0 then - Array.sortInPlaceWith SequencePoint.orderByOffset 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; + // Ildiag.dprintf "token 0x%08lx has an sp at offset 0x%08x\n" minfo.MethToken sp.Offset (sp.Offset, sp.Line, sp.Column,sp.EndLine, sp.EndColumn)) // Use of alloca in implementation of pdbDefineSequencePoints can give stack overflow here if sps.Length < 5000 then - pdbDefineSequencePoints !pdbw (getDocument spset.[0].Document) sps;); + pdbDefineSequencePoints !pdbw (getDocument spset.[0].Document) sps) // Write the scopes let rec writePdbScope top sco = if top || sco.Locals.Length <> 0 || sco.Children.Length <> 0 then - pdbOpenScope !pdbw sco.StartOffset; - sco.Locals |> Array.iter (fun v -> pdbDefineLocalVariable !pdbw v.Name v.Signature v.Index); - sco.Children |> Array.iter (writePdbScope false); - pdbCloseScope !pdbw sco.EndOffset; - writePdbScope true minfo.RootScope; + pdbOpenScope !pdbw sco.StartOffset + sco.Locals |> Array.iter (fun v -> pdbDefineLocalVariable !pdbw v.Name v.Signature v.Index) + sco.Children |> Array.iter (writePdbScope false) + pdbCloseScope !pdbw sco.EndOffset + writePdbScope true minfo.RootScope pdbCloseMethod !pdbw - end); - reportTime showTimes "PDB: Wrote methods"; + end) + reportTime showTimes "PDB: Wrote methods" let res = pdbGetDebugInfo !pdbw for pdbDoc in docs do pdbCloseDocument pdbDoc - pdbClose !pdbw; - reportTime showTimes "PDB: Closed"; + pdbClose !pdbw f fpdb; + reportTime showTimes "PDB: Closed" res //--------------------------------------------------------------------- @@ -383,7 +383,7 @@ let createWriter (f:string) = let WriteMdbInfo fmdb f info = // Note, if we cant delete it code will fail later - (try FileSystem.FileDelete 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. @@ -514,7 +514,7 @@ type ILStrongNameSigner = member s.SignatureSize = try Support.signerSignatureSize(s.PublicKey) with e -> - failwith ("A call to StrongNameSignatureSize failed ("+e.Message+")"); + failwith ("A call to StrongNameSignatureSize failed ("+e.Message+")") 0x80 member s.SignFile file = @@ -755,48 +755,48 @@ let envForOverrideSpec (ospec:ILOverridesSpec) = { EnclosingTyparCount=ospec.Enc [] type MetadataTable<'T> = - { name: string; - dict: Dictionary<'T, int>; // given a row, find its entry number + { name: string + dict: Dictionary<'T, int> // given a row, find its entry number #if DEBUG - mutable lookups: int; + mutable lookups: int #endif - mutable rows: ResizeArray<'T> ; } + mutable rows: ResizeArray<'T> } member x.Count = x.rows.Count static member New(nm,hashEq) = - { name=nm; + { name=nm #if DEBUG - lookups=0; + lookups=0 #endif - dict = new Dictionary<_,_>(100, hashEq); - rows= new ResizeArray<_>(); } + dict = new Dictionary<_,_>(100, hashEq) + rows= new ResizeArray<_>() } member tbl.EntriesAsArray = #if DEBUG - if showEntryLookups then dprintf "--> table %s had %d entries and %d lookups\n" tbl.name tbl.Count tbl.lookups; + 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 = #if DEBUG - if showEntryLookups then dprintf "--> table %s had %d entries and %d lookups\n" tbl.name tbl.Count tbl.lookups; + if showEntryLookups then dprintf "--> table %s had %d entries and %d lookups\n" tbl.name tbl.Count tbl.lookups #endif tbl.rows |> ResizeArray.toList member tbl.AddSharedEntry x = let n = tbl.rows.Count + 1 - tbl.dict.[x] <- n; - tbl.rows.Add(x); + tbl.dict.[x] <- n + tbl.rows.Add(x) n member tbl.AddUnsharedEntry x = let n = tbl.rows.Count + 1 - tbl.rows.Add(x); + tbl.rows.Add(x) n member tbl.FindOrAddSharedEntry x = #if DEBUG - tbl.lookups <- tbl.lookups + 1; + tbl.lookups <- tbl.lookups + 1 #endif let mutable res = Unchecked.defaultof<_> let ok = tbl.dict.TryGetValue(x,&res) @@ -806,9 +806,9 @@ type MetadataTable<'T> = /// This is only used in one special place - see further below. member tbl.SetRowsOfTable t = - tbl.rows <- ResizeArray.ofArray t; + tbl.rows <- ResizeArray.ofArray t let h = tbl.dict - h.Clear(); + h.Clear() t |> Array.iteri (fun i x -> h.[x] <- (i+1)) member tbl.AddUniqueEntry nm geterr x = @@ -877,52 +877,52 @@ type TypeDefTableKey = TdKey of string list (* enclosing *) * string (* type nam [] type cenv = - { primaryAssembly: ILScopeRef; - ilg: ILGlobals; - emitTailcalls: bool; - showTimes: bool; - desiredMetadataVersion: ILVersionInfo; - requiredDataFixups: (int32 * (int * bool)) list ref; + { primaryAssembly: ILScopeRef + ilg: ILGlobals + emitTailcalls: 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; - mutable nextCodeAddr: int32; + mutable requiredStringFixups: (int32 * (int * int) list) list + codeChunks: ByteBuffer + mutable nextCodeAddr: int32 // Collected debug information mutable moduleGuid: byte[] - generatePdb: bool; - pdbinfo: ResizeArray; - documents: MetadataTable; + generatePdb: bool + pdbinfo: ResizeArray + documents: MetadataTable /// Raw data, to go into the data section - data: ByteBuffer; + data: ByteBuffer /// Raw resource data, to go into the data section - resources: ByteBuffer; - mutable entrypoint: (bool * int) option; + resources: ByteBuffer + mutable entrypoint: (bool * int) option /// Caches - trefCache: Dictionary; + trefCache: Dictionary /// The following are all used to generate unique items in the output - tables: array>; - AssemblyRefs: MetadataTable; - fieldDefs: MetadataTable; - methodDefIdxsByKey: MetadataTable; - methodDefIdxs: Dictionary; - propertyDefs: MetadataTable; - eventDefs: MetadataTable; - typeDefs: MetadataTable; - guids: MetadataTable; - blobs: MetadataTable; - strings: MetadataTable; - userStrings: MetadataTable; + tables: array> + AssemblyRefs: MetadataTable + fieldDefs: MetadataTable + methodDefIdxsByKey: MetadataTable + methodDefIdxs: Dictionary + propertyDefs: MetadataTable + eventDefs: MetadataTable + typeDefs: MetadataTable + guids: MetadataTable + blobs: MetadataTable + strings: MetadataTable + userStrings: MetadataTable } member cenv.GetTable (tab:TableName) = cenv.tables.[tab.Index] 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; + 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() @@ -964,14 +964,14 @@ let peOptionalHeaderByteByCLRVersion v = // returned by writeBinaryAndReportMappings [] type ILTokenMappings = - { TypeDefTokenMap: ILTypeDef list * ILTypeDef -> int32; - FieldDefTokenMap: ILTypeDef list * ILTypeDef -> ILFieldDef -> int32; - MethodDefTokenMap: ILTypeDef list * ILTypeDef -> ILMethodDef -> int32; - PropertyTokenMap: ILTypeDef list * ILTypeDef -> ILPropertyDef -> int32; + { TypeDefTokenMap: ILTypeDef list * ILTypeDef -> int32 + FieldDefTokenMap: ILTypeDef list * ILTypeDef -> ILFieldDef -> int32 + MethodDefTokenMap: ILTypeDef list * ILTypeDef -> ILMethodDef -> int32 + PropertyTokenMap: ILTypeDef list * ILTypeDef -> ILPropertyDef -> int32 EventTokenMap: ILTypeDef list * ILTypeDef -> ILEventDef -> int32 } let recordRequiredDataFixup requiredDataFixups (buf: ByteBuffer) pos lab = - requiredDataFixups := (pos,lab) :: !requiredDataFixups; + requiredDataFixups := (pos,lab) :: !requiredDataFixups // Write a special value in that we check later when applying the fixup buf.EmitInt32 0xdeaddddd @@ -1007,7 +1007,7 @@ let GetTypeNameAsElemPair cenv n = //===================================================================== let rec GenTypeDefPass1 enc cenv (td:ILTypeDef) = - ignore (cenv.typeDefs.AddUniqueEntry "type index" (fun (TdKey (_,n)) -> n) (TdKey (enc,td.Name))); + 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 @@ -1053,9 +1053,9 @@ and GetModuleRefAsRow cenv (mref:ILModuleRef) = and GetModuleRefAsFileRow cenv (mref:ILModuleRef) = SimpleSharedRow - [| 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)); |] + [| 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 = FindOrAddRow cenv TableNames.ModuleRef (GetModuleRefAsRow cenv mref) @@ -1094,7 +1094,7 @@ and GetTypeRefAsTypeRefIdx cenv tref = let mutable res = 0 if cenv.trefCache.TryGetValue(tref,&res) then res else let res = FindOrAddRow cenv TableNames.TypeRef (GetTypeRefAsTypeRefRow cenv tref) - cenv.trefCache.[tref] <- res; + cenv.trefCache.[tref] <- res res and GetTypeDescAsTypeRefIdx cenv (scoref,enc,n) = @@ -1131,10 +1131,10 @@ let getTypeDefOrRefAsUncodedToken (tag,idx) = 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; + 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 "?") let hasthisToByte hasthis = @@ -1158,13 +1158,13 @@ let callconvToByte ntypars (Callconv (hasthis,bcc)) = // REVIEW: write into an accumuating buffer let rec EmitTypeSpec cenv env (bb: ByteBuffer) (et,tspec:ILTypeSpec) = if ILList.isEmpty tspec.GenericArgs then - bb.EmitByte et; + bb.EmitByte et emitTypeInfoAsTypeDefOrRefEncoded cenv bb (tspec.Scope,tspec.Enclosing,tspec.Name) else - bb.EmitByte et_WITH; - bb.EmitByte et; - emitTypeInfoAsTypeDefOrRefEncoded cenv bb (tspec.Scope,tspec.Enclosing,tspec.Name); - bb.EmitZ32 tspec.GenericArgs.Length; + 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) = @@ -1218,41 +1218,41 @@ and EmitType cenv env bb ty = | ILType.TypeVar tv -> let cgparams = env.EnclosingTyparCount if int32 tv < cgparams then - bb.EmitByte et_VAR; + bb.EmitByte et_VAR bb.EmitZ32 (int32 tv) else - bb.EmitByte et_MVAR; + bb.EmitByte et_MVAR bb.EmitZ32 (int32 tv - cgparams) | ILType.Byref typ -> - bb.EmitByte et_BYREF; + bb.EmitByte et_BYREF EmitType cenv env bb typ | ILType.Ptr typ -> - bb.EmitByte et_PTR; + bb.EmitByte et_PTR EmitType cenv env bb typ | ILType.Void -> bb.EmitByte et_VOID | ILType.FunctionPointer x -> - bb.EmitByte et_FNPTR; + bb.EmitByte et_FNPTR EmitCallsig cenv env bb (x.CallingConv,x.ArgTypes,x.ReturnType,None,0) | ILType.Modified (req,tref,ty) -> - bb.EmitByte (if req then et_CMOD_REQD else et_CMOD_OPT); - emitTypeInfoAsTypeDefOrRefEncoded cenv bb (tref.Scope, tref.Enclosing,tref.Name); + bb.EmitByte (if req then et_CMOD_REQD else et_CMOD_OPT) + emitTypeInfoAsTypeDefOrRefEncoded cenv bb (tref.Scope, tref.Enclosing,tref.Name) EmitType cenv env bb ty | _ -> failwith "EmitType" 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 |> ILList.iter (EmitType cenv env bb); + 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 |> ILList.iter (EmitType cenv env bb) match varargs with | None -> ()// no extra arg = no sentinel | Some tys -> if ILList.isEmpty tys then () // no extra arg = no sentinel else - bb.EmitByte et_SENTINEL; + bb.EmitByte et_SENTINEL ILList.iter (EmitType cenv env bb) tys and GetCallsigAsBytes cenv env x = emitBytesViaBuffer (fun bb -> EmitCallsig cenv env bb x) @@ -1300,41 +1300,41 @@ and EmitNativeType bb ty = let u1 = System.Text.Encoding.UTF8.GetBytes nativeTypeName let u2 = System.Text.Encoding.UTF8.GetBytes custMarshallerName let u3 = cookieString - 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.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; + bb.EmitByte nt_FIXEDSYSSTRING bb.EmitZ32 i | ILNativeType.FixedArray i -> - bb.EmitByte nt_FIXEDARRAY; + bb.EmitByte nt_FIXEDARRAY bb.EmitZ32 i | (* COM interop *) ILNativeType.SafeArray (vt,name) -> - bb.EmitByte nt_SAFEARRAY; - bb.EmitZ32 (GetVariantTypeAsInt32 vt); + bb.EmitByte nt_SAFEARRAY + bb.EmitZ32 (GetVariantTypeAsInt32 vt) 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; + bb.EmitByte nt_ARRAY match nt with | None -> bb.EmitZ32 (int nt_MAX) | Some ntt -> (if ntt = ILNativeType.Empty then bb.EmitZ32 (int nt_MAX) else - EmitNativeType bb ntt); + 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 - bb.EmitZ32 pnum; + bb.EmitZ32 pnum (* ElemMul *) (* z_u32 0x1l *) match additive with | None -> () @@ -1450,11 +1450,11 @@ let rec GetTypeDefAsRow cenv env _enc (td:ILTypeDef) = let tdorTag, tdorRow = GetTypeOptionAsTypeDefOrRef cenv env td.Extends UnsharedRow - [| ULong flags ; - nelem; - nselem; - TypeDefOrRefOrSpec (tdorTag, tdorRow); - SimpleIndex (TableNames.Field, cenv.fieldDefs.Count + 1); + [| 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 = @@ -1464,12 +1464,12 @@ and GetTypeOptionAsTypeDefOrRef cenv env tyOpt = and GetTypeDefAsPropertyMapRow cenv tidx = UnsharedRow - [| SimpleIndex (TableNames.TypeDef, tidx); + [| SimpleIndex (TableNames.TypeDef, tidx) SimpleIndex (TableNames.Property, cenv.propertyDefs.Count + 1) |] and GetTypeDefAsEventMapRow cenv tidx = UnsharedRow - [| SimpleIndex (TableNames.TypeDef, tidx); + [| SimpleIndex (TableNames.TypeDef, tidx) SimpleIndex (TableNames.Event, cenv.eventDefs.Count + 1) |] and GetKeyForFieldDef tidx (fd: ILFieldDef) = @@ -1486,10 +1486,10 @@ and GenMethodDefPass2 cenv tidx md = cenv.methodDefIdxsByKey.AddUniqueEntry "method" (fun (key:MethodDefKey) -> - dprintn "Duplicate in method table is:"; - dprintn (" Type index: "+string key.TypeIdx); - dprintn (" Method name: "+key.Name); - dprintn (" Method arity (num generic params): "+string key.GenericArity); + dprintn "Duplicate in method table is:" + dprintn (" Type index: "+string key.TypeIdx) + dprintn (" Method name: "+key.Name) + dprintn (" Method arity (num generic params): "+string key.GenericArity) key.Name ) (GetKeyForMethodDef tidx md) @@ -1505,7 +1505,7 @@ and GenPropertyDefPass2 cenv tidx x = and GetTypeAsImplementsRow cenv env tidx ty = let tdorTag,tdorRow = GetTypeAsTypeDefOrRef cenv env ty UnsharedRow - [| SimpleIndex (TableNames.TypeDef, tidx); + [| SimpleIndex (TableNames.TypeDef, tidx) TypeDefOrRefOrSpec (tdorTag,tdorRow) |] and GenImplementsPass2 cenv env tidx ty = @@ -1522,33 +1522,33 @@ and GenTypeDefPass2 pidx enc cenv (td:ILTypeDef) = 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"; + 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 differntly to the others... if nonNil enc then AddUnsharedRow cenv TableNames.Nested (UnsharedRow - [| SimpleIndex (TableNames.TypeDef, tidx); - SimpleIndex (TableNames.TypeDef, pidx) |]) |> ignore; + [| SimpleIndex (TableNames.TypeDef, tidx) + SimpleIndex (TableNames.TypeDef, pidx) |]) |> ignore let props = td.Properties.AsList if nonNil props then - AddUnsharedRow cenv TableNames.PropertyMap (GetTypeDefAsPropertyMapRow cenv tidx) |> ignore; + AddUnsharedRow cenv TableNames.PropertyMap (GetTypeDefAsPropertyMapRow cenv tidx) |> ignore let events = td.Events.AsList if nonNil events then - AddUnsharedRow cenv TableNames.EventMap (GetTypeDefAsEventMapRow cenv tidx) |> ignore; + 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. - td.Implements |> ILList.iter (GenImplementsPass2 cenv env tidx); - props |> List.iter (GenPropertyDefPass2 cenv tidx); - events |> List.iter (GenEventDefPass2 cenv tidx); - td.Fields.AsList |> List.iter (GenFieldDefPass2 cenv tidx); - td.Methods |> Seq.iter (GenMethodDefPass2 cenv tidx); + td.Implements |> ILList.iter (GenImplementsPass2 cenv env tidx) + props |> List.iter (GenPropertyDefPass2 cenv tidx) + events |> List.iter (GenEventDefPass2 cenv tidx) + td.Fields.AsList |> List.iter (GenFieldDefPass2 cenv tidx) + td.Methods |> Seq.iter (GenMethodDefPass2 cenv tidx) td.NestedTypes.AsList |> GenTypeDefsPass2 tidx (enc@[td.Name]) cenv with e -> - failwith ("Error in pass2 for type "+td.Name+", error: "+e.Message); + failwith ("Error in pass2 for type "+td.Name+", error: "+e.Message) and GenTypeDefsPass2 pidx enc cenv tds = List.iter (GenTypeDefPass2 pidx enc cenv) tds @@ -1575,14 +1575,14 @@ let FindMethodDefIdx cenv mdkey = | Some x -> x | 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); + 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 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 (sprintf "mdkey2: %A" mdkey2)) ; + dprintn ("A method in '"+(String.concat "." (tenc2@[tname2]))+"' had the right name but the wrong signature:") + dprintn ("generic arity: "+string mdkey2.GenericArity) + dprintn (sprintf "mdkey2: %A" mdkey2)) raise MethodDefNotFound @@ -1592,7 +1592,7 @@ let rec GetMethodDefIdx cenv md = and FindFieldDefIdx cenv fdkey = try cenv.fieldDefs.GetTableEntry fdkey with :? KeyNotFoundException -> - errorR(InternalError("The local field "+fdkey.Name+" was referenced but not declared",range0)); + errorR(InternalError("The local field "+fdkey.Name+" was referenced but not declared",range0)) 1 and GetFieldDefAsFieldDefIdx cenv tidx fd = @@ -1609,12 +1609,12 @@ let GetMethodRefAsMethodDefIdx cenv (mref:ILMethodRef) = let tref = mref.EnclosingTypeRef 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; + 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)) let mdkey = MethodDefKey (tidx,mref.GenericArity, mref.Name, mref.ReturnType, mref.ArgTypes, mref.CallingConv.IsStatic) FindMethodDefIdx cenv mdkey with e -> - failwithf "Error in GetMethodRefAsMethodDefIdx for mref = %A, error: %s" (mref.Name, tref.Name) e.Message; + failwithf "Error in GetMethodRefAsMethodDefIdx for mref = %A, error: %s" (mref.Name, tref.Name) e.Message let rec MethodRefInfoAsMemberRefRow cenv env fenv (nm,typ,callconv,args,ret,varargs,genarity) = MemberRefRow(GetTypeAsMemberRefParent cenv env typ, @@ -1631,7 +1631,7 @@ let GetMethodRefInfoAsMemberRefIdx cenv env ((_,typ,_,_,_,_,_) as minfo) = let GetMethodRefInfoAsMethodRefOrDef isAlwaysMethodDef cenv env ((nm,typ:ILType,cc,args,ret,varargs,genarity) as minfo) = if isNone varargs && (isAlwaysMethodDef || isTypeLocal typ) then - if not typ.IsNominal then failwith "GetMethodRefInfoAsMethodRefOrDef: unexpected local tref-typ"; + if not typ.IsNominal then failwith "GetMethodRefInfoAsMethodRefOrDef: unexpected local tref-typ" try (mdor_MethodDef, GetMethodRefAsMethodDefIdx cenv (mkILMethRefRaw(typ.TypeRef, cc, nm, genarity, args,ret))) with MethodDefNotFound -> (mdor_MemberRef, GetMethodRefInfoAsMemberRefIdx cenv env minfo) else (mdor_MemberRef, GetMethodRefInfoAsMemberRefIdx cenv env minfo) @@ -1645,12 +1645,12 @@ let rec GetMethodSpecInfoAsMethodSpecIdx cenv env (nm,typ,cc,args,ret,varargs,mi let mdorTag,mdorRow = GetMethodRefInfoAsMethodRefOrDef false cenv env (nm,typ,cc,args,ret,varargs,minst.Length) let blob = emitBytesViaBuffer (fun bb -> - bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_GENERICINST; - bb.EmitZ32 minst.Length; + bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_GENERICINST + bb.EmitZ32 minst.Length minst |> ILList.iter (EmitType cenv env bb)) FindOrAddRow cenv TableNames.MethodSpec (SimpleSharedRow - [| MethodDefOrRef (mdorTag,mdorRow); + [| MethodDefOrRef (mdorTag,mdorRow) Blob (GetBytesAsBlobIdx cenv blob) |]) and GetMethodDefOrRefAsUncodedToken (tag,idx) = @@ -1709,7 +1709,7 @@ let rec GetOverridesSpecAsMemberRefIdx cenv env ospec = and GetOverridesSpecAsMethodDefOrRef cenv env (ospec:ILOverridesSpec) = let typ = ospec.EnclosingType if isTypeLocal typ then - if not typ.IsNominal then failwith "GetOverridesSpecAsMethodDefOrRef: unexpected local tref-typ"; + if not typ.IsNominal then failwith "GetOverridesSpecAsMethodDefOrRef: unexpected local tref-typ" try (mdor_MethodDef, GetMethodRefAsMethodDefIdx cenv ospec.MethodRef) with MethodDefNotFound -> (mdor_MemberRef, GetOverridesSpecAsMemberRefIdx cenv env ospec) else @@ -1752,9 +1752,9 @@ let rec GetCustomAttrDataAsBlobIdx cenv (data:byte[]) = and GetCustomAttrRow cenv hca attr = let cat = GetMethodRefAsCustomAttribType cenv attr.Method.MethodRef UnsharedRow - [| HasCustomAttribute (fst hca, snd hca); - CustomAttributeType (fst cat, snd cat); - Blob (GetCustomAttrDataAsBlobIdx cenv attr.Data); |] + [| HasCustomAttribute (fst hca, snd hca) + CustomAttributeType (fst cat, snd cat) + Blob (GetCustomAttrDataAsBlobIdx cenv attr.Data) |] and GenCustomAttrPass3Or4 cenv hca attr = AddUnsharedRow cenv TableNames.CustomAttribute (GetCustomAttrRow cenv hca attr) |> ignore @@ -1768,9 +1768,9 @@ and GenCustomAttrsPass3Or4 cenv hca (attrs: ILAttributes) = let rec GetSecurityDeclRow cenv hds (PermissionSet (action, s)) = UnsharedRow - [| UShort (uint16 (List.assoc action (Lazy.force ILSecurityActionMap))); - HasDeclSecurity (fst hds, snd hds); - Blob (GetBytesAsBlobIdx cenv s); |] + [| UShort (uint16 (List.assoc action (Lazy.force ILSecurityActionMap))) + HasDeclSecurity (fst hds, snd hds) + Blob (GetBytesAsBlobIdx cenv s) |] and GenSecurityDeclPass3 cenv hds attr = AddUnsharedRow cenv TableNames.Permission (GetSecurityDeclRow cenv hds attr) |> ignore @@ -1793,7 +1793,7 @@ and GetFieldSpecAsMemberRefIdx cenv env fspec = // REVIEW: write into an accumuating buffer and EmitFieldSpecSig cenv env (bb: ByteBuffer) (fspec:ILFieldSpec) = - bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD; + bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD EmitType cenv env bb fspec.FormalType and GetFieldSpecSigAsBytes cenv env x = @@ -1805,7 +1805,7 @@ and GetFieldSpecSigAsBlobIdx cenv env x = and GetFieldSpecAsFieldDefOrRef cenv env (fspec:ILFieldSpec) = let typ = fspec.EnclosingType if isTypeLocal typ then - if not typ.IsNominal then failwith "GetFieldSpecAsFieldDefOrRef: unexpected local tref-typ"; + if not typ.IsNominal then failwith "GetFieldSpecAsFieldDefOrRef: unexpected local tref-typ" let tref = typ.TypeRef let tidx = GetIdxForTypeDef cenv (TdKey(tref.Enclosing,tref.Name)) let fdkey = FieldDefKey (tidx,fspec.Name, fspec.FormalType) @@ -1838,8 +1838,8 @@ let GetCallsigAsStandAloneSigIdx cenv env info = // -------------------------------------------------------------------- let EmitLocalSig cenv env (bb: ByteBuffer) (locals: ILLocals) = - bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_LOCAL_SIG; - bb.EmitZ32 locals.Length; + bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_LOCAL_SIG + bb.EmitZ32 locals.Length locals |> ILList.iter (fun l -> EmitType cenv env bb l.Type) let GetLocalSigAsBlobHeapIdx cenv env locals = @@ -1867,21 +1867,21 @@ type CodeBuffer = // - locations of embedded handles into the string table // - the exception table // -------------------------------------------------------------------- - { code: ByteBuffer; + { 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 ; + mutable reqdBrFixups: ((int * int option) * int * ILCodeLabel list) list + availBrFixups: Dictionary /// code loc to fixup in code buffer - mutable reqdStringFixupsInMethod: (int * int) list; + mutable reqdStringFixupsInMethod: (int * int) list /// data for exception handling clauses - mutable seh: ExceptionClauseSpec list; - seqpoints: ResizeArray; } + mutable seh: ExceptionClauseSpec list + seqpoints: ResizeArray } static member Create _nm = - { seh = []; - code= ByteBuffer.Create 200; - reqdBrFixups=[]; - reqdStringFixupsInMethod=[]; + { seh = [] + code= ByteBuffer.Create 200 + reqdBrFixups=[] + reqdStringFixupsInMethod=[] availBrFixups = Dictionary<_,_>(10, HashIdentity.Structural) seqpoints = new ResizeArray<_>(10) } @@ -1893,12 +1893,12 @@ type CodeBuffer = // 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; } + { 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 @@ -1908,17 +1908,17 @@ type CodeBuffer = member codebuf.EmitUncodedToken u = codebuf.EmitInt32 u member codebuf.RecordReqdStringFixup stringidx = - codebuf.reqdStringFixupsInMethod <- (codebuf.code.Position, stringidx) :: codebuf.reqdStringFixupsInMethod; + codebuf.reqdStringFixupsInMethod <- (codebuf.code.Position, stringidx) :: codebuf.reqdStringFixupsInMethod // Write a special value in that we check later when applying the fixup codebuf.EmitInt32 0xdeadbeef member codebuf.RecordReqdBrFixups i tgs = - codebuf.reqdBrFixups <- (i, codebuf.code.Position, tgs) :: codebuf.reqdBrFixups; + 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 + codebuf.EmitByte 0x11 // for the instruction (if fst i = i_switch then - codebuf.EmitInt32 tgs.Length); + codebuf.EmitInt32 tgs.Length) List.iter (fun _ -> codebuf.EmitInt32 0xdeadbbbb) tgs member codebuf.RecordReqdBrFixup i tg = codebuf.RecordReqdBrFixups i [tg] @@ -1973,25 +1973,25 @@ module Codebuf = begin // Copy over a chunk of non-branching code let nobranch_len = origEndOfNoBranchBlock - origStartOfNoBranchBlock - newCode.EmitBytes origCode.[origStartOfNoBranchBlock..origStartOfNoBranchBlock+nobranch_len-1]; + 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 - adjustments := (origStartOfNoBranchBlock,origEndOfNoBranchBlock,newStartOfNoBranchBlock) :: !adjustments; + adjustments := (origStartOfNoBranchBlock,origEndOfNoBranchBlock,newStartOfNoBranchBlock) :: !adjustments // Increment locations to the branch instruction we're really interested in - origWhere := origEndOfNoBranchBlock; - newWhere := !newWhere + nobranch_len; + 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 doneLast := true 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)"; + remainingReqdFixups := List.tail !remainingReqdFixups + if origCode.[origStartOfInstr] <> 0x11uy then failwith "br fixup sanity check failed (1)" let i_length = if fst i = i_switch then 5 else 1 - origWhere := !origWhere + i_length; + origWhere := !origWhere + i_length let origEndOfInstr = origStartOfInstr + i_length + 4 * tgs.Length let newEndOfInstrIfSmall = !newWhere + i_length + 1 @@ -2005,7 +2005,7 @@ module Codebuf = begin // Use the original offsets to compute if the branch is small or large. This is // a safe approximation because code only gets smaller. if not (origAvailBrFixups.ContainsKey tg) then - dprintn ("branch target " + formatCodeLabel tg + " not found in code"); + dprintn ("branch target " + formatCodeLabel tg + " not found in code") let origDest = if origAvailBrFixups.ContainsKey tg then origAvailBrFixups.[tg] else 666666 @@ -2013,33 +2013,33 @@ module Codebuf = begin -128 <= origRelOffset && origRelOffset <= 127 end -> - newCode.EmitIntAsByte i_short; + newCode.EmitIntAsByte i_short true | (i_long,_),_ -> - newCode.EmitIntAsByte i_long; + newCode.EmitIntAsByte i_long (if i_long = i_switch then - newCode.EmitInt32 tgs.Length); + newCode.EmitInt32 tgs.Length) false - newWhere := !newWhere + i_length; - if !newWhere <> newCode.Position then dprintn "mismatch between newWhere and newCode"; + 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; + checkFixup32 origCode origFixupLoc 0xdeadbbbb if short then - newReqdBrFixups := (!newWhere, newEndOfInstrIfSmall, tg, true) :: !newReqdBrFixups; - newCode.EmitIntAsByte 0x98; (* sanity check *) - newWhere := !newWhere + 1; + newReqdBrFixups := (!newWhere, newEndOfInstrIfSmall, tg, true) :: !newReqdBrFixups + newCode.EmitIntAsByte 0x98 (* sanity check *) + newWhere := !newWhere + 1 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); + 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"; + if !origWhere <> origEndOfInstr then dprintn "mismatch between origWhere and origEndOfInstr" let adjuster = let arr = Array.ofList (List.rev !adjustments) @@ -2074,25 +2074,25 @@ module Codebuf = begin let newScopes = let rec remap scope = - {scope with StartOffset = adjuster scope.StartOffset; - EndOffset = adjuster scope.EndOffset; + {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 newReqdBrFixups |> List.iter (fun (newFixupLoc,endOfInstr,tg, small) -> if not (newAvailBrFixups.ContainsKey tg) then - failwith ("target "+formatCodeLabel tg+" not found in new fixups"); + failwith ("target "+formatCodeLabel tg+" not found in new fixups") try let n = newAvailBrFixups.[tg] let relOffset = (n - endOfInstr) if small then - if Bytes.get newCode newFixupLoc <> 0x98 then failwith "br fixupsanity check failed"; - newCode.[newFixupLoc] <- b0 relOffset; + if Bytes.get newCode newFixupLoc <> 0x98 then failwith "br fixupsanity check failed" + newCode.[newFixupLoc] <- b0 relOffset else - checkFixup32 newCode newFixupLoc 0xf00dd00fl; + checkFixup32 newCode newFixupLoc 0xf00dd00fl applyFixup32 newCode newFixupLoc relOffset - with :? KeyNotFoundException -> ()); + with :? KeyNotFoundException -> ()) newCode, newReqdStringFixups, newExnClauses, newSeqPoints, newScopes @@ -2129,44 +2129,44 @@ module Codebuf = begin /// 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); + 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; + emitInstrCode codebuf i codebuf.EmitUncodedToken (getTypeDefOrRefAsUncodedToken (GetTypeAsTypeDefOrRef cenv env ty)) let emitMethodSpecInfoInstr cenv codebuf env i mspecinfo = - emitInstrCode codebuf i; + emitInstrCode codebuf i codebuf.EmitUncodedToken (GetMethodSpecInfoAsUncodedToken cenv env mspecinfo) let emitMethodSpecInstr cenv codebuf env i mspec = - emitInstrCode codebuf i; + emitInstrCode codebuf i codebuf.EmitUncodedToken (GetMethodSpecAsUncodedToken cenv env mspec) let emitFieldSpecInstr cenv codebuf env i fspec = - emitInstrCode codebuf i; + emitInstrCode codebuf i codebuf.EmitUncodedToken (GetFieldDefOrRefAsUncodedToken (GetFieldSpecAsFieldDefOrRef cenv env fspec)) let emitShortUInt16Instr codebuf (i_short,i) x = let n = int32 x if n <= 255 then - emitInstrCode codebuf i_short; - codebuf.EmitByte n; + emitInstrCode codebuf i_short + codebuf.EmitByte n else - emitInstrCode codebuf i; - codebuf.EmitUInt16 x; + emitInstrCode codebuf i + codebuf.EmitUInt16 x 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); + emitInstrCode codebuf i_short + codebuf.EmitByte (if x < 0x0 then x + 256 else x) else - emitInstrCode codebuf i; - codebuf.EmitInt32 x; + emitInstrCode codebuf i + codebuf.EmitInt32 x let emitTailness (cenv: cenv) codebuf tl = if tl = Tailcall && cenv.emitTailcalls then emitInstrCode codebuf i_tail @@ -2178,7 +2178,7 @@ module Codebuf = begin if tl = Volatile then emitInstrCode codebuf i_volatile let emitConstrained cenv codebuf env ty = - emitInstrCode codebuf i_constrained; + emitInstrCode codebuf i_constrained codebuf.EmitUncodedToken (getTypeDefOrRefAsUncodedToken (GetTypeAsTypeDefOrRef cenv env ty)) let emitAlignment codebuf tl = @@ -2198,17 +2198,17 @@ module Codebuf = begin | I_seqpoint s -> codebuf.EmitSeqPoint cenv s | I_leave tg -> codebuf.RecordReqdBrFixup (i_leave,Some i_leave_s) tg | I_call (tl,mspec,varargs) -> - emitTailness cenv codebuf tl; - emitMethodSpecInstr cenv codebuf env i_call (mspec,varargs); + emitTailness cenv codebuf tl + emitMethodSpecInstr cenv codebuf env i_call (mspec,varargs) emitAfterTailcall codebuf tl | I_callvirt (tl,mspec,varargs) -> - emitTailness cenv codebuf tl; - emitMethodSpecInstr cenv codebuf env i_callvirt (mspec,varargs); + emitTailness cenv codebuf tl + emitMethodSpecInstr cenv codebuf env i_callvirt (mspec,varargs) emitAfterTailcall codebuf tl | I_callconstraint (tl,ty,mspec,varargs) -> - emitTailness cenv codebuf tl; - emitConstrained cenv codebuf env ty; - emitMethodSpecInstr cenv codebuf env i_callvirt (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) -> emitMethodSpecInstr cenv codebuf env i_newobj (mspec,varargs) @@ -2218,9 +2218,9 @@ module Codebuf = begin emitMethodSpecInstr cenv codebuf env i_ldvirtftn (mspec,None) | I_calli (tl,callsig,varargs) -> - emitTailness cenv codebuf tl; - emitInstrCode codebuf i_calli; - codebuf.EmitUncodedToken (getUncodedToken TableNames.StandAloneSig (GetCallsigAsStandAloneSigIdx cenv env (callsig,varargs))); + emitTailness cenv codebuf tl + 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 @@ -2231,29 +2231,29 @@ module Codebuf = begin | I_ldloca u16 -> emitShortUInt16Instr codebuf (i_ldloca_s,i_ldloca) u16 | I_cpblk (al,vol) -> - emitAlignment codebuf al; - emitVolatility codebuf vol; + emitAlignment codebuf al + emitVolatility codebuf vol emitInstrCode codebuf i_cpblk | I_initblk (al,vol) -> - emitAlignment codebuf al; - emitVolatility codebuf vol; + emitAlignment codebuf al + emitVolatility codebuf vol emitInstrCode codebuf i_initblk | (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; - codebuf.EmitInt64 x; + emitInstrCode codebuf i_ldc_i8 + codebuf.EmitInt64 x | (AI_ldc (_, ILConst.R4 x)) -> - emitInstrCode codebuf i_ldc_r4; + emitInstrCode codebuf i_ldc_r4 codebuf.EmitInt32 (bitsOfSingle x) | (AI_ldc (_, ILConst.R8 x)) -> - emitInstrCode codebuf i_ldc_r8; + emitInstrCode codebuf i_ldc_r8 codebuf.EmitInt64 (bitsOfDouble x) | I_ldind (al,vol,dt) -> - emitAlignment codebuf al; - emitVolatility codebuf vol; + emitAlignment codebuf al + emitVolatility codebuf vol emitInstrCode codebuf (match dt with | DT_I -> i_ldind_i @@ -2299,8 +2299,8 @@ module Codebuf = begin | _ -> failwith "ldelem") | I_stind (al,vol,dt) -> - emitAlignment codebuf al; - emitVolatility codebuf vol; + emitAlignment codebuf al + emitVolatility codebuf vol emitInstrCode codebuf (match dt with | DT_U | DT_I -> i_stind_i @@ -2316,26 +2316,26 @@ module Codebuf = begin | I_switch (labs,_) -> codebuf.RecordReqdBrFixups (i_switch,None) labs | I_ldfld (al,vol,fspec) -> - emitAlignment codebuf al; - emitVolatility codebuf vol; + emitAlignment codebuf al + emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_ldfld fspec | I_ldflda fspec -> emitFieldSpecInstr cenv codebuf env i_ldflda fspec | I_ldsfld (vol,fspec) -> - emitVolatility codebuf vol; + emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_ldsfld fspec | I_ldsflda fspec -> emitFieldSpecInstr cenv codebuf env i_ldsflda fspec | I_stfld (al,vol,fspec) -> - emitAlignment codebuf al; - emitVolatility codebuf vol; + emitAlignment codebuf al + emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_stfld fspec | I_stsfld (vol,fspec) -> - emitVolatility codebuf vol; + emitVolatility codebuf vol emitFieldSpecInstr cenv codebuf env i_stsfld fspec | I_ldtoken tok -> - emitInstrCode codebuf i_ldtoken; + emitInstrCode codebuf i_ldtoken codebuf.EmitUncodedToken (match tok with | ILToken.ILType typ -> @@ -2355,7 +2355,7 @@ module Codebuf = begin | (true,idx) -> getUncodedToken TableNames.Field idx | (false,idx) -> getUncodedToken TableNames.MemberRef idx) | I_ldstr s -> - emitInstrCode codebuf i_ldstr; + emitInstrCode codebuf i_ldstr codebuf.RecordReqdStringFixup (GetUserStringHeapIdx cenv s) | I_box ty -> emitTypeInstr cenv codebuf env i_box ty @@ -2385,7 +2385,7 @@ module Codebuf = begin | I_ldelema (ro,_isNativePtr,shape,ty) -> if (ro = ReadonlyAddress) then - emitInstrCode codebuf i_readonly; + emitInstrCode codebuf i_readonly if (shape = ILArrayShape.SingleDimensional) then emitTypeInstr cenv codebuf env i_ldelema ty else @@ -2398,17 +2398,17 @@ module Codebuf = begin | 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; - emitVolatility codebuf vol; + emitAlignment codebuf al + emitVolatility codebuf vol emitTypeInstr cenv codebuf env i_ldobj ty | I_stobj (al,vol,ty) -> - emitAlignment codebuf al; - emitVolatility codebuf vol; + 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) -> - emitShortInt32Instr codebuf (i_ldc_i4_s,i_ldc_i4) 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" @@ -2417,31 +2417,31 @@ module Codebuf = begin let mkScopeNode cenv (localSigs: _[]) (a,b,ls,ch) = if (isNil ls || not cenv.generatePdb) then ch else - [ { Children= Array.ofList ch; - StartOffset=a; - EndOffset=b; + [ { Children= Array.ofList ch + StartOffset=a + EndOffset=b Locals= Array.ofList (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")); + (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 } ) (List.filter (fun v -> v.LocalName <> "") ls)) } ] let rec emitCode cenv localSigs codebuf env (susp,code) = match code with | TryBlock (c,seh) -> - commitSusp codebuf susp (uniqueEntryOfCode c); + commitSusp codebuf susp (uniqueEntryOfCode c) let tryStart = codebuf.code.Position let susp,child1,scope1 = emitCode cenv localSigs codebuf env (None,c) - commitSuspNoDest codebuf susp; + commitSuspNoDest codebuf susp let tryFinish = codebuf.code.Position let exnBranches = match seh with | FaultBlock flt -> let handlerStart = codebuf.code.Position let susp,child2,scope2 = emitCode cenv localSigs codebuf env (None,flt) - commitSuspNoDest codebuf susp; + commitSuspNoDest codebuf susp let handlerFinish = codebuf.code.Position [ Some (tryStart,(tryFinish - tryStart), handlerStart,(handlerFinish - handlerStart), @@ -2451,7 +2451,7 @@ module Codebuf = begin | FinallyBlock flt -> let handlerStart = codebuf.code.Position let susp,child2,scope2 = emitCode cenv localSigs codebuf env (None,flt) - commitSuspNoDest codebuf susp; + commitSuspNoDest codebuf susp let handlerFinish = codebuf.code.Position [ Some (tryStart,(tryFinish - tryStart), handlerStart,(handlerFinish - handlerStart), @@ -2464,7 +2464,7 @@ module Codebuf = begin | TypeFilter typ -> let handlerStart = codebuf.code.Position let susp,child2,scope2 = emitCode cenv localSigs codebuf env (None,ctch) - commitSuspNoDest codebuf susp; + commitSuspNoDest codebuf susp let handlerFinish = codebuf.code.Position Some (tryStart,(tryFinish - tryStart), handlerStart,(handlerFinish - handlerStart), @@ -2474,10 +2474,10 @@ module Codebuf = begin let filterStart = codebuf.code.Position let susp,child2,scope2 = emitCode cenv localSigs codebuf env (None,fltcode) - commitSuspNoDest codebuf susp; + commitSuspNoDest codebuf susp let handlerStart = codebuf.code.Position let susp,child3,scope3 = emitCode cenv localSigs codebuf env (None,ctch) - commitSuspNoDest codebuf susp; + commitSuspNoDest codebuf susp let handlerFinish = codebuf.code.Position Some (tryStart, @@ -2506,8 +2506,8 @@ module Codebuf = begin let childScopes = ref [] // Push the results of collecting one sub-block into the reference cells let collect (susp,seh,scopes) = - newSusp := susp; - childSEH := seh :: !childSEH; + newSusp := susp + childSEH := seh :: !childSEH childScopes := scopes :: !childScopes // Close the collection by generating the (susp,node,scope-node) triple let close () = @@ -2520,12 +2520,12 @@ module Codebuf = begin | [c] -> // emitCodeLinear sequence of nested blocks emitCodeLinear (!newSusp,c) (fun results -> - collect results; + collect results cont (close())) | codes -> // Multiple blocks: leave the linear sequence and process each seperately - codes |> List.iter (fun c -> collect (emitCode cenv localSigs codebuf env (!newSusp,c))); + codes |> List.iter (fun c -> collect (emitCode cenv localSigs codebuf env (!newSusp,c))) cont(close()) | c -> // leave the linear sequence @@ -2536,11 +2536,11 @@ module Codebuf = begin | ILBasicBlock bb -> // Leaf case: one basic block - commitSusp codebuf susp bb.Label; - codebuf.RecordAvailBrFixup bb.Label; + commitSusp codebuf susp bb.Label + codebuf.RecordAvailBrFixup bb.Label let instrs = bb.Instructions for i = 0 to instrs.Length - 1 do - emitInstr cenv codebuf env instrs.[i]; + emitInstr cenv codebuf env instrs.[i] bb.Fallthrough, Tip, [] and brToSusp (codebuf: CodeBuffer) dest = codebuf.RecordReqdBrFixup (i_br,Some i_br_s) dest @@ -2562,7 +2562,7 @@ module Codebuf = begin | Node clauses -> List.iter (emitExceptionHandlerTree2 codebuf) clauses and emitExceptionHandlerTree2 (codebuf: CodeBuffer) (x,childSEH) = - List.iter (emitExceptionHandlerTree codebuf) childSEH; // internal first + List.iter (emitExceptionHandlerTree codebuf) childSEH // internal first match x with | None -> () | Some clause -> codebuf.EmitExceptionClause clause @@ -2571,8 +2571,8 @@ module Codebuf = begin let codebuf = CodeBuffer.Create nm let finalSusp, SEHTree, origScopes = emitCode cenv localSigs codebuf env (Some (uniqueEntryOfCode code),code) - (match finalSusp with Some dest -> brToSusp codebuf dest | _ -> ()); - emitExceptionHandlerTree codebuf SEHTree; + (match finalSusp with Some dest -> brToSusp codebuf dest | _ -> ()) + emitExceptionHandlerTree codebuf SEHTree let origCode = codebuf.code.Close() let origExnClauses = List.rev codebuf.seh let origReqdStringFixups = codebuf.reqdStringFixupsInMethod @@ -2584,10 +2584,10 @@ module Codebuf = begin applyBrFixups origCode origExnClauses origReqdStringFixups origAvailBrFixups origReqdBrFixups origSeqPoints origScopes let rootScope = - { Children= Array.ofList newScopes; - StartOffset=0; - EndOffset=newCode.Length; - Locals=[| |]; } + { Children= Array.ofList newScopes + StartOffset=0 + EndOffset=newCode.Length + Locals=[| |] } (newReqdStringFixups,newExnClauses, newCode, newSeqPoints, rootScope) @@ -2597,7 +2597,7 @@ end // ILMethodBody --> bytes // -------------------------------------------------------------------- let GetFieldDefTypeAsBlobIdx cenv env ty = - let bytes = emitBytesViaBuffer (fun bb -> bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD; + let bytes = emitBytesViaBuffer (fun bb -> bb.EmitByte e_IMAGE_CEE_CS_CALLCONV_FIELD EmitType cenv env bb ty) GetBytesAsBlobIdx cenv bytes @@ -2606,7 +2606,7 @@ let GenILMethodBody mname cenv env (il: ILMethodBody) = if cenv.generatePdb then il.Locals |> ILList.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 (FindOrAddRow cenv TableNames.StandAloneSig (SimpleSharedRow [| Blob (GetFieldDefTypeAsBlobIdx cenv env l.Type) |])); + ignore (FindOrAddRow cenv TableNames.StandAloneSig (SimpleSharedRow [| Blob (GetFieldDefTypeAsBlobIdx cenv env l.Type) |])) // Now write the type GetTypeAsBytes cenv env l.Type) else @@ -2621,9 +2621,9 @@ let GenILMethodBody mname cenv env (il: ILMethodBody) = 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; + methbuf.EmitByte (byte codeSize <<< 2 ||| e_CorILMethod_TinyFormat) + methbuf.EmitBytes code + methbuf.EmitPadding codePadding (requiredStringFixups', methbuf.Close()), seqpoints, scopes else // Use Fat format @@ -2640,13 +2640,13 @@ let GenILMethodBody mname cenv env (il: ILMethodBody) = 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.EmitUInt16 (uint16 il.MaxStack); - methbuf.EmitInt32 codeSize; - methbuf.EmitInt32 localToken; - methbuf.EmitBytes code; - methbuf.EmitPadding codePadding; + 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 nonNil seh then // Can we use the small exception handling table format? @@ -2669,31 +2669,31 @@ let GenILMethodBody mname cenv env (il: ILMethodBody) = | TypeFilterClause uncoded -> uncoded if canUseSmall then - methbuf.EmitByte e_CorILMethod_Sect_EHTable; - methbuf.EmitByte (b0 smallSize); - methbuf.EmitByte 0x00uy; - methbuf.EmitByte 0x00uy; + methbuf.EmitByte e_CorILMethod_Sect_EHTable + methbuf.EmitByte (b0 smallSize) + methbuf.EmitByte 0x00uy + methbuf.EmitByte 0x00uy 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.EmitByte (b0 sz2); + methbuf.EmitInt32AsUInt16 k32 + methbuf.EmitInt32AsUInt16 st1 + methbuf.EmitByte (b0 sz1) + methbuf.EmitInt32AsUInt16 st2 + methbuf.EmitByte (b0 sz2) methbuf.EmitInt32 (kindAsExtraInt32 kind)) 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); + 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) -> let k32 = kindAsInt32 kind - methbuf.EmitInt32 k32; - methbuf.EmitInt32 st1; - methbuf.EmitInt32 sz1; - methbuf.EmitInt32 st2; - methbuf.EmitInt32 sz2; + methbuf.EmitInt32 k32 + methbuf.EmitInt32 st1 + methbuf.EmitInt32 sz1 + methbuf.EmitInt32 st2 + methbuf.EmitInt32 sz2 methbuf.EmitInt32 (kindAsExtraInt32 kind)) let requiredStringFixups' = (12,requiredStringFixups) @@ -2717,21 +2717,21 @@ let rec GetFieldDefAsFieldDefRow cenv env (fd: ILFieldDef) = (if (fd.Marshal <> None) then 0x1000 else 0x0) ||| (if (fd.Data <> None) then 0x0100 else 0x0) UnsharedRow - [| UShort (uint16 flags); - StringE (GetStringHeapIdx cenv fd.Name); - Blob (GetFieldDefSigAsBlobIdx cenv env fd ); |] + [| UShort (uint16 flags) + StringE (GetStringHeapIdx cenv fd.Name) + Blob (GetFieldDefSigAsBlobIdx cenv env fd ) |] and GetFieldDefSigAsBlobIdx cenv env fd = GetFieldDefTypeAsBlobIdx cenv env fd.Type and GenFieldDefPass3 cenv env fd = let fidx = AddUnsharedRow cenv TableNames.Field (GetFieldDefAsFieldDefRow cenv env fd) - GenCustomAttrsPass3Or4 cenv (hca_FieldDef,fidx) fd.CustomAttrs; + GenCustomAttrsPass3Or4 cenv (hca_FieldDef,fidx) fd.CustomAttrs // 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; + cenv.data.EmitBytes b AddUnsharedRow cenv TableNames.FieldRVA (UnsharedRow [| Data (offs, false); SimpleIndex (TableNames.Field,fidx) |]) |> ignore // Write FieldMarshal table @@ -2739,7 +2739,7 @@ and GenFieldDefPass3 cenv env fd = | None -> () | Some ntyp -> AddUnsharedRow cenv TableNames.FieldMarshal - (UnsharedRow [| HasFieldMarshal (hfm_FieldDef, fidx); + (UnsharedRow [| HasFieldMarshal (hfm_FieldDef, fidx) Blob (GetNativeTypeAsBlobIdx cenv ntyp) |]) |> ignore // Write Contant table match fd.LiteralValue with @@ -2747,16 +2747,15 @@ and GenFieldDefPass3 cenv env fd = | Some i -> AddUnsharedRow cenv TableNames.Constant (UnsharedRow - [| GetFieldInitFlags i; - HasConstant (hc_FieldDef, fidx); + [| GetFieldInitFlags i + HasConstant (hc_FieldDef, fidx) Blob (GetFieldInitAsBlobIdx cenv i) |]) |> ignore // Write FieldLayout table match fd.Offset with | None -> () | Some offset -> AddUnsharedRow cenv TableNames.FieldLayout - (UnsharedRow [| ULong offset; - SimpleIndex (TableNames.Field, fidx) |]) |> ignore + (UnsharedRow [| ULong offset; SimpleIndex (TableNames.Field, fidx) |]) |> ignore // -------------------------------------------------------------------- @@ -2776,22 +2775,22 @@ let rec GetGenericParamAsGenericParamRow cenv _env idx owner gp = let mdVersionMajor,_ = metadataSchemaVersionSupportedByCLRVersion cenv.desiredMetadataVersion if (mdVersionMajor = 1) then SimpleSharedRow - [| 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 *) |] + [| 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 SimpleSharedRow - [| UShort (uint16 idx); - UShort (uint16 flags); - TypeOrMethodDef (fst owner, snd owner); + [| UShort (uint16 idx) + UShort (uint16 flags) + TypeOrMethodDef (fst owner, snd owner) StringE (GetStringHeapIdx cenv gp.Name) |] and GenTypeAsGenericParamConstraintRow cenv env gpidx ty = let tdorTag,tdorRow = GetTypeAsTypeDefOrRef cenv env ty UnsharedRow - [| SimpleIndex (TableNames.GenericParam, gpidx); + [| SimpleIndex (TableNames.GenericParam, gpidx) TypeDefOrRefOrSpec (tdorTag,tdorRow) |] and GenGenericParamConstraintPass4 cenv env gpidx ty = @@ -2822,8 +2821,8 @@ let rec GetParamAsParamRow cenv _env seq param = (if param.Marshal <> None then 0x2000 else 0x0000) UnsharedRow - [| UShort (uint16 flags); - UShort (uint16 seq); + [| UShort (uint16 flags) + UShort (uint16 seq) StringE (GetStringHeapIdxOption cenv param.Name) |] and GenParamPass3 cenv env seq param = @@ -2831,32 +2830,31 @@ and GenParamPass3 cenv env seq param = then () else let pidx = AddUnsharedRow cenv TableNames.Param (GetParamAsParamRow cenv env seq param) - GenCustomAttrsPass3Or4 cenv (hca_ParamDef,pidx) param.CustomAttrs; + GenCustomAttrsPass3Or4 cenv (hca_ParamDef,pidx) param.CustomAttrs // Write FieldRVA table - fixups into data section done later match param.Marshal with | None -> () | Some ntyp -> AddUnsharedRow cenv TableNames.FieldMarshal - (UnsharedRow [| HasFieldMarshal (hfm_ParamDef, pidx); - Blob (GetNativeTypeAsBlobIdx cenv ntyp) |]) |> ignore + (UnsharedRow [| HasFieldMarshal (hfm_ParamDef, pidx); Blob (GetNativeTypeAsBlobIdx cenv ntyp) |]) |> ignore let GenReturnAsParamRow (returnv : ILReturn) = let flags = (if returnv.Marshal <> None then 0x2000 else 0x0000) UnsharedRow - [| UShort (uint16 flags); - UShort 0us; (* sequence num. *) + [| UShort (uint16 flags) + UShort 0us (* sequence num. *) StringE 0 |] let GenReturnPass3 cenv (returnv: ILReturn) = if isSome returnv.Marshal || nonNil returnv.CustomAttrs.AsList then let pidx = AddUnsharedRow cenv TableNames.Param (GenReturnAsParamRow returnv) - GenCustomAttrsPass3Or4 cenv (hca_ParamDef,pidx) returnv.CustomAttrs; + GenCustomAttrsPass3Or4 cenv (hca_ParamDef,pidx) returnv.CustomAttrs match returnv.Marshal with | None -> () | Some ntyp -> AddUnsharedRow cenv TableNames.FieldMarshal (UnsharedRow - [| HasFieldMarshal (hfm_ParamDef, pidx); + [| HasFieldMarshal (hfm_ParamDef, pidx) Blob (GetNativeTypeAsBlobIdx cenv ntyp) |]) |> ignore // -------------------------------------------------------------------- @@ -2865,10 +2863,10 @@ let GenReturnPass3 cenv (returnv: ILReturn) = let GetMethodDefSigAsBytes cenv env (mdef: ILMethodDef) = emitBytesViaBuffer (fun bb -> - bb.EmitByte (callconvToByte mdef.GenericParams.Length mdef.CallingConv); - if mdef.GenericParams.Length > 0 then bb.EmitZ32 mdef.GenericParams.Length; - bb.EmitZ32 mdef.Parameters.Length; - EmitType cenv env bb mdef.Return.Type; + bb.EmitByte (callconvToByte mdef.GenericParams.Length mdef.CallingConv) + if mdef.GenericParams.Length > 0 then bb.EmitZ32 mdef.GenericParams.Length + bb.EmitZ32 mdef.Parameters.Length + EmitType cenv env bb mdef.Return.Type mdef.ParameterTypes |> ILList.iter (EmitType cenv env bb)) let GenMethodDefSigAsBlobIdx cenv env mdef = @@ -2910,7 +2908,7 @@ let GenMethodDefAsRow cenv env midx (md: ILMethodDef) = if md.IsEntryPoint then if cenv.entrypoint <> None then failwith "duplicate entrypoint" - else cenv.entrypoint <- Some (true, midx); + else cenv.entrypoint <- Some (true, midx) let codeAddr = (match md.mdBody.Contents with | MethodBody.IL ilmbody -> @@ -2920,37 +2918,37 @@ let GenMethodDefAsRow cenv env midx (md: ILMethodDef) = // 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; - Params= [| |]; (* REVIEW *) - RootScope = rootScope; + { MethToken=getUncodedToken TableNames.Method midx + MethName=md.Name + Params= [| |] (* REVIEW *) + RootScope = 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 - Some ({ Document=doc; - Line=m.Line; - Column=m.Column; }, - { Document=doc; - Line=m.EndLine; - Column=m.EndColumn; }) + Some ({ Document=doc + Line=m.Line + Column=m.Column }, + { Document=doc + Line=m.EndLine + Column=m.EndColumn }) | _ -> None - SequencePoints=seqpoints; }; + SequencePoints=seqpoints } - cenv.AddCode code; + cenv.AddCode code addr | MethodBody.Native -> - failwith "cannot write body of native method - Abstract IL cannot roundtrip mixed native/managed binaries"; + 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); + [| 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 = @@ -2958,19 +2956,19 @@ let GenMethodImplPass3 cenv env _tgparams tidx mimpl = let midx2Tag, midx2Row = GetOverridesSpecAsMethodDefOrRef cenv env mimpl.Overrides AddUnsharedRow cenv TableNames.MethodImpl (UnsharedRow - [| SimpleIndex (TableNames.TypeDef, tidx); - MethodDefOrRef (midxTag, midxRow); + [| SimpleIndex (TableNames.TypeDef, tidx) + MethodDefOrRef (midxTag, midxRow) MethodDefOrRef (midx2Tag, midx2Row) |]) |> ignore 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 |> ILList.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) ; + 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 |> ILList.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.mdBody.Contents with | MethodBody.PInvoke attr -> let flags = @@ -3002,10 +3000,10 @@ let GenMethodDefPass3 cenv env (md:ILMethodDef) = (if attr.LastError then 0x0040 else 0x0000) AddUnsharedRow cenv TableNames.ImplMap (UnsharedRow - [| UShort (uint16 flags); - MemberForwarded (mf_MethodDef,midx); - StringE (GetStringHeapIdx cenv attr.Name); - SimpleIndex (TableNames.ModuleRef, GetModuleRefAsIdx cenv attr.Where); |]) |> ignore + [| UShort (uint16 flags) + MemberForwarded (mf_MethodDef,midx) + StringE (GetStringHeapIdx cenv attr.Name) + SimpleIndex (TableNames.ModuleRef, GetModuleRefAsIdx cenv attr.Where) |]) |> ignore | _ -> () let GenMethodDefPass4 cenv env md = @@ -3017,8 +3015,8 @@ let GenPropertyMethodSemanticsPass3 cenv pidx kind mref = let midx = try GetMethodRefAsMethodDefIdx cenv mref with MethodDefNotFound -> 1 AddUnsharedRow cenv TableNames.MethodSemantics (UnsharedRow - [| UShort (uint16 kind); - SimpleIndex (TableNames.Method,midx); + [| UShort (uint16 kind) + SimpleIndex (TableNames.Method,midx) HasSemantics (hs_Property, pidx) |]) |> ignore let rec GetPropertySigAsBlobIdx cenv env prop = @@ -3027,9 +3025,9 @@ let rec GetPropertySigAsBlobIdx cenv env prop = and GetPropertySigAsBytes cenv env prop = 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.Type; + bb.EmitByte b + bb.EmitZ32 prop.Args.Length + EmitType cenv env bb prop.Type prop.Args |> ILList.iter (EmitType cenv env bb)) and GetPropertyAsPropertyRow cenv env (prop:ILPropertyDef) = @@ -3038,23 +3036,23 @@ and GetPropertyAsPropertyRow cenv env (prop:ILPropertyDef) = (if prop.IsRTSpecialName then 0x0400 else 0x0) ||| (if prop.Init <> None then 0x1000 else 0x0) UnsharedRow - [| UShort (uint16 flags); - StringE (GetStringHeapIdx cenv prop.Name); - Blob (GetPropertySigAsBlobIdx cenv env prop); |] + [| UShort (uint16 flags) + StringE (GetStringHeapIdx cenv prop.Name) + Blob (GetPropertySigAsBlobIdx cenv env prop) |] /// ILPropertyDef --> Property Row + MethodSemantics entries 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) ; + 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 - [| GetFieldInitFlags i; - HasConstant (hc_Property, pidx); + [| GetFieldInitFlags i + HasConstant (hc_Property, pidx) Blob (GetFieldInitAsBlobIdx cenv i) |]) |> ignore GenCustomAttrsPass3Or4 cenv (hca_Property,pidx) prop.CustomAttrs @@ -3062,8 +3060,8 @@ let rec GenEventMethodSemanticsPass3 cenv eidx kind mref = let addIdx = try GetMethodRefAsMethodDefIdx cenv mref with MethodDefNotFound -> 1 AddUnsharedRow cenv TableNames.MethodSemantics (UnsharedRow - [| UShort (uint16 kind); - SimpleIndex (TableNames.Method,addIdx); + [| UShort (uint16 kind) + SimpleIndex (TableNames.Method,addIdx) HasSemantics (hs_Event, eidx) |]) |> ignore /// ILEventDef --> Event Row + MethodSemantics entries @@ -3073,8 +3071,8 @@ and GenEventAsEventRow cenv env (md: ILEventDef) = (if md.IsRTSpecialName then 0x0400 else 0x0) let tdorTag, tdorRow = GetTypeOptionAsTypeDefOrRef cenv env md.Type UnsharedRow - [| UShort (uint16 flags); - StringE (GetStringHeapIdx cenv md.Name); + [| UShort (uint16 flags) + StringE (GetStringHeapIdx cenv md.Name) TypeDefOrRefOrSpec (tdorTag,tdorRow) |] and GenEventPass3 cenv env (md: ILEventDef) = @@ -3082,7 +3080,7 @@ and GenEventPass3 cenv env (md: ILEventDef) = 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; + List.iter (GenEventMethodSemanticsPass3 cenv eidx 0x0004) md.OtherMethods GenCustomAttrsPass3Or4 cenv (hca_Event,eidx) md.CustomAttrs @@ -3101,17 +3099,17 @@ let rec GetResourceAsManifestResourceRow cenv r = let alignedOffset = (align 0x8 offset) let pad = alignedOffset - offset let resourceSize = b.Length - cenv.resources.EmitPadding pad; - cenv.resources.EmitInt32 resourceSize; - cenv.resources.EmitBytes b; + cenv.resources.EmitPadding pad + cenv.resources.EmitInt32 resourceSize + cenv.resources.EmitBytes b Data (alignedOffset,true), (i_File, 0) | ILResourceLocation.File (mref,offset) -> ULong offset, (i_File, GetModuleRefAsFileIdx cenv mref) | ILResourceLocation.Assembly aref -> ULong 0x0, (i_AssemblyRef, GetAssemblyRefAsIdx cenv aref) UnsharedRow - [| data; - ULong (match r.Access with ILResourceAccess.Public -> 0x01 | ILResourceAccess.Private -> 0x02); - StringE (GetStringHeapIdx cenv r.Name); - Implementation (fst impl, snd impl); |] + [| data + ULong (match r.Access with ILResourceAccess.Public -> 0x01 | ILResourceAccess.Private -> 0x02) + StringE (GetStringHeapIdx cenv r.Name) + Implementation (fst impl, snd impl) |] and GenResourcePass3 cenv r = let idx = AddUnsharedRow cenv TableNames.ManifestResource (GetResourceAsManifestResourceRow cenv r) @@ -3125,11 +3123,11 @@ let rec GenTypeDefPass3 enc cenv (td:ILTypeDef) = try let env = envForTypeDef td let tidx = GetIdxForTypeDef cenv (TdKey(enc,td.Name)) - td.Properties.AsList |> List.iter (GenPropertyPass3 cenv env); - td.Events.AsList |> List.iter (GenEventPass3 cenv env); - 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); + td.Properties.AsList |> List.iter (GenPropertyPass3 cenv env) + td.Events.AsList |> List.iter (GenEventPass3 cenv env) + 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 | ILTypeDefLayout.Auto -> () @@ -3137,16 +3135,16 @@ let rec GenTypeDefPass3 enc cenv (td:ILTypeDef) = if isSome layout.Pack || isSome layout.Size then AddUnsharedRow cenv TableNames.ClassLayout (UnsharedRow - [| UShort (match layout.Pack with None -> uint16 0x0 | Some p -> p); - ULong (match layout.Size with None -> 0x0 | Some p -> p); + [| UShort (match layout.Pack with None -> uint16 0x0 | Some p -> p) + ULong (match layout.Size with None -> 0x0 | Some p -> p) 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.NestedTypes.AsList |> GenTypeDefsPass3 (enc@[td.Name]) cenv; + 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.NestedTypes.AsList |> GenTypeDefsPass3 (enc@[td.Name]) cenv with e -> - failwith ("Error in pass3 for type "+td.Name+", error: "+e.Message); + failwith ("Error in pass3 for type "+td.Name+", error: "+e.Message) reraise() raise e @@ -3160,11 +3158,11 @@ 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; - GenTypeDefsPass4 (enc@[td.Name]) cenv td.NestedTypes.AsList; + 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); + failwith ("Error in pass4 for type "+td.Name+", error: "+e.Message) reraise() raise e @@ -3180,12 +3178,12 @@ let rec GenNestedExportedTypePass3 cenv cidx (ce: ILNestedExportedType) = let nidx = AddUnsharedRow cenv TableNames.ExportedType (UnsharedRow - [| ULong flags ; - ULong 0x0; - StringE (GetStringHeapIdx cenv ce.Name); - StringE 0; + [| ULong flags + ULong 0x0 + StringE (GetStringHeapIdx cenv ce.Name) + StringE 0 Implementation (i_ExportedType, cidx) |]) - GenCustomAttrsPass3Or4 cenv (hca_ExportedType,nidx) ce.CustomAttrs; + GenCustomAttrsPass3Or4 cenv (hca_ExportedType,nidx) ce.CustomAttrs GenNestedExportedTypesPass3 cenv nidx ce.Nested and GenNestedExportedTypesPass3 cenv nidx (nce: ILNestedExportedTypes) = @@ -3199,16 +3197,16 @@ and GenExportedTypePass3 cenv (ce: ILExportedTypeOrForwarder) = let cidx = AddUnsharedRow cenv TableNames.ExportedType (UnsharedRow - [| ULong flags ; - ULong 0x0; - nelem; - nselem; - Implementation (fst impl, snd impl); |]) - GenCustomAttrsPass3Or4 cenv (hca_ExportedType,cidx) ce.CustomAttrs; + [| ULong flags + ULong 0x0 + nelem + nselem + Implementation (fst impl, snd impl) |]) + GenCustomAttrsPass3Or4 cenv (hca_ExportedType,cidx) ce.CustomAttrs GenNestedExportedTypesPass3 cenv cidx ce.Nested and GenExportedTypesPass3 cenv (ce: ILExportedTypesAndForwarders) = - List.iter (GenExportedTypePass3 cenv) ce.AsList; + List.iter (GenExportedTypePass3 cenv) ce.AsList // -------------------------------------------------------------------- // manifest --> generate Assembly row @@ -3216,11 +3214,11 @@ and GenExportedTypesPass3 cenv (ce: ILExportedTypesAndForwarders) = and GetManifsetAsAssemblyRow cenv m = UnsharedRow - [|ULong m.AuxModuleHashAlgorithm; - UShort (match m.Version with None -> 0us | Some (x,_,_,_) -> x); - UShort (match m.Version with None -> 0us | Some (_,y,_,_) -> y); - UShort (match m.Version with None -> 0us | Some (_,_,z,_) -> z); - UShort (match m.Version with None -> 0us | Some (_,_,_,w) -> w); + [|ULong m.AuxModuleHashAlgorithm + UShort (match m.Version with None -> 0us | Some (x,_,_,_) -> x) + UShort (match m.Version with None -> 0us | Some (_,y,_,_) -> y) + UShort (match m.Version with None -> 0us | Some (_,_,z,_) -> z) + UShort (match m.Version with None -> 0us | Some (_,_,_,w) -> w) ULong ( (match m.AssemblyLongevity with | ILAssemblyLongevity.Unspecified -> 0x0000 @@ -3235,21 +3233,21 @@ and GetManifsetAsAssemblyRow cenv m = (if m.JitTracking then 0x8000 else 0x0) ||| (if m.DisableJitOptimizations then 0x4000 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)); |] + 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 = let aidx = AddUnsharedRow cenv TableNames.Assembly (GetManifsetAsAssemblyRow cenv m) - GenSecurityDeclsPass3 cenv (hds_Assembly,aidx) m.SecurityDecls.AsList; - GenCustomAttrsPass3Or4 cenv (hca_Assembly,aidx) m.CustomAttrs; - GenExportedTypesPass3 cenv m.ExportedTypes; + 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. match m.EntrypointElsewhere with | Some mref -> if cenv.entrypoint <> None then failwith "duplicate entrypoint" - else cenv.entrypoint <- Some (false, GetModuleRefAsIdx cenv mref); + else cenv.entrypoint <- Some (false, GetModuleRefAsIdx cenv mref) | None -> () and newGuid (modul: ILModuleDef) = @@ -3263,10 +3261,10 @@ and GetModuleAsRow cenv (modul: ILModuleDef) = let modulGuid = newGuid modul cenv.moduleGuid <- modulGuid UnsharedRow - [| UShort (uint16 0x0); - StringE (GetStringHeapIdx cenv modul.Name); - Guid (GetGuidIdx cenv modulGuid); - Guid 0; + [| UShort (uint16 0x0) + StringE (GetStringHeapIdx cenv modul.Name) + Guid (GetGuidIdx cenv modulGuid) + Guid 0 Guid 0 |] @@ -3290,63 +3288,63 @@ let SortTableRows tab (rows:IGenericRow[]) = 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; - reportTime cenv.showTimes "Module Generation Pass 1"; - GenTypeDefsPass2 0 [] cenv tds; - reportTime cenv.showTimes "Module Generation Pass 2"; - (match modul.Manifest with None -> () | Some m -> GenManifestPass3 cenv m); - GenTypeDefsPass3 [] cenv tds; - reportTime cenv.showTimes "Module Generation Pass 3"; - GenCustomAttrsPass3Or4 cenv (hca_Module,midx) modul.CustomAttrs; + reportTime cenv.showTimes "Module Generation Preparation" + GenTypeDefsPass1 [] cenv tds + reportTime cenv.showTimes "Module Generation Pass 1" + GenTypeDefsPass2 0 [] cenv tds + reportTime cenv.showTimes "Module Generation Pass 2" + (match modul.Manifest with None -> () | Some m -> GenManifestPass3 cenv m) + 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 - cenv.GetTable(TableNames.GenericParam).SetRowsOfTable (SortTableRows TableNames.GenericParam (cenv.GetTable(TableNames.GenericParam).EntriesAsArray)); - GenTypeDefsPass4 [] cenv tds; + cenv.GetTable(TableNames.GenericParam).SetRowsOfTable (SortTableRows TableNames.GenericParam (cenv.GetTable(TableNames.GenericParam).EntriesAsArray)) + GenTypeDefsPass4 [] cenv tds reportTime cenv.showTimes "Module Generation Pass 4" let generateIL requiredDataFixups (desiredMetadataVersion,generatePdb, ilg : ILGlobals, emitTailcalls,showTimes) (m : ILModuleDef) noDebugData cilStartAddress = let isDll = m.IsDLL let cenv = - { primaryAssembly=ilg.traits.ScopeRef; - emitTailcalls=emitTailcalls; - showTimes=showTimes; - ilg = mkILGlobals ilg.traits None noDebugData; // assumes mscorlib is Scope_assembly _ ILScopeRef - desiredMetadataVersion=desiredMetadataVersion; - requiredDataFixups= requiredDataFixups; - requiredStringFixups = []; - codeChunks=ByteBuffer.Create 40000; - nextCodeAddr = cilStartAddress; - data = ByteBuffer.Create 200; - resources = ByteBuffer.Create 200; - tables= Array.init 64 (fun i -> MetadataTable<_>.New ("row table "+string i,System.Collections.Generic.EqualityComparer.Default)); - AssemblyRefs = MetadataTable<_>.New("ILAssemblyRef",System.Collections.Generic.EqualityComparer.Default); - documents=MetadataTable<_>.New("pdbdocs",System.Collections.Generic.EqualityComparer.Default); - trefCache=new Dictionary<_,_>(100); - pdbinfo= new ResizeArray<_>(200); - moduleGuid= Array.zeroCreate 16; - fieldDefs= MetadataTable<_>.New("field defs",System.Collections.Generic.EqualityComparer.Default); - methodDefIdxsByKey = MetadataTable<_>.New("method defs",System.Collections.Generic.EqualityComparer.Default); + { primaryAssembly=ilg.traits.ScopeRef + emitTailcalls=emitTailcalls + showTimes=showTimes + ilg = mkILGlobals ilg.traits None noDebugData // assumes mscorlib is Scope_assembly _ ILScopeRef + desiredMetadataVersion=desiredMetadataVersion + requiredDataFixups= requiredDataFixups + requiredStringFixups = [] + codeChunks=ByteBuffer.Create 40000 + nextCodeAddr = cilStartAddress + data = ByteBuffer.Create 200 + resources = ByteBuffer.Create 200 + tables= Array.init 64 (fun i -> MetadataTable<_>.New ("row table "+string i,System.Collections.Generic.EqualityComparer.Default)) + AssemblyRefs = MetadataTable<_>.New("ILAssemblyRef",System.Collections.Generic.EqualityComparer.Default) + documents=MetadataTable<_>.New("pdbdocs",System.Collections.Generic.EqualityComparer.Default) + trefCache=new Dictionary<_,_>(100) + pdbinfo= new ResizeArray<_>(200) + moduleGuid= Array.zeroCreate 16 + fieldDefs= MetadataTable<_>.New("field defs",System.Collections.Generic.EqualityComparer.Default) + methodDefIdxsByKey = MetadataTable<_>.New("method defs",System.Collections.Generic.EqualityComparer.Default) // This uses reference identity on ILMethodDef objects - methodDefIdxs = new Dictionary<_,_>(100, HashIdentity.Reference); - propertyDefs = MetadataTable<_>.New("property defs",System.Collections.Generic.EqualityComparer.Default); - eventDefs = MetadataTable<_>.New("event defs",System.Collections.Generic.EqualityComparer.Default); - typeDefs = MetadataTable<_>.New("type defs",System.Collections.Generic.EqualityComparer.Default); - entrypoint=None; - generatePdb=generatePdb; + methodDefIdxs = new Dictionary<_,_>(100, HashIdentity.Reference) + propertyDefs = MetadataTable<_>.New("property defs",System.Collections.Generic.EqualityComparer.Default) + eventDefs = MetadataTable<_>.New("event defs",System.Collections.Generic.EqualityComparer.Default) + typeDefs = MetadataTable<_>.New("type defs",System.Collections.Generic.EqualityComparer.Default) + entrypoint=None + generatePdb=generatePdb // 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",System.Collections.Generic.EqualityComparer.Default); - userStrings= MetadataTable<_>.New("user strings",System.Collections.Generic.EqualityComparer.Default); } + guids=MetadataTable<_>.New("guids",HashIdentity.Structural) + blobs= MetadataTable<_>.New("blobs",HashIdentity.Structural) + strings= MetadataTable<_>.New("strings",System.Collections.Generic.EqualityComparer.Default) + userStrings= MetadataTable<_>.New("user strings",System.Collections.Generic.EqualityComparer.Default) } // Now the main compilation step - GenModule cenv m; + GenModule cenv m // Fetch out some of the results let entryPointToken = @@ -3354,13 +3352,13 @@ let generateIL requiredDataFixups (desiredMetadataVersion,generatePdb, ilg : ILG | Some (epHere,tok) -> getUncodedToken (if epHere then TableNames.Method else TableNames.File) tok | None -> - if not isDll then dprintn "warning: no entrypoint specified in executable binary"; + if not isDll then dprintn "warning: no entrypoint specified in executable binary" 0x0 let pdbData = - { EntryPoint= (if isDll then None else Some entryPointToken); - ModuleID = cenv.moduleGuid; - Documents = cenv.documents.EntriesAsArray; + { EntryPoint= (if isDll then None else Some entryPointToken) + ModuleID = cenv.moduleGuid + Documents = cenv.documents.EntriesAsArray Methods= cenv.pdbinfo.ToArray() } let idxForNextedTypeDef (tds:ILTypeDef list, td:ILTypeDef) = @@ -3376,20 +3374,20 @@ let generateIL requiredDataFixups (desiredMetadataVersion,generatePdb, ilg : ILG // turn idx tbls into token maps let mappings = { TypeDefTokenMap = (fun t -> - getUncodedToken TableNames.TypeDef (idxForNextedTypeDef t)); + getUncodedToken TableNames.TypeDef (idxForNextedTypeDef t)) FieldDefTokenMap = (fun t fd -> let tidx = idxForNextedTypeDef t - getUncodedToken TableNames.Field (GetFieldDefAsFieldDefIdx cenv tidx fd)); + getUncodedToken TableNames.Field (GetFieldDefAsFieldDefIdx cenv tidx fd)) MethodDefTokenMap = (fun t md -> let tidx = idxForNextedTypeDef t - getUncodedToken TableNames.Method (FindMethodDefIdx cenv (GetKeyForMethodDef tidx md))); + getUncodedToken TableNames.Method (FindMethodDefIdx cenv (GetKeyForMethodDef tidx md))) PropertyTokenMap = (fun t pd -> let tidx = idxForNextedTypeDef t - getUncodedToken TableNames.Property (cenv.propertyDefs.GetTableEntry (GetKeyForPropertyDef tidx pd))); + getUncodedToken TableNames.Property (cenv.propertyDefs.GetTableEntry (GetKeyForPropertyDef tidx pd))) EventTokenMap = (fun t ed -> let tidx = idxForNextedTypeDef t getUncodedToken TableNames.Event (cenv.eventDefs.GetTableEntry (EventKey (tidx, ed.Name)))) } - reportTime cenv.showTimes "Finalize Module Generation Results"; + reportTime cenv.showTimes "Finalize Module Generation Results" // New return the results let data = cenv.data.Close() let resources = cenv.resources.Close() @@ -3401,7 +3399,7 @@ let generateIL requiredDataFixups (desiredMetadataVersion,generatePdb, ilg : ILG //===================================================================== type BinaryChunk = - { size: int32; + { size: int32 addr: int32 } let chunk sz next = ({addr=next; size=sz},next + sz) @@ -3418,14 +3416,14 @@ module FileSystemUtilites = 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"; + if progress then eprintf "loading type Mono.Unix.UnixFileInfo...\n" let monoUnixFileInfo = monoPosix.GetType("Mono.Unix.UnixFileSystemInfo") let fileEntry = monoUnixFileInfo.InvokeMember("GetFileSystemEntry", (BindingFlags.InvokeMethod ||| BindingFlags.Static ||| BindingFlags.Public), null, null, [| box filename |],System.Globalization.CultureInfo.InvariantCulture) let prevPermissions = monoUnixFileInfo.InvokeMember("get_FileAccessPermissions", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, fileEntry, [| |],System.Globalization.CultureInfo.InvariantCulture) |> unbox // Add 0x000001ED (UserReadWriteExecute, GroupReadExecute, OtherReadExecute) to the access permissions on Unix monoUnixFileInfo.InvokeMember("set_FileAccessPermissions", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, fileEntry, [| box (prevPermissions ||| 0x000001ED) |],System.Globalization.CultureInfo.InvariantCulture) |> ignore with e -> - if progress then eprintf "failure: %s...\n" (e.ToString()); + if progress then eprintf "failure: %s...\n" (e.ToString()) // Fail silently let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls,showTimes) modul noDebugData cilStartAddress = @@ -3439,7 +3437,7 @@ let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls let strings,userStrings,blobs,guids,tables,entryPointToken,code,requiredStringFixups,data,resources,pdbData,mappings = generateIL requiredDataFixups (desiredMetadataVersion,generatePdb,ilg,emitTailcalls,showTimes) modul noDebugData cilStartAddress - reportTime showTimes "Generated Tables and Code"; + reportTime showTimes "Generated Tables and Code" let tableSize (tab: TableName) = tables.[tab.Index].Length // Now place the code @@ -3512,7 +3510,7 @@ let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls (if tableSize (TableNames.GenericParamConstraint) > 0 then 0x00001000 else 0x00000000) ||| 0x00000200 - reportTime showTimes "Layout Header of Tables"; + reportTime showTimes "Layout Header of Tables" let guidAddress n = (if n = 0 then 0 else (n - 1) * 0x10 + 0x01) @@ -3520,48 +3518,48 @@ let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls let tab = Array.create (strings.Length + 1) 0 let pos = ref 1 for i = 1 to strings.Length do - tab.[i] <- !pos; + tab.[i] <- !pos let s = strings.[i - 1] pos := !pos + s.Length tab let stringAddress n = - if n >= Array.length stringAddressTable then failwith ("string index "+string n+" out of range"); + if n >= Array.length stringAddressTable then failwith ("string index "+string n+" out of range") stringAddressTable.[n] let userStringAddressTable = let tab = Array.create (Array.length userStrings + 1) 0 let pos = ref 1 for i = 1 to Array.length userStrings do - tab.[i] <- !pos; + tab.[i] <- !pos let s = userStrings.[i - 1] let n = s.Length + 1 pos := !pos + n + ByteBuffer.Z32Size n tab let userStringAddress n = - if n >= Array.length userStringAddressTable then failwith "userString index out of range"; + if n >= Array.length userStringAddressTable then failwith "userString index out of range" userStringAddressTable.[n] let blobAddressTable = let tab = Array.create (blobs.Length + 1) 0 let pos = ref 1 for i = 1 to blobs.Length do - tab.[i] <- !pos; + tab.[i] <- !pos let blob = blobs.[i - 1] pos := !pos + blob.Length + ByteBuffer.Z32Size blob.Length tab let blobAddress n = - if n >= blobAddressTable.Length then failwith "blob index out of range"; + if n >= blobAddressTable.Length then failwith "blob index out of range" blobAddressTable.[n] - reportTime showTimes "Build String/Blob Address Tables"; + reportTime showTimes "Build String/Blob Address Tables" let sortedTables = Array.init 64 (fun i -> tables.[i] |> SortTableRows (TableName.FromIndex i)) - reportTime showTimes "Sort Tables"; + reportTime showTimes "Sort Tables" let codedTables = @@ -3657,18 +3655,18 @@ let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls // 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 + 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 *) |]; + ((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; + tablesBuf.EmitInt32 valid1 + tablesBuf.EmitInt32 valid2 + tablesBuf.EmitInt32 sorted1 + tablesBuf.EmitInt32 sorted2 // Numbers of rows in various tables for rows in sortedTables do @@ -3676,7 +3674,7 @@ let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls tablesBuf.EmitInt32 rows.Length - reportTime showTimes "Write Header of tablebuf"; + reportTime showTimes "Write Header of tablebuf" // The tables themselves for rows in sortedTables do @@ -3712,7 +3710,7 @@ let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls tablesBuf.Close() - reportTime showTimes "Write Tables to tablebuf"; + reportTime showTimes "Write Tables to tablebuf" let tablesStreamUnpaddedSize = codedTables.Length // QUERY: extra 4 empty bytes in array.exe - why? Include some extra padding after @@ -3729,7 +3727,7 @@ let writeILMetadataAndCode (generatePdb,desiredMetadataVersion,ilg,emitTailcalls let blobsChunk,_next = chunk blobsStreamPaddedSize next let blobsStreamPadding = blobsChunk.size - blobsStreamUnpaddedSize - reportTime showTimes "Layout Metadata"; + reportTime showTimes "Layout Metadata" let metadata = let mdbuf = ByteBuffer.Create 500000 @@ -4217,117 +4215,117 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: // 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 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). + 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). + 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 + 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. For the moment assume the resources table is always the first resource in the file. - writeDirectory os nativeResourcesChunk; + 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). + 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 + 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). + 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). + 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 + 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; + 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). + 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" [| |]; + write (Some textSectionHeaderChunk.addr) os "text section header" [| |] // 00000178 - writeBytes os [| 0x2euy; 0x74uy; 0x65uy; 0x78uy; 0x74uy; 0x00uy; 0x00uy; 0x00uy; |]; // ".text\000\000\000" + 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. If this value is greater than Size of Raw Data, the section is zero-padded. e.g. 0x00009584 - writeInt32 os textSectionAddr; // VirtualAddress For executable images this is the address of the first byte of the section, when loaded into memory, relative to the image base. e.g. 0x00020000 - writeInt32 os textSectionPhysSize; // SizeOfRawData Size of the initialized data on disk in bytes, shall be a multiple of FileAlignment from the PE header. If this is less than VirtualSize the remainder of the section is zero filled. Because this field is rounded while the VirtualSize field is not it is possible for this to be greater than VirtualSize as well. When a section contains only uninitialized data, this field should be 0. 0x00009600 - writeInt32 os textSectionPhysLoc; // PointerToRawData RVA to sections first page within the PE file. This shall be a multiple of FileAlignment from the optional header. When a section contains only uninitialized data, this field should be 0. e.g. 00000200 + writeInt32 os textSectionSize // VirtualSize: Total size of the section when loaded into memory in bytes rounded to Section Alignment. If this value is greater than Size of Raw Data, the section is zero-padded. e.g. 0x00009584 + writeInt32 os textSectionAddr // VirtualAddress For executable images this is the address of the first byte of the section, when loaded into memory, relative to the image base. e.g. 0x00020000 + writeInt32 os textSectionPhysSize // SizeOfRawData Size of the initialized data on disk in bytes, shall be a multiple of FileAlignment from the PE header. If this is less than VirtualSize the remainder of the section is zero filled. Because this field is rounded while the VirtualSize field is not it is possible for this to be greater than VirtualSize as well. When a section contains only uninitialized data, this field should be 0. 0x00009600 + writeInt32 os textSectionPhysLoc // PointerToRawData RVA to sections first page within the PE file. This shall be a multiple of FileAlignment from the optional header. When a section contains only uninitialized data, this field should be 0. e.g. 00000200 // 00000190 - writeInt32 os 0x00; // PointerToRelocations RVA of Relocation section. - writeInt32 os 0x00; // PointerToLinenumbers Always 0 (see Section 23.1). + 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 describing sections characteristics, see below. IMAGE_SCN_CNT_CODE || IMAGE_SCN_MEM_EXECUTE || IMAGE_SCN_MEM_READ + 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 describing sections characteristics, see below. IMAGE_SCN_CNT_CODE || IMAGE_SCN_MEM_EXECUTE || IMAGE_SCN_MEM_READ - write (Some dataSectionHeaderChunk.addr) os "data section header" [| |]; + 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. If this value is greater than Size of Raw Data, the section is zero-padded. e.g. 0x0000000c - writeInt32 os dataSectionAddr; // VirtualAddress For executable images this is the address of the first byte of the section, when loaded into memory, relative to the image base. e.g. 0x0000c000 + 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. If this value is greater than Size of Raw Data, the section is zero-padded. e.g. 0x0000000c + writeInt32 os dataSectionAddr // VirtualAddress For executable images this is the address of the first byte of the section, when loaded into memory, relative to the image base. e.g. 0x0000c000 // 000001b0 - writeInt32 os dataSectionPhysSize; // SizeOfRawData Size of the initialized data on disk in bytes, shall be a multiple of FileAlignment from the PE header. If this is less than VirtualSize the remainder of the section is zero filled. Because this field is rounded while the VirtualSize field is not it is possible for this to be greater than VirtualSize as well. When a section contains only uninitialized data, this field should be 0. e.g. 0x00000200 - writeInt32 os dataSectionPhysLoc; // PointerToRawData QUERY: Why does ECMA say "RVA" here? Offset to sections first page within the PE file. This shall be a multiple of FileAlignment from the optional header. When a section contains only uninitialized data, this field should be 0. e.g. 0x00009800 + writeInt32 os dataSectionPhysSize // SizeOfRawData Size of the initialized data on disk in bytes, shall be a multiple of FileAlignment from the PE header. If this is less than VirtualSize the remainder of the section is zero filled. Because this field is rounded while the VirtualSize field is not it is possible for this to be greater than VirtualSize as well. When a section contains only uninitialized data, this field should be 0. e.g. 0x00000200 + writeInt32 os dataSectionPhysLoc // PointerToRawData QUERY: Why does ECMA say "RVA" here? Offset to sections first page within the PE file. This shall be a multiple of FileAlignment from the optional header. When a section contains only uninitialized data, this field should be 0. e.g. 0x00009800 // 000001b8 - writeInt32 os 0x00; // PointerToRelocations RVA of Relocation section. - writeInt32 os 0x00; // PointerToLinenumbers Always 0 (see Section 23.1). + 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 + 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" [| |]; + 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. If this value is greater than Size of Raw Data, the section is zero-padded. e.g. 0x0000000c - writeInt32 os relocSectionAddr; // VirtualAddress For executable images this is the address of the first byte of the section, when loaded into memory, relative to the image base. e.g. 0x0000c000 + 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. If this value is greater than Size of Raw Data, the section is zero-padded. e.g. 0x0000000c + writeInt32 os relocSectionAddr // VirtualAddress For executable images this is the address of the first byte of the section, when loaded into memory, relative to the image base. e.g. 0x0000c000 // 000001b0 - writeInt32 os relocSectionPhysSize; // SizeOfRawData Size of the initialized reloc on disk in bytes, shall be a multiple of FileAlignment from the PE header. If this is less than VirtualSize the remainder of the section is zero filled. Because this field is rounded while the VirtualSize field is not it is possible for this to be greater than VirtualSize as well. When a section contains only uninitialized reloc, this field should be 0. e.g. 0x00000200 - writeInt32 os relocSectionPhysLoc; // PointerToRawData QUERY: Why does ECMA say "RVA" here? Offset to sections first page within the PE file. This shall be a multiple of FileAlignment from the optional header. When a section contains only uninitialized reloc, this field should be 0. e.g. 0x00009800 + writeInt32 os relocSectionPhysSize // SizeOfRawData Size of the initialized reloc on disk in bytes, shall be a multiple of FileAlignment from the PE header. If this is less than VirtualSize the remainder of the section is zero filled. Because this field is rounded while the VirtualSize field is not it is possible for this to be greater than VirtualSize as well. When a section contains only uninitialized reloc, this field should be 0. e.g. 0x00000200 + writeInt32 os relocSectionPhysLoc // PointerToRawData QUERY: Why does ECMA say "RVA" here? Offset to sections first page within the PE file. This shall be a multiple of FileAlignment from the optional header. When a section contains only uninitialized reloc, this field should be 0. e.g. 0x00009800 // 000001b8 - writeInt32 os 0x00; // PointerToRelocations RVA of Relocation section. - writeInt32 os 0x00; // PointerToLinenumbers Always 0 (see Section 23.1). + 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 | + 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); + writePadding os "pad to text begin" (textSectionPhysLoc - headerSize) // TEXT SECTION: e.g. 0x200 let textV2P v = v - textSectionAddr + textSectionPhysLoc // 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 + 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 @@ -4340,106 +4338,106 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: let headerVersionMajor,headerVersionMinor = headerVersionSupportedByCLRVersion desiredMetadataVersion 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. ... + 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 - writeDirectory os metadataChunk; - writeInt32 os flags; + writeDirectory os metadataChunk + writeInt32 os flags - writeInt32 os entryPointToken; - write None os "rest of cli header" [| |]; + writeInt32 os entryPointToken + write None os "rest of cli header" [| |] // e.g. 0x0220 - writeDirectory os resourcesChunk; - writeDirectory os strongnameChunk; + 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; + 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 + 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 code + write None os "code padding" codePadding - writeBytes os metadata; + 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 (Some (textV2P strongnameChunk.addr)) os "strongname" (Array.create strongnameChunk.size 0x0uy); + write (Some (textV2P strongnameChunk.addr)) os "strongname" (Array.create strongnameChunk.size 0x0uy) - write (Some (textV2P resourcesChunk.addr)) os "raw resources" [| |]; - writeBytes os resources; - write (Some (textV2P rawdataChunk.addr)) os "raw data" [| |]; - writeBytes os data; + write (Some (textV2P resourcesChunk.addr)) os "raw resources" [| |] + writeBytes os resources + write (Some (textV2P rawdataChunk.addr)) os "raw data" [| |] + writeBytes os data writePadding os "start of import table" importTableChunkPrePadding // vtfixups would go here - write (Some (textV2P importTableChunk.addr)) os "import table" [| |]; + write (Some (textV2P importTableChunk.addr)) os "import table" [| |] - writeInt32 os importLookupTableChunk.addr; - writeInt32 os 0x00; - writeInt32 os 0x00; - writeInt32 os mscoreeStringChunk.addr; - writeInt32 os importAddrTableChunk.addr; - writeInt32 os 0x00; - writeInt32 os 0x00; - writeInt32 os 0x00; - writeInt32 os 0x00; - writeInt32 os 0x00; + writeInt32 os importLookupTableChunk.addr + writeInt32 os 0x00 + writeInt32 os 0x00 + writeInt32 os mscoreeStringChunk.addr + writeInt32 os importAddrTableChunk.addr + 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; + 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 - write (Some (textV2P importNameHintTableChunk.addr)) os "import name hint table" [| |]; + 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. // Shall _CorExeMain a .exe file _CorDllMain for a .dll file. if isDll then writeBytes os [| 0x00uy; 0x00uy; 0x5fuy; 0x43uy ; 0x6fuy; 0x72uy; 0x44uy; 0x6cuy; 0x6cuy; 0x4duy; 0x61uy; 0x69uy; 0x6euy; 0x00uy |] else - writeBytes os [| 0x00uy; 0x00uy; 0x5fuy; 0x43uy; 0x6fuy; 0x72uy; 0x45uy; 0x78uy; 0x65uy; 0x4duy; 0x61uy; 0x69uy; 0x6euy; 0x00uy |]; + 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 ; |]; + [| 0x6duy; 0x73uy; 0x63uy; 0x6fuy ; 0x72uy; 0x65uy ; 0x65uy; 0x2euy ; 0x64uy; 0x6cuy ; 0x6cuy; 0x00uy ; |] - writePadding os "end of import tab" importTableChunkPadding; + writePadding os "end of import tab" importTableChunkPadding - writePadding os "head of entrypoint" 0x03; + 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 |]; + [| 0xFFuy; 0x25uy; (* x86 Instructions for entry *) b0 ep; b1 ep; b2 ep; b3 ep |] if isItanium then write (Some (textV2P globalpointerCodeChunk.addr)) os " itanium global pointer" - [| 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy |]; + [| 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy |] if pdbfile.IsSome then - write (Some (textV2P debugDirectoryChunk.addr)) os "debug directory" (Array.create sizeof_IMAGE_DEBUG_DIRECTORY 0x0uy); - write (Some (textV2P debugDataChunk.addr)) os "debug data" (Array.create debugDataChunk.size 0x0uy); + write (Some (textV2P debugDirectoryChunk.addr)) os "debug directory" (Array.create sizeof_IMAGE_DEBUG_DIRECTORY 0x0uy) + write (Some (textV2P debugDataChunk.addr)) os "debug data" (Array.create debugDataChunk.size 0x0uy) - writePadding os "end of .text" (dataSectionPhysLoc - textSectionPhysLoc - textSectionSize); + writePadding os "end of .text" (dataSectionPhysLoc - textSectionPhysLoc - textSectionSize) // DATA SECTION match nativeResources with | [||] -> () | resources -> - write (Some (dataSectionVirtToPhys nativeResourcesChunk.addr)) os "raw native resources" [| |]; - writeBytes os resources; + write (Some (dataSectionVirtToPhys nativeResourcesChunk.addr)) os "raw native resources" [| |] + writeBytes os resources if dummydatap.size <> 0x0 then - write (Some (dataSectionVirtToPhys dummydatap.addr)) os "dummy data" [| 0x0uy |]; + 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 @@ -4461,10 +4459,10 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: [| b0 entrypointFixupBlock; b1 entrypointFixupBlock; b2 entrypointFixupBlock; b3 entrypointFixupBlock; 0x0cuy; 0x00uy; 0x00uy; 0x00uy; b0 reloc; b1 reloc; - b0 reloc2; b1 reloc2; |]; - writePadding os "end of .reloc" (imageEndSectionPhysLoc - relocSectionPhysLoc - relocSectionSize); + b0 reloc2; b1 reloc2; |] + writePadding os "end of .reloc" (imageEndSectionPhysLoc - relocSectionPhysLoc - relocSectionSize) - os.Close(); + os.Close() try FileSystemUtilites.setExecutablePermission outfile @@ -4475,13 +4473,13 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: // Looks like a finally... with e -> (try - os.Close(); + os.Close() FileSystem.FileDelete outfile - with _ -> ()); + with _ -> ()) reraise() - reportTime showTimes "Writing Image"; + reportTime showTimes "Writing Image" if dumpDebugInfo then DumpDebugInfo outfile pdbData @@ -4495,113 +4493,74 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: | Some fpdb -> try let idd = WritePdbInfo fixupOverlappingSequencePoints showTimes outfile fpdb pdbData - reportTime showTimes "Generate PDB Info"; + 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 = new FileStream(outfile, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read, 0x1000, false) let os2 = new BinaryWriter(fs2) try // write the IMAGE_DEBUG_DIRECTORY - os2.BaseStream.Seek (int64 (textV2P debugDirectoryChunk.addr), SeekOrigin.Begin) |> ignore; - writeInt32 os2 idd.iddCharacteristics; // IMAGE_DEBUG_DIRECTORY.Characteristics - writeInt32 os2 timestamp; - writeInt32AsUInt16 os2 idd.iddMajorVersion; - writeInt32AsUInt16 os2 idd.iddMinorVersion; - writeInt32 os2 idd.iddType; - writeInt32 os2 idd.iddData.Length; // IMAGE_DEBUG_DIRECTORY.SizeOfData - writeInt32 os2 debugDataChunk.addr; // IMAGE_DEBUG_DIRECTORY.AddressOfRawData - writeInt32 os2 (textV2P debugDataChunk.addr);// IMAGE_DEBUG_DIRECTORY.PointerToRawData - - (* dprintf "idd.iddCharacteristics = %ld\n" idd.iddCharacteristics; - dprintf "iddMajorVersion = %ld\n" idd.iddMajorVersion; - dprintf "iddMinorVersion = %ld\n" idd.iddMinorVersion; - dprintf "iddType = %ld\n" idd.iddType; - dprintf "iddData = (%A) = %s\n" idd.iddData (System.Text.Encoding.UTF8.GetString idd.iddData); *) + os2.BaseStream.Seek (int64 (textV2P debugDirectoryChunk.addr), SeekOrigin.Begin) |> ignore + writeInt32 os2 idd.iddCharacteristics // IMAGE_DEBUG_DIRECTORY.Characteristics + writeInt32 os2 timestamp + writeInt32AsUInt16 os2 idd.iddMajorVersion + writeInt32AsUInt16 os2 idd.iddMinorVersion + writeInt32 os2 idd.iddType + writeInt32 os2 idd.iddData.Length // IMAGE_DEBUG_DIRECTORY.SizeOfData + writeInt32 os2 debugDataChunk.addr // IMAGE_DEBUG_DIRECTORY.AddressOfRawData + writeInt32 os2 (textV2P debugDataChunk.addr)// IMAGE_DEBUG_DIRECTORY.PointerToRawData + + (* dprintf "idd.iddCharacteristics = %ld\n" idd.iddCharacteristics + dprintf "iddMajorVersion = %ld\n" idd.iddMajorVersion + dprintf "iddMinorVersion = %ld\n" idd.iddMinorVersion + dprintf "iddType = %ld\n" idd.iddType + dprintf "iddData = (%A) = %s\n" idd.iddData (System.Text.Encoding.UTF8.GetString idd.iddData) *) // write the debug raw data as given us by the PDB writer - os2.BaseStream.Seek (int64 (textV2P debugDataChunk.addr), SeekOrigin.Begin) |> ignore; + os2.BaseStream.Seek (int64 (textV2P debugDataChunk.addr), SeekOrigin.Begin) |> ignore if debugDataChunk.size < idd.iddData.Length then - failwith "Debug data area is not big enough. Debug info may not be usable"; - writeBytes os2 idd.iddData; + failwith "Debug data area is not big enough. Debug info may not be usable" + writeBytes os2 idd.iddData os2.Close() with e -> - failwith ("Error while writing debug directory entry: "+e.Message); - (try os2.Close(); FileSystem.FileDelete outfile with _ -> ()); + failwith ("Error while writing debug directory entry: "+e.Message) + (try os2.Close(); FileSystem.FileDelete outfile with _ -> ()) reraise() with e -> reraise() - end; - reportTime showTimes "Finalize PDB"; + end + reportTime showTimes "Finalize PDB" /// Sign the binary. No further changes to binary allowed past this point! match signer with | None -> () | Some s -> try - s.SignFile outfile; + s.SignFile outfile s.Close() with e -> - failwith ("Warning: A call to StrongNameSignatureGeneration failed ("+e.Message+")"); - (try s.Close() with _ -> ()); - (try FileSystem.FileDelete outfile with _ -> ()); + failwith ("Warning: A call to StrongNameSignatureGeneration failed ("+e.Message+")") + (try s.Close() with _ -> ()) + (try FileSystem.FileDelete outfile with _ -> ()) () - reportTime showTimes "Signing Image"; + reportTime showTimes "Signing Image" //Finished writing and signing the binary and debug info... mappings type options = - { ilg: ILGlobals; - pdbfile: string option; - signer: ILStrongNameSigner option; - fixupOverlappingSequencePoints: bool; - emitTailcalls : bool; - showTimes: bool; + { ilg: ILGlobals + pdbfile: string option + signer: ILStrongNameSigner option + fixupOverlappingSequencePoints: bool + emitTailcalls : bool + showTimes: bool dumpDebugInfo:bool } -let WriteILBinary outfile (args: options) modul noDebugData = - ignore (writeBinaryAndReportMappings (outfile, args.ilg, args.pdbfile, args.signer, args.fixupOverlappingSequencePoints, args.emitTailcalls, args.showTimes, args.dumpDebugInfo) modul noDebugData) - - - -(****************************************************** -** Notes on supporting the Itanium ** -******************************************************* -IA64 codegen on the CLR isnt documented, and getting it working involved a certain amount of reverse-engineering -peverify.exe and various binaries generated by ILAsm and other managed compiles. Here are some lessons learned, -documented for posterity and the 0 other people writing managed compilers for the Itanium: - -- Even if youre not utilizing the global pointer in your Itanium binary, -you should be setting aside space for it in .text. (Preferably near the native stub.) -- PEVerify checks for two .reloc table entries on the Itanium - one for the native stub, and one -for the global pointer RVA. It doesnt matter what you set these values to - -their addresses can be zeroed out, but they must have IMAGE_REL_BASED_DIR64 set! -(So, yes, you may find yourself setting this flag on an empty, unnecessary table slot!) -- On the Itanium, its best to have your tables qword aligned. (Though, peverify checks for dword alignment.) -- A different, weird set of DLL characteristics are necessary for the Itanium. -I wont detail them here, but its interesting given that this field isnt supposed to vary between platforms, -and is supposedly marked as deprecated. -- There are two schools to generating CLR binaries on for the Itanium - Ill call them the ALink school -and the ILAsm school. - - The ALink school relies on some quirks in the CLR to omit a lot of stuff that, admittedly, isnt necessary. The binaries are basically IL-only, with some flags set to make them nominally Itanium: - - It omits the .reloc table - - It doesnt set aside memory for global pointer storage - - Theres no native stub - - Theres no import table, mscoree reference / startup symbol hint - - A manifest is inserted by default. - These omissions are understandable, given the platform/jitting/capabilities of the language, - but theyre basically relying on an idiosyncracy of the runtime to get away with creating a bad binary. - - - The ILAsm school actually writes everything out: - - It has a reloc table with the requisite two entries - - It sets aside memory for a global pointer, even if it doesnt utilize one - - It actually inserts a native stub for the Itanium! (Though, I have no idea what - instructions, specifically, are emitted, and I couldnt dig up the sources to ILAsm to - find out) - - Theres the requisite mscoree reference, etc. - - No manifest is inserted -*******************************************************) +let WriteILBinary (outfile, args, ilModule, noDebugData) = + ignore (writeBinaryAndReportMappings (outfile, args.ilg, args.pdbfile, args.signer, args.fixupOverlappingSequencePoints, args.emitTailcalls, args.showTimes, args.dumpDebugInfo) ilModule noDebugData) + diff --git a/src/absil/ilwrite.fsi b/src/absil/ilwrite.fsi index f63a65278ec..2d9f6e4385e 100644 --- a/src/absil/ilwrite.fsi +++ b/src/absil/ilwrite.fsi @@ -16,21 +16,16 @@ type ILStrongNameSigner = static member OpenKeyContainer: string -> ILStrongNameSigner type options = - { ilg: ILGlobals - pdbfile: string option; - signer : ILStrongNameSigner option; - fixupOverlappingSequencePoints : bool; - emitTailcalls: bool; - showTimes : bool; - dumpDebugInfo : bool } + { ilg: ILGlobals + pdbfile: string option + signer : ILStrongNameSigner option + fixupOverlappingSequencePoints : bool + emitTailcalls: bool + showTimes : bool + dumpDebugInfo : bool } /// Write a binary to the file system. Extra configuration parameters can also be specified. -val WriteILBinary: - filename: string -> - options: options -> - input: ILModuleDef -> - noDebugData: bool -> - unit +val WriteILBinary: filename: string * options: options * input: ILModuleDef * noDebugData: bool -> unit diff --git a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Interactive.Settings.dll.fs b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Interactive.Settings.dll.fs index 7300c8cb287..d61c245918f 100644 --- a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Interactive.Settings.dll.fs +++ b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Interactive.Settings.dll.fs @@ -3,11 +3,14 @@ #light namespace Microsoft.FSharp open System.Reflection +open System.Runtime.InteropServices + [] [] [] [] [] +[] #if NO_STRONG_NAMES [] diff --git a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Server.Shared.dll.fs b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Server.Shared.dll.fs index ada202bb2b6..9db04753d19 100644 --- a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Server.Shared.dll.fs +++ b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.Server.Shared.dll.fs @@ -3,12 +3,14 @@ #light namespace Microsoft.FSharp open System.Reflection +open System.Runtime.InteropServices [] [] [] [] [] +[] #if NO_STRONG_NAMES [] diff --git a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.dll.fs b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.dll.fs index 957bb6ca5fa..3aec47e8c96 100644 --- a/src/assemblyinfo/assemblyinfo.FSharp.Compiler.dll.fs +++ b/src/assemblyinfo/assemblyinfo.FSharp.Compiler.dll.fs @@ -3,12 +3,15 @@ #light namespace Microsoft.FSharp open System.Reflection +open System.Runtime.InteropServices [] [] [] [] [] +[] + #if NO_STRONG_NAMES [] [] @@ -22,6 +25,7 @@ open System.Reflection // Note: internals visible to unit test DLLs in Retail (and all) builds. [] +[] [] [] [] @@ -45,6 +49,7 @@ open System.Reflection [] [] [] +[] #endif #if STRONG_NAME_FSHARP_COMPILER_WITH_TEST_KEY @@ -62,6 +67,7 @@ open System.Reflection [] [] [] +[] #endif diff --git a/src/assemblyinfo/assemblyinfo.FSharp.Core.dll.fs b/src/assemblyinfo/assemblyinfo.FSharp.Core.dll.fs index e3bd3389965..c88d9d117b5 100644 --- a/src/assemblyinfo/assemblyinfo.FSharp.Core.dll.fs +++ b/src/assemblyinfo/assemblyinfo.FSharp.Core.dll.fs @@ -2,11 +2,16 @@ namespace Microsoft.FSharp open System.Reflection +open System.Runtime.InteropServices + [] [] [] [] [] +#if !FSHARP_CORE_PORTABLE +[] +#endif #if PORTABLE [] diff --git a/src/assemblyinfo/assemblyinfo.FSharp.Data.TypeProviders.dll.fs b/src/assemblyinfo/assemblyinfo.FSharp.Data.TypeProviders.dll.fs index e761eaebd56..f5a4f3d1ab1 100644 --- a/src/assemblyinfo/assemblyinfo.FSharp.Data.TypeProviders.dll.fs +++ b/src/assemblyinfo/assemblyinfo.FSharp.Data.TypeProviders.dll.fs @@ -3,11 +3,14 @@ #light namespace Microsoft.FSharp open System.Reflection +open System.Runtime.InteropServices + [] [] [] [] [] +[] do() #if NO_STRONG_NAMES diff --git a/src/assemblyinfo/assemblyinfo.fsc.exe.fs b/src/assemblyinfo/assemblyinfo.fsc.exe.fs index 7d0af2c39d6..d74fb629294 100644 --- a/src/assemblyinfo/assemblyinfo.fsc.exe.fs +++ b/src/assemblyinfo/assemblyinfo.fsc.exe.fs @@ -3,11 +3,14 @@ #light namespace Microsoft.FSharp open System.Reflection +open System.Runtime.InteropServices + [] [] [] [] [] +[] [] do() diff --git a/src/fsharp-compiler-unittests-build.proj b/src/fsharp-compiler-unittests-build.proj new file mode 100644 index 00000000000..200c883d9a0 --- /dev/null +++ b/src/fsharp-compiler-unittests-build.proj @@ -0,0 +1,18 @@ + + + + + net40 + + + + + + + + + + + + diff --git a/src/fsharp.sln b/src/fsharp.sln index 5c92f68583f..0e9eb059b59 100644 --- a/src/fsharp.sln +++ b/src/fsharp.sln @@ -31,6 +31,8 @@ Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Data.TypeProviders", EndProject Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FsiAnyCPU", "fsharp\fsiAnyCpu\FsiAnyCPU.fsproj", "{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}" EndProject +Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler.Unittests", "fsharp\FSharp.Compiler.Unittests\FSharp.Compiler.Unittests.fsproj", "{A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -75,6 +77,10 @@ Global {CB7D20C4-6506-406D-9144-5342C3595F03}.Release|Any CPU.Build.0 = Release|Any CPU {8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Debug|Any CPU.ActiveCfg = Debug|x86 {8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Release|Any CPU.ActiveCfg = Release|x86 + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A8D9641A-9170-4CF4-8FE0-6DB8C134E1B5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/src/fsharp/augment.fs b/src/fsharp/AugmentWithHashCompare.fs similarity index 98% rename from src/fsharp/augment.fs rename to src/fsharp/AugmentWithHashCompare.fs index bff1b0d38d7..5b750bc75ff 100644 --- a/src/fsharp/augment.fs +++ b/src/fsharp/AugmentWithHashCompare.fs @@ -1,7 +1,8 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Generate the hash/compare functions we add to user-defined types by default. -module internal Microsoft.FSharp.Compiler.Augment +module internal Microsoft.FSharp.Compiler.AugmentWithHashCompare + open Internal.Utilities open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL @@ -14,7 +15,7 @@ open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.PrettyNaming open Microsoft.FSharp.Compiler.Lib -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Infos let mkIComparableCompareToSlotSig g = @@ -189,7 +190,7 @@ let mkRecdCompare g tcref (tycon:Tycon) = let compe = mkILCallGetComparer g m let mkTest (fspec:RecdField) = let fty = fspec.FormalType - let fref = mkNestedRecdFieldRef tcref fspec + let fref = tcref.MakeNestedRecdFieldRef fspec let m = fref.Range mkCallGenericComparisonWithComparerOuter g m fty compe @@ -213,7 +214,7 @@ let mkRecdCompareWithComparer g tcref (tycon:Tycon) (_thisv,thise) (_,thate) com let mkTest (fspec:RecdField) = let fty = fspec.FormalType - let fref = mkNestedRecdFieldRef tcref fspec + let fref = tcref.MakeNestedRecdFieldRef fspec let m = fref.Range mkCallGenericComparisonWithComparerOuter g m fty compe @@ -229,7 +230,7 @@ let mkRecdCompareWithComparer g tcref (tycon:Tycon) (_thisv,thise) (_,thate) com expr -/// Build the equality implementation wrapper for a record type +/// Build the .Equals(that) equality implementation wrapper for a record type let mkRecdEquality g tcref (tycon:Tycon) = let m = tycon.Range let fields = tycon.AllInstanceFieldsAsList @@ -237,7 +238,7 @@ let mkRecdEquality g tcref (tycon:Tycon) = let thisv,thatv,thise,thate = mkThisVarThatVar g m ty let mkTest (fspec:RecdField) = let fty = fspec.FormalType - let fref = mkNestedRecdFieldRef tcref fspec + let fref = tcref.MakeNestedRecdFieldRef fspec let m = fref.Range mkCallGenericEqualityEROuter g m fty (mkRecdFieldGetViaExprAddr(thise, fref, tinst, m)) @@ -258,7 +259,7 @@ let mkRecdEqualityWithComparer g tcref (tycon:Tycon) (_thisv,thise) thatobje (th let mkTest (fspec:RecdField) = let fty = fspec.FormalType - let fref = mkNestedRecdFieldRef tcref fspec + let fref = tcref.MakeNestedRecdFieldRef fspec let m = fref.Range mkCallGenericEqualityWithComparerOuter g m fty @@ -338,7 +339,7 @@ let mkUnionCompare g tcref (tycon:Tycon) = let expr = let mbuilder = new MatchBuilder(NoSequencePointAtInvisibleBinding,m ) let mkCase ucase = - let cref = mkNestedUnionCaseRef tcref ucase + let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range let thisucv,thisucve = mkCompGenLocal m "thisCast" (mkProvenUnionCaseTy cref tinst) let thatucv,thatucve = mkCompGenLocal m "objCast" (mkProvenUnionCaseTy cref tinst) @@ -395,7 +396,7 @@ let mkUnionCompareWithComparer g tcref (tycon:Tycon) (_thisv,thise) (thatv,thate let expr = let mbuilder = new MatchBuilder(NoSequencePointAtInvisibleBinding,m ) let mkCase ucase = - let cref = mkNestedUnionCaseRef tcref ucase + let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range let thisucv,thisucve = mkCompGenLocal m "thisCastu" (mkProvenUnionCaseTy cref tinst) let thatucv,thatucve = mkCompGenLocal m "thatCastu" (mkProvenUnionCaseTy cref tinst) @@ -454,7 +455,7 @@ let mkUnionEquality g tcref (tycon:Tycon) = let expr = let mbuilder = new MatchBuilder(NoSequencePointAtInvisibleBinding,m ) let mkCase ucase = - let cref = mkNestedUnionCaseRef tcref ucase + let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range let thisucv,thisucve = mkCompGenLocal m "thisCast" (mkProvenUnionCaseTy cref tinst) let thatucv,thatucve = mkCompGenLocal m "objCast" (mkProvenUnionCaseTy cref tinst) @@ -509,7 +510,7 @@ let mkUnionEqualityWithComparer g tcref (tycon:Tycon) (_thisv,thise) thatobje (t let expr = let mbuilder = new MatchBuilder(NoSequencePointAtInvisibleBinding,m ) let mkCase ucase = - let cref = mkNestedUnionCaseRef tcref ucase + let cref = tcref.MakeNestedUnionCaseRef ucase let m = cref.Range let thisucv,thisucve = mkCompGenLocal m "thisCastu" (mkProvenUnionCaseTy cref tinst) let thatucv,thatucve = mkCompGenLocal m "thatCastu" (mkProvenUnionCaseTy cref tinst) @@ -566,7 +567,7 @@ let mkRecdHashWithComparer g tcref (tycon:Tycon) compe = let thisv,thise = mkThisVar g m ty let mkFieldHash (fspec:RecdField) = let fty = fspec.FormalType - let fref = mkNestedRecdFieldRef tcref fspec + let fref = tcref.MakeNestedRecdFieldRef fspec let m = fref.Range let e = mkRecdFieldGetViaExprAddr(thise, fref, tinst, m) @@ -604,7 +605,7 @@ let mkUnionHashWithComparer g tcref (tycon:Tycon) compe = let mbuilder = new MatchBuilder(NoSequencePointAtInvisibleBinding,m ) let accv,acce = mkMutableCompGenLocal m "i" g.int_ty let mkCase i ucase1 = - let c1ref = mkNestedUnionCaseRef tcref ucase1 + let c1ref = tcref.MakeNestedUnionCaseRef ucase1 let ucv,ucve = mkCompGenLocal m "unionCase" (mkProvenUnionCaseTy c1ref tinst) let m = c1ref.Range let mkHash j (rfield:RecdField) = @@ -817,7 +818,7 @@ let TyconIsCandidateForAugmentationWithHash g tycon = TyconIsCandidateForAugment // IComparable semantics associated with F# types. //------------------------------------------------------------------------- -let slotImplMethod (final,c,slotsig) = +let slotImplMethod (final,c,slotsig) : ValMemberInfo = { ImplementedSlotSigs=[slotsig]; MemberFlags= { IsInstance=true; @@ -828,7 +829,7 @@ let slotImplMethod (final,c,slotsig) = IsImplemented=false; ApparentParent=c} -let nonVirtualMethod c = +let nonVirtualMethod c : ValMemberInfo = { ImplementedSlotSigs=[]; MemberFlags={ IsInstance=true; IsDispatchSlot=false; diff --git a/src/fsharp/augment.fsi b/src/fsharp/AugmentWithHashCompare.fsi similarity index 94% rename from src/fsharp/augment.fsi rename to src/fsharp/AugmentWithHashCompare.fsi index 602c0cc2bc0..5d0e7220be1 100644 --- a/src/fsharp/augment.fsi +++ b/src/fsharp/AugmentWithHashCompare.fsi @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. /// Generate the hash/compare functions we add to user-defined types by default. -module internal Microsoft.FSharp.Compiler.Augment +module internal Microsoft.FSharp.Compiler.AugmentWithHashCompare open Internal.Utilities open Microsoft.FSharp.Compiler.AbstractIL @@ -9,7 +9,7 @@ open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.Tast -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals val CheckAugmentationAttribs : bool -> TcGlobals -> Import.ImportMap -> Tycon -> unit val TyconIsCandidateForAugmentationWithCompare : TcGlobals -> Tycon -> bool diff --git a/src/fsharp/formats.fs b/src/fsharp/CheckFormatStrings.fs similarity index 98% rename from src/fsharp/formats.fs rename to src/fsharp/CheckFormatStrings.fs index 12e79af2674..b5bc537745c 100644 --- a/src/fsharp/formats.fs +++ b/src/fsharp/CheckFormatStrings.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Formats +module internal Microsoft.FSharp.Compiler.CheckFormatStrings open Internal.Utilities open Microsoft.FSharp.Compiler @@ -11,7 +11,7 @@ open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.ConstraintSolver type FormatItem = Simple of TType | FuncAndVal diff --git a/src/fsharp/formats.fsi b/src/fsharp/CheckFormatStrings.fsi similarity index 72% rename from src/fsharp/formats.fsi rename to src/fsharp/CheckFormatStrings.fsi index 1016ef34cc4..0773039671a 100644 --- a/src/fsharp/formats.fsi +++ b/src/fsharp/CheckFormatStrings.fsi @@ -5,11 +5,12 @@ /// /// Must be updated if the Printf runtime component is updated. -module internal Microsoft.FSharp.Compiler.Formats +module internal Microsoft.FSharp.Compiler.CheckFormatStrings open Internal.Utilities open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.AbstractIL.Internal -val ParseFormatString : Range.range -> Env.TcGlobals -> string -> TType -> TType -> TType -> TType * TType +val ParseFormatString : Range.range -> TcGlobals -> string -> TType -> TType -> TType -> TType * TType diff --git a/src/fsharp/build.fs b/src/fsharp/CompileOps.fs similarity index 90% rename from src/fsharp/build.fs rename to src/fsharp/CompileOps.fs index 098a2963697..99ea401e774 100644 --- a/src/fsharp/build.fs +++ b/src/fsharp/CompileOps.fs @@ -1,28 +1,28 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -/// Loading initial context, reporting errors etc. -module internal Microsoft.FSharp.Compiler.Build +/// Coordinating compiler operations - configuration, loading initial context, reporting errors etc. +module internal Microsoft.FSharp.Compiler.CompileOps + open System open System.Text open System.IO open System.Collections.Generic open Internal.Utilities open Internal.Utilities.Text +open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library open Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics -open Microsoft.FSharp.Compiler.Pickle +open Microsoft.FSharp.Compiler.TastPickle open Microsoft.FSharp.Compiler.Range -open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.TypeChecker open Microsoft.FSharp.Compiler.SR open Microsoft.FSharp.Compiler.DiagnosticMessage module Tc = Microsoft.FSharp.Compiler.TypeChecker -module SR = Microsoft.FSharp.Compiler.SR open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.Range @@ -31,14 +31,14 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Lexhelp open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.ConstraintSolver open Microsoft.FSharp.Compiler.MSBuildResolver -open Microsoft.FSharp.Compiler.Typrelns -open Microsoft.FSharp.Compiler.Nameres +open Microsoft.FSharp.Compiler.TypeRelations +open Microsoft.FSharp.Compiler.NameResolution open Microsoft.FSharp.Compiler.PrettyNaming open Internal.Utilities.FileSystem open Internal.Utilities.Collections @@ -71,13 +71,13 @@ open FullCompiler // Some Globals //-------------------------------------------------------------------------- -let sigSuffixes = [".mli";".fsi"] +let FSharpSigFileSuffixes = [".mli";".fsi"] let mlCompatSuffixes = [".mli";".ml"] -let implSuffixes = [".ml";".fs";".fsscript";".fsx"] +let FSharpImplFileSuffixes = [".ml";".fs";".fsscript";".fsx"] let resSuffixes = [".resx"] -let scriptSuffixes = [".fsscript";".fsx"] -let doNotRequireNamespaceOrModuleSuffixes = [".mli";".ml"] @ scriptSuffixes -let lightSyntaxDefaultExtensions : string list = [ ".fs";".fsscript";".fsx";".fsi" ] +let FSharpScriptFileSuffixes = [".fsscript";".fsx"] +let doNotRequireNamespaceOrModuleSuffixes = [".mli";".ml"] @ FSharpScriptFileSuffixes +let FSharpLightSyntaxFileSuffixes : string list = [ ".fs";".fsscript";".fsx";".fsi" ] //---------------------------------------------------------------------------- @@ -102,7 +102,7 @@ exception HashLoadedScriptConsideredSource of range exception InvalidInternalsVisibleToAssemblyName of (*badName*)string * (*fileName option*) string option -let RangeOfError(err:PhasedError) = +let GetRangeOfError(err:PhasedError) = let rec RangeFromException = function | ErrorFromAddingConstraint(_,err2,_) -> RangeFromException err2 #if EXTENSIONTYPING @@ -154,8 +154,8 @@ let RangeOfError(err:PhasedError) = | FullAbstraction(_,m) | InterfaceNotRevealed(_,_,m) | WrappedError (_,m) - | Patcompile.MatchIncomplete (_,_,m) - | Patcompile.RuleNeverMatched m + | PatternMatchCompilation.MatchIncomplete (_,_,m) + | PatternMatchCompilation.RuleNeverMatched m | ValNotMutable(_,_,m) | ValNotLocal(_,_,m) | MissingFields(_,m) @@ -191,7 +191,6 @@ let RangeOfError(err:PhasedError) = | UnresolvedOverloading(_,_,_,m) | UnresolvedConversionOperator (_,_,_,m) | PossibleOverload(_,_,_, m) - //| PossibleBestOverload(_,_,m) | VirtualAugmentationOnNullValuedType(m) | NonVirtualAugmentationOnNullValuedType(m) | NonRigidTypar(_,_,_,_,_,m) @@ -266,8 +265,8 @@ let GetErrorNumber(err:PhasedError) = | LetRecEvaluatedOutOfOrder _ -> 22 | NameClash _ -> 23 // 24 cannot be reused - | Patcompile.MatchIncomplete _ -> 25 - | Patcompile.RuleNeverMatched _ -> 26 + | PatternMatchCompilation.MatchIncomplete _ -> 25 + | PatternMatchCompilation.RuleNeverMatched _ -> 26 | ValNotMutable _ -> 27 | ValNotLocal _ -> 28 | MissingFields _ -> 29 @@ -390,7 +389,8 @@ let warningOn err level specificWarnOn = List.mem n specificWarnOn || // Some specific warnings are never on by default, i.e. unused variable warnings match n with - | 1182 -> false + | 1182 -> false // chkUnusedValue - off by default + | 3180 -> false // abImplicitHeapAllocation - off by default | _ -> level >= GetWarningLevel err let SplitRelatedErrors(err:PhasedError) = @@ -722,13 +722,9 @@ let OutputPhasedErrorR (os:System.Text.StringBuilder) (err:PhasedError) = os.Append(Duplicate2E().Format k (DecompileOpName s)) |> ignore | UndefinedName(_,k,id,_) -> os.Append(k (DecompileOpName id.idText)) |> ignore - - | InternalUndefinedTyconItem(f,tcref,s) -> - let _, errs = f((fullDisplayTextOfTyconRef tcref), s) - os.Append(errs) |> ignore - | InternalUndefinedItemRef(f,smr,ccuName,s) -> - let _, errs = f(smr, ccuName, s) - os.Append(errs) |> ignore + | InternalUndefinedItemRef(f,smr,ccuName,s) -> + let _, errs = f(smr, ccuName, s) + os.Append(errs) |> ignore | FieldNotMutable _ -> os.Append(FieldNotMutableE().Format) |> ignore | FieldsFromDifferentTypes (_,fref1,fref2,_) -> @@ -1202,7 +1198,7 @@ let OutputPhasedErrorR (os:System.Text.StringBuilder) (err:PhasedError) = #endif | FullAbstraction(s,_) -> os.Append(FullAbstractionE().Format s) |> ignore | WrappedError (exn,_) -> OutputExceptionR os exn - | Patcompile.MatchIncomplete (isComp,cexOpt,_) -> + | PatternMatchCompilation.MatchIncomplete (isComp,cexOpt,_) -> os.Append(MatchIncomplete1E().Format) |> ignore match cexOpt with | None -> () @@ -1210,7 +1206,7 @@ let OutputPhasedErrorR (os:System.Text.StringBuilder) (err:PhasedError) = | Some (cex,true) -> os.Append(MatchIncomplete3E().Format cex) |> ignore if isComp then os.Append(MatchIncomplete4E().Format) |> ignore - | Patcompile.RuleNeverMatched _ -> os.Append(RuleNeverMatchedE().Format) |> ignore + | PatternMatchCompilation.RuleNeverMatched _ -> os.Append(RuleNeverMatchedE().Format) |> ignore | ValNotMutable _ -> os.Append(ValNotMutableE().Format) |> ignore | ValNotLocal _ -> os.Append(ValNotLocalE().Format) |> ignore | ObsoleteError (s, _) @@ -1370,35 +1366,33 @@ let SanitizeFileName fileName implicitIncludeDir = with _ -> fileName +[] type ErrorLocation = - { - Range : range - File : string - TextRepresentation : string - IsEmpty : bool - } + { Range : range + File : string + TextRepresentation : string + IsEmpty : bool } +[] type CanonicalInformation = - { - ErrorNumber : int - Subcategory : string - TextRepresentation : string - } + { ErrorNumber : int + Subcategory : string + TextRepresentation : string } +[] type DetailedIssueInfo = - { - Location : ErrorLocation option - Canonical : CanonicalInformation - Message : string - } + { Location : ErrorLocation option + Canonical : CanonicalInformation + Message : string } +[] type ErrorOrWarning = | Short of bool * string | Long of bool * DetailedIssueInfo /// returns sequence that contains ErrorOrWarning for the given error + ErrorOrWarning for all related errors let CollectErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,errorStyle,warn, err:PhasedError) = - let outputWhere (showFullPaths,errorStyle) m = + let outputWhere (showFullPaths,errorStyle) m : ErrorLocation = if m = rangeStartup || m = rangeCmdArgs then { Range = m; TextRepresentation = ""; IsEmpty = true; File = "" } else @@ -1448,11 +1442,11 @@ let CollectErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,errorS let errors = ResizeArray() let report err = let OutputWhere(err) = - match RangeOfError err with + match GetRangeOfError err with | Some m -> Some(outputWhere (showFullPaths,errorStyle) m) | None -> None - let OutputCanonicalInformation(err:PhasedError,subcategory, errorNumber) = + let OutputCanonicalInformation(err:PhasedError,subcategory, errorNumber) : CanonicalInformation = 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. @@ -1468,7 +1462,7 @@ let CollectErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,errorS OutputPhasedError os mainError flattenErrors; os.ToString() - let entry = { Location = where; Canonical = canonical; Message = message } + let entry : DetailedIssueInfo = { Location = where; Canonical = canonical; Message = message } errors.Add ( ErrorOrWarning.Long( not warn, entry ) ) @@ -1483,7 +1477,7 @@ let CollectErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,errorS OutputPhasedError os err flattenErrors os.ToString() - let entry = { Location = relWhere; Canonical = relCanonical; Message = relMessage} + let entry : DetailedIssueInfo = { Location = relWhere; Canonical = relCanonical; Message = relMessage} errors.Add( ErrorOrWarning.Long (not warn, entry) ) | _ -> @@ -1513,9 +1507,9 @@ let rec OutputErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,err for e in errors do Printf.bprintf os "\n" match e with - | Short(_, txt) -> + | ErrorOrWarning.Short(_, txt) -> os.Append txt |> ignore - | Long(_, details) -> + | ErrorOrWarning.Long(_, details) -> match details.Location with | Some l when not l.IsEmpty -> os.Append(l.TextRepresentation) |> ignore | _ -> () @@ -1523,7 +1517,7 @@ let rec OutputErrorOrWarning (implicitIncludeDir,showFullPaths,flattenErrors,err os.Append( details.Message ) |> ignore let OutputErrorOrWarningContext prefix fileLineFn os err = - match RangeOfError err with + match GetRangeOfError err with | None -> () | Some m -> let filename = m.FileName @@ -1574,9 +1568,12 @@ let DefaultBasicReferencesForOutOfProjectSources = // Note: this is not a partiuclarly good technique as it relying on the environment the compiler is executing in // to determine the default references. However, System.Core will only fail to load on machines with only .NET 2.0, // in which case the compiler will also be running as a .NET 2.0 process. + // + // NOTE: it seems this can now be removed now that .NET 4.x is minimally assumed when using this toolchain if (try System.Reflection.Assembly.Load "System.Core, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" |> ignore; true with _ -> false) then yield "System.Core" + yield "System.Runtime" yield "System.Web" yield "System.Web.Services" yield "System.Windows.Forms" ] @@ -1603,6 +1600,7 @@ let SystemAssemblies primaryAssemblyName = yield "System.Web.Services" yield "System.Windows.Forms" yield "System.Core" + yield "System.Runtime" yield "System.Observable" yield "System.Numerics"] @@ -1676,6 +1674,7 @@ type CompilerTarget = type ResolveAssemblyReferenceMode = Speculative | ReportErrors +/// Represents the file or string used for the --version flag type VersionFlag = | VersionString of string | VersionFile of string @@ -1736,7 +1735,7 @@ type ImportedAssembly = IsProviderGenerated: bool mutable TypeProviders: Tainted list; #endif - FSharpOptimizationData : Microsoft.FSharp.Control.Lazy> } + FSharpOptimizationData : Microsoft.FSharp.Control.Lazy> } type AvailableImportedAssembly = | ResolvedImportedAssembly of ImportedAssembly @@ -1953,7 +1952,7 @@ type TcConfigBuilder = mutable doTLR : bool (* run TLR pass? *) mutable doFinalSimplify : bool (* do final simplification pass *) mutable optsOn : bool (* optimizations are turned on *) - mutable optSettings : Opt.OptimizationSettings + mutable optSettings : Optimizer.OptimizationSettings mutable emitTailcalls : bool mutable lcid : int option @@ -2116,7 +2115,7 @@ type TcConfigBuilder = doTLR = false doFinalSimplify = false optsOn = false - optSettings = Opt.OptimizationSettings.Defaults + optSettings = Optimizer.OptimizationSettings.Defaults emitTailcalls = true lcid = None // See bug 6071 for product banner spec @@ -2150,7 +2149,7 @@ type TcConfigBuilder = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) if sourceFiles = [] then errorR(Error(FSComp.SR.buildNoInputsSpecified(),rangeCmdArgs)); let ext() = match tcConfigB.target with Dll -> ".dll" | Module -> ".netmodule" | ConsoleExe | WinExe -> ".exe" - let implFiles = sourceFiles |> List.filter (fun lower -> List.exists (Filename.checkSuffix (String.lowercase lower)) implSuffixes) + 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() @@ -2441,8 +2440,10 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = // the versions mismatch, however they are allowed to mismatch in one case: if primaryAssemblyIsSilverlight && mscorlibMajorVersion=5 // SL5 && (match explicitFscoreVersionToCheckOpt with - | Some(v1,v2,v3,_) -> v1=2us && v2=3us && v3=5us // we build SL5 against portable FSCore 2.3.5.0 - | None -> true) // the 'None' code path happens after explicit FSCore was already checked, from now on SL5 path is always excepted + | Some(2us,3us,5us,_) // silverlight is supported for FSharp.Core 2.3.5.x and 3.47.x.y + | Some(3us,47us,_,_) + | None -> true // the 'None' code path happens after explicit FSCore was already checked, from now on SL5 path is always excepted + | _ -> false) then () else @@ -2633,7 +2634,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = | MSBuildResolver.RuntimeLike -> [System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory()] | _ -> - let frameworkRoot = MSBuildResolver.DotNetFrameworkReferenceAssembliesRootDirectory + let frameworkRoot = MSBuildResolver.DotNetFrameworkReferenceAssembliesRootDirectoryOnWindows let frameworkRootVersion = Path.Combine(frameworkRoot,tcConfig.targetFrameworkVersionMajorMinor) [frameworkRootVersion] with e -> @@ -2642,7 +2643,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = member tcConfig.ComputeLightSyntaxInitialStatus filename = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) let lower = String.lowercase filename - let lightOnByDefault = List.exists (Filename.checkSuffix lower) lightSyntaxDefaultExtensions + let lightOnByDefault = List.exists (Filename.checkSuffix lower) FSharpLightSyntaxFileSuffixes if lightOnByDefault then (tcConfig.light <> Some(false)) else (tcConfig.light = Some(true) ) member tcConfig.GetAvailableLoadedSources() = @@ -2702,9 +2703,19 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = let isNetModule = String.Compare(ext,".netmodule",StringComparison.OrdinalIgnoreCase)=0 if String.Compare(ext,".dll",StringComparison.OrdinalIgnoreCase)=0 || String.Compare(ext,".exe",StringComparison.OrdinalIgnoreCase)=0 - || isNetModule then - - let resolved = TryResolveFileUsingPaths(tcConfig.SearchPathsForLibraryFiles,m,nm) + || isNetModule then + + let searchPaths = + // if this is a #r reference (not from dummy range), make sure the directory of the declaring + // file is included in the search path. This should ideally already be one of the search paths, but + // during some global checks it won't be. We append to the end of the search list so that this is the last + // place that is checked. + if m <> range0 && m <> rangeStartup && m <> rangeCmdArgs && FileSystem.IsPathRootedShim m.FileName then + tcConfig.SearchPathsForLibraryFiles @ [Path.GetDirectoryName(m.FileName)] + else + tcConfig.SearchPathsForLibraryFiles + + let resolved = TryResolveFileUsingPaths(searchPaths,m,nm) match resolved with | Some(resolved) -> let sysdir = tcConfig.IsSystemAssembly resolved @@ -2923,17 +2934,15 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = member tcConfig.CoreLibraryDllReference() = fslibReference -let warningMem n l = List.mem n l - -let ReportWarning (globalWarnLevel : int) (specificWarnOff : int list) (specificWarnOn : int list) err = +let ReportWarning (globalWarnLevel : int, specificWarnOff : int list, specificWarnOn : int list) err = let n = GetErrorNumber err - warningOn err globalWarnLevel specificWarnOn && not (warningMem n specificWarnOff) + warningOn err globalWarnLevel specificWarnOn && not (List.mem n specificWarnOff) -let ReportWarningAsError (globalWarnLevel : int) (specificWarnOff : int list) (specificWarnOn : int list) (specificWarnAsError : int list) (specificWarnAsWarn : int list) (globalWarnAsError : bool) err = - (warningOn err globalWarnLevel specificWarnOn) && - not(warningMem (GetErrorNumber err) specificWarnAsWarn) && - ((globalWarnAsError && not (warningMem (GetErrorNumber err) specificWarnOff)) || - warningMem (GetErrorNumber err) specificWarnAsError) +let ReportWarningAsError (globalWarnLevel : int, specificWarnOff : int list, specificWarnOn : int list, specificWarnAsError : int list, specificWarnAsWarn : int list, globalWarnAsError : bool) err = + warningOn err globalWarnLevel specificWarnOn && + not (List.mem (GetErrorNumber err) specificWarnAsWarn) && + ((globalWarnAsError && not (List.mem (GetErrorNumber err) specificWarnOff)) || + List.mem (GetErrorNumber err) specificWarnAsError) //---------------------------------------------------------------------------- // Scoped #nowarn pragmas @@ -2974,7 +2983,7 @@ type ErrorLoggerFilteringByScopedPragmas (checkFile,scopedPragmas,errorLogger:Er override x.WarnSinkImpl err = let report = let warningNum = GetErrorNumber err - match RangeOfError err with + match GetRangeOfError err with | Some m -> not (scopedPragmas |> List.exists (fun pragma -> match pragma with @@ -3016,7 +3025,7 @@ let CanonicalizeFilename filename = let IsScript filename = let lower = String.lowercase filename - scriptSuffixes |> List.exists (Filename.checkSuffix lower) + 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 @@ -3024,7 +3033,7 @@ let QualFileNameOfModuleName m filename modname = QualifiedNameOfFile(mkSynId m let QualFileNameOfFilename m filename = QualifiedNameOfFile(mkSynId m (CanonicalizeFilename filename + (if IsScript filename then "$fsx" else ""))) // Interactive fragments -let QualFileNameOfUniquePath (m, p: string list) = QualifiedNameOfFile(mkSynId m (String.concat "_" p)) +let ComputeQualifiedNameOfFileFromUniquePath (m, p: string list) = QualifiedNameOfFile(mkSynId m (String.concat "_" p)) let QualFileNameOfSpecs filename specs = match specs with @@ -3036,7 +3045,7 @@ let QualFileNameOfImpls filename specs = | [SynModuleOrNamespace(modname,true,_,_,_,_,m)] -> QualFileNameOfModuleName m filename modname | _ -> QualFileNameOfFilename (rangeN filename 1) filename -let PrepandPathToQualFileName x (QualifiedNameOfFile(q)) = QualFileNameOfUniquePath (q.idRange,pathOfLid x@[q.idText]) +let PrepandPathToQualFileName x (QualifiedNameOfFile(q)) = ComputeQualifiedNameOfFileFromUniquePath (q.idRange,pathOfLid x@[q.idText]) let PrepandPathToImpl x (SynModuleOrNamespace(p,c,d,e,f,g,h)) = SynModuleOrNamespace(x@p,c,d,e,f,g,h) let PrepandPathToSpec x (SynModuleOrNamespaceSig(p,c,d,e,f,g,h)) = SynModuleOrNamespaceSig(x@p,c,d,e,f,g,h) @@ -3167,14 +3176,14 @@ let ParseInput (lexer,errorLogger:ErrorLogger,lexbuf:UnicodeLexing.Lexbuf,defaul if mlCompatSuffixes |> List.exists (Filename.checkSuffix lower) then mlCompatWarning (FSComp.SR.buildCompilingExtensionIsForML()) rangeStartup; - if implSuffixes |> List.exists (Filename.checkSuffix lower) then + if FSharpImplFileSuffixes |> List.exists (Filename.checkSuffix lower) then let impl = Parser.implementationFile lexer lexbuf PostParseModuleImpls (defaultNamespace,filename,isLastCompiland,impl) - elif sigSuffixes |> List.exists (Filename.checkSuffix lower) then + elif FSharpSigFileSuffixes |> List.exists (Filename.checkSuffix lower) then let intfs = Parser.signatureFile lexer lexbuf PostParseModuleSpecs (defaultNamespace,filename,isLastCompiland,intfs) else - errorLogger.Error(InternalError(FSComp.SR.buildUnknownFileSuffix(filename),Range.rangeStartup)) + errorLogger.Error(Error(FSComp.SR.buildInvalidSourceFileExtension(filename),Range.rangeStartup)) filteringErrorLogger.ScopedPragmas <- GetScopedPragmasForInput input input finally @@ -3196,7 +3205,7 @@ let ParseOneInputLexbuf (tcConfig:TcConfig,lexResourceManager,conditionalCompila let input = Lexhelp.usingLexbufForParsing (lexbuf,filename) (fun lexbuf -> if verbose then dprintn ("Parsing... "+shortFilename); - let tokenizer = Lexfilter.LexFilter(lightSyntaxStatus, tcConfig.compilingFslib, Lexer.token lexargs skip, lexbuf) + let tokenizer = LexFilter.LexFilter(lightSyntaxStatus, tcConfig.compilingFslib, Lexer.token lexargs skip, lexbuf) if tcConfig.tokenizeOnly then while true do @@ -3238,7 +3247,7 @@ let ParseOneInputLexbuf (tcConfig:TcConfig,lexResourceManager,conditionalCompila let ParseOneInputFile (tcConfig:TcConfig,lexResourceManager,conditionalCompilationDefines,filename,isLastCompiland,errorLogger,retryLocked) = try let lower = String.lowercase filename - if List.exists (Filename.checkSuffix lower) (sigSuffixes@implSuffixes) then + if List.exists (Filename.checkSuffix lower) (FSharpSigFileSuffixes@FSharpImplFileSuffixes) then if not(FileSystem.SafeExists(filename)) then error(Error(FSComp.SR.buildCouldNotFindSourceFile(filename),rangeStartup)) // bug 3155: if the file name is indirect, use a full path @@ -3313,7 +3322,7 @@ type TcAssemblyResolutions(results : AssemblyResolution list, unresolved : Unres #endif #if DEBUG let itFailed = ref false - let addedText = "\nIf you want to debug this right now, attach a debugger, and put a breakpoint in 'build.fs' near the text '!itFailed', and you can re-step through the assembly resolution logic." + 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)) -> if referenceText.Contains("mscorlib") then @@ -3346,13 +3355,12 @@ type TcAssemblyResolutions(results : AssemblyResolution list, unresolved : Unres //---------------------------------------------------------------------------- // Typecheck and optimization environments on disk //-------------------------------------------------------------------------- -open Pickle let IsSignatureDataResource (r: ILResource) = String.hasPrefix r.Name FSharpSignatureDataResourceName let IsOptimizationDataResource (r: ILResource) = String.hasPrefix r.Name FSharpOptimizationDataResourceName let GetSignatureDataResourceName (r: ILResource) = String.dropPrefix (String.dropPrefix r.Name FSharpSignatureDataResourceName) "." let GetOptimizationDataResourceName (r: ILResource) = String.dropPrefix (String.dropPrefix r.Name FSharpOptimizationDataResourceName) "." -let IsReflectedDefinitionsResource (r: ILResource) = String.hasPrefix r.Name QuotationPickler.pickledDefinitionsResourceNameBase +let IsReflectedDefinitionsResource (r: ILResource) = String.hasPrefix r.Name QuotationPickler.SerializedReflectedDefinitionsResourceNameBase type ILResource with /// Get a function to read the bytes from a resource local to an assembly @@ -3376,38 +3384,30 @@ let PickleToResource file g scope rname p x = CustomAttrs = emptyILCustomAttrs } #endif -let GetSignatureData (file, ilScopeRef, ilModule, byteReader) : PickledDataWithReferences = - unpickleObjWithDanglingCcus file ilScopeRef ilModule unpickleModuleInfo (byteReader()) +let GetSignatureData (file, ilScopeRef, ilModule, byteReader) : PickledDataWithReferences = + unpickleObjWithDanglingCcus file ilScopeRef ilModule unpickleCcuInfo (byteReader()) #if NO_COMPILER_BACKEND #else let WriteSignatureData (tcConfig:TcConfig,tcGlobals,exportRemapping,ccu:CcuThunk,file) : ILResource = let mspec = ccu.Contents -#if DEBUG - if !verboseStamps then - dprintf "Signature data before remap:\n%s\n" (Layout.showL (Layout.squashTo 192 (entityL mspec))); - dprintf "---------------------- START OF APPLYING EXPORT REMAPPING TO SIGNATURE DATA------------\n"; -#endif let mspec = ApplyExportRemappingToEntity tcGlobals exportRemapping mspec -#if DEBUG - if !verboseStamps then - dprintf "---------------------- END OF APPLYING EXPORT REMAPPING TO SIGNATURE DATA------------\n"; - dprintf "Signature data after remap:\n%s\n" (Layout.showL (Layout.squashTo 192 (entityL mspec))); -#endif - PickleToResource file tcGlobals ccu (FSharpSignatureDataResourceName+"."+ccu.AssemblyName) pickleModuleInfo + PickleToResource file tcGlobals ccu (FSharpSignatureDataResourceName+"."+ccu.AssemblyName) pickleCcuInfo { mspec=mspec; compileTimeWorkingDir=tcConfig.implicitIncludeDir; - usesQuotations = ccu.UsesQuotations } + usesQuotations = ccu.UsesFSharp20PlusQuotations } #endif // NO_COMPILER_BACKEND let GetOptimizationData (file, ilScopeRef, ilModule, byteReader) = - unpickleObjWithDanglingCcus file ilScopeRef ilModule Opt.u_LazyModuleInfo (byteReader()) + unpickleObjWithDanglingCcus file ilScopeRef ilModule Optimizer.u_CcuOptimizationInfo (byteReader()) #if NO_COMPILER_BACKEND #else let WriteOptimizationData (tcGlobals, file, ccu,modulInfo) = - if verbose then dprintf "Optimization data after remap:\n%s\n" (Layout.showL (Layout.squashTo 192 (Opt.moduleInfoL tcGlobals modulInfo))); - PickleToResource file tcGlobals ccu (FSharpOptimizationDataResourceName+"."+ccu.AssemblyName) Opt.p_LazyModuleInfo modulInfo +#if DEBUG + if verbose then dprintf "Optimization data after remap:\n%s\n" (Layout.showL (Layout.squashTo 192 (Optimizer.moduleInfoL tcGlobals modulInfo))); +#endif + PickleToResource file tcGlobals ccu (FSharpOptimizationDataResourceName+"."+ccu.AssemblyName) Optimizer.p_CcuOptimizationInfo modulInfo #endif //---------------------------------------------------------------------------- @@ -3423,10 +3423,17 @@ let availableToOptionalCcu = function // TcConfigProvider //-------------------------------------------------------------------------- +/// 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 = | TcConfigProvider of (unit -> TcConfig) member x.Get() = (let (TcConfigProvider(f)) = x in f()) + + /// Get a TcConfigProvider which will return only the exact TcConfig. static member Constant(tcConfig) = TcConfigProvider(fun () -> tcConfig) + + /// Get a TcConfigProvider which will continue to respect changes in the underlying + /// TcConfigBuilder rather than delivering snapshots. static member BasedOnMutableBuilder(tcConfigB) = TcConfigProvider(fun () -> TcConfig.Create(tcConfigB,validate=false)) @@ -3435,7 +3442,7 @@ type TcConfigProvider = //-------------------------------------------------------------------------- -/// Tables of imported assemblies. +/// Repreesnts a table of imported assemblies with their resolutions. [] type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResolutions, importsBase:TcImports option, ilGlobalsOpt) = @@ -3604,16 +3611,16 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti ILScopeRef = ilScopeRef; ILAssemblyRefs = ilAssemblyRefs } tcImports.RegisterDll(dllinfo); - let ccuData = + let ccuData : CcuData = { IsFSharp=false; - UsesQuotations=false; - InvalidateEvent=(new Event<_>()).Publish; + UsesFSharp20PlusQuotations=false; + InvalidateEvent=(new Event<_>()).Publish IsProviderGenerated = true - QualifiedName= Some (assembly.PUntaint((fun a -> a.FullName), m)); - Contents = NewCcuContents ilScopeRef m ilShortAssemName (NewEmptyModuleOrNamespaceType Namespace) ; - ILScopeRef = ilScopeRef; - Stamp = newStamp(); - SourceCodeDirectory = ""; + QualifiedName= Some (assembly.PUntaint((fun a -> a.FullName), m)) + Contents = NewCcuContents ilScopeRef m ilShortAssemName (NewEmptyModuleOrNamespaceType Namespace) + ILScopeRef = ilScopeRef + Stamp = newStamp() + SourceCodeDirectory = "" FileName = Some fileName MemberSignatureEquality = (fun ty1 ty2 -> Tastops.typeEquivAux EraseAll g ty1 ty2) ImportProvidedType = (fun ty -> Import.ImportProvidedType (tcImports.GetImportMap()) m ty) @@ -3621,14 +3628,14 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let ccu = CcuThunk.Create(ilShortAssemName,ccuData) let ccuinfo = - { FSharpViewOfMetadata=ccu; - ILScopeRef = ilScopeRef; - AssemblyAutoOpenAttributes = []; - AssemblyInternalsVisibleToAttributes = []; - IsProviderGenerated = true; - TypeProviders=[]; + { FSharpViewOfMetadata=ccu + ILScopeRef = ilScopeRef + AssemblyAutoOpenAttributes = [] + AssemblyInternalsVisibleToAttributes = [] + IsProviderGenerated = true + TypeProviders=[] FSharpOptimizationData = notlazy None } - tcImports.RegisterCcu(ccuinfo); + tcImports.RegisterCcu(ccuinfo) // Yes, it is generative true, dllinfo.ProviderGeneratedStaticLinkMap @@ -3674,7 +3681,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let pdbDir = (try Filename.directoryName filename with _ -> ".") let pdbFile = (try Filename.chopExtension filename with _ -> filename)+".pdb" if FileSystem.SafeExists pdbFile then - if verbose then dprintf "reading PDB file %s from directory %s\n" pdbFile pdbDir; + if verbose then dprintf "reading PDB file %s from directory %s\n" pdbFile pdbDir Some pdbDir else None @@ -3683,7 +3690,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let ilILBinaryReader = OpenILBinary(filename,tcConfig.optimizeForMemory,tcConfig.openBinariesInMemory,ilGlobalsOpt,pdbPathOption, tcConfig.primaryAssembly.Name, tcConfig.noDebugData, tcConfig.shadowCopyReferences) - tcImports.AttachDisposeAction(fun _ -> ILBinaryReader.CloseILModuleReader ilILBinaryReader); + tcImports.AttachDisposeAction(fun _ -> ILBinaryReader.CloseILModuleReader ilILBinaryReader) ilILBinaryReader.ILModuleDef, ilILBinaryReader.ILAssemblyRefs with e -> error(Error(FSComp.SR.buildErrorOpeningBinaryFile(filename, e.Message),m)) @@ -3858,12 +3865,14 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti // Add the invalidation signal handlers to each provider for provider in providers do - provider.PUntaint((fun tp -> tp.Invalidate.Add(fun _ -> invalidateCcu.Trigger ("The provider '" + fileNameOfRuntimeAssembly + "' reported a change"))), m) + provider.PUntaint((fun tp -> + let handler = tp.Invalidate.Subscribe(fun _ -> invalidateCcu.Trigger ("The provider '" + fileNameOfRuntimeAssembly + "' reported a change")) + tcImports.AttachDisposeAction(fun () -> try handler.Dispose() with _ -> ())), m) match providers with | [] -> if wasApproved then - warning(Error(FSComp.SR.etHostingAssemblyFoundWithoutHosts(fileNameOfRuntimeAssembly,typeof.FullName),m)); + warning(Error(FSComp.SR.etHostingAssemblyFoundWithoutHosts(fileNameOfRuntimeAssembly,typeof.FullName),m)) | _ -> if typeProviderEnvironment.showResolutionMessages then @@ -3929,7 +3938,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti | _ -> error(InternalError("PrepareToImportReferencedIlDll: 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); + if verbose then dprintn ("Converting IL assembly to F# data structures "+nm) let auxModuleLoader = tcImports.MkLoaderForMultiModuleIlAssemblies m let invalidateCcu = new Event<_>() let ccu = Import.ImportILAssembly(tcImports.GetImportMap,m,auxModuleLoader,ilScopeRef,tcConfig.implicitIncludeDir, Some filename,ilModule,invalidateCcu.Publish) @@ -3937,16 +3946,16 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let ilg = defaultArg ilGlobalsOpt EcmaILGlobals let ccuinfo = - { FSharpViewOfMetadata=ccu; - ILScopeRef = ilScopeRef; - AssemblyAutoOpenAttributes = GetAutoOpenAttributes ilg ilModule; - AssemblyInternalsVisibleToAttributes = GetInternalsVisibleToAttributes ilg ilModule; + { FSharpViewOfMetadata=ccu + ILScopeRef = ilScopeRef + AssemblyAutoOpenAttributes = GetAutoOpenAttributes ilg ilModule + AssemblyInternalsVisibleToAttributes = GetInternalsVisibleToAttributes ilg ilModule #if EXTENSIONTYPING - IsProviderGenerated = false; - TypeProviders = []; + IsProviderGenerated = false + TypeProviders = [] #endif FSharpOptimizationData = notlazy None } - tcImports.RegisterCcu(ccuinfo); + tcImports.RegisterCcu(ccuinfo) let phase2 () = #if EXTENSIONTYPING ccuinfo.TypeProviders <- tcImports.ImportTypeProviderExtensions (tpApprovals, displayPSTypeProviderSecurityDialogBlockingUI, tcConfig, filename, ilScopeRef, ilModule.ManifestOfAssembly.CustomAttrs.AsList, ccu.Contents, invalidateCcu, m) @@ -3966,14 +3975,14 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti 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 ("Converting F# assembly to F# data structures "+(getNameOfScopeRef ilScopeRef)) let attrs = GetCustomAttributesOfIlModule ilModule - assert (List.exists IsSignatureDataVersionAttr attrs); - if verbose then dprintn ("Relinking interface info from F# assembly "+ilShortAssemName); + assert (List.exists IsSignatureDataVersionAttr attrs) + if verbose then dprintn ("Relinking interface info from F# assembly "+ilShortAssemName) let resources = ilModule.Resources.AsList let externalSigAndOptData = ["FSharp.Core";"FSharp.LanguageService.Compiler"] if not(List.contains ilShortAssemName externalSigAndOptData) then - assert (List.exists IsSignatureDataResource resources); + assert (List.exists IsSignatureDataResource resources) let optDataReaders = resources |> List.choose (fun r -> if IsOptimizationDataResource r then Some(GetOptimizationDataResourceName r,r.GetByteReader(m)) else None) @@ -3990,9 +3999,9 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti if List.contains ilShortAssemName externalSigAndOptData then let sigFileName = Path.ChangeExtension(filename, "sigdata") if not sigDataReaders.IsEmpty then - error(Error(FSComp.SR.buildDidNotExpectSigdataResource(),m)); + error(Error(FSComp.SR.buildDidNotExpectSigdataResource(),m)) if not (FileSystem.SafeExists sigFileName) then - error(Error(FSComp.SR.buildExpectedSigdataFile(), m)); + error(Error(FSComp.SR.buildExpectedSigdataFile(), m)) [ (ilShortAssemName, (fun () -> FileSystem.ReadAllBytesShim sigFileName))] else sigDataReaders @@ -4005,16 +4014,16 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti if List.contains ilShortAssemName externalSigAndOptData then let optDataFile = Path.ChangeExtension(filename, "optdata") if not optDataReaders.IsEmpty then - error(Error(FSComp.SR.buildDidNotExpectOptDataResource(),m)); + error(Error(FSComp.SR.buildDidNotExpectOptDataResource(),m)) if not (FileSystem.SafeExists optDataFile) then - error(Error(FSComp.SR.buildExpectedFileAlongSideFSharpCore(optDataFile),m)); + error(Error(FSComp.SR.buildExpectedFileAlongSideFSharpCore(optDataFile),m)) [ (ilShortAssemName, (fun () -> FileSystem.ReadAllBytesShim optDataFile))] else optDataReaders let optDatas = Map.ofList optDataReaders - let minfo : PickledModuleInfo = data.RawData + let minfo : PickledCcuInfo = data.RawData let mspec = minfo.mspec #if EXTENSIONTYPING @@ -4050,7 +4059,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti IsProviderGenerated = false ImportProvidedType = (fun ty -> Import.ImportProvidedType (tcImports.GetImportMap()) m ty) #endif - UsesQuotations = minfo.usesQuotations + UsesFSharp20PlusQuotations = minfo.usesQuotations MemberSignatureEquality= (fun ty1 ty2 -> Tastops.typeEquivAux EraseAll (tcImports.GetTcGlobals()) ty1 ty2) TypeForwarders = match ilModule.Manifest with | Some manifest -> ImportILAssemblyTypeForwarders(tcImports.GetImportMap,m,manifest.ExportedTypes) | None -> Map.empty }) @@ -4093,7 +4102,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti let phase2 () = (* Relink *) (* dprintf "Phase2: %s\n" filename; REMOVE DIAGNOSTICS *) - ccuRawDataAndInfos |> List.iter (fun (data,_,_) -> data.OptionalFixup(fun nm -> availableToOptionalCcu(tcImports.FindCcu(m,nm,lookupOnly=false))) |> ignore); + ccuRawDataAndInfos |> List.iter (fun (data,_,_) -> data.OptionalFixup(fun nm -> availableToOptionalCcu(tcImports.FindCcu(m,nm,lookupOnly=false))) |> ignore) #if EXTENSIONTYPING ccuRawDataAndInfos |> List.iter (fun (_,_,phase2) -> phase2()) #endif @@ -4325,7 +4334,7 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti sysCcu.FSharpViewOfMetadata else let search = - seq { yield sysCcu.FSharpViewOfMetadata; + seq { yield sysCcu.FSharpViewOfMetadata yield! frameworkTcImports.GetCcusInDeclOrder() for dllName in SystemAssemblies tcConfig.primaryAssembly.Name do match frameworkTcImports.CcuTable.TryFind dllName with @@ -4404,11 +4413,8 @@ type TcImports(tcConfigP:TcConfigProvider, initialResolutions:TcAssemblyResoluti disposeActions <- [] for action in actions do action() -//---------------------------------------------------------------------------- -// Add "#r" and "#I" declarations to the tcConfig -//-------------------------------------------------------------------------- - -// Add the reference and add the ccu to the type checking environment . Only used by F# Interactive +/// Process #r in F# Interactive. +/// Adds the reference to the tcImports and add the ccu to the type checking environment. let RequireDLL (tcImports:TcImports) tcEnv m file = let RequireResolved = function | ResolvedImportedAssembly(ccuinfo) -> ccuinfo @@ -4554,29 +4560,34 @@ let ApplyMetaCommandsFromInputToTcConfig (tcConfig:TcConfig) (inp:ParsedInput,pa ProcessMetaCommandsFromInput (getWarningNumber, addReferencedAssemblyByPath, addLoadedSource) tcConfigB inp pathOfMetaCommandSource () TcConfig.Create(tcConfigB,validate=false) -let GetAssemblyResolutionInformation(tcConfig : TcConfig) : AssemblyResolution list * UnresolvedAssemblyReference list = +//---------------------------------------------------------------------------- +// Compute the load closure of a set of script files +//-------------------------------------------------------------------------- + +let GetAssemblyResolutionInformation(tcConfig : TcConfig) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) let assemblyList = TcAssemblyResolutions.GetAllDllReferences(tcConfig) let resolutions = TcAssemblyResolutions.Resolve(tcConfig,assemblyList,[]) resolutions.GetAssemblyResolutions(),resolutions.GetUnresolvedReferences() -type LoadClosure = { - /// The source files along with the ranges of the #load positions in each file. - SourceFiles: (string * range list) list - /// The resolved references along with the ranges of the #r positions in each file. - References: (string * AssemblyResolution list) list - /// The list of references that were not resolved during load closure. These may still be extension references. - UnresolvedReferences : UnresolvedAssemblyReference list - /// The list of all sources in the closure with inputs when available - Inputs: (string * ParsedInput option) list - /// The #nowarns - NoWarns: (string * range list) list - /// Errors seen while parsing root of closure - RootErrors : PhasedError list - /// Warnings seen while parsing root of closure - RootWarnings : PhasedError list - } - +[] +type LoadClosure = + { /// The source files along with the ranges of the #load positions in each file. + SourceFiles: (string * range list) list + /// The resolved references along with the ranges of the #r positions in each file. + References: (string * AssemblyResolution list) list + /// The list of references that were not resolved during load closure. These may still be extension references. + UnresolvedReferences : UnresolvedAssemblyReference list + /// The list of all sources in the closure with inputs when available + Inputs: (string * ParsedInput option) list + /// The #nowarns + NoWarns: (string * range list) list + /// Errors seen while parsing root of closure + RootErrors : PhasedError list + /// Warnings seen while parsing root of closure + RootWarnings : PhasedError list } + + [] type CodeContext = | Evaluation // in fsi.exe @@ -4587,11 +4598,11 @@ type CodeContext = module private ScriptPreprocessClosure = open Internal.Utilities.Text.Lexing - type private ClosureDirective = + type ClosureDirective = | SourceFile of string * range * string // filename, range, source text | ClosedSourceFile of string * range * ParsedInput option * PhasedError list * PhasedError list * (string * range) list // filename, range, errors, warnings, nowarns - type private Observed() = + type Observed() = let seen = System.Collections.Generic.Dictionary<_,bool>() member ob.SetSeen(check) = if not(seen.ContainsKey(check)) then @@ -4619,7 +4630,7 @@ module private ScriptPreprocessClosure = ParseOneInputLexbuf (tcConfig,lexResourceManager,defines,lexbuf,filename,isLastCompiland,errorLogger) /// Create a TcConfig for load closure starting from a single .fsx file - let CreateScriptSourceTcConfig(filename:string,codeContext) = + let CreateScriptSourceTcConfig (filename:string, codeContext) = let projectDir = Path.GetDirectoryName(filename) let isInteractive = (codeContext = CodeContext.Evaluation) let isInvalidationSupported = (codeContext = CodeContext.Editing) @@ -4637,7 +4648,7 @@ module private ScriptPreprocessClosure = tcConfigB.implicitlyResolveAssemblies <- false TcConfig.Create(tcConfigB,validate=true) - let private SourceFileOfFilename(filename,m,inputCodePage:int option) : ClosureDirective list = + let SourceFileOfFilename(filename,m,inputCodePage:int option) : ClosureDirective list = try let filename = FileSystem.SafeGetFullPath(filename) use stream = FileSystem.FileStreamReadShim filename @@ -4670,7 +4681,7 @@ module private ScriptPreprocessClosure = let tcConfigB = tcConfig.CloneOfOriginalBuilder TcConfig.Create(tcConfigB,validate=false),nowarns - let private FindClosureDirectives(closureDirectives,tcConfig:TcConfig,codeContext,lexResourceManager:Lexhelp.LexResourceManager) = + let FindClosureDirectives(closureDirectives,tcConfig:TcConfig,codeContext,lexResourceManager:Lexhelp.LexResourceManager) = let tcConfig = ref tcConfig let observedSources = Observed() @@ -4713,7 +4724,7 @@ module private ScriptPreprocessClosure = closureDirectives |> List.map FindClosure |> List.concat, !tcConfig /// Reduce the full directive closure into LoadClosure - let private GetLoadClosure(rootFilename,closureDirectives,tcConfig,codeContext) = + let GetLoadClosure(rootFilename,closureDirectives,tcConfig,codeContext) = // Mark the last file as isLastCompiland. closureDirectives is currently reversed. let closureDirectives = @@ -4726,15 +4737,14 @@ module private ScriptPreprocessClosure = let sourceFiles = ref [] let sourceInputs = ref [] let globalNoWarns = ref [] - let ExtractOne = function + for directive in closureDirectives do + match directive with | ClosedSourceFile(filename,m,input,_,_,noWarns) -> let filename = FileSystem.SafeGetFullPath(filename) sourceFiles := (filename,m) :: !sourceFiles globalNoWarns := (!globalNoWarns @ noWarns) sourceInputs := (filename,input) :: !sourceInputs | _ -> failwith "Unexpected" - - closureDirectives |> List.iter ExtractOne // This unreverses the list of sources // Resolve all references. let resolutionErrors = ref [] @@ -4757,7 +4767,7 @@ module private ScriptPreprocessClosure = | _ -> [],[] // When no file existed. let isRootRange exn = - match RangeOfError exn with + match GetRangeOfError exn with | Some m -> // Return true if the error was *not* from a #load-ed file. let isArgParameterWhileNotEditing = (codeContext <> CodeContext.Editing) && (m = range0 || m = rangeStartup || m = rangeCmdArgs) @@ -4769,17 +4779,18 @@ module private ScriptPreprocessClosure = let rootErrors = rootErrors |> List.filter isRootRange let rootWarnings = rootWarnings |> List.filter isRootRange - let result = {SourceFiles = List.groupByFirst !sourceFiles - References = List.groupByFirst references - UnresolvedReferences = unresolvedReferences - Inputs = !sourceInputs - NoWarns = List.groupByFirst !globalNoWarns - RootErrors = rootErrors - RootWarnings = rootWarnings} + let result : LoadClosure = + { SourceFiles = List.groupByFirst !sourceFiles + References = List.groupByFirst references + UnresolvedReferences = unresolvedReferences + Inputs = !sourceInputs + NoWarns = List.groupByFirst !globalNoWarns + RootErrors = rootErrors + RootWarnings = rootWarnings} + result - - /// Given source text, find the full load closure - /// Used from service.fs, when editing a script file + + /// Given source text, find the full load closure. Used from service.fs, when editing a script file let GetFullClosureOfScriptSource(filename,source,codeContext,lexResourceManager:Lexhelp.LexResourceManager) = let tcConfig = CreateScriptSourceTcConfig(filename,codeContext) let protoClosure = [SourceFile(filename,range0,source)] @@ -4796,30 +4807,27 @@ module private ScriptPreprocessClosure = type LoadClosure with // Used from service.fs, when editing a script file - static member ComputeClosureOfSourceText(filename:string,source:string,codeContext,lexResourceManager:Lexhelp.LexResourceManager) : LoadClosure = + static member ComputeClosureOfSourceText (filename:string, source:string, codeContext, lexResourceManager:Lexhelp. LexResourceManager) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parse) - ScriptPreprocessClosure.GetFullClosureOfScriptSource(filename,source,codeContext,lexResourceManager) + ScriptPreprocessClosure.GetFullClosureOfScriptSource (filename, source, codeContext, lexResourceManager) /// Used from fsi.fs and fsc.fs, for #load and command line. /// The resulting references are then added to a TcConfig. - static member ComputeClosureOfSourceFiles(tcConfig:TcConfig,files:(string*range) list,codeContext,useDefaultScriptingReferences:bool,lexResourceManager:Lexhelp.LexResourceManager) : LoadClosure = + static member ComputeClosureOfSourceFiles (tcConfig:TcConfig, files:(string*range) list, codeContext, useDefaultScriptingReferences:bool, lexResourceManager:Lexhelp.LexResourceManager) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parse) - ScriptPreprocessClosure.GetFullClosureOfScriptFiles(tcConfig,files,codeContext,useDefaultScriptingReferences,lexResourceManager) + ScriptPreprocessClosure.GetFullClosureOfScriptFiles (tcConfig, files, codeContext, useDefaultScriptingReferences, lexResourceManager) //---------------------------------------------------------------------------- -// Build the initial type checking environment +// Initial type checking environment //-------------------------------------------------------------------------- -let implicitOpen tcGlobals amap m tcEnv p = - if verbose then dprintf "opening %s\n" p - Tc.TcOpenDecl TcResultsSink.NoSink tcGlobals amap m m tcEnv (pathToSynLid m (splitNamespace p)) - -let GetInitialTypecheckerEnv (assemblyName:string option) (initm:range) (tcConfig:TcConfig) (tcImports:TcImports) tcGlobals = +/// Build the initial type checking environment +let GetInitialTcEnv (assemblyName:string option, initm:range, tcConfig:TcConfig, tcImports:TcImports, tcGlobals) = let initm = initm.StartRange - if verbose then dprintf "--- building initial tcEnv\n" - let internalsAreVisibleHere (ccuinfo:ImportedAssembly) = + + let internalsAreVisibleHere (asm:ImportedAssembly) = match assemblyName with | None -> false | Some assemblyName -> @@ -4827,30 +4835,56 @@ let GetInitialTypecheckerEnv (assemblyName:string option) (initm:range) (tcConfi try System.Reflection.AssemblyName(visibleTo).Name = assemblyName with e -> - warning(InvalidInternalsVisibleToAssemblyName(visibleTo,ccuinfo.FSharpViewOfMetadata.FileName)) + warning(InvalidInternalsVisibleToAssemblyName(visibleTo,asm.FSharpViewOfMetadata.FileName)) false - let internalsVisibleTos = ccuinfo.AssemblyInternalsVisibleToAttributes + let internalsVisibleTos = asm.AssemblyInternalsVisibleToAttributes List.exists isTargetAssemblyName internalsVisibleTos - let ccus = tcImports.GetImportedAssemblies() |> List.map (fun ccuinfo -> ccuinfo.FSharpViewOfMetadata, - ccuinfo.AssemblyAutoOpenAttributes, - ccuinfo |> internalsAreVisibleHere) + + let ccus = + tcImports.GetImportedAssemblies() + |> List.map (fun asm -> asm.FSharpViewOfMetadata, asm.AssemblyAutoOpenAttributes, asm |> internalsAreVisibleHere) + let amap = tcImports.GetImportMap() - let tcEnv = Tc.CreateInitialTcEnv(tcGlobals,amap,initm,ccus) |> (fun tce -> - if tcConfig.checkOverflow then - List.fold (implicitOpen tcGlobals amap initm) tce [FSharpLib.CoreOperatorsCheckedName] - else - tce) - if verbose then dprintf "--- opening implicit paths\n" - if verbose then dprintf "--- GetInitialTypecheckerEnv, top modules = %s\n" (String.concat ";" (NameMap.domainL tcEnv.NameEnv.eModulesAndNamespaces)) - if verbose then dprintf "<-- GetInitialTypecheckerEnv\n" + + let tcEnv = Tc.CreateInitialTcEnv(tcGlobals, amap, initm, ccus) + + let tcEnv = + if tcConfig.checkOverflow then + Tc.TcOpenDecl TcResultsSink.NoSink tcGlobals amap initm initm tcEnv (pathToSynLid initm (splitNamespace FSharpLib.CoreOperatorsCheckedName)) + else + tcEnv tcEnv //---------------------------------------------------------------------------- -// TYPECHECK -//-------------------------------------------------------------------------- +// Fault injection + +/// Inject faults into checking +let CheckSimulateException(tcConfig:TcConfig) = + match tcConfig.simulateException with + | Some("tc-oom") -> raise(System.OutOfMemoryException()) + | Some("tc-an") -> raise(System.ArgumentNullException("simulated")) + | Some("tc-invop") -> raise(System.InvalidOperationException()) + | Some("tc-av") -> raise(System.AccessViolationException()) + | Some("tc-aor") -> raise(System.ArgumentOutOfRangeException()) + | Some("tc-dv0") -> raise(System.DivideByZeroException()) + | Some("tc-nfn") -> raise(System.NotFiniteNumberException()) + | Some("tc-oe") -> raise(System.OverflowException()) + | Some("tc-atmm") -> raise(System.ArrayTypeMismatchException()) + | Some("tc-bif") -> raise(System.BadImageFormatException()) + | Some("tc-knf") -> raise(System.Collections.Generic.KeyNotFoundException()) + | Some("tc-ior") -> raise(System.IndexOutOfRangeException()) + | Some("tc-ic") -> raise(System.InvalidCastException()) + | Some("tc-ip") -> raise(System.InvalidProgramException()) + | Some("tc-ma") -> raise(System.MemberAccessException()) + | Some("tc-ni") -> raise(System.NotImplementedException()) + | Some("tc-nr") -> raise(System.NullReferenceException()) + | Some("tc-oc") -> raise(System.OperationCanceledException()) + | Some("tc-fail") -> failwith "simulated" + | _ -> () -(* The incremental state of type checking files *) -(* REVIEW: clean this up *) +//---------------------------------------------------------------------------- +// Type-check sets of files +//-------------------------------------------------------------------------- type RootSigs = Zmap type RootImpls = Zset @@ -4864,7 +4898,7 @@ type TcState = tcsNiceNameGen: NiceNameGenerator tcsTcSigEnv: TcEnv tcsTcImplEnv: TcEnv - (* The accumulated results of type checking for this assembly *) + /// The accumulated results of type checking for this assembly tcsRootSigsAndImpls : TypecheckerSigsAndImpls } member x.NiceNameGenerator = x.tcsNiceNameGen member x.TcEnvFromSignatures = x.tcsTcSigEnv @@ -4876,14 +4910,13 @@ type TcState = tcsTcImplEnv = tcEnvAtEndOfLastInput } -let TypecheckInitialState(m,ccuName,tcConfig:TcConfig,tcGlobals,tcImports:TcImports,niceNameGen,tcEnv0) = +let GetInitialTcState(m,ccuName,tcConfig:TcConfig,tcGlobals,tcImports:TcImports,niceNameGen,tcEnv0) = ignore tcImports - if verbose then dprintf "Typecheck (constructing initial state)....\n" // Create a ccu to hold all the results of compilation let ccuType = NewCcuContents ILScopeRef.Local m ccuName (NewEmptyModuleOrNamespaceType Namespace) let ccu = CcuThunk.Create(ccuName,{IsFSharp=true - UsesQuotations=false + UsesFSharp20PlusQuotations=false #if EXTENSIONTYPING InvalidateEvent=(new Event<_>()).Publish IsProviderGenerated = false @@ -4898,7 +4931,7 @@ let TypecheckInitialState(m,ccuName,tcConfig:TcConfig,tcGlobals,tcImports:TcImpo MemberSignatureEquality= (Tastops.typeEquivAux EraseAll tcGlobals) TypeForwarders=Map.empty }) - (* OK, is this is the F# library CCU then fix it up. *) + // OK, is this is the FSharp.Core CCU then fix it up. if tcConfig.compilingFslib then tcGlobals.fslibCcu.Fixup(ccu) @@ -4913,32 +4946,9 @@ let TypecheckInitialState(m,ccuName,tcConfig:TcConfig,tcGlobals,tcImports:TcImpo tcsTcImplEnv=tcEnv0 tcsRootSigsAndImpls = RootSigsAndImpls (rootSigs, rootImpls, allSigModulTyp, allImplementedSigModulTyp) } -let CheckSimulateException(tcConfig:TcConfig) = - match tcConfig.simulateException with - | Some("tc-oom") -> raise(System.OutOfMemoryException()) - | Some("tc-an") -> raise(System.ArgumentNullException("simulated")) - | Some("tc-invop") -> raise(System.InvalidOperationException()) - | Some("tc-av") -> raise(System.AccessViolationException()) - | Some("tc-aor") -> raise(System.ArgumentOutOfRangeException()) - | Some("tc-dv0") -> raise(System.DivideByZeroException()) - | Some("tc-nfn") -> raise(System.NotFiniteNumberException()) - | Some("tc-oe") -> raise(System.OverflowException()) - | Some("tc-atmm") -> raise(System.ArrayTypeMismatchException()) - | Some("tc-bif") -> raise(System.BadImageFormatException()) - | Some("tc-knf") -> raise(System.Collections.Generic.KeyNotFoundException()) - | Some("tc-ior") -> raise(System.IndexOutOfRangeException()) - | Some("tc-ic") -> raise(System.InvalidCastException()) - | Some("tc-ip") -> raise(System.InvalidProgramException()) - | Some("tc-ma") -> raise(System.MemberAccessException()) - | Some("tc-ni") -> raise(System.NotImplementedException()) - | Some("tc-nr") -> raise(System.NullReferenceException()) - | Some("tc-oc") -> raise(System.OperationCanceledException()) - | Some("tc-fail") -> failwith "simulated" - | _ -> () - -(* Typecheck a single file or interactive entry into F# Interactive *) -let TypecheckOneInputEventually +/// Typecheck a single file or interactive entry into F# Interactive +let TypeCheckOneInputEventually (checkForErrors , tcConfig:TcConfig, tcImports:TcImports, tcGlobals, prefixPathOpt, tcSink, tcState: TcState, inp: ParsedInput) = eventually { @@ -4950,31 +4960,19 @@ let TypecheckOneInputEventually let! (topAttrs, mimpls,tcEnvAtEnd,tcSigEnv,tcImplEnv,topSigsAndImpls,ccuType) = eventually { match inp with - | ParsedInput.SigFile (ParsedSigFileInput(filename,qualNameOfFile, _,_,_) as file) -> + | ParsedInput.SigFile (ParsedSigFileInput(_, qualNameOfFile, _, _, _) as file) -> // Check if we've seen this top module signature before. if Zmap.mem qualNameOfFile rootSigs then errorR(Error(FSComp.SR.buildSignatureAlreadySpecified(qualNameOfFile.Text),m.StartRange)) - (* Check if the implementation came first in compilation order *) + // Check if the implementation came first in compilation order if Zset.contains qualNameOfFile rootImpls then errorR(Error(FSComp.SR.buildImplementationAlreadyGivenDetail(qualNameOfFile.Text),m)) // Typecheck the signature file -#if DEBUG - if !verboseStamps then - dprintf "---------------------- START CHECK %A ------------\n" filename -#else - filename |> ignore -#endif let! (tcEnvAtEnd,tcEnv,smodulTypeRoot) = - Tc.TypecheckOneSigFile (tcGlobals,tcState.tcsNiceNameGen,amap,tcState.tcsCcu,checkForErrors,tcConfig.conditionalCompilationDefines,tcSink) tcState.tcsTcSigEnv file - -#if DEBUG - if !verboseStamps then - dprintf "Type-checked signature:\n%s\n" (Layout.showL (Layout.squashTo 192 (entityTypeL smodulTypeRoot))) - dprintf "---------------------- END CHECK %A ------------\n" filename -#endif + Tc.TypeCheckOneSigFile (tcGlobals,tcState.tcsNiceNameGen,amap,tcState.tcsCcu,checkForErrors,tcConfig.conditionalCompilationDefines,tcSink) tcState.tcsTcSigEnv file let rootSigs = Zmap.add qualNameOfFile smodulTypeRoot rootSigs @@ -4986,7 +4984,7 @@ let TypecheckOneInputEventually let m = qualNameOfFile.Range TcOpenDecl tcSink tcGlobals amap m m tcEnv prefixPath - let res = (EmptyTopAttrs, [],tcEnvAtEnd,tcEnv,tcState.tcsTcImplEnv,RootSigsAndImpls(rootSigs,rootImpls, allSigModulTyp, allImplementedSigModulTyp ),tcState.tcsCcuType) + let res = (EmptyTopAttrs, [], tcEnvAtEnd, tcEnv, tcState.tcsTcImplEnv, RootSigsAndImpls(rootSigs, rootImpls, allSigModulTyp, allImplementedSigModulTyp), tcState.tcsCcuType) return res | ParsedInput.ImplFile (ParsedImplFileInput(filename,_,qualNameOfFile,_,_,_,_) as file) -> @@ -5002,41 +5000,40 @@ let TypecheckOneInputEventually let tcImplEnv = tcState.tcsTcImplEnv -#if DEBUG - if !verboseStamps then - dprintf "---------------------- START CHECK %A ------------\n" filename -#endif // Typecheck the implementation file let! topAttrs,implFile,tcEnvAtEnd = - Tc.TypecheckOneImplFile (tcGlobals,tcState.tcsNiceNameGen,amap,tcState.tcsCcu,checkForErrors,tcConfig.conditionalCompilationDefines,tcSink) tcImplEnv rootSigOpt file + Tc.TypeCheckOneImplFile (tcGlobals,tcState.tcsNiceNameGen,amap,tcState.tcsCcu,checkForErrors,tcConfig.conditionalCompilationDefines,tcSink) tcImplEnv rootSigOpt file let hadSig = isSome rootSigOpt let implFileSigType = SigTypeOfImplFile implFile -#if DEBUG - if !verboseStamps then - dprintf "Implementation signature:\n%s\n" (Layout.showL (Layout.squashTo 192 (entityTypeL implFileSigType))) - dprintf "---------------------- END CHECK %A ------------\n" filename -#endif - - if verbose then dprintf "done TypecheckOneImplFile...\n" + if verbose then dprintf "done TypeCheckOneImplFile...\n" let rootImpls = Zset.add qualNameOfFile rootImpls // 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 = Tc.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 else Tc.AddLocalRootModuleOrNamespace TcResultsSink.NoSink tcGlobals amap m tcState.tcsTcSigEnv implFileSigType - // Open the prefixPath for fsi.exe + // Open the prefixPath for fsi.exe (tcImplEnv) let tcImplEnv = match prefixPathOpt with - | None -> tcImplEnv - | Some prefixPath -> - TcOpenDecl tcSink tcGlobals amap m m tcImplEnv prefixPath + | Some prefixPath -> TcOpenDecl tcSink tcGlobals amap m m tcImplEnv prefixPath + | _ -> tcImplEnv - let allImplementedSigModulTyp = combineModuleOrNamespaceTypeList [] m [implFileSigType; allImplementedSigModulTyp] + // Open the prefixPath for fsi.exe (tcSigEnv) + let tcSigEnv = + match prefixPathOpt with + | Some prefixPath when not hadSig -> TcOpenDecl tcSink tcGlobals amap m m tcSigEnv prefixPath + | _ -> tcSigEnv + + let allImplementedSigModulTyp = CombineCcuContentFragments m [implFileSigType; allImplementedSigModulTyp] // Add it to the CCU let ccuType = @@ -5044,10 +5041,10 @@ let TypecheckOneInputEventually // [CHECK: Why? This seriously degraded performance] NewCcuContents ILScopeRef.Local m tcState.tcsCcu.AssemblyName allImplementedSigModulTyp - if verbose then dprintf "done TypecheckOneInputEventually...\n" + if verbose then dprintf "done TypeCheckOneInputEventually...\n" let topSigsAndImpls = RootSigsAndImpls(rootSigs,rootImpls,allSigModulTyp,allImplementedSigModulTyp) - let res = (topAttrs,[implFile], tcEnvAtEnd, tcSigEnv, tcImplEnv,topSigsAndImpls,ccuType) + let res = (topAttrs,[implFile], tcEnvAtEnd, tcSigEnv, tcImplEnv, topSigsAndImpls, ccuType) return res } return (tcEnvAtEnd,topAttrs,mimpls), @@ -5061,34 +5058,33 @@ let TypecheckOneInputEventually return (tcState.TcEnvFromSignatures,EmptyTopAttrs,[]),tcState } -let TypecheckOneInput (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt) tcState inp = +let TypeCheckOneInput (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) |> Eventually.force + TypeCheckOneInputEventually (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, TcResultsSink.NoSink, tcState, inp) |> Eventually.force -let TypecheckMultipleInputsFinish(results,tcState: TcState) = +let TypeCheckMultipleInputsFinish(results,tcState: TcState) = let tcEnvsAtEndFile,topAttrs,mimpls = List.unzip3 results let topAttrs = List.foldBack CombineTopAttrs topAttrs EmptyTopAttrs let mimpls = List.concat mimpls // This is the environment required by fsi.exe when incrementally adding definitions let tcEnvAtEndOfLastFile = (match tcEnvsAtEndFile with h :: _ -> h | _ -> tcState.TcEnvFromSignatures) - if verbose then dprintf "done TypecheckMultipleInputs...\n" (tcEnvAtEndOfLastFile,topAttrs,mimpls),tcState -let TypecheckMultipleInputs(checkForErrors,tcConfig:TcConfig,tcImports,tcGlobals,prefixPathOpt,tcState,inputs) = - let results,tcState = List.mapFold (TypecheckOneInput (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt)) tcState inputs - TypecheckMultipleInputsFinish(results,tcState) +let TypeCheckMultipleInputs (checkForErrors, tcConfig: TcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs) = + let results,tcState = (tcState, inputs) ||> List.mapFold (TypeCheckOneInput (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt)) + TypeCheckMultipleInputsFinish(results,tcState) -let TypecheckSingleInputAndFinishEventually(checkForErrors,tcConfig:TcConfig,tcImports,tcGlobals,prefixPathOpt,tcSink,tcState,input) = +let TypeCheckSingleInputAndFinishEventually(checkForErrors, tcConfig: TcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, tcState, input) = eventually { - let! results,tcState = TypecheckOneInputEventually(checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, tcState, input) - return TypecheckMultipleInputsFinish([results],tcState) + let! results,tcState = TypeCheckOneInputEventually(checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcSink, tcState, input) + return TypeCheckMultipleInputsFinish([results],tcState) } -let TypecheckClosedInputSetFinish(mimpls,tcState) = +let TypeCheckClosedInputSetFinish (mimpls, tcState) = // Publish the latest contents to the CCU tcState.tcsCcu.Deref.Contents <- tcState.tcsCcuType @@ -5097,292 +5093,16 @@ let TypecheckClosedInputSetFinish(mimpls,tcState) = rootSigs |> Zmap.iter (fun qualNameOfFile _ -> if not (Zset.contains qualNameOfFile rootImpls) then errorR(Error(FSComp.SR.buildSignatureWithoutImplementation(qualNameOfFile.Text), qualNameOfFile.Range))) - if verbose then dprintf "done TypecheckClosedInputSet...\n" + let tassembly = TAssembly(mimpls) tcState, tassembly -let TypecheckClosedInputSet(checkForErrors,tcConfig,tcImports,tcGlobals,prefixPathOpt,tcState,inputs) = +let TypeCheckClosedInputSet (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs) = // tcEnvAtEndOfLastFile is the environment required by fsi.exe when incrementally adding definitions - let (tcEnvAtEndOfLastFile,topAttrs,mimpls),tcState = TypecheckMultipleInputs (checkForErrors,tcConfig,tcImports,tcGlobals,prefixPathOpt,tcState,inputs) - let tcState,tassembly = TypecheckClosedInputSetFinish (mimpls, tcState) + let (tcEnvAtEndOfLastFile, topAttrs, mimpls),tcState = TypeCheckMultipleInputs (checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs) + let tcState,tassembly = TypeCheckClosedInputSetFinish (mimpls, tcState) tcState, topAttrs, tassembly, tcEnvAtEndOfLastFile -type OptionSwitch = - | On - | Off - -type OptionSpec = - | OptionClear of bool ref - | OptionFloat of (float -> unit) - | OptionInt of (int -> unit) - | OptionSwitch of (OptionSwitch -> unit) - | OptionIntList of (int -> unit) - | OptionIntListSwitch of (int -> OptionSwitch -> unit) - | OptionRest of (string -> unit) - | OptionSet of bool ref - | OptionString of (string -> unit) - | OptionStringList of (string -> unit) - | OptionStringListSwitch of (string -> OptionSwitch -> unit) - | OptionUnit of (unit -> unit) - | 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 -let blockOptions = function PublicOptions (_,opts) -> opts | PrivateOptions opts -> opts - -let filterCompilerOptionBlock pred block = - match block with - | PublicOptions(heading,opts) -> PublicOptions(heading,List.filter pred opts) - | PrivateOptions(opts) -> PrivateOptions(List.filter pred opts) - -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 - | OptionStringList _ -> sprintf "--%s:%s" s tag - | OptionIntList _ -> sprintf "--%s:%s" s tag - | 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 - | 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 = 30 // fixed width for printing of flags, e.g. --warnaserror: - let defaultLineWidth = 80 // the fallback width - 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: - // flagWidth chars - for flags description or padding on continuation lines. - // single space - space. - // description - words upto but excluding the final character of the line. - assert(flagWidth = 30) - printf "%-30s" (compilerOptionUsage compilerOption) - let printWord column (word:string) = - // Have printed upto column. - // Now print the next word including any preceeding whitespace. - // Returns the column printed to (suited to folding). - if column + 1 (*space*) + word.Length >= lineWidth then // NOTE: "equality" ensures final character of the line is never printed - printfn "" (* newline *) - assert(flagWidth = 30) - printf "%-30s %s" ""(*<--flags*) word - flagWidth + 1 + word.Length - else - printf " %s" word - column + 1 + word.Length - let words = match help with None -> [| |] | Some s -> s.Split [| ' ' |] - let _finalColumn = Array.fold printWord flagWidth words - printfn "" (* newline *) - -let printPublicOptions (heading,opts) = - if nonNil opts then - printfn "" - printfn "" - printfn "\t\t%s" heading - List.iter printCompilerOption opts - -let printCompilerOptionBlocks blocks = - let equals x y = x=y - let publicBlocks = List.choose (function PrivateOptions _ -> None | PublicOptions (heading,opts) -> Some (heading,opts)) blocks - let consider doneHeadings (heading, _opts) = - if Set.contains heading doneHeadings then - doneHeadings - else - let headingOptions = List.filter (fst >> equals heading) publicBlocks |> List.map snd |> List.concat - printPublicOptions (heading,headingOptions) - Set.add heading doneHeadings - List.fold consider Set.empty publicBlocks |> ignore> - -(* For QA *) -let dumpCompilerOption prefix (CompilerOption(str, _, spec, _, _)) = - printf "section='%-25s' ! option=%-30s kind=" prefix str - match spec with - | OptionUnit _ -> printf "OptionUnit" - | OptionSet _ -> printf "OptionSet" - | OptionClear _ -> printf "OptionClear" - | OptionHelp _ -> printf "OptionHelp" - | OptionStringList _ -> printf "OptionStringList" - | OptionIntList _ -> printf "OptionIntList" - | OptionSwitch _ -> printf "OptionSwitch" - | OptionStringListSwitch _ -> printf "OptionStringListSwitch" - | OptionIntListSwitch _ -> printf "OptionIntListSwitch" - | OptionString _ -> printf "OptionString" - | OptionInt _ -> printf "OptionInt" - | OptionFloat _ -> printf "OptionFloat" - | OptionRest _ -> printf "OptionRest" - | OptionGeneral _ -> printf "OptionGeneral" - printf "\n" -let dumpCompilerOptionBlock = function - | PublicOptions (heading,opts) -> List.iter (dumpCompilerOption heading) opts - | PrivateOptions opts -> List.iter (dumpCompilerOption "NoSection") opts -let dumpCompilerOptionBlocks blocks = List.iter dumpCompilerOptionBlock blocks - -let isSlashOpt (opt:string) = - opt.[0] = '/' && (opt.Length = 1 || not (opt.[1..].Contains "/")) - -//---------------------------------------------------------------------------- -// The argument parser is used by both the VS plug-in and the fsc.exe to -// parse the include file path and other front-end arguments. -// -// The language service uses this function too. It's important to continue -// processing flags even if an error is seen in one so that the best possible -// intellisense can be show. -//-------------------------------------------------------------------------- -let ParseCompilerOptions (collectOtherArgument : string -> unit) (blocks: CompilerOptionBlock list) args = - use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parameter) - - let specs : CompilerOption list = List.collect blockOptions blocks - - // returns a tuple - the option token, the option argument string - let parseOption (s : string) = - // grab the option token - let opts = s.Split([|':'|]) - let mutable opt = opts.[0] - if opt = "" then - () - // if it doesn't start with a '-' or '/', reject outright - elif opt.[0] <> '-' && opt.[0] <> '/' then - opt <- "" - elif opt <> "--" then - // is it an abbreviated or MSFT-style option? - // if so, strip the first character and move on with your life - if opt.Length = 2 || isSlashOpt opt then - opt <- opt.[1 ..] - // else, it should be a non-abbreviated option starting with "--" - elif opt.Length > 3 && opt.StartsWith("--") then - opt <- opt.[2 ..] - else - opt <- "" - - // 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)) - argString - - let getOptionArgList compilerOption (argString : string) = - if argString = "" then - 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.EndsWith("+",StringComparison.Ordinal) || opt.EndsWith("-",StringComparison.Ordinal)) then - opt.[0 .. opt.Length - 2] - else - opt - - let getSwitch (s: string) = - let s = (s.Split([|':'|])).[0] - if s <> "--" && s.EndsWith("-",StringComparison.Ordinal) then Off else On - - let rec processArg args = - match args with - | [] -> () - | opt :: t -> - - let optToken, argString = parseOption opt - - let reportDeprecatedOption errOpt = - match errOpt with - | Some(e) -> warning(e) - | None -> () - - 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 = "" -> - reportDeprecatedOption d - f (); t - | (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 = "" -> - reportDeprecatedOption d - f := true; t - | (CompilerOption(s, _, OptionClear f, d, _) :: _) when optToken = s && argString = "" -> - reportDeprecatedOption d - f := false; t - | (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 - | (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 _ -> - errorR(Error(FSComp.SR.buildArgInvalidInt(getOptionArg compilerOption argString),rangeCmdArgs)); 0) - t - | (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 _ -> - errorR(Error(FSComp.SR.buildArgInvalidFloat(getOptionArg compilerOption argString), rangeCmdArgs)); 0.0) - t - | (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 ; - t - | (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 - t - // here - | (CompilerOption(s, _, OptionStringList f, d, _) as compilerOption :: _) when optToken = s -> - reportDeprecatedOption d - let al = getOptionArgList compilerOption argString - if al <> [] then - List.iter (fun s -> f s) (getOptionArgList compilerOption argString) - t - | (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 -> - reportDeprecatedOption d - let rest = exec args in rest // arguments taken, rest remaining - | (_ :: more) -> attempt more - | [] -> - if opt.Length = 0 || opt.[0] = '-' || isSlashOpt opt - then - // want the whole opt token - delimiter and all - let unrecOpt = (opt.Split([|':'|]).[0]) - errorR(Error(FSComp.SR.buildUnrecognizedOption(unrecOpt),rangeCmdArgs)) - t - else - (collectOtherArgument opt; t) - let rest = attempt specs - processArg rest - - let result = processArg args - result -do() diff --git a/src/fsharp/build.fsi b/src/fsharp/CompileOps.fsi similarity index 68% rename from src/fsharp/build.fsi rename to src/fsharp/CompileOps.fsi index cbdfe10e5ce..2e2824f094a 100644 --- a/src/fsharp/build.fsi +++ b/src/fsharp/CompileOps.fsi @@ -1,7 +1,7 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -/// Loading initial context, reporting errors etc. -module internal Microsoft.FSharp.Compiler.Build +/// Coordinating compiler operations - configuration, loading initial context, reporting errors etc. +module internal Microsoft.FSharp.Compiler.CompileOps open System.Text open Internal.Utilities @@ -19,7 +19,7 @@ open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.MSBuildResolver -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Core.CompilerServices #if EXTENSIONTYPING open Microsoft.FSharp.Compiler.ExtensionTyping @@ -37,73 +37,87 @@ module internal FullCompiler = #endif +//---------------------------------------------------------------------------- +// File names and known file suffixes +//-------------------------------------------------------------------------- + /// Signature file suffixes -val sigSuffixes : string list +val FSharpSigFileSuffixes : string list /// Implementation file suffixes -val implSuffixes : string list +val FSharpImplFileSuffixes : string list /// Script file suffixes -val scriptSuffixes : string list +val FSharpScriptFileSuffixes : string list val IsScript : string -> bool /// File suffixes where #light is the default -val lightSyntaxDefaultExtensions : string list +val FSharpLightSyntaxFileSuffixes : string list + + +/// Get the name used for FSharp.Core +val GetFSharpCoreLibraryName : unit -> string //---------------------------------------------------------------------------- // Parsing inputs //-------------------------------------------------------------------------- -val QualFileNameOfUniquePath : range * string list -> Ast.QualifiedNameOfFile +val ComputeQualifiedNameOfFileFromUniquePath : range * string list -> Ast.QualifiedNameOfFile val PrependPathToInput : Ast.Ident list -> Ast.ParsedInput -> Ast.ParsedInput val ParseInput : (UnicodeLexing.Lexbuf -> Parser.token) * ErrorLogger * UnicodeLexing.Lexbuf * string option * string * isLastCompiland: bool -> Ast.ParsedInput - - //---------------------------------------------------------------------------- -// Errors +// Error and warnings //-------------------------------------------------------------------------- +/// Represents the style being used to format errros type ErrorStyle = | DefaultErrors | EmacsErrors | TestErrors - | VSErrors - + | VSErrors -val RangeOfError : PhasedError -> range option +/// Get the location associated with an error +val GetRangeOfError : PhasedError -> range option + +/// Get the number associated with an error val GetErrorNumber : PhasedError -> int + +/// Split errors into a "main" error and a set of associated errors val SplitRelatedErrors : PhasedError -> PhasedError * PhasedError list + +/// Output an error to a buffer val OutputPhasedError : StringBuilder -> PhasedError -> bool -> unit -val SanitizeFileName : filename:string -> implicitIncludeDir:string -> string + +/// Output an error or warning to a buffer val OutputErrorOrWarning : implicitIncludeDir:string * showFullPaths: bool * flattenErrors: bool * errorStyle: ErrorStyle * warning:bool -> StringBuilder -> PhasedError -> unit + +/// Output extra context information for an error or warning to a buffer val OutputErrorOrWarningContext : prefix:string -> fileLineFunction:(string -> int -> string) -> StringBuilder -> PhasedError -> unit +[] type ErrorLocation = - { - Range : range - File : string - TextRepresentation : string - IsEmpty : bool - } + { Range : range + File : string + TextRepresentation : string + IsEmpty : bool } +[] type CanonicalInformation = - { - ErrorNumber : int - Subcategory : string - TextRepresentation : string - } + { ErrorNumber : int + Subcategory : string + TextRepresentation : string } +[] type DetailedIssueInfo = - { - Location : ErrorLocation option - Canonical : CanonicalInformation - Message : string - } + { Location : ErrorLocation option + Canonical : CanonicalInformation + Message : string } +[] type ErrorOrWarning = | Short of bool * string | Long of bool * DetailedIssueInfo @@ -111,40 +125,9 @@ type ErrorOrWarning = val CollectErrorOrWarning : implicitIncludeDir:string * showFullPaths: bool * flattenErrors: bool * errorStyle: ErrorStyle * warning:bool * PhasedError -> seq //---------------------------------------------------------------------------- -// Options and configuration +// Resolve assembly references //-------------------------------------------------------------------------- -// For command-line options that can be suffixed with +/- -type OptionSwitch = - | On - | Off - -/// The spec value describes the action of the argument, -/// and whether it expects a following parameter. -type OptionSpec = - | OptionClear of bool ref - | OptionFloat of (float -> unit) - | OptionInt of (int -> unit) - | OptionSwitch of (OptionSwitch -> unit) - | OptionIntList of (int -> unit) - | OptionIntListSwitch of (int -> OptionSwitch -> unit) - | OptionRest of (string -> unit) - | OptionSet of bool ref - | OptionString of (string -> unit) - | OptionStringList of (string -> unit) - | OptionStringListSwitch of (string -> OptionSwitch -> unit) - | OptionUnit of (unit -> unit) - | 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 CompilerOptionBlock = PublicOptions of string * CompilerOption list | PrivateOptions of CompilerOption list - -val printCompilerOptionBlocks : CompilerOptionBlock list -> unit // for printing usage -val dumpCompilerOptionBlocks : CompilerOptionBlock list -> unit // for QA -val filterCompilerOptionBlock : (CompilerOption -> bool) -> CompilerOptionBlock -> CompilerOptionBlock - exception AssemblyNotResolved of (*originalName*) string * range exception FileNameNotResolved of (*filename*) string * (*description of searched locations*) string * range exception DeprecatedCommandLineOptionFull of string * range @@ -193,60 +176,65 @@ type ResolveAssemblyReferenceMode = | Speculative | ReportErrors +//---------------------------------------------------------------------------- +// TcConfig +//-------------------------------------------------------------------------- + +/// Represents the file or string used for the --version flag type VersionFlag = | VersionString of string | VersionFile of string | VersionNone - member GetVersionInfo : (*implicitIncludeDir:*)string -> ILVersionInfo - member GetVersionString : (*implicitIncludeDir:*)string -> string + member GetVersionInfo : implicitIncludeDir:string -> ILVersionInfo + member GetVersionString : implicitIncludeDir:string -> string type TcConfigBuilder = - { mutable primaryAssembly : PrimaryAssembly; - mutable autoResolveOpenDirectivesToDlls: bool; - mutable noFeedback: bool; - mutable stackReserveSize: int32 option; - mutable implicitIncludeDir: string; - mutable openBinariesInMemory: bool; - mutable openDebugInformationForLaterStaticLinking: bool; - defaultFSharpBinariesDir: string; - mutable compilingFslib: bool; - mutable compilingFslib20: string option; - mutable compilingFslib40: bool; - mutable useIncrementalBuilder: bool; - mutable includes: string list; - mutable implicitOpens: string list; - mutable useFsiAuxLib: bool; - mutable framework: bool; + { mutable primaryAssembly : PrimaryAssembly + mutable autoResolveOpenDirectivesToDlls: bool + mutable noFeedback: bool + mutable stackReserveSize: int32 option + mutable implicitIncludeDir: string + mutable openBinariesInMemory: bool + mutable openDebugInformationForLaterStaticLinking: bool + defaultFSharpBinariesDir: string + mutable compilingFslib: bool + mutable compilingFslib20: string option + mutable compilingFslib40: bool + mutable useIncrementalBuilder: bool + mutable includes: string list + mutable implicitOpens: string list + mutable useFsiAuxLib: bool + mutable framework: bool mutable resolutionEnvironment : Microsoft.FSharp.Compiler.MSBuildResolver.ResolutionEnvironment mutable implicitlyResolveAssemblies : bool mutable addVersionSpecificFrameworkReferences : bool /// Set if the user has explicitly turned indentation-aware syntax on/off - mutable light: bool option; - mutable conditionalCompilationDefines: string list; + mutable light: bool option + mutable conditionalCompilationDefines: string list /// Sources added into the build with #load - mutable loadedSources: (range * string) list; + mutable loadedSources: (range * string) list - mutable referencedDLLs: AssemblyReference list; - mutable knownUnresolvedReferences : UnresolvedAssemblyReference list; - optimizeForMemory: bool; + mutable referencedDLLs: AssemblyReference list + mutable knownUnresolvedReferences : UnresolvedAssemblyReference list + optimizeForMemory: bool mutable subsystemVersion : int * int mutable useHighEntropyVA : bool - mutable inputCodePage: int option; - mutable embedResources : string list; - mutable globalWarnAsError: bool; - mutable globalWarnLevel: int; - mutable specificWarnOff: int list; - mutable specificWarnOn: int list; + mutable inputCodePage: int option + mutable embedResources : string list + mutable globalWarnAsError: bool + mutable globalWarnLevel: int + mutable specificWarnOff: int list + mutable specificWarnOn: int list mutable specificWarnAsError: int list mutable specificWarnAsWarn : int list - mutable mlCompatibility:bool; - mutable checkOverflow:bool; - mutable showReferenceResolutions:bool; - mutable outputFile : string option; - mutable resolutionFrameworkRegistryBase : string; - mutable resolutionAssemblyFoldersSuffix : string; - mutable resolutionAssemblyFoldersConditions : string; + mutable mlCompatibility:bool + mutable checkOverflow:bool + mutable showReferenceResolutions:bool + mutable outputFile : string option + mutable resolutionFrameworkRegistryBase : string + mutable resolutionAssemblyFoldersSuffix : string + mutable resolutionAssemblyFoldersConditions : string mutable platform : ILPlatform option mutable prefer32Bit : bool mutable useMonoResolution : bool @@ -305,7 +293,7 @@ type TcConfigBuilder = mutable doTLR : bool mutable doFinalSimplify : bool mutable optsOn : bool - mutable optSettings : Opt.OptimizationSettings + mutable optSettings : Optimizer.OptimizationSettings mutable emitTailcalls : bool mutable lcid : int option mutable productNameForBannerText : string @@ -354,44 +342,44 @@ type TcConfigBuilder = // Immutable TcConfig type TcConfig = member primaryAssembly: PrimaryAssembly - member autoResolveOpenDirectivesToDlls: bool; - member noFeedback: bool; - member stackReserveSize: int32 option; - member implicitIncludeDir: string; - member openBinariesInMemory: bool; - member openDebugInformationForLaterStaticLinking: bool; - member fsharpBinariesDir: string; - member compilingFslib: bool; - member compilingFslib20: string option; - member compilingFslib40: bool; - member useIncrementalBuilder: bool; - member includes: string list; - member implicitOpens: string list; - member useFsiAuxLib: bool; - member framework: bool; + member autoResolveOpenDirectivesToDlls: bool + member noFeedback: bool + member stackReserveSize: int32 option + member implicitIncludeDir: string + member openBinariesInMemory: bool + member openDebugInformationForLaterStaticLinking: bool + member fsharpBinariesDir: string + member compilingFslib: bool + member compilingFslib20: string option + member compilingFslib40: bool + member useIncrementalBuilder: bool + member includes: string list + member implicitOpens: string list + member useFsiAuxLib: bool + member framework: bool member implicitlyResolveAssemblies : bool /// Set if the user has explicitly turned indentation-aware syntax on/off - member light: bool option; - member conditionalCompilationDefines: string list; + member light: bool option + member conditionalCompilationDefines: string list member subsystemVersion : int * int member useHighEntropyVA : bool - member referencedDLLs: AssemblyReference list; - member optimizeForMemory: bool; - member inputCodePage: int option; - member embedResources : string list; - member globalWarnAsError: bool; - member globalWarnLevel: int; - member specificWarnOn: int list; - member specificWarnOff: int list; + member referencedDLLs: AssemblyReference list + member optimizeForMemory: bool + member inputCodePage: int option + member embedResources : string list + member globalWarnAsError: bool + member globalWarnLevel: int + member specificWarnOn: int list + member specificWarnOff: int list member specificWarnAsError: int list member specificWarnAsWarn : int list - member mlCompatibility:bool; - member checkOverflow:bool; - member showReferenceResolutions:bool; - member outputFile : string option; - member resolutionFrameworkRegistryBase : string; - member resolutionAssemblyFoldersSuffix : string; - member resolutionAssemblyFoldersConditions : string; + member mlCompatibility:bool + member checkOverflow:bool + member showReferenceResolutions:bool + member outputFile : string option + member resolutionFrameworkRegistryBase : string + member resolutionAssemblyFoldersSuffix : string + member resolutionAssemblyFoldersConditions : string member platform : ILPlatform option member prefer32Bit : bool member useMonoResolution : bool @@ -449,7 +437,7 @@ type TcConfig = member doDetuple : bool member doTLR : bool member doFinalSimplify : bool - member optSettings : Opt.OptimizationSettings + member optSettings : Optimizer.OptimizationSettings member emitTailcalls : bool member lcid : int option member optsOn : bool @@ -491,13 +479,25 @@ type TcConfig = static member Create : TcConfigBuilder * validate: bool -> 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 = + /// Get a TcConfigProvider which will return only the exact TcConfig. + static member Constant : TcConfig -> TcConfigProvider + + /// Get a TcConfigProvider which will continue to respect changes in the underlying + /// TcConfigBuilder rather than delivering snapshots. + static member BasedOnMutableBuilder : TcConfigBuilder -> TcConfigProvider //---------------------------------------------------------------------------- // Tables of referenced DLLs //-------------------------------------------------------------------------- +/// Represents a resolved imported binary +[] type ImportedBinary = - { FileName: string; + { FileName: string RawMetadata: ILModuleDef #if EXTENSIONTYPING ProviderGeneratedAssembly: System.Reflection.Assembly option @@ -507,16 +507,18 @@ type ImportedBinary = ILAssemblyRefs : ILAssemblyRef list ILScopeRef: ILScopeRef} +/// Represents a resolved imported assembly +[] type ImportedAssembly = - { ILScopeRef: ILScopeRef; - FSharpViewOfMetadata: CcuThunk; - AssemblyAutoOpenAttributes: string list; - AssemblyInternalsVisibleToAttributes: string list; + { ILScopeRef: ILScopeRef + FSharpViewOfMetadata: CcuThunk + AssemblyAutoOpenAttributes: string list + AssemblyInternalsVisibleToAttributes: string list #if EXTENSIONTYPING - IsProviderGenerated: bool; - mutable TypeProviders: Tainted list; + IsProviderGenerated: bool + mutable TypeProviders: Tainted list #endif - FSharpOptimizationData : Lazy> } + FSharpOptimizationData : Lazy> } [] @@ -527,11 +529,8 @@ type TcAssemblyResolutions = static member BuildFromPriorResolutions : TcConfig * AssemblyResolution list * UnresolvedAssemblyReference list -> TcAssemblyResolutions -[] -type TcConfigProvider = - static member Constant : TcConfig -> TcConfigProvider - static member BasedOnMutableBuilder : TcConfigBuilder -> TcConfigProvider +/// Repreesnts a table of imported assemblies with their resolutions. [] type TcImports = interface System.IDisposable @@ -573,117 +572,156 @@ type TcImports = // Special resources in DLLs //-------------------------------------------------------------------------- +/// Determine if an IL resource attached to an F# assemnly is an F# signature data resource val IsSignatureDataResource : ILResource -> bool + +/// Determine if an IL resource attached to an F# assemnly is an F# optimization data resource val IsOptimizationDataResource : ILResource -> bool + +/// Determine if an IL resource attached to an F# assemnly is an F# quotation data resource for reflected definitions val IsReflectedDefinitionsResource : ILResource -> bool #if NO_COMPILER_BACKEND #else +/// Write F# signature data as an IL resource val WriteSignatureData : TcConfig * TcGlobals * Tastops.Remap * CcuThunk * string -> ILResource -val WriteOptimizationData : TcGlobals * string * CcuThunk * Opt.LazyModuleInfo -> ILResource -#endif -val GetNameOfILModule : ILModuleDef -> string +/// Write F# optimization data as an IL resource +val WriteOptimizationData : TcGlobals * string * CcuThunk * Optimizer.LazyModuleInfo -> ILResource +#endif -val GetFSharpCoreLibraryName : unit -> string //---------------------------------------------------------------------------- -// Finding and requiring DLLs +// #r and other directives //-------------------------------------------------------------------------- +/// Process #r in F# Interactive. +/// Adds the reference to the tcImports and add the ccu to the type checking environment. val RequireDLL : TcImports -> TcEnv -> range -> string -> TcEnv * (ImportedBinary list * ImportedAssembly list) -//---------------------------------------------------------------------------- -// Processing # commands -//-------------------------------------------------------------------------- - +/// Processing # commands val ProcessMetaCommandsFromInput : ('T -> range * string -> 'T) * ('T -> range * string -> 'T) * ('T -> range * string -> unit) -> TcConfigBuilder -> Ast.ParsedInput -> string -> 'T -> 'T +/// Process all the #r, #I etc. in an input +val ApplyMetaCommandsFromInputToTcConfig : TcConfig -> (Ast.ParsedInput * string) -> TcConfig -val GetScopedPragmasForInput : Ast.ParsedInput -> ScopedPragma list -val GetErrorLoggerFilteringByScopedPragmas : checkFile:bool * ScopedPragma list * ErrorLogger -> ErrorLogger - +/// Process the #nowarn in an input val ApplyNoWarnsToTcConfig : TcConfig -> (Ast.ParsedInput*string) -> TcConfig -val ApplyMetaCommandsFromInputToTcConfig : TcConfig -> (Ast.ParsedInput * string) -> TcConfig -val GetAssemblyResolutionInformation : TcConfig -> AssemblyResolution list * UnresolvedAssemblyReference list + //---------------------------------------------------------------------------- -// Loading the default library sets +// Scoped pragmas //-------------------------------------------------------------------------- - + +/// Find the scoped #nowarn pragmas with their range information +val GetScopedPragmasForInput : Ast.ParsedInput -> ScopedPragma list + +/// Get an error logger that filters the reporting of warnings based on scoped pragma information +val GetErrorLoggerFilteringByScopedPragmas : checkFile:bool * ScopedPragma list * ErrorLogger -> ErrorLogger + +/// This list is the default set of references for "non-project" files. val DefaultBasicReferencesForOutOfProjectSources : string list //---------------------------------------------------------------------------- -// Parsing inputs +// Parsing //-------------------------------------------------------------------------- + +/// Parse one input file val ParseOneInputFile : TcConfig * Lexhelp.LexResourceManager * string list * string * isLastCompiland: bool * ErrorLogger * (*retryLocked*) bool -> ParsedInput option //---------------------------------------------------------------------------- // Type checking and querying the type checking state //-------------------------------------------------------------------------- -val GetInitialTypecheckerEnv : string option -> range -> TcConfig -> TcImports -> TcGlobals -> TcEnv +/// 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. +val GetInitialTcEnv : string option * range * TcConfig * TcImports * TcGlobals -> TcEnv [] +/// Represents the incremental type checking state for a set of inputs type TcState = member NiceNameGenerator : Ast.NiceNameGenerator + + /// The CcuThunk for the current assembly being checked member Ccu : CcuThunk + + /// Get the typing environment implied by the set of signature files and/or inferred signatures of implementation files checked so far member TcEnvFromSignatures : TcEnv - member NextStateAfterIncrementalFragment : TcEnv -> TcState + + /// Get the typing environment implied by the set of implemetation files checked so far member TcEnvFromImpls : TcEnv -val TypecheckInitialState : + member NextStateAfterIncrementalFragment : TcEnv -> TcState + +/// Get the initial type checking state for a set of inputs +val GetInitialTcState : range * string * TcConfig * TcGlobals * TcImports * Ast.NiceNameGenerator * TcEnv -> TcState -val TypecheckOneInputEventually : - (unit -> bool) * TcConfig * TcImports * TcGlobals * Ast.LongIdent option * Nameres.TcResultsSink * TcState * Ast.ParsedInput +/// Check one input, returned as an Eventually computation +val TypeCheckOneInputEventually : + (unit -> bool) * TcConfig * TcImports * TcGlobals * Ast.LongIdent option * NameResolution.TcResultsSink * TcState * Ast.ParsedInput -> Eventually<(TcEnv * TopAttribs * Tast.TypedImplFile list) * TcState> -val TypecheckMultipleInputsFinish : - (TcEnv * TopAttribs * 'T list) list * TcState - -> (TcEnv * TopAttribs * 'T list) * TcState +/// Finish the checking of multiple inputs +val TypeCheckMultipleInputsFinish : (TcEnv * TopAttribs * 'T list) list * TcState -> (TcEnv * TopAttribs * 'T list) * TcState -val TypecheckClosedInputSetFinish : - TypedImplFile list * TcState - -> TcState * TypedAssembly +/// Finish the checking of a closed set of inputs +val TypeCheckClosedInputSetFinish : TypedImplFile list * TcState -> TcState * TypedAssembly -val TypecheckClosedInputSet : +/// Check a closed set of inputs +val TypeCheckClosedInputSet : (unit -> bool) * TcConfig * TcImports * TcGlobals * Ast.LongIdent option * TcState * Ast.ParsedInput list -> TcState * TopAttribs * Tast.TypedAssembly * TcEnv -val TypecheckSingleInputAndFinishEventually : - (unit -> bool) * TcConfig * TcImports * TcGlobals * Ast.LongIdent option * Nameres.TcResultsSink * TcState * Ast.ParsedInput +/// Check a single input and finish the checking +val TypeCheckSingleInputAndFinishEventually : + (unit -> bool) * TcConfig * TcImports * TcGlobals * Ast.LongIdent option * NameResolution.TcResultsSink * TcState * Ast.ParsedInput -> Eventually<(TcEnv * TopAttribs * Tast.TypedImplFile list) * TcState> -val ParseCompilerOptions : (string -> unit) -> CompilerOptionBlock list -> string list -> unit -val ReportWarning : int -> int list -> int list -> PhasedError -> bool -val ReportWarningAsError : int -> int list -> int list -> int list -> int list -> bool -> PhasedError -> bool +/// Indicates if we should report a warning +val ReportWarning : globalWarnLevel: int * specificWarnOff: int list * specificWarnOn: int list -> PhasedError -> bool + +/// Indicates if we should report a warning as an error +val ReportWarningAsError : globalWarnLevel: int * specificWarnOff: int list * specificWarnOn: int list * specificWarnAsError: int list * specificWarnAsWarn: int list * globalWarnAsError: bool -> PhasedError -> bool //---------------------------------------------------------------------------- // #load closure //-------------------------------------------------------------------------- + +[] type CodeContext = | Evaluation | Compilation | Editing +[] type LoadClosure = { /// The source files along with the ranges of the #load positions in each file. - SourceFiles: (string * range list) list - /// The resolved references along with the ranges of the #r positions in each file. - References: (string * AssemblyResolution list) list - /// The list of references that were not resolved during load closure. These may still be extension references. - UnresolvedReferences : UnresolvedAssemblyReference list - /// The list of all sources in the closure with inputs when available - Inputs: (string * ParsedInput option) list - /// The #nowarns - NoWarns: (string * range list) list - /// *Parse* errors seen while parsing root of closure - RootErrors : PhasedError list - /// *Parse* warnings seen while parsing root of closure - RootWarnings : PhasedError list } + SourceFiles: (string * range list) list + + /// The resolved references along with the ranges of the #r positions in each file. + References: (string * AssemblyResolution list) list + + /// The list of references that were not resolved during load closure. These may still be extension references. + UnresolvedReferences : UnresolvedAssemblyReference list + + /// The list of all sources in the closure with inputs when available + Inputs: (string * ParsedInput option) list + + /// The #nowarns + NoWarns: (string * range list) list + + /// *Parse* errors seen while parsing root of closure + RootErrors : PhasedError list + + /// *Parse* warnings seen while parsing root of closure + RootWarnings : PhasedError list } + + // Used from service.fs, when editing a script file static member ComputeClosureOfSourceText : filename : string * source : string * implicitDefines:CodeContext * lexResourceManager : Lexhelp.LexResourceManager -> LoadClosure + + /// Used from fsi.fs and fsc.fs, for #load and command line. The resulting references are then added to a TcConfig. static member ComputeClosureOfSourceFiles : tcConfig:TcConfig * (string * range) list * implicitDefines:CodeContext * useDefaultScriptingReferences : bool * lexResourceManager : Lexhelp.LexResourceManager -> LoadClosure diff --git a/src/fsharp/fscopts.fs b/src/fsharp/CompileOptions.fs similarity index 77% rename from src/fsharp/fscopts.fs rename to src/fsharp/CompileOptions.fs index a7f71194395..4e5d20ec569 100644 --- a/src/fsharp/fscopts.fs +++ b/src/fsharp/CompileOptions.fs @@ -2,7 +2,7 @@ // # FSComp.SR.opts -module internal Microsoft.FSharp.Compiler.Fscopts +module internal Microsoft.FSharp.Compiler.CompileOptions open Internal.Utilities open System @@ -14,8 +14,8 @@ open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library open Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics -open Microsoft.FSharp.Compiler.Build -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.CompileOps +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.TypeChecker open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops @@ -28,7 +28,7 @@ open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Lexhelp #if NO_COMPILER_BACKEND #else -open Microsoft.FSharp.Compiler.Ilxgen +open Microsoft.FSharp.Compiler.IlxGen #endif @@ -39,6 +39,295 @@ module Attributes = [] do() +//---------------------------------------------------------------------------- +// Compiler option parser +// +// The argument parser is used by both the VS plug-in and the fsc.exe to +// parse the include file path and other front-end arguments. +// +// The language service uses this function too. It's important to continue +// processing flags even if an error is seen in one so that the best possible +// intellisense can be show. +//-------------------------------------------------------------------------- + +[] +type OptionSwitch = + | On + | Off + +type OptionSpec = + | OptionClear of bool ref + | OptionFloat of (float -> unit) + | OptionInt of (int -> unit) + | OptionSwitch of (OptionSwitch -> unit) + | OptionIntList of (int -> unit) + | OptionIntListSwitch of (int -> OptionSwitch -> unit) + | OptionRest of (string -> unit) + | OptionSet of bool ref + | OptionString of (string -> unit) + | OptionStringList of (string -> unit) + | OptionStringListSwitch of (string -> OptionSwitch -> unit) + | OptionUnit of (unit -> unit) + | 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 + +let GetOptionsOfBlock block = + match block with + | PublicOptions (_,opts) -> opts + | PrivateOptions opts -> opts + +let FilterCompilerOptionBlock pred block = + match block with + | PublicOptions(heading,opts) -> PublicOptions(heading,List.filter pred opts) + | PrivateOptions(opts) -> PrivateOptions(List.filter pred opts) + +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 + | OptionStringList _ -> sprintf "--%s:%s" s tag + | OptionIntList _ -> sprintf "--%s:%s" s tag + | 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 + | 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 = 30 // fixed width for printing of flags, e.g. --warnaserror: + let defaultLineWidth = 80 // the fallback width + 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: + // flagWidth chars - for flags description or padding on continuation lines. + // single space - space. + // description - words upto but excluding the final character of the line. + assert(flagWidth = 30) + printf "%-30s" (compilerOptionUsage compilerOption) + let printWord column (word:string) = + // Have printed upto column. + // Now print the next word including any preceeding whitespace. + // Returns the column printed to (suited to folding). + if column + 1 (*space*) + word.Length >= lineWidth then // NOTE: "equality" ensures final character of the line is never printed + printfn "" (* newline *) + assert(flagWidth = 30) + printf "%-30s %s" ""(*<--flags*) word + flagWidth + 1 + word.Length + else + printf " %s" word + column + 1 + word.Length + let words = match help with None -> [| |] | Some s -> s.Split [| ' ' |] + let _finalColumn = Array.fold printWord flagWidth words + printfn "" (* newline *) + +let PrintPublicOptions (heading,opts) = + if nonNil opts then + printfn "" + printfn "" + printfn "\t\t%s" heading + List.iter PrintCompilerOption opts + +let PrintCompilerOptionBlocks blocks = + let equals x y = x=y + let publicBlocks = List.choose (function PrivateOptions _ -> None | PublicOptions (heading,opts) -> Some (heading,opts)) blocks + let consider doneHeadings (heading, _opts) = + if Set.contains heading doneHeadings then + doneHeadings + else + let headingOptions = List.filter (fst >> equals heading) publicBlocks |> List.map snd |> List.concat + PrintPublicOptions (heading,headingOptions) + Set.add heading doneHeadings + List.fold consider Set.empty publicBlocks |> ignore> + +(* For QA *) +let dumpCompilerOption prefix (CompilerOption(str, _, spec, _, _)) = + printf "section='%-25s' ! option=%-30s kind=" prefix str + match spec with + | OptionUnit _ -> printf "OptionUnit" + | OptionSet _ -> printf "OptionSet" + | OptionClear _ -> printf "OptionClear" + | OptionHelp _ -> printf "OptionHelp" + | OptionStringList _ -> printf "OptionStringList" + | OptionIntList _ -> printf "OptionIntList" + | OptionSwitch _ -> printf "OptionSwitch" + | OptionStringListSwitch _ -> printf "OptionStringListSwitch" + | OptionIntListSwitch _ -> printf "OptionIntListSwitch" + | OptionString _ -> printf "OptionString" + | OptionInt _ -> printf "OptionInt" + | OptionFloat _ -> printf "OptionFloat" + | OptionRest _ -> printf "OptionRest" + | OptionGeneral _ -> printf "OptionGeneral" + printf "\n" +let dumpCompilerOptionBlock = function + | PublicOptions (heading,opts) -> List.iter (dumpCompilerOption heading) opts + | PrivateOptions opts -> List.iter (dumpCompilerOption "NoSection") opts +let DumpCompilerOptionBlocks blocks = List.iter dumpCompilerOptionBlock blocks + +let isSlashOpt (opt:string) = + opt.[0] = '/' && (opt.Length = 1 || not (opt.[1..].Contains "/")) + +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) = + // grab the option token + let opts = s.Split([|':'|]) + let mutable opt = opts.[0] + if opt = "" then + () + // if it doesn't start with a '-' or '/', reject outright + elif opt.[0] <> '-' && opt.[0] <> '/' then + opt <- "" + elif opt <> "--" then + // is it an abbreviated or MSFT-style option? + // if so, strip the first character and move on with your life + if opt.Length = 2 || isSlashOpt opt then + opt <- opt.[1 ..] + // else, it should be a non-abbreviated option starting with "--" + elif opt.Length > 3 && opt.StartsWith("--") then + opt <- opt.[2 ..] + else + opt <- "" + + // 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)) + argString + + let getOptionArgList compilerOption (argString : string) = + if argString = "" then + 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.EndsWith("+",StringComparison.Ordinal) || opt.EndsWith("-",StringComparison.Ordinal)) then + opt.[0 .. opt.Length - 2] + else + opt + + let getSwitch (s: string) = + let s = (s.Split([|':'|])).[0] + if s <> "--" && s.EndsWith("-",StringComparison.Ordinal) then OptionSwitch.Off else OptionSwitch.On + + let rec processArg args = + match args with + | [] -> () + | opt :: t -> + + let optToken, argString = parseOption opt + + let reportDeprecatedOption errOpt = + match errOpt with + | Some(e) -> warning(e) + | None -> () + + 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 = "" -> + reportDeprecatedOption d + f (); t + | (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 = "" -> + reportDeprecatedOption d + f := true; t + | (CompilerOption(s, _, OptionClear f, d, _) :: _) when optToken = s && argString = "" -> + reportDeprecatedOption d + f := false; t + | (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 + | (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 _ -> + errorR(Error(FSComp.SR.buildArgInvalidInt(getOptionArg compilerOption argString),rangeCmdArgs)); 0) + t + | (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 _ -> + errorR(Error(FSComp.SR.buildArgInvalidFloat(getOptionArg compilerOption argString), rangeCmdArgs)); 0.0) + t + | (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 ; + t + | (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 + t + // here + | (CompilerOption(s, _, OptionStringList f, d, _) as compilerOption :: _) when optToken = s -> + reportDeprecatedOption d + let al = getOptionArgList compilerOption argString + if al <> [] then + List.iter (fun s -> f s) (getOptionArgList compilerOption argString) + t + | (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 -> + reportDeprecatedOption d + let rest = exec args in rest // arguments taken, rest remaining + | (_ :: more) -> attempt more + | [] -> + if opt.Length = 0 || opt.[0] = '-' || isSlashOpt opt + then + // want the whole opt token - delimiter and all + let unrecOpt = (opt.Split([|':'|]).[0]) + errorR(Error(FSComp.SR.buildUnrecognizedOption(unrecOpt),rangeCmdArgs)) + t + else + (collectOtherArgument opt; t) + let rest = attempt specs + processArg rest + + let result = processArg args + result + + +//---------------------------------------------------------------------------- +// Compiler options +//-------------------------------------------------------------------------- + let lexFilterVerbose = false let mutable enableConsoleColoring = true // global state @@ -70,28 +359,28 @@ let SetOptimizeOn(tcConfigB : TcConfigBuilder) = tcConfigB.doFinalSimplify <- true; let SetOptimizeSwitch (tcConfigB : TcConfigBuilder) switch = - if (switch = On) then SetOptimizeOn(tcConfigB) else SetOptimizeOff(tcConfigB) + if (switch = OptionSwitch.On) then SetOptimizeOn(tcConfigB) else SetOptimizeOff(tcConfigB) let SetTailcallSwitch (tcConfigB : TcConfigBuilder) switch = - tcConfigB.emitTailcalls <- (switch = On) + tcConfigB.emitTailcalls <- (switch = OptionSwitch.On) let jitoptimizeSwitch (tcConfigB : TcConfigBuilder) switch = - tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some (switch = On) } + tcConfigB.optSettings <- { tcConfigB.optSettings with jitOptUser = Some (switch = OptionSwitch.On) } let localoptimizeSwitch (tcConfigB : TcConfigBuilder) switch = - tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some (switch = On) } + tcConfigB.optSettings <- { tcConfigB.optSettings with localOptUser = Some (switch = OptionSwitch.On) } let crossOptimizeSwitch (tcConfigB : TcConfigBuilder) switch = - tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some (switch = On) } + tcConfigB.optSettings <- { tcConfigB.optSettings with crossModuleOptUser = Some (switch = OptionSwitch.On) } let splittingSwitch (tcConfigB : TcConfigBuilder) switch = - tcConfigB.optSettings <- { tcConfigB.optSettings with abstractBigTargets = switch = On } + tcConfigB.optSettings <- { tcConfigB.optSettings with abstractBigTargets = switch = OptionSwitch.On } let callVirtSwitch (tcConfigB : TcConfigBuilder) switch = - tcConfigB.alwaysCallVirt <- switch = On + tcConfigB.alwaysCallVirt <- switch = OptionSwitch.On let useHighEntropyVASwitch (tcConfigB : TcConfigBuilder) switch = - tcConfigB.useHighEntropyVA <- switch = On + tcConfigB.useHighEntropyVA <- switch = OptionSwitch.On let subSystemVersionSwitch (tcConfigB : TcConfigBuilder) (text : string) = let fail() = error(Error(FSComp.SR.optsInvalidSubSystemVersion(text), rangeCmdArgs)) @@ -123,14 +412,14 @@ let SetDebugSwitch (tcConfigB : TcConfigBuilder) (dtype : string option) (s : Op | "pdbonly" -> tcConfigB.jitTracking <- false | "full" -> tcConfigB.jitTracking <- true | _ -> error(Error(FSComp.SR.optsUnrecognizedDebugType(s), rangeCmdArgs)) - | None -> tcConfigB.jitTracking <- s = On - tcConfigB.debuginfo <- s = On ; + | None -> tcConfigB.jitTracking <- s = OptionSwitch.On + tcConfigB.debuginfo <- s = OptionSwitch.On let setOutFileName tcConfigB s = tcConfigB.outputFile <- Some s let setSignatureFile tcConfigB s = - tcConfigB.printSignature <- true ; + tcConfigB.printSignature <- true tcConfigB.printSignatureFile <- s // option tags @@ -194,11 +483,11 @@ let inputFileFlagsFsc tcConfigB = inputFileFlagsBoth tcConfigB let errorsAndWarningsFlags (tcConfigB : TcConfigBuilder) = [ - CompilerOption("warnaserror", tagNone, OptionSwitch(fun switch -> tcConfigB.globalWarnAsError <- switch <> Off), None, + CompilerOption("warnaserror", tagNone, OptionSwitch(fun switch -> tcConfigB.globalWarnAsError <- switch <> OptionSwitch.Off), None, Some (FSComp.SR.optsWarnaserrorPM())); CompilerOption("warnaserror", tagWarnList, OptionIntListSwitch (fun n switch -> - if switch = Off then + if switch = OptionSwitch.Off then tcConfigB.specificWarnAsError <- ListSet.remove (=) n tcConfigB.specificWarnAsError ; tcConfigB.specificWarnAsWarn <- ListSet.insert (=) n tcConfigB.specificWarnAsWarn else @@ -218,7 +507,7 @@ let errorsAndWarningsFlags (tcConfigB : TcConfigBuilder) = CompilerOption("warnon", tagWarnList, OptionStringList (fun n -> tcConfigB.TurnWarningOn(rangeCmdArgs,n)), None, Some(FSComp.SR.optsWarnOn())); - CompilerOption("consolecolors", tagNone, OptionSwitch (fun switch -> enableConsoleColoring <- switch=On), None, + CompilerOption("consolecolors", tagNone, OptionSwitch (fun switch -> enableConsoleColoring <- switch = OptionSwitch.On), None, Some (FSComp.SR.optsConsoleColors())) ] @@ -244,7 +533,7 @@ let outputFileFlagsFsc (tcConfigB : TcConfigBuilder) = CompilerOption("target", tagModule, OptionString (SetTarget tcConfigB), None, Some (FSComp.SR.optsBuildModule())); - CompilerOption("delaysign", tagNone, OptionSwitch (fun s -> tcConfigB.delaysign <- (s = On)), None, + CompilerOption("delaysign", tagNone, OptionSwitch (fun s -> tcConfigB.delaysign <- (s = OptionSwitch.On)), None, Some (FSComp.SR.optsDelaySign())); CompilerOption("doc", tagFile, OptionString (fun s -> tcConfigB.xmlDocOutputFile <- Some s), None, @@ -301,7 +590,7 @@ let codeGenerationFlags (tcConfigB : TcConfigBuilder) = CompilerOption("debug", tagNone, OptionSwitch (SetDebugSwitch tcConfigB None), None, Some (FSComp.SR.optsDebugPM())); - CompilerOption("debug", tagFullPDBOnly, OptionString (fun s -> SetDebugSwitch tcConfigB (Some(s)) On), None, + CompilerOption("debug", tagFullPDBOnly, OptionString (fun s -> SetDebugSwitch tcConfigB (Some(s)) OptionSwitch.On), None, Some (FSComp.SR.optsDebug())); CompilerOption("optimize", tagNone, OptionSwitch (SetOptimizeSwitch tcConfigB) , None, @@ -326,7 +615,7 @@ let mlCompatibilityFlag (tcConfigB : TcConfigBuilder) = Some (FSComp.SR.optsMlcompatibility())) let languageFlags tcConfigB = [ - CompilerOption("checked", tagNone, OptionSwitch (fun switch -> tcConfigB.checkOverflow <- (switch = On)), None, + CompilerOption("checked", tagNone, OptionSwitch (fun switch -> tcConfigB.checkOverflow <- (switch = OptionSwitch.On)), None, Some (FSComp.SR.optsChecked())); CompilerOption("define", tagString, OptionString (defineSymbol tcConfigB), None, Some (FSComp.SR.optsDefine())); @@ -417,7 +706,7 @@ let advancedFlagsFsc tcConfigB = yield CompilerOption("highentropyva", tagNone, OptionSwitch (useHighEntropyVASwitch tcConfigB), None, Some (FSComp.SR.optsUseHighEntropyVA())) yield CompilerOption("subsystemversion", tagString, OptionString (subSystemVersionSwitch tcConfigB), None, Some (FSComp.SR.optsSubSystemVersion())) yield CompilerOption("targetprofile", tagString, OptionString (setTargetProfile tcConfigB), None, Some(FSComp.SR.optsTargetProfile())) - yield CompilerOption("quotations-debug", tagNone, OptionSwitch(fun switch -> tcConfigB.emitDebugInfoInQuotations <- switch = On), None, Some(FSComp.SR.optsEmitDebugInfoInQuotations())) + yield CompilerOption("quotations-debug", tagNone, OptionSwitch(fun switch -> tcConfigB.emitDebugInfoInQuotations <- switch = OptionSwitch.On), None, Some(FSComp.SR.optsEmitDebugInfoInQuotations())) ] // OptionBlock: Internal options (test use only) @@ -427,7 +716,7 @@ let testFlag tcConfigB = CompilerOption("test", tagString, OptionString (fun s -> match s with | "ErrorRanges" -> tcConfigB.errorStyle <- ErrorStyle.TestErrors - | "MemberBodyRanges" -> PostTypecheckSemanticChecks.testFlagMemberBody := true + | "MemberBodyRanges" -> PostTypeCheckSemanticChecks.testFlagMemberBody := true | "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 } @@ -454,13 +743,7 @@ let vsSpecificFlags (tcConfigB: TcConfigBuilder) = let internalFlags (tcConfigB:TcConfigBuilder) = [ CompilerOption("use-incremental-build", tagNone, OptionUnit (fun () -> tcConfigB.useIncrementalBuilder <- true), None, None) - CompilerOption("stamps", tagNone, OptionUnit (fun () -> -#if DEBUG - Tast.verboseStamps := true -#else - () -#endif - ), Some(InternalCommandLineOption("--stamps", rangeCmdArgs)), None); + CompilerOption("stamps", tagNone, OptionUnit (fun () -> ()), Some(InternalCommandLineOption("--stamps", rangeCmdArgs)), None); CompilerOption("ranges", tagNone, OptionSet Tastops.DebugPrint.layoutRanges, Some(InternalCommandLineOption("--ranges", rangeCmdArgs)), None); CompilerOption("terms" , tagNone, OptionUnit (fun () -> tcConfigB.showTerms <- true), Some(InternalCommandLineOption("--terms", rangeCmdArgs)), None); CompilerOption("termsfile" , tagNone, OptionUnit (fun () -> tcConfigB.writeTermsToFiles <- true), Some(InternalCommandLineOption("--termsfile", rangeCmdArgs)), None); @@ -476,7 +759,7 @@ let internalFlags (tcConfigB:TcConfigBuilder) = CompilerOption("tlr", tagInt, OptionInt (setFlag (fun v -> tcConfigB.doTLR <- v)), Some(InternalCommandLineOption("--tlr", rangeCmdArgs)), None); CompilerOption("finalSimplify", tagInt, OptionInt (setFlag (fun v -> tcConfigB.doFinalSimplify <- v)), Some(InternalCommandLineOption("--finalSimplify", rangeCmdArgs)), None); #if TLR_LIFT - CompilerOption("tlrlift", tagNone, OptionInt (setFlag (fun v -> Tlr.liftTLR := v)), Some(InternalCommandLineOption("--tlrlift", rangeCmdArgs)), None); + CompilerOption("tlrlift", tagNone, OptionInt (setFlag (fun v -> InnerLambdasToTopLevelFuncs.liftTLR := v)), Some(InternalCommandLineOption("--tlrlift", rangeCmdArgs)), None); #endif CompilerOption("parseonly", tagNone, OptionUnit (fun () -> tcConfigB.parseOnly <- true), Some(InternalCommandLineOption("--parseonly", rangeCmdArgs)), None); CompilerOption("typecheckonly", tagNone, OptionUnit (fun () -> tcConfigB.typeCheckOnly <- true), Some(InternalCommandLineOption("--typecheckonly", rangeCmdArgs)), None); @@ -582,7 +865,7 @@ let DisplayBannerText tcConfigB = /// FSC only help. (FSI has it's own help function). let displayHelpFsc tcConfigB (blocks:CompilerOptionBlock list) = DisplayBannerText tcConfigB; - printCompilerOptionBlocks blocks + PrintCompilerOptionBlocks blocks exit 0 let miscFlagsBoth tcConfigB = @@ -621,7 +904,7 @@ let abbreviatedFlagsFsc tcConfigB = CompilerOption("full-help", tagNone, OptionHelp (fun blocks -> displayHelpFsc tcConfigB blocks), None, Some(FSComp.SR.optsShortFormOf("--help"))) ] -let abbrevFlagSet tcConfigB isFsc = +let GetAbbrevFlagSet tcConfigB isFsc = let mutable argList : string list = [] for c in ((if isFsc then abbreviatedFlagsFsc else abbreviatedFlagsFsi) tcConfigB) do match c with @@ -653,7 +936,7 @@ let PostProcessCompilerArgs (abbrevArgs : string Set) (args : string []) = let testingAndQAFlags _tcConfigB = [ - CompilerOption("dumpAllCommandLineOptions", tagNone, OptionHelp(fun blocks -> dumpCompilerOptionBlocks blocks), None, None) // "Command line options") + CompilerOption("dumpAllCommandLineOptions", tagNone, OptionHelp(fun blocks -> DumpCompilerOptionBlocks blocks), None, None) // "Command line options") ] @@ -709,7 +992,7 @@ let GetCoreFscCompilerOptions (tcConfigB: TcConfigBuilder) = /// Filter out OptionHelp which does printing then exit. This is not wanted in the context of VS!! let GetCoreServiceCompilerOptions (tcConfigB:TcConfigBuilder) = let isHelpOption = function CompilerOption(_,_,OptionHelp _,_,_) -> true | _ -> false - List.map (filterCompilerOptionBlock (isHelpOption >> not)) (GetCoreFscCompilerOptions tcConfigB) + List.map (FilterCompilerOptionBlock (isHelpOption >> not)) (GetCoreFscCompilerOptions tcConfigB) /// The core/common options used by fsi.exe. [note, some additional options are added in fsi.fs]. let GetCoreFsiCompilerOptions (tcConfigB: TcConfigBuilder) = @@ -761,7 +1044,7 @@ let ReportTime (tcConfig:TcConfig) descr = | None -> () | Some prevDescr -> if tcConfig.pause then - dprintf "[done '%s', entering '%s'] press any key... " prevDescr descr; + dprintf "[done '%s', entering '%s'] press to continue... " prevDescr descr; System.Console.ReadLine() |> ignore; // Intentionally putting this right after the pause so a debugger can be attached. match tcConfig.simulateException with @@ -819,18 +1102,18 @@ let ReportTime (tcConfig:TcConfig) descr = // OPTIMIZATION - support - addDllToOptEnv //---------------------------------------------------------------------------- -let AddExternalCcuToOpimizationEnv tcGlobals optEnv ccuinfo = +let AddExternalCcuToOpimizationEnv tcGlobals optEnv (ccuinfo: ImportedAssembly) = match ccuinfo.FSharpOptimizationData.Force() with | None -> optEnv - | Some(data) -> Opt.BindCcu ccuinfo.FSharpViewOfMetadata data optEnv tcGlobals + | Some(data) -> Optimizer.BindCcu ccuinfo.FSharpViewOfMetadata data optEnv tcGlobals //---------------------------------------------------------------------------- // OPTIMIZATION - support - optimize //---------------------------------------------------------------------------- -let InitialOptimizationEnv (tcImports:TcImports) (tcGlobals:TcGlobals) = +let GetInitialOptimizationEnv (tcImports:TcImports, tcGlobals:TcGlobals) = let ccuinfos = tcImports.GetImportedAssemblies() - let optEnv = Opt.IncrementalOptimizationEnv.Empty + let optEnv = Optimizer.IncrementalOptimizationEnv.Empty let optEnv = List.fold (AddExternalCcuToOpimizationEnv tcGlobals) optEnv ccuinfos optEnv @@ -859,19 +1142,21 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM //ReportTime tcConfig ("Initial simplify"); let optEnvFirstLoop,implFile,implFileOptData = - Opt.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFirstLoop,isIncrementalFragment,tcConfig.emitTailcalls,implFile) + Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFirstLoop,isIncrementalFragment,tcConfig.emitTailcalls,implFile) + let implFile = AutoBox.TransformImplFile tcGlobals importMap implFile + // Only do this on the first pass! let optSettings = { optSettings with abstractBigTargets = false } let optSettings = { optSettings with reportingPhase = false } #if DEBUG - if tcConfig.showOptimizationData then dprintf "Optimization implFileOptData:\n%s\n" (Layout.showL (Layout.squashTo 192 (Opt.moduleInfoL tcGlobals implFileOptData))); + if tcConfig.showOptimizationData then dprintf "Optimization implFileOptData:\n%s\n" (Layout.showL (Layout.squashTo 192 (Optimizer.moduleInfoL tcGlobals implFileOptData))); #endif let implFile,optEnvExtraLoop = if tcConfig.extraOptimizationIterations > 0 then //ReportTime tcConfig ("Extra simplification loop"); - let optEnvExtraLoop,implFile, _ = Opt.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvExtraLoop,isIncrementalFragment,tcConfig.emitTailcalls,implFile) + let optEnvExtraLoop,implFile, _ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvExtraLoop,isIncrementalFragment,tcConfig.emitTailcalls,implFile) //PrintWholeAssemblyImplementation tcConfig outfile (sprintf "extra-loop-%d" n) implFile; implFile,optEnvExtraLoop else @@ -887,16 +1172,16 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM let implFile = if tcConfig.doTLR then - implFile |> Tlr.MakeTLRDecisions ccu tcGlobals + implFile |> InnerLambdasToTopLevelFuncs.MakeTLRDecisions ccu tcGlobals else implFile let implFile = - Lowertop.LowerImplFile tcGlobals implFile - + LowerCallsAndSeqs.LowerImplFile tcGlobals implFile + let implFile,optEnvFinalSimplify = if tcConfig.doFinalSimplify then //ReportTime tcConfig ("Final simplify pass"); - let optEnvFinalSimplify,implFile, _ = Opt.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFinalSimplify,isIncrementalFragment,tcConfig.emitTailcalls,implFile) + let optEnvFinalSimplify,implFile, _ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFinalSimplify,isIncrementalFragment,tcConfig.emitTailcalls,implFile) //PrintWholeAssemblyImplementation tcConfig outfile "post-rec-opt" implFile; implFile,optEnvFinalSimplify else @@ -904,7 +1189,7 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM (implFile,implFileOptData),(optEnvFirstLoop,optEnvExtraLoop,optEnvFinalSimplify)) let implFiles,implFileOptDatas = List.unzip results - let assemblyOptData = Opt.UnionModuleInfos implFileOptDatas + let assemblyOptData = Optimizer.UnionOptimizationInfos implFileOptDatas let tassembly = TAssembly(implFiles) PrintWholeAssemblyImplementation tcConfig outfile "pass-end" tassembly; ReportTime tcConfig ("Ending Optimizations"); @@ -917,7 +1202,7 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM //---------------------------------------------------------------------------- let CreateIlxAssemblyGenerator (_tcConfig:TcConfig,tcImports:TcImports,tcGlobals, tcVal, generatedCcu) = - let ilxGenerator = new Ilxgen.IlxAssemblyGenerator (tcImports.GetImportMap(), tcGlobals, tcVal, generatedCcu) + let ilxGenerator = new IlxGen.IlxAssemblyGenerator (tcImports.GetImportMap(), tcGlobals, tcVal, generatedCcu) let ccus = tcImports.GetCcusInDeclOrder() ilxGenerator.AddExternalCcus ccus ilxGenerator @@ -956,7 +1241,7 @@ let NormalizeAssemblyRefs (tcImports:TcImports) scoref = | Some dllInfo -> dllInfo.ILScopeRef | None -> scoref -let fsharpModuleName (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 | Dll -> "dll" | Module -> "netmodule" | _ -> "exe" s + "." + ext diff --git a/src/fsharp/CompileOptions.fsi b/src/fsharp/CompileOptions.fsi new file mode 100644 index 00000000000..b99f6a4e7bc --- /dev/null +++ b/src/fsharp/CompileOptions.fsi @@ -0,0 +1,100 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +module internal Microsoft.FSharp.Compiler.CompileOptions + +open Internal.Utilities +open Microsoft.FSharp.Compiler +open Microsoft.FSharp.Compiler.AbstractIL +open Microsoft.FSharp.Compiler.AbstractIL.IL +open Microsoft.FSharp.Compiler.AbstractIL.Internal +open Microsoft.FSharp.Compiler.CompileOps +open Microsoft.FSharp.Compiler.ErrorLogger +open Microsoft.FSharp.Compiler.Ast +open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.Import +open Microsoft.FSharp.Compiler.Optimizer +open Microsoft.FSharp.Compiler.TcGlobals + +//---------------------------------------------------------------------------- +// Compiler Option Parser +//-------------------------------------------------------------------------- + +// For command-line options that can be suffixed with +/- +[] +type OptionSwitch = + | On + | Off + +/// The spec value describes the action of the argument, +/// and whether it expects a following parameter. +type OptionSpec = + | OptionClear of bool ref + | OptionFloat of (float -> unit) + | OptionInt of (int -> unit) + | OptionSwitch of (OptionSwitch -> unit) + | OptionIntList of (int -> unit) + | OptionIntListSwitch of (int -> OptionSwitch -> unit) + | OptionRest of (string -> unit) + | OptionSet of bool ref + | OptionString of (string -> unit) + | OptionStringList of (string -> unit) + | OptionStringListSwitch of (string -> OptionSwitch -> unit) + | OptionUnit of (unit -> unit) + | 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 CompilerOptionBlock = + | PublicOptions of string * CompilerOption list + | PrivateOptions of CompilerOption list + +val PrintCompilerOptionBlocks : CompilerOptionBlock list -> unit // for printing usage +val DumpCompilerOptionBlocks : CompilerOptionBlock list -> unit // for QA +val FilterCompilerOptionBlock : (CompilerOption -> bool) -> CompilerOptionBlock -> CompilerOptionBlock + +/// Parse and process a set of compiler options +val ParseCompilerOptions : (string -> unit) * CompilerOptionBlock list * string list -> unit + + +//---------------------------------------------------------------------------- +// Compiler Options +//-------------------------------------------------------------------------- + +val DisplayBannerText : TcConfigBuilder -> unit + +val GetCoreFscCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list +val GetCoreFsiCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list +val GetCoreServiceCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list + +// Expose the "setters" for some user switches, to enable setting of defaults +val SetOptimizeSwitch : TcConfigBuilder -> OptionSwitch -> unit +val SetTailcallSwitch : TcConfigBuilder -> OptionSwitch -> unit +val SetDebugSwitch : TcConfigBuilder -> string option -> OptionSwitch -> unit +val PrintOptionInfo : TcConfigBuilder -> unit + +val GetGeneratedILModuleName : CompilerTarget -> string -> string + +#if NO_COMPILER_BACKEND +#else +val GetInitialOptimizationEnv : TcImports * TcGlobals -> IncrementalOptimizationEnv +val AddExternalCcuToOpimizationEnv : TcGlobals -> IncrementalOptimizationEnv -> ImportedAssembly -> IncrementalOptimizationEnv +val ApplyAllOptimizations : TcConfig * TcGlobals * ConstraintSolver.TcValF * string * ImportMap * bool * IncrementalOptimizationEnv * CcuThunk * TypedAssembly -> TypedAssembly * Optimizer.LazyModuleInfo * IncrementalOptimizationEnv + +val CreateIlxAssemblyGenerator : TcConfig * TcImports * TcGlobals * ConstraintSolver.TcValF * CcuThunk -> IlxGen.IlxAssemblyGenerator + +val GenerateIlxCode : IlxGen.IlxGenBackend * bool * bool * TcConfig * TypeChecker.TopAttribs * TypedAssembly * string * bool * IlxGen.IlxAssemblyGenerator -> IlxGen.IlxGenResults +#endif + +// Used during static linking +val NormalizeAssemblyRefs : TcImports -> (AbstractIL.IL.ILScopeRef -> AbstractIL.IL.ILScopeRef) + +// Miscellany +val ignoreFailureOnMono1_1_16 : (unit -> unit) -> unit +val mutable enableConsoleColoring : bool +val DoWithErrorColor : bool -> (unit -> 'a) -> 'a +val ReportTime : TcConfig -> string -> unit +val GetAbbrevFlagSet : TcConfigBuilder -> bool -> Set +val PostProcessCompilerArgs : string Set -> string [] -> string list diff --git a/src/fsharp/csolve.fs b/src/fsharp/ConstraintSolver.fs similarity index 94% rename from src/fsharp/csolve.fs rename to src/fsharp/ConstraintSolver.fs index c10622986b0..928ba122d75 100644 --- a/src/fsharp/csolve.fs +++ b/src/fsharp/ConstraintSolver.fs @@ -39,17 +39,18 @@ open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.Range +open Microsoft.FSharp.Compiler.Rational open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.Infos.AccessibilityLogic open Microsoft.FSharp.Compiler.Infos.AttributeChecking -open Microsoft.FSharp.Compiler.Typrelns +open Microsoft.FSharp.Compiler.TypeRelations open Microsoft.FSharp.Compiler.PrettyNaming //------------------------------------------------------------------------- @@ -120,9 +121,9 @@ exception ConstraintSolverMissingConstraint of DisplayEnv * Tast.Typar * Tast.Ty exception ConstraintSolverError of string * range * range exception ConstraintSolverRelatedInformation of string option * range * exn -exception ErrorFromApplyingDefault of Env.TcGlobals * DisplayEnv * Tast.Typar * TType * exn * range -exception ErrorFromAddingTypeEquation of Env.TcGlobals * DisplayEnv * TType * TType * exn * range -exception ErrorsFromAddingSubsumptionConstraint of Env.TcGlobals * DisplayEnv * TType * TType * exn * range +exception ErrorFromApplyingDefault of TcGlobals * DisplayEnv * Tast.Typar * TType * exn * range +exception ErrorFromAddingTypeEquation of TcGlobals * DisplayEnv * TType * TType * exn * range +exception ErrorsFromAddingSubsumptionConstraint of TcGlobals * DisplayEnv * TType * TType * exn * range exception ErrorFromAddingConstraint of DisplayEnv * exn * range exception PossibleOverload of DisplayEnv * string * exn * range exception UnresolvedOverloading of DisplayEnv * exn list * string * range @@ -135,7 +136,7 @@ type TcValF = (ValRef -> ValUseFlag -> TType list -> range -> Expr * TType) type ConstraintSolverState = { - g: Env.TcGlobals; + g: TcGlobals; amap: Import.ImportMap; InfoReader : InfoReader; TcVal : TcValF @@ -226,6 +227,7 @@ let rec isIntegerTy g ty = let isStringTy g ty = typeEquiv g g.string_ty ty let isCharTy g ty = typeEquiv g g.char_ty ty +let isBoolTy g ty = typeEquiv g g.bool_ty ty /// float or float32 or float<_> or float32<_> let isFpTy g ty = @@ -240,6 +242,7 @@ let IsNonDecimalNumericOrIntegralEnumType g ty = isIntegerOrIntegerEnumTy g ty | let IsNumericOrIntegralEnumType g ty = IsNonDecimalNumericOrIntegralEnumType g ty || isDecimalTy g ty let IsNonDecimalNumericType g ty = isIntegerTy g ty || isFpTy g ty let IsNumericType g ty = IsNonDecimalNumericType g ty || isDecimalTy g ty +let IsRelationalType g ty = IsNumericType g ty || isStringTy g ty || isCharTy g ty || isBoolTy g ty // Get measure of type, float<_> or float32<_> or decimal<_> but not float=float<1> or float32=float32<1> or decimal=decimal<1> let GetMeasureOfType g ty = @@ -259,6 +262,7 @@ type TraitConstraintSolution = let BakedInTraitConstraintNames = [ "op_Division" ; "op_Multiply"; "op_Addition" + "op_Equality" ; "op_Inequality"; "op_GreaterThan" ; "op_LessThan"; "op_LessThanOrEqual"; "op_GreaterThanOrEqual" "op_Subtraction"; "op_Modulus"; "get_Zero"; "get_One"; "DivideByInt";"get_Item"; "set_Item"; @@ -355,20 +359,20 @@ let PreferUnifyTypar (v1:Typar) (v2:Typar) = -/// Ensure that vs is ordered so that an element with minimum sized exponent -/// is at the head of the list. Also, if possible, this element should have rigidity TyparRigidity.Flexible -let FindMinimumMeasureExponent vs = - let rec findmin vs = +/// Reorder a list of (variable,exponent) pairs so that a variable that is Preferred +/// is at the head of the list, if possible +let FindPreferredTypar vs = + let rec find vs = match vs with | [] -> vs | (v:Typar,e)::vs -> - match findmin vs with + match find vs with | [] -> [(v,e)] - | (v',e')::vs' -> - if abs e < abs e' || (abs e = abs e' && PreferUnifyTypar v v') + | (v',e')::vs' -> + if PreferUnifyTypar v v' then (v, e) :: vs else (v',e') :: (v,e) :: vs' - findmin vs + find vs let SubstMeasure (r:Typar) ms = if r.Rigidity = TyparRigidity.Rigid then error(InternalError("SubstMeasure: rigid",r.Range)); @@ -444,88 +448,53 @@ let SubstMeasureWarnIfRigid (csenv:ConstraintSolverEnv) trace (v:Typar) ms = WarnD(Error(FSComp.SR.csCodeLessGeneric(),v.Range)) else CompleteD) -/// The division operator in Caml/F# rounds towards zero. For our purposes, -/// we want to round towards negative infinity. -let DivRoundDown x y = - let signx=if x<0 then -1 else 1 - let signy=if y<0 then -1 else 1 - - if signx=signy then x / y - else (x-y+signy) / y - /// Imperatively unify the unit-of-measure expression ms against 1. -/// This is a gcd-like algorithm that proceeds as follows: -/// 1. Express ms in the form 'u1^x1 * ... * 'un^xn * c1^y1 * ... * cm^ym -/// where 'u1,...,'un are non-rigid measure variables, c1,...,cm are measure identifiers or rigid measure variables, -/// x1,...,xn and y1,...,yn are non-zero exponents with |x1| <= |xi| for all i. -/// 2. (a) If m=n=0 then we're done (we're unifying 1 against 1) -/// (b) If m=0 but n<>0 then fail (we're unifying a variable-free expression against 1) -/// (c) If xi is divisible by |x1| for all i, and yj is divisible by |x1| for all j, then -/// immediately solve the constraint with the substitution -/// 'u1 := 'u2^(-x2/x1) * ... * 'un^(-xn/x1) * c1^(-y1/x1) * ... * cm^(-ym/x1) -/// (d) Otherwise, if m=1, fail (example: unifying 'u^2 * kg^3) -/// (e) Otherwise, make the substitution -/// 'u1 := 'u * 'u2^(-x2/x1) * ... * 'un^(-xn/x1) * c1^(-y1/x1) * ... * cm^(-ym/x1) -/// where 'u is a fresh measure variable, and iterate. - -let rec UnifyMeasureWithOne (csenv:ConstraintSolverEnv) trace ms = +/// There are three cases +/// - ms is (equivalent to) 1 +/// - ms contains no non-rigid unit variables, and so cannot be unified with 1 +/// - ms has the form v^e * ms' for some non-rigid variable v, non-zero exponent e, and measure expression ms' +/// the most general unifier is then simply v := ms' ^ -(1/e) +let UnifyMeasureWithOne (csenv:ConstraintSolverEnv) trace ms = + // Gather the rigid and non-rigid unit variables in this measure expression together with their exponents let (rigidVars,nonRigidVars) = (ListMeasureVarOccsWithNonZeroExponents ms) |> List.partition (fun (v,_) -> v.Rigidity = TyparRigidity.Rigid) - let expandedCons = ListMeasureConOccsWithNonZeroExponents csenv.g true ms - let unexpandedCons = ListMeasureConOccsWithNonZeroExponents csenv.g false ms - match FindMinimumMeasureExponent nonRigidVars, rigidVars, expandedCons, unexpandedCons with - | [], [], [], _ -> CompleteD - | [], _, _, _ -> localAbortD - | (v,e)::vs, rigidVars, _, _ -> - // don't break up abbreviations if we can help it! - if unexpandedCons |> List.forall (fun (_,e') -> e' % e = 0) && (vs@rigidVars) |> List.forall (fun (_,e') -> e' % e = 0) - then - let newms = ProdMeasures (List.map (fun (c,e') -> MeasurePower (MeasureCon c) (- (DivRoundDown e' e))) unexpandedCons - @ List.map (fun (v,e') -> MeasurePower (MeasureVar v) (- (DivRoundDown e' e))) (vs @ rigidVars)) - SubstMeasureWarnIfRigid csenv trace v newms - else - let newms = ProdMeasures (List.map (fun (c,e') -> MeasurePower (MeasureCon c) (- (DivRoundDown e' e))) expandedCons - @ List.map (fun (v,e') -> MeasurePower (MeasureVar v) (- (DivRoundDown e' e))) (vs @ rigidVars)) - if expandedCons |> List.forall (fun (_,e') -> e' % e = 0) && (vs@rigidVars) |> List.forall (fun (_,e') -> e' % e = 0) - then SubstMeasureWarnIfRigid csenv trace v newms - elif isNil vs - then localAbortD - else - // New variable v' must inherit WarnIfNotRigid from v - let v' = NewAnonTypar (TyparKind.Measure,v.Range,v.Rigidity,v.StaticReq,v.DynamicReq) - SubstMeasure v (MeasureProd(MeasureVar v', newms)); - UnifyMeasureWithOne csenv trace ms + // If there is at least one non-rigid variable v with exponent e, then we can unify + match FindPreferredTypar nonRigidVars with + | (v,e)::vs -> + let unexpandedCons = ListMeasureConOccsWithNonZeroExponents csenv.g false ms + let newms = ProdMeasures (List.map (fun (c,e') -> MeasureRationalPower (MeasureCon c, NegRational (DivRational e' e))) unexpandedCons + @ List.map (fun (v,e') -> MeasureRationalPower (MeasureVar v, NegRational (DivRational e' e))) (vs @ rigidVars)) + + SubstMeasureWarnIfRigid csenv trace v newms + + // Otherwise we require ms to be 1 + | [] -> + if measureEquiv csenv.g ms MeasureOne then CompleteD else localAbortD + /// Imperatively unify unit-of-measure expression ms1 against ms2 let UnifyMeasures (csenv:ConstraintSolverEnv) trace ms1 ms2 = UnifyMeasureWithOne csenv trace (MeasureProd(ms1,MeasureInv ms2)) - /// Simplify a unit-of-measure expression ms that forms part of a type scheme. /// We make substitutions for vars, which are the (remaining) bound variables /// in the scheme that we wish to simplify. let SimplifyMeasure g vars ms = let rec simp vars = - match FindMinimumMeasureExponent (List.filter (fun (_,e) -> e<>0) (List.map (fun v -> (v, MeasureVarExponent v ms)) vars)) with + match FindPreferredTypar (List.filter (fun (_,e) -> SignRational e<>0) (List.map (fun v -> (v, MeasureVarExponent v ms)) vars)) with | [] -> (vars, None) | (v,e)::vs -> - if e < 0 then - let v' = NewAnonTypar (TyparKind.Measure,v.Range,TyparRigidity.Flexible,v.StaticReq,v.DynamicReq) - let vars' = v' :: ListSet.remove typarEq v vars - SubstMeasure v (MeasureInv (MeasureVar v')); - simp vars' - else - let newv = if v.IsCompilerGenerated then NewAnonTypar (TyparKind.Measure,v.Range,TyparRigidity.Flexible,v.StaticReq,v.DynamicReq) - else NewNamedInferenceMeasureVar (v.Range,TyparRigidity.Flexible,v.StaticReq,v.Id) - let remainingvars = ListSet.remove typarEq v vars - let newms = (ProdMeasures (List.map (fun (c,e') -> MeasurePower (MeasureCon c) (- (DivRoundDown e' e))) (ListMeasureConOccsWithNonZeroExponents g false ms) - @ List.map (fun (v',e') -> if typarEq v v' then MeasureVar newv else MeasurePower (MeasureVar v') (- (DivRoundDown e' e))) (ListMeasureVarOccsWithNonZeroExponents ms))); - SubstMeasure v newms; - match vs with - | [] -> (remainingvars, Some newv) - | _ -> simp (newv::remainingvars) - + let newvar = if v.IsCompilerGenerated then NewAnonTypar (TyparKind.Measure,v.Range,TyparRigidity.Flexible,v.StaticReq,v.DynamicReq) + else NewNamedInferenceMeasureVar (v.Range,TyparRigidity.Flexible,v.StaticReq,v.Id) + let remainingvars = ListSet.remove typarEq v vars + let newvarExpr = if SignRational e < 0 then MeasureInv (MeasureVar newvar) else MeasureVar newvar + let newms = (ProdMeasures (List.map (fun (c,e') -> MeasureRationalPower (MeasureCon c, NegRational (DivRational e' e))) (ListMeasureConOccsWithNonZeroExponents g false ms) + @ List.map (fun (v',e') -> if typarEq v v' then newvarExpr else MeasureRationalPower (MeasureVar v', NegRational (DivRational e' e))) (ListMeasureVarOccsWithNonZeroExponents ms))); + SubstMeasure v newms; + match vs with + | [] -> (remainingvars, Some newvar) + | _ -> simp (newvar::remainingvars) simp vars // Normalize a type ty that forms part of a unit-of-measure-polymorphic type scheme. @@ -567,16 +536,46 @@ let rec SimplifyMeasuresInConstraints g param cs = let param' = SimplifyMeasuresInConstraint g param c SimplifyMeasuresInConstraints g param' cs +let rec GetMeasureVarGcdInType v ty = + match stripTyparEqns ty with + | TType_ucase(_,l) + | TType_app (_,l) + | TType_tuple l -> GetMeasureVarGcdInTypes v l + + | TType_fun (d,r) -> GcdRational (GetMeasureVarGcdInType v d) (GetMeasureVarGcdInType v r) + | TType_var _ -> ZeroRational + | TType_forall (_,tau) -> GetMeasureVarGcdInType v tau + | TType_measure unt -> MeasureVarExponent v unt +and GetMeasureVarGcdInTypes v tys = + match tys with + | [] -> ZeroRational + | ty::tys -> GcdRational (GetMeasureVarGcdInType v ty) (GetMeasureVarGcdInTypes v tys) + +// Normalize the exponents on generalizable variables in a type +// by dividing them by their "rational gcd". For example, the type +// float<'u^(2/3)> -> float<'u^(4/3)> would be normalized to produce +// float<'u> -> float<'u^2> by dividing the exponents by 2/3. +let NormalizeExponentsInTypeScheme uvars ty = + uvars |> List.map (fun v -> + let expGcd = AbsRational (GetMeasureVarGcdInType v ty) + if expGcd = OneRational || expGcd = ZeroRational + then v + else + let v' = NewAnonTypar (TyparKind.Measure,v.Range,TyparRigidity.Flexible,v.StaticReq,v.DynamicReq) + SubstMeasure v (MeasureRationalPower (MeasureVar v', DivRational OneRational expGcd)) + v') + -// We normalize unit-of-measure-polymorphic type schemes as described in Kennedy's thesis. There +// We normalize unit-of-measure-polymorphic type schemes. There // are three reasons for doing this: // (1) to present concise and consistent type schemes to the programmer // (2) so that we can compute equivalence of type schemes in signature matching // (3) in order to produce a list of type parameters ordered as they appear in the (normalized) scheme. // -// Representing the normal form as a matrix, with a row for each variable, -// and a column for each unit-of-measure expression in the "skeleton" of the type. Entries are integer exponents. +// Representing the normal form as a matrix, with a row for each variable or base unit, +// and a column for each unit-of-measure expression in the "skeleton" of the type. +// Entries for generalizable variables are integers; other rows may contain non-integer exponents. // // ( 0...0 a1 as1 b1 bs1 c1 cs1 ...) // ( 0...0 0 0...0 b2 bs2 c2 cs2 ...) @@ -590,7 +589,10 @@ let rec SimplifyMeasuresInConstraints g param cs = // // The corner entries a1, b2, c3 are all positive. Entries lying above them (b1, c1, c2, etc) are // non-negative and smaller than the corresponding corner entry. Entries as1, bs1, bs2, etc are arbitrary. -// This is known as a *reduced row echelon* matrix or Hermite matrix. +// +// Essentially this is the *reduced row echelon* matrix from linear algebra, with adjustment to ensure that +// exponents are integers where possible (in the reduced row echelon form, a1, b2, etc. would be 1, possibly +// forcing other entries to be non-integers). let SimplifyMeasuresInTypeScheme g resultFirst (generalizable:Typar list) ty constraints = // Only bother if we're generalizing over at least one unit-of-measure variable let uvars, vars = @@ -599,9 +601,9 @@ let SimplifyMeasuresInTypeScheme g resultFirst (generalizable:Typar list) ty con match uvars with | [] -> generalizable | _::_ -> - let (untouched, generalized) = SimplifyMeasuresInType g resultFirst (SimplifyMeasuresInConstraints g (uvars, []) constraints) ty - - vars @ List.rev generalized @ untouched + let (_, generalized) = SimplifyMeasuresInType g resultFirst (SimplifyMeasuresInConstraints g (uvars, []) constraints) ty + let generalized' = NormalizeExponentsInTypeScheme generalized ty + vars @ List.rev generalized' let freshMeasure () = MeasureVar (NewInferenceMeasurePar ()) @@ -977,6 +979,14 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) permitWeakResolution ndeep SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace rty argty1 ++ (fun () -> ResultD TTraitBuiltIn)) + | _,_,false,("op_LessThan" | "op_LessThanOrEqual" | "op_GreaterThan" | "op_GreaterThanOrEqual" | "op_Equality" | "op_Inequality" ),[argty1;argty2] + when // Ignore any explicit overloads from any basic integral types + (minfos |> List.forall (fun minfo -> isIntegerTy g minfo.EnclosingType ) && + ( (IsRelationalType g argty1 && (permitWeakResolution || not (isTyparTy g argty2))) + || (IsRelationalType g argty2 && (permitWeakResolution || not (isTyparTy g argty1))))) -> + SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace argty2 argty1 ++ (fun () -> + SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace rty g.bool_ty ++ (fun () -> + ResultD TTraitBuiltIn)) // We pretend for uniformity that the numeric types have a static property called Zero and One // As with constants, only zero is polymorphic in its units @@ -1147,7 +1157,7 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) permitWeakResolution ndeep IsRecdFieldAccessible amap m AccessibleFromEverywhere rfinfo.RecdFieldRef && not rfinfo.LiteralValue.IsSome && not rfinfo.RecdField.IsCompilerGenerated -> - Some (TTraitSolvedRecdProp (rfinfo, isSetProp)) + Some (rfinfo, isSetProp) | _ -> None) match props with | [ prop ] -> Some prop @@ -1194,15 +1204,17 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) permitWeakResolution ndeep let callerArgs = argtys |> List.map (fun argty -> CallerArg(argty,m,false,dummyExpr)) let minst = FreshenMethInfo m minfo let objtys = minfo.GetObjArgTypes(amap, m, minst) - CalledMeth(csenv.InfoReader,false,FreshenMethInfo,m,AccessibleFromEverywhere,minfo,minst,minst,None,objtys,[(callerArgs,[])],false,false)) + CalledMeth(csenv.InfoReader,None,false,FreshenMethInfo,m,AccessibleFromEverywhere,minfo,minst,minst,None,objtys,[(callerArgs,[])],false,false,None)) let methOverloadResult,errors = CollectThenUndo (fun trace -> ResolveOverloading csenv (WithTrace(trace)) nm ndeep true (0,0) AccessibleFromEverywhere calledMethGroup false (Some rty)) match recdPropSearch, methOverloadResult with - | Some a, None -> - // OK, the constraint is solved by a record property - ResultD a + | Some (rfinfo, isSetProp), None -> + // OK, the constraint is solved by a record property. Assert that the return types match. + let rty2 = if isSetProp then g.unit_ty else rfinfo.FieldType + SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace rty rty2 ++ (fun () -> + ResultD (TTraitSolvedRecdProp(rfinfo, isSetProp))) | None, Some (calledMeth:CalledMeth<_>) -> // OK, the constraint is solved. // Re-run without undo to commit the inference equations. Throw errors away @@ -1278,7 +1290,7 @@ and MemberConstraintSolutionOfMethInfo css m minfo minst = let minst = [] // GENERIC TYPE PROVIDERS: for generics, we would have an minst here let allArgVars, allArgs = minfo.GetParamTypes(amap, m, minst) |> List.concat |> List.mapi (fun i ty -> mkLocal m ("arg"+string i) ty) |> List.unzip let objArgVars, objArgs = (if minfo.IsInstance then [mkLocal m "this" minfo.EnclosingType] else []) |> List.unzip - let callMethInfoOpt, callExpr,callExprTy = Typrelns.ProvidedMethodCalls.BuildInvokerExpressionForProvidedMethodCall css.TcVal (g, amap, mi, objArgs, NeverMutates, false, ValUseFlag.NormalValUse, allArgs, m) + let callMethInfoOpt, callExpr,callExprTy = TypeRelations.ProvidedMethodCalls.BuildInvokerExpressionForProvidedMethodCall css.TcVal (g, amap, mi, objArgs, NeverMutates, false, ValUseFlag.NormalValUse, allArgs, m) let closedExprSln = ClosedExprSln (mkLambdas m [] (objArgVars@allArgVars) (callExpr, callExprTy) ) // If the call is a simple call to an IL method with all the arguments in the natural order, then revert to use ILMethSln. // This is important for calls to operators on generated provided types. There is an (unchecked) condition @@ -1590,7 +1602,7 @@ and SolveTypSupportsNull (csenv:ConstraintSolverEnv) ndeep m2 trace ty = if isTyparTy g ty then AddConstraint csenv ndeep m2 trace (destTyparTy g ty) (TyparConstraint.SupportsNull(m)) elif - TypeSatisfiesNullConstraint g ty then CompleteD + TypeSatisfiesNullConstraint g m ty then CompleteD else match ty with | NullableTy g _ -> @@ -1632,7 +1644,7 @@ and SolveTypeSupportsComparison (csenv:ConstraintSolverEnv) ndeep m2 trace ty = // Give a good error for structural types excluded from the comparison relation because of their fields elif (isAppTy g ty && let tcref = tcrefOfAppTy g ty - Augment.TyconIsCandidateForAugmentationWithCompare g tcref.Deref && + AugmentWithHashCompare.TyconIsCandidateForAugmentationWithCompare g tcref.Deref && isNone tcref.GeneratedCompareToWithComparerValues) then ErrorD (ConstraintSolverError(FSComp.SR.csTypeDoesNotSupportComparison3(NicePrint.minimalStringOfType denv ty),m,m2)) @@ -1660,7 +1672,7 @@ and SolveTypSupportsEquality (csenv:ConstraintSolverEnv) ndeep m2 trace ty = let tcref,tinst = destAppTy g ty // Give a good error for structural types excluded from the equality relation because of their fields - if (Augment.TyconIsCandidateForAugmentationWithEquals g tcref.Deref && + if (AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals g tcref.Deref && isNone tcref.GeneratedHashAndEqualsWithComparerValues) then ErrorD (ConstraintSolverError(FSComp.SR.csTypeDoesNotSupportEquality3(NicePrint.minimalStringOfType denv ty),m,m2)) @@ -1730,8 +1742,7 @@ and SolveTypIsUnmanaged (csenv:ConstraintSolverEnv) ndeep m2 trace ty = if isTyparTy g ty then AddConstraint csenv ndeep m2 trace (destTyparTy g ty) (TyparConstraint.IsUnmanaged(m)) else - let underlyingTy = stripTyEqnsAndMeasureEqns g ty - if isUnmanagedTy g underlyingTy then + if isUnmanagedTy g ty then CompleteD else ErrorD (ConstraintSolverError(FSComp.SR.csGenericConstructRequiresUnmanagedType(NicePrint.minimalStringOfType denv ty),m,m2)) @@ -1742,12 +1753,8 @@ and SolveTypChoice (csenv:ConstraintSolverEnv) ndeep m2 trace ty tys = let m = csenv.m let denv = csenv.DisplayEnv if isTyparTy g ty then AddConstraint csenv ndeep m2 trace (destTyparTy g ty) (TyparConstraint.SimpleChoice(tys,m)) else - match stripTyEqns g ty with - | TType_app (tc2,[ms]) when tc2.IsMeasureableReprTycon -> - SolveTypEqualsTypKeepAbbrevs csenv ndeep m2 trace ms (TType_measure MeasureOne) - | _ -> - if List.exists (typeEquiv g ty) tys then CompleteD - else ErrorD (ConstraintSolverError(FSComp.SR.csTypeNotCompatibleBecauseOfPrintf((NicePrint.minimalStringOfType denv ty), (String.concat "," (List.map (NicePrint.prettyStringOfTy denv) tys))),m,m2)) + if List.exists (typeEquivAux Erasure.EraseMeasures g ty) tys then CompleteD + else ErrorD (ConstraintSolverError(FSComp.SR.csTypeNotCompatibleBecauseOfPrintf((NicePrint.minimalStringOfType denv ty), (String.concat "," (List.map (NicePrint.prettyStringOfTy denv) tys))),m,m2)) and SolveTypIsReferenceType (csenv:ConstraintSolverEnv) ndeep m2 trace ty = @@ -1766,7 +1773,7 @@ and SolveTypRequiresDefaultConstructor (csenv:ConstraintSolverEnv) ndeep m2 trac let ty = stripTyEqnsAndMeasureEqns g typ if isTyparTy g ty then AddConstraint csenv ndeep m2 trace (destTyparTy g ty) (TyparConstraint.RequiresDefaultConstructor(m)) - elif isStructTy g ty && TypeHasDefaultValue g ty then + elif isStructTy g ty && TypeHasDefaultValue g m ty then CompleteD elif GetIntrinsicConstructorInfosOfType csenv.InfoReader m ty @@ -1840,8 +1847,9 @@ and CanMemberSigsMatchUpToCheck Iterate2D subsumeArg argSet.UnnamedCalledArgs argSet.UnnamedCallerArgs)) ++ (fun () -> (calledMeth.ParamArrayCalledArgOpt |> OptionD (fun calledArg -> if isArray1DTy g calledArg.CalledArgumentType then - let ety = destArrayTy g calledArg.CalledArgumentType - calledMeth.ParamArrayCallerArgs |> OptionD (IterateD (fun callerArg -> subsumeArg (CalledArg((0,0),false,NotOptional,false,None,ety)) callerArg)) + let paramArrayElemTy = destArrayTy g calledArg.CalledArgumentType + let reflArgInfo = calledArg.ReflArgInfo // propgate the reflected-arg info to each param array argument + calledMeth.ParamArrayCallerArgs |> OptionD (IterateD (fun callerArg -> subsumeArg (CalledArg((0,0),false,NotOptional,false,None,reflArgInfo,paramArrayElemTy)) callerArg)) else CompleteD) @@ -1864,7 +1872,7 @@ and CanMemberSigsMatchUpToCheck let calledArgTy = rfinfo.FieldType rfinfo.Name, calledArgTy - subsumeArg (CalledArg((-1,0),false, NotOptional,false,Some(name), calledArgTy)) caller) )) ++ (fun () -> + subsumeArg (CalledArg((-1, 0), false, NotOptional, false, Some name, ReflectedArgInfo.None, calledArgTy)) caller) )) ++ (fun () -> // - Always take the return type into account for // -- op_Explicit, op_Implicit @@ -1919,7 +1927,7 @@ and ArgsMustSubsumeOrConvert let calledArgTy = AdjustCalledArgType csenv.InfoReader isConstraint calledArg callerArg SolveTypSubsumesTypWithReport csenv ndeep m trace calledArgTy callerArg.Type ++ (fun () -> - if calledArg.IsParamArray && (isArray1DTy g calledArgTy) && not (isArray1DTy g callerArg.Type) + if calledArg.IsParamArray && isArray1DTy g calledArgTy && not (isArray1DTy g callerArg.Type) then ErrorD(Error(FSComp.SR.csMethodExpectsParams(),m)) else diff --git a/src/fsharp/csolve.fsi b/src/fsharp/ConstraintSolver.fsi similarity index 85% rename from src/fsharp/csolve.fsi rename to src/fsharp/ConstraintSolver.fsi index f1a600f1002..6d9b2b7bc9f 100644 --- a/src/fsharp/csolve.fsi +++ b/src/fsharp/ConstraintSolver.fsi @@ -1,5 +1,6 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +/// Solves constraints using a mutable constraint-solver state module internal Microsoft.FSharp.Compiler.ConstraintSolver open Internal.Utilities @@ -15,18 +16,32 @@ open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Import open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tast -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Infos +/// Create a type variable representing the use of a "_" in F# code val NewAnonTypar : TyparKind * range * TyparRigidity * TyparStaticReq * TyparDynamicReq -> Typar + +/// Create an inference type variable val NewInferenceType : unit -> TType + +/// Create an inference type variable representing an error condition when checking an expression val NewErrorType : unit -> TType + +/// Create an inference type variable representing an error condition when checking a measure val NewErrorMeasure : unit -> MeasureExpr + +/// Create a list of inference type variables, one for each element in the input list val NewInferenceTypes : 'a list -> TType list +/// Given a set of formal type parameters and their constraints, make new inference type variables for +/// each and ensure that the constraints on the new type variables are adjusted to refer to these. val FreshenAndFixupTypars : range -> TyparRigidity -> Typars -> TType list -> Typars -> Typars * TyparInst * TType list + val FreshenTypeInst : range -> Typars -> Typars * TyparInst * TType list + val FreshenTypars : range -> Typars -> TType list + val FreshenMethInfo : range -> MethInfo -> TType list exception ConstraintSolverTupleDiffLengths of DisplayEnv * TType list * TType list * range * range @@ -42,16 +57,15 @@ exception ErrorsFromAddingSubsumptionConstraint of TcGlobals * DisplayEn exception ErrorFromAddingConstraint of DisplayEnv * exn * range exception UnresolvedConversionOperator of DisplayEnv * TType * TType * range exception PossibleOverload of DisplayEnv * string * exn * range -exception UnresolvedOverloading of DisplayEnv * exn list (* PossibleOverload list *) * string * range -//exception PossibleBestOverload of DisplayEnv * string * range +exception UnresolvedOverloading of DisplayEnv * exn list * string * range exception NonRigidTypar of DisplayEnv * string option * range * TType * TType * range -/// function type that denotes captured tcVal used in constraint solver +/// A function that denotes captured tcVal, Used in constraint solver and elsewhere to get appropriate expressions for a ValRef. type TcValF = (ValRef -> ValUseFlag -> TType list -> range -> Expr * TType) [] type ConstraintSolverState = - static member New: TcGlobals * Import.ImportMap * InfoReader * TcValF-> ConstraintSolverState + static member New: TcGlobals * Import.ImportMap * InfoReader * TcValF -> ConstraintSolverState type ConstraintSolverEnv @@ -69,10 +83,9 @@ val SimplifyMeasuresInTypeScheme : TcGlobals -> bool -> Typars -> TT val SolveTyparEqualsTyp : ConstraintSolverEnv -> int -> range -> OptionalTrace -> TType -> TType -> OperationResult val SolveTypEqualsTypKeepAbbrevs : ConstraintSolverEnv -> int -> range -> OptionalTrace -> TType -> TType -> OperationResult val CanonicalizeRelevantMemberConstraints : ConstraintSolverEnv -> int -> OptionalTrace -> Typars -> OperationResult -val ResolveOverloading : ConstraintSolverEnv -> OptionalTrace -> string -> ndeep: int -> bool -> int * int -> AccessorDomain -> Typrelns.CalledMeth list -> bool -> TType option -> Typrelns.CalledMeth option * OperationResult -val UnifyUniqueOverloading : ConstraintSolverEnv -> int * int -> string -> AccessorDomain -> Typrelns.CalledMeth list -> TType -> OperationResult +val ResolveOverloading : ConstraintSolverEnv -> OptionalTrace -> string -> ndeep: int -> bool -> int * int -> AccessorDomain -> TypeRelations.CalledMeth list -> bool -> TType option -> TypeRelations.CalledMeth option * OperationResult +val UnifyUniqueOverloading : ConstraintSolverEnv -> int * int -> string -> AccessorDomain -> TypeRelations.CalledMeth list -> TType -> OperationResult val EliminateConstraintsForGeneralizedTypars : ConstraintSolverEnv -> OptionalTrace -> Typars -> unit -//val AdjustCalledArgType : TcGlobals -> InfoReader -> bool -> Typrelns.CalledArg -> Typrelns.CallerArg<'T> -> TType val CheckDeclaredTypars : DisplayEnv -> ConstraintSolverState -> range -> Typars -> Typars -> unit diff --git a/src/fsharp/detuple.fs b/src/fsharp/DetupleArgs.fs similarity index 81% rename from src/fsharp/detuple.fs rename to src/fsharp/DetupleArgs.fs index 77d0d037dc0..521fc2435f0 100644 --- a/src/fsharp/detuple.fs +++ b/src/fsharp/DetupleArgs.fs @@ -3,18 +3,17 @@ module internal Microsoft.FSharp.Compiler.Detuple open Internal.Utilities +open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library -open Microsoft.FSharp.Compiler - open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Layout open Microsoft.FSharp.Compiler.PrettyNaming open Microsoft.FSharp.Compiler.Lib @@ -168,7 +167,7 @@ let (|TyappAndApp|_|) e = // GetValsBoundInExpr //------------------------------------------------------------------------- -module GlobalUsageAnalysis = begin +module GlobalUsageAnalysis = let bindAccBounds vals (_isInDTree,v) = Zset.add v vals let GetValsBoundInExpr expr = @@ -184,59 +183,60 @@ module GlobalUsageAnalysis = begin type accessor = TupleGet of int * TType list + /// Expr information. + /// For each v, + /// (a) log it's usage site context = accessors // APP type-inst args + /// where first accessor in list applies first to the v/app. + /// (b) log it's binding site representation. type Results = - (* Expr information. - * For each v, - * (a) log it's usage site context = accessors // APP type-inst args - * where first accessor in list applies first to the v/app. - * (b) log it's binding site representation. - *------ - * Future, could generalise to be graph representation of expr. (partly there). - * This type used to be called "usage". - *) - { Uses : Zmap; (* v -> context / APP inst args *) - Defns : Zmap; (* v -> binding repr *) - DecisionTreeBindings : Zset; (* bound in a decision tree? *) - RecursiveBindings : Zmap; (* v -> v list * recursive? -- the others in the mutual binding *) - TopLevelBindings : Zset; - IterationIsAtTopLevel : bool - } + { /// v -> context / APP inst args + Uses : Zmap + /// v -> binding repr + Defns : Zmap + /// bound in a decision tree? + DecisionTreeBindings : Zset + /// v -> v list * recursive? -- the others in the mutual binding + RecursiveBindings : Zmap + TopLevelBindings : Zset + IterationIsAtTopLevel : bool } let z0 = - { Uses = Zmap.empty valOrder; - Defns = Zmap.empty valOrder; - RecursiveBindings = Zmap.empty valOrder; - DecisionTreeBindings = Zset.empty valOrder; - TopLevelBindings = Zset.empty valOrder; - IterationIsAtTopLevel = true - } - - // Note: this routine is called very frequently + { Uses = Zmap.empty valOrder + Defns = Zmap.empty valOrder + RecursiveBindings = Zmap.empty valOrder + DecisionTreeBindings = Zset.empty valOrder + TopLevelBindings = Zset.empty valOrder + IterationIsAtTopLevel = true } + + /// Log the use of a value with a particular tuple chape at a callsite + /// Note: this routine is called very frequently let logUse (f:Val) tup z = {z with Uses = match Zmap.tryFind f z.Uses with | Some sites -> Zmap.add f (tup::sites) z.Uses | None -> Zmap.add f [tup] z.Uses } + /// Log the definition of a binding let logBinding z (isInDTree,v) = let z = if isInDTree then {z with DecisionTreeBindings = Zset.add v z.DecisionTreeBindings} else z let z = if z.IterationIsAtTopLevel then {z with TopLevelBindings = Zset.add v z.TopLevelBindings} else z z + /// Log the definition of a non-recursive binding let logNonRecBinding z (bind:Binding) = - (* log mubind v -> vs *) let v = bind.Var let vs = FlatList.one v {z with RecursiveBindings = Zmap.add v (false,vs) z.RecursiveBindings; Defns = Zmap.add v bind.Expr z.Defns } + /// Log the definition of a recursive binding let logRecBindings z binds = - (* log mubind v -> vs *) let vs = valsOfBinds binds {z with RecursiveBindings = (z.RecursiveBindings,vs) ||> FlatList.fold (fun mubinds v -> Zmap.add v (true,vs) mubinds); Defns = (z.Defns,binds) ||> FlatList.fold (fun eqns bind -> Zmap.add bind.Var bind.Expr eqns) } + /// Work locally under a lambda of some kind let foldUnderLambda f z x = let saved = z.IterationIsAtTopLevel let z = {z with IterationIsAtTopLevel=false} @@ -244,49 +244,24 @@ module GlobalUsageAnalysis = begin let z = {z with IterationIsAtTopLevel=saved} z -#if DEBUG - let dumpXInfo z = - let soAccessor (TupleGet (n,_ts)) = "#" ^ string n - let dumpSite v (accessors,inst,args) = - dprintf "- use %s%s %s %s\n" - (showL (valL v)) - (match inst with - [] -> "" - | _ -> "@[" ^ showL (commaListL (List.map typeL inst)) ^ "]") - (showL (spaceListL (List.map exprL args))) - (match accessors with - [] -> "" - | _ -> "|> " ^ String.concat " " (List.map soAccessor accessors)) - let dumpUse v sites = List.iter (dumpSite v) sites - let dumpTop (v:Val) = dprintf "- toplevel: %s\n" v.LogicalName - if false then - ( dprintf "usage:\n"; - Zmap.iter dumpUse z.Uses; - Zset.iter dumpTop z.TopLevelBindings - ) - else - () -#endif - - //------------------------------------------------------------------------- // GlobalUsageAnalysis - FoldExpr, foldBind collectors //------------------------------------------------------------------------- + // Fold expr, intercepts selected exprs. + // "val v" - count [] callpattern of v + // "app (f,args)" - count callpattern of f + //--- + // On intercepted nodes, must continue exprF fold over any subexpressions, e.g. args. + //------ + // Also, noting top-level bindings, + // so must cancel top-level "foldUnderLambda" whenever step under loop/lambda: + // - lambdas + // - try/with and try/finally + // - for body + // - match targets + // - tmethods let UsageFolders g = - // Fold expr, intercepts selected exprs. - // "val v" - count [] callpattern of v - // "app (f,args)" - count callpattern of f - //--- - // On intercepted nodes, must continue exprF fold over any subexpressions, e.g. args. - //------ - // Also, noting top-level bindings, - // so must cancel top-level "foldUnderLambda" whenever step under loop/lambda: - // - lambdas - // - try/with and try/finally - // - for body - // - match targets - // - tmethods let foldLocalVal f z (vref: ValRef) = if valRefInThisAssembly g.compilingFslib vref then f z vref.Deref else z @@ -331,12 +306,12 @@ module GlobalUsageAnalysis = begin let tmethodIntercept exprF z = function TObjExprMethod(_,_,_,_,e,_m) -> Some (foldUnderLambda exprF z e) {ExprFolder0 with - exprIntercept = exprUsageIntercept; - nonRecBindingsIntercept = logNonRecBinding; - recBindingsIntercept = logRecBindings; - valBindingSiteIntercept = logBinding; - targetIntercept = targetIntercept; - tmethodIntercept = tmethodIntercept; + exprIntercept = exprUsageIntercept + nonRecBindingsIntercept = logNonRecBinding + recBindingsIntercept = logRecBindings + valBindingSiteIntercept = logBinding + targetIntercept = targetIntercept + tmethodIntercept = tmethodIntercept } @@ -349,8 +324,6 @@ module GlobalUsageAnalysis = begin let z = FoldImplFile folder z0 expr z -end - open GlobalUsageAnalysis @@ -364,23 +337,17 @@ let mkLocalVal m name ty topValInfo = let compgen = false in (* REVIEW: review: should this be true? *) NewVal(name,m,None,ty,Immutable,compgen,topValInfo,taccessPublic,ValNotInRecScope,None,NormalVal,[],ValInline.Optional,XmlDoc.Empty,false,false,false,false,false,false,None,ParentNone) -let dprintTerm header expr = - if false then - let str = Layout.showL (Layout.squashTo 192 (implFileL expr)) (* improve cxty! *) - dprintf "\n\n\n%s:\n%s\n" header str - else - () - //------------------------------------------------------------------------- // TupleStructure = tuple structure //------------------------------------------------------------------------- -type TupleStructure = (* tuple structure *) +type TupleStructure = | UnknownTS | TupleTS of TupleStructure list -let rec ValReprInfoForTS = function +let rec ValReprInfoForTS ts = + match ts with | UnknownTS -> [ValReprInfo.unnamedTopArg] | TupleTS ts -> ts |> List.collect ValReprInfoForTS @@ -396,7 +363,9 @@ let checkTS = function | TupleTS [_] -> internalError "exprTS: Tuple[x] not expected. (singleton tuples should not exist." | ts -> ts -let rec uncheckedExprTS = function (* explicit tuple-structure in expr *) +/// explicit tuple-structure in expr +let rec uncheckedExprTS expr = + match expr with | Expr.Op(TOp.Tuple,_tys,args,_) -> TupleTS (List.map uncheckedExprTS args) | _ -> UnknownTS @@ -415,35 +384,28 @@ let rebuildTS g m ts vs = match vs,ts with | [] ,UnknownTS -> internalError "rebuildTS: not enough fringe to build tuple" | v::vs,UnknownTS -> vs,(exprForVal m v,v.Type) - | vs ,TupleTS tss -> let vs,xtys = List.foldMap rebuild vs tss - let xs,tys = List.unzip xtys - let x = mkTupled g m xs tys - let ty = mkTupledTy g tys - vs,(x,ty) + | vs ,TupleTS tss -> + let vs,xtys = List.foldMap rebuild vs tss + let xs,tys = List.unzip xtys + let x = mkTupled g m xs tys + let ty = mkTupledTy g tys + vs,(x,ty) let vs,(x,_ty) = rebuild vs ts if vs.Length <> 0 then internalError "rebuildTS: had move fringe vars than fringe. REPORT BUG" else (); x -(* naive string concats, just for testing *) - /// CallPattern is tuple-structure for each argument position. /// - callsites have a CallPattern (possibly instancing fOrig at tuple types...). /// - the definition lambdas may imply a one-level CallPattern /// - the definition formal projection info suggests a CallPattern -type CallPattern = - TupleStructure list (* equality/ordering ok on this type *) +type CallPattern = TupleStructure list let callPatternOrder = (compare : CallPattern -> CallPattern -> int) let argsCP exprs = List.map exprTS exprs let noArgsCP = [] let isTrivialCP xs = (isNil xs) -#if DEBUG -let rec soTS = function (UnknownTS) -> "_" | TupleTS ss -> "(" ^ String.concat "," (List.map soTS ss) ^ ")" -let soCP tss = String.concat ";" (List.map soTS tss) -#endif - let rec minimalCallPattern callPattern = match callPattern with | [] -> [] @@ -453,7 +415,6 @@ let rec minimalCallPattern callPattern = | tss -> UnknownTS::tss (* non triv tss tail *) | (TupleTS ts)::tss -> TupleTS ts :: minimalCallPattern tss -/// INTERSECTION. /// Combines a list of callpatterns into one common callpattern. let commonCallPattern callPatterns = let rec andCPs cpA cpB = @@ -487,10 +448,9 @@ type TransformedFormal = /// - yb1..ybp - replacement formal choices for x1...xp. /// - transformedVal - replaces f. type Transform = - { transformCallPattern : CallPattern; - transformedFormals : TransformedFormal list; (* REVIEW: could push these to fixup binding site *) - transformedVal : Val; - } + { transformCallPattern : CallPattern + transformedFormals : TransformedFormal list + transformedVal : Val } //------------------------------------------------------------------------- @@ -530,26 +490,10 @@ let mkTransform g (f:Val) m tps x1Ntys rty (callPattern,tyfringes: (TType list * let argtys = tys1r @ tysrN let fCty = mkLambdaTy tps argtys rty let transformedVal = mkLocalVal f.Range (globalNng.FreshCompilerGeneratedName (f.LogicalName,f.Range)) fCty topValInfo - (*dprintf "mkTransform: f=%s\n" (showL (valL f)); - dprintf "mkTransform: tps=%s\n" (showL (commaListL (List.map typarL tps))); - dprintf "mkTransform: callPattern=%s\n" (soCP callPattern); - dprintf "mkTransform: tyfringes=%s\n" (showL (commaListL (List.map (fun fr -> tupleL (List.map typeL fr)) tyfringes))); - dprintf "mkTransform: tys1r=%s\n" (showL (commaListL (List.map typeL tys1r))); - dprintf "mkTransform: tysrN=%s\n" (showL (commaListL (List.map typeL tysrN))); - dprintf "mkTransform: rty =%s\n" ((showType rty)); - *) - { transformCallPattern = callPattern; - transformedFormals = transformedFormals; - transformedVal = transformedVal; - } - -#if DEBUG -open Microsoft.FSharp.Compiler.Layout -let dumpTransform trans = - dprintf " - cp : %s\n - transformedVal : %s\n\n" - (soCP trans.transformCallPattern) - (showL (valL trans.transformedVal)) -#endif + { transformCallPattern = callPattern + transformedFormals = transformedFormals + transformedVal = transformedVal } + //------------------------------------------------------------------------- // transform - vTransforms - support @@ -618,34 +562,23 @@ let decideFormalSuggestedCP g z tys vss = // transform - decideTransform //------------------------------------------------------------------------- -let decideTransform g z v callPatterns (m,tps,vss:Val list list,rty) (* tys are types of outer args *) = +let decideTransform g z v callPatterns (m,tps,vss:Val list list,rty) = let tys = List.map (typeOfLambdaArg m) vss (* arg types *) (* NOTE: 'a in arg types may have been instanced at different tuples... *) (* commonCallPattern has to handle those cases. *) let callPattern = commonCallPattern callPatterns // common CallPattern let callPattern = List.take vss.Length callPattern // restricted to max nArgs - (* NOW: get formal callPattern by defn usage of formals *) + // Get formal callPattern by defn usage of formals let formalCallPattern = decideFormalSuggestedCP g z tys vss let callPattern = List.take callPattern.Length formalCallPattern - // zip with information about known args + // Zip with information about known args let callPattern,tyfringes = zipCallPatternArgTys m g callPattern vss - // drop trivial tail AND + // Drop trivial tail AND let callPattern = minimalCallPattern callPattern - // shorten tyfringes (zippable) + // Shorten tyfringes (zippable) let tyfringes = List.take callPattern.Length tyfringes - (*dprintf "decideTransform: for v=%s\n" (showL (valL v)); - List.iter (fun cp -> dprintf "- site cp = %s\n" (soCP cp)) callPatterns; - dprintf "- common cp = %s\n" (soCP cp); - dprintf "- front cp = %s\n" (soCP cp); - dprintf "- arg tys = %s\n" (showL (commaListL (List.map typeL tys))); - dprintf "- formalCallPattern = %s\n" (soCP formalCallPattern); - dprintf "- front formalCallPattern = %s\n" (soCP cp); - dprintf "- zipped cp = %s\n" (soCP cp); - dprintf "- tyfringes = %s\n" (showL (commaListL (List.map (List.length >> intL) tyfringes))); - dprintf "- minimal cp = %s\n\n" (soCP cp); - *) if isTrivialCP callPattern then - None (* no transform *) + None // no transform else Some (v,mkTransform g v m tps tys rty (callPattern,tyfringes)) @@ -670,9 +603,9 @@ let eligibleVal g (v:Val) = let determineTransforms g (z : GlobalUsageAnalysis.Results) = let selectTransform f sites = if not (eligibleVal g f) then None else - (* consider f, if it has top-level lambda (meaning has term args) *) + // Consider f, if it has top-level lambda (meaning has term args) match Zmap.tryFind f z.Defns with - | None -> None (* no binding site, so no transform *) + | None -> None // no binding site, so no transform | Some e -> let tps,vss,_b,rty = stripTopLambda (e,f.Type) match List.concat vss with @@ -686,12 +619,6 @@ let determineTransforms g (z : GlobalUsageAnalysis.Results) = let vtransforms = Zmap.ofList valOrder vtransforms vtransforms -#if DEBUG -let dumpVTransform v tr = - dprintf "Transform for %s\n" (showL (valL v)); - dumpTransform tr; - stdout.Flush() -#endif //------------------------------------------------------------------------- @@ -699,10 +626,10 @@ let dumpVTransform v tr = //------------------------------------------------------------------------- type penv = - { transforms : Zmap; (* planned transforms *) - ccu : CcuThunk; - g : Env.TcGlobals; - } + { // The planned transforms + transforms : Zmap + ccu : CcuThunk + g : TcGlobals } let hasTransfrom penv f = Zmap.tryFind f penv.transforms @@ -716,9 +643,11 @@ let hasTransfrom penv f = Zmap.tryFind f penv.transforms - also factor buildProjections, so they share common tmps. *) -type env = {eg : TcGlobals; - prefix : string; - m : Range.range; } +type env = + { eg : TcGlobals + prefix : string + m : Range.range } + let suffixE env s = {env with prefix = env.prefix ^ s} let rangeE env m = {env with m = m} @@ -892,15 +821,16 @@ let passBinds penv binds = binds |> FlatList.map (passBind penv) // 3. run pass over following code. //------------------------------------------------------------------------- -let passBindRhs _penv conv (TBind (v,repr,letSeqPtOpt)) = TBind(v,conv repr,letSeqPtOpt) +let passBindRhs conv (TBind (v,repr,letSeqPtOpt)) = TBind(v,conv repr,letSeqPtOpt) + let preInterceptExpr (penv:penv) conv expr = match expr with | Expr.LetRec (binds,e,m,_) -> - let binds = FlatList.map (passBindRhs penv conv) binds + let binds = FlatList.map (passBindRhs conv) binds let binds = passBinds penv binds Some (mkLetRecBinds m binds (conv e)) | Expr.Let (bind,e,m,_) -> - let bind = passBindRhs penv conv bind + let bind = passBindRhs conv bind let bind = passBind penv bind Some (mkLetBind m bind (conv e)) | TyappAndApp(f,fty,tys,args,m) -> @@ -926,8 +856,9 @@ let postTransformExpr (penv:penv) expr = let passImplFile penv ass = - ass |> RewriteImplFile {PreIntercept =None (* Some (preInterceptExpr penv) *); - PostTransform= postTransformExpr penv (* (fun _ -> None) *); + ass |> RewriteImplFile {PreIntercept =None + PreInterceptBinding=None + PostTransform= postTransformExpr penv IsUnderQuotations=false } @@ -941,17 +872,7 @@ let DetupleImplFile ccu g expr = // For each Val, decide Some "transform", or None if not changing let vtrans = determineTransforms g z -#if DEBUG - // Diagnostics - summary of planned transforms - if verbose then dprintf "note: detuple - %d functions transformed\n" (List.length (Zmap.keys vtrans)); - if verbose then Zmap.iter dumpVTransform vtrans; -#endif - - (* Pass over term, rewriting bindings and fixing up call sites, under penv *) + // Pass over term, rewriting bindings and fixing up call sites, under penv let penv = {g=g; transforms = vtrans; ccu = ccu} - if verbose then dprintTerm "DetupleAssembly before:" expr; - if verbose then dprintf "DetupleAssembly: pass\n"; let expr = passImplFile penv expr - if verbose then dprintTerm "DetupleAssembly after:" expr; - if verbose then dprintf "DetupleAssembly: done\n"; expr diff --git a/src/fsharp/detuple.fsi b/src/fsharp/DetupleArgs.fsi similarity index 89% rename from src/fsharp/detuple.fsi rename to src/fsharp/DetupleArgs.fsi index 254e887bcf5..efdaacf7f1f 100644 --- a/src/fsharp/detuple.fsi +++ b/src/fsharp/DetupleArgs.fsi @@ -7,11 +7,12 @@ open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.TcGlobals (* detuple pass: *) -val DetupleImplFile : CcuThunk -> Env.TcGlobals -> TypedImplFile -> TypedImplFile +val DetupleImplFile : CcuThunk -> TcGlobals -> TypedImplFile -> TypedImplFile module GlobalUsageAnalysis = val GetValsBoundInExpr : Expr -> Zset @@ -35,4 +36,4 @@ module GlobalUsageAnalysis = /// top of expr toplevel? (true) IterationIsAtTopLevel : bool; } - val GetUsageInfoOfImplFile : Env.TcGlobals -> TypedImplFile -> Results + val GetUsageInfoOfImplFile : TcGlobals -> TypedImplFile -> Results diff --git a/src/fsharp/ExtensibleDumper.fs b/src/fsharp/ExtensibleDumper.fs deleted file mode 100644 index 8415ad4596c..00000000000 --- a/src/fsharp/ExtensibleDumper.fs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Internal.Utilities.Diagnostic -open System -open System.Diagnostics -open System.Reflection -open System.Collections.Generic - -#if EXTENSIBLE_DUMPER -#if DEBUG - -type internal ExtensibleDumper(x:obj) = - static let mutable dumpers = new Dictionary() - - [] - member self.Debug = ExtensibleDumper.Dump(x) - - static member Dump(o:obj) : string = - if o = null then "null" - else - let dumpeeType = o.GetType() - - let DeriveDumperName(dumpeeType:Type) = - "Internal.Utilities.Diagnostic." + dumpeeType.Name + "Dumper" - - match dumpers.TryGetValue(dumpeeType) with - | true, Some(dumperType, methodInfo) -> - try - let dumper = Activator.CreateInstance(dumperType,[| o |]) - let result = methodInfo.Invoke(dumper, [||]) - downcast result - with e -> "Exception during dump: "+e.Message - | true, None -> - "There is no dumper named "+(DeriveDumperName dumpeeType)+" with single constructor that takes "+dumpeeType.Name+" and property named Dump." - | false, _ -> - let TryAdd(dumpeeType:Type) = - let dumperDerivedName = DeriveDumperName(dumpeeType) - let dumperAssembly = dumpeeType.Assembly // Dumper must live in the same assembly as dumpee - let dumperType = dumperAssembly.GetType(dumperDerivedName, (*throwOnError*)false) - if dumperType <> null then - let dumpMethod = dumperType.GetMethod("ToString") - if dumpMethod <> null then - let constructors = dumperType.GetConstructors() - if constructors.Length = 1 then - let constr = constructors.[0] - let parameters = constr.GetParameters() - if parameters.Length = 1 then - dumpers.[o.GetType()] <- Some(dumperType,dumpMethod) - dumpers.ContainsKey(o.GetType()) - - if (not(TryAdd(o.GetType()))) then - if (not(TryAdd(o.GetType().BaseType))) then - dumpers.[dumpeeType] <- None - ExtensibleDumper.Dump(o) // Show the message - - - - -#endif -#endif diff --git a/src/fsharp/ExtensibleDumper.fsi b/src/fsharp/ExtensibleDumper.fsi deleted file mode 100644 index be32bd56542..00000000000 --- a/src/fsharp/ExtensibleDumper.fsi +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -namespace Internal.Utilities.Diagnostic -open System -open System.Diagnostics -open System.Reflection -open System.Collections.Generic - -#if EXTENSIBLE_DUMPER -#if DEBUG - -type internal ExtensibleDumper = - class - new : x:obj -> ExtensibleDumper - member Debug : string - static member Dump : o:obj -> string - end - -#endif -#endif diff --git a/src/fsharp/est.fs b/src/fsharp/ExtensionTyping.fs similarity index 93% rename from src/fsharp/est.fs rename to src/fsharp/ExtensionTyping.fs index 92b08309ac4..59e513ebc09 100644 --- a/src/fsharp/est.fs +++ b/src/fsharp/ExtensionTyping.fs @@ -410,11 +410,11 @@ module internal ExtensionTyping = try st.PApplyArray(f, memberName,m) with :? TypeProviderError as tpe -> - tpe.Iter (fun e -> errorR(Error(FSComp.SR.etUnexpectedExceptionFromProvidedTypeMember(fullName,memberName,e.ContextualErrorMessage),m))) + tpe.Iter (fun e -> error(Error(FSComp.SR.etUnexpectedExceptionFromProvidedTypeMember(fullName,memberName,e.ContextualErrorMessage),m))) [||] match result with - | null -> errorR(Error(FSComp.SR.etUnexpectedNullFromProvidedTypeMember(fullName,memberName),m)); [||] + | null -> error(Error(FSComp.SR.etUnexpectedNullFromProvidedTypeMember(fullName,memberName),m)); [||] | r -> r /// Try to access a member on a provided type, catching and reporting errors and checking the result is non-null, @@ -545,7 +545,7 @@ module internal ExtensionTyping = member __.IsErased = (x.Attributes &&& enum (int32 TypeProviderTypeAttributes.IsErased)) <> enum 0 member __.IsGenericType = x.IsGenericType member __.Namespace = x.Namespace - member pt.FullName = x.FullName + member __.FullName = x.FullName member __.IsArray = x.IsArray member __.Assembly = x.Assembly |> ProvidedAssembly.Create ctxt member __.GetInterfaces() = x.GetInterfaces() |> ProvidedType.CreateArray ctxt @@ -609,7 +609,7 @@ module internal ExtensionTyping = 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 option + abstract GetAttributeConstructorArgs: provider:ITypeProvider * attribName:string -> (obj option list * (string * obj option) list) option and ProvidedCustomAttributeProvider = static member Create (attributes :(ITypeProvider -> System.Collections.Generic.IList)) : IProvidedCustomAttributeProvider = @@ -622,9 +622,15 @@ module internal ExtensionTyping = attributes(provider) |> Seq.tryFind (findAttribByName attribName) |> Option.map (fun a -> - a.ConstructorArguments - |> Seq.toList - |> List.map (function Arg null -> None | Arg obj -> Some obj | _ -> None)) + let ctorArgs = + a.ConstructorArguments + |> Seq.toList + |> List.map (function Arg null -> None | Arg obj -> Some obj | _ -> None) + let namedArgs = + a.NamedArguments + |> Seq.toList + |> List.map (fun arg -> arg.MemberName, match arg.TypedValue with Arg null -> None | Arg obj -> Some obj | _ -> None) + ctorArgs, namedArgs) member __.GetHasTypeProviderEditorHideMethodsAttribute provider = attributes(provider) @@ -728,6 +734,45 @@ module internal ExtensionTyping = 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) = + let bindingFlags = BindingFlags.Instance ||| BindingFlags.NonPublic ||| BindingFlags.Public + + let staticParams = + match provider with + | :? ITypeProvider2 as itp2 -> + itp2.GetStaticParametersForMethod(x) + | _ -> + // To allow a type provider to depend only on FSharp.Core 4.3.0.0, it can alternatively implement an appropriate method called GetStaticParametersForMethod + let meth = provider.GetType().GetMethod( "GetStaticParametersForMethod", bindingFlags, null, [| typeof |], null) + if isNull meth then [| |] else + let paramsAsObj = meth.Invoke(provider, bindingFlags ||| BindingFlags.InvokeMethod, null, [| box x |], null) + paramsAsObj :?> ParameterInfo[] + + staticParams |> ProvidedParameterInfo.CreateArray ctxt + + member __.ApplyStaticArgumentsForMethod(provider: ITypeProvider, fullNameAfterArguments:string, staticArgs: obj[]) = + let bindingFlags = BindingFlags.Instance ||| BindingFlags.Public ||| BindingFlags.InvokeMethod + + let mb = + match provider with + | :? ITypeProvider2 as itp2 -> + itp2.ApplyStaticArgumentsForMethod(x, fullNameAfterArguments, staticArgs) + | _ -> + // To allow a type provider to depend only on FSharp.Core 4.3.0.0, it can alternatively implement a method called GetStaticParametersForMethod + let meth = provider.GetType().GetMethod( "ApplyStaticArgumentsForMethod", bindingFlags, null, [| typeof; typeof; typeof |], null) + match meth with + | null -> failwith (FSComp.SR.estApplyStaticArgumentsForMethodNotImplemented()) + | _ -> + let mbAsObj = meth.Invoke(provider, bindingFlags ||| BindingFlags.InvokeMethod, null, [| box x; box fullNameAfterArguments; box staticArgs |], null) + match mbAsObj with + | :? MethodBase as mb -> mb + | _ -> failwith (FSComp.SR.estApplyStaticArgumentsForMethodNotImplemented()) + match mb with + | :? MethodInfo as mi -> (mi |> ProvidedMethodInfo.Create ctxt : ProvidedMethodInfo) :> ProvidedMethodBase + | :? ConstructorInfo as ci -> (ci |> ProvidedConstructorInfo.Create ctxt : ProvidedConstructorInfo) :> ProvidedMethodBase + | _ -> failwith (FSComp.SR.estApplyStaticArgumentsForMethodNotImplemented()) + + and [] ProvidedFieldInfo (x: System.Reflection.FieldInfo,ctxt) = inherit ProvidedMemberInfo(x,ctxt) @@ -749,12 +794,16 @@ module internal ExtensionTyping = override __.Equals y = assert false; match y with :? ProvidedFieldInfo as y -> x.Equals y.Handle | _ -> false override __.GetHashCode() = assert false; x.GetHashCode() + + and [] ProvidedMethodInfo (x: System.Reflection.MethodInfo, ctxt) = inherit ProvidedMethodBase(x,ctxt) - /// MethodInfo.ReturnType cannot be null + 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 @@ -1120,7 +1169,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") @@ -1148,7 +1197,7 @@ module internal ExtensionTyping = // Try to find the type in the given provided namespace let rec tryNamespace (providedNamespace: Tainted) = - + // Get the provided namespace name let providedNamespaceName = providedNamespace.PUntaint((fun providedNamespace -> providedNamespace.NamespaceName), range=m) @@ -1169,7 +1218,7 @@ module internal ExtensionTyping = Some result else // Note: This eagerly explores all provided namespaces even if there is no match of even a prefix in the - // namespace names. + // namespace names. let providedNamespaces = providedNamespace.PApplyArray((fun providedNamespace -> providedNamespace.GetNestedNamespaces()), "GetNestedNamespaces", range=m) tryNamespaces providedNamespaces @@ -1208,8 +1257,35 @@ module internal ExtensionTyping = encContrib st, nameContrib st + let ComputeMangledNameForApplyStaticParameters(nm, staticArgs, staticParams: Tainted, m) = + let defaultArgValues = + staticParams.PApply((fun ps -> ps |> Array.map (fun sp -> sp.Name, (if sp.IsOptional then Some (string sp.RawDefaultValue) else None ))),range=m) + + let defaultArgValues = defaultArgValues.PUntaint(id,m) + PrettyNaming.computeMangledNameWithoutDefaultArgValues(nm,staticArgs,defaultArgValues) + + /// Apply the given provided method to the given static arguments (the arguments are assumed to have been sorted into application order) + let TryApplyProvidedMethod(methBeforeArgs:Tainted, staticArgs:obj[], m:range) = + if staticArgs.Length = 0 then + Some methBeforeArgs + else + let mangledName = + let nm = methBeforeArgs.PUntaint((fun x -> x.Name),m) + let staticParams = methBeforeArgs.PApplyWithProvider((fun (mb,resolver) -> mb.GetStaticParametersForMethod(resolver)),range=m) + let mangledName = ComputeMangledNameForApplyStaticParameters(nm, staticArgs, staticParams, m) + mangledName + + match methBeforeArgs.PApplyWithProvider((fun (mb,provider) -> mb.ApplyStaticArgumentsForMethod(provider, mangledName, staticArgs)),range=m) with + | Tainted.Null -> None + | methWithArguments -> + let actualName = methWithArguments.PUntaint((fun x -> x.Name),m) + if actualName <> mangledName then + error(Error(FSComp.SR.etProvidedAppliedMethodHadWrongName(methWithArguments.TypeProviderDesignation, mangledName, actualName),m)) + Some methWithArguments + + /// Apply the given provided type to the given static arguments (the arguments are assumed to have been sorted into application order - let TryApplyProvidedType(typeBeforeArguments:Tainted, (optGeneratedTypePath: string list option), staticArgs:obj[], m:range) = + let TryApplyProvidedType(typeBeforeArguments:Tainted, optGeneratedTypePath: string list option, staticArgs:obj[], m:range) = if staticArgs.Length = 0 then Some (typeBeforeArguments , (fun () -> ())) else @@ -1222,21 +1298,8 @@ module internal ExtensionTyping = // Otherwise, use the full path of the erased type, including mangled arguments let nm = typeBeforeArguments.PUntaint((fun x -> x.Name),m) let enc,_ = ILPathToProvidedType (typeBeforeArguments,m) - let defaultArgValues = - typeBeforeArguments.PApplyWithProvider((fun (typeBeforeArguments,resolver) -> - typeBeforeArguments.GetStaticParameters(resolver) - |> Array.map (fun sp -> sp.Name, (if sp.IsOptional then Some (string sp.RawDefaultValue) else None ))),range=m) - let defaultArgValues = defaultArgValues.PUntaint(id,m) - - let nonDefaultArgs = - (staticArgs,defaultArgValues) - ||> Array.zip - |> Array.choose (fun (staticArg, (defaultArgName, defaultArgValue)) -> - let actualArgValue = string staticArg - match defaultArgValue with - | Some v when v = actualArgValue -> None - | _ -> Some (defaultArgName, actualArgValue)) - let mangledName = PrettyNaming.mangleProvidedTypeName (nm, nonDefaultArgs) + let staticParams = typeBeforeArguments.PApplyWithProvider((fun (mb,resolver) -> mb.GetStaticParameters(resolver)),range=m) + let mangledName = ComputeMangledNameForApplyStaticParameters(nm, staticArgs, staticParams, m) enc @ [ mangledName ] match typeBeforeArguments.PApplyWithProvider((fun (typeBeforeArguments,provider) -> typeBeforeArguments.ApplyStaticArguments(provider, Array.ofList fullTypePathAfterArguments, staticArgs)),range=m) with diff --git a/src/fsharp/est.fsi b/src/fsharp/ExtensionTyping.fsi similarity index 97% rename from src/fsharp/est.fsi rename to src/fsharp/ExtensionTyping.fsi index 066bc1f9af7..e2959ff1bce 100644 --- a/src/fsharp/est.fsi +++ b/src/fsharp/ExtensionTyping.fsi @@ -24,7 +24,7 @@ module internal ExtensionTyping = val partiallyCanonicalizeFileName : string -> string - /// location of approvals data file, e.g. C:\Users\username\AppData\Local\Microsoft\VisualStudio\12.0\type-providers.txt + /// location of approvals data file, e.g. C:\Users\username\AppData\Local\Microsoft\VisualStudio\14.0\type-providers.txt val ApprovalsAbsoluteFileName : string [] @@ -178,7 +178,7 @@ module internal ExtensionTyping = abstract GetHasTypeProviderEditorHideMethodsAttribute : provider:ITypeProvider -> bool abstract GetDefinitionLocationAttribute : provider:ITypeProvider -> (string * int * int) option abstract GetXmlDocAttributes : provider:ITypeProvider -> string[] - abstract GetAttributeConstructorArgs: provider:ITypeProvider * attribName:string -> obj option list option + abstract GetAttributeConstructorArgs: provider:ITypeProvider * attribName:string -> (obj option list * (string * obj option) list) option and [] ProvidedAssembly = @@ -209,6 +209,7 @@ module internal ExtensionTyping = member IsConstructor : bool member GetParameters : unit -> ProvidedParameterInfo[] member GetGenericArguments : unit -> ProvidedType[] + member GetStaticParametersForMethod : ITypeProvider -> ProvidedParameterInfo[] static member TaintedGetHashCode : Tainted -> int static member TaintedEquals : Tainted * Tainted -> bool @@ -359,6 +360,9 @@ module internal ExtensionTyping = /// after other checks are made). val TryApplyProvidedType : typeBeforeArguments:Tainted * optGeneratedTypePath: string list option * staticArgs:obj[] * range -> (Tainted * (unit -> unit)) option + /// Try to apply a provided method to the given static arguments. + val TryApplyProvidedMethod : methBeforeArguments:Tainted * staticArgs:obj[] * range -> Tainted option + /// Try to resolve a type in the given extension type resolver val TryResolveProvidedType : ResolutionEnvironment * Tainted * range * string[] * typeName: string -> Tainted option diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index 26778078f0e..9d5cf0a7926 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -12,7 +12,7 @@ undefinedNameRecordLabel,"The record label '%s' is not defined" undefinedNameTypeParameter,"The type parameter '%s' is not defined" undefinedNamePatternDiscriminator,"The pattern discriminator '%s' is not defined" # ----------------------------------------------------------------------------- -# build.fs +# CompileOps.fs # ----------------------------------------------------------------------------- buildUnexpectedTypeArgs,"The non-generic type '%s' does not expect any type arguments, but here is given %d type argument(s)" 203,buildInvalidWarningNumber,"Invalid warning number '%s'" @@ -38,7 +38,6 @@ buildCouldNotReadVersionInfoFromMscorlib,"Could not read version from mscorlib.d 221,buildImplicitModuleIsNotLegalIdentifier,"The declarations in this file will be placed in an implicit module '%s' based on the file name '%s'. However this is not a valid F# identifier, so the contents will not be accessible from other files. Consider renaming the file or adding a 'module' or 'namespace' declaration at the top of the file." 222,buildMultiFileRequiresNamespaceOrModule,"Files in libraries or multiple-file applications must begin with a namespace or module declaration, e.g. 'namespace SomeNamespace.SubNamespace' or 'module SomeNamespace.SomeModule'. Only the last source file of an application may omit such a declaration." 223,buildMultipleToplevelModules,"This file contains multiple declarations of the form 'module SomeNamespace.SomeModule'. Only one declaration of this form is permitted in a file. Change your file to use an initial namespace declaration and/or use 'module ModuleName = ...' to define your modules." -buildUnknownFileSuffix,"ParseInput: unknown file suffix for '%s'" 224,buildOptionRequiresParameter,"Option requires parameter: %s" 225,buildCouldNotFindSourceFile,"Source file '%s' could not be found" 226,buildInvalidSourceFileExtension,"The file extension of '%s' is not recognized. Source files must have extension .fs, .fsi, .fsx, .fsscript, .ml or .mli." @@ -250,7 +249,6 @@ elDeprecatedOperator,"The treatment of this operator is now handled directly by # ----------------------------------------------------------------------------- 405,chkProtectedOrBaseCalled,"A protected member is called or 'base' is being used. This is only allowed in the direct implementation of members since they could escape their object scope." 406,chkByrefUsedInInvalidWay,"The byref-typed variable '%s' is used in an invalid way. Byrefs cannot be captured by closures or passed to inner functions." -407,chkMutableUsedInInvalidWay,"The mutable variable '%s' is used in an invalid way. Mutable variables cannot be captured by closures. Consider eliminating this use of mutation or using a heap-allocated mutable reference cell via 'ref' and '!'." 408,chkBaseUsedInInvalidWay,"The 'base' keyword is used in an invalid way. Base calls cannot be used in closures. Consider using a private member to make base calls." chkVariableUsedInInvalidWay,"The variable '%s' is used in an invalid way" 410,chkTypeLessAccessibleThanType,"The type '%s' is less accessible than the value, member or type '%s' it is used in" @@ -286,12 +284,12 @@ chkUnionCaseDefaultAugmentation,"default augmentation of the union case" 438,chkDuplicateMethod,"Duplicate method. The method '%s' has the same name and signature as another method in this type." 438,chkDuplicateMethodWithSuffix,"Duplicate method. The method '%s' has the same name and signature as another method in this type once tuples, functions, units of measure and/or provided types are erased." 439,chkDuplicateMethodCurried,"The method '%s' has curried arguments but has the same name as another method in this type. Methods with curried arguments cannot be overloaded. Consider using a method taking tupled arguments." -440,chkCurriedMethodsCantHaveOutParams,"Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional' or 'byref' arguments" +440,chkCurriedMethodsCantHaveOutParams,"Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional', 'ReflectedDefinition' or 'byref' arguments" 441,chkDuplicateProperty,"Duplicate property. The property '%s' has the same name and signature as another property in this type." 441,chkDuplicatePropertyWithSuffix,"Duplicate property. The property '%s' has the same name and signature as another property in this type once tuples, functions, units of measure and/or provided types are erased." 442,chkDuplicateMethodInheritedType,"Duplicate method. The abstract method '%s' has the same name and signature as an abstract method in an inherited type." 442,chkDuplicateMethodInheritedTypeWithSuffix,"Duplicate method. The abstract method '%s' has the same name and signature as an abstract method in an inherited type once tuples, functions, units of measure and/or provided types are erased." -443,chkMultipleGenericInterfaceInstantiations,"This type implements or inherits the same interface at different generic instantiations '%s' and '%s'. This is not permitted in this version of F#." +443,chkMultipleGenericInterfaceInstantiations,"This type implements the same interface at different generic instantiations '%s' and '%s'. This is not permitted in this version of F#." 444,chkValueWithDefaultValueMustHaveDefaultValue,"The type of a field using the 'DefaultValue' attribute must admit default initialization, i.e. have 'null' as a proper value or be a struct type whose fields all admit default initialization. You can use 'DefaultValue(false)' to disable this check" 445,chkNoByrefInTypeAbbrev,"The type abbreviation contains byrefs. This is not permitted by F#." # ----------------------------------------------------------------------------- @@ -476,6 +474,7 @@ parsMultiArgumentGenericTypeFormDeprecated,"The syntax '(typ,...,typ) ident' is 622,parsMismatchedQuotationName,"Mismatched quotation operator name, beginning with '%s'" 623,parsActivePatternCaseMustBeginWithUpperCase,"Active pattern case identifiers must begin with an uppercase letter" 624,parsActivePatternCaseContainsPipe,"The '|' character is not permitted in active pattern case identifiers" +625,parsIllegalDenominatorForMeasureExponent,"Denominator must not be 0 in unit-of-measure exponent" parsNoEqualShouldFollowNamespace,"No '=' symbol should follow a 'namespace' declaration" parsSyntaxModuleStructEndDeprecated,"The syntax 'module ... = struct .. end' is not used in F# code. Consider using 'module ... = begin .. end'" parsSyntaxModuleSigEndDeprecated,"The syntax 'module ... : sig .. end' is not used in F# code. Consider using 'module ... = begin .. end'" @@ -615,7 +614,7 @@ tcExpressionWithIfRequiresParenthesis,"This list or array expression includes an 757,tcInheritCannotBeUsedOnInterfaceType,"'inherit' cannot be used on interface types. Consider implementing the interface by using 'interface ... with ... end' instead." 758,tcNewCannotBeUsedOnInterfaceType,"'new' cannot be used on interface types. Consider using an object expression '{{ new ... with ... }}' instead." 759,tcAbstractTypeCannotBeInstantiated,"Instances of this type cannot be created since it has been marked abstract or not all methods have been given implementations. Consider using an object expression '{{ new ... with ... }}' instead." -760,tcIDisposableTypeShouldUseNew,"It is recommended that objects that support the IDisposable interface are created using 'new Type(args)' rather than 'Type(args)' to indicate that resources may be owned by the generated value" +760,tcIDisposableTypeShouldUseNew,"It is recommended that objects supporting the IDisposable interface are created using the syntax 'new Type(args)', rather than 'Type(args)' or 'Type' as a function value representing the constructor, to indicate that resources may be owned by the generated value" 761,tcSyntaxCanOnlyBeUsedToCreateObjectTypes,"'%s' may only be used to construct object types" 762,tcConstructorRequiresCall,"Constructors for the type '%s' must directly or indirectly call its implicit object constructor. Use a call to the implicit object constructor instead of a record expression." 763,tcUndefinedField,"The field '%s' has been given a value, but is not present in the type '%s'" @@ -656,8 +655,8 @@ tcExpressionWithIfRequiresParenthesis,"This list or array expression includes an 799,tcInvalidAssignment,"Invalid assignment" 800,tcInvalidUseOfTypeName,"Invalid use of a type name" 801,tcTypeHasNoAccessibleConstructor,"This type has no accessible object constructors" -802,tcInvalidUseOfTypeNameOrConstructor,"Invalid use of a type name and/or object constructor. If necessary use 'new' and apply the constructor to its arguments, e.g. 'new Type(args)'." -803,tcInvalidUseOfTypeNameOrConstructorWithOverloads,"Invalid use of a type name and/or object constructor. If necessary use 'new' and apply the constructor to its arguments, e.g. 'new Type(args)'. The required signature is:\n\t%s." +#802,tcInvalidUseOfTypeNameOrConstructor,"Invalid use of a type name and/or object constructor. If necessary use 'new' and apply the constructor to its arguments, e.g. 'new Type(args)'." +#803,tcInvalidUseOfTypeNameOrConstructorWithOverloads,"Invalid use of a type name and/or object constructor. If necessary use 'new' and apply the constructor to its arguments, e.g. 'new Type(args)'. The required signature is:\n\t%s." 804,tcInvalidUseOfInterfaceType,"Invalid use of an interface type" 805,tcInvalidUseOfDelegate,"Invalid use of a delegate constructor. Use the syntax 'new Type(args)' or just 'Type(args)'." 806,tcPropertyIsNotStatic,"Property '%s' is not static" @@ -1022,6 +1021,8 @@ lexfltSeparatorTokensOfPatternMatchMisaligned,"The '|' tokens separating rules o 1130,nrInvalidFieldLabel,"Invalid field label" 1132,nrInvalidExpression,"Invalid expression '%s'" 1133,nrNoConstructorsAvailableForType,"No constructors are available for the type '%s'" +1134,nrUnionTypeNeedsQualifiedAccess,"The union type for union case '%s' was defined with the RequireQualifiedAccessAttribute. Include the name of the union type ('%s') in the name you are using." +1135,nrRecordTypeNeedsQualifiedAccess,"The record type for the record field '%s' was defined with the RequireQualifiedAccessAttribute. Include the name of the record type ('%s') in the name you are using." # ----------------------------------------------------------------------------- # ilwrite.fs errors # ----------------------------------------------------------------------------- @@ -1064,7 +1065,7 @@ lexHashEndingNoMatchingIf,"#endif has no matching #if" 1169,lexHashIfMustHaveIdent,"#if directive should be immediately followed by an identifier" 1170,lexWrongNestedHashEndif,"Syntax error. Wrong nested #endif, unexpected tokens before it." lexHashBangMustBeFirstInFile,"#! may only appear as the first line at the start of a file." -1171,lexExpectedSingleLineComment,"Expected single line comment or end of line" +1171,pplexExpectedSingleLineComment,"Expected single line comment or end of line" 1172,memberOperatorDefinitionWithNoArguments,"Infix operator member '%s' has no arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ..." 1173,memberOperatorDefinitionWithNonPairArgument,"Infix operator member '%s' has %d initial argument(s). Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ..." 1174,memberOperatorDefinitionWithCurriedArguments,"Infix operator member '%s' has extra curried arguments. Expected a tuple of 2 arguments, e.g. static member (+) (x,y) = ..." @@ -1138,14 +1139,15 @@ lexIndentOffForML,"Consider using a file with extension '.ml' or '.mli' instead" 1242,parsMissingGreaterThan,"Unmatched '<'. Expected closing '>'" 1243,parsUnexpectedQuotationOperatorInTypeAliasDidYouMeanVerbatimString,"Unexpected quotation operator '<@' in type definition. If you intend to pass a verbatim string as a static argument to a type provider, put a space between the '<' and '@' characters." 1244,parsErrorParsingAsOperatorName,"Attempted to parse this as an operator name, but failed" +1245,lexInvalidUnicodeLiteral,"\U%s is not a valid Unicode character escape sequence" # Fsc.exe resource strings fscTooManyErrors,"Exiting - too many errors" 2001,docfileNoXmlSuffix,"The documentation file has no .xml suffix" 2002,fscNoImplementationFiles,"No implementation files specified" 2003,fscBadAssemblyVersion,"An %s specified version '%s', but this value is invalid and has been ignored" 2004,fscTwoResourceManifests,"Conflicting options specified: 'win32manifest' and 'win32res'. Only one of these can be used." -2005,fscQuotationLiteralsStaticLinking,"The code in assembly '%s' makes uses of quotation literals. Static linking may not include components that make use of quotation literals." -2006,fscQuotationLiteralsStaticLinking0,"Code in this assembly makes uses of quotation literals. Static linking may not include components that make use of quotation literals." +2005,fscQuotationLiteralsStaticLinking,"The code in assembly '%s' makes uses of quotation literals. Static linking may not include components that make use of quotation literals unless all assemblies are compiled with at least F# 4.0." +2006,fscQuotationLiteralsStaticLinking0,"Code in this assembly makes uses of quotation literals. Static linking may not include components that make use of quotation literals unless all assemblies are compiled with at least F# 4.0." 2007,fscStaticLinkingNoEXE,"Static linking may not include a .EXE" 2008,fscStaticLinkingNoMixedDLL,"Static linking may not include a mixed managed/unmanaged DLL" 2009,fscIgnoringMixedWhenLinking,"Ignoring mixed managed/unmanaged assembly '%s' during static linking" @@ -1202,7 +1204,7 @@ fscTooManyErrors,"Exiting - too many errors" 3044,etNestedProvidedTypesDoNotTakeStaticArgumentsOrGenericParameters,"Nested provided types do not take static arguments or generic parameters" 3045,etInvalidStaticArgument,"Invalid static argument to provided type. Expected an argument of kind '%s'." 3046,etErrorApplyingStaticArgumentsToType,"An error occured applying the static arguments to a provided type" -3047,etUnknownStaticArgumentKind,"Unknown static argument kind '%s' when resolving a reference to a provided type '%s'" +3047,etUnknownStaticArgumentKind,"Unknown static argument kind '%s' when resolving a reference to a provided type or method '%s'" invalidNamespaceForProvidedType,"invalid namespace for provided type" invalidFullNameForProvidedType,"invalid full name for provided type" #3050,etGenerateAttributeRequiresInternal,"The 'Generate' attribute must be used with a type definition with 'internal' visibility" @@ -1210,6 +1212,7 @@ invalidFullNameForProvidedType,"invalid full name for provided type" 3053,etTypeProviderConstructorException,"The type provider constructor has thrown an exception: %s" 3056,etNullProvidedExpression,"Type provider '%s' returned null from GetInvokerExpression." 3057,etProvidedAppliedTypeHadWrongName,"The type provider '%s' returned an invalid type from 'ApplyStaticArguments'. A type with name '%s' was expected, but a type with name '%s' was returned." +3058,etProvidedAppliedMethodHadWrongName,"The type provider '%s' returned an invalid method from 'ApplyStaticArgumentsForMethod'. A method with name '%s' was expected, but a method with name '%s' was returned." 3060,tcTypeTestLossy,"This type test or downcast will erase the provided type '%s' to the type '%s'" 3061,tcTypeCastErased,"This downcast will erase the provided type '%s' to the type '%s'." 3062,tcTypeTestErased,"This type test with a provided type '%s' is not allowed because this provided type will be erased to '%s' at runtime." @@ -1226,7 +1229,7 @@ invalidFullNameForProvidedType,"invalid full name for provided type" 3077,tcJoinMustUseSimplePattern,"In queries, '%s' must use a simple pattern" 3078,tcMissingCustomOperation,"A custom query operation for '%s' is required but not specified" 3080,etBadUnnamedStaticArgs,"Named static arguments must come after all unnamed static arguments" -3081,etStaticParameterRequiresAValue,"The static parameter '%s' of the provided type '%s' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '%s<%s=...>'." +3081,etStaticParameterRequiresAValue,"The static parameter '%s' of the provided type or method '%s' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. '%s<%s=...>'." 3082,etNoStaticParameterWithName,"No static parameter exists with name '%s'" 3083,etStaticParameterAlreadyHasValue,"The static parameter '%s' has already been given a value" 3084,etMultipleStaticParameterWithName,"Multiple static parameters exist with name '%s'" @@ -1307,7 +1310,6 @@ nicePrintOtherOverloads1,"+ 1 overload" nicePrintOtherOverloadsN,"+ %d overloads" erasedTo,"Erased to" 3156,parsUnfinishedExpression,"Unexpected token '%s' or incomplete expression" -3157,crefQuotationsCantContainByrefTypes,"Quotations cannot contain byref types" 3158,parsAttributeOnIncompleteCode,"Cannot find code target for this attribute, possibly because the code after the attribute is incomplete." 3159,parsTypeNameCannotBeEmpty,"Type name cannot be empty." 3160,buildProblemReadingAssembly,"Problem reading assembly '%s': %s" @@ -1332,3 +1334,11 @@ descriptionUnavailable,"(description unavailable...)" 3177,tastConstantExpressionOverflow,"This literal expression or attribute argument results in an arithmetic overflow." 3178,tcIllegalStructTypeForConstantExpression,"This is not valid literal expression. The [] attribute will be ignored." 3179,fscSystemRuntimeInteropServicesIsRequired,"System.Runtime.InteropServices assembly is required to use UnknownWrapper\DispatchWrapper classes." +3180,abImplicitHeapAllocation,"The mutable local '%s' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed." +estApplyStaticArgumentsForMethodNotImplemented,"A type provider implemented GetStaticParametersForMethod, but ApplyStaticArgumentsForMethod was not implemented or invalid" +3181,etErrorApplyingStaticArgumentsToMethod,"An error occured applying the static arguments to a provided method" +3182,pplexUnexpectedChar,"Unexpected character '%s' in preprocessor expression" +3183,ppparsUnexpectedToken,"Unexpected token '%s' in preprocessor expression" +3184,ppparsIncompleteExpression,"Incomplete preprocessor expression" +3185,ppparsMissingToken,"Missing token '%s' in preprocessor expression" +3186,pickleMissingDefinition,"An error occurred while reading the F# metadata node at position %d in table '%s' of assembly '%s'. The node had no matching declaration. Please report this warning. You may need to recompile the F# assembly you are using." diff --git a/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj b/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj index 56a33917b38..187bb8251cd 100644 --- a/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj +++ b/src/fsharp/FSharp.Build-proto/FSharp.Build-proto.fsproj @@ -47,11 +47,11 @@ - - - - - + + + + + diff --git a/src/fsharp/FSharp.Build/FSharp.Build.fsproj b/src/fsharp/FSharp.Build/FSharp.Build.fsproj index 12e1961662a..2e976932168 100644 --- a/src/fsharp/FSharp.Build/FSharp.Build.fsproj +++ b/src/fsharp/FSharp.Build/FSharp.Build.fsproj @@ -44,11 +44,11 @@ - - - - - + + + + + {DED3BBD7-53F4-428A-8C9F-27968E768605} FSharp.Core diff --git a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj index 3d17ec31947..871d1dd846e 100644 --- a/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj +++ b/src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj @@ -22,6 +22,16 @@ FSComp.txt + + --lexlib Internal.Utilities.Text.Lexing + pplex.fsl + + + Microsoft.FSharp.Compiler.PPParser + Microsoft.FSharp.Compiler + --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + pppars.fsy + --lexlib Internal.Utilities.Text.Lexing lex.fsl @@ -179,6 +189,12 @@ range.fs + + rational.fsi + + + rational.fs + ErrorLogger.fs @@ -212,14 +228,14 @@ ilxsettings.fs - - pubclo.fsi - - - pubclo.fs + + EraseClosures.fsi + + + EraseClosures.fs - - cu_erase.fs + + EraseUnions.fs InternalFileSystemUtils.fsi @@ -227,11 +243,11 @@ InternalFileSystemUtils.fs - - unilex.fsi + + UnicodeLexing.fsi - - unilex.fs + + UnicodeLexing.fs layout.fsi @@ -242,6 +258,7 @@ ast.fs + lexhelp.fsi @@ -249,12 +266,16 @@ lexhelp.fs + - - sreflect.fsi + + ast.fs + + + QuotationPickler.fsi - - sreflect.fs + + QuotationPickler.fs QueueList.fs @@ -262,23 +283,23 @@ tast.fs - - env.fs - - - tastops.fsi - - - tastops.fs + + TcGlobals.fs + + + TastOps.fsi + + + TastOps.fs + + + TastPickle.fsi - - pickle.fsi + + TastPickle.fs - - pickle.fs - - - lexfilter.fs + + LexFilter.fs import.fsi @@ -292,92 +313,89 @@ NicePrint.fs - - augment.fsi - - - augment.fs - - - typrelns.fs - - - patcompile.fsi + + AugmentWithHashCompare.fsi - - patcompile.fs + + AugmentWithHashCompare.fs - - outcome.fsi + + NameResolution.fsi - - outcome.fs + + NameResolution.fs - - csolve.fsi + + TypeRelations.fs - - csolve.fs + + PatternMatchCompilation.fsi - - formats.fsi + + PatternMatchCompilation.fs - - formats.fs + + ConstraintSolver.fsi + + + ConstraintSolver.fs - - nameres.fsi + + CheckFormatStrings.fsi - - nameres.fs + + CheckFormatStrings.fs - - unsolved.fs + + FindUnsolved.fs - - creflect.fsi + + QuotationTranslator.fsi - - creflect.fs + + QuotationTranslator.fs - - check.fsi + + PostInferenceChecks.fsi - - check.fs + + PostInferenceChecks.fs - - tc.fsi + + TypeChecker.fsi - - tc.fs + + TypeChecker.fs - - opt.fsi + + Optimizer.fsi - - opt.fs + + autobox.fs - - detuple.fsi + + Optimizer.fs - - detuple.fs + + DetupleArgs.fsi + + + DetupleArgs.fs - - tlr.fsi + + InnerLambdasToTopLevelFuncs.fsi - - tlr.fs + + InnerLambdasToTopLevelFuncs.fs - - lowertop.fs + + LowerCallsAndSeqs.fs - - ilxgen.fsi + + IlxGen.fsi - - ilxgen.fs + + IlxGen.fs TraceCall.fsi @@ -385,17 +403,17 @@ TraceCall.fs - - build.fsi + + CompileOps.fsi - - build.fs + + CompileOps.fs - - fscopts.fsi + + CompileOptions.fsi - - fscopts.fs + + CompileOptions.fs IncrementalBuild.fsi @@ -415,12 +433,12 @@ + + - - - - - + + + diff --git a/src/fsharp/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj b/src/fsharp/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj index 44508f41f7e..6c596282624 100644 --- a/src/fsharp/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj +++ b/src/fsharp/FSharp.Compiler.Interactive.Settings/FSharp.Compiler.Interactive.Settings.fsproj @@ -37,8 +37,8 @@ {DED3BBD7-53F4-428A-8C9F-27968E768605} - FSharp.Core - - + FSharp.Core + + diff --git a/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj b/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj new file mode 100644 index 00000000000..5e468db0c9f --- /dev/null +++ b/src/fsharp/FSharp.Compiler.Unittests/FSharp.Compiler.Unittests.fsproj @@ -0,0 +1,76 @@ + + + + + ..\.. + {a8d9641a-9170-4cf4-8fe0-6db8c134e1b5} + + + + Debug + AnyCPU + 2.0 + true + true + Library + FSharp.Compiler.Unittests + v3.5 + SystematicUnitTests + + false + false + netcore + + + $(DefineConstants);SILVERLIGHT + $(DefineConstants);EXTENSIONTYPING + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 3 + + + pdbonly + true + bin\Release\ + TRACE + prompt + 3 + + + + True + $(NUnitLibDir)\nunit.framework.dll + + + + + + + + + + + + + + + + + + FSharp.Compiler + {2e4d67b4-522d-4cf7-97e4-ba940f0b18f3} + + + FSharp.Core + {ded3bbd7-53f4-428a-8c9f-27968e768605} + True + + + + \ No newline at end of file diff --git a/src/fsharp/FSharp.Compiler.Unittests/HashIfExpression.fs b/src/fsharp/FSharp.Compiler.Unittests/HashIfExpression.fs new file mode 100644 index 00000000000..cf70addb330 --- /dev/null +++ b/src/fsharp/FSharp.Compiler.Unittests/HashIfExpression.fs @@ -0,0 +1,268 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace FSharp.Compiler.Unittests + +open System +open System.Text + +open NUnit.Framework + +open Internal.Utilities.Text.Lexing +open Microsoft.FSharp.Compiler +open Microsoft.FSharp.Compiler.Lexer +open Microsoft.FSharp.Compiler.Lexhelp +open Microsoft.FSharp.Compiler.ErrorLogger +open Microsoft.FSharp.Compiler.ErrorLogger +open Microsoft.FSharp.Compiler.Ast + +[] +type HashIfExpression() = + + let preludes = [|"#if "; "#elif "|] + let epilogues = [|""; " // Testing"|] + + let ONE = IfdefId "ONE" + let TWO = IfdefId "TWO" + let THREE = IfdefId "THREE" + + let isSet l r = (l &&& r) <> 0 + + let (!!) e = IfdefNot(e) + let (&&&) l r = IfdefAnd(l,r) + let (|||) l r = IfdefOr(l,r) + + let mutable tearDown = fun () -> () + + let exprAsString (e : LexerIfdefExpression) : string = + let sb = StringBuilder() + let append (s : string) = ignore <| sb.Append s + let rec build (e : LexerIfdefExpression) : unit = + match e with + | IfdefAnd (l,r)-> append "("; build l; append " && "; build r; append ")" + | IfdefOr (l,r) -> append "("; build l; append " || "; build r; append ")" + | IfdefNot ee -> append "!"; build ee + | IfdefId nm -> append nm + + build e + + sb.ToString () + + let createParser () = + let errors = ResizeArray() + let warnings = ResizeArray() + + let errorLogger = + { + new ErrorLogger("TestErrorLogger") with + member x.WarnSinkImpl(e) = warnings.Add e + member x.ErrorSinkImpl(e) = errors.Add e + member x.ErrorCount = errors.Count + } + + let stack : LexerIfdefStack = ref [] + let lightSyntax = LightSyntaxStatus(true, false) + let resourceManager = LexResourceManager () + let defines = [] + let startPos = Position.Empty + let args = mkLexargs ("dummy", defines, lightSyntax, resourceManager, stack, errorLogger) + + CompileThreadStatic.ErrorLogger <- errorLogger + + let parser (s : string) = + let lexbuf = LexBuffer.FromChars (s.ToCharArray ()) + lexbuf.StartPos <- startPos + lexbuf.EndPos <- startPos + let tokenStream = PPLexer.tokenstream args + + PPParser.start tokenStream lexbuf + + errors, warnings, parser + + [] + member this.Setup() = + let el = CompileThreadStatic.ErrorLogger + tearDown <- + fun () -> + CompileThreadStatic.BuildPhase <- BuildPhase.DefaultPhase + CompileThreadStatic.ErrorLogger <- el + + CompileThreadStatic.BuildPhase <- BuildPhase.Compile + + [] + member this.TearDown() = + tearDown () + + [] + member this.PositiveParserTestCases()= + + let errors, warnings, parser = createParser () + + let positiveTestCases = + [| + "ONE" , ONE + "ONE//" , ONE + "ONE // Comment" , ONE + "!ONE" , !!ONE + "!!ONE" , !! (!!ONE) + "DEBUG" , (IfdefId "DEBUG") + "!DEBUG" , !! (IfdefId "DEBUG") + "O_s1" , IfdefId "O_s1" + "(ONE)" , (ONE) + "ONE&&TWO" , ONE &&& TWO + "ONE||TWO" , ONE ||| TWO + "( ONE && TWO )" , ONE &&& TWO + "ONE && TWO && THREE" , (ONE &&& TWO) &&& THREE + "ONE || TWO || THREE" , (ONE ||| TWO) ||| THREE + "ONE || TWO && THREE" , ONE ||| (TWO &&& THREE) + "ONE && TWO || THREE" , (ONE &&& TWO) ||| THREE + "ONE || (TWO && THREE)" , ONE ||| (TWO &&& THREE) + "ONE && (TWO || THREE)" , ONE &&& (TWO ||| THREE) + "!ONE || TWO && THREE" , (!!ONE) ||| (TWO &&& THREE) + "ONE && !TWO || THREE" , (ONE &&& (!!TWO)) ||| THREE + "ONE || !(TWO && THREE)" , ONE ||| (!!(TWO &&& THREE)) + "true" , IfdefId "true" + "false" , IfdefId "false" + |] + + let failures = ResizeArray () + let fail = failures.Add + + for test,expected in positiveTestCases do + for prelude in preludes do + let test = prelude + test + for epilogue in epilogues do + let test = test + epilogue + try + let expr = parser test + + if expected <> expr then + fail <| sprintf "'%s', expected %A, actual %A" test (exprAsString expected) (exprAsString expr) + with + | e -> fail <| sprintf "'%s', expected %A, actual %s,%A" test (exprAsString expected) (e.GetType().Name) e.Message + + + let fs = + failures + |> Seq.append (errors |> Seq.map (fun pe -> pe.DebugDisplay ())) + |> Seq.append (warnings |> Seq.map (fun pe -> pe.DebugDisplay ())) + |> Seq.toArray + + let failure = String.Join ("\n", fs) + + Assert.AreEqual("", failure) + + () + + [] + member this.NegativeParserTestCases()= + + let errors, warnings, parser = createParser () + + let negativeTests = + [| + "" + "!" + "&&" + "||" + "@" + "ONE ONE" + "ONE@" + "@ONE" + "$" + "ONE$" + "$ONE" + "ONE!" + "(ONE" + "ONE)" + // TODO: Investigate why this raises a parse failure + // "(ONE ||)" + "ONE&&" + "ONE ||" + "&& ONE" + "||ONE" + "ONE TWO" + "ONE(* Comment" + "ONE(* Comment *)" + "ONE(**)" + "ONE (* Comment" + "ONE (* Comment *)" + "ONE (**)" + "ONE )(@$&%*@^#%#!$)" + |] + + let failures = ResizeArray () + let fail = failures.Add + + for test in negativeTests do + for prelude in preludes do + let test = prelude + test + for epilogue in epilogues do + let test = test + epilogue + try + let bec = errors.Count + let expr = parser test + let aec = errors.Count + + if bec = aec then // No new errors discovered + fail <| sprintf "'%s', expected 'parse error', actual %A" test (exprAsString expr) + with + | e -> fail <| sprintf "'%s', expected 'parse error', actual %s,%A" test (e.GetType().Name) e.Message + + let fs = failures |> Seq.toArray + + let fails = String.Join ("\n", fs) + + Assert.AreEqual("", fails) + + [] + member this.LexerIfdefEvalTestCases()= + + let failures = ResizeArray () + let fail = failures.Add + + for i in 0..7 do + let one = isSet i 1 + let two = isSet i 2 + let three = isSet i 4 + + let lookup s = + match s with + | "ONE" -> one + | "TWO" -> two + | "THREE" -> three + | _ -> false + + let testCases = + [| + ONE , one + !!ONE , not one + !! (!!ONE) , not (not one) + TWO , two + !!TWO , not two + !! (!!TWO) , not (not two) + ONE &&& TWO , one && two + ONE ||| TWO , one || two + (ONE &&& TWO) &&& THREE , (one && two) && three + (ONE ||| TWO) ||| THREE , (one || two) || three + ONE ||| (TWO &&& THREE) , one || (two && three) + (ONE &&& TWO) ||| THREE , (one && two) || three + ONE ||| (TWO &&& THREE) , one || (two && three) + ONE &&& (TWO ||| THREE) , one && (two || three) + (!!ONE) ||| (TWO &&& THREE) , (not one) || (two && three) + (ONE &&& (!!TWO)) ||| THREE , (one && (not two)) || three + ONE ||| (!!(TWO &&& THREE)) , one || (not (two && three)) + |] + + let eval = LexerIfdefEval lookup + for expr, expected in testCases do + let actual = eval expr + + if actual <> expected then + fail <| sprintf "For ONE=%A, TWO=%A, THREE=%A the expression %A is expected to be %A but was %A" one two three (exprAsString expr) expected actual + + + let fs = failures |> Seq.toArray + + let fails = String.Join ("\n", fs) + + Assert.AreEqual("", fails) diff --git a/src/fsharp/FSharp.Compiler.Unittests/ManglingNameOfProvidedTypes.fs b/src/fsharp/FSharp.Compiler.Unittests/ManglingNameOfProvidedTypes.fs new file mode 100644 index 00000000000..0180e6abdd2 --- /dev/null +++ b/src/fsharp/FSharp.Compiler.Unittests/ManglingNameOfProvidedTypes.fs @@ -0,0 +1,68 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +namespace FSharp.Compiler.Unittests + +open System +open System.Text +open NUnit.Framework +open Microsoft.FSharp.Compiler + +[] +type ManglingNamesOfProvidedTypesWithSingleParameter() = + + [] + member this.MangleWithNonDefaultValue() = + let mangled = + PrettyNaming.computeMangledNameWithoutDefaultArgValues("MyNamespace.Test", [| "xyz" |], [| "Foo", Some "abc" |]) + Assert.AreEqual("MyNamespace.Test,Foo=\"xyz\"", mangled) + + [] + member this.MangleWithDefaultValue() = + let mangled = + PrettyNaming.computeMangledNameWithoutDefaultArgValues("MyNamespace.Test", [| "xyz" |], [| "Foo", Some "xyz" |]) + Assert.AreEqual("MyNamespace.Test", mangled) + + [] + member this.DemangleNonDefaultValue() = + let name, parameters = PrettyNaming.demangleProvidedTypeName "MyNamespace.Test,Foo=\"xyz\"" + Assert.AreEqual("MyNamespace.Test", name) + Assert.AreEqual([| "Foo", "xyz" |], parameters) + + [] + member this.DemangleDefaultValue() = + let name, parameters = PrettyNaming.demangleProvidedTypeName "MyNamespace.Test," + Assert.AreEqual("MyNamespace.Test", name) + Assert.AreEqual([||], parameters) + + [] + member this.DemangleNewDefaultValue() = + let name, parameters = PrettyNaming.demangleProvidedTypeName "MyNamespace.Test" + Assert.AreEqual("MyNamespace.Test", name) + Assert.AreEqual([||], parameters) + +[] +type ManglingNamesOfProvidedTypesWithMultipleParameter() = + + [] + member this.MangleWithNonDefaultValue() = + let mangled = + PrettyNaming.computeMangledNameWithoutDefaultArgValues + ("MyNamespace.Test", [| "xyz"; "abc" |], + [| "Foo", Some "foo" + "Foo2", Some "foo2" |]) + Assert.AreEqual("MyNamespace.Test,Foo=\"xyz\",Foo2=\"abc\"", mangled) + + [] + member this.MangleWithDefaultValue() = + let mangled = + PrettyNaming.computeMangledNameWithoutDefaultArgValues + ("MyNamespace.Test", [| "xyz"; "abc" |], + [| "Foo", Some "xyz" + "Foo2", Some "abc" |]) + Assert.AreEqual("MyNamespace.Test", mangled) + + [] + member this.DemangleMultiParameter() = + let name, parameters = PrettyNaming.demangleProvidedTypeName "TestType,Foo=\"xyz\",Foo2=\"abc\"" + Assert.AreEqual("TestType", name) + Assert.AreEqual([| "Foo", "xyz" + "Foo2", "abc" |], parameters) \ No newline at end of file diff --git a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj index 212c34fdcbd..9b9513cfa34 100644 --- a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj +++ b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj @@ -1,4 +1,4 @@ - + @@ -51,17 +51,11 @@ LexYaccRuntime\prim-parsing.fs - - Utilities\ExtensibleDumper.fsi + + Utilities\ResizeArray.fsi - - Utilities\ExtensibleDumper.fs - - - Utilities\resizearray.fsi - - - Utilities\resizearray.fs + + Utilities\ResizeArray.fs Utilities\HashMultiMap.fsi @@ -135,6 +129,12 @@ Utilities\TraceCall.fs + + Utilities\rational.fsi + + + Utilities\rational.fs + ErrorLogging\range.fsi @@ -229,18 +229,28 @@ ILXErase\ilxsettings.fs - - ILXErase\pubclo.fsi + + ILXErase\EraseClosures.fsi - - ILXErase\pubclo.fs + + ILXErase\EraseClosures.fs - - ILXErase\cu_erase.fsi + + ILXErase\EraseUnions.fsi - - ILXErase\cu_erase.fs + + ILXErase\EraseUnions.fs + + --lexlib Internal.Utilities.Text.Lexing + ParserAndUntypedAST\pplex.fsl + + + Microsoft.FSharp.Compiler.PPParser + Microsoft.FSharp.Compiler + --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + ParserAndUntypedAST\pppars.fsy + --lexlib Internal.Utilities.Text.Lexing ParserAndUntypedAST\lex.fsl @@ -251,11 +261,11 @@ --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing ParserAndUntypedAST\pars.fsy - - ParserAndUntypedAST\unilex.fsi + + ParserAndUntypedAST\UnicodeLexing.fsi - - ParserAndUntypedAST\unilex.fs + + ParserAndUntypedAST\UnicodeLexing.fs ParserAndUntypedAST\layout.fsi @@ -266,6 +276,9 @@ ParserAndUntypedAST\ast.fs + + ParserAndUntypedAST\pppars.fs + ParserAndUntypedAST\pars.fs @@ -275,10 +288,13 @@ ParserAndUntypedAST\lexhelp.fs + + ParserAndUntypedAST\pplex.fs + ParserAndUntypedAST\lex.fs - + ParserAndUntypedAST\lexfilter.fs @@ -287,35 +303,35 @@ TypedAST\tainted.fs - - TypedAST\est.fsi + + TypedAST\ExtensionTyping.fsi - - TypedAST\est.fs + + TypedAST\ExtensionTyping.fs - - TypedAST\sreflect.fsi + + TypedAST\QuotationPickler.fsi - - TypedAST\sreflect.fs + + TypedAST\QuotationPickler.fs TypedAST\tast.fs - - TypedAST\env.fs + + TypedAST\TcGlobals.fs - - TypedAST\tastops.fsi + + TypedAST\TastOps.fsi - - TypedAST\tastops.fs + + TypedAST\TastOps.fs - - TypedAST\pickle.fsi + + TypedAST\TastPickle.fsi - - TypedAST\pickle.fs + + TypedAST\TastPickle.fs Logic\import.fsi @@ -329,104 +345,101 @@ Logic\NicePrint.fs - - Logic\augment.fsi - - - Logic\augment.fs + + Logic\AugmentWithHashCompare.fsi - - Logic\outcome.fsi + + Logic\AugmentWithHashCompare.fs - - Logic\outcome.fs + + Logic\NameResolution.fsi - - Logic\nameres.fsi + + Logic\NameResolution.fs - - Logic\nameres.fs + + Logic\TypeRelations.fs - - Logic\typrelns.fs + + Logic\PatternMatchCompilation.fsi - - Logic\patcompile.fsi + + Logic\PatternMatchCompilation.fs - - Logic\patcompile.fs + + Logic\ConstraintSolver.fsi - - Logic\csolve.fsi + + Logic\ConstraintSolver.fs - - Logic\csolve.fs + + Logic\CheckFormatStrings.fsi - - Logic\formats.fsi + + Logic\CheckFormatStrings.fs - - Logic\formats.fs + + Logic\FindUnsolved.fs - - Logic\unsolved.fs + + Logic\QuotationTranslator.fsi - - Logic\creflect.fsi + + Logic\QuotationTranslator.fs - - Logic\creflect.fs + + Logic\PostInferenceChecks.fsi - - Logic\check.fsi + + Logic\PostInferenceChecks.fs - - Logic\check.fs + + Logic\TypeChecker.fsi - - Logic\tc.fsi + + Logic\TypeChecker.fs - - Logic\tc.fs + + Optimize\Optimizer.fsi - - Optimize\opt.fsi + + Optimize\Optimizer.fs - - Optimize\opt.fs + + Optimize\DetupleArgs.fsi - - Optimize\detuple.fsi + + Optimize\DetupleArgs.fs - - Optimize\detuple.fs + + Optimize\InnerLambdasToTopLevelFuncs.fsi - - Optimize\tlr.fsi + + Optimize\InnerLambdasToTopLevelFuncs.fs - - Optimize\tlr.fs + + Optimize\LowerCallsAndSeqs.fs - - Optimize\lowertop.fs + + Optimize\autobox.fs - - CodeGen\ilxgen.fsi + + CodeGen\IlxGen.fsi - - CodeGen\ilxgen.fs + + CodeGen\IlxGen.fs - - Driver\build.fsi + + Driver\CompileOps.fsi - - Driver\build.fs + + Driver\CompileOps.fs - - Driver\fscopts.fsi + + Driver\CompileOptions.fsi - - Driver\fscopts.fs + + Driver\CompileOptions.fs Driver\IncrementalBuild.fsi @@ -485,11 +498,6 @@ Service\service.fs - InternalsVisibleTo.fs @@ -498,16 +506,17 @@ + - - - - - - + + + + + + {DED3BBD7-53F4-428A-8C9F-27968E768605} FSharp.Core diff --git a/src/fsharp/FSharp.Compiler/InternalsVisibleTo.fs b/src/fsharp/FSharp.Compiler/InternalsVisibleTo.fs index b77e12a0a12..f0d5e127e65 100644 --- a/src/fsharp/FSharp.Compiler/InternalsVisibleTo.fs +++ b/src/fsharp/FSharp.Compiler/InternalsVisibleTo.fs @@ -18,6 +18,7 @@ open System.Reflection [] [] [] +[] do() diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj b/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj index a3555d80826..ea30a91e878 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core.Unittests.fsproj @@ -23,14 +23,14 @@ $(DefineConstants);SILVERLIGHT - $(DefineConstants);EXTENSIONTYPING + $(DefineConstants);EXTENSIONTYPING;$(TargetFramework.ToLower()) true full false bin\Debug\ - DEBUG;TRACE + $(DefineConstants);DEBUG;TRACE prompt 3 @@ -38,7 +38,7 @@ pdbonly true bin\Release\ - TRACE + $(DefineConstants);TRACE prompt 3 @@ -74,6 +74,7 @@ + @@ -81,6 +82,7 @@ + @@ -88,6 +90,7 @@ + @@ -100,7 +103,7 @@ - + diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs index 535b18226d6..70f24a15c74 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule.fs @@ -143,6 +143,197 @@ type ArrayModule() = CheckThrowsArgumentNullException (fun () -> Array.averageBy funcd nullArr |> ignore) () + + [] + member this.ChunkBySize() = + + // int Seq + Assert.IsTrue([| [|1..4|]; [|5..8|] |] = Array.chunkBySize 4 [|1..8|]) + Assert.IsTrue([| [|1..4|]; [|5..8|]; [|9..10|] |] = Array.chunkBySize 4 [|1..10|]) + Assert.IsTrue([| [|1|]; [|2|]; [|3|]; [|4|] |] = Array.chunkBySize 1 [|1..4|]) + Assert.IsTrue([| [|1..3|]; [|4|] |] = Array.chunkBySize 3 [|1..4|]) + Assert.IsTrue([| [|1..5|]; [|6..10|]; [|11..12|] |] = Array.chunkBySize 5 [|1..12|]) + + // string Seq + Assert.IsTrue([| [|"a"; "b"|]; [|"c";"d"|]; [|"e"|] |] = Array.chunkBySize 2 [|"a";"b";"c";"d";"e"|]) + + // empty Seq + Assert.IsTrue([||] = Array.chunkBySize 3 [||]) + + // null Seq + let nullArr:_[] = null + CheckThrowsArgumentNullException (fun () -> Array.chunkBySize 3 nullArr |> ignore) + + // invalidArg + CheckThrowsArgumentException (fun () -> Array.chunkBySize 0 [|1..10|] |> ignore) + CheckThrowsArgumentException (fun () -> Array.chunkBySize -1 [|1..10|] |> ignore) + + () + + [] + member this.SplitInto() = + + // int array + Assert.IsTrue([| [|1..4|]; [|5..7|]; [|8..10|] |] = Array.splitInto 3 [|1..10|]) + Assert.IsTrue([| [|1..4|]; [|5..8|]; [|9..11|] |] = Array.splitInto 3 [|1..11|]) + Assert.IsTrue([| [|1..4|]; [|5..8|]; [|9..12|] |] = Array.splitInto 3 [|1..12|]) + + Assert.IsTrue([| [|1..2|]; [|3|]; [|4|]; [|5|] |] = Array.splitInto 4 [|1..5|]) + Assert.IsTrue([| [|1|]; [|2|]; [|3|]; [|4|] |] = Array.splitInto 20 [|1..4|]) + + // string array + Assert.IsTrue([| [|"a"; "b"|]; [|"c";"d"|]; [|"e"|] |] = Array.splitInto 3 [|"a";"b";"c";"d";"e"|]) + + // empty array + Assert.IsTrue([| |] = Array.splitInto 3 [| |]) + + // null array + let nullArr:_[] = null + CheckThrowsArgumentNullException (fun () -> Array.splitInto 3 nullArr |> ignore) + + // invalidArg + CheckThrowsArgumentException (fun () -> Array.splitInto 0 [|1..10|] |> ignore) + CheckThrowsArgumentException (fun () -> Array.splitInto -1 [|1..10|] |> ignore) + + () + + [] + member this.distinct() = + // distinct should work on empty array + Assert.AreEqual([||], Array.distinct [||]) + + // distinct not should work on null + CheckThrowsArgumentNullException (fun () -> Array.distinct null |> ignore) + + // distinct should filter out simple duplicates + Assert.AreEqual([|1|], Array.distinct [|1|]) + Assert.AreEqual([|1|], Array.distinct [|1; 1|]) + Assert.AreEqual([|1; 2; 3|], Array.distinct [|1; 2; 3; 1|]) + Assert.AreEqual([|[1;2]; [1;3]|], Array.distinct [|[1;2]; [1;3]; [1;2]; [1;3]|]) + Assert.AreEqual([|[1;1]; [1;2]; [1;3]; [1;4]|], Array.distinct [|[1;1]; [1;2]; [1;3]; [1;4]|]) + Assert.AreEqual([|[1;1]; [1;4]|], Array.distinct [|[1;1]; [1;1]; [1;1]; [1;4]|]) + + Assert.AreEqual([|null|], Array.distinct [|null|]) + let list = new System.Collections.Generic.List() + Assert.AreEqual([|null, list|], Array.distinct [|null, list|]) + + [] + member this.distinctBy() = + // distinctBy should work on empty array + Assert.AreEqual([||], Array.distinctBy (fun _ -> failwith "should not be executed") [||]) + + // distinctBy should not work on null + CheckThrowsArgumentNullException (fun () -> Array.distinctBy (fun _ -> failwith "should not be executed") null |> ignore) + + // distinctBy should filter out simple duplicates + Assert.AreEqual([|1|], Array.distinctBy id [|1|]) + Assert.AreEqual([|1|], Array.distinctBy id [|1; 1|]) + Assert.AreEqual([|1; 2; 3|], Array.distinctBy id [|1; 2; 3; 1|]) + + // distinctBy should use the given projection to filter out simple duplicates + Assert.AreEqual([|1|], Array.distinctBy (fun x -> x / x) [|1; 2|]) + Assert.AreEqual([|1; 2|], Array.distinctBy (fun x -> if x < 3 then x else 1) [|1; 2; 3; 4|]) + Assert.AreEqual([|[1;2]; [1;3]|], Array.distinctBy (fun x -> List.sum x) [|[1;2]; [1;3]; [2;1]|]) + + Assert.AreEqual([|null|], Array.distinctBy id [|null|]) + let list = new System.Collections.Generic.List() + Assert.AreEqual([|null, list|], Array.distinctBy id [|null, list|]) + + [] + member this.Except() = + // integer array + let intArr1 = [| yield! {1..100} + yield! {1..100} |] + let intArr2 = [| 1 .. 10 |] + let expectedIntArr = [| 11 .. 100 |] + + Assert.AreEqual(expectedIntArr, Array.except intArr2 intArr1) + + // string array + let strArr1 = [| "a"; "b"; "c"; "d"; "a" |] + let strArr2 = [| "b"; "c" |] + let expectedStrArr = [| "a"; "d" |] + + Assert.AreEqual(expectedStrArr, Array.except strArr2 strArr1) + + // empty array + let emptyIntArr = [| |] + Assert.AreEqual([|1..100|], Array.except emptyIntArr intArr1) + Assert.AreEqual(emptyIntArr, Array.except intArr1 emptyIntArr) + Assert.AreEqual(emptyIntArr, Array.except emptyIntArr emptyIntArr) + Assert.AreEqual(emptyIntArr, Array.except intArr1 intArr1) + + // null array + let nullArr : int [] = null + CheckThrowsArgumentNullException(fun () -> Array.except nullArr emptyIntArr |> ignore) + CheckThrowsArgumentNullException(fun () -> Array.except emptyIntArr nullArr |> ignore) + CheckThrowsArgumentNullException(fun () -> Array.except nullArr nullArr |> ignore) + + () + + [] + member this.Take() = + Assert.AreEqual([||],Array.take 0 [||]) + Assert.AreEqual([||],Array.take 0 [|"str1";"str2";"str3";"str4"|]) + Assert.AreEqual([|1;2;4|],Array.take 3 [|1;2;4;5;7|]) + Assert.AreEqual([|"str1";"str2"|],Array.take 2 [|"str1";"str2";"str3";"str4"|]) + Assert.AreEqual( [|"str1";"str2";"str3";"str4"|],Array.take 4 [|"str1";"str2";"str3";"str4"|]) + + CheckThrowsInvalidOperationExn (fun () -> Array.take 1 [||] |> ignore) + CheckThrowsArgumentException (fun () -> Array.take -1 [|0;1|] |> ignore) + CheckThrowsInvalidOperationExn (fun () -> Array.take 5 [|"str1";"str2";"str3";"str4"|] |> ignore) + CheckThrowsArgumentNullException (fun () -> Array.take 5 null |> ignore) + + [] + member this.takeWhile() = + Assert.AreEqual([||],Array.takeWhile (fun x -> failwith "should not be used") [||]) + Assert.AreEqual([|1;2;4;5|],Array.takeWhile (fun x -> x < 6) [|1;2;4;5;6;7|]) + Assert.AreEqual([|"a"; "ab"; "abc"|],Array.takeWhile (fun (x:string) -> x.Length < 4) [|"a"; "ab"; "abc"; "abcd"; "abcde"|]) + Assert.AreEqual([|"a"; "ab"; "abc"; "abcd"; "abcde"|],Array.takeWhile (fun _ -> true) [|"a"; "ab"; "abc"; "abcd"; "abcde"|]) + Assert.AreEqual([||],Array.takeWhile (fun _ -> false) [|"a"; "ab"; "abc"; "abcd"; "abcde"|]) + Assert.AreEqual([||],Array.takeWhile (fun _ -> false) [|"a"|]) + Assert.AreEqual([|"a"|],Array.takeWhile (fun _ -> true) [|"a"|]) + Assert.AreEqual([|"a"|],Array.takeWhile (fun x -> x <> "ab") [|"a"; "ab"; "abc"; "abcd"; "abcde"|]) + + CheckThrowsArgumentNullException (fun () -> Array.takeWhile (fun _ -> failwith "should not be used") null |> ignore) + + [] + member this.splitAt() = + Assert.AreEqual([||], Array.splitAt 0 [||] |> fst) + Assert.AreEqual([||], Array.splitAt 0 [||] |> snd) + + Assert.AreEqual([|1..4|], Array.splitAt 4 [|1..10|] |> fst) + Assert.AreEqual([|5..10|], Array.splitAt 4 [|1..10|] |> snd) + + Assert.AreEqual([||], Array.splitAt 0 [|1..2|] |> fst) + Assert.AreEqual([|1..2|], Array.splitAt 0 [|1..2|] |> snd) + + Assert.AreEqual([|1|], Array.splitAt 1 [|1..2|] |> fst) + Assert.AreEqual([|2|], Array.splitAt 1 [|1..2|] |> snd) + + Assert.AreEqual([|1..2|], Array.splitAt 2 [|1..2|] |> fst) + Assert.AreEqual([||], Array.splitAt 2 [|1..2|] |> snd) + + Assert.AreEqual([|"a"|], Array.splitAt 1 [|"a";"b";"c"|] |> fst) + Assert.AreEqual([|"b";"c"|], Array.splitAt 1 [|"a";"b";"c"|] |> snd) + + // split should fail if index exceeds bounds + CheckThrowsInvalidOperationExn (fun () -> Array.splitAt 1 [||] |> ignore) + CheckThrowsArgumentException (fun () -> Array.splitAt -1 [|0;1|] |> ignore) + CheckThrowsInvalidOperationExn (fun () -> Array.splitAt 5 [|"str1";"str2";"str3";"str4"|] |> ignore) + + CheckThrowsArgumentNullException (fun () -> Array.splitAt 0 null |> ignore) + CheckThrowsArgumentNullException (fun () -> Array.splitAt 1 null |> ignore) + + [] + member this.replicate() = + // replicate should create multiple copies of the given value + Assert.AreEqual([||],Array.replicate 0 null) + Assert.AreEqual([||],Array.replicate 0 1) + Assert.AreEqual([|null|],Array.replicate 1 null) + Assert.AreEqual([|"1";"1"|],Array.replicate 2 "1") + + CheckThrowsArgumentException (fun () -> Array.replicate -1 null |> ignore) [] member this.Blit() = @@ -258,6 +449,31 @@ type ArrayModule() = member this.``Parallel.Collect`` () = this.CollectTester Array.Parallel.collect Array.Parallel.collect #endif + + [] + member this.compareWith() = + // compareWith should work on empty arrays + Assert.AreEqual(0,Array.compareWith (fun _ -> failwith "should not be executed") [||] [||]) + Assert.AreEqual(-1,Array.compareWith (fun _ -> failwith "should not be executed") [||] [|1|]) + Assert.AreEqual(1,Array.compareWith (fun _ -> failwith "should not be executed") [|"1"|] [||]) + + // compareWith should not work on null arrays + CheckThrowsArgumentNullException(fun () -> Array.compareWith (fun _ -> failwith "should not be executed") null [||] |> ignore) + CheckThrowsArgumentNullException(fun () -> Array.compareWith (fun _ -> failwith "should not be executed") [||] null |> ignore) + + // compareWith should work on longer arrays + Assert.AreEqual(-1,Array.compareWith compare [|"1";"2"|] [|"1";"3"|]) + Assert.AreEqual(1,Array.compareWith compare [|1;2;43|] [|1;2;1|]) + Assert.AreEqual(1,Array.compareWith compare [|1;2;3;4|] [|1;2;3|]) + Assert.AreEqual(0,Array.compareWith compare [|1;2;3;4|] [|1;2;3;4|]) + Assert.AreEqual(-1,Array.compareWith compare [|1;2;3|] [|1;2;3;4|]) + Assert.AreEqual(1,Array.compareWith compare [|1;2;3|] [|1;2;2;4|]) + Assert.AreEqual(-1,Array.compareWith compare [|1;2;2|] [|1;2;3;4|]) + + // compareWith should use the comparer + Assert.AreEqual(0,Array.compareWith (fun x y -> 0) [|"1";"2"|] [|"1";"3"|]) + Assert.AreEqual(1,Array.compareWith (fun x y -> 1) [|"1";"2"|] [|"1";"3"|]) + Assert.AreEqual(-1,Array.compareWith (fun x y -> -1) [|"1";"2"|] [|"1";"3"|]) [] member this.Concat() = @@ -290,7 +506,18 @@ type ArrayModule() = CheckThrowsNullRefException (fun () -> Array.concat nullArrays |> ignore) () - + + [] + member this.countBy() = + // countBy should work on empty array + Assert.AreEqual([||], Array.countBy (fun _ -> failwith "should not be executed") [||]) + + // countBy should not work on null + CheckThrowsArgumentNullException(fun () -> Array.countBy (fun _ -> failwith "should not be executed") null |> ignore) + + // countBy should count by the given key function + Assert.AreEqual([| 5,1; 2,2; 3,2 |],Array.countBy id [|5;2;2;3;3|]) + Assert.AreEqual([| 3,3; 2,2; 1,3 |],Array.countBy (fun x -> if x < 3 then x else 3) [|5;2;1;2;3;3;1;1|]) [] member this.Copy() = @@ -336,6 +563,26 @@ type ArrayModule() = Assert.IsTrue( (nullArr = [|null; null; null|]) ) () + + + [] + member this.TryHead() = + // integer array + let resultInt = Array.tryHead [|2..2..20|] + Assert.AreEqual(2, resultInt.Value) + + // string array + let resultStr = Array.tryHead [|"a";"b";"c";"d"|] + Assert.AreEqual("a", resultStr.Value) + + // empty array + let resultNone = Array.tryHead [||] + Assert.AreEqual(None, resultNone) + + // null array + let nullArr = null:string[] + CheckThrowsArgumentNullException (fun () -> Array.tryHead nullArr |> ignore) + () [] member this.Exists() = @@ -451,6 +698,38 @@ type ArrayModule() = () + + [] + member this.Where() = + // integer array + let intArr = [| 1..20 |] + let funcInt x = if (x%5 = 0) then true else false + let resultInt = Array.where funcInt intArr + if resultInt <> [|5;10;15;20|] then Assert.Fail() + + // string array + let strArr = [|"Lists"; "are"; "a"; "commonly"; "data";"structor" |] + let funcStr (x:string) = if (x.Length > 4) then true else false + let resultStr = Array.where funcStr strArr + if resultStr <> [|"Lists"; "commonly"; "structor" |] then Assert.Fail() + + // empty array + let emptyArr:int[] = [| |] + let resultEpt = Array.where funcInt emptyArr + if resultEpt <> [| |] then Assert.Fail() + + // null array + let nullArr = null:string[] + CheckThrowsArgumentNullException (fun () -> Array.where funcStr nullArr |> ignore) + + () + + [] + member this.``where should work like filter``() = + Assert.AreEqual([||], Array.where (fun x -> x % 2 = 0) [||]) + Assert.AreEqual([|0;2;4;6;8|], Array.where (fun x -> x % 2 = 0) [|0..9|]) + Assert.AreEqual([|"a";"b";"c"|], Array.where (fun _ -> true) [|"a";"b";"c"|]) + [] member this.Find() = // integer array @@ -467,7 +746,10 @@ type ArrayModule() = // empty array let emptyArr:int[] = [| |] - CheckThrowsKeyNotFoundException (fun () -> Array.find (fun x -> true) emptyArr |> ignore) + CheckThrowsKeyNotFoundException (fun () -> Array.find (fun _ -> true) emptyArr |> ignore) + + // not found + CheckThrowsKeyNotFoundException (fun () -> Array.find (fun _ -> false) intArr |> ignore) // null array let nullArr = null:string[] @@ -475,6 +757,32 @@ type ArrayModule() = () + [] + member this.FindBack() = + // integer array + let funcInt x = if (x%5 = 0) then true else false + Assert.AreEqual(20, Array.findBack funcInt [| 1..20 |]) + Assert.AreEqual(15, Array.findBack funcInt [| 1..19 |]) + Assert.AreEqual(5, Array.findBack funcInt [| 5..9 |]) + + // string array + let strArr = [|"Lists"; "are"; "a"; "commonly"; "data";"structor" |] + let funcStr (x:string) = x.Length > 7 + let resultStr = Array.findBack funcStr strArr + Assert.AreEqual("structor", resultStr) + + // empty array + CheckThrowsKeyNotFoundException (fun () -> Array.findBack (fun _ -> true) [| |] |> ignore) + + // not found + CheckThrowsKeyNotFoundException (fun () -> Array.findBack (fun _ -> false) [| 1..20 |] |> ignore) + + // null array + let nullArr = null:string[] + CheckThrowsArgumentNullException (fun () -> Array.findBack funcStr nullArr |> ignore) + + () + [] member this.FindIndex() = // integer array @@ -491,8 +799,10 @@ type ArrayModule() = // empty array let emptyArr:int[] = [| |] - CheckThrowsKeyNotFoundException(fun() -> Array.findIndex (fun x -> true) emptyArr |> ignore) + CheckThrowsKeyNotFoundException(fun() -> Array.findIndex (fun _ -> true) emptyArr |> ignore) + // not found + CheckThrowsKeyNotFoundException(fun() -> Array.findIndex (fun _ -> false) intArr |> ignore) // null array let nullArr = null:string[] @@ -500,6 +810,32 @@ type ArrayModule() = () + [] + member this.FindIndexBack() = + // integer array + let funcInt x = if (x%5 = 0) then true else false + Assert.AreEqual(19, Array.findIndexBack funcInt [| 1..20 |]) + Assert.AreEqual(14, Array.findIndexBack funcInt [| 1..19 |]) + Assert.AreEqual(0, Array.findIndexBack funcInt [| 5..9 |]) + + // string array + let strArr = [|"Lists"; "are"; "a"; "commonly"; "data";"structor" |] + let funcStr (x:string) = if (x.Length >7) then true else false + let resultStr = Array.findIndexBack funcStr strArr + Assert.AreEqual(5, resultStr) + + // empty array + CheckThrowsKeyNotFoundException(fun() -> Array.findIndexBack (fun _ -> true) [| |] |> ignore) + + // not found + CheckThrowsKeyNotFoundException(fun() -> Array.findIndexBack (fun _ -> false) [| 1..20 |] |> ignore) + + // null array + let nullArr = null:string[] + CheckThrowsArgumentNullException (fun () -> Array.findIndexBack funcStr nullArr |> ignore) + + () + [] member this.Pick() = // integers @@ -512,7 +848,40 @@ type ArrayModule() = // make it not found CheckThrowsKeyNotFoundException (fun () -> Array.pick (fun n -> None) intArr |> ignore) - + + [] + member this.last() = + // last should fail on empty array + CheckThrowsArgumentException(fun () -> Array.last [||] |> ignore) + + // last should fail on null + CheckThrowsArgumentNullException(fun () -> Array.last null |> ignore) + + // last should return the last element from arrays + Assert.AreEqual(1, Array.last [|1|]) + Assert.AreEqual("2", Array.last [|"1"; "3"; "2"|]) + Assert.AreEqual(["4"], Array.last [|["1"; "3"]; []; ["4"]|]) + + [] + member this.TryLast() = + // integers array + let IntSeq = [| 1..9 |] + let intResult = Array.tryLast IntSeq + Assert.AreEqual(9, intResult.Value) + + // string array + let strResult = Array.tryLast [|"first"; "second"; "third"|] + Assert.AreEqual("third", strResult.Value) + + // Empty array + let emptyResult = Array.tryLast Array.empty + Assert.IsTrue(emptyResult.IsNone) + + // null array + let nullArr = null:string[] + CheckThrowsArgumentNullException (fun () ->Array.tryLast nullArr |> ignore) + () + [] member this.ToSeq() = let intArr = [| 1..10 |] @@ -727,6 +1096,61 @@ type ArrayModule() = () + [] + member this.``exactlyOne should return the element from singleton arrays``() = + Assert.AreEqual(1, Array.exactlyOne [|1|]) + Assert.AreEqual("2", Array.exactlyOne [|"2"|]) + () + + [] + member this.``exactlyOne should fail on empty array``() = + CheckThrowsArgumentException(fun () -> Array.exactlyOne [||] |> ignore) + + [] + member this.``exactlyOne should fail on null array``() = + CheckThrowsArgumentNullException(fun () -> Array.exactlyOne null |> ignore) + + [] + member this.``exactlyOne should fail on arrays with more than one element``() = + CheckThrowsArgumentException(fun () -> Array.exactlyOne [|"1"; "2"|] |> ignore) + + [] + member this.GroupBy() = + let funcInt x = x%5 + + let IntArray = [| 0 .. 9 |] + + let group_byInt = Array.groupBy funcInt IntArray + + let expectedIntArray = + [| for i in 0..4 -> i, [|i; i+5|] |] + + if group_byInt <> expectedIntArray then Assert.Fail() + + // string array + let funcStr (x:string) = x.Length + let strArray = [|"l1ngth7"; "length 8"; "l2ngth7" ; "length 9"|] + + let group_byStr = Array.groupBy funcStr strArray + let expectedStrArray = + [| + 7, [|"l1ngth7"; "l2ngth7"|] + 8, [|"length 8"|] + 9, [|"length 9"|] + |] + + if group_byStr <> expectedStrArray then Assert.Fail() + + // Empty array + let emptyArray = [||] + let group_byEmpty = Array.groupBy funcInt emptyArray + let expectedEmptyArray = [||] + + if emptyArray <> expectedEmptyArray then Assert.Fail() + + CheckThrowsArgumentNullException(fun () -> Array.groupBy funcInt (null : int array) |> ignore) + () + member private this.InitTester initInt initString = // integer array let resultInt : int[] = initInt 3 (fun x -> x + 3) @@ -748,6 +1172,20 @@ type ArrayModule() = () + [] + member this.Hd() = + // integer array + let resultInt = Array.head [|2..2..20|] + Assert.AreEqual(2, resultInt) + + // string array + let resultStr = Array.head [|"a";"b";"c";"d"|] + Assert.AreEqual("a", resultStr) + + CheckThrowsArgumentException(fun () -> Array.head [||] |> ignore) + CheckThrowsArgumentNullException(fun () -> Array.head null |> ignore) + () + [] member this.Init() = this.InitTester Array.init Array.init @@ -930,6 +1368,18 @@ type ArrayModule() = () + [] + member this.``pairwise should return pairs of the input array``() = + Assert.AreEqual([||],Array.pairwise [||]) + Assert.AreEqual([||],Array.pairwise [|1|]) + Assert.AreEqual([|1,2|],Array.pairwise [|1;2|]) + Assert.AreEqual([|1,2; 2,3|],Array.pairwise [|1;2;3|]) + Assert.AreEqual([|"H","E"; "E","L"; "L","L"; "L","O"|],Array.pairwise [|"H";"E";"L";"L";"O"|]) + + [] + member this.``pairwise should not work on null``() = + CheckThrowsArgumentNullException(fun () -> Array.pairwise null |> ignore) + member private this.MapTester mapInt (mapString : (string -> int) -> array -> array) = // empty array let f x = x + 1 @@ -1118,9 +1568,37 @@ type ArrayModule() = member this.Partition () = this.PartitionTester Array.partition Array.partition + [] + member this.Singleton() = + Assert.AreEqual([|null|],Array.singleton null) + Assert.AreEqual([|"1"|],Array.singleton "1") + Assert.AreEqual([|[]|], Array.singleton []) + Assert.IsTrue([|[||]|] = Array.singleton [||]) + #if FX_NO_TPL_PARALLEL #else [] member this.``Parallel.Partition`` () = this.PartitionTester Array.Parallel.partition Array.Parallel.partition #endif + + [] + member this.Contains() = + // integer array + let intArr = [| 2;4;6;8 |] + let resultInt = Array.contains 6 intArr + Assert.IsTrue(resultInt) + + // string array + let strArr = [|"Lists"; "are"; "commonly"|] + let resultStr = Array.contains "not" strArr + Assert.IsFalse(resultStr) + + // empty array + let emptyArr:int[] = [| |] + let resultEpt = Array.contains 4 emptyArr + Assert.IsFalse(resultEpt) + + // null array + let nullArr = null:string[] + CheckThrowsArgumentNullException (fun () -> Array.contains "empty" nullArr |> ignore) diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule2.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule2.fs index 6f66804896d..888f9eb709e 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule2.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ArrayModule2.fs @@ -18,6 +18,14 @@ Make sure each method works on: * Null array (null) *) +type ArrayWindowedTestInput<'t> = + { + InputArray : 't[] + WindowSize : int + ExpectedArray : 't[][] + Exception : Type option + } + [] type ArrayModule2() = @@ -41,6 +49,28 @@ type ArrayModule2() = () + [] + member this.Indexed() = + // integer array + let resultInt = Array.indexed [|10..2..20|] + Assert.AreEqual([|(0,10);(1,12);(2,14);(3,16);(4,18);(5,20)|], resultInt) + + // string array + let funcStr (x:int) (y:string) = x+ y.Length + let resultStr = Array.indexed [| "Lists"; "Are"; "Commonly"; "List" |] + Assert.AreEqual([| (0,"Lists");(1,"Are");(2,"Commonly");(3,"List") |], resultStr) + + // empty array + let emptyArr:int[] = [| |] + let resultEpt = Array.indexed emptyArr + Assert.AreEqual([| |], resultEpt) + + // null array + let nullArr = null:string[] + CheckThrowsArgumentNullException (fun () -> Array.indexed nullArr |> ignore) + + () + [] member this.Map() = // integer array @@ -94,6 +124,88 @@ type ArrayModule2() = () + [] + member this.Map3() = + // Integer array + let funcInt a b c = (a + b) * c + let resultInt = Array.map3 funcInt [| 1..8 |] [| 2..9 |] [| 3..10 |] + if resultInt <> [| 9; 20; 35; 54; 77; 104; 135; 170 |] then Assert.Fail() + + // First array is shorter + CheckThrowsArgumentException (fun () -> Array.map3 funcInt [| 1..2 |] [| 2..9 |] [| 3..10 |] |> ignore) + // Second array is shorter + CheckThrowsArgumentException (fun () -> Array.map3 funcInt [| 1..8 |] [| 2..6 |] [| 3..10 |] |> ignore) + // Third array is shorter + CheckThrowsArgumentException (fun () -> Array.map3 funcInt [| 1..8 |] [| 2..9 |] [| 3..6 |] |> ignore) + + // String array + let funcStr a b c = a + b + c + let resultStr = Array.map3 funcStr [| "A";"B";"C";"D" |] [| "a";"b";"c";"d" |] [| "1";"2";"3";"4" |] + if resultStr <> [| "Aa1";"Bb2";"Cc3";"Dd4" |] then Assert.Fail() + + // Empty array + let resultEmpty = Array.map3 funcStr [||] [||] [||] + if resultEmpty <> [||] then Assert.Fail() + + // Null array + let nullArray = null : int[] + let nonNullArray = [|1|] + CheckThrowsArgumentNullException (fun () -> Array.map3 funcInt nullArray nonNullArray nonNullArray |> ignore) + CheckThrowsArgumentNullException (fun () -> Array.map3 funcInt nonNullArray nullArray nonNullArray |> ignore) + CheckThrowsArgumentNullException (fun () -> Array.map3 funcInt nonNullArray nonNullArray nullArray |> ignore) + + () + + [] + member this.MapFold() = + // integer array + let funcInt acc x = if x % 2 = 0 then 10*x, acc + 1 else x, acc + let resultInt,resultIntAcc = Array.mapFold funcInt 100 [| 1..10 |] + if resultInt <> [| 1;20;3;40;5;60;7;80;9;100 |] then Assert.Fail() + Assert.AreEqual(105, resultIntAcc) + + // string array + let funcStr acc (x:string) = match x.Length with 0 -> "empty", acc | _ -> x.ToLower(), sprintf "%s%s" acc x + let resultStr,resultStrAcc = Array.mapFold funcStr "" [| "";"BB";"C";"" |] + if resultStr <> [| "empty";"bb";"c";"empty" |] then Assert.Fail() + Assert.AreEqual("BBC", resultStrAcc) + + // empty array + let resultEpt,resultEptAcc = Array.mapFold funcInt 100 [| |] + if resultEpt <> [| |] then Assert.Fail() + Assert.AreEqual(100, resultEptAcc) + + // null array + let nullArr = null:string[] + CheckThrowsArgumentNullException (fun () -> Array.mapFold funcStr "" nullArr |> ignore) + + () + + [] + member this.MapFoldBack() = + // integer array + let funcInt x acc = if acc < 105 then 10*x, acc + 2 else x, acc + let resultInt,resultIntAcc = Array.mapFoldBack funcInt [| 1..10 |] 100 + if resultInt <> [| 1;2;3;4;5;6;7;80;90;100 |] then Assert.Fail() + Assert.AreEqual(106, resultIntAcc) + + // string array + let funcStr (x:string) acc = match x.Length with 0 -> "empty", acc | _ -> x.ToLower(), sprintf "%s%s" acc x + let resultStr,resultStrAcc = Array.mapFoldBack funcStr [| "";"BB";"C";"" |] "" + if resultStr <> [| "empty";"bb";"c";"empty" |] then Assert.Fail() + Assert.AreEqual("CBB", resultStrAcc) + + // empty array + let resultEpt,resultEptAcc = Array.mapFoldBack funcInt [| |] 100 + if resultEpt <> [| |] then Assert.Fail() + Assert.AreEqual(100, resultEptAcc) + + // null array + let nullArr = null:string[] + CheckThrowsArgumentNullException (fun () -> Array.mapFoldBack funcStr nullArr "" |> ignore) + + () + [] member this.Mapi() = // integer array @@ -413,6 +525,63 @@ type ArrayModule2() = () + [] + member this.Skip() = + // integer array + let resultInt = Array.skip 2 [|1..10|] + if resultInt <> [|3..10|] then Assert.Fail() + + let resultInt2 = Array.skip 0 [|1..10|] + if resultInt2 <> [|1..10|] then Assert.Fail() + + let resultInt3 = Array.skip -5 [|1..10|] + if resultInt3 <> [|1..10|] then Assert.Fail() + + // string List + let resultStr = Array.skip 2 [|"str1";"str2";"str3";"str4"|] + if resultStr <> [|"str3";"str4"|] then Assert.Fail() + + // empty List + let resultEpt = Array.skip 0 [||] + if resultEpt <> [||] then Assert.Fail() + + // exceptions + CheckThrowsArgumentNullException (fun () -> Array.skip 0 (null:string[]) |> ignore) + CheckThrowsArgumentNullException (fun () -> Array.skip -3 (null:string[]) |> ignore) + CheckThrowsArgumentException (fun () -> Array.skip 1 [||] |> ignore) + CheckThrowsArgumentException (fun () -> Array.skip 4 [|1; 2; 3|] |> ignore) + + [] + member this.SkipWhile() = + // integer array + let funcInt x = (x < 4) + let intArr = [|1..10|] + let resultInt = Array.skipWhile funcInt intArr + if resultInt <> [|4..10|] then Assert.Fail() + + // string array + let funcStr (s:string) = s.Length < 8 + let strArr = [| "Lists"; "are"; "commonly" ; "list" |] + let resultStr = Array.skipWhile funcStr strArr + if resultStr <> [| "commonly" ; "list" |] then Assert.Fail() + + // empty array + let resultEmpt = Array.skipWhile (fun _ -> failwith "unexpected error") [| |] + if resultEmpt <> [| |] then Assert.Fail() + + // null array + CheckThrowsArgumentNullException (fun () -> Array.skipWhile (fun _ -> failwith "unexpected error") null |> ignore) + + // skip all + let resultAll = Array.skipWhile (fun _ -> true) intArr + if resultAll <> [| |] then Assert.Fail() + + // skip none + let resultNone = Array.skipWhile (fun _ -> false) intArr + if resultNone <> intArr then Assert.Fail() + + () + [] member this.Set() = // integer array @@ -500,8 +669,83 @@ type ArrayModule2() = if len2Arr <> [|3;8|] then Assert.Fail() Assert.AreEqual([|3;8|],len2Arr) - () + () + + [] + member this.SortDescending() = + // integer array + let intArr = [|3;5;7;2;4;8|] + let resultInt = Array.sortDescending intArr + Assert.AreEqual([|8;7;5;4;3;2|], resultInt) + + // string Array + let strArr = [|"Z";"a";"d"; ""; "Y"; null; "c";"b";"X"|] + let resultStr = Array.sortDescending strArr + Assert.AreEqual([|"d"; "c"; "b"; "a"; "Z"; "Y"; "X"; ""; null|], resultStr) + + // empty array + let emptyArr:int[] = [| |] + let resultEmpty = Array.sortDescending emptyArr + if resultEmpty <> [||] then Assert.Fail() + + // tuple array + let tupArr = [|(2,"a");(1,"d");(1,"b");(1,"a");(2,"x");(2,"b");(1,"x")|] + let resultTup = Array.sortDescending tupArr + Assert.AreEqual([|(2,"x");(2,"b");(2,"a");(1,"x");(1,"d");(1,"b");(1,"a")|], resultTup) + + // date array + let dateArr = [|DateTime(2014,12,31);DateTime(2014,1,1);DateTime(2015,1,1);DateTime(2013,12,31);DateTime(2014,1,1)|] + let resultDate = Array.sortDescending dateArr + Assert.AreEqual([|DateTime(2014,12,31);DateTime(2014,1,1);DateTime(2015,1,1);DateTime(2013,12,31);DateTime(2014,1,1)|], dateArr) + Assert.AreEqual([|DateTime(2015,1,1);DateTime(2014,12,31);DateTime(2014,1,1);DateTime(2014,1,1);DateTime(2013,12,31)|], resultDate) + + // float array + let minFloat,maxFloat,epsilon = System.Double.MinValue,System.Double.MaxValue,System.Double.Epsilon + let floatArr = [| 0.0; 0.5; 2.0; 1.5; 1.0; minFloat; maxFloat; epsilon; -epsilon |] + let resultFloat = Array.sortDescending floatArr + Assert.AreEqual([| maxFloat; 2.0; 1.5; 1.0; 0.5; epsilon; 0.0; -epsilon; minFloat; |], resultFloat) + + () + + [] + member this.SortByDescending() = + // integer array + let intArr = [|3;5;7;2;4;8|] + let resultInt = Array.sortByDescending int intArr + Assert.AreEqual([|3;5;7;2;4;8|], intArr) + Assert.AreEqual([|8;7;5;4;3;2|], resultInt) + + // string array + let strArr = [|".."; ""; "..."; "."; "...."|] + let resultStr = Array.sortByDescending (fun (x:string) -> x.Length) strArr + Assert.AreEqual([|".."; ""; "..."; "."; "...."|], strArr) + Assert.AreEqual([|"....";"...";"..";"."; ""|], resultStr) + + // empty array + let emptyArr:int[] = [| |] + let resultEmpty = Array.sortByDescending int emptyArr + if resultEmpty <> [||] then Assert.Fail() + + // tuple array + let tupArr = [|(2,"a");(1,"d");(1,"b");(2,"x")|] + let sndTup = Array.sortByDescending snd tupArr + Assert.AreEqual( [|(2,"a");(1,"d");(1,"b");(2,"x")|] , tupArr) + Assert.AreEqual( [|(2,"x");(1,"d");(1,"b");(2,"a")|] , sndTup) + + // date array + let dateArr = [|DateTime(2013,12,31);DateTime(2014,2,1);DateTime(2015,1,1);DateTime(2014,3,1)|] + let resultDate = Array.sortByDescending (fun (d:DateTime) -> d.Month) dateArr + Assert.AreEqual([|DateTime(2013,12,31);DateTime(2014,2,1);DateTime(2015,1,1);DateTime(2014,3,1)|], dateArr) + Assert.AreEqual([|DateTime(2013,12,31);DateTime(2014,3,1);DateTime(2014,2,1);DateTime(2015,1,1)|], resultDate) + // float array + let minFloat,maxFloat,epsilon = System.Double.MinValue,System.Double.MaxValue,System.Double.Epsilon + let floatArr = [| 0.0; 0.5; 2.0; 1.5; 1.0; minFloat; maxFloat; epsilon; -epsilon |] + let resultFloat = Array.sortByDescending id floatArr + Assert.AreEqual([| maxFloat; 2.0; 1.5; 1.0; 0.5; epsilon; 0.0; -epsilon; minFloat; |], resultFloat) + + () + [] member this.Sub() = // integer array @@ -618,6 +862,25 @@ type ArrayModule2() = CheckThrowsArgumentNullException (fun () -> Array.sumBy float32 nullArr |> ignore) () + [] + member this.Tl() = + // integer array + let resultInt = Array.tail [|1..10|] + Assert.AreEqual([|2..10|], resultInt) + + // string array + let resultStr = Array.tail [| "a"; "b"; "c"; "d" |] + Assert.AreEqual([| "b"; "c" ; "d" |], resultStr) + + // 1-element array + let resultStr2 = Array.tail [| "a" |] + Assert.AreEqual([| |], resultStr2) + + CheckThrowsArgumentException(fun () -> Array.tail [||] |> ignore) + + CheckThrowsArgumentNullException(fun () -> Array.tail null |> ignore) + () + [] member this.To_List() = // integer array @@ -658,6 +921,29 @@ type ArrayModule2() = () + [] + member this.Truncate() = + // integer array + Assert.AreEqual([|1..3|], Array.truncate 3 [|1..5|]) + Assert.AreEqual([|1..5|], Array.truncate 10 [|1..5|]) + Assert.AreEqual([| |], Array.truncate 0 [|1..5|]) + + // string array + Assert.AreEqual([|"str1";"str2"|], Array.truncate 2 [|"str1";"str2";"str3"|]) + + // empty array + Assert.AreEqual([| |], Array.truncate 0 [| |]) + Assert.AreEqual([| |], Array.truncate 1 [| |]) + + // null array + CheckThrowsArgumentNullException(fun() -> Array.truncate 1 null |> ignore) + + // negative count + Assert.AreEqual([| |], Array.truncate -1 [|1..5|]) + Assert.AreEqual([| |], Array.truncate System.Int32.MinValue [|1..5|]) + + () + [] member this.TryFind() = // integer array @@ -678,7 +964,30 @@ type ArrayModule2() = () - + [] + member this.TryFindBack() = + // integer array + let funcInt x = x%5 = 0 + Assert.AreEqual(Some 20, [| 1..20 |] |> Array.tryFindBack funcInt) + Assert.AreEqual(Some 15, [| 1..19 |] |> Array.tryFindBack funcInt) + Assert.AreEqual(Some 5, [| 5..9 |] |> Array.tryFindBack funcInt) + + // string array + let resultStr = [|"Lists"; "are"; "commonly" ; "list" |] |> Array.tryFindBack (fun (x:string) -> x.Length > 4) + Assert.AreEqual(Some "commonly", resultStr) + + // empty array + Assert.AreEqual(None, [| |] |> Array.tryFindBack (fun _ -> failwith "error")) + + // not found + Assert.AreEqual(None, [| 1..20 |] |> Array.tryFindBack (fun _ -> false)) + + // null array + let nullArr = null:string[] + CheckThrowsArgumentNullException (fun () -> Array.tryFindBack (fun _ -> failwith "error") nullArr |> ignore) + + () + [] member this.TryFindIndex() = // integer array @@ -699,6 +1008,46 @@ type ArrayModule2() = () + [] + member this.TryFindIndexBack() = + // integer array + let funcInt x = x%5 = 0 + Assert.AreEqual(Some 19, [| 1..20 |] |> Array.tryFindIndexBack funcInt) + Assert.AreEqual(Some 14, [| 1..19 |] |> Array.tryFindIndexBack funcInt) + Assert.AreEqual(Some 0, [| 5..9 |] |> Array.tryFindIndexBack funcInt) + + // string array + let resultStr = [|"Lists"; "are"; "commonly" ; "list" |] |> Array.tryFindIndexBack (fun (x:string) -> x.Length > 4) + Assert.AreEqual(Some 2, resultStr) + + // empty array + Assert.AreEqual(None, [| |] |> Array.tryFindIndexBack (fun _ -> true)) + + // not found + Assert.AreEqual(None, [| 1..20 |] |> Array.tryFindIndexBack (fun _ -> false)) + + // null array + let nullArr = null:string[] + CheckThrowsArgumentNullException (fun () -> Array.tryFindIndexBack (fun (x:string) -> x.Length > 4) nullArr |> ignore) + + () + + [] + member this.Unfold() = + // integer Seq + let resultInt = Array.unfold (fun x -> if x < 20 then Some (x+1,x*2) else None) 1 + Assert.AreEqual([|2;3;5;9;17|], resultInt) + + // string Seq + let resultStr = Array.unfold (fun (x:string) -> if x.Contains("unfold") then Some("a","b") else None) "unfold" + Assert.AreEqual([|"a"|], resultStr) + + // empty seq + let resultEpt = Array.unfold (fun _ -> None) 1 + Assert.AreEqual([| |], resultEpt) + + () + [] member this.Unzip() = // integer array @@ -736,6 +1085,96 @@ type ArrayModule2() = () + [] + member this.Windowed() = + let testWindowed config = + try + config.InputArray + |> Array.windowed config.WindowSize + |> (fun actual -> Assert.IsTrue(config.ExpectedArray = actual)) + with + | _ when Option.isNone config.Exception -> Assert.Fail() + | e when e.GetType() = (Option.get config.Exception) -> () + | _ -> Assert.Fail() + + { + InputArray = [|1..10|] + WindowSize = 1 + ExpectedArray = [| for i in 1..10 do yield [| i |] |] + Exception = None + } |> testWindowed + { + InputArray = [|1..10|] + WindowSize = 5 + ExpectedArray = [| for i in 1..6 do yield [| i; i+1; i+2; i+3; i+4 |] |] + Exception = None + } |> testWindowed + { + InputArray = [|1..10|] + WindowSize = 10 + ExpectedArray = [| yield [| 1 .. 10 |] |] + Exception = None + } |> testWindowed + { + InputArray = [|1..10|] + WindowSize = 25 + ExpectedArray = [| |] + Exception = None + } |> testWindowed + { + InputArray = [|"str1";"str2";"str3";"str4"|] + WindowSize = 2 + ExpectedArray = [| [|"str1";"str2"|]; [|"str2";"str3"|]; [|"str3";"str4"|] |] + Exception = None + } |> testWindowed + { + InputArray = [| |] + WindowSize = 2 + ExpectedArray = [| |] + Exception = None + } |> testWindowed + { + InputArray = null + WindowSize = 2 + ExpectedArray = [| |] + Exception = Some typeof + } |> testWindowed + { + InputArray = [|1..10|] + WindowSize = 0 + ExpectedArray = [| |] + Exception = Some typeof + } |> testWindowed + + // expectedArrays indexed by arraySize,windowSize + let expectedArrays = Array2D.zeroCreate 6 6 + expectedArrays.[1,1] <- [| [|1|] |] + expectedArrays.[2,1] <- [| [|1|]; [|2|] |] + expectedArrays.[2,2] <- [| [|1; 2|] |] + expectedArrays.[3,1] <- [| [|1|]; [|2|]; [|3|] |] + expectedArrays.[3,2] <- [| [|1; 2|]; [|2; 3|] |] + expectedArrays.[3,3] <- [| [|1; 2; 3|] |] + expectedArrays.[4,1] <- [| [|1|]; [|2|]; [|3|]; [|4|] |] + expectedArrays.[4,2] <- [| [|1; 2|]; [|2; 3|]; [|3; 4|] |] + expectedArrays.[4,3] <- [| [|1; 2; 3|]; [|2; 3; 4|] |] + expectedArrays.[4,4] <- [| [|1; 2; 3; 4|] |] + expectedArrays.[5,1] <- [| [|1|]; [|2|]; [|3|]; [|4|]; [|5|] |] + expectedArrays.[5,2] <- [| [|1; 2|]; [|2; 3|]; [|3; 4|]; [|4; 5|] |] + expectedArrays.[5,3] <- [| [|1; 2; 3|]; [|2; 3; 4|]; [|3; 4; 5|] |] + expectedArrays.[5,4] <- [| [|1; 2; 3; 4|]; [|2; 3; 4; 5|] |] + expectedArrays.[5,5] <- [| [|1; 2; 3; 4; 5|] |] + + for arraySize = 0 to 5 do + for windowSize = -1 to 5 do + if windowSize <= 0 then + CheckThrowsArgumentException (fun () -> Array.windowed windowSize [|1..arraySize|] |> ignore) + elif arraySize < windowSize then + Assert.IsTrue([||] = Array.windowed windowSize [|1..arraySize|]) + else + Assert.IsTrue(expectedArrays.[arraySize, windowSize] = Array.windowed windowSize [|1..arraySize|]) + + () + [] member this.Zero_Create() = @@ -809,3 +1248,57 @@ type ArrayModule2() = CheckThrowsArgumentException(fun () -> Array.zip3 [|1..10|] [|1..10|] [|2..20|] |> ignore) () + + [] + member this.Item() = + // integer array + let resultInt = Array.item 3 [|1..8|] + Assert.AreEqual(4, resultInt) + + // string array + let resultStr = Array.item 2 [|"Arrays"; "are"; "commonly"; "array" |] + Assert.AreEqual("commonly", resultStr) + + // empty array + CheckThrowsIndexOutRangException(fun () -> Array.item 0 ([| |] : decimal[]) |> ignore) + + // null array + let nullArr = null:string[] + CheckThrowsNullRefException (fun () -> Array.item 0 nullArr |> ignore) + + // Negative index + for i = -1 downto -10 do + CheckThrowsIndexOutRangException (fun () -> Array.item i [|1..8|] |> ignore) + + // Out of range + for i = 11 to 20 do + CheckThrowsIndexOutRangException (fun () -> Array.item i [|1..8|] |> ignore) + + [] + member this.tryItem() = + // integer array + let intArr = [| 3;4;7;8;10 |] + let resultInt = Array.tryItem 3 intArr + Assert.AreEqual(Some(8), resultInt) + + // string array + let strArr = [| "Lists"; "are"; "commonly"; "list" |] + let resultStr = Array.tryItem 1 strArr + Assert.AreEqual(Some("are"), resultStr) + + // empty array + let emptyArr:int[] = [| |] + let resultEmpty = Array.tryItem 1 emptyArr + Assert.AreEqual(None, resultEmpty) + + // null array + let nullArr = null:string[] + CheckThrowsArgumentNullException (fun () -> Array.tryItem 0 nullArr |> ignore) + + // Negative index + let resultNegativeIndex = Array.tryItem -1 [| 3;1;6;2 |] + Assert.AreEqual(None, resultNegativeIndex) + + // Index greater than length + let resultIndexGreater = Array.tryItem 14 [| 3;1;6;2 |] + Assert.AreEqual(None, resultIndexGreater) diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs index 7d6ad8cc518..6722bf2c057 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule.fs @@ -46,7 +46,7 @@ type ListModule() = () [] - member this.Avarage() = + member this.Average() = // empty float32 List let emptyFloatList = List.empty CheckThrowsArgumentException(fun () -> List.average emptyFloatList |> ignore) @@ -77,7 +77,6 @@ type ListModule() = () - [] member this.AverageBy() = // empty double List @@ -109,8 +108,96 @@ type ListModule() = () + [] + member this.ChunkBySize() = + + // int list + Assert.IsTrue([ [1..4]; [5..8] ] = List.chunkBySize 4 [1..8]) + Assert.IsTrue([ [1..4]; [5..8]; [9..10] ] = List.chunkBySize 4 [1..10]) + Assert.IsTrue([ [1]; [2]; [3]; [4] ] = List.chunkBySize 1 [1..4]) + + // string list + Assert.IsTrue([ ["a"; "b"]; ["c";"d"]; ["e"] ] = List.chunkBySize 2 ["a";"b";"c";"d";"e"]) + + // empty list + Assert.IsTrue([] = List.chunkBySize 3 []) + + // invalidArg + CheckThrowsArgumentException (fun () -> List.chunkBySize 0 [1..10] |> ignore) + CheckThrowsArgumentException (fun () -> List.chunkBySize -1 [1..10] |> ignore) + + () + + [] + member this.SplitInto() = + + // int list + Assert.IsTrue([ [1..4]; [5..7]; [8..10] ] = List.splitInto 3 [1..10]) + Assert.IsTrue([ [1..4]; [5..8]; [9..11] ] = List.splitInto 3 [1..11]) + Assert.IsTrue([ [1..4]; [5..8]; [9..12] ] = List.splitInto 3 [1..12]) + + Assert.IsTrue([ [1..2]; [3]; [4]; [5] ] = List.splitInto 4 [1..5]) + Assert.IsTrue([ [1]; [2]; [3]; [4] ] = List.splitInto 20 [1..4]) + + // string list + Assert.IsTrue([ ["a"; "b"]; ["c";"d"]; ["e"] ] = List.splitInto 3 ["a";"b";"c";"d";"e"]) + + // empty list + Assert.IsTrue([] = List.splitInto 3 []) + + // invalidArg + CheckThrowsArgumentException (fun () -> List.splitInto 0 [1..10] |> ignore) + CheckThrowsArgumentException (fun () -> List.splitInto -1 [1..10] |> ignore) + + () + + [] + member this.distinct() = + // distinct should work on empty list + Assert.AreEqual([], List.distinct []) + + // distinct should filter out simple duplicates + Assert.AreEqual([1], List.distinct [1]) + Assert.AreEqual([1], List.distinct [1; 1]) + Assert.AreEqual([1; 2; 3], List.distinct [1; 2; 3; 1]) + Assert.AreEqual([[1;2]; [1;3]], List.distinct [[1;2]; [1;3]; [1;2]; [1;3]]) + Assert.AreEqual([[1;1]; [1;2]; [1;3]; [1;4]], List.distinct [[1;1]; [1;2]; [1;3]; [1;4]]) + Assert.AreEqual([[1;1]; [1;4]], List.distinct [[1;1]; [1;1]; [1;1]; [1;4]]) + + Assert.AreEqual([null], List.distinct [null]) + let list = new System.Collections.Generic.List() + Assert.AreEqual([null, list], List.distinct [null, list]) + + [] + member this.distinctBy() = + // distinctBy should work on empty list + Assert.AreEqual([], List.distinctBy (fun _ -> failwith "should not be executed") []) + + // distinctBy should filter out simple duplicates + Assert.AreEqual([1], List.distinctBy id [1]) + Assert.AreEqual([1], List.distinctBy id [1; 1]) + Assert.AreEqual([1; 2; 3], List.distinctBy id [1; 2; 3; 1]) + + // distinctBy should use the given projection to filter out simple duplicates + Assert.AreEqual([1], List.distinctBy (fun x -> x / x) [1; 2]) + Assert.AreEqual([1; 2], List.distinctBy (fun x -> if x < 3 then x else 1) [1; 2; 3; 4]) + Assert.AreEqual([[1;2]; [1;3]], List.distinctBy (fun x -> List.sum x) [[1;2]; [1;3]; [2;1]]) - + Assert.AreEqual([null], List.distinctBy id [null]) + let list = new System.Collections.Generic.List() + Assert.AreEqual([null, list], List.distinctBy id [null, list]) + + [] + member this.Take() = + Assert.AreEqual([], List.take 0 []) + Assert.AreEqual(([] : string list), List.take 0 ["str1";"str2";"str3";"str4"]) + Assert.AreEqual([1;2;4],List.take 3 [1;2;4;5;7]) + Assert.AreEqual(["str1";"str2"],List.take 2 ["str1";"str2";"str3";"str4"]) + + CheckThrowsInvalidOperationExn (fun () -> List.take 1 [] |> ignore) + CheckThrowsArgumentException (fun () -> List.take -1 [0;1] |> ignore) + CheckThrowsInvalidOperationExn (fun () -> List.take 5 ["str1";"str2";"str3";"str4"] |> ignore) + [] member this.Choose() = // int List @@ -136,8 +223,40 @@ type ListModule() = let emptyChosen = List.choose funcInt emptySrc Assert.AreEqual(emptySrc, emptyChosen) - () + + [] + member this.compareWith() = + // compareWith should work on empty lists + Assert.AreEqual(0,List.compareWith (fun _ -> failwith "should not be executed") [] []) + Assert.AreEqual(-1,List.compareWith (fun _ -> failwith "should not be executed") [] [1]) + Assert.AreEqual(1,List.compareWith (fun _ -> failwith "should not be executed") ["1"] []) + + // compareWith should work on longer lists + Assert.AreEqual(-1,List.compareWith compare ["1";"2"] ["1";"3"]) + Assert.AreEqual(1,List.compareWith compare [1;2;43] [1;2;1]) + Assert.AreEqual(1,List.compareWith compare [1;2;3;4] [1;2;3]) + Assert.AreEqual(0,List.compareWith compare [1;2;3;4] [1;2;3;4]) + Assert.AreEqual(-1,List.compareWith compare [1;2;3] [1;2;3;4]) + Assert.AreEqual(1,List.compareWith compare [1;2;3] [1;2;2;4]) + Assert.AreEqual(-1,List.compareWith compare [1;2;2] [1;2;3;4]) + + // compareWith should use the comparer + Assert.AreEqual(0,List.compareWith (fun x y -> 0) ["1";"2"] ["1";"3"]) + Assert.AreEqual(1,List.compareWith (fun x y -> 1) ["1";"2"] ["1";"3"]) + Assert.AreEqual(-1,List.compareWith (fun x y -> -1) ["1";"2"] ["1";"3"]) + + [] + member this.takeWhile() = + Assert.AreEqual([], List.takeWhile (fun x -> failwith "should not be used") []) + Assert.AreEqual([1;2;4;5],List.takeWhile (fun x -> x < 6) [1;2;4;5;6;7]) + Assert.AreEqual(["a"; "ab"; "abc"],List.takeWhile (fun (x:string) -> x.Length < 4) ["a"; "ab"; "abc"; "abcd"; "abcde"]) + Assert.AreEqual(["a"; "ab"; "abc"; "abcd"; "abcde"],List.takeWhile (fun _ -> true) ["a"; "ab"; "abc"; "abcd"; "abcde"]) + Assert.AreEqual(([] : string list), List.takeWhile (fun _ -> false) ["a"; "ab"; "abc"; "abcd"; "abcde"]) + Assert.AreEqual(([] : string list), List.takeWhile (fun _ -> false) ["a"]) + Assert.AreEqual(["a"],List.takeWhile (fun _ -> true) ["a"]) + Assert.AreEqual(["a"],List.takeWhile (fun x -> x <> "ab") ["a"; "ab"; "abc"; "abcd"; "abcde"]) + [] member this.Concat() = // integer List @@ -163,6 +282,70 @@ type ListModule() = Assert.AreEqual(0, result2.[0]) Assert.AreEqual(1, result2.[1]) () + + [] + member this.splitAt() = + Assert.IsTrue(([],[]) = List.splitAt 0 []) + + Assert.AreEqual([1..4], List.splitAt 4 [1..10] |> fst) + Assert.AreEqual([5..10], List.splitAt 4 [1..10] |> snd) + + Assert.AreEqual(([] : int list), List.splitAt 0 [1..2] |> fst) + Assert.AreEqual([1..2], List.splitAt 0 [1..2] |> snd) + + Assert.AreEqual([1], List.splitAt 1 [1..2] |> fst) + Assert.AreEqual([2], List.splitAt 1 [1..2] |> snd) + + Assert.AreEqual([1..2], List.splitAt 2 [1..2] |> fst) + Assert.AreEqual(([] : int list), List.splitAt 2 [1..2] |> snd) + + Assert.AreEqual(["a"], List.splitAt 1 ["a";"b";"c"] |> fst) + Assert.AreEqual(["b";"c"], List.splitAt 1 ["a";"b";"c"] |> snd) + + // split should fail if index exceeds bounds + CheckThrowsInvalidOperationExn (fun () -> List.splitAt 1 [] |> ignore) + CheckThrowsArgumentException (fun () -> List.splitAt -1 [0;1] |> ignore) + CheckThrowsInvalidOperationExn (fun () -> List.splitAt 5 ["str1";"str2";"str3";"str4"] |> ignore) + () + + [] + member this.countBy() = + // countBy should work on empty list + Assert.AreEqual(([] : (obj*int) list), List.countBy (fun _ -> failwith "should not be executed") []) + + // countBy should count by the given key function + Assert.AreEqual([5,1; 2,2; 3,2],List.countBy id [5;2;2;3;3]) + Assert.AreEqual([3,3; 2,2; 1,3],List.countBy (fun x -> if x < 3 then x else 3) [5;2;1;2;3;3;1;1]) + + [] + member this.Except() = + // integer list + let intList1 = [ yield! {1..100} + yield! {1..100} ] + let intList2 = [1..10] + let expectedIntList = [11..100] + + Assert.AreEqual(expectedIntList, List.except intList2 intList1) + + // string list + let strList1 = ["a"; "b"; "c"; "d"; "a"] + let strList2 = ["b"; "c"] + let expectedStrList = ["a"; "d"] + + Assert.AreEqual(expectedStrList, List.except strList2 strList1) + + // empty list + let emptyIntList : int list = [] + Assert.AreEqual([1..100], List.except emptyIntList intList1) + Assert.AreEqual(emptyIntList, List.except intList1 emptyIntList) + Assert.AreEqual(emptyIntList, List.except emptyIntList emptyIntList) + Assert.AreEqual(emptyIntList, List.except intList1 intList1) + + // null seq + let nullSeq : int [] = null + CheckThrowsArgumentNullException(fun () -> List.except nullSeq emptyIntList |> ignore) + () + [] member this.Exists() = // integer List @@ -228,6 +411,35 @@ type ListModule() = () + [] + member this.Where() = + // integer List + let intArr = [ 1..20 ] + let funcInt x = if (x%5 = 0) then true else false + let resultInt = List.where funcInt intArr + Assert.AreEqual([5;10;15;20], resultInt) + + // string List + let strArr = ["."; ".."; "..."; "...."] + let funcStr (x:string) = if (x.Length >2) then true else false + let resultStr = List.where funcStr strArr + Assert.AreEqual(["..."; "...."], resultStr) + + // empty List + let emptyArr:int list = [ ] + let resultEpt = List.where funcInt emptyArr + Assert.AreEqual(emptyArr, resultEpt) + + () + + [] + member this.``where should work like filter``() = + Assert.AreEqual(([] : int list), List.where (fun x -> x % 2 = 0) []) + Assert.AreEqual([0;2;4;6;8], List.where (fun x -> x % 2 = 0) [0..9]) + Assert.AreEqual(["a";"b";"c"], List.where (fun _ -> true) ["a";"b";"c"]) + + () + [] member this.Find() = // integer List @@ -244,10 +456,46 @@ type ListModule() = // empty List let emptyArr:int list = [ ] - CheckThrowsKeyNotFoundException (fun () -> List.find (fun x -> true) emptyArr |> ignore) + CheckThrowsKeyNotFoundException (fun () -> List.find (fun _ -> true) emptyArr |> ignore) + // not found + CheckThrowsKeyNotFoundException (fun () -> List.find (fun _ -> false) intArr |> ignore) + () + [] + member this.replicate() = + // replicate should create multiple copies of the given value + Assert.AreEqual([], List.replicate 0 null) + Assert.AreEqual(([] : int list), List.replicate 0 1) + Assert.AreEqual([null],List.replicate 1 null) + Assert.AreEqual(["1";"1"],List.replicate 2 "1") + + CheckThrowsArgumentException (fun () -> List.replicate -1 null |> ignore) + + [] + member this.FindBack() = + // integer List + let funcInt x = if (x%5 = 0) then true else false + Assert.AreEqual(20, List.findBack funcInt [ 1..20 ]) + Assert.AreEqual(15, List.findBack funcInt [ 1..19 ]) + Assert.AreEqual(5, List.findBack funcInt [ 5..9 ]) + + // string List + let strArr = ["."; ".."; "..."; "...."] + let funcStr (x:string) = x.Length > 2 + let resultStr = List.findBack funcStr strArr + Assert.AreEqual("....", resultStr) + + // empty List + CheckThrowsKeyNotFoundException (fun () -> List.findBack (fun _ -> true) [] |> ignore) + + // not found + CheckThrowsKeyNotFoundException (fun () -> List.findBack (fun _ -> false) [ 1..20 ] |> ignore) + + () + + [] member this.FindIndex() = // integer List @@ -258,16 +506,41 @@ type ListModule() = // string List let strArr = ["."; ".."; "..."; "...."] - let funcStr (x:string) = if (x.Length >2) then true else false + let funcStr (x:string) = if (x.Length > 2) then true else false let resultStr = List.findIndex funcStr strArr Assert.AreEqual(2, resultStr) // empty List let emptyArr:int list = [ ] - CheckThrowsKeyNotFoundException (fun () -> List.findIndex (fun x -> true) emptyArr |> ignore) + CheckThrowsKeyNotFoundException (fun () -> List.findIndex (fun _ -> true) emptyArr |> ignore) + // not found + CheckThrowsKeyNotFoundException (fun () -> List.findIndex (fun _ -> false) intArr |> ignore) + () + [] + member this.FindIndexBack() = + // integer List + let funcInt x = if (x%5 = 0) then true else false + Assert.AreEqual(19, List.findIndexBack funcInt [ 1..20 ]) + Assert.AreEqual(14, List.findIndexBack funcInt [ 1..19 ]) + Assert.AreEqual(0, List.findIndexBack funcInt [ 5..9 ]) + + // string List + let strArr = ["."; ".."; "..."; "...."] + let funcStr (x:string) = x.Length > 2 + let resultStr = List.findIndexBack funcStr strArr + Assert.AreEqual(3, resultStr) + + // empty List + CheckThrowsKeyNotFoundException (fun () -> List.findIndexBack (fun _ -> true) [] |> ignore) + + // not found + CheckThrowsKeyNotFoundException (fun () -> List.findIndexBack (fun _ -> false) [ 1..20 ] |> ignore) + + () + [] member this.TryPick() = // integer List @@ -445,6 +718,42 @@ type ListModule() = () + [] + member this.GroupBy() = + let funcInt x = x%5 + + let IntList = [ 0 .. 9 ] + + let group_byInt = List.groupBy funcInt IntList + + let expectedIntList = + [ for i in 0..4 -> i, [i; i+5] ] + + Assert.AreEqual(expectedIntList, group_byInt) + + // string list + let funcStr (x:string) = x.Length + let strList = ["l1ngth7"; "length 8"; "l2ngth7" ; "length 9"] + + let group_byStr = List.groupBy funcStr strList + let expectedStrList = + [ + 7, ["l1ngth7"; "l2ngth7"] + 8, ["length 8"] + 9, ["length 9"] + ] + + Assert.AreEqual(expectedStrList, group_byStr) + + // Empty list + let emptyList = [] + let group_byEmpty = List.groupBy funcInt emptyList + let expectedEmptyList = [] + + Assert.AreEqual(expectedEmptyList, emptyList) + + () + [] member this.Hd() = // integer List @@ -457,8 +766,59 @@ type ListModule() = CheckThrowsArgumentException(fun () -> List.head [] |> ignore) () + + [] + member this.``exactlyOne should return the element from singleton lists``() = + Assert.AreEqual(1, List.exactlyOne [1]) + Assert.AreEqual("2", List.exactlyOne ["2"]) + () + + [] + member this.``exactlyOne should fail on empty list``() = + CheckThrowsArgumentException(fun () -> List.exactlyOne [] |> ignore) + + [] + member this.``exactlyOne should fail on lists with more than one element``() = + CheckThrowsArgumentException(fun () -> List.exactlyOne ["1"; "2"] |> ignore) + + [] + member this.TryHead() = + // integer List + let resultInt = List.tryHead [2..2..20] + Assert.AreEqual(2, resultInt.Value) - + // string List + let resultStr = List.tryHead ["a";"b";"c";"d"] + Assert.AreEqual("a", resultStr.Value) + + let resultNone = List.tryHead [] + Assert.AreEqual(None, resultNone) + + [] + member this.TryLast() = + // integer List + let intResult = List.tryLast [1..9] + Assert.AreEqual(9, intResult.Value) + + // string List + let strResult = List.tryLast (["first"; "second"; "third"]) + Assert.AreEqual("third", strResult.Value) + + // Empty List + let emptyResult = List.tryLast List.empty + Assert.IsTrue(emptyResult.IsNone) + () + + [] + member this.last() = + // last should fail on empty list + CheckThrowsArgumentException(fun () -> List.last [] |> ignore) + + // last should return the last element from lists + Assert.AreEqual(1, List.last [1]) + Assert.AreEqual("2", List.last ["1"; "3"; "2"]) + Assert.AreEqual(["4"], List.last [["1"; "3"]; []; ["4"]]) + [] member this.Init() = // integer List @@ -606,4 +966,37 @@ type ListModule() = List.iteri2 funInt emptyArr emptyArr Assert.AreEqual(0, !resultEpt) - () \ No newline at end of file + () + + [] + member this.Contains() = + // integer List + let intList = [ 2;4;6;8 ] + let resultInt = List.contains 4 intList + Assert.IsTrue(resultInt) + + // string List + let strList = ["."; ".."; "..."; "...."] + let resultStr = List.contains "....." strList + Assert.IsFalse(resultStr) + + // empty List + let emptyList:int list = [ ] + let resultEpt = List.contains 4 emptyList + Assert.IsFalse(resultEpt) + + [] + member this.Singleton() = + Assert.AreEqual([null],List.singleton null) + Assert.AreEqual(["1"],List.singleton "1") + Assert.AreEqual([[]],List.singleton []) + Assert.AreEqual([[||]],List.singleton [||]) + () + + [] + member this.``pairwise should return pairs of the input list``() = + Assert.AreEqual(([] : (obj*obj) list), List.pairwise []) + Assert.AreEqual(([] : (int*int) list), List.pairwise [1]) + Assert.AreEqual([1,2],List.pairwise [1;2]) + Assert.AreEqual([1,2; 2,3],List.pairwise [1;2;3]) + Assert.AreEqual(["H","E"; "E","L"; "L","L"; "L","O"],List.pairwise ["H";"E";"L";"L";"O"]) diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs index a1d6d0da882..33a24f9059a 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListModule2.fs @@ -17,6 +17,14 @@ Make sure each method works on: * Empty List (0 elements) *) +type ListWindowedTestInput<'t> = + { + InputList : 't list + WindowSize : int + ExpectedList : 't list list + Exception : Type option + } + [] type ListModule02() = [] @@ -175,6 +183,76 @@ type ListModule02() = () + [] + member this.Indexed() = + // integer List + Assert.AreEqual([(0,10);(1,12);(2,14);(3,16);(4,18);(5,20)], List.indexed [10..2..20]) + Assert.AreEqual([(0,10)], List.indexed [10]) + + // string List + let resultStr = List.indexed ["a";"b";"c";"d"] + Assert.AreEqual([(0,"a");(1,"b");(2,"c");(3,"d")], resultStr) + + // empty List + let emptyList:string list = [] + let resultEpt = List.indexed emptyList + Assert.AreEqual(List.empty, resultEpt) + + () + + [] + member this.MapFold() = + // integer List + let funcInt acc x = if x % 2 = 0 then 10*x, acc + 1 else x, acc + let resultInt,resultIntAcc = List.mapFold funcInt 100 [ 1..10 ] + Assert.AreEqual([1;20;3;40;5;60;7;80;9;100], resultInt) + Assert.AreEqual(105, resultIntAcc) + + // integer List single item + let funcInt acc x = if x % 2 = 0 then 10*x, acc + 1 else x, acc + let resultInt,resultIntAcc = List.mapFold funcInt 100 [ 2 ] + Assert.AreEqual([20], resultInt) + Assert.AreEqual(101, resultIntAcc) + + // string List + let funcStr acc (x:string) = match x.Length with 0 -> "empty", acc | _ -> x.ToLower(), sprintf "%s%s" acc x + let resultStr,resultStrAcc = List.mapFold funcStr "" ["";"BB";"C";""] + Assert.AreEqual(["empty";"bb";"c";"empty"], resultStr) + Assert.AreEqual("BBC", resultStrAcc) + + // empty List + let resultEpt,resultEptAcc = List.mapFold funcInt 100 [] + Assert.AreEqual(([] : int list), resultEpt) + Assert.AreEqual(100, resultEptAcc) + + () + + [] + member this.MapFoldBack() = + // integer List + let funcInt x acc = if acc < 105 then 10*x, acc + 2 else x, acc + let resultInt,resultIntAcc = List.mapFoldBack funcInt [ 1..10 ] 100 + Assert.AreEqual([1;2;3;4;5;6;7;80;90;100], resultInt) + Assert.AreEqual(106, resultIntAcc) + + // integer List single item + let resultInt,resultIntAcc = List.mapFoldBack funcInt [1] 100 + Assert.AreEqual([10], resultInt) + Assert.AreEqual(102, resultIntAcc) + + // string List + let funcStr (x:string) acc = match x.Length with 0 -> "empty", acc | _ -> x.ToLower(), sprintf "%s%s" acc x + let resultStr,resultStrAcc = List.mapFoldBack funcStr ["";"BB";"C";""] "" + Assert.AreEqual(["empty";"bb";"c";"empty"], resultStr) + Assert.AreEqual("CBB", resultStrAcc) + + // empty List + let resultEpt,resultEptAcc = List.mapFoldBack funcInt [] 100 + Assert.AreEqual(([] : int list), resultEpt) + Assert.AreEqual(100, resultEptAcc) + + () + [] member this.Max() = // integer List @@ -239,22 +317,28 @@ type ListModule02() = CheckThrowsArgumentException ( fun() -> List.minBy funcEpt List.empty) () - + [] - member this.Nth() = - // integer List - let resultInt = List.nth [3;7;9;4;8;1;1;2] 3 + member this.Item() = + // integer List + let resultInt = List.item 3 [3;7;9;4;8;1;1;2] Assert.AreEqual(4, resultInt) - + // string List - let resultStr = List.nth ["a";"b";"c";"d"] 3 + let resultStr = List.item 3 ["a";"b";"c";"d"] Assert.AreEqual("d", resultStr) - - // empty List - CheckThrowsArgumentException ( fun() -> List.nth List.empty 1) - () - + // empty List + CheckThrowsArgumentException (fun() -> List.item 1 List.empty) + + // Negative index + for i = -1 downto -10 do + CheckThrowsArgumentException (fun () -> List.item i [3;7;9;4;8;1;1;2] |> ignore) + + // Out of range + for i = 8 to 16 do + CheckThrowsArgumentException (fun () -> List.item i [3;7;9;4;8;1;1;2] |> ignore) + [] member this.Of_Array() = @@ -404,6 +488,58 @@ type ListModule02() = () + [] + member this.Skip() = + // integer List + let resultInt = List.skip 2 [1..10] + Assert.AreEqual([3..10], resultInt) + + let resultInt2 = List.skip 0 [1..10] + Assert.AreEqual([1..10], resultInt2) + + let resultInt3 = List.skip -1 [1..10] + Assert.AreEqual([1..10], resultInt3) + + // string List + let resultStr = List.skip 2 ["str1";"str2";"str3";"str4"] + Assert.AreEqual(["str3";"str4"], resultStr) + + // empty List + let resultEpt = List.skip 0 [] + Assert.AreEqual([], resultEpt) + + // exceptions + CheckThrowsArgumentException(fun () -> List.skip 1 [] |> ignore) + CheckThrowsArgumentException(fun () -> List.skip 4 [1; 2; 3] |> ignore) + + [] + member this.SkipWhile() = + // integer list + let funcInt x = (x < 4) + let intList = [1..10] + let resultInt = List.skipWhile funcInt intList + if resultInt <> [4..10] then Assert.Fail() + + // string list + let funcStr (s:string) = s.Length < 8 + let strList = [ "Lists"; "are"; "commonly" ; "list" ] + let resultStr = List.skipWhile funcStr strList + if resultStr <> [ "commonly" ; "list" ] then Assert.Fail() + + // empty list + let resultEmpt = List.skipWhile (fun _ -> failwith "unexpected error") [] + if resultEmpt <> [] then Assert.Fail() + + // skip all + let resultAll = List.skipWhile (fun _ -> true) intList + if resultAll <> [] then Assert.Fail() + + // skip none + let resultNone = List.skipWhile (fun _ -> false) intList + if resultNone <> intList then Assert.Fail() + + () + [] member this.Sort() = // integer List @@ -420,6 +556,11 @@ type ListModule02() = let emptyArr : int list = [ ] let resultEpt = List.sort emptyArr Assert.AreEqual(List.empty, resultEpt) + + // tuple List + let tupArr = [(2,"a");(1,"d");(1,"b");(1,"a");(2,"x");(2,"b");(1,"x")] + let resultTup = List.sort tupArr + Assert.AreEqual([(1,"a");(1,"b");(1,"d");(1,"x");(2,"a");(2,"b");(2,"x")], resultTup) () @@ -439,8 +580,94 @@ type ListModule02() = let emptyArr:int list = [ ] let resultEpt = List.sortBy int emptyArr Assert.AreEqual(List.empty, resultEpt) + + // tuple List + let tupArr = [(2,"a");(1,"d");(1,"b");(1,"a");(2,"x");(2,"b");(1,"x")] + let resultTup = List.sortBy snd tupArr + Assert.AreEqual([(2,"a");(1,"a");(1,"b");(2,"b");(1,"d");(2,"x");(1,"x")], resultTup) + + () + [] + member this.SortDescending() = + // integer List + let minInt,maxInt = System.Int32.MinValue,System.Int32.MaxValue + let intArr = [3;5;7;2;4;8;0;-1;1;minInt;maxInt] + let resultInt = List.sortDescending intArr + Assert.AreEqual(resultInt , [maxInt;8;7;5;4;3;2;1;0;-1;minInt]) + + // string List + let strArr = ["Z";"a";"d";"Y";"c";"b";"X"] + let resultStr = List.sortDescending strArr + Assert.AreEqual(["d"; "c"; "b"; "a"; "Z"; "Y"; "X"], resultStr) + + // empty List + let emptyArr : int list = [ ] + let resultEpt = List.sortDescending emptyArr + Assert.AreEqual(List.empty, resultEpt) + + // tuple List + let tupArr = [(2,"a");(1,"d");(1,"b");(1,"a");(2,"x");(2,"b");(1,"x")] + let resultTup = List.sortDescending tupArr + Assert.AreEqual([(2,"x");(2,"b");(2,"a");(1,"x");(1,"d");(1,"b");(1,"a")], resultTup) + + // float Seq + let minFloat,maxFloat,epsilon = System.Double.MinValue,System.Double.MaxValue,System.Double.Epsilon + let floatArr = [0.0; 0.5; 2.0; 1.5; 1.0; minFloat;maxFloat;epsilon;-epsilon] + let resultFloat = List.sortDescending floatArr + let expectedFloat = [maxFloat; 2.0; 1.5; 1.0; 0.5; epsilon; 0.0; -epsilon; minFloat; ] + Assert.AreEqual(expectedFloat, resultFloat) + + () + + [] + member this.SortByDescending() = + // integer List + let intArr = [3;5;7;2;4;8] + let resultInt = List.sortByDescending int intArr + Assert.AreEqual([8;7;5;4;3;2], resultInt) + + // string List + let strArr = [".."; "..."; "."; "...."] + let resultStr = List.sortByDescending (fun (x:string) -> x.Length) strArr + Assert.AreEqual(["...."; "..."; ".."; "."], resultStr) + + // empty List + let emptyArr:int list = [ ] + let resultEpt = List.sortByDescending int emptyArr + Assert.AreEqual(List.empty, resultEpt) + + // tuple List + let tupArr = [(2,"a");(1,"d");(1,"b");(1,"a");(2,"x");(2,"b");(1,"x")] + let resultTup = List.sortByDescending snd tupArr + Assert.AreEqual( [(2,"x");(1,"x");(1,"d");(1,"b");(2,"b");(2,"a");(1,"a")] , resultTup) + + // float Seq + let minFloat,maxFloat,epsilon = System.Double.MinValue,System.Double.MaxValue,System.Double.Epsilon + let floatArr = [0.0; 0.5; 2.0; 1.5; 1.0; minFloat;maxFloat;epsilon;-epsilon] + let resultFloat = List.sortByDescending id floatArr + let expectedFloat = [maxFloat; 2.0; 1.5; 1.0; 0.5; epsilon; 0.0; -epsilon; minFloat; ] + Assert.AreEqual(expectedFloat, resultFloat) + () + + [] + member this.SortWith() = + + // integer list + let intComparer a b = compare (a%3) (b%3) + let resultInt = List.sortWith intComparer [0..10] + Assert.AreEqual([0;3;6;9;1;4;7;10;2;5;8], resultInt) + + // string list + let resultStr = List.sortWith compare ["str1";"str3";"str2";"str4"] + Assert.AreEqual(["str1";"str2";"str3";"str4"], resultStr) + + // empty list + let resultEpt = List.sortWith intComparer [] + Assert.AreEqual(([] : int list), resultEpt) + + () [] member this.Sum() = @@ -573,6 +800,26 @@ type ListModule02() = () + [] + member this.Truncate() = + // integer list + Assert.AreEqual([1..3], List.truncate 3 [1..5]) + Assert.AreEqual([1..5], List.truncate 10 [1..5]) + Assert.AreEqual(([] : int list), List.truncate 0 [1..5]) + + // string list + Assert.AreEqual(["str1";"str2"], List.truncate 2 ["str1";"str2";"str3"]) + + // empty list + Assert.AreEqual(([] : int list), List.truncate 0 ([] : int list)) + Assert.AreEqual(([] : int list), List.truncate 1 ([] : int list)) + + // negative count + Assert.AreEqual(([] : int list), List.truncate -1 [1..5]) + Assert.AreEqual(([] : int list), List.truncate System.Int32.MinValue [1..5]) + + () + [] member this.TryFind() = // integer List @@ -593,6 +840,29 @@ type ListModule02() = () + [] + member this.TryFindBack() = + // integer List + Assert.AreEqual(Some 20, [1..20] |> List.tryFindBack (fun x -> x%5 = 0)) + Assert.AreEqual(Some 15, [1..19] |> List.tryFindBack (fun x -> x%5 = 0)) + Assert.AreEqual(Some 5, [5..9] |> List.tryFindBack (fun x -> x%5 = 0)) + + // string List + let resultStr = ["a";"b";"cc";"dd"] |> List.tryFindBack (fun (x:string) -> x.Length > 1) + Assert.AreEqual(Some "dd", resultStr) + + // empty List + Assert.AreEqual(None, [] |> List.tryFindBack (fun _ -> true)) + + // not found + Assert.AreEqual(None, [1..20] |> List.tryFindBack (fun _ -> false)) + + // Head satisfy + let resultHead = [7 .. -1 .. 1] |> List.tryFindBack (fun x -> x % 7 = 0) + Assert.AreEqual(Some 7, resultHead) + + () + [] member this.TryFindIndex() = // integer List @@ -608,6 +878,42 @@ type ListModule02() = Assert.AreEqual(None, resultEpt) () + [] + member this.TryFindIndexBack() = + // integer List + Assert.AreEqual(Some 19, [1..20] |> List.tryFindIndexBack (fun x -> x%5 = 0)) + Assert.AreEqual(Some 14, [1..19] |> List.tryFindIndexBack (fun x -> x%5 = 0)) + Assert.AreEqual(Some 0, [5..9] |> List.tryFindIndexBack (fun x -> x%5 = 0)) + + // string List + let resultStr = ["a";"b";"cc";"dd"] |> List.tryFindIndexBack (fun (x:string) -> x.Length > 1) + Assert.AreEqual(Some 3, resultStr) + + // empty List + Assert.AreEqual(None, [] |> List.tryFindIndexBack (fun _ -> true)) + + // not found + Assert.AreEqual(None, [1..20] |> List.tryFindIndexBack (fun _ -> false)) + + () + + [] + member this.Unfold() = + // integer Seq + let resultInt = List.unfold (fun x -> if x < 20 then Some (x+1,x*2) else None) 1 + Assert.AreEqual([2;3;5;9;17], resultInt) + + // string Seq + let resultStr = List.unfold (fun (x:string) -> if x.Contains("unfold") then Some("a","b") else None) "unfold" + Assert.AreEqual(["a"], resultStr) + + // empty seq + //let resultEpt = List.unfold (fun _ -> Option.None) 1 + let resultEpt = List.unfold (fun _ -> None) 1 + Assert.AreEqual([], resultEpt) + + () + [] member this.Unzip() = // integer List @@ -645,6 +951,90 @@ type ListModule02() = () + [] + member this.Windowed() = + let testWindowed config = + try + config.InputList + |> List.windowed config.WindowSize + |> (fun actual -> Assert.AreEqual(config.ExpectedList,actual)) + with + | _ when Option.isNone config.Exception -> Assert.Fail() + | e when e.GetType() = (Option.get config.Exception) -> () + | _ -> Assert.Fail() + + { + InputList = [1..10] + WindowSize = 1 + ExpectedList = [ for i in 1..10 do yield [i] ] + Exception = None + } |> testWindowed + { + InputList = [1..10] + WindowSize = 5 + ExpectedList = [ for i in 1..6 do yield [i; i+1; i+2; i+3; i+4] ] + Exception = None + } |> testWindowed + { + InputList = [1..10] + WindowSize = 10 + ExpectedList = [ yield [1..10] ] + Exception = None + } |> testWindowed + { + InputList = [1..10] + WindowSize = 25 + ExpectedList = ([] : int list list) + Exception = None + } |> testWindowed + { + InputList = ["str1";"str2";"str3";"str4"] + WindowSize = 2 + ExpectedList = [ ["str1";"str2"]; ["str2";"str3"]; ["str3";"str4"] ] + Exception = None + } |> testWindowed + { + InputList = ([] : int list) + WindowSize = 2 + ExpectedList = ([] : int list list) + Exception = None + } |> testWindowed + { + InputList = [1..10] + WindowSize = 0 + ExpectedList = ([] : int list list) + Exception = Some typeof + } |> testWindowed + + // expectedLists indexed by arraySize,windowSize + let expectedLists = Array2D.zeroCreate 6 6 + expectedLists.[1,1] <- [ [1] ] + expectedLists.[2,1] <- [ [1]; [2] ] + expectedLists.[2,2] <- [ [1; 2] ] + expectedLists.[3,1] <- [ [1]; [2]; [3] ] + expectedLists.[3,2] <- [ [1; 2]; [2; 3] ] + expectedLists.[3,3] <- [ [1; 2; 3] ] + expectedLists.[4,1] <- [ [1]; [2]; [3]; [4] ] + expectedLists.[4,2] <- [ [1; 2]; [2; 3]; [3; 4] ] + expectedLists.[4,3] <- [ [1; 2; 3]; [2; 3; 4] ] + expectedLists.[4,4] <- [ [1; 2; 3; 4] ] + expectedLists.[5,1] <- [ [1]; [2]; [3]; [4]; [5] ] + expectedLists.[5,2] <- [ [1; 2]; [2; 3]; [3; 4]; [4; 5] ] + expectedLists.[5,3] <- [ [1; 2; 3]; [2; 3; 4]; [3; 4; 5] ] + expectedLists.[5,4] <- [ [1; 2; 3; 4]; [2; 3; 4; 5] ] + expectedLists.[5,5] <- [ [1; 2; 3; 4; 5] ] + + for arraySize = 0 to 5 do + for windowSize = -1 to 5 do + if windowSize <= 0 then + CheckThrowsArgumentException (fun () -> List.windowed windowSize [1..arraySize] |> ignore) + elif arraySize < windowSize then + Assert.AreEqual(([] : int list list), List.windowed windowSize [1..arraySize]) + else + Assert.AreEqual(expectedLists.[arraySize, windowSize], List.windowed windowSize [1..arraySize]) + + () + [] member this.Zip() = // integer List @@ -677,4 +1067,26 @@ type ListModule02() = let empTriple:(obj*obj*obj) list = [] Assert.AreEqual(empTriple, resultEpt) - () \ No newline at end of file + () + + [] + member this.tryItem() = + // integer List + let resultInt = List.tryItem 4 [3;7;9;4;8;1;1;2] + Assert.AreEqual(Some(8), resultInt) + + // string List + let resultStr = List.tryItem 2 ["a";"b";"c";"d"] + Assert.AreEqual(Some("c"), resultStr) + + // empty List + let resultEmpty = List.tryItem 0 List.empty + Assert.AreEqual(None, resultEmpty) + + // Negative index + let resultNegativeIndex = List.tryItem -1 [3;1;6;2] + Assert.AreEqual(None, resultNegativeIndex) + + // Index equals to length + let resultIndexGreater = List.tryItem 4 [3;1;6;2] + Assert.AreEqual(None, resultIndexGreater) diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs index 66b2cf9d25e..d47b4409668 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ListType.fs @@ -210,4 +210,55 @@ type ListType() = // empty List let emptyList = Microsoft.FSharp.Collections.List.Cons (2,[]) if emptyList <> [2] then Assert.Fail() - () \ No newline at end of file + () + + [] + member this.Slicing() = + let lst = [1;2;3;4;5;6] + + Assert.AreEqual(lst.[*], lst) + + CheckThrowsIndexOutRangException((fun _ -> lst.[-1 ..] |> ignore)) + Assert.AreEqual(lst.[0..], lst) + Assert.AreEqual(lst.[1..], [2;3;4;5;6]) + Assert.AreEqual(lst.[2..], [3;4;5;6]) + Assert.AreEqual(lst.[5..], [6]) + Assert.AreEqual(lst.[6..], ([] : int list)) + CheckThrowsIndexOutRangException((fun _ -> lst.[7..] |> ignore)) + + CheckThrowsIndexOutRangException((fun _ -> lst.[.. -1] |> ignore)) + Assert.AreEqual(lst.[..0], [1]) + Assert.AreEqual(lst.[..1], [1;2]) + Assert.AreEqual(lst.[..2], [1;2;3]) + Assert.AreEqual(lst.[..3], [1;2;3;4]) + Assert.AreEqual(lst.[..4], [1;2;3;4;5]) + Assert.AreEqual(lst.[..5], [1;2;3;4;5;6]) + CheckThrowsIndexOutRangException((fun _ -> lst.[..6] |> ignore)) + + Assert.AreEqual(lst.[1..-1], ([] : int list)) + Assert.AreEqual(lst.[1..0], ([] : int list)) + Assert.AreEqual(lst.[1..1], [2]) + Assert.AreEqual(lst.[1..2], [2;3]) + Assert.AreEqual(lst.[1..3], [2;3;4]) + Assert.AreEqual(lst.[1..4], [2;3;4;5]) + Assert.AreEqual(lst.[1..5], [2;3;4;5;6]) + CheckThrowsIndexOutRangException((fun _ -> lst.[1..6] |> ignore)) + + CheckThrowsIndexOutRangException((fun _ -> lst.[-1..1] |> ignore)) + Assert.AreEqual(lst.[0..1], [1;2]) + Assert.AreEqual(lst.[1..1], [2]) + Assert.AreEqual(lst.[2..1], ([] : int list)) + Assert.AreEqual(lst.[3..1], ([] : int list)) + Assert.AreEqual(lst.[4..1], ([] : int list)) + + Assert.AreEqual(lst.[-3..-4], ([] : int list)) + CheckThrowsIndexOutRangException((fun _ -> lst.[-4..-3] |> ignore)) + + let empty : obj list = List.empty + Assert.AreEqual(empty.[*], []) + Assert.AreEqual(empty.[5..3], []) + Assert.AreEqual(empty.[0..], []) + CheckThrowsIndexOutRangException((fun _ -> empty.[..0] |> ignore)) + CheckThrowsIndexOutRangException((fun _ -> empty.[0..0] |> ignore)) + CheckThrowsIndexOutRangException((fun _ -> empty.[0..1] |> ignore)) + CheckThrowsIndexOutRangException((fun _ -> empty.[3..5] |> ignore)) \ No newline at end of file diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ObsoleteListFunctions.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ObsoleteListFunctions.fs new file mode 100644 index 00000000000..877eb2af96e --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ObsoleteListFunctions.fs @@ -0,0 +1,25 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +#nowarn "44" // This construct is deprecated. please use List.item +namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Collections + +open System +open FSharp.Core.Unittests.LibraryTestFx +open NUnit.Framework + +[] +type ObsoleteListFunctions() = + [] + member this.Nth() = + // integer List + let resultInt = List.nth [3;7;9;4;8;1;1;2] 3 + Assert.AreEqual(4, resultInt) + + // string List + let resultStr = List.nth ["a";"b";"c";"d"] 3 + Assert.AreEqual("d", resultStr) + + // empty List + CheckThrowsArgumentException ( fun() -> List.nth List.empty 1) + + () \ No newline at end of file diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ObsoleteSeqFunctions.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ObsoleteSeqFunctions.fs new file mode 100644 index 00000000000..0667148599a --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/ObsoleteSeqFunctions.fs @@ -0,0 +1,40 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +#nowarn "44" // This construct is deprecated. please use Seq.item +namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Collections + +open System +open NUnit.Framework + +open FSharp.Core.Unittests.LibraryTestFx + +[] +type ObsoleteSeqFunctions() = + + [] + member this.Nth() = + + // Negative index + for i = -1 downto -10 do + CheckThrowsArgumentException (fun () -> Seq.nth i { 10 .. 20 } |> ignore) + + // Out of range + for i = 11 to 20 do + CheckThrowsArgumentException (fun () -> Seq.nth i { 10 .. 20 } |> ignore) + + // integer Seq + let resultInt = Seq.nth 3 { 10..20 } + Assert.AreEqual(13, resultInt) + + // string Seq + let resultStr = Seq.nth 3 (seq ["Lists"; "Are"; "nthString" ; "List" ]) + Assert.AreEqual("List",resultStr) + + // empty Seq + CheckThrowsArgumentException(fun () -> Seq.nth 0 (Seq.empty : seq) |> ignore) + + // null Seq + let nullSeq:seq<'a> = null + CheckThrowsArgumentNullException (fun () ->Seq.nth 3 nullSeq |> ignore) + + () \ No newline at end of file diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule.fs index 9074fff0a25..71105a8a3b1 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule.fs @@ -106,6 +106,16 @@ type SeqModule() = VerifySeqsEqual expectedResultNull appendNullSeq () + + [] + member this.replicate() = + // replicate should create multiple copies of the given value + Assert.IsTrue(Seq.isEmpty <| Seq.replicate 0 null) + Assert.IsTrue(Seq.isEmpty <| Seq.replicate 0 1) + Assert.AreEqual(null, Seq.head <| Seq.replicate 1 null) + Assert.AreEqual(["1";"1"],Seq.replicate 2 "1" |> Seq.toList) + + CheckThrowsArgumentException (fun () -> Seq.replicate -1 null |> ignore) [] @@ -292,7 +302,74 @@ type SeqModule() = CheckThrowsArgumentNullException (fun () -> Seq.choose funcInt nullSeq |> ignore) () - + + [] + member this.ChunkBySize() = + + let verify expected actual = + Seq.zip expected actual + |> Seq.iter ((<||) VerifySeqsEqual) + + // int Seq + verify [[1..4];[5..8]] <| Seq.chunkBySize 4 {1..8} + verify [[1..4];[5..8];[9..10]] <| Seq.chunkBySize 4 {1..10} + verify [[1]; [2]; [3]; [4]] <| Seq.chunkBySize 1 {1..4} + + Seq.chunkBySize 2 (Seq.initInfinite id) + |> Seq.take 3 + |> verify [[0;1];[2;3];[4;5]] + + Seq.chunkBySize 1 (Seq.initInfinite id) + |> Seq.take 5 + |> verify [[0];[1];[2];[3];[4]] + + // string Seq + verify [["a"; "b"];["c";"d"];["e"]] <| Seq.chunkBySize 2 ["a";"b";"c";"d";"e"] + + // empty Seq + verify Seq.empty <| Seq.chunkBySize 3 Seq.empty + + // null Seq + let nullSeq:seq<_> = null + CheckThrowsArgumentNullException (fun () -> Seq.chunkBySize 3 nullSeq |> ignore) + + // invalidArg + CheckThrowsArgumentException (fun () -> Seq.chunkBySize 0 {1..10} |> ignore) + CheckThrowsArgumentException (fun () -> Seq.chunkBySize -1 {1..10} |> ignore) + + () + + [] + member this.SplitInto() = + + let verify expected actual = + Seq.zip expected actual + |> Seq.iter ((<||) VerifySeqsEqual) + + // int Seq + Seq.splitInto 3 {1..10} |> verify (seq [ {1..4}; {5..7}; {8..10} ]) + Seq.splitInto 3 {1..11} |> verify (seq [ {1..4}; {5..8}; {9..11} ]) + Seq.splitInto 3 {1..12} |> verify (seq [ {1..4}; {5..8}; {9..12} ]) + + Seq.splitInto 4 {1..5} |> verify (seq [ [1..2]; [3]; [4]; [5] ]) + Seq.splitInto 20 {1..4} |> verify (seq [ [1]; [2]; [3]; [4] ]) + + // string Seq + Seq.splitInto 3 ["a";"b";"c";"d";"e"] |> verify ([ ["a"; "b"]; ["c";"d"]; ["e"] ]) + + // empty Seq + VerifySeqsEqual [] <| Seq.splitInto 3 [] + + // null Seq + let nullSeq:seq<_> = null + CheckThrowsArgumentNullException (fun () -> Seq.splitInto 3 nullSeq |> ignore) + + // invalidArg + CheckThrowsArgumentException (fun () -> Seq.splitInto 0 [1..10] |> ignore) + CheckThrowsArgumentException (fun () -> Seq.splitInto -1 [1..10] |> ignore) + + () + [] member this.Compare() = @@ -467,7 +544,46 @@ type SeqModule() = CheckThrowsArgumentNullException(fun () -> Seq.distinctBy funcInt nullSeq |> ignore) () - + + [] + member this.Except() = + // integer Seq + let intSeq1 = seq { yield! {1..100} + yield! {1..100} } + let intSeq2 = {1..10} + let expectedIntSeq = {11..100} + + VerifySeqsEqual expectedIntSeq <| Seq.except intSeq2 intSeq1 + + // string Seq + let strSeq1 = seq ["a"; "b"; "c"; "d"; "a"] + let strSeq2 = seq ["b"; "c"] + let expectedStrSeq = seq ["a"; "d"] + + VerifySeqsEqual expectedStrSeq <| Seq.except strSeq2 strSeq1 + + // double Seq + // Sequences with nan do not behave, due to the F# generic equality comparisons +// let floatSeq1 = seq [1.0; 1.0; System.Double.MaxValue; nan; nan] +// +// VerifySeqsEqual [1.0; System.Double.MaxValue; nan; nan] <| Seq.except [] floatSeq1 +// VerifySeqsEqual [1.0; System.Double.MaxValue] <| Seq.except [nan] floatSeq1 + + // empty Seq + let emptyIntSeq = Seq.empty + VerifySeqsEqual {1..100} <| Seq.except emptyIntSeq intSeq1 + VerifySeqsEqual emptyIntSeq <| Seq.except intSeq1 emptyIntSeq + VerifySeqsEqual emptyIntSeq <| Seq.except emptyIntSeq emptyIntSeq + VerifySeqsEqual emptyIntSeq <| Seq.except intSeq1 intSeq1 + + // null Seq + let nullSeq : seq = null + CheckThrowsArgumentNullException(fun () -> Seq.except nullSeq emptyIntSeq |> ignore) + CheckThrowsArgumentNullException(fun () -> Seq.except emptyIntSeq nullSeq |> ignore) + CheckThrowsArgumentNullException(fun () -> Seq.except nullSeq nullSeq |> ignore) + + () + [] member this.Exists() = @@ -599,6 +715,33 @@ type SeqModule() = CheckThrowsArgumentNullException (fun () -> Seq.find funcInt nullSeq |> ignore) () + [] + member this.FindBack() = + // integer Seq + let funcInt x = x % 5 = 0 + Assert.AreEqual(20, Seq.findBack funcInt <| seq { 1..20 }) + Assert.AreEqual(15, Seq.findBack funcInt <| seq { 1..19 }) + Assert.AreEqual(5, Seq.findBack funcInt <| seq { 5..9 }) + + // string Seq + let funcStr (s:string) = s.Contains("Expected") + let strSeq = seq [ "Not Expected"; "Expected Content"] + let findStr = Seq.findBack funcStr strSeq + Assert.AreEqual("Expected Content", findStr) + + // Empty Seq + let emptySeq = Seq.empty + CheckThrowsKeyNotFoundException(fun () -> Seq.findBack funcInt emptySeq |> ignore) + + // Not found + let emptySeq = Seq.empty + CheckThrowsKeyNotFoundException(fun () -> seq { 1..20 } |> Seq.findBack (fun _ -> false) |> ignore) + + // null Seq + let nullSeq:seq<'a> = null + CheckThrowsArgumentNullException (fun () -> Seq.findBack funcInt nullSeq |> ignore) + () + [] member this.FindIndex() = @@ -614,6 +757,52 @@ type SeqModule() = CheckThrowsArgumentNullException(fun() -> Seq.findIndex (fun i -> true) null |> ignore) () + [] + member this.Permute() = + let mapIndex i = (i + 1) % 4 + + // integer seq + let intSeq = seq { 1..4 } + let resultInt = Seq.permute mapIndex intSeq + VerifySeqsEqual (seq [4;1;2;3]) resultInt + + // string seq + let resultStr = Seq.permute mapIndex [|"Lists"; "are"; "commonly"; "list" |] + VerifySeqsEqual (seq ["list"; "Lists"; "are"; "commonly" ]) resultStr + + // empty seq + let resultEpt = Seq.permute mapIndex [||] + VerifySeqsEqual Seq.empty resultEpt + + // null seq + let nullSeq = null:string[] + CheckThrowsArgumentNullException (fun () -> Seq.permute mapIndex nullSeq |> ignore) + + // argument exceptions + CheckThrowsArgumentException (fun () -> Seq.permute (fun _ -> 10) [0..9] |> Seq.iter ignore) + CheckThrowsArgumentException (fun () -> Seq.permute (fun _ -> 0) [0..9] |> Seq.iter ignore) + () + + [] + member this.FindIndexBack() = + // integer Seq + let digits = seq { 1..100 } + let idx = digits |> Seq.findIndexBack (fun i -> i.ToString().Length = 1) + Assert.AreEqual(idx, 8) + + // string Seq + let funcStr (s:string) = s.Contains("Expected") + let strSeq = seq [ "Not Expected"; "Expected Content" ] + let findStr = Seq.findIndexBack funcStr strSeq + Assert.AreEqual(1, findStr) + + // empty Seq + CheckThrowsKeyNotFoundException(fun () -> Seq.findIndexBack (fun i -> true) Seq.empty |> ignore) + + // null Seq + CheckThrowsArgumentNullException(fun() -> Seq.findIndexBack (fun i -> true) null |> ignore) + () + [] member this.Pick() = @@ -657,7 +846,116 @@ type SeqModule() = CheckThrowsArgumentNullException (fun () -> Seq.fold funcInt 1 nullSeq |> ignore) () + + + + [] + member this.Fold2() = + Assert.AreEqual([(3,5); (2,3); (1,1)],Seq.fold2 (fun acc x y -> (x,y)::acc) [] (seq [ 1..3 ]) (seq [1..2..6])) + + // integer List + let funcInt x y z = x + y + z + let resultInt = Seq.fold2 funcInt 9 (seq [ 1..10 ]) (seq [1..2..20]) + Assert.AreEqual(164, resultInt) + + // string List + let funcStr x y z = x + y + z + let resultStr = Seq.fold2 funcStr "*" ["a"; "b"; "c" ; "d" ] ["A"; "B"; "C" ; "D" ] + Assert.AreEqual("*aAbBcCdD", resultStr) + + // empty List + let emptyArr:int list = [ ] + let resultEpt = Seq.fold2 funcInt 5 emptyArr emptyArr + Assert.AreEqual(5, resultEpt) + + Assert.AreEqual(0,Seq.fold2 funcInt 0 Seq.empty (seq [1])) + Assert.AreEqual(-1,Seq.fold2 funcInt -1 (seq [1]) Seq.empty) + + Assert.AreEqual(2,Seq.fold2 funcInt 0 (seq [1;2]) (seq [1])) + Assert.AreEqual(4,Seq.fold2 funcInt 0 (seq [1]) (seq [3;6])) + + // null Seq + let nullSeq:seq<'a> = null + + CheckThrowsArgumentNullException (fun () -> Seq.fold2 funcInt 0 nullSeq (seq [1]) |> ignore) + CheckThrowsArgumentNullException (fun () -> Seq.fold2 funcInt 0 (seq [1]) nullSeq |> ignore) + () + [] + member this.FoldBack() = + // int Seq + let funcInt x y = x-y + let IntSeq = seq { 1..4 } + let foldInt = Seq.foldBack funcInt IntSeq 6 + Assert.AreEqual((1-(2-(3-(4-6)))), foldInt) + + // string Seq + let funcStr (x:string) (y:string) = y.Remove(0,x.Length) + let strSeq = seq [ "A"; "B"; "C"; "D" ] + let foldStr = Seq.foldBack funcStr strSeq "ABCDE" + Assert.AreEqual("E", foldStr) + + // single element + let funcStr2 elem acc = sprintf "%s%s" elem acc + let strSeq2 = seq [ "A" ] + let foldStr2 = Seq.foldBack funcStr2 strSeq2 "X" + Assert.AreEqual("AX", foldStr2) + + // Empty Seq + let emptySeq = Seq.empty + let foldEmpty = Seq.foldBack funcInt emptySeq 1 + Assert.AreEqual(1, foldEmpty) + + // null Seq + let nullSeq:seq<'a> = null + CheckThrowsArgumentNullException (fun () -> Seq.foldBack funcInt nullSeq 1 |> ignore) + + // Validate that foldBack with the cons operator and the empty list returns a copy of the sequence + let cons x y = x :: y + let identityFoldr = Seq.foldBack cons IntSeq [] + Assert.AreEqual([1;2;3;4], identityFoldr) + + () + + [] + member this.foldBack2() = + // int Seq + let funcInt x y z = x + y + z + let intSeq = seq { 1..10 } + let resultInt = Seq.foldBack2 funcInt intSeq (seq { 1..2..20 }) 9 + Assert.AreEqual(164, resultInt) + + // string Seq + let funcStr = sprintf "%s%s%s" + let strSeq = seq [ "A"; "B"; "C"; "D" ] + let resultStr = Seq.foldBack2 funcStr strSeq (seq [ "a"; "b"; "c"; "d"]) "*" + Assert.AreEqual("AaBbCcDd*", resultStr) + + // single element + let strSeqSingle = seq [ "X" ] + Assert.AreEqual("XAZ", Seq.foldBack2 funcStr strSeqSingle strSeq "Z") + Assert.AreEqual("AXZ", Seq.foldBack2 funcStr strSeq strSeqSingle "Z") + Assert.AreEqual("XYZ", Seq.foldBack2 funcStr strSeqSingle (seq [ "Y" ]) "Z") + + // empty Seq + let emptySeq = Seq.empty + Assert.AreEqual(1, Seq.foldBack2 funcInt emptySeq emptySeq 1) + Assert.AreEqual(1, Seq.foldBack2 funcInt emptySeq intSeq 1) + Assert.AreEqual(1, Seq.foldBack2 funcInt intSeq emptySeq 1) + + // infinite Seq + let infiniteSeq = Seq.initInfinite (fun i -> 2 * i + 1) + Assert.AreEqual(164, Seq.foldBack2 funcInt intSeq infiniteSeq 9) + Assert.AreEqual(164, Seq.foldBack2 funcInt infiniteSeq intSeq 9) + + // null Seq + let nullSeq:seq<'a> = null + CheckThrowsArgumentNullException (fun () -> Seq.foldBack2 funcInt nullSeq intSeq 1 |> ignore) + CheckThrowsArgumentNullException (fun () -> Seq.foldBack2 funcInt intSeq nullSeq 1 |> ignore) + CheckThrowsArgumentNullException (fun () -> Seq.foldBack2 funcInt nullSeq nullSeq 1 |> ignore) + + () + [] member this.ForAll() = @@ -797,3 +1095,30 @@ type SeqModule() = let l = f 3 |> Seq.toList Assert.AreEqual([6;7;8], l) + [] + member this.Contains() = + + // Integer Seq + let intSeq = seq { 0..9 } + + let ifContainsInt = Seq.contains 5 intSeq + + Assert.IsTrue(ifContainsInt) + + // String Seq + let strSeq = seq ["key"; "blank key"] + + let ifContainsStr = Seq.contains "key" strSeq + + Assert.IsTrue(ifContainsStr) + + // Empty Seq + let emptySeq = Seq.empty + let ifContainsEmpty = Seq.contains 5 emptySeq + + Assert.IsFalse(ifContainsEmpty) + + // null Seq + let nullSeq:seq<'a> = null + + CheckThrowsArgumentNullException (fun () -> Seq.contains 5 nullSeq |> ignore) diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs index 444cfbd3dfc..31de923bcc3 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/SeqModule2.fs @@ -39,8 +39,46 @@ type SeqModule2() = let nullSeq:seq<'a> = null CheckThrowsArgumentNullException (fun () ->Seq.head nullSeq) () + + [] + member this.TryHead() = + // int Seq + let IntSeq = + seq { for i in 0 .. 9 -> i } + + let intResult = Seq.tryHead IntSeq + + // string Seq + let strResult = Seq.tryHead (seq ["first"; "second"; "third"]) + Assert.AreEqual("first", strResult.Value) + + // Empty Seq + let emptyResult = Seq.tryHead Seq.empty + Assert.AreEqual(None, emptyResult) + + // null Seq + let nullSeq:seq<'a> = null + CheckThrowsArgumentNullException (fun () ->Seq.head nullSeq) + () - + [] + member this.Tl() = + // integer seq + let resultInt = Seq.tail <| seq { 1..10 } + VerifySeqsEqual (seq { 2..10 }) resultInt + + // string seq + let resultStr = Seq.tail <| seq { yield "a"; yield "b"; yield "c"; yield "d" } + VerifySeqsEqual (seq { yield "b"; yield "c" ; yield "d" }) resultStr + + // 1-element seq + let resultStr2 = Seq.tail <| seq { yield "a" } + VerifySeqsEqual Seq.empty resultStr2 + + CheckThrowsArgumentNullException(fun () -> Seq.tail null |> ignore) + CheckThrowsArgumentException(fun () -> Seq.tail Seq.empty |> Seq.iter (fun _ -> failwith "Should not be reached")) + () + [] member this.Last() = @@ -62,6 +100,28 @@ type SeqModule2() = let nullSeq:seq<'a> = null CheckThrowsArgumentNullException (fun () ->Seq.last nullSeq) () + + [] + member this.TryLast() = + + let IntSeq = + seq { for i in 0 .. 9 -> i } + + let intResult = Seq.tryLast IntSeq + Assert.AreEqual(9, intResult.Value) + + // string Seq + let strResult = Seq.tryLast (seq ["first"; "second"; "third"]) + Assert.AreEqual("third", strResult.Value) + + // Empty Seq + let emptyResult = Seq.tryLast Seq.empty + Assert.IsTrue(emptyResult.IsNone) + + // null Seq + let nullSeq:seq<'a> = null + CheckThrowsArgumentNullException (fun () ->Seq.tryLast nullSeq |> ignore) + () [] member this.ExactlyOne() = @@ -246,6 +306,49 @@ type SeqModule2() = let nullseq:seq<'a> = null CheckThrowsArgumentNullException (fun () -> Seq.iteri funcint nullseq |> ignore) () + + [] + member this.Iteri2() = + + //seq int + let seqint = seq [ 1..3] + let cacheint = ref 0 + + let funcint x y z = cacheint := !cacheint + x + y + z + Seq.iteri2 funcint seqint seqint + Assert.AreEqual(15,!cacheint) + + //seq str + let seqStr = seq ["first";"second"] + let cachestr = ref 0 + let funcstr (x:int) (y:string) (z:string) = cachestr := !cachestr + x + y.Length + z.Length + Seq.iteri2 funcstr seqStr seqStr + + Assert.AreEqual(23,!cachestr) + + // empty seq + let emptyseq = Seq.empty + let resultEpt = ref 0 + Seq.iteri2 (fun x y z -> Assert.Fail()) emptyseq emptyseq + + // null seq + let nullseq:seq<'a> = null + CheckThrowsArgumentNullException (fun () -> Seq.iteri2 funcint nullseq nullseq |> ignore) + + // len1 <> len2 + let shorterSeq = seq { 1..3 } + let longerSeq = seq { 2..2..100 } + + let testSeqLengths seq1 seq2 = + let cache = ref 0 + let f x y z = cache := !cache + x + y + z + Seq.iteri2 f seq1 seq2 + !cache + + Assert.AreEqual(21, testSeqLengths shorterSeq longerSeq) + Assert.AreEqual(21, testSeqLengths longerSeq shorterSeq) + + () [] member this.Length() = @@ -325,8 +428,89 @@ type SeqModule2() = CheckThrowsArgumentNullException (fun () -> Seq.map2 funcInt nullSeq validSeq |> ignore) () - - + + [] + member this.Map3() = + // Integer seq + let funcInt a b c = (a + b) * c + let resultInt = Seq.map3 funcInt { 1..8 } { 2..9 } { 3..10 } + let expectedInt = seq [9; 20; 35; 54; 77; 104; 135; 170] + VerifySeqsEqual expectedInt resultInt + + // First seq is shorter + VerifySeqsEqual (seq [9; 20]) (Seq.map3 funcInt { 1..2 } { 2..9 } { 3..10 }) + // Second seq is shorter + VerifySeqsEqual (seq [9; 20; 35]) (Seq.map3 funcInt { 1..8 } { 2..4 } { 3..10 }) + // Third seq is shorter + VerifySeqsEqual (seq [9; 20; 35; 54]) (Seq.map3 funcInt { 1..8 } { 2..6 } { 3..6 }) + + // String seq + let funcStr a b c = a + b + c + let resultStr = Seq.map3 funcStr ["A";"B";"C";"D"] ["a";"b";"c";"d"] ["1";"2";"3";"4"] + let expectedStr = seq ["Aa1";"Bb2";"Cc3";"Dd4"] + VerifySeqsEqual expectedStr resultStr + + // Empty seq + let resultEmpty = Seq.map3 funcStr Seq.empty Seq.empty Seq.empty + VerifySeqsEqual Seq.empty resultEmpty + + // Null seq + let nullSeq = null : seq<_> + let nonNullSeq = seq [1] + CheckThrowsArgumentNullException (fun () -> Seq.map3 funcInt nullSeq nonNullSeq nullSeq |> ignore) + + () + + [] + member this.MapFold() = + // integer Seq + let funcInt acc x = if x % 2 = 0 then 10*x, acc + 1 else x, acc + let resultInt,resultIntAcc = Seq.mapFold funcInt 100 <| seq { 1..10 } + VerifySeqsEqual (seq [ 1;20;3;40;5;60;7;80;9;100 ]) resultInt + Assert.AreEqual(105, resultIntAcc) + + // string Seq + let funcStr acc (x:string) = match x.Length with 0 -> "empty", acc | _ -> x.ToLower(), sprintf "%s%s" acc x + let resultStr,resultStrAcc = Seq.mapFold funcStr "" <| seq [ "";"BB";"C";"" ] + VerifySeqsEqual (seq [ "empty";"bb";"c";"empty" ]) resultStr + Assert.AreEqual("BBC", resultStrAcc) + + // empty Seq + let resultEpt,resultEptAcc = Seq.mapFold funcInt 100 Seq.empty + VerifySeqsEqual Seq.empty resultEpt + Assert.AreEqual(100, resultEptAcc) + + // null Seq + let nullArr = null:seq + CheckThrowsArgumentNullException (fun () -> Seq.mapFold funcStr "" nullArr |> ignore) + + () + + [] + member this.MapFoldBack() = + // integer Seq + let funcInt x acc = if acc < 105 then 10*x, acc + 2 else x, acc + let resultInt,resultIntAcc = Seq.mapFoldBack funcInt (seq { 1..10 }) 100 + VerifySeqsEqual (seq [ 1;2;3;4;5;6;7;80;90;100 ]) resultInt + Assert.AreEqual(106, resultIntAcc) + + // string Seq + let funcStr (x:string) acc = match x.Length with 0 -> "empty", acc | _ -> x.ToLower(), sprintf "%s%s" acc x + let resultStr,resultStrAcc = Seq.mapFoldBack funcStr (seq [ "";"BB";"C";"" ]) "" + VerifySeqsEqual (seq [ "empty";"bb";"c";"empty" ]) resultStr + Assert.AreEqual("CBB", resultStrAcc) + + // empty Seq + let resultEpt,resultEptAcc = Seq.mapFoldBack funcInt Seq.empty 100 + VerifySeqsEqual Seq.empty resultEpt + Assert.AreEqual(100, resultEptAcc) + + // null Seq + let nullArr = null:seq + CheckThrowsArgumentNullException (fun () -> Seq.mapFoldBack funcStr nullArr "" |> ignore) + + () + member private this.MapWithSideEffectsTester (map : (int -> int) -> seq -> seq) expectExceptions = let i = ref 0 let f x = i := !i + 1; x*x @@ -468,6 +652,40 @@ type SeqModule2() = if e.MoveNext() then Assert.Fail() Assert.AreEqual(0,!i) + [] + member this.Mapi2WithSideEffects () = + let i = ref 0 + let f _ x y = i := !i + 1; x*x + let e = (Seq.mapi2 f [1;2] [1;2]).GetEnumerator() + + CheckThrowsInvalidOperationExn (fun _ -> e.Current|>ignore) + Assert.AreEqual(0, !i) + if not (e.MoveNext()) then Assert.Fail() + Assert.AreEqual(1, !i) + let _ = e.Current + Assert.AreEqual(1, !i) + let _ = e.Current + Assert.AreEqual(1, !i) + + if not (e.MoveNext()) then Assert.Fail() + Assert.AreEqual(2, !i) + let _ = e.Current + Assert.AreEqual(2, !i) + let _ = e.Current + Assert.AreEqual(2, !i) + + if e.MoveNext() then Assert.Fail() + Assert.AreEqual(2,!i) + CheckThrowsInvalidOperationExn (fun _ -> e.Current|>ignore) + Assert.AreEqual(2, !i) + + i := 0 + let e = (Seq.mapi2 f [] []).GetEnumerator() + if e.MoveNext() then Assert.Fail() + Assert.AreEqual(0,!i) + if e.MoveNext() then Assert.Fail() + Assert.AreEqual(0,!i) + [] member this.Collect() = // integer Seq @@ -530,6 +748,67 @@ type SeqModule2() = () + [] + member this.Mapi2() = + // integer Seq + let funcInt x y z = x+y+z + let resultInt = Seq.mapi2 funcInt { 1..10 } {2..2..20} + let expectedint = seq [3;7;11;15;19;23;27;31;35;39] + + VerifySeqsEqual expectedint resultInt + + // string Seq + let funcStr (x:int) (y:int) (z:string) = x+y+z.Length + let resultStr = Seq.mapi2 funcStr (seq[3;6;9;11]) (seq ["Lists"; "Are"; "Commonly" ; "List" ]) + let expectedSeq = seq [8;10;19;18] + + VerifySeqsEqual expectedSeq resultStr + + // empty Seq + let resultEpt = Seq.mapi2 funcInt Seq.empty Seq.empty + VerifySeqsEqual Seq.empty resultEpt + + // null Seq + let nullSeq:seq<'a> = null + let validSeq = seq [1] + CheckThrowsArgumentNullException (fun () -> Seq.mapi2 funcInt nullSeq validSeq |> ignore) + + // len1 <> len2 + let shorterSeq = seq { 1..10 } + let longerSeq = seq { 2..20 } + + let testSeqLengths seq1 seq2 = + let f x y z = x + y + z + Seq.mapi2 f seq1 seq2 + + VerifySeqsEqual (seq [3;6;9;12;15;18;21;24;27;30]) (testSeqLengths shorterSeq longerSeq) + VerifySeqsEqual (seq [3;6;9;12;15;18;21;24;27;30]) (testSeqLengths longerSeq shorterSeq) + + [] + member this.Indexed() = + + // integer Seq + let resultInt = Seq.indexed { 10..2..20 } + let expectedint = seq [(0,10);(1,12);(2,14);(3,16);(4,18);(5,20)] + + VerifySeqsEqual expectedint resultInt + + // string Seq + let resultStr = Seq.indexed (seq ["Lists"; "Are"; "Commonly"; "List" ]) + let expectedStr = seq [(0,"Lists");(1,"Are");(2,"Commonly");(3,"List")] + + VerifySeqsEqual expectedStr resultStr + + // empty Seq + let resultEpt = Seq.indexed Seq.empty + VerifySeqsEqual Seq.empty resultEpt + + // null Seq + let nullSeq:seq<'a> = null + CheckThrowsArgumentNullException (fun () -> Seq.indexed nullSeq |> ignore) + + () + [] member this.Max() = // integer Seq @@ -615,35 +894,32 @@ type SeqModule2() = CheckThrowsArgumentNullException (fun () -> Seq.min nullSeq |> ignore) () - + [] - member this.Nth() = - - // Negative index - for i = -1 downto -10 do - CheckThrowsArgumentException (fun () -> Seq.nth i { 10 .. 20 } |> ignore) - - // Out of range - for i = 11 to 20 do - CheckThrowsArgumentException (fun () -> Seq.nth i { 10 .. 20 } |> ignore) - + member this.Item() = // integer Seq - let resultInt = Seq.nth 3 { 10..20 } + let resultInt = Seq.item 3 { 10..20 } Assert.AreEqual(13, resultInt) - + // string Seq - let resultStr = Seq.nth 3 (seq ["Lists"; "Are"; "nthString" ; "List" ]) - Assert.AreEqual("List",resultStr) - + let resultStr = Seq.item 2 (seq ["Lists"; "Are"; "Cool" ; "List" ]) + Assert.AreEqual("Cool", resultStr) + // empty Seq - CheckThrowsArgumentException(fun () -> Seq.nth 0 (Seq.empty : seq) |> ignore) - + CheckThrowsArgumentException(fun () -> Seq.item 0 (Seq.empty : seq) |> ignore) + // null Seq - let nullSeq:seq<'a> = null - CheckThrowsArgumentNullException (fun () ->Seq.nth 3 nullSeq |> ignore) - - () - + let nullSeq:seq<'a> = null + CheckThrowsArgumentNullException (fun () ->Seq.item 3 nullSeq |> ignore) + + // Negative index + for i = -1 downto -10 do + CheckThrowsArgumentException (fun () -> Seq.item i { 10 .. 20 } |> ignore) + + // Out of range + for i = 11 to 20 do + CheckThrowsArgumentException (fun () -> Seq.item i { 10 .. 20 } |> ignore) + [] member this.Of_Array() = // integer Seq @@ -722,7 +998,53 @@ type SeqModule2() = CheckThrowsArgumentNullException (fun () -> Seq.reduce (fun (x:string) (y:string) -> x.Remove(0,y.Length)) nullSeq |> ignore) () - + [] + member this.ReduceBack() = + // int Seq + let funcInt x y = x - y + let IntSeq = seq { 1..4 } + let reduceInt = Seq.reduceBack funcInt IntSeq + Assert.AreEqual((1-(2-(3-4))), reduceInt) + + // string Seq + let funcStr (x:string) (y:string) = y.Remove(0,x.Length) + let strSeq = seq [ "A"; "B"; "C"; "D" ; "ABCDE" ] + let reduceStr = Seq.reduceBack funcStr strSeq + Assert.AreEqual("E", reduceStr) + + // string Seq + let funcStr2 elem acc = sprintf "%s%s" elem acc + let strSeq2 = seq [ "A" ] + let reduceStr2 = Seq.reduceBack funcStr2 strSeq2 + Assert.AreEqual("A", reduceStr2) + + // Empty Seq + CheckThrowsArgumentException (fun () -> Seq.reduceBack funcInt Seq.empty |> ignore) + + // null Seq + let nullSeq:seq<'a> = null + CheckThrowsArgumentNullException (fun () -> Seq.reduceBack funcInt nullSeq |> ignore) + + () + + [] + member this.Rev() = + // integer Seq + let resultInt = Seq.rev (seq [5;4;3;2;1]) + VerifySeqsEqual (seq[1;2;3;4;5]) resultInt + + // string Seq + let resultStr = Seq.rev (seq ["A"; "B"; "C" ; "D" ]) + VerifySeqsEqual (seq["D";"C";"B";"A"]) resultStr + + // empty Seq + VerifySeqsEqual Seq.empty (Seq.rev Seq.empty) + + // null Seq + let nullSeq : seq<'a> = null + CheckThrowsArgumentNullException (fun () -> Seq.rev nullSeq |> ignore) + () + [] member this.Scan() = // integer Seq @@ -748,6 +1070,46 @@ type SeqModule2() = CheckThrowsArgumentNullException(fun() -> Seq.scan funcInt 5 seqNull |> ignore) () + [] + member this.ScanBack() = + // integer Seq + let funcInt x y = x+y + let resultInt = Seq.scanBack funcInt { 1..10 } 9 + let expectedInt = seq [64;63;61;58;54;49;43;36;28;19;9] + VerifySeqsEqual expectedInt resultInt + + // string Seq + let funcStr x y = x+y + let resultStr = Seq.scanBack funcStr (seq ["A";"B";"C";"D"]) "X" + let expectedStr = seq ["ABCDX";"BCDX";"CDX";"DX";"X"] + VerifySeqsEqual expectedStr resultStr + + // empty Seq + let resultEpt = Seq.scanBack funcInt Seq.empty 5 + let expectedEpt = seq [5] + VerifySeqsEqual expectedEpt resultEpt + + // null Seq + let seqNull:seq<'a> = null + CheckThrowsArgumentNullException(fun() -> Seq.scanBack funcInt seqNull 5 |> ignore) + + // exception cases + let funcEx x (s:'State) = raise <| new System.FormatException() : 'State + // calling scanBack with funcEx does not throw + let resultEx = Seq.scanBack funcEx (seq {1..10}) 0 + // reading from resultEx throws + CheckThrowsFormatException(fun() -> Seq.head resultEx |> ignore) + + // Result consumes entire input sequence as soon as it is accesses an element + let i = ref 0 + let funcState x s = (i := !i + x); x+s + let resultState = Seq.scanBack funcState (seq {1..3}) 0 + Assert.AreEqual(0, !i) + use e = resultState.GetEnumerator() + Assert.AreEqual(6, !i) + + () + [] member this.Singleton() = // integer Seq @@ -858,7 +1220,105 @@ type SeqModule2() = // null Seq CheckThrowsArgumentNullException(fun() -> Seq.sortBy funcInt null |> ignore) () + + [] + member this.SortDescending() = + + // integer Seq + let resultInt = Seq.sortDescending (seq [1;3;2;Int32.MaxValue;4;6;Int32.MinValue;5;7;0]) + let expectedInt = seq{ + yield Int32.MaxValue; + yield! seq{ 7..-1..0 } + yield Int32.MinValue + } + VerifySeqsEqual expectedInt resultInt + + // string Seq + + let resultStr = Seq.sortDescending (seq ["str1";null;"str3";"";"Str1";"str2";"str4"]) + let expectedStr = seq ["str4";"str3";"str2";"str1";"Str1";"";null] + VerifySeqsEqual expectedStr resultStr + + // empty Seq + let resultEpt = Seq.sortDescending Seq.empty + VerifySeqsEqual resultEpt Seq.empty + + // tuple Seq + let tupSeq = (seq[(2,"a");(1,"d");(1,"b");(1,"a");(2,"x");(2,"b");(1,"x")]) + let resultTup = Seq.sortDescending tupSeq + let expectedTup = (seq[(2,"x");(2,"b");(2,"a");(1,"x");(1,"d");(1,"b");(1,"a")]) + VerifySeqsEqual expectedTup resultTup + + // float Seq + let minFloat,maxFloat,epsilon = System.Double.MinValue,System.Double.MaxValue,System.Double.Epsilon + let floatSeq = seq [0.0; 0.5; 2.0; 1.5; 1.0; minFloat;maxFloat;epsilon;-epsilon] + let resultFloat = Seq.sortDescending floatSeq + let expectedFloat = seq [maxFloat; 2.0; 1.5; 1.0; 0.5; epsilon; 0.0; -epsilon; minFloat; ] + VerifySeqsEqual expectedFloat resultFloat + + // null Seq + CheckThrowsArgumentNullException(fun() -> Seq.sort null |> ignore) + () + [] + member this.SortByDescending() = + + // integer Seq + let funcInt x = Math.Abs(x-5) + let resultInt = Seq.sortByDescending funcInt (seq [1;2;4;5;7]) + let expectedInt = seq [1;2;7;4;5] + VerifySeqsEqual expectedInt resultInt + + // string Seq + let funcStr (x:string) = x.IndexOf("key") + let resultStr =Seq.sortByDescending funcStr (seq ["st(key)r";"str(key)";"s(key)tr";"(key)str"]) + + let expectedStr = seq ["str(key)";"st(key)r";"s(key)tr";"(key)str"] + VerifySeqsEqual expectedStr resultStr + + // empty Seq + let resultEpt = Seq.sortByDescending funcInt Seq.empty + VerifySeqsEqual resultEpt Seq.empty + + // tuple Seq + let tupSeq = (seq[(2,"a");(1,"d");(1,"b");(1,"a");(2,"x");(2,"b");(1,"x")]) + let resultTup = Seq.sortByDescending snd tupSeq + let expectedTup = (seq[(2,"x");(1,"x");(1,"d");(1,"b");(2,"b");(2,"a");(1,"a")]) + VerifySeqsEqual expectedTup resultTup + + // float Seq + let minFloat,maxFloat,epsilon = System.Double.MinValue,System.Double.MaxValue,System.Double.Epsilon + let floatSeq = seq [0.0; 0.5; 2.0; 1.5; 1.0; minFloat;maxFloat;epsilon;-epsilon] + let resultFloat = Seq.sortByDescending id floatSeq + let expectedFloat = seq [maxFloat; 2.0; 1.5; 1.0; 0.5; epsilon; 0.0; -epsilon; minFloat; ] + VerifySeqsEqual expectedFloat resultFloat + + // null Seq + CheckThrowsArgumentNullException(fun() -> Seq.sortByDescending funcInt null |> ignore) + () + + member this.SortWith() = + + // integer Seq + let intComparer a b = compare (a%3) (b%3) + let resultInt = Seq.sortWith intComparer (seq {0..10}) + let expectedInt = seq [0;3;6;9;1;4;7;10;2;5;8] + VerifySeqsEqual expectedInt resultInt + + // string Seq + let resultStr = Seq.sortWith compare (seq ["str1";"str3";"str2";"str4"]) + let expectedStr = seq ["str1";"str2";"str3";"str4"] + VerifySeqsEqual expectedStr resultStr + + // empty Seq + let resultEpt = Seq.sortWith intComparer Seq.empty + VerifySeqsEqual resultEpt Seq.empty + + // null Seq + CheckThrowsArgumentNullException(fun() -> Seq.sortWith intComparer null |> ignore) + + () + [] member this.Sum() = @@ -1073,6 +1533,11 @@ type SeqModule2() = // null Seq CheckThrowsArgumentNullException(fun() -> Seq.truncate 1 null |> ignore) + + // negative count + VerifySeqsEqual Seq.empty <| Seq.truncate -1 (seq [1;2;4;5;7]) + VerifySeqsEqual Seq.empty <| Seq.truncate System.Int32.MinValue (seq [1;2;4;5;7]) + () [] @@ -1102,6 +1567,32 @@ type SeqModule2() = CheckThrowsArgumentNullException(fun() -> Seq.tryFind (fun x -> (x%2=0)) null |> ignore) () + [] + member this.TryFindBack() = + // integer Seq + let resultInt = Seq.tryFindBack (fun x -> (x%2=0)) (seq [1;2;4;5;7]) + Assert.AreEqual(Some 4, resultInt) + + // integer Seq - None + let resultInt = Seq.tryFindBack (fun x -> (x%2=0)) (seq [1;3;5;7]) + Assert.AreEqual(None, resultInt) + + // string Seq + let resultStr = Seq.tryFindBack (fun (x:string) -> x.Contains("2")) (seq ["str1";"str2";"str2x";"str3"]) + Assert.AreEqual(Some "str2x", resultStr) + + // string Seq - None + let resultStr = Seq.tryFindBack (fun (x:string) -> x.Contains("2")) (seq ["str1";"str4";"str3"]) + Assert.AreEqual(None, resultStr) + + // empty Seq + let resultEpt = Seq.tryFindBack (fun x -> (x%2=0)) Seq.empty + Assert.AreEqual(None, resultEpt) + + // null Seq + CheckThrowsArgumentNullException(fun() -> Seq.tryFindBack (fun x -> (x%2=0)) null |> ignore) + () + [] member this.TryFindIndex() = @@ -1130,6 +1621,33 @@ type SeqModule2() = CheckThrowsArgumentNullException(fun() -> Seq.tryFindIndex (fun x -> (x % 2 = 0)) null |> ignore) () + [] + member this.TryFindIndexBack() = + + // integer Seq + let resultInt = Seq.tryFindIndexBack (fun x -> (x % 5 = 0)) [5; 9; 10; 12] + Assert.AreEqual(Some(2), resultInt) + + // integer Seq - None + let resultInt = Seq.tryFindIndexBack (fun x -> (x % 5 = 0)) [9;3;11] + Assert.AreEqual(None, resultInt) + + // string Seq + let resultStr = Seq.tryFindIndexBack (fun (x:string) -> x.Contains("2")) ["str1"; "str2"; "str2x"; "str3"] + Assert.AreEqual(Some(2), resultStr) + + // string Seq - None + let resultStr = Seq.tryFindIndexBack (fun (x:string) -> x.Contains("2")) ["str1"; "str4"; "str3"] + Assert.AreEqual(None, resultStr) + + // empty Seq + let resultEpt = Seq.tryFindIndexBack (fun x -> (x%2=0)) Seq.empty + Assert.AreEqual(None, resultEpt) + + // null Seq + CheckThrowsArgumentNullException(fun() -> Seq.tryFindIndexBack (fun x -> (x % 2 = 0)) null |> ignore) + () + [] member this.Unfold() = // integer Seq @@ -1279,4 +1797,30 @@ type SeqModule2() = CheckThrowsArgumentNullException(fun () -> Seq.tryPick funcNull nullSeq |> ignore) - () \ No newline at end of file + () + + [] + member this.tryItem() = + // integer Seq + let resultInt = Seq.tryItem 3 { 10..20 } + Assert.AreEqual(Some(13), resultInt) + + // string Seq + let resultStr = Seq.tryItem 2 (seq ["Lists"; "Are"; "Cool"; "List" ]) + Assert.AreEqual(Some("Cool"), resultStr) + + // empty Seq + let resultEmpty = Seq.tryItem 0 Seq.empty + Assert.AreEqual(None, resultEmpty) + + // null Seq + let nullSeq:seq<'a> = null + CheckThrowsArgumentNullException (fun () -> Seq.tryItem 3 nullSeq |> ignore) + + // Negative index + let resultNegativeIndex = Seq.tryItem -1 { 10..20 } + Assert.AreEqual(None, resultNegativeIndex) + + // Index greater than length + let resultIndexGreater = Seq.tryItem 31 { 10..20 } + Assert.AreEqual(None, resultIndexGreater) diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs index 034e96abb48..40e396af9dd 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Collections/StringModule.fs @@ -85,6 +85,20 @@ type StringModule() = let e2 = String.mapi (fun i c -> c) null Assert.AreEqual("", e2) + [] + member this.Filter() = + let e1 = String.filter (fun c -> true) "foo" + Assert.AreEqual("foo", e1) + + let e2 = String.filter (fun c -> true) null + Assert.AreEqual("", e2) + + let e3 = String.filter (fun c -> c <> 'o') "foo bar" + Assert.AreEqual("f bar", e3) + + let e4 = String.filter (fun c -> c <> 'o') "" + Assert.AreEqual("", e4) + [] member this.Collect() = let e1 = String.collect (fun c -> "a"+string c) "foo" diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs index 93167dd467b..264ffbe23d6 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Control/AsyncType.fs @@ -269,4 +269,58 @@ type AsyncType() = Async.Start a cts.Cancel() ewh.WaitOne(10000) |> ignore + + [] + member this.NonGenericTaskAsyncValue () = + let hasBeenCalled = ref false +#if FSHARP_CORE_NETCORE_PORTABLE + let t = +#else + use t = +#endif + Task.Factory.StartNew(Action(fun () -> hasBeenCalled := true)) + let a = async { + do! Async.AwaitTask(t) + return true + } + let result =Async.RunSynchronously(a, 1000) + (!hasBeenCalled && result) |> Assert.IsTrue + + [] + member this.NonGenericTaskAsyncValueException () = +#if FSHARP_CORE_NETCORE_PORTABLE + let t = +#else + use t = +#endif + Task.Factory.StartNew(Action(fun () -> raise <| Exception())) + let a = async { + try + let! v = Async.AwaitTask(t) + return false + with e -> return true + } + Async.RunSynchronously(a, 3000) |> Assert.IsTrue + + [] + member this.NonGenericTaskAsyncValueCancellation () = + use ewh = new ManualResetEvent(false) + let cts = new CancellationTokenSource() + let token = cts.Token +#if FSHARP_CORE_NETCORE_PORTABLE + let t = +#else + use t = +#endif + Task.Factory.StartNew(Action(fun () -> while not token.IsCancellationRequested do ()), token) + let cancelled = ref true + let a = async { + use! _holder = Async.OnCancel(fun _ -> ewh.Set() |> ignore) + let! v = Async.AwaitTask(t) + return v + } + Async.Start a + cts.Cancel() + ewh.WaitOne(10000) |> ignore + #endif \ No newline at end of file diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/OptionModule.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/OptionModule.fs new file mode 100644 index 00000000000..98aacbd0ada --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/OptionModule.fs @@ -0,0 +1,124 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace FSharp.Core.Unittests.FSharp_Core.Microsoft_FSharp_Core + +open NUnit.Framework + +// Various tests for the: +// Microsoft.FSharp.Core.Option module + +(* +[Test Strategy] +Make sure each method works on: +* Integer option (value type) +* String option (reference type) +* None (0 elements) +*) + +[] +type OptionModule() = + + [] + member this.FilterSomeIntegerWhenPredicateReturnsTrue () = + let test x = + let actual = x |> Some |> Option.filter (fun _ -> true) + + let expected = x |> Some + Assert.AreEqual(expected, actual) + [0;1;-1;42] |> List.iter test + + [] + member this.FilterSomeStringWhenPredicateReturnsTrue () = + let test x = + let actual = x |> Some |> Option.filter (fun _ -> true) + + let expected = x |> Some + Assert.AreEqual(expected, actual) + [""; " "; "Foo"; "Bar"] |> List.iter test + + [] + member this.FilterSomeIntegerWhenPredicateReturnsFalse () = + let test x = + let actual = x |> Some |> Option.filter (fun _ -> false) + + let expected = None + Assert.AreEqual(expected, actual) + [0; 1; -1; 1337] |> List.iter test + + [] + member this.FilterSomeStringWhenPredicateReturnsFalse () = + let test x = + let actual = x |> Some |> Option.filter (fun _ -> false) + + let expected = None + Assert.AreEqual(expected, actual) + [""; " "; "Ploeh"; "Fnaah"] |> List.iter test + + [] + member this.FilterNoneReturnsCorrectResult () = + let test x = + let actual = None |> Option.filter (fun _ -> x) + + let expected = None + Assert.AreEqual(expected, actual) + [false; true] |> List.iter test + + [] + member this.FilterSomeIntegerWhenPredicateEqualsInput () = + let test x = + let actual = x |> Some |> Option.filter ((=) x) + + let expected = x |> Some + Assert.AreEqual(expected, actual) + [0; 1; -1; -2001] |> List.iter test + + [] + member this.FilterSomeStringWhenPredicateEqualsInput () = + let test x = + let actual = x |> Some |> Option.filter ((=) x) + + let expected = x |> Some + Assert.AreEqual(expected, actual) + [""; " "; "Xyzz"; "Sgryt"] |> List.iter test + + [] + member this.FilterSomeIntegerWhenPredicateDoesNotEqualsInput () = + let test x = + let actual = x |> Some |> Option.filter ((<>) x) + + let expected = None + Assert.AreEqual(expected, actual) + [0; 1; -1; 927] |> List.iter test + + [] + member this.FilterSomeStringWhenPredicateDoesNotEqualsInput () = + let test x = + let actual = x |> Some |> Option.filter ((<>) x) + + let expected = None + Assert.AreEqual(expected, actual) + [""; " "; "Baz Quux"; "Corge grault"] |> List.iter test + + [] + member this.OfToNullable() = + Assert.IsTrue( Option.ofNullable (System.Nullable()) = None) + Assert.IsTrue( Option.ofNullable (System.Nullable(3)) = Some 3) + + Assert.IsTrue( Option.toNullable (None : int option) = System.Nullable()) + Assert.IsTrue( Option.toNullable (None : System.DateTime option) = System.Nullable()) + Assert.IsTrue( Option.toNullable (Some 3) = System.Nullable(3)) + + [] + member this.OfToObj() = + Assert.IsTrue( Option.toObj (Some "3") = "3") + Assert.IsTrue( Option.toObj (Some "") = "") + Assert.IsTrue( Option.toObj (Some null) = null) + Assert.IsTrue( Option.toObj None = null) + + Assert.IsTrue( Option.ofObj "3" = Some "3") + Assert.IsTrue( Option.ofObj "" = Some "") + Assert.IsTrue( Option.ofObj [| "" |] = Some [| "" |]) + Assert.IsTrue( Option.ofObj (null : string array) = None) + Assert.IsTrue( Option.ofObj null = None) + Assert.IsTrue( Option.ofObj null = None) + Assert.IsTrue( Option.ofObj null = None) \ No newline at end of file diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Quotations/FSharpQuotations.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Quotations/FSharpQuotations.fs index 74427ea5079..8569f187d1e 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Quotations/FSharpQuotations.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Quotations/FSharpQuotations.fs @@ -67,3 +67,7 @@ type FSharpQuotationsTests() = let wrongValue = <@ "!" @> Check.argumentException(fun () -> ExprShape.RebuildShapeCombination(shape, [wrongValue;lambda])) | _ -> Assert.Fail() + + [] + member x.GetConstructorFiltersOutStaticConstructor() = + ignore <@ System.Exception() @> \ No newline at end of file diff --git a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/PrimTypes.fs b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/PrimTypes.fs index daa4ecac7a8..1dd138f9ccc 100644 --- a/src/fsharp/FSharp.Core.Unittests/FSharp.Core/PrimTypes.fs +++ b/src/fsharp/FSharp.Core.Unittests/FSharp.Core/PrimTypes.fs @@ -651,4 +651,35 @@ type MiscStuff() = incr x incr x decr x - Assert.AreEqual(1, !x) + Assert.IsTrue( 1 = !x ) + + + +[] +type UnboxAndOptionStuff() = + [] + member this.TryUnbox() = + Assert.IsTrue( tryUnbox (box ([] : int list)) = Some ([]: int list)) + Assert.IsTrue( tryUnbox (box ([1] : int list)) = Some ([1]: int list)) + Assert.IsTrue( tryUnbox (box ([] : string list)) = (None : int list option)) // Option uses 'null' as representation + Assert.IsTrue( tryUnbox (box ([] : string list)) = None) + Assert.IsTrue( tryUnbox (box (None : int option)) = Some (None: int option)) + Assert.IsTrue( tryUnbox (box (None : string option)) = Some (None: string option)) + Assert.IsTrue( tryUnbox (box (None : string option)) = Some (None: int option)) // Option uses 'null' as representation + Assert.IsTrue( tryUnbox (box "") = Some "") + Assert.IsTrue( tryUnbox (box null) = Some None) // Option uses 'null' as representation + Assert.IsTrue( tryUnbox (box null) = None) + Assert.IsTrue( tryUnbox (box null) = None) + Assert.IsTrue( tryUnbox (box "1") = None) + Assert.IsTrue( tryUnbox (box 1) = Some 1) + Assert.IsTrue( tryUnbox (box "") = Some "") + Assert.IsTrue( tryUnbox (box 1) = None) + + [] + member this.IsNull() = + Assert.IsTrue( isNull (null : string)) + Assert.IsTrue( isNull (null : string[])) + Assert.IsTrue( isNull (null : int[])) + Assert.IsTrue( not (isNull [| |])) + Assert.IsTrue( not (isNull "")) + Assert.IsTrue( not (isNull "1")) diff --git a/src/fsharp/FSharp.Core.Unittests/LibraryTestFx.fs b/src/fsharp/FSharp.Core.Unittests/LibraryTestFx.fs index 02ebe39fa99..ade35128f10 100644 --- a/src/fsharp/FSharp.Core.Unittests/LibraryTestFx.fs +++ b/src/fsharp/FSharp.Core.Unittests/LibraryTestFx.fs @@ -67,4 +67,73 @@ let sleep(n : int32) = async { do! Async.Sleep(n) } |> Async.RunSynchronously #else System.Threading.Thread.Sleep(n) -#endif \ No newline at end of file +#endif + +module SurfaceArea = + open System.Reflection + open System + open System.Text.RegularExpressions + + // gets string form of public surface area for the currently-loaded FSharp.Core + let private getActual () = + + // get current fsharp.core + let asm = + #if portable7 || portable78 || portable259 + typeof.GetTypeInfo().Assembly + #else + typeof.Assembly + #endif + + // public types only + let types = + #if portable7 || portable78 || portable259 + asm.ExportedTypes |> Seq.filter (fun ty -> let ti = ty.GetTypeInfo() in ti.IsPublic || ti.IsNestedPublic) |> Array.ofSeq + #else + asm.GetExportedTypes() + #endif + + // extract canonical string form for every public member of every type + let getTypeMemberStrings (t : Type) = + // for System.Runtime-based profiles, need to do lots of manual work + #if portable7 || portable78 || portable259 + let getMembers (t : Type) = + let ti = t.GetTypeInfo() + let cast (info : #MemberInfo) = (t, info :> MemberInfo) + seq { + yield! t.GetRuntimeEvents() |> Seq.filter (fun m -> m.AddMethod.IsPublic) |> Seq.map cast + yield! t.GetRuntimeProperties() |> Seq.filter (fun m -> m.GetMethod.IsPublic) |> Seq.map cast + yield! t.GetRuntimeMethods() |> Seq.filter (fun m -> m.IsPublic) |> Seq.map cast + yield! t.GetRuntimeFields() |> 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())) + #else + t.GetMembers() + |> Array.map (fun v -> sprintf "%s: %s" (v.ReflectedType.ToString()) (v.ToString())) + #endif + + types + |> Array.collect getTypeMemberStrings + |> Array.sort + |> String.concat "\r\n" + + // verify public surface area matches expected + let verify expected platform fileName = + let workDir = + #if OPEN_BUILD + TestContext.CurrentContext.WorkDirectory + #else + "" + #endif + let logFile = sprintf "%s\\CoreUnit_%s_Xml.xml" workDir platform + let normalize (s:string) = + Regex.Replace(s, "(\\r\\n|\\n)+", "\r\n").Trim([|'\r';'\n'|]) + + let actual = getActual () |> normalize + let expected = expected |> normalize + + Assert.AreEqual(expected, actual, sprintf "\r\n%s\r\n\r\n Expected and actual surface area don't match. To see the delta, run\r\nwindiff %s %s" actual fileName logFile) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.2.0.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net20.fs similarity index 92% rename from src/fsharp/FSharp.Core.Unittests/SurfaceArea.2.0.fs rename to src/fsharp/FSharp.Core.Unittests/SurfaceArea.net20.fs index 25137889545..47e4e70d6d1 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.2.0.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net20.fs @@ -3,36 +3,13 @@ namespace FSharp.Core.Unittests.SurfaceArea open NUnit.Framework +open FSharp.Core.Unittests.LibraryTestFx [] type SurfaceAreaTest() = [] member this.VerifyArea() = - let file = typeof.Assembly.Location - let asm = System.Reflection.Assembly.ReflectionOnlyLoadFrom(file) - let frameworkAsm = typeof.Assembly - printfn "FSharp.Core image runtime version: %s" asm.ImageRuntimeVersion - printfn "Framework image runtime version: %s" frameworkAsm.ImageRuntimeVersion - if (frameworkAsm.ImageRuntimeVersion.[1] = '2') then // v2.0.50727 - we only want this test to run as 2.0 (nu20), not FSharp.Core 2.0 on CLR 4.0 (nu20on40) - let referenced = asm.GetReferencedAssemblies() - - for ref in referenced do - System.Reflection.Assembly.ReflectionOnlyLoad(ref.FullName) |> ignore - - let types = asm.GetExportedTypes() - - let actual = new System.Text.StringBuilder() - actual.Append("\r\n") |> ignore - - let values = - types - |> Array.collect (fun t -> t.GetMembers()) - |> Array.map (fun v -> sprintf "%s: %s" (v.ReflectedType.ToString()) (v.ToString())) - |> Array.sort - |> Array.iter (fun s -> actual.Append(s) |> ignore - actual.Append("\r\n") |> ignore) - - let expected = @" + let expected = @" Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) @@ -85,30 +62,50 @@ Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32 Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]]) Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.ArrayModule: Boolean Contains[T](T, T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[], T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.String ToString() +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[System.Int32,T][] Indexed[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T,T][] Pairwise[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] Zip[T1,T2](T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1[],T2[]] Unzip[T1,T2](System.Tuple`2[T1,T2][]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TKey,System.Int32][] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TKey,T[]][] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TResult[],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], T[], TState) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TResult[],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] SplitAt[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T ExactlyOne[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T Get[T](T[], Int32) +Microsoft.FSharp.Collections.ArrayModule: T Head[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T Item[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T Last[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) Microsoft.FSharp.Collections.ArrayModule: T Max[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) @@ -122,6 +119,7 @@ Microsoft.FSharp.Collections.ArrayModule: TResult SumBy[T,TResult](Microsoft.FSh Microsoft.FSharp.Collections.ArrayModule: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) Microsoft.FSharp.Collections.ArrayModule: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) Microsoft.FSharp.Collections.ArrayModule: TResult[] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], T1[], T2[], T3[]) Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) Microsoft.FSharp.Collections.ArrayModule: TResult[] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) @@ -135,6 +133,8 @@ Microsoft.FSharp.Collections.ArrayModule: T[] Append[T](T[], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] Concat[T](System.Collections.Generic.IEnumerable`1[T[]]) Microsoft.FSharp.Collections.ArrayModule: T[] Copy[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T[] Create[T](Int32, T) +Microsoft.FSharp.Collections.ArrayModule: T[] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Distinct[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T[] Empty[T]() Microsoft.FSharp.Collections.ArrayModule: T[] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] GetSubArray[T](T[], Int32, Int32) @@ -142,11 +142,24 @@ Microsoft.FSharp.Collections.ArrayModule: T[] Initialize[T](Int32, Microsoft.FSh Microsoft.FSharp.Collections.ArrayModule: T[] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ArrayModule: T[] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.ArrayModule: T[] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Replicate[T](Int32, T) Microsoft.FSharp.Collections.ArrayModule: T[] Reverse[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Singleton[T](T) +Microsoft.FSharp.Collections.ArrayModule: T[] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Skip[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortDescending[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T[] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] Sort[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Tail[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Take[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Truncate[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Unfold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) +Microsoft.FSharp.Collections.ArrayModule: T[] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] ZeroCreate[T](Int32) +Microsoft.FSharp.Collections.ArrayModule: T[][] Windowed[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: Void CopyTo[T](T[], Int32, T[], Int32, Int32) Microsoft.FSharp.Collections.ArrayModule: Void Fill[T](T[], Int32, Int32, T) Microsoft.FSharp.Collections.ArrayModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], T1[], T2[]) @@ -160,6 +173,7 @@ Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) +Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() @@ -188,6 +202,7 @@ Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 get_Tag() Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1+Tags[T] Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Cons(T, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Empty +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] GetSlice(Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Tail Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] TailOrNull Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Empty() @@ -243,20 +258,28 @@ Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() Microsoft.FSharp.Collections.HashIdentity: System.String ToString() Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() +Microsoft.FSharp.Collections.ListModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) Microsoft.FSharp.Collections.ListModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Int32,T]] Indexed[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T,T]] Pairwise[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]] Zip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,Microsoft.FSharp.Collections.FSharpList`1[T]]] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,System.Int32]] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]] Zip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], Microsoft.FSharp.Collections.FSharpList`1[T3]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Collections.FSharpList`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -267,8 +290,11 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TState] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T[]] Windowed[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Append[T](Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Concat[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpList`1[T]]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Distinct[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Empty[T]() Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) @@ -277,23 +303,45 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Replicate[T](Int32, T) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Reverse[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Singleton[T](T) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Skip[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortDescending[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Sort[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Tail[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Take[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Truncate[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Unfold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.String ToString() Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] SplitAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) Microsoft.FSharp.Collections.ListModule: System.Type GetType() Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T ExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T Get[T](Microsoft.FSharp.Collections.FSharpList`1[T], Int32) Microsoft.FSharp.Collections.ListModule: T Head[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Item[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Last[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T Max[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -342,6 +390,7 @@ Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.F Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T], TState) Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.SeqModule: Boolean Contains[T](T, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) @@ -349,13 +398,20 @@ Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp. Microsoft.FSharp.Collections.SeqModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.Int32,T]] Indexed[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T,T]] Pairwise[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T1,T2]] Zip[T1,T2](System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,System.Collections.Generic.IEnumerable`1[T]]] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) @@ -364,8 +420,11 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1 Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Collect[T,TCollection,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], System.Collections.Generic.IEnumerable`1[T3]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TState] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], System.Collections.Generic.IEnumerable`1[T], TState) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] Windowed[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Append[T](System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) @@ -381,37 +440,53 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1 Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfArray[T](T[]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] ReadOnly[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Replicate[T](Int32, T) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Reverse[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Singleton[T](T) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Skip[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortDescending[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Sort[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Tail[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Take[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.String ToString() +Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], System.Collections.Generic.IEnumerable`1[T], TState) +Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Type GetType() Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T ExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Get[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Head[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Item[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Last[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Max[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Min[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Sum[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], TState) +Microsoft.FSharp.Collections.SeqModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], System.Collections.Generic.IEnumerable`1[T], TState) Microsoft.FSharp.Collections.SeqModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T[] ToArray[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -617,6 +692,8 @@ Microsoft.FSharp.Control.ObservableModule: System.Type GetType() Microsoft.FSharp.Control.ObservableModule: Void Add[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) Microsoft.FSharp.Control.WebExtensions: Boolean Equals(System.Object) Microsoft.FSharp.Control.WebExtensions: Int32 GetHashCode() +Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncDownloadFile(System.Net.WebClient, System.Uri, System.String) +Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncDownloadData(System.Net.WebClient, System.Uri) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Net.WebResponse] AsyncGetResponse(System.Net.WebRequest) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.String] AsyncDownloadString(System.Net.WebClient, System.Uri) Microsoft.FSharp.Control.WebExtensions: System.String ToString() @@ -633,12 +710,15 @@ Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Value +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean get_Value() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object TypeId Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor(Boolean) Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.AutoOpenAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) @@ -721,11 +801,16 @@ Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceC Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object TypeId Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ResourceName Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String get_ResourceName() Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] TypeDefinitions +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] get_TypeDefinitions() Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) +Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(System.String, System.Type[]) Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) @@ -916,6 +1001,12 @@ Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Byte ToByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Int32 GetHashCode() +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: SByte ToSByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.String ToString() +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.Type GetType() Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) @@ -923,6 +1014,7 @@ Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Single ToSingle[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IDictionary`2[TKey,TValue] CreateDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) @@ -2045,7 +2137,9 @@ Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitiv Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators Microsoft.FSharp.Core.LanguagePrimitives: SByte SByteWithMeasure(SByte) Microsoft.FSharp.Core.LanguagePrimitives: Single Float32WithMeasure(Single) +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IComparer`1[T] FastGenericComparerFromTable[T]() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IComparer`1[T] FastGenericComparer[T]() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastGenericEqualityComparerFromTable[T]() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastGenericEqualityComparer[T]() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastLimitedGenericEqualityComparer[T](Int32) Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IComparer GenericComparer @@ -2196,6 +2290,20 @@ Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Equality[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThanOrEqual[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThan[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Inequality[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThanOrEqual[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThan[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.String ToString() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.Type GetType() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Max[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Min[T](T, T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) @@ -2250,11 +2358,15 @@ Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T2 SqrtDynamic[T1,T2](T1) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,,] GetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice2DFixed1[T](T[,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice2DFixed2[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt16 PowUInt16(UInt16, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt32 PowUInt32(UInt32, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt64 PowUInt64(UInt64, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UIntPtr PowUIntPtr(UIntPtr, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2DFixed1[T](T[,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2DFixed2[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) @@ -2269,6 +2381,7 @@ Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object) Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T) Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) Microsoft.FSharp.Core.Operators: Boolean op_GreaterThanOrEqual[T](T, T) @@ -2298,8 +2411,10 @@ Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Collections.FSharpList`1[T] op Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeLeft[T2,T3,T1](Microsoft.FSharp.Core.FSharpFunc`2[T2,T3], Microsoft.FSharp.Core.FSharpFunc`2[T1,T2]) Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeRight[T1,T2,T3](Microsoft.FSharp.Core.FSharpFunc`2[T1,T2], Microsoft.FSharp.Core.FSharpFunc`2[T2,T3]) Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[System.String] FailurePattern(System.Exception) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[T] TryUnbox[T](System.Object) Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpRef`1[T] Ref[T](T) Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Checked +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+NonStructuralComparison Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+OperatorIntrinsics Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Unchecked Microsoft.FSharp.Core.Operators: SByte ToSByte[T](T) @@ -2442,9 +2557,14 @@ Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfNullable[T](System.Nullable`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfObj[T](T) +Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: System.String ToString() Microsoft.FSharp.Core.OptionModule: System.Type GetType() Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: T ToObj[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpOption`1[T], TState) Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T]) @@ -2508,14 +2628,17 @@ Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IncludeValue Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean get_IncludeValue() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object TypeId Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor(Boolean) Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) @@ -2575,6 +2698,7 @@ Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) +Microsoft.FSharp.Core.StringModule: System.String Filter(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) @@ -2693,6 +2817,7 @@ Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpO Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] BoolPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Byte] BytePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Char] CharPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Decimal] DecimalPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Double] DoublePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int16] Int16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] Int32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -2729,6 +2854,7 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr C Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Coerce(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr DefaultValue(System.Type) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Deserialize(System.Type, Microsoft.FSharp.Collections.FSharpList`1[System.Type], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr], Byte[]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Deserialize40(System.Type, System.Type[], System.Type[], Microsoft.FSharp.Quotations.FSharpExpr[], Byte[]) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(System.Reflection.FieldInfo) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldSet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo, Microsoft.FSharp.Quotations.FSharpExpr) @@ -2749,6 +2875,8 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr P Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Quote(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr QuoteRaw(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr QuoteTyped(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Sequential(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Substitute(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr]]) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TryFinally(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) @@ -2757,12 +2885,16 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr T Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TypeTest(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr UnionCaseTest(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Reflection.UnionCaseInfo) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value(System.Object, System.Type) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ValueWithName(System.Object, System.Type, System.String) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ValueWithName[T](T, System.String) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value[T](T) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Var(Microsoft.FSharp.Quotations.FSharpVar) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr VarSet(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr WhileLoop(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr WithValue(System.Object, System.Type, Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] Cast[T](Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] GlobalVar[T](System.String) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] WithValue[T](T, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString(Boolean) @@ -2770,6 +2902,7 @@ Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) +Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[], System.Type[]) Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Int32 GetHashCode() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes @@ -2800,6 +2933,8 @@ Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuoteRawPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuoteTypedPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpVar] VarPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]],Microsoft.FSharp.Quotations.FSharpExpr]] LetRecursivePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.FieldInfo]] FieldGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -2824,6 +2959,8 @@ Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1 Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] PropertyGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] IfThenElsePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] LetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.Type,Microsoft.FSharp.Quotations.FSharpExpr]] WithValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.Type,System.String]] ValueWithNamePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar],Microsoft.FSharp.Quotations.FSharpExpr]] NewDelegatePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Quotations.FSharpExpr]] PropertySetPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -2831,6 +2968,29 @@ Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1 Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Type] DefaultValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: System.String ToString() Microsoft.FSharp.Quotations.PatternsModule: System.Type GetType() +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsExceptionRepresentation.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsRecord.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsUnion.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Int32 GetHashCode() +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] FSharpValue.PreComputeUnionTagReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeRecordReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeUnionReader.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] FSharpValue.PreComputeRecordConstructor.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] FSharpValue.PreComputeUnionConstructor.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Reflection.UnionCaseInfo[] FSharpType.GetUnionCases.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object FSharpValue.MakeRecord.Static(System.Type, System.Object[], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object FSharpValue.MakeUnion.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, System.Object[], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object[] FSharpValue.GetExceptionFields.Static(System.Object, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object[] FSharpValue.GetRecordFields.Static(System.Object, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.ConstructorInfo FSharpValue.PreComputeRecordConstructorInfo.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MemberInfo FSharpValue.PreComputeUnionTagMemberInfo.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MethodInfo FSharpValue.PreComputeUnionConstructorInfo.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetExceptionFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetRecordFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.String ToString() +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] FSharpValue.GetUnionFields.Static(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Type GetType() Microsoft.FSharp.Reflection.FSharpType: Boolean Equals(System.Object) Microsoft.FSharp.Reflection.FSharpType: Boolean IsExceptionRepresentation(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Reflection.BindingFlags]) Microsoft.FSharp.Reflection.FSharpType: Boolean IsFunction(System.Type) @@ -3118,8 +3278,4 @@ System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: TRest Rest System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: TRest get_Rest() System.Tuple`8[T1,T2,T3,T4,T5,T6,T7,TRest]: Void .ctor(T1, T2, T3, T4, T5, T6, T7, TRest) " - - let act = actual.ToString() - if expected <> act then - printf "%s" act - Assert.AreEqual(expected, act) + SurfaceArea.verify expected "net20" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__)) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.4.0.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net40.fs similarity index 93% rename from src/fsharp/FSharp.Core.Unittests/SurfaceArea.4.0.fs rename to src/fsharp/FSharp.Core.Unittests/SurfaceArea.net40.fs index 50259562d6d..16f23c386f3 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.4.0.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.net40.fs @@ -3,32 +3,13 @@ namespace FSharp.Core.Unittests.SurfaceArea open NUnit.Framework +open FSharp.Core.Unittests.LibraryTestFx [] type SurfaceAreaTest() = [] member this.VerifyArea() = - let file = typeof.Assembly.Location - let asm = System.Reflection.Assembly.ReflectionOnlyLoadFrom(file) - let referenced = asm.GetReferencedAssemblies() - - for ref in referenced do - System.Reflection.Assembly.ReflectionOnlyLoad(ref.FullName) |> ignore - - let types = asm.GetExportedTypes() - - let actual = new System.Text.StringBuilder() - actual.Append("\r\n") |> ignore - - let values = - types - |> Array.collect (fun t -> t.GetMembers()) - |> Array.map (fun v -> sprintf "%s: %s" (v.ReflectedType.ToString()) (v.ToString())) - |> Array.sort - |> Array.iter (fun s -> actual.Append(s) |> ignore - actual.Append("\r\n") |> ignore) - - let expectedSurfaceArea = @" + let expected = @" Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) @@ -93,31 +74,51 @@ Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Map[T,TResult](Micr Microsoft.FSharp.Collections.ArrayModule+Parallel: T[] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) Microsoft.FSharp.Collections.ArrayModule+Parallel: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[]) Microsoft.FSharp.Collections.ArrayModule+Parallel: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean Contains[T](T, T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[], T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.ArrayModule+Parallel Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.String ToString() +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[System.Int32,T][] Indexed[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T,T][] Pairwise[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] Zip[T1,T2](T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1[],T2[]] Unzip[T1,T2](System.Tuple`2[T1,T2][]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TKey,System.Int32][] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TKey,T[]][] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TResult[],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], T[], TState) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TResult[],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] SplitAt[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T ExactlyOne[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T Get[T](T[], Int32) +Microsoft.FSharp.Collections.ArrayModule: T Head[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T Item[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T Last[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) Microsoft.FSharp.Collections.ArrayModule: T Max[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) @@ -131,6 +132,7 @@ Microsoft.FSharp.Collections.ArrayModule: TResult SumBy[T,TResult](Microsoft.FSh Microsoft.FSharp.Collections.ArrayModule: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) Microsoft.FSharp.Collections.ArrayModule: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) Microsoft.FSharp.Collections.ArrayModule: TResult[] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], T1[], T2[], T3[]) Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) Microsoft.FSharp.Collections.ArrayModule: TResult[] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) @@ -144,18 +146,36 @@ Microsoft.FSharp.Collections.ArrayModule: T[] Append[T](T[], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] Concat[T](System.Collections.Generic.IEnumerable`1[T[]]) Microsoft.FSharp.Collections.ArrayModule: T[] Copy[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T[] Create[T](Int32, T) +Microsoft.FSharp.Collections.ArrayModule: T[] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Distinct[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T[] Empty[T]() +Microsoft.FSharp.Collections.ArrayModule: T[] Except[T](System.Collections.Generic.IEnumerable`1[T], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] GetSubArray[T](T[], Int32, Int32) Microsoft.FSharp.Collections.ArrayModule: T[] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) Microsoft.FSharp.Collections.ArrayModule: T[] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ArrayModule: T[] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.ArrayModule: T[] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Replicate[T](Int32, T) Microsoft.FSharp.Collections.ArrayModule: T[] Reverse[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Singleton[T](T) +Microsoft.FSharp.Collections.ArrayModule: T[] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Skip[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortDescending[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T[] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] Sort[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Tail[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Take[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Truncate[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Unfold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) +Microsoft.FSharp.Collections.ArrayModule: T[] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] ZeroCreate[T](Int32) +Microsoft.FSharp.Collections.ArrayModule: T[][] ChunkBySize[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[][] SplitInto[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[][] Windowed[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: Void CopyTo[T](T[], Int32, T[], Int32, Int32) Microsoft.FSharp.Collections.ArrayModule: Void Fill[T](T[], Int32, Int32, T) Microsoft.FSharp.Collections.ArrayModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], T1[], T2[]) @@ -169,6 +189,7 @@ Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) +Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() @@ -197,6 +218,7 @@ Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 get_Tag() Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1+Tags[T] Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Cons(T, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Empty +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] GetSlice(Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Tail Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] TailOrNull Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Empty() @@ -252,20 +274,31 @@ Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() Microsoft.FSharp.Collections.HashIdentity: System.String ToString() Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() +Microsoft.FSharp.Collections.ListModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) Microsoft.FSharp.Collections.ListModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] ChunkBySize[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] SplitInto[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] Windowed[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Int32,T]] Indexed[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T,T]] Pairwise[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]] Zip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,Microsoft.FSharp.Collections.FSharpList`1[T]]] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,System.Int32]] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]] Zip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], Microsoft.FSharp.Collections.FSharpList`1[T3]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Collections.FSharpList`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -278,7 +311,10 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Append[T](Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Concat[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpList`1[T]]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Distinct[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Empty[T]() +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Except[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfArray[T](T[]) @@ -286,23 +322,45 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Replicate[T](Int32, T) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Reverse[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Singleton[T](T) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Skip[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortDescending[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Sort[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Tail[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Take[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Truncate[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Unfold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.String ToString() Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] SplitAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) Microsoft.FSharp.Collections.ListModule: System.Type GetType() Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T ExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T Get[T](Microsoft.FSharp.Collections.FSharpList`1[T], Int32) Microsoft.FSharp.Collections.ListModule: T Head[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Item[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Last[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T Max[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -351,6 +409,7 @@ Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.F Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T], TState) Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.SeqModule: Boolean Contains[T](T, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) @@ -358,13 +417,20 @@ Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp. Microsoft.FSharp.Collections.SeqModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.Int32,T]] Indexed[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T,T]] Pairwise[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T1,T2]] Zip[T1,T2](System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,System.Collections.Generic.IEnumerable`1[T]]] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) @@ -373,9 +439,14 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1 Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Collect[T,TCollection,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], System.Collections.Generic.IEnumerable`1[T3]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TState] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], System.Collections.Generic.IEnumerable`1[T], TState) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] ChunkBySize[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] SplitInto[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] Windowed[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Append[T](System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Cache[T](System.Collections.Generic.IEnumerable`1[T]) @@ -385,42 +456,59 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1 Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Distinct[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Empty[T]() +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Except[T](System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] InitializeInfinite[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfArray[T](T[]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] ReadOnly[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Replicate[T](Int32, T) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Reverse[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Singleton[T](T) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Skip[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortDescending[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Sort[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Tail[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Take[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.String ToString() +Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], System.Collections.Generic.IEnumerable`1[T], TState) +Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Type GetType() Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T ExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Get[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Head[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Item[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Last[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Max[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Min[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Sum[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], TState) +Microsoft.FSharp.Collections.SeqModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], System.Collections.Generic.IEnumerable`1[T], TState) Microsoft.FSharp.Collections.SeqModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T[] ToArray[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -485,6 +573,7 @@ Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AwaitTask(System.Threading.Tasks.Task) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Ignore[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Sleep(Int32) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToContext(System.Threading.SynchronizationContext) @@ -629,6 +718,8 @@ Microsoft.FSharp.Control.ObservableModule: System.Type GetType() Microsoft.FSharp.Control.ObservableModule: Void Add[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) Microsoft.FSharp.Control.WebExtensions: Boolean Equals(System.Object) Microsoft.FSharp.Control.WebExtensions: Int32 GetHashCode() +Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncDownloadFile(System.Net.WebClient, System.Uri, System.String) +Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncDownloadData(System.Net.WebClient, System.Uri) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Net.WebResponse] AsyncGetResponse(System.Net.WebRequest) Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.String] AsyncDownloadString(System.Net.WebClient, System.Uri) Microsoft.FSharp.Control.WebExtensions: System.String ToString() @@ -645,12 +736,15 @@ Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Value +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean get_Value() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object TypeId Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor(Boolean) Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.AutoOpenAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) @@ -733,11 +827,16 @@ Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceC Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object TypeId Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ResourceName Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String get_ResourceName() Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] TypeDefinitions +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] get_TypeDefinitions() Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) +Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(System.String, System.Type[]) Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) @@ -817,12 +916,15 @@ Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.String Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T LastGenerated Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T get_LastGenerated() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void .ctor() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void Close() Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace[] GetNestedNamespaces() Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.String NamespaceName Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.String get_NamespaceName() Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.Type ResolveTypeName(System.String) Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.Type[] GetTypes() +Microsoft.FSharp.Core.CompilerServices.ITypeProvider2: System.Reflection.MethodBase ApplyStaticArgumentsForMethod(System.Reflection.MethodBase, System.String, System.Object[]) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider2: System.Reflection.ParameterInfo[] GetStaticParametersForMethod(System.Reflection.MethodBase) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Byte[] GetGeneratedAssemblyContents(System.Reflection.Assembly) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace[] GetNamespaces() Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Microsoft.FSharp.Quotations.FSharpExpr GetInvokerExpression(System.Reflection.MethodBase, Microsoft.FSharp.Quotations.FSharpExpr[]) @@ -1053,6 +1155,12 @@ Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Byte ToByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Int32 GetHashCode() +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: SByte ToSByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.String ToString() +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.Type GetType() Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) @@ -1060,6 +1168,7 @@ Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Linq.QueryBuilder get_query() Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Linq.QueryBuilder query Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) @@ -1982,6 +2091,7 @@ Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.String ToString() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Type GetType() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: TResult Invoke(T) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: V InvokeFast[V](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,V]], T, TResult) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Void .ctor() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: W InvokeFast[V,W](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,W]]], T, TResult, V) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: X InvokeFast[V,W,X](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,X]]]], T, TResult, V, W) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Y InvokeFast[V,W,X,Y](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,Microsoft.FSharp.Core.FSharpFunc`2[X,Y]]]]], T, TResult, V, W, X) @@ -2051,6 +2161,7 @@ Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() Microsoft.FSharp.Core.FSharpTypeFunc: System.String ToString() Microsoft.FSharp.Core.FSharpTypeFunc: System.Type GetType() +Microsoft.FSharp.Core.FSharpTypeFunc: Void .ctor() Microsoft.FSharp.Core.FuncConvert: Boolean Equals(System.Object) Microsoft.FSharp.Core.FuncConvert: Int32 GetHashCode() Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit] ToFSharpFunc[T](System.Action`1[T]) @@ -2184,7 +2295,9 @@ Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitiv Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators Microsoft.FSharp.Core.LanguagePrimitives: SByte SByteWithMeasure(SByte) Microsoft.FSharp.Core.LanguagePrimitives: Single Float32WithMeasure(Single) +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IComparer`1[T] FastGenericComparerFromTable[T]() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IComparer`1[T] FastGenericComparer[T]() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastGenericEqualityComparerFromTable[T]() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastGenericEqualityComparer[T]() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastLimitedGenericEqualityComparer[T](Int32) Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IComparer GenericComparer @@ -2337,6 +2450,20 @@ Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Equality[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThanOrEqual[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThan[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Inequality[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThanOrEqual[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThan[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.String ToString() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.Type GetType() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Max[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Min[T](T, T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) @@ -2414,6 +2541,7 @@ Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object) Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T) Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) Microsoft.FSharp.Core.Operators: Boolean op_GreaterThanOrEqual[T](T, T) @@ -2443,8 +2571,10 @@ Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Collections.FSharpList`1[T] op Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeLeft[T2,T3,T1](Microsoft.FSharp.Core.FSharpFunc`2[T2,T3], Microsoft.FSharp.Core.FSharpFunc`2[T1,T2]) Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeRight[T1,T2,T3](Microsoft.FSharp.Core.FSharpFunc`2[T1,T2], Microsoft.FSharp.Core.FSharpFunc`2[T2,T3]) Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[System.String] FailurePattern(System.Exception) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[T] TryUnbox[T](System.Object) Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpRef`1[T] Ref[T](T) Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Checked +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+NonStructuralComparison Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+OperatorIntrinsics Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Unchecked Microsoft.FSharp.Core.Operators: SByte ToSByte[T](T) @@ -2461,7 +2591,7 @@ Microsoft.FSharp.Core.Operators: System.Exception Failure(System.String) Microsoft.FSharp.Core.Operators: System.IO.TextReader ConsoleIn[T]() Microsoft.FSharp.Core.Operators: System.IO.TextWriter ConsoleError[T]() Microsoft.FSharp.Core.Operators: System.IO.TextWriter ConsoleOut[T]() -Microsoft.FSharp.Core.Operators: System.Object Box[T](T)" + +Microsoft.FSharp.Core.Operators: System.Object Box[T](T)" + #if DEBUG @" Microsoft.FSharp.Core.Operators: System.RuntimeMethodHandle MethodHandleOf[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult])" + @@ -2548,6 +2678,7 @@ Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Microsoft.F Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.String ToString() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: TResult Invoke(T1, T2) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Void .ctor() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: FSharpFunc`4 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Int32 GetHashCode() @@ -2555,6 +2686,7 @@ Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Microsof Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.String ToString() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: TResult Invoke(T1, T2, T3) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Void .ctor() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: FSharpFunc`5 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]]) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Int32 GetHashCode() @@ -2562,6 +2694,7 @@ Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Micro Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.String ToString() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: TResult Invoke(T1, T2, T3, T4) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Void .ctor() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: FSharpFunc`6 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]]) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Int32 GetHashCode() @@ -2569,6 +2702,7 @@ Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Mi Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.String ToString() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: TResult Invoke(T1, T2, T3, T4, T5) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Void .ctor() Microsoft.FSharp.Core.OptimizedClosures: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult] @@ -2587,9 +2721,14 @@ Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfNullable[T](System.Nullable`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfObj[T](T) +Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: System.String ToString() Microsoft.FSharp.Core.OptionModule: System.Type GetType() Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: T ToObj[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpOption`1[T], TState) Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T]) @@ -2653,14 +2792,17 @@ Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IncludeValue Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean get_IncludeValue() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object TypeId Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor(Boolean) Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) @@ -2721,6 +2863,7 @@ Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) +Microsoft.FSharp.Core.StringModule: System.String Filter(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) @@ -2820,15 +2963,19 @@ Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.Type GetType() Microsoft.FSharp.Linq.NullableModule: Boolean Equals(System.Object) Microsoft.FSharp.Linq.NullableModule: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToByte[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToUInt8[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Char] ToChar[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Decimal] ToDecimal[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Double] ToDouble[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Double] ToFloat[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int16] ToInt16[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int32] ToInt32[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int32] ToInt[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int64] ToInt64[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.IntPtr] ToIntPtr[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.SByte] ToInt8[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.SByte] ToSByte[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Single] ToFloat32[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Single] ToSingle[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt16] ToUInt16[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt32] ToUInt32[T](System.Nullable`1[T]) @@ -3063,6 +3210,7 @@ Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Void .ctor(K, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Boolean Equals(System.Object) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr SubstHelperRaw(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr`1[T] SubstHelper[T](Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression QuotationToExpression(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] ImplicitExpressionConversionHelper[T](T) @@ -3094,6 +3242,7 @@ Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpO Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] BoolPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Byte] BytePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Char] CharPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Decimal] DecimalPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Double] DoublePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int16] Int16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] Int32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -3130,6 +3279,7 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr C Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Coerce(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr DefaultValue(System.Type) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Deserialize(System.Type, Microsoft.FSharp.Collections.FSharpList`1[System.Type], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr], Byte[]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Deserialize40(System.Type, System.Type[], System.Type[], Microsoft.FSharp.Quotations.FSharpExpr[], Byte[]) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(System.Reflection.FieldInfo) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldSet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo, Microsoft.FSharp.Quotations.FSharpExpr) @@ -3150,6 +3300,8 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr P Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Quote(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr QuoteRaw(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr QuoteTyped(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Sequential(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Substitute(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr]]) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TryFinally(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) @@ -3158,12 +3310,16 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr T Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TypeTest(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr UnionCaseTest(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Reflection.UnionCaseInfo) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value(System.Object, System.Type) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ValueWithName(System.Object, System.Type, System.String) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ValueWithName[T](T, System.String) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value[T](T) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Var(Microsoft.FSharp.Quotations.FSharpVar) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr VarSet(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr WhileLoop(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr WithValue(System.Object, System.Type, Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] Cast[T](Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] GlobalVar[T](System.String) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] WithValue[T](T, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString(Boolean) @@ -3171,6 +3327,7 @@ Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) +Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[], System.Type[]) Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Int32 GetHashCode() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes @@ -3201,6 +3358,8 @@ Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuoteRawPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuoteTypedPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpVar] VarPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]],Microsoft.FSharp.Quotations.FSharpExpr]] LetRecursivePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.FieldInfo]] FieldGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -3225,6 +3384,8 @@ Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1 Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] PropertyGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] IfThenElsePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] LetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.Type,Microsoft.FSharp.Quotations.FSharpExpr]] WithValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.Type,System.String]] ValueWithNamePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar],Microsoft.FSharp.Quotations.FSharpExpr]] NewDelegatePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Quotations.FSharpExpr]] PropertySetPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -3314,22 +3475,4 @@ Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type DeclaringType Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type GetType() Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType() " - let normalize (s:string) = - s.Replace("\r\n\r\n", "\r\n").Replace("\r\n", "\n").Trim([|'\r';'\n'|]) - - let expected = - expectedSurfaceArea |> normalize - - let act = actual.ToString() |> normalize - if expected <> act then - let mutable indexFirstDiff = 0 - while indexFirstDiff < expected.Length && expected.[indexFirstDiff] = act.[indexFirstDiff] do - indexFirstDiff <- indexFirstDiff + 1 - printfn "First diff at char %d" indexFirstDiff - printfn "Next bit is" - printfn "Exp: %s" (expected.Substring(indexFirstDiff, 400).Replace("\n"," ")) - printfn "Act: %s" (act.Substring(indexFirstDiff, 400).Replace("\n"," ")) - printfn "Full actual below" - printfn "" - printfn "%s" act - Assert.AreEqual(expected, act) + SurfaceArea.verify expected "net40" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__)) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable259.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable259.fs new file mode 100644 index 00000000000..2114a808c20 --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable259.fs @@ -0,0 +1,3462 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace FSharp.Core.Unittests.Portable.SurfaceArea + +open NUnit.Framework +open FSharp.Core.Unittests.LibraryTestFx + +[] +type SurfaceAreaTest() = + [] + member this.VerifyArea() = + let expected = @" +Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.Array2DModule: Int32 Length1[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: Int32 Length2[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: System.String ToString() +Microsoft.FSharp.Collections.Array2DModule: System.Type GetType() +Microsoft.FSharp.Collections.Array2DModule: T Get[T](T[,], Int32, Int32) +Microsoft.FSharp.Collections.Array2DModule: TResult[,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]], T[,]) +Microsoft.FSharp.Collections.Array2DModule: TResult[,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,]) +Microsoft.FSharp.Collections.Array2DModule: T[,] Copy[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: T[,] CreateBased[T](Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.Array2DModule: T[,] Create[T](Int32, Int32, T) +Microsoft.FSharp.Collections.Array2DModule: T[,] InitializeBased[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]) +Microsoft.FSharp.Collections.Array2DModule: T[,] Initialize[T](Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]) +Microsoft.FSharp.Collections.Array2DModule: T[,] Rebase[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: T[,] ZeroCreateBased[T](Int32, Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array2DModule: T[,] ZeroCreate[T](Int32, Int32) +Microsoft.FSharp.Collections.Array2DModule: Void CopyTo[T](T[,], Int32, Int32, T[,], Int32, Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array2DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]], T[,]) +Microsoft.FSharp.Collections.Array2DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,]) +Microsoft.FSharp.Collections.Array2DModule: Void Set[T](T[,], Int32, Int32, T) +Microsoft.FSharp.Collections.Array3DModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.Array3DModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.Array3DModule: Int32 Length1[T](T[,,]) +Microsoft.FSharp.Collections.Array3DModule: Int32 Length2[T](T[,,]) +Microsoft.FSharp.Collections.Array3DModule: Int32 Length3[T](T[,,]) +Microsoft.FSharp.Collections.Array3DModule: System.String ToString() +Microsoft.FSharp.Collections.Array3DModule: System.Type GetType() +Microsoft.FSharp.Collections.Array3DModule: T Get[T](T[,,], Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array3DModule: TResult[,,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]]], T[,,]) +Microsoft.FSharp.Collections.Array3DModule: TResult[,,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,,]) +Microsoft.FSharp.Collections.Array3DModule: T[,,] Create[T](Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.Array3DModule: T[,,] Initialize[T](Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]) +Microsoft.FSharp.Collections.Array3DModule: T[,,] ZeroCreate[T](Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array3DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]]], T[,,]) +Microsoft.FSharp.Collections.Array3DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,,]) +Microsoft.FSharp.Collections.Array3DModule: Void Set[T](T[,,], Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.Array4DModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.Array4DModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.Array4DModule: Int32 Length1[T](T[,,,]) +Microsoft.FSharp.Collections.Array4DModule: Int32 Length2[T](T[,,,]) +Microsoft.FSharp.Collections.Array4DModule: Int32 Length3[T](T[,,,]) +Microsoft.FSharp.Collections.Array4DModule: Int32 Length4[T](T[,,,]) +Microsoft.FSharp.Collections.Array4DModule: System.String ToString() +Microsoft.FSharp.Collections.Array4DModule: System.Type GetType() +Microsoft.FSharp.Collections.Array4DModule: T Get[T](T[,,,], Int32, Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]]) +Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.ArrayModule: Boolean Contains[T](T, T[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[], T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.String ToString() +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[System.Int32,T][] Indexed[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T,T][] Pairwise[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] Zip[T1,T2](T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1[],T2[]] Unzip[T1,T2](System.Tuple`2[T1,T2][]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TKey,System.Int32][] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TKey,T[]][] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TResult[],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], T[], TState) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TResult[],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] SplitAt[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) +Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() +Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T ExactlyOne[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Get[T](T[], Int32) +Microsoft.FSharp.Collections.ArrayModule: T Head[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T Item[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T Last[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Max[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Min[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Sum[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], T1[], T2[], T3[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], T1[], T2[], TState) +Microsoft.FSharp.Collections.ArrayModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], T[], TState) +Microsoft.FSharp.Collections.ArrayModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, T[]) +Microsoft.FSharp.Collections.ArrayModule: TState[] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], T[], TState) +Microsoft.FSharp.Collections.ArrayModule: TState[] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Append[T](T[], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Concat[T](System.Collections.Generic.IEnumerable`1[T[]]) +Microsoft.FSharp.Collections.ArrayModule: T[] Copy[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Create[T](Int32, T) +Microsoft.FSharp.Collections.ArrayModule: T[] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Distinct[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Empty[T]() +Microsoft.FSharp.Collections.ArrayModule: T[] Except[T](System.Collections.Generic.IEnumerable`1[T], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] GetSubArray[T](T[], Int32, Int32) +Microsoft.FSharp.Collections.ArrayModule: T[] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) +Microsoft.FSharp.Collections.ArrayModule: T[] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ArrayModule: T[] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.ArrayModule: T[] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Replicate[T](Int32, T) +Microsoft.FSharp.Collections.ArrayModule: T[] Reverse[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Singleton[T](T) +Microsoft.FSharp.Collections.ArrayModule: T[] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Skip[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortDescending[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Sort[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Tail[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Take[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Truncate[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Unfold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) +Microsoft.FSharp.Collections.ArrayModule: T[] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] ZeroCreate[T](Int32) +Microsoft.FSharp.Collections.ArrayModule: T[][] ChunkBySize[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[][] SplitInto[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[][] Windowed[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: Void CopyTo[T](T[], Int32, T[], Int32, Int32) +Microsoft.FSharp.Collections.ArrayModule: Void Fill[T](T[], Int32, Int32, T) +Microsoft.FSharp.Collections.ArrayModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[]) +Microsoft.FSharp.Collections.ArrayModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[]) +Microsoft.FSharp.Collections.ArrayModule: Void Set[T](T[], Int32, T) +Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) +Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) +Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() +Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) +Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] NonStructural[T]() +Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() +Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() +Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Cons +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Empty +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 GetHashCode() +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.String ToString() +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.Type GetType() +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean IsCons +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean IsEmpty +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean get_IsCons() +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean get_IsEmpty() +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 CompareTo(Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 Length +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 Tag +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 get_Length() +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 get_Tag() +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1+Tags[T] +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Cons(T, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Empty +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] GetSlice(Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Tail +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] TailOrNull +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Empty() +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Tail() +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_TailOrNull() +Microsoft.FSharp.Collections.FSharpList`1[T]: System.String ToString() +Microsoft.FSharp.Collections.FSharpList`1[T]: System.Type GetType() +Microsoft.FSharp.Collections.FSharpList`1[T]: T Head +Microsoft.FSharp.Collections.FSharpList`1[T]: T HeadOrDefault +Microsoft.FSharp.Collections.FSharpList`1[T]: T Item [Int32] +Microsoft.FSharp.Collections.FSharpList`1[T]: T get_Head() +Microsoft.FSharp.Collections.FSharpList`1[T]: T get_HeadOrDefault() +Microsoft.FSharp.Collections.FSharpList`1[T]: T get_Item(Int32) +Microsoft.FSharp.Collections.FSharpList`1[T]: Void .ctor(T, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean ContainsKey(TKey) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean IsEmpty +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean get_IsEmpty() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 Count +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 GetHashCode() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 get_Count() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Add(TKey, TValue) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Remove(TKey) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Core.FSharpOption`1[TValue] TryFind(TKey) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.String ToString() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.Type GetType() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue Item [TKey] +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue get_Item(TKey) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Void .ctor(System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean Contains(T) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsEmpty +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsProperSubsetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsProperSupersetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsSubsetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsSupersetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean get_IsEmpty() +Microsoft.FSharp.Collections.FSharpSet`1[T]: Int32 Count +Microsoft.FSharp.Collections.FSharpSet`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Collections.FSharpSet`1[T]: Int32 get_Count() +Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] Add(T) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] Remove(T) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Addition(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Subtraction(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: System.String ToString() +Microsoft.FSharp.Collections.FSharpSet`1[T]: System.Type GetType() +Microsoft.FSharp.Collections.FSharpSet`1[T]: T MaximumElement +Microsoft.FSharp.Collections.FSharpSet`1[T]: T MinimumElement +Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MaximumElement() +Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MinimumElement() +Microsoft.FSharp.Collections.FSharpSet`1[T]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] NonStructural[T]() +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() +Microsoft.FSharp.Collections.HashIdentity: System.String ToString() +Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() +Microsoft.FSharp.Collections.ListModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] ChunkBySize[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] SplitInto[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] Windowed[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Int32,T]] Indexed[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T,T]] Pairwise[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]] Zip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,Microsoft.FSharp.Collections.FSharpList`1[T]]] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,System.Int32]] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]] Zip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], Microsoft.FSharp.Collections.FSharpList`1[T3]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Collections.FSharpList`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], Microsoft.FSharp.Collections.FSharpList`1[T3]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TState] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Append[T](Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Concat[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpList`1[T]]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Distinct[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Empty[T]() +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Except[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfArray[T](T[]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Replicate[T](Int32, T) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Reverse[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Singleton[T](T) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Skip[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortDescending[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Sort[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Tail[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Take[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Truncate[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Unfold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.String ToString() +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] SplitAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) +Microsoft.FSharp.Collections.ListModule: System.Type GetType() +Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T ExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Get[T](Microsoft.FSharp.Collections.FSharpList`1[T], Int32) +Microsoft.FSharp.Collections.ListModule: T Head[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Item[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Last[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Max[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Min[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Sum[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], TState) +Microsoft.FSharp.Collections.ListModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) +Microsoft.FSharp.Collections.ListModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.MapModule: Boolean ContainsKey[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.MapModule: Boolean Exists[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Boolean ForAll[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Boolean IsEmpty[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]] ToList[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TResult] Map[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Add[TKey,T](TKey, T, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Empty[TKey,T]() +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Filter[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] OfArray[TKey,T](System.Tuple`2[TKey,T][]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] OfList[TKey,T](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] OfSeq[TKey,T](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Remove[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TKey] TryFindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]] ToSeq[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.String ToString() +Microsoft.FSharp.Collections.MapModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[TKey,T],Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]] Partition[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.Tuple`2[TKey,T][] ToArray[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.Type GetType() +Microsoft.FSharp.Collections.MapModule: T Find[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: TKey FindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T], TState) +Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.SeqModule: Boolean Contains[T](T, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.Int32,T]] Indexed[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T,T]] Pairwise[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T1,T2]] Zip[T1,T2](System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,System.Collections.Generic.IEnumerable`1[T]]] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,System.Int32]] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`3[T1,T2,T3]] Zip3[T1,T2,T3](System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], System.Collections.Generic.IEnumerable`1[T3]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Collect[T,TCollection,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], System.Collections.Generic.IEnumerable`1[T3]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TState] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], System.Collections.Generic.IEnumerable`1[T], TState) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] ChunkBySize[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] SplitInto[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] Windowed[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Append[T](System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Cache[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Cast[T](System.Collections.IEnumerable) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Concat[TCollection,T](System.Collections.Generic.IEnumerable`1[TCollection]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Delay[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Collections.Generic.IEnumerable`1[T]]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Distinct[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Empty[T]() +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Except[T](System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] InitializeInfinite[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfArray[T](T[]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] ReadOnly[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Replicate[T](Int32, T) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Reverse[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Singleton[T](T) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Skip[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortDescending[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Sort[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Tail[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Take[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.String ToString() +Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], System.Collections.Generic.IEnumerable`1[T], TState) +Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Type GetType() +Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T ExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Get[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Head[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Item[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Last[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Max[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Min[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Sum[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], TState) +Microsoft.FSharp.Collections.SeqModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], System.Collections.Generic.IEnumerable`1[T], TState) +Microsoft.FSharp.Collections.SeqModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T[] ToArray[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.SetModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean IsProperSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean IsProperSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean IsSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean IsSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Int32 Count[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Add[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Difference[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Empty[T]() +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] IntersectMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Intersect[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] OfArray[T](T[]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Remove[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Singleton[T](T) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] UnionMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Union[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: System.String ToString() +Microsoft.FSharp.Collections.SetModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpSet`1[T],Microsoft.FSharp.Collections.FSharpSet`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: System.Type GetType() +Microsoft.FSharp.Collections.SetModule: T MaxElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: T MinElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpSet`1[T], TState) +Microsoft.FSharp.Collections.SetModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Control.CommonExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Control.CommonExtensions: Int32 GetHashCode() +Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncWrite(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncReadBytes(System.IO.Stream, Int32) +Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Int32] AsyncRead(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.CommonExtensions: System.IDisposable SubscribeToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.CommonExtensions: System.String ToString() +Microsoft.FSharp.Control.CommonExtensions: System.Type GetType() +Microsoft.FSharp.Control.CommonExtensions: Void AddToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.EventModule: Boolean Equals(System.Object) +Microsoft.FSharp.Control.EventModule: Int32 GetHashCode() +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[T,T]],System.Tuple`2[T,T]] Pairwise[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Choose[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Map[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Scan[TResult,T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Filter[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Merge[TDel1,T,TDel2](Microsoft.FSharp.Control.IEvent`2[TDel1,T], Microsoft.FSharp.Control.IEvent`2[TDel2,T]) +Microsoft.FSharp.Control.EventModule: System.String ToString() +Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult1],TResult1],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult2],TResult2]] Split[T,TResult1,TResult2,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T]] Partition[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: System.Type GetType() +Microsoft.FSharp.Control.EventModule: Void Add[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AwaitTask(System.Threading.Tasks.Task) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Ignore[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Sleep(Int32) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToContext(System.Threading.SynchronizationContext) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToNewThread() +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToThreadPool() +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Boolean] AwaitIAsyncResult(System.IAsyncResult, Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Boolean] AwaitWaitHandle(System.Threading.WaitHandle, Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.IDisposable] OnCancel(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Threading.CancellationToken] CancellationToken +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Threading.CancellationToken] get_CancellationToken() +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Threading.Tasks.Task`1[T]] StartChildAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.Tasks.TaskCreationOptions]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T[]] Parallel[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] AwaitEvent[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] AwaitTask[T](System.Threading.Tasks.Task`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[TArg1,TArg2,TArg3,T](TArg1, TArg2, TArg3, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`5[TArg1,TArg2,TArg3,System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[TArg1,TArg2,T](TArg1, TArg2, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`4[TArg1,TArg2,System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[TArg1,T](TArg1, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg1,System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromContinuations[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]],Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] TryCancelled[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsync: System.String ToString() +Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken DefaultCancellationToken +Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken get_DefaultCancellationToken() +Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.Tasks.TaskCreationOptions], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsync: System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg,System.AsyncCallback,System.Object],System.IAsyncResult],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,Microsoft.FSharp.Core.Unit]] AsBeginEnd[TArg,T](Microsoft.FSharp.Core.FSharpFunc`2[TArg,Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsync: System.Type GetType() +Microsoft.FSharp.Control.FSharpAsync: T RunSynchronously[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsync: Void CancelDefaultToken() +Microsoft.FSharp.Control.FSharpAsync: Void Start(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsync: Void StartImmediate(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsync: Void StartWithContinuations[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] For[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] While(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Zero() +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[TResult] Bind[T,TResult](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[TResult]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[TResult] Using[T,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[TResult]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Combine[T](Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Delay[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] ReturnFrom[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Return[T](T) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryFinally[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryWith[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: System.String ToString() +Microsoft.FSharp.Control.FSharpAsyncBuilder: System.Type GetType() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.String ToString() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.Type GetType() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Void Reply(TReply) +Microsoft.FSharp.Control.FSharpAsync`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsync`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsync`1[T]: System.String ToString() +Microsoft.FSharp.Control.FSharpAsync`1[T]: System.Type GetType() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] Publish +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] get_Publish() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.String ToString() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.Type GetType() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void .ctor() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void Trigger(System.Object[]) +Microsoft.FSharp.Control.FSharpEvent`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpEvent`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Publish +Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] get_Publish() +Microsoft.FSharp.Control.FSharpEvent`1[T]: System.String ToString() +Microsoft.FSharp.Control.FSharpEvent`1[T]: System.Type GetType() +Microsoft.FSharp.Control.FSharpEvent`1[T]: Void .ctor() +Microsoft.FSharp.Control.FSharpEvent`1[T]: Void Trigger(T) +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] Publish +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] get_Publish() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.String ToString() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.Type GetType() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void .ctor() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void Trigger(System.Object, TArgs) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Delegate[] GetInvocationList() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.IAsyncResult BeginInvoke(System.Object, T, System.AsyncCallback, System.Object) +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Clone() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object DynamicInvoke(System.Object[]) +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Target +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object get_Target() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo Method +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo get_Method() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.String ToString() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Type GetType() +Microsoft.FSharp.Control.FSharpHandler`1[T]: Void .ctor(System.Object, IntPtr) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Void EndInvoke(System.IAsyncResult) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Void Invoke(System.Object, T) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 CurrentQueueLength +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 DefaultTimeout +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_CurrentQueueLength() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_DefaultTimeout() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TMsg]] TryReceive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TReply]] PostAndTryAsyncReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] TryScan[T](Microsoft.FSharp.Core.FSharpFunc`2[TMsg,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[TMsg] Receive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[TReply] PostAndAsyncReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[T] Scan[T](Microsoft.FSharp.Core.FSharpFunc`2[TMsg,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpHandler`1[System.Exception] Error +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg] Start(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Core.FSharpOption`1[TReply] TryPostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.String ToString() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.Type GetType() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: TReply PostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Post(TMsg) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Start() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void add_Error(Microsoft.FSharp.Control.FSharpHandler`1[System.Exception]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void remove_Error(Microsoft.FSharp.Control.FSharpHandler`1[System.Exception]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void set_DefaultTimeout(Int32) +Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void AddHandler(TDelegate) +Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelegate) +Microsoft.FSharp.Control.LazyExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Control.LazyExtensions: Int32 GetHashCode() +Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T) +Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) +Microsoft.FSharp.Control.LazyExtensions: System.String ToString() +Microsoft.FSharp.Control.LazyExtensions: System.Type GetType() +Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T]) +Microsoft.FSharp.Control.ObservableModule: Boolean Equals(System.Object) +Microsoft.FSharp.Control.ObservableModule: Int32 GetHashCode() +Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Scan[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Merge[T](System.IObservable`1[T], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.String ToString() +Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[TResult1],System.IObservable`1[TResult2]] Split[T,TResult1,TResult2](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[T],System.IObservable`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.Type GetType() +Microsoft.FSharp.Control.ObservableModule: Void Add[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) +Microsoft.FSharp.Control.WebExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Control.WebExtensions: Int32 GetHashCode() +Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Net.WebResponse] AsyncGetResponse(System.Net.WebRequest) +Microsoft.FSharp.Control.WebExtensions: System.String ToString() +Microsoft.FSharp.Control.WebExtensions: System.Type GetType() +Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AbstractClassAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AbstractClassAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AbstractClassAttribute: System.Object TypeId +Microsoft.FSharp.Core.AbstractClassAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AbstractClassAttribute: System.String ToString() +Microsoft.FSharp.Core.AbstractClassAttribute: System.Type GetType() +Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Value +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean get_Value() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object TypeId +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AutoOpenAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AutoOpenAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AutoOpenAttribute: System.Object TypeId +Microsoft.FSharp.Core.AutoOpenAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AutoOpenAttribute: System.String Path +Microsoft.FSharp.Core.AutoOpenAttribute: System.String ToString() +Microsoft.FSharp.Core.AutoOpenAttribute: System.String get_Path() +Microsoft.FSharp.Core.AutoOpenAttribute: System.Type GetType() +Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor() +Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Value +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean get_Value() +Microsoft.FSharp.Core.AutoSerializableAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object TypeId +Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AutoSerializableAttribute: System.String ToString() +Microsoft.FSharp.Core.AutoSerializableAttribute: System.Type GetType() +Microsoft.FSharp.Core.AutoSerializableAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.CLIEventAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CLIEventAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CLIEventAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CLIEventAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CLIEventAttribute: System.Object TypeId +Microsoft.FSharp.Core.CLIEventAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CLIEventAttribute: System.String ToString() +Microsoft.FSharp.Core.CLIEventAttribute: System.Type GetType() +Microsoft.FSharp.Core.CLIEventAttribute: Void .ctor() +Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CLIMutableAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CLIMutableAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CLIMutableAttribute: System.Object TypeId +Microsoft.FSharp.Core.CLIMutableAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CLIMutableAttribute: System.String ToString() +Microsoft.FSharp.Core.CLIMutableAttribute: System.Type GetType() +Microsoft.FSharp.Core.CLIMutableAttribute: Void .ctor() +Microsoft.FSharp.Core.ClassAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ClassAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ClassAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ClassAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ClassAttribute: System.Object TypeId +Microsoft.FSharp.Core.ClassAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ClassAttribute: System.String ToString() +Microsoft.FSharp.Core.ClassAttribute: System.Type GetType() +Microsoft.FSharp.Core.ClassAttribute: Void .ctor() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object TypeId +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.String ToString() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Type GetType() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] Counts +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] get_Counts() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Void .ctor(Int32[]) +Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 SequenceNumber +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 VariantNumber +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_SequenceNumber() +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_VariantNumber() +Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags SourceConstructFlags +Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ResourceName +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String get_ResourceName() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] TypeDefinitions +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] get_TypeDefinitions() +Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) +Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) +Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) +Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(System.String, System.Type[]) +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags Flags +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags get_Flags() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Void .ctor(Microsoft.FSharp.Core.CompilationRepresentationFlags) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean HasFlag(System.Enum) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 value__ +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Event +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Instance +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags ModuleSuffix +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags None +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Static +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags UseNullAsTrueValue +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString() +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.IFormatProvider) +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String) +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String, System.IFormatProvider) +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.Type GetType() +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.TypeCode GetTypeCode() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String SourceName +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String get_SourceName() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompiledNameAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompiledNameAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompiledNameAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompiledNameAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompiledNameAttribute: System.String CompiledName +Microsoft.FSharp.Core.CompiledNameAttribute: System.String ToString() +Microsoft.FSharp.Core.CompiledNameAttribute: System.String get_CompiledName() +Microsoft.FSharp.Core.CompiledNameAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompiledNameAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsError +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsHidden +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsError() +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsHidden() +Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 MessageNumber +Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 get_MessageNumber() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.String Message +Microsoft.FSharp.Core.CompilerMessageAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.String get_Message() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerMessageAttribute: Void .ctor(System.String, Int32) +Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsError(Boolean) +Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsHidden(Boolean) +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean CheckClose +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean get_CheckClose() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GenerateNext(System.Collections.Generic.IEnumerable`1[T] ByRef) +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Collections.Generic.IEnumerator`1[T] GetFreshEnumerator() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T LastGenerated +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T get_LastGenerated() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void Close() +Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace[] GetNestedNamespaces() +Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.String NamespaceName +Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.String get_NamespaceName() +Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.Type ResolveTypeName(System.String) +Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.Type[] GetTypes() +Microsoft.FSharp.Core.CompilerServices.ITypeProvider2: System.Reflection.MethodBase ApplyStaticArgumentsForMethod(System.Reflection.MethodBase, System.String, System.Object[]) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider2: System.Reflection.ParameterInfo[] GetStaticParametersForMethod(System.Reflection.MethodBase) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Byte[] GetGeneratedAssemblyContents(System.Reflection.Assembly) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace[] GetNamespaces() +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Microsoft.FSharp.Quotations.FSharpExpr GetInvokerExpression(System.Reflection.MethodBase, Microsoft.FSharp.Quotations.FSharpExpr[]) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.EventHandler Invalidate +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Reflection.ParameterInfo[] GetStaticParameters(System.Type) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Type ApplyStaticArguments(System.Type, System.String[], System.Object[]) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void add_Invalidate(System.EventHandler) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void remove_Invalidate(System.EventHandler) +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.MeasureOne: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.MeasureOne: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] CreateEvent[TDelegate,TArgs](Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpFunc`2[TArgs,Microsoft.FSharp.Core.Unit]],TDelegate]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateFromFunctions[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateUsing[T,TCollection,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateThenFinally[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String AssemblyName +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String get_AssemblyName() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsHostedExecution +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsInvalidationSupported +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean SystemRuntimeContainsType(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsHostedExecution() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsInvalidationSupported() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ResolutionFolder +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String RuntimeAssembly +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String TemporaryFolder +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_ResolutionFolder() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_RuntimeAssembly() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_TemporaryFolder() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] ReferencedAssemblies +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] get_ReferencedAssemblies() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version SystemRuntimeAssemblyVersion +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version get_SystemRuntimeAssemblyVersion() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean]) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_IsHostedExecution(Boolean) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_IsInvalidationSupported(Boolean) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_ReferencedAssemblies(System.String[]) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_ResolutionFolder(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_RuntimeAssembly(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_SystemRuntimeAssemblyVersion(System.Version) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_TemporaryFolder(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Column +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Line +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Column() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Line() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String FilePath +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String get_FilePath() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Column(Int32) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_FilePath(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Line(Int32) +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean HasFlag(System.Enum) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 value__ +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes IsErased +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes SuppressRelocate +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.IFormatProvider) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String, System.IFormatProvider) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.TypeCode GetTypeCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String CommentText +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String get_CommentText() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CustomComparisonAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object TypeId +Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CustomComparisonAttribute: System.String ToString() +Microsoft.FSharp.Core.CustomComparisonAttribute: System.Type GetType() +Microsoft.FSharp.Core.CustomComparisonAttribute: Void .ctor() +Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CustomEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CustomEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.CustomEqualityAttribute: System.Type GetType() +Microsoft.FSharp.Core.CustomEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean AllowIntoPattern +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeGroupJoin +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeJoin +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeZip +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpace +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpaceUsingBind +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_AllowIntoPattern() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeGroupJoin() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeJoin() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeZip() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpace() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpaceUsingBind() +Microsoft.FSharp.Core.CustomOperationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CustomOperationAttribute: System.Object TypeId +Microsoft.FSharp.Core.CustomOperationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CustomOperationAttribute: System.String JoinConditionWord +Microsoft.FSharp.Core.CustomOperationAttribute: System.String Name +Microsoft.FSharp.Core.CustomOperationAttribute: System.String ToString() +Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_JoinConditionWord() +Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_Name() +Microsoft.FSharp.Core.CustomOperationAttribute: System.Type GetType() +Microsoft.FSharp.Core.CustomOperationAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_AllowIntoPattern(Boolean) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeGroupJoin(Boolean) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeJoin(Boolean) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeZip(Boolean) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_JoinConditionWord(System.String) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpace(Boolean) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpaceUsingBind(Boolean) +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Value +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean get_Value() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object TypeId +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.String ToString() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Type GetType() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Check +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean get_Check() +Microsoft.FSharp.Core.DefaultValueAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.DefaultValueAttribute: System.Object TypeId +Microsoft.FSharp.Core.DefaultValueAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.DefaultValueAttribute: System.String ToString() +Microsoft.FSharp.Core.DefaultValueAttribute: System.Type GetType() +Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor() +Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.EntryPointAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.EntryPointAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.EntryPointAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.EntryPointAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.EntryPointAttribute: System.Object TypeId +Microsoft.FSharp.Core.EntryPointAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.EntryPointAttribute: System.String ToString() +Microsoft.FSharp.Core.EntryPointAttribute: System.Type GetType() +Microsoft.FSharp.Core.EntryPointAttribute: Void .ctor() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object TypeId +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.String ToString() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Type GetType() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Void .ctor() +Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ExperimentalAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ExperimentalAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ExperimentalAttribute: System.Object TypeId +Microsoft.FSharp.Core.ExperimentalAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ExperimentalAttribute: System.String Message +Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() +Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() +Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() +Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Byte ToByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Int32 GetHashCode() +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: SByte ToSByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.String ToString() +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.Type GetType() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Linq.QueryBuilder get_query() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Linq.QueryBuilder query +Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Single ToSingle[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IDictionary`2[TKey,TValue] CreateDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: System.String ToString() +Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Type GetType() +Microsoft.FSharp.Core.ExtraTopLevelOperators: T LazyPattern[T](System.Lazy`1[T]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToStringThenFail[T,TResult](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToString[T](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,System.String]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T SpliceExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T SpliceUntypedExpression[T](Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T[,] CreateArray2D[?,T](System.Collections.Generic.IEnumerable`1[?]) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean IsChoice1Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean IsChoice2Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean get_IsChoice1Of2() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean get_IsChoice2Of2() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean IsChoice1Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean IsChoice2Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean get_IsChoice1Of2() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean get_IsChoice2Of2() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice1Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice2Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean IsChoice1Of2 +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean IsChoice2Of2 +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean get_IsChoice1Of2() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean get_IsChoice2Of2() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2] +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2] +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2] +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice1Of2(T1) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice2Of2(T2) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean IsChoice1Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean IsChoice2Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean IsChoice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean get_IsChoice1Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean get_IsChoice2Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean get_IsChoice3Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean IsChoice1Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean IsChoice2Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean IsChoice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean get_IsChoice1Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean get_IsChoice2Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean get_IsChoice3Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean IsChoice1Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean IsChoice2Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean IsChoice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean get_IsChoice1Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean get_IsChoice2Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean get_IsChoice3Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 Item +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice1Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice2Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean IsChoice1Of3 +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean IsChoice2Of3 +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean IsChoice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean get_IsChoice1Of3() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean get_IsChoice2Of3() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean get_IsChoice3Of3() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3] +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3] +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3] +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3] +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice1Of3(T1) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice2Of3(T2) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice3Of3(T3) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 Item +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 Item +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 get_Item() +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4] +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4] +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4] +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4] +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4] +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice1Of4(T1) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice2Of4(T2) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice3Of4(T3) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice4Of4(T4) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 Item +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 Item +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 Item +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice1Of5(T1) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice2Of5(T2) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice3Of5(T3) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice4Of5(T4) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice5Of5(T5) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice1Of6(T1) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice2Of6(T2) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice3Of6(T3) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice4Of6(T4) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice5Of6(T5) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice6Of6(T6) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice1Of7(T1) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice2Of7(T2) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice3Of7(T3) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice4Of7(T4) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice5Of7(T5) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice6Of7(T6) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice7Of7(T7) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.String ToString() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Type GetType() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: TResult Invoke(T) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: V InvokeFast[V](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,V]], T, TResult) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Void .ctor() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: W InvokeFast[V,W](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,W]]], T, TResult, V) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: X InvokeFast[V,W,X](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,X]]]], T, TResult, V, W) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Y InvokeFast[V,W,X,Y](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,Microsoft.FSharp.Core.FSharpFunc`2[X,Y]]]]], T, TResult, V, W, X) +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Major +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Minor +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Release +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Major() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Minor() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Release() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object TypeId +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.String ToString() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Type GetType() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Void .ctor(Int32, Int32, Int32) +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 None +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 Some +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.Type GetType() +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean IsNone +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean IsSome +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean get_IsNone(Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean get_IsSome(Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 GetTag(Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1+Tags[T] +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] None +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Some(T) +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() +Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() +Microsoft.FSharp.Core.FSharpOption`1[T]: T Value +Microsoft.FSharp.Core.FSharpOption`1[T]: T get_Value() +Microsoft.FSharp.Core.FSharpOption`1[T]: Void .ctor(T) +Microsoft.FSharp.Core.FSharpRef`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpRef`1[T]) +Microsoft.FSharp.Core.FSharpRef`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpRef`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpRef`1[T]) +Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpRef`1[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpRef`1[T]: System.Type GetType() +Microsoft.FSharp.Core.FSharpRef`1[T]: T Value +Microsoft.FSharp.Core.FSharpRef`1[T]: T contents +Microsoft.FSharp.Core.FSharpRef`1[T]: T contents@ +Microsoft.FSharp.Core.FSharpRef`1[T]: T get_Value() +Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() +Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) +Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) +Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) +Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() +Microsoft.FSharp.Core.FSharpTypeFunc: System.String ToString() +Microsoft.FSharp.Core.FSharpTypeFunc: System.Type GetType() +Microsoft.FSharp.Core.FSharpTypeFunc: Void .ctor() +Microsoft.FSharp.Core.FuncConvert: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FuncConvert: Int32 GetHashCode() +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit] ToFSharpFunc[T](System.Action`1[T]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]] FuncFromTupled[T1,T2,T3,T4,T5,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`5[T1,T2,T3,T4,T5],TResult]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]] FuncFromTupled[T1,T2,T3,T4,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`4[T1,T2,T3,T4],TResult]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]] FuncFromTupled[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[T1,T2,T3],TResult]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FuncFromTupled[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[T1,T2],TResult]) +Microsoft.FSharp.Core.FuncConvert: System.String ToString() +Microsoft.FSharp.Core.FuncConvert: System.Type GetType() +Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.GeneralizableValueAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object TypeId +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.String ToString() +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Type GetType() +Microsoft.FSharp.Core.GeneralizableValueAttribute: Void .ctor() +Microsoft.FSharp.Core.InterfaceAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.InterfaceAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.InterfaceAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.InterfaceAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.InterfaceAttribute: System.Object TypeId +Microsoft.FSharp.Core.InterfaceAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.InterfaceAttribute: System.String ToString() +Microsoft.FSharp.Core.InterfaceAttribute: System.Type GetType() +Microsoft.FSharp.Core.InterfaceAttribute: Void .ctor() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Int32 GetHashCode() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String AddressOpNotFirstClassString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputArrayEmptyString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputMustBeNonNegativeString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputSequenceEmptyString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String NoNegateMinValueString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_AddressOpNotFirstClassString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputArrayEmptyString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputMustBeNonNegativeString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputSequenceEmptyString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_NoNegateMinValueString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple5[T1,T2,T3,T4,T5](System.Collections.IEqualityComparer, System.Tuple`5[T1,T2,T3,T4,T5], System.Tuple`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericEqualityERIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericEqualityIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericEqualityWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericGreaterOrEqualIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericGreaterThanIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericLessOrEqualIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericLessThanIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean PhysicalEqualityIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple2[T1,T2](System.Collections.IComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple3[T1,T2,T3](System.Collections.IComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple4[T1,T2,T3,T4](System.Collections.IComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple5[T1,T2,T3,T4,T5](System.Collections.IComparer, System.Tuple`5[T1,T2,T3,T4,T5], System.Tuple`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple5[T1,T2,T3,T4,T5](System.Collections.IEqualityComparer, System.Tuple`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonWithComparerIntrinsic[T](System.Collections.IComparer, T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashIntrinsic[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GetHashCode() +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 LimitedGenericHashIntrinsic[T](Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 PhysicalHashIntrinsic[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestFast[T](System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestGeneric[T](System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Char GetString(System.String, Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Int32 GetHashCode() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Decimal MakeDecimal(Int32, Int32, Int32, Boolean, Byte) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CheckThis[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CreateInstance[T]() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray2D[T](T[,], Int32, Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray3D[T](T[,,], Int32, Int32, Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray4D[T](T[,,,], Int32, Int32, Int32, Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray[T](T[], Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T UnboxFast[T](System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T UnboxGeneric[T](System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void Dispose[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void FailInit() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void FailStaticInit() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray2D[T](T[,], Int32, Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray3D[T](T[,,], Int32, Int32, Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray4D[T](T[,,,], Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray[T](T[], Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Or(Boolean, Boolean) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_Amp(Boolean, Boolean) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanAnd(Boolean, Boolean) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanOr(Boolean, Boolean) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Int32 GetHashCode() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: IntPtr op_IntegerAddressOf[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: T& op_AddressOf[T](T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityER[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityWithComparer[T](System.Collections.IEqualityComparer, T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEquality[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericGreaterOrEqual[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericGreaterThan[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericLessOrEqual[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericLessThan[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean PhysicalEquality[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Double FloatWithMeasure(Double) +Microsoft.FSharp.Core.LanguagePrimitives: Int16 Int16WithMeasure(Int16) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparisonWithComparer[T](System.Collections.IComparer, T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparison[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHashWithComparer[T](System.Collections.IEqualityComparer, T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHash[T](T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericLimitedHash[T](Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GetHashCode() +Microsoft.FSharp.Core.LanguagePrimitives: Int32 Int32WithMeasure(Int32) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 ParseInt32(System.String) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 PhysicalHash[T](T) +Microsoft.FSharp.Core.LanguagePrimitives: Int64 Int64WithMeasure(Int64) +Microsoft.FSharp.Core.LanguagePrimitives: Int64 ParseInt64(System.String) +Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings +Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+HashCompare +Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions +Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators +Microsoft.FSharp.Core.LanguagePrimitives: SByte SByteWithMeasure(SByte) +Microsoft.FSharp.Core.LanguagePrimitives: Single Float32WithMeasure(Single) +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IComparer`1[T] FastGenericComparerFromTable[T]() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IComparer`1[T] FastGenericComparer[T]() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastGenericEqualityComparerFromTable[T]() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastGenericEqualityComparer[T]() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastLimitedGenericEqualityComparer[T](Int32) +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IComparer GenericComparer +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IComparer get_GenericComparer() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer GenericEqualityComparer +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer GenericEqualityERComparer +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityComparer() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityERComparer() +Microsoft.FSharp.Core.LanguagePrimitives: System.Decimal DecimalWithMeasure(System.Decimal) +Microsoft.FSharp.Core.LanguagePrimitives: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives: T DivideByIntDynamic[T](T, Int32) +Microsoft.FSharp.Core.LanguagePrimitives: T DivideByInt[T](T, Int32) +Microsoft.FSharp.Core.LanguagePrimitives: T EnumToValue[TEnum,T](TEnum) +Microsoft.FSharp.Core.LanguagePrimitives: T GenericMaximum[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: T GenericMinimum[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: T GenericOneDynamic[T]() +Microsoft.FSharp.Core.LanguagePrimitives: T GenericOne[T]() +Microsoft.FSharp.Core.LanguagePrimitives: T GenericZeroDynamic[T]() +Microsoft.FSharp.Core.LanguagePrimitives: T GenericZero[T]() +Microsoft.FSharp.Core.LanguagePrimitives: TEnum EnumOfValue[T,TEnum](T) +Microsoft.FSharp.Core.LanguagePrimitives: TResult AdditionDynamic[T1,T2,TResult](T1, T2) +Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedAdditionDynamic[T1,T2,TResult](T1, T2) +Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedMultiplyDynamic[T1,T2,TResult](T1, T2) +Microsoft.FSharp.Core.LanguagePrimitives: TResult MultiplyDynamic[T1,T2,TResult](T1, T2) +Microsoft.FSharp.Core.LanguagePrimitives: UInt32 ParseUInt32(System.String) +Microsoft.FSharp.Core.LanguagePrimitives: UInt64 ParseUInt64(System.String) +Microsoft.FSharp.Core.LiteralAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LiteralAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.LiteralAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.LiteralAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.LiteralAttribute: System.Object TypeId +Microsoft.FSharp.Core.LiteralAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.LiteralAttribute: System.String ToString() +Microsoft.FSharp.Core.LiteralAttribute: System.Type GetType() +Microsoft.FSharp.Core.LiteralAttribute: Void .ctor() +Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object) +Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.MatchFailureException: Int32 Data1 +Microsoft.FSharp.Core.MatchFailureException: Int32 Data2 +Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode() +Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.MatchFailureException: Int32 HResult +Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data1() +Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data2() +Microsoft.FSharp.Core.MatchFailureException: Int32 get_HResult() +Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary Data +Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary get_Data() +Microsoft.FSharp.Core.MatchFailureException: System.Exception GetBaseException() +Microsoft.FSharp.Core.MatchFailureException: System.Exception InnerException +Microsoft.FSharp.Core.MatchFailureException: System.Exception get_InnerException() +Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase TargetSite +Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase get_TargetSite() +Microsoft.FSharp.Core.MatchFailureException: System.String Data0 +Microsoft.FSharp.Core.MatchFailureException: System.String HelpLink +Microsoft.FSharp.Core.MatchFailureException: System.String Message +Microsoft.FSharp.Core.MatchFailureException: System.String Source +Microsoft.FSharp.Core.MatchFailureException: System.String StackTrace +Microsoft.FSharp.Core.MatchFailureException: System.String ToString() +Microsoft.FSharp.Core.MatchFailureException: System.String get_Data0() +Microsoft.FSharp.Core.MatchFailureException: System.String get_HelpLink() +Microsoft.FSharp.Core.MatchFailureException: System.String get_Message() +Microsoft.FSharp.Core.MatchFailureException: System.String get_Source() +Microsoft.FSharp.Core.MatchFailureException: System.String get_StackTrace() +Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() +Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() +Microsoft.FSharp.Core.MatchFailureException: Void .ctor() +Microsoft.FSharp.Core.MatchFailureException: Void .ctor(System.String, Int32, Int32) +Microsoft.FSharp.Core.MatchFailureException: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) +Microsoft.FSharp.Core.MatchFailureException: Void set_HelpLink(System.String) +Microsoft.FSharp.Core.MatchFailureException: Void set_Source(System.String) +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object TypeId +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.String ToString() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Type GetType() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Void .ctor() +Microsoft.FSharp.Core.MeasureAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.MeasureAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.MeasureAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.MeasureAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.MeasureAttribute: System.Object TypeId +Microsoft.FSharp.Core.MeasureAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.MeasureAttribute: System.String ToString() +Microsoft.FSharp.Core.MeasureAttribute: System.Type GetType() +Microsoft.FSharp.Core.MeasureAttribute: Void .ctor() +Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NoComparisonAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.NoComparisonAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.NoComparisonAttribute: System.Object TypeId +Microsoft.FSharp.Core.NoComparisonAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.NoComparisonAttribute: System.String ToString() +Microsoft.FSharp.Core.NoComparisonAttribute: System.Type GetType() +Microsoft.FSharp.Core.NoComparisonAttribute: Void .ctor() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object TypeId +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.String ToString() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Type GetType() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Void .ctor() +Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NoEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.NoEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.NoEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.NoEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.NoEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.NoEqualityAttribute: System.Type GetType() +Microsoft.FSharp.Core.NoEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Int32 GetHashCode() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromInt64Dynamic(Int64) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromStringDynamic(System.String) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.String ToString() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Type GetType() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt32[T](Int32) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt64[T](Int64) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromOne[T]() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromString[T](System.String) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromZero[T]() +Microsoft.FSharp.Core.NumericLiterals: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NumericLiterals: Int32 GetHashCode() +Microsoft.FSharp.Core.NumericLiterals: Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI +Microsoft.FSharp.Core.NumericLiterals: System.String ToString() +Microsoft.FSharp.Core.NumericLiterals: System.Type GetType() +Microsoft.FSharp.Core.Operators+Checked: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T) +Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T) +Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16[T](T) +Microsoft.FSharp.Core.Operators+Checked: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt32[T](T) +Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt[T](T) +Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T) +Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T) +Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T) +Microsoft.FSharp.Core.Operators+Checked: System.String ToString() +Microsoft.FSharp.Core.Operators+Checked: System.Type GetType() +Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation[T](T) +Microsoft.FSharp.Core.Operators+Checked: T3 op_Addition[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators+Checked: T3 op_Multiply[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators+Checked: T3 op_Subtraction[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) +Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) +Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) +Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Equality[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThanOrEqual[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThan[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Inequality[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThanOrEqual[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThan[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.String ToString() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.Type GetType() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Max[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Min[T](T, T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int16 PowInt16(Int16, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 PowInt32(Int32, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 SignDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int64 PowInt64(Int64, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: IntPtr PowIntPtr(IntPtr, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: SByte PowSByte(SByte, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Single PowSingle(Single, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Byte] RangeByte(Byte, Byte, Byte) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Char] RangeChar(Char, Char) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Double] RangeDouble(Double, Double, Double) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Int16] RangeInt16(Int16, Int16, Int16) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Int32] RangeInt32(Int32, Int32, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Int64] RangeInt64(Int64, Int64, Int64) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.IntPtr] RangeIntPtr(IntPtr, IntPtr, IntPtr) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.SByte] RangeSByte(SByte, SByte, SByte) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Single] RangeSingle(Single, Single, Single) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UInt16] RangeUInt16(UInt16, UInt16, UInt16) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UInt32] RangeUInt32(UInt32, UInt32, UInt32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UInt64] RangeUInt64(UInt64, UInt64, UInt64) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UIntPtr] RangeUIntPtr(UIntPtr, UIntPtr, UIntPtr) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeGeneric[T](T, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T, T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeStepGeneric[TStep,T](TStep, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Decimal PowDecimal(System.Decimal, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String GetStringSlice(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String ToString() +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Type GetType() +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AbsDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AcosDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AsinDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AtanDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T CeilingDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T CosDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T CoshDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T ExpDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T FloorDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T Log10Dynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T LogDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T PowDynamic[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T PowGeneric[T](T, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T RoundDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T SinDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T SinhDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T TanDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T TanhDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T TruncateDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T2 Atan2Dynamic[T1,T2](T1, T1) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T2 SqrtDynamic[T1,T2](T1) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,,] GetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice2DFixed1[T](T[,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice2DFixed2[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt16 PowUInt16(UInt16, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt32 PowUInt32(UInt32, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt64 PowUInt64(UInt64, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UIntPtr PowUIntPtr(UIntPtr, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2DFixed1[T](T[,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2DFixed2[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) +Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) +Microsoft.FSharp.Core.Operators+Unchecked: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators+Unchecked: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators+Unchecked: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators+Unchecked: System.String ToString() +Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() +Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() +Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object) +Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T) +Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) +Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) +Microsoft.FSharp.Core.Operators: Boolean op_GreaterThanOrEqual[T](T, T) +Microsoft.FSharp.Core.Operators: Boolean op_GreaterThan[T](T, T) +Microsoft.FSharp.Core.Operators: Boolean op_Inequality[T](T, T) +Microsoft.FSharp.Core.Operators: Boolean op_LessThanOrEqual[T](T, T) +Microsoft.FSharp.Core.Operators: Boolean op_LessThan[T](T, T) +Microsoft.FSharp.Core.Operators: Byte ToByte[T](T) +Microsoft.FSharp.Core.Operators: Char ToChar[T](T) +Microsoft.FSharp.Core.Operators: Double Infinity +Microsoft.FSharp.Core.Operators: Double NaN +Microsoft.FSharp.Core.Operators: Double ToDouble[T](T) +Microsoft.FSharp.Core.Operators: Double get_Infinity() +Microsoft.FSharp.Core.Operators: Double get_NaN() +Microsoft.FSharp.Core.Operators: Int16 ToInt16[T](T) +Microsoft.FSharp.Core.Operators: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators: Int32 Sign[T](T) +Microsoft.FSharp.Core.Operators: Int32 SizeOf[T]() +Microsoft.FSharp.Core.Operators: Int32 ToInt32[T](T) +Microsoft.FSharp.Core.Operators: Int32 ToInt[T](T) +Microsoft.FSharp.Core.Operators: Int32 limitedHash[T](Int32, T) +Microsoft.FSharp.Core.Operators: Int64 ToInt64[T](T) +Microsoft.FSharp.Core.Operators: IntPtr ToIntPtr[T](T) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Collections.FSharpList`1[T] op_Append[T](Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeLeft[T2,T3,T1](Microsoft.FSharp.Core.FSharpFunc`2[T2,T3], Microsoft.FSharp.Core.FSharpFunc`2[T1,T2]) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeRight[T1,T2,T3](Microsoft.FSharp.Core.FSharpFunc`2[T1,T2], Microsoft.FSharp.Core.FSharpFunc`2[T2,T3]) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[System.String] FailurePattern(System.Exception) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[T] TryUnbox[T](System.Object) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpRef`1[T] Ref[T](T) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Checked +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+NonStructuralComparison +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+OperatorIntrinsics +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Unchecked +Microsoft.FSharp.Core.Operators: SByte ToSByte[T](T) +Microsoft.FSharp.Core.Operators: Single InfinitySingle +Microsoft.FSharp.Core.Operators: Single NaNSingle +Microsoft.FSharp.Core.Operators: Single ToSingle[T](T) +Microsoft.FSharp.Core.Operators: Single get_InfinitySingle() +Microsoft.FSharp.Core.Operators: Single get_NaNSingle() +Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] CreateSequence[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_RangeStep[T,TStep](T, TStep, T) +Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_Range[T](T, T) +Microsoft.FSharp.Core.Operators: System.Decimal ToDecimal[T](T) +Microsoft.FSharp.Core.Operators: System.Exception Failure(System.String) +Microsoft.FSharp.Core.Operators: System.Object Box[T](T)" + +#if DEBUG + @" +Microsoft.FSharp.Core.Operators: System.RuntimeMethodHandle MethodHandleOf[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult])" + +#endif + @" +Microsoft.FSharp.Core.Operators: System.String ToString() +Microsoft.FSharp.Core.Operators: System.String ToString[T](T) +Microsoft.FSharp.Core.Operators: System.String op_Concatenate(System.String, System.String) +Microsoft.FSharp.Core.Operators: System.Tuple`2[TKey,TValue] KeyValuePattern[TKey,TValue](System.Collections.Generic.KeyValuePair`2[TKey,TValue]) +Microsoft.FSharp.Core.Operators: System.Type GetType() +Microsoft.FSharp.Core.Operators: System.Type TypeDefOf[T]() +Microsoft.FSharp.Core.Operators: System.Type TypeOf[T]() +Microsoft.FSharp.Core.Operators: T Abs[T](T) +Microsoft.FSharp.Core.Operators: T Acos[T](T) +Microsoft.FSharp.Core.Operators: T Asin[T](T) +Microsoft.FSharp.Core.Operators: T Atan[T](T) +Microsoft.FSharp.Core.Operators: T Ceiling[T](T) +Microsoft.FSharp.Core.Operators: T Cos[T](T) +Microsoft.FSharp.Core.Operators: T Cosh[T](T) +Microsoft.FSharp.Core.Operators: T DefaultArg[T](Microsoft.FSharp.Core.FSharpOption`1[T], T) +Microsoft.FSharp.Core.Operators: T Exp[T](T) +Microsoft.FSharp.Core.Operators: T FailWith[T](System.String) +Microsoft.FSharp.Core.Operators: T Floor[T](T) +Microsoft.FSharp.Core.Operators: T Identity[T](T) +Microsoft.FSharp.Core.Operators: T InvalidArg[T](System.String, System.String) +Microsoft.FSharp.Core.Operators: T InvalidOp[T](System.String) +Microsoft.FSharp.Core.Operators: T Lock[TLock,T](TLock, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) +Microsoft.FSharp.Core.Operators: T Log10[T](T) +Microsoft.FSharp.Core.Operators: T Log[T](T) +Microsoft.FSharp.Core.Operators: T Max[T](T, T) +Microsoft.FSharp.Core.Operators: T Min[T](T, T) +Microsoft.FSharp.Core.Operators: T NullArg[T](System.String) +Microsoft.FSharp.Core.Operators: T PowInteger[T](T, Int32) +Microsoft.FSharp.Core.Operators: T Raise[T](System.Exception) +Microsoft.FSharp.Core.Operators: T Reraise[T]() +Microsoft.FSharp.Core.Operators: T Rethrow[T]() +Microsoft.FSharp.Core.Operators: T Round[T](T) +Microsoft.FSharp.Core.Operators: T Sin[T](T) +Microsoft.FSharp.Core.Operators: T Sinh[T](T) +Microsoft.FSharp.Core.Operators: T Tan[T](T) +Microsoft.FSharp.Core.Operators: T Tanh[T](T) +Microsoft.FSharp.Core.Operators: T Truncate[T](T) +Microsoft.FSharp.Core.Operators: T Unbox[T](System.Object) +Microsoft.FSharp.Core.Operators: T op_BitwiseAnd[T](T, T) +Microsoft.FSharp.Core.Operators: T op_BitwiseOr[T](T, T) +Microsoft.FSharp.Core.Operators: T op_Dereference[T](Microsoft.FSharp.Core.FSharpRef`1[T]) +Microsoft.FSharp.Core.Operators: T op_ExclusiveOr[T](T, T) +Microsoft.FSharp.Core.Operators: T op_Exponentiation[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators: T op_LeftShift[T](T, Int32) +Microsoft.FSharp.Core.Operators: T op_LogicalNot[T](T) +Microsoft.FSharp.Core.Operators: T op_RightShift[T](T, Int32) +Microsoft.FSharp.Core.Operators: T op_UnaryNegation[T](T) +Microsoft.FSharp.Core.Operators: T op_UnaryPlus[T](T) +Microsoft.FSharp.Core.Operators: T1 Fst[T1,T2](System.Tuple`2[T1,T2]) +Microsoft.FSharp.Core.Operators: T2 Atan2[T1,T2](T1, T1) +Microsoft.FSharp.Core.Operators: T2 Snd[T1,T2](System.Tuple`2[T1,T2]) +Microsoft.FSharp.Core.Operators: T3 op_Addition[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators: T3 op_Division[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators: T3 op_Modulus[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators: T3 op_Multiply[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators: T3 op_Subtraction[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators: TResult Sqrt[T,TResult](T) +Microsoft.FSharp.Core.Operators: TResult ToEnum[TResult](Int32) +Microsoft.FSharp.Core.Operators: TResult Using[T,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) +Microsoft.FSharp.Core.Operators: TResult op_PipeLeft2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], T1, T2) +Microsoft.FSharp.Core.Operators: TResult op_PipeLeft3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], T1, T2, T3) +Microsoft.FSharp.Core.Operators: TResult op_PipeLeft[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T) +Microsoft.FSharp.Core.Operators: TResult op_PipeRight2[T1,T2,TResult](T1, T2, Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) +Microsoft.FSharp.Core.Operators: TResult op_PipeRight3[T1,T2,T3,TResult](T1, T2, T3, Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) +Microsoft.FSharp.Core.Operators: TResult op_PipeRight[T1,TResult](T1, Microsoft.FSharp.Core.FSharpFunc`2[T1,TResult]) +Microsoft.FSharp.Core.Operators: UInt16 ToUInt16[T](T) +Microsoft.FSharp.Core.Operators: UInt32 ToUInt32[T](T) +Microsoft.FSharp.Core.Operators: UInt64 ToUInt64[T](T) +Microsoft.FSharp.Core.Operators: UIntPtr ToUIntPtr[T](T) +Microsoft.FSharp.Core.Operators: Void Decrement(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) +Microsoft.FSharp.Core.Operators: Void Ignore[T](T) +Microsoft.FSharp.Core.Operators: Void Increment(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) +Microsoft.FSharp.Core.Operators: Void op_ColonEquals[T](Microsoft.FSharp.Core.FSharpRef`1[T], T) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: FSharpFunc`3 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.Type GetType() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: TResult Invoke(T1, T2) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: FSharpFunc`4 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.Type GetType() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: TResult Invoke(T1, T2, T3) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: FSharpFunc`5 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.Type GetType() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: TResult Invoke(T1, T2, T3, T4) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: FSharpFunc`6 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.Type GetType() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: TResult Invoke(T1, T2, T3, T4, T5) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures: Int32 GetHashCode() +Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult] +Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult] +Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult] +Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult] +Microsoft.FSharp.Core.OptimizedClosures: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures: System.Type GetType() +Microsoft.FSharp.Core.OptionModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptionModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Int32 Count[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfNullable[T](System.Nullable`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfObj[T](T) +Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: System.String ToString() +Microsoft.FSharp.Core.OptionModule: System.Type GetType() +Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: T ToObj[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpOption`1[T], TState) +Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.OptionalArgumentAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object TypeId +Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.OptionalArgumentAttribute: System.String ToString() +Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Type GetType() +Microsoft.FSharp.Core.OptionalArgumentAttribute: Void .ctor() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String ToString() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String Value +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String get_Value() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.Type GetType() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Void .ctor(System.String) +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Int32 GetHashCode() +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String ToString() +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String Value +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String get_Value() +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.Type GetType() +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Void .ctor(System.String) +Microsoft.FSharp.Core.PrintfModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.PrintfModule: Int32 GetHashCode() +Microsoft.FSharp.Core.PrintfModule: System.String ToString() +Microsoft.FSharp.Core.PrintfModule: System.Type GetType() +Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[System.String,TResult], Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringBuilderThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.Text.StringBuilder, Microsoft.FSharp.Core.PrintfFormat`4[T,System.Text.StringBuilder,Microsoft.FSharp.Core.Unit,TResult]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringBuilder[T](System.Text.StringBuilder, Microsoft.FSharp.Core.PrintfFormat`4[T,System.Text.StringBuilder,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThenFail[T,TResult](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[System.String,TResult], Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[T](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,System.String]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriterThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,TResult]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ProjectionParameterAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object TypeId +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.String ToString() +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Type GetType() +Microsoft.FSharp.Core.ProjectionParameterAttribute: Void .ctor() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IncludeValue +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean get_IncludeValue() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object TypeId +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object TypeId +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.String ToString() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Type GetType() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Void .ctor() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object TypeId +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() +Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.SealedAttribute: Boolean Value +Microsoft.FSharp.Core.SealedAttribute: Boolean get_Value() +Microsoft.FSharp.Core.SealedAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.SealedAttribute: System.Object TypeId +Microsoft.FSharp.Core.SealedAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.SealedAttribute: System.String ToString() +Microsoft.FSharp.Core.SealedAttribute: System.Type GetType() +Microsoft.FSharp.Core.SealedAttribute: Void .ctor() +Microsoft.FSharp.Core.SealedAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.SourceConstructFlags: Boolean Equals(System.Object) +Microsoft.FSharp.Core.SourceConstructFlags: Boolean HasFlag(System.Enum) +Microsoft.FSharp.Core.SourceConstructFlags: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.SourceConstructFlags: Int32 GetHashCode() +Microsoft.FSharp.Core.SourceConstructFlags: Int32 value__ +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Closure +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Exception +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Field +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags KindMask +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Module +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags NonPublicRepresentation +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags None +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags ObjectType +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags RecordType +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags SumType +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags UnionCase +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Value +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString() +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.IFormatProvider) +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String) +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String, System.IFormatProvider) +Microsoft.FSharp.Core.SourceConstructFlags: System.Type GetType() +Microsoft.FSharp.Core.SourceConstructFlags: System.TypeCode GetTypeCode() +Microsoft.FSharp.Core.StringModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StringModule: Boolean Exists(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) +Microsoft.FSharp.Core.StringModule: Boolean ForAll(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) +Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() +Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) +Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) +Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) +Microsoft.FSharp.Core.StringModule: System.String Filter(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) +Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) +Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) +Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) +Microsoft.FSharp.Core.StringModule: System.String Replicate(Int32, System.String) +Microsoft.FSharp.Core.StringModule: System.String ToString() +Microsoft.FSharp.Core.StringModule: System.Type GetType() +Microsoft.FSharp.Core.StringModule: Void Iterate(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit], System.String) +Microsoft.FSharp.Core.StringModule: Void IterateIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit]], System.String) +Microsoft.FSharp.Core.StructAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructAttribute: System.String ToString() +Microsoft.FSharp.Core.StructAttribute: System.Type GetType() +Microsoft.FSharp.Core.StructAttribute: Void .ctor() +Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructuralComparisonAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.String ToString() +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Type GetType() +Microsoft.FSharp.Core.StructuralComparisonAttribute: Void .ctor() +Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructuralEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Type GetType() +Microsoft.FSharp.Core.StructuralEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String ToString() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String Value +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String get_Value() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Type GetType() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.Unit: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Unit: Int32 GetHashCode() +Microsoft.FSharp.Core.Unit: System.String ToString() +Microsoft.FSharp.Core.Unit: System.Type GetType() +Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.UnverifiableAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.UnverifiableAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.UnverifiableAttribute: System.Object TypeId +Microsoft.FSharp.Core.UnverifiableAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.UnverifiableAttribute: System.String ToString() +Microsoft.FSharp.Core.UnverifiableAttribute: System.Type GetType() +Microsoft.FSharp.Core.UnverifiableAttribute: Void .ctor() +Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.VolatileFieldAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object TypeId +Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.VolatileFieldAttribute: System.String ToString() +Microsoft.FSharp.Core.VolatileFieldAttribute: System.Type GetType() +Microsoft.FSharp.Core.VolatileFieldAttribute: Void .ctor() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.Type GetType() +Microsoft.FSharp.Linq.NullableModule: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.NullableModule: Int32 GetHashCode() +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToByte[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToUInt8[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Char] ToChar[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Decimal] ToDecimal[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Double] ToDouble[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Double] ToFloat[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int16] ToInt16[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int32] ToInt32[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int32] ToInt[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int64] ToInt64[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.IntPtr] ToIntPtr[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.SByte] ToInt8[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.SByte] ToSByte[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Single] ToFloat32[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Single] ToSingle[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt16] ToUInt16[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt32] ToUInt32[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt64] ToUInt64[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UIntPtr] ToUIntPtr[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[TResult] ToEnum[TResult](System.Nullable`1[System.Int32]) +Microsoft.FSharp.Linq.NullableModule: System.String ToString() +Microsoft.FSharp.Linq.NullableModule: System.Type GetType() +Microsoft.FSharp.Linq.NullableOperators: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_EqualsQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterEqualsQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_LessEqualsQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_LessGreaterQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_LessQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkEqualsQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkEquals[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkGreaterEqualsQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkGreaterEquals[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkGreaterQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkGreater[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessEqualsQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessEquals[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreaterQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreater[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLess[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Int32 GetHashCode() +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_DivideQmark[T1,T2,T3](T1, System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MinusQmark[T1,T2,T3](T1, System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MultiplyQmark[T1,T2,T3](T1, System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_PercentQmark[T1,T2,T3](T1, System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_PlusQmark[T1,T2,T3](T1, System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkDivideQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkDivide[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkMinusQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkMinus[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkMultiplyQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkMultiply[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercentQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercent[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlusQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlus[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.String ToString() +Microsoft.FSharp.Linq.NullableOperators: System.Type GetType() +Microsoft.FSharp.Linq.QueryBuilder: Boolean All[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: Boolean Contains[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], T) +Microsoft.FSharp.Linq.QueryBuilder: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QueryBuilder: Boolean Exists[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: Int32 Count[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: Int32 GetHashCode() +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,TValue],Q] GroupValBy[T,TKey,TValue,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,T],Q] GroupBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Distinct[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] SkipWhile[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Skip[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Int32) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] SortByDescending[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] SortByNullableDescending[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TKey]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] SortByNullable[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TKey]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] SortBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Source[T,Q](System.Linq.IQueryable`1[T]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] TakeWhile[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Take[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Int32) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] ThenByDescending[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] ThenByNullableDescending[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TKey]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] ThenByNullable[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TKey]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] ThenBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Where[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] YieldFrom[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Yield[T,Q](T) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Zero[T,Q]() +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,System.Collections.IEnumerable] Source[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[TResult,Q] For[T,Q,TResult,Q2](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Linq.QuerySource`2[TResult,Q2]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[TResult,Q] GroupJoin[TOuter,Q,TInner,TKey,TResult](Microsoft.FSharp.Linq.QuerySource`2[TOuter,Q], Microsoft.FSharp.Linq.QuerySource`2[TInner,Q], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TInner,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,Microsoft.FSharp.Core.FSharpFunc`2[System.Collections.Generic.IEnumerable`1[TInner],TResult]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[TResult,Q] Join[TOuter,Q,TInner,TKey,TResult](Microsoft.FSharp.Linq.QuerySource`2[TOuter,Q], Microsoft.FSharp.Linq.QuerySource`2[TInner,Q], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TInner,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,Microsoft.FSharp.Core.FSharpFunc`2[TInner,TResult]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[TResult,Q] LeftOuterJoin[TOuter,Q,TInner,TKey,TResult](Microsoft.FSharp.Linq.QuerySource`2[TOuter,Q], Microsoft.FSharp.Linq.QuerySource`2[TInner,Q], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TInner,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,Microsoft.FSharp.Core.FSharpFunc`2[System.Collections.Generic.IEnumerable`1[TInner],TResult]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[TResult,Q] Select[T,Q,TResult](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Quotations.FSharpExpr`1[T] Quote[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Linq.QueryBuilder: System.Linq.IQueryable`1[T] Run[T](Microsoft.FSharp.Quotations.FSharpExpr`1[Microsoft.FSharp.Linq.QuerySource`2[T,System.Linq.IQueryable]]) +Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] AverageByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) +Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MaxByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) +Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MinByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) +Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] SumByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) +Microsoft.FSharp.Linq.QueryBuilder: System.String ToString() +Microsoft.FSharp.Linq.QueryBuilder: System.Type GetType() +Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOneOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOne[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T Find[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: T HeadOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T Head[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T LastOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T Last[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T Nth[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Int32) +Microsoft.FSharp.Linq.QueryBuilder: TValue AverageBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) +Microsoft.FSharp.Linq.QueryBuilder: TValue MaxBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) +Microsoft.FSharp.Linq.QueryBuilder: TValue MinBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) +Microsoft.FSharp.Linq.QueryBuilder: TValue SumBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) +Microsoft.FSharp.Linq.QueryBuilder: Void .ctor() +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Int32 GetHashCode() +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Collections.Generic.IEnumerable`1[T] RunQueryAsEnumerable[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[Microsoft.FSharp.Linq.QuerySource`2[T,System.Collections.IEnumerable]]) +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.String ToString() +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Type GetType() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Int32 GetHashCode() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.String ToString() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.Type GetType() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: T RunQueryAsValue[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Int32 GetHashCode() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] Source +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] get_Source() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.String ToString() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Type GetType() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Void .ctor(T1) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Void .ctor(T1, T2) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Void .ctor(T1, T2, T3) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 Item4 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 get_Item4() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Void .ctor(T1, T2, T3, T4) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T4 Item4 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T4 get_Item4() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 Item5 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 get_Item5() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Void .ctor(T1, T2, T3, T4, T5) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T4 Item4 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T4 get_Item4() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T5 Item5 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T5 get_Item5() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 Item6 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 get_Item6() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Void .ctor(T1, T2, T3, T4, T5, T6) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T4 Item4 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item4() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T5 Item5 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item5() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T6 Item6 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item6() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 Item7 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item7() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Void .ctor(T1, T2, T3, T4, T5, T6, T7) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T4 Item4 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T4 get_Item4() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T5 Item5 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T5 get_Item5() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T6 Item6 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T6 get_Item6() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T7 Item7 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T7 get_Item7() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 Item8 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 get_Item8() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Void .ctor(T1, T2, T3, T4, T5, T6, T7, T8) +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Void .ctor(K, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr SubstHelperRaw(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr`1[T] SubstHelper[T](Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression QuotationToExpression(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] ImplicitExpressionConversionHelper[T](T) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] QuotationToLambdaExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Object EvaluateQuotation(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T MemberInitializationHelper[T](T) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T NewAnonymousObjectHelper[T](T) +Microsoft.FSharp.NativeInterop.NativePtrModule: Boolean Equals(System.Object) +Microsoft.FSharp.NativeInterop.NativePtrModule: Int32 GetHashCode() +Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr AddPointerInlined[T](IntPtr, Int32) +Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfNativeIntInlined[T](IntPtr) +Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr StackAllocate[T](Int32) +Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr ToNativeIntInlined[T](IntPtr) +Microsoft.FSharp.NativeInterop.NativePtrModule: System.String ToString() +Microsoft.FSharp.NativeInterop.NativePtrModule: System.Type GetType() +Microsoft.FSharp.NativeInterop.NativePtrModule: T GetPointerInlined[T](IntPtr, Int32) +Microsoft.FSharp.NativeInterop.NativePtrModule: T ReadPointerInlined[T](IntPtr) +Microsoft.FSharp.NativeInterop.NativePtrModule: Void SetPointerInlined[T](IntPtr, Int32, T) +Microsoft.FSharp.NativeInterop.NativePtrModule: Void WritePointerInlined[T](IntPtr, T) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Int32 GetHashCode() +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[System.Type],Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] SpecificCallPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] UnitPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] MethodWithReflectedDefinitionPattern(System.Reflection.MethodBase) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] PropertyGetterWithReflectedDefinitionPattern(System.Reflection.PropertyInfo) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] PropertySetterWithReflectedDefinitionPattern(System.Reflection.PropertyInfo) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] BoolPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Byte] BytePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Char] CharPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Decimal] DecimalPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Double] DoublePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int16] Int16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] Int32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int64] Int64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.SByte] SBytePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Single] SinglePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.String] StringPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar]],Microsoft.FSharp.Quotations.FSharpExpr]] LambdasPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] ApplicationsPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] AndAlsoPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] OrElsePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] UInt16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt32] UInt32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt64] UInt64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: System.String ToString() +Microsoft.FSharp.Quotations.DerivedPatternsModule: System.Type GetType() +Microsoft.FSharp.Quotations.ExprShapeModule: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.ExprShapeModule: Int32 GetHashCode() +Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Core.FSharpChoice`3[Microsoft.FSharp.Quotations.FSharpVar,System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr],System.Tuple`2[System.Object,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] ShapePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Quotations.FSharpExpr RebuildShapeCombination(System.Object, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.ExprShapeModule: System.String ToString() +Microsoft.FSharp.Quotations.ExprShapeModule: System.Type GetType() +Microsoft.FSharp.Quotations.FSharpExpr: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.FSharpExpr: Int32 GetHashCode() +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] get_CustomAttributes() +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] TryGetReflectedDefinition(System.Reflection.MethodBase) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr AddressOf(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr AddressSet(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Application(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Applications(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Call(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.MethodInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Call(System.Reflection.MethodInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Coerce(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr DefaultValue(System.Type) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Deserialize(System.Type, Microsoft.FSharp.Collections.FSharpList`1[System.Type], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr], Byte[]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Deserialize40(System.Type, System.Type[], System.Type[], Microsoft.FSharp.Quotations.FSharpExpr[], Byte[]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(System.Reflection.FieldInfo) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldSet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldSet(System.Reflection.FieldInfo, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ForIntegerRangeLoop(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr IfThenElse(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Lambda(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Let(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr LetRecursive(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]], Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewArray(System.Type, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewDelegate(System.Type, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar], Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewObject(System.Reflection.ConstructorInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewRecord(System.Type, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewTuple(Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewUnionCase(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertyGet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.PropertyInfo, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertyGet(System.Reflection.PropertyInfo, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Quote(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr QuoteRaw(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr QuoteTyped(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Sequential(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Substitute(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TryFinally(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TryWith(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TupleGet(Microsoft.FSharp.Quotations.FSharpExpr, Int32) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TypeTest(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr UnionCaseTest(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Reflection.UnionCaseInfo) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value(System.Object, System.Type) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ValueWithName(System.Object, System.Type, System.String) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ValueWithName[T](T, System.String) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value[T](T) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Var(Microsoft.FSharp.Quotations.FSharpVar) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr VarSet(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr WhileLoop(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr WithValue(System.Object, System.Type, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] Cast[T](Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] GlobalVar[T](System.String) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] WithValue[T](T, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() +Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() +Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString(Boolean) +Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() +Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type +Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() +Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) +Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[], System.Type[]) +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] get_CustomAttributes() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpExpr Raw +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpExpr Substitute(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpExpr get_Raw() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString(Boolean) +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type GetType() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type Type +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type get_Type() +Microsoft.FSharp.Quotations.FSharpVar: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.FSharpVar: Boolean IsMutable +Microsoft.FSharp.Quotations.FSharpVar: Boolean get_IsMutable() +Microsoft.FSharp.Quotations.FSharpVar: Int32 GetHashCode() +Microsoft.FSharp.Quotations.FSharpVar: Microsoft.FSharp.Quotations.FSharpVar Global(System.String, System.Type) +Microsoft.FSharp.Quotations.FSharpVar: System.String Name +Microsoft.FSharp.Quotations.FSharpVar: System.String ToString() +Microsoft.FSharp.Quotations.FSharpVar: System.String get_Name() +Microsoft.FSharp.Quotations.FSharpVar: System.Type GetType() +Microsoft.FSharp.Quotations.FSharpVar: System.Type Type +Microsoft.FSharp.Quotations.FSharpVar: System.Type get_Type() +Microsoft.FSharp.Quotations.FSharpVar: Void .ctor(System.String, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Quotations.PatternsModule: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuoteRawPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuoteTypedPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpVar] VarPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]],Microsoft.FSharp.Quotations.FSharpExpr]] LetRecursivePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.FieldInfo]] FieldGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] AddressSetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ApplicationPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] SequentialPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] TryFinallyPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] WhileLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Reflection.UnionCaseInfo]] UnionCaseTestPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,System.Int32]] TupleGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,System.Type]] CoercePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,System.Type]] TypeTestPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] LambdaPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] VarSetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewUnionCasePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Object,System.Type]] ValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewObjectPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewArrayPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewRecordPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.FieldInfo,Microsoft.FSharp.Quotations.FSharpExpr]] FieldSetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.MethodInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] CallPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] PropertyGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] IfThenElsePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] LetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.Type,Microsoft.FSharp.Quotations.FSharpExpr]] WithValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.Type,System.String]] ValueWithNamePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar],Microsoft.FSharp.Quotations.FSharpExpr]] NewDelegatePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Quotations.FSharpExpr]] PropertySetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] TryWithPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Type] DefaultValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: System.String ToString() +Microsoft.FSharp.Quotations.PatternsModule: System.Type GetType() +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsExceptionRepresentation.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsRecord.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsUnion.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Int32 GetHashCode() +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] FSharpValue.PreComputeUnionTagReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeRecordReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeUnionReader.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] FSharpValue.PreComputeRecordConstructor.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] FSharpValue.PreComputeUnionConstructor.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Reflection.UnionCaseInfo[] FSharpType.GetUnionCases.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object FSharpValue.MakeRecord.Static(System.Type, System.Object[], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object FSharpValue.MakeUnion.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, System.Object[], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object[] FSharpValue.GetExceptionFields.Static(System.Object, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object[] FSharpValue.GetRecordFields.Static(System.Object, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.ConstructorInfo FSharpValue.PreComputeRecordConstructorInfo.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MemberInfo FSharpValue.PreComputeUnionTagMemberInfo.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MethodInfo FSharpValue.PreComputeUnionConstructorInfo.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetExceptionFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetRecordFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.String ToString() +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] FSharpValue.GetUnionFields.Static(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Type GetType() +Microsoft.FSharp.Reflection.FSharpType: Boolean Equals(System.Object) +Microsoft.FSharp.Reflection.FSharpType: Boolean IsFunction(System.Type) +Microsoft.FSharp.Reflection.FSharpType: Boolean IsModule(System.Type) +Microsoft.FSharp.Reflection.FSharpType: Boolean IsTuple(System.Type) +Microsoft.FSharp.Reflection.FSharpType: Int32 GetHashCode() +Microsoft.FSharp.Reflection.FSharpType: System.String ToString() +Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) +Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) +Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) +Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) +Microsoft.FSharp.Reflection.FSharpValue: Int32 GetHashCode() +Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeTupleReader(System.Type) +Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object] PreComputeRecordFieldReader(System.Reflection.PropertyInfo) +Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] PreComputeTupleConstructor(System.Type) +Microsoft.FSharp.Reflection.FSharpValue: System.Object GetRecordField(System.Object, System.Reflection.PropertyInfo) +Microsoft.FSharp.Reflection.FSharpValue: System.Object GetTupleField(System.Object, Int32) +Microsoft.FSharp.Reflection.FSharpValue: System.Object MakeFunction(System.Type, Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object]) +Microsoft.FSharp.Reflection.FSharpValue: System.Object MakeTuple(System.Object[], System.Type) +Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetTupleFields(System.Object) +Microsoft.FSharp.Reflection.FSharpValue: System.String ToString() +Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Type]] PreComputeTupleConstructorInfo(System.Type) +Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.PropertyInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,System.Int32]]] PreComputeTuplePropertyInfo(System.Type, Int32) +Microsoft.FSharp.Reflection.FSharpValue: System.Type GetType() +Microsoft.FSharp.Reflection.UnionCaseInfo: Boolean Equals(System.Object) +Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 GetHashCode() +Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 Tag +Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 get_Tag() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Object[] GetCustomAttributes() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Object[] GetCustomAttributes(System.Type) +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Reflection.PropertyInfo[] GetFields() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.String Name +Microsoft.FSharp.Reflection.UnionCaseInfo: System.String ToString() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.String get_Name() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type DeclaringType +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type GetType() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType() +System.Numerics.BigInteger: Boolean Equals(System.Object) +System.Numerics.BigInteger: Boolean IsOne +System.Numerics.BigInteger: Boolean IsZero +System.Numerics.BigInteger: Boolean get_IsOne() +System.Numerics.BigInteger: Boolean get_IsZero() +System.Numerics.BigInteger: Boolean op_Equality(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: Boolean op_GreaterThan(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: Boolean op_GreaterThanOrEqual(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: Boolean op_Inequality(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: Boolean op_LessThan(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: Boolean op_LessThanOrEqual(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: Double op_Explicit(System.Numerics.BigInteger) +System.Numerics.BigInteger: Int32 GetHashCode() +System.Numerics.BigInteger: Int32 Sign +System.Numerics.BigInteger: Int32 get_Sign() +System.Numerics.BigInteger: Int32 op_Explicit(System.Numerics.BigInteger) +System.Numerics.BigInteger: Int64 op_Explicit(System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger Abs(System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger DivRem(System.Numerics.BigInteger, System.Numerics.BigInteger, System.Numerics.BigInteger ByRef) +System.Numerics.BigInteger: System.Numerics.BigInteger GreatestCommonDivisor(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger One +System.Numerics.BigInteger: System.Numerics.BigInteger Parse(System.String) +System.Numerics.BigInteger: System.Numerics.BigInteger Pow(System.Numerics.BigInteger, Int32) +System.Numerics.BigInteger: System.Numerics.BigInteger Zero +System.Numerics.BigInteger: System.Numerics.BigInteger get_One() +System.Numerics.BigInteger: System.Numerics.BigInteger get_Zero() +System.Numerics.BigInteger: System.Numerics.BigInteger op_Addition(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger op_Division(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger op_Modulus(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger op_Multiply(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger op_Subtraction(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger op_UnaryNegation(System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger op_UnaryPlus(System.Numerics.BigInteger) +System.Numerics.BigInteger: System.String ToString() +System.Numerics.BigInteger: System.Type GetType() +System.Numerics.BigInteger: Void .ctor(Int32) +System.Numerics.BigInteger: Void .ctor(Int64) +" + SurfaceArea.verify expected "portable259" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__)) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.Portable.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable47.fs similarity index 93% rename from src/fsharp/FSharp.Core.Unittests/SurfaceArea.Portable.fs rename to src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable47.fs index fa50da4a464..aaa2e562936 100644 --- a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.Portable.fs +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable47.fs @@ -3,42 +3,13 @@ namespace FSharp.Core.Unittests.Portable.SurfaceArea open NUnit.Framework +open FSharp.Core.Unittests.LibraryTestFx [] type SurfaceAreaTest() = [] member this.VerifyArea() = -#if FX_ATLEAST_45 - let curDir = System.IO.Path.GetDirectoryName((new System.Uri(System.Reflection.Assembly.Load("nunit.util").CodeBase)).LocalPath) // e.g. "C:\VSPro_FSharp\binaries\x86chk\SuiteBin\FSharp\" -#else - let curDir = System.IO.Path.GetDirectoryName((new System.Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)).LocalPath) // e.g. "C:\VSPro_FSharp\binaries\x86chk\SuiteBin\FSharp\" -#endif - let dirOfPortableFSCoreInSuiteBin = System.IO.Path.Combine(curDir, @"FSharp.Core.Portable") - let portableFSCore = System.IO.Path.Combine(dirOfPortableFSCoreInSuiteBin, @"FSharp.Core.dll") - - let asm = System.Reflection.Assembly.ReflectionOnlyLoadFrom(portableFSCore) - - for ref in [| // PrepareSuiteBin in devdiv build copies the Profile37 reference assemblies here, so that this unit test can consume them - dirOfPortableFSCoreInSuiteBin + @"\mscorlib.dll" - dirOfPortableFSCoreInSuiteBin + @"\System.Core.dll" - dirOfPortableFSCoreInSuiteBin + @"\System.dll" - dirOfPortableFSCoreInSuiteBin + @"\System.Net.dll" |] do - System.Reflection.Assembly.ReflectionOnlyLoadFrom(ref) |> ignore - - let types = asm.GetExportedTypes() - - let actual = new System.Text.StringBuilder() - actual.Append("\r\n") |> ignore - - let values = - types - |> Array.collect (fun t -> t.GetMembers()) - |> Array.map (fun v -> sprintf "%s: %s" (v.ReflectedType.ToString()) (v.ToString())) - |> Array.sort - |> Array.iter (fun s -> actual.Append(s) |> ignore - actual.Append("\r\n") |> ignore) - - let postdev10 = @" + let expected = @" Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) @@ -88,30 +59,50 @@ Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32 Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]]) Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32) Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.ArrayModule: Boolean Contains[T](T, T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[], T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.String ToString() +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[System.Int32,T][] Indexed[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T,T][] Pairwise[T](T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] Zip[T1,T2](T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1[],T2[]] Unzip[T1,T2](System.Tuple`2[T1,T2][]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TKey,System.Int32][] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TKey,T[]][] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TResult[],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], T[], TState) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TResult[],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] SplitAt[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T ExactlyOne[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T Get[T](T[], Int32) +Microsoft.FSharp.Collections.ArrayModule: T Head[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T Item[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T Last[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) Microsoft.FSharp.Collections.ArrayModule: T Max[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) @@ -125,6 +116,7 @@ Microsoft.FSharp.Collections.ArrayModule: TResult SumBy[T,TResult](Microsoft.FSh Microsoft.FSharp.Collections.ArrayModule: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) Microsoft.FSharp.Collections.ArrayModule: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) Microsoft.FSharp.Collections.ArrayModule: TResult[] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], T1[], T2[], T3[]) Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], T1[], T2[]) Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) Microsoft.FSharp.Collections.ArrayModule: TResult[] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) @@ -138,18 +130,36 @@ Microsoft.FSharp.Collections.ArrayModule: T[] Append[T](T[], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] Concat[T](System.Collections.Generic.IEnumerable`1[T[]]) Microsoft.FSharp.Collections.ArrayModule: T[] Copy[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T[] Create[T](Int32, T) +Microsoft.FSharp.Collections.ArrayModule: T[] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Distinct[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T[] Empty[T]() +Microsoft.FSharp.Collections.ArrayModule: T[] Except[T](System.Collections.Generic.IEnumerable`1[T], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] GetSubArray[T](T[], Int32, Int32) Microsoft.FSharp.Collections.ArrayModule: T[] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) Microsoft.FSharp.Collections.ArrayModule: T[] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ArrayModule: T[] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.ArrayModule: T[] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Replicate[T](Int32, T) Microsoft.FSharp.Collections.ArrayModule: T[] Reverse[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Singleton[T](T) +Microsoft.FSharp.Collections.ArrayModule: T[] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Skip[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortDescending[T](T[]) Microsoft.FSharp.Collections.ArrayModule: T[] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] Sort[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Tail[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Take[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Truncate[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Unfold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) +Microsoft.FSharp.Collections.ArrayModule: T[] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) Microsoft.FSharp.Collections.ArrayModule: T[] ZeroCreate[T](Int32) +Microsoft.FSharp.Collections.ArrayModule: T[][] ChunkBySize[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[][] SplitInto[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[][] Windowed[T](Int32, T[]) Microsoft.FSharp.Collections.ArrayModule: Void CopyTo[T](T[], Int32, T[], Int32, Int32) Microsoft.FSharp.Collections.ArrayModule: Void Fill[T](T[], Int32, Int32, T) Microsoft.FSharp.Collections.ArrayModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], T1[], T2[]) @@ -163,6 +173,7 @@ Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) +Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() @@ -191,6 +202,7 @@ Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 get_Tag() Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1+Tags[T] Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Cons(T, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Empty +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] GetSlice(Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Tail Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] TailOrNull Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Empty() @@ -246,20 +258,31 @@ Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] NonStructural[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() Microsoft.FSharp.Collections.HashIdentity: System.String ToString() Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() +Microsoft.FSharp.Collections.ListModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) Microsoft.FSharp.Collections.ListModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] ChunkBySize[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] SplitInto[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] Windowed[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Int32,T]] Indexed[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T,T]] Pairwise[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]] Zip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,Microsoft.FSharp.Collections.FSharpList`1[T]]] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,System.Int32]] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]] Zip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], Microsoft.FSharp.Collections.FSharpList`1[T3]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Collections.FSharpList`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -272,7 +295,10 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Append[T](Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Concat[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpList`1[T]]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Distinct[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Empty[T]() +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Except[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfArray[T](T[]) @@ -280,23 +306,45 @@ Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Replicate[T](Int32, T) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Reverse[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Singleton[T](T) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Skip[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortDescending[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Sort[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Tail[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Take[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Truncate[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Unfold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.String ToString() Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] SplitAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) Microsoft.FSharp.Collections.ListModule: System.Type GetType() Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T ExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T Get[T](Microsoft.FSharp.Collections.FSharpList`1[T], Int32) Microsoft.FSharp.Collections.ListModule: T Head[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Item[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Last[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T Max[T](Microsoft.FSharp.Collections.FSharpList`1[T]) Microsoft.FSharp.Collections.ListModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) @@ -345,6 +393,7 @@ Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.F Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T], TState) Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.SeqModule: Boolean Contains[T](T, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) @@ -352,13 +401,20 @@ Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp. Microsoft.FSharp.Collections.SeqModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.Int32,T]] Indexed[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T,T]] Pairwise[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T1,T2]] Zip[T1,T2](System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,System.Collections.Generic.IEnumerable`1[T]]] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) @@ -367,9 +423,14 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1 Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Collect[T,TCollection,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], System.Collections.Generic.IEnumerable`1[T3]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TState] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], System.Collections.Generic.IEnumerable`1[T], TState) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] ChunkBySize[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] SplitInto[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] Windowed[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Append[T](System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Cache[T](System.Collections.Generic.IEnumerable`1[T]) @@ -379,42 +440,59 @@ Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1 Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Distinct[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Empty[T]() +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Except[T](System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] InitializeInfinite[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfArray[T](T[]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] ReadOnly[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Replicate[T](Int32, T) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Reverse[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Singleton[T](T) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Skip[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortDescending[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Sort[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Tail[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Take[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.String ToString() +Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], System.Collections.Generic.IEnumerable`1[T], TState) +Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: System.Type GetType() Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T ExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Get[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Head[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Item[T](Int32, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Last[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Max[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Min[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T Sum[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], TState) +Microsoft.FSharp.Collections.SeqModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], System.Collections.Generic.IEnumerable`1[T], TState) Microsoft.FSharp.Collections.SeqModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: T[] ToArray[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) @@ -479,6 +557,7 @@ Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AwaitTask(System.Threading.Tasks.Task) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Ignore[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Sleep(Int32) Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToContext(System.Threading.SynchronizationContext) @@ -638,12 +717,15 @@ Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Value +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean get_Value() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object TypeId Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor(Boolean) Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.AutoOpenAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) @@ -726,11 +808,16 @@ Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceC Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object TypeId Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ResourceName Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String get_ResourceName() Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] TypeDefinitions +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] get_TypeDefinitions() Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) +Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(System.String, System.Type[]) Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) @@ -810,12 +897,15 @@ Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.String Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Type GetType() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T LastGenerated Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T get_LastGenerated() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void .ctor() Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void Close() Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace[] GetNestedNamespaces() Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.String NamespaceName Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.String get_NamespaceName() Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.Type ResolveTypeName(System.String) Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.Type[] GetTypes() +Microsoft.FSharp.Core.CompilerServices.ITypeProvider2: System.Reflection.MethodBase ApplyStaticArgumentsForMethod(System.Reflection.MethodBase, System.String, System.Object[]) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider2: System.Reflection.ParameterInfo[] GetStaticParametersForMethod(System.Reflection.MethodBase) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Byte[] GetGeneratedAssemblyContents(System.Reflection.Assembly) Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace[] GetNamespaces() Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Microsoft.FSharp.Quotations.FSharpExpr GetInvokerExpression(System.Reflection.MethodBase, Microsoft.FSharp.Quotations.FSharpExpr[]) @@ -1046,6 +1136,12 @@ Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Byte ToByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Int32 GetHashCode() +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: SByte ToSByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.String ToString() +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.Type GetType() Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) @@ -1053,6 +1149,7 @@ Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Linq.QueryBuilder get_query() Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Linq.QueryBuilder query Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) @@ -1967,6 +2064,7 @@ Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.String ToString() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Type GetType() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: TResult Invoke(T) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: V InvokeFast[V](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,V]], T, TResult) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Void .ctor() Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: W InvokeFast[V,W](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,W]]], T, TResult, V) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: X InvokeFast[V,W,X](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,X]]]], T, TResult, V, W) Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Y InvokeFast[V,W,X,Y](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,Microsoft.FSharp.Core.FSharpFunc`2[X,Y]]]]], T, TResult, V, W, X) @@ -2036,6 +2134,7 @@ Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() Microsoft.FSharp.Core.FSharpTypeFunc: System.String ToString() Microsoft.FSharp.Core.FSharpTypeFunc: System.Type GetType() +Microsoft.FSharp.Core.FSharpTypeFunc: Void .ctor() Microsoft.FSharp.Core.FuncConvert: Boolean Equals(System.Object) Microsoft.FSharp.Core.FuncConvert: Int32 GetHashCode() Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit] ToFSharpFunc[T](System.Action`1[T]) @@ -2173,7 +2272,9 @@ Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitiv Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators Microsoft.FSharp.Core.LanguagePrimitives: SByte SByteWithMeasure(SByte) Microsoft.FSharp.Core.LanguagePrimitives: Single Float32WithMeasure(Single) +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IComparer`1[T] FastGenericComparerFromTable[T]() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IComparer`1[T] FastGenericComparer[T]() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastGenericEqualityComparerFromTable[T]() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastGenericEqualityComparer[T]() Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastLimitedGenericEqualityComparer[T](Int32) Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IComparer GenericComparer @@ -2326,6 +2427,20 @@ Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Equality[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThanOrEqual[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThan[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Inequality[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThanOrEqual[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThan[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.String ToString() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.Type GetType() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Max[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Min[T](T, T) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) @@ -2403,6 +2518,7 @@ Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object) Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T) Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) Microsoft.FSharp.Core.Operators: Boolean op_GreaterThanOrEqual[T](T, T) @@ -2432,8 +2548,10 @@ Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Collections.FSharpList`1[T] op Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeLeft[T2,T3,T1](Microsoft.FSharp.Core.FSharpFunc`2[T2,T3], Microsoft.FSharp.Core.FSharpFunc`2[T1,T2]) Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeRight[T1,T2,T3](Microsoft.FSharp.Core.FSharpFunc`2[T1,T2], Microsoft.FSharp.Core.FSharpFunc`2[T2,T3]) Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[System.String] FailurePattern(System.Exception) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[T] TryUnbox[T](System.Object) Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpRef`1[T] Ref[T](T) Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Checked +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+NonStructuralComparison Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+OperatorIntrinsics Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Unchecked Microsoft.FSharp.Core.Operators: SByte ToSByte[T](T) @@ -2447,7 +2565,7 @@ Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_ Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_Range[T](T, T) Microsoft.FSharp.Core.Operators: System.Decimal ToDecimal[T](T) Microsoft.FSharp.Core.Operators: System.Exception Failure(System.String) -Microsoft.FSharp.Core.Operators: System.Object Box[T](T)" + +Microsoft.FSharp.Core.Operators: System.Object Box[T](T)" + #if DEBUG @" Microsoft.FSharp.Core.Operators: System.RuntimeMethodHandle MethodHandleOf[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult])" + @@ -2532,6 +2650,7 @@ Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Microsoft.F Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.String ToString() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: TResult Invoke(T1, T2) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Void .ctor() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: FSharpFunc`4 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Int32 GetHashCode() @@ -2539,6 +2658,7 @@ Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Microsof Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.String ToString() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: TResult Invoke(T1, T2, T3) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Void .ctor() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: FSharpFunc`5 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]]) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Int32 GetHashCode() @@ -2546,6 +2666,7 @@ Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Micro Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.String ToString() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: TResult Invoke(T1, T2, T3, T4) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Void .ctor() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: FSharpFunc`6 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]]) Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Int32 GetHashCode() @@ -2553,6 +2674,7 @@ Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Mi Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.String ToString() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.Type GetType() Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: TResult Invoke(T1, T2, T3, T4, T5) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Void .ctor() Microsoft.FSharp.Core.OptimizedClosures: Boolean Equals(System.Object) Microsoft.FSharp.Core.OptimizedClosures: Int32 GetHashCode() Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult] @@ -2571,9 +2693,14 @@ Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfNullable[T](System.Nullable`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfObj[T](T) +Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: System.String ToString() Microsoft.FSharp.Core.OptionModule: System.Type GetType() Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: T ToObj[T](Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpOption`1[T], TState) Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpOption`1[T]) Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T]) @@ -2633,14 +2760,17 @@ Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IncludeValue Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean get_IncludeValue() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object TypeId Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object get_TypeId() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor(Boolean) Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean IsDefaultAttribute() Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) @@ -2701,6 +2831,7 @@ Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) +Microsoft.FSharp.Core.StringModule: System.String Filter(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) @@ -2800,15 +2931,19 @@ Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.Type GetType() Microsoft.FSharp.Linq.NullableModule: Boolean Equals(System.Object) Microsoft.FSharp.Linq.NullableModule: Int32 GetHashCode() Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToByte[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToUInt8[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Char] ToChar[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Decimal] ToDecimal[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Double] ToDouble[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Double] ToFloat[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int16] ToInt16[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int32] ToInt32[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int32] ToInt[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int64] ToInt64[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.IntPtr] ToIntPtr[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.SByte] ToInt8[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.SByte] ToSByte[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Single] ToFloat32[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Single] ToSingle[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt16] ToUInt16[T](System.Nullable`1[T]) Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt32] ToUInt32[T](System.Nullable`1[T]) @@ -3043,6 +3178,7 @@ Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.Type GetType() Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Void .ctor(K, System.Collections.Generic.IEnumerable`1[T]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Boolean Equals(System.Object) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr SubstHelperRaw(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr`1[T] SubstHelper[T](Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression QuotationToExpression(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] ImplicitExpressionConversionHelper[T](T) @@ -3074,6 +3210,7 @@ Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpO Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] BoolPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Byte] BytePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Char] CharPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Decimal] DecimalPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Double] DoublePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int16] Int16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] Int32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -3110,6 +3247,7 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr C Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Coerce(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr DefaultValue(System.Type) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Deserialize(System.Type, Microsoft.FSharp.Collections.FSharpList`1[System.Type], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr], Byte[]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Deserialize40(System.Type, System.Type[], System.Type[], Microsoft.FSharp.Quotations.FSharpExpr[], Byte[]) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(System.Reflection.FieldInfo) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldSet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo, Microsoft.FSharp.Quotations.FSharpExpr) @@ -3130,6 +3268,8 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr P Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Quote(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr QuoteRaw(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr QuoteTyped(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Sequential(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Substitute(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr]]) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TryFinally(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) @@ -3138,12 +3278,16 @@ Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr T Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TypeTest(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr UnionCaseTest(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Reflection.UnionCaseInfo) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value(System.Object, System.Type) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ValueWithName(System.Object, System.Type, System.String) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ValueWithName[T](T, System.String) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value[T](T) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Var(Microsoft.FSharp.Quotations.FSharpVar) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr VarSet(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr WhileLoop(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr WithValue(System.Object, System.Type, Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] Cast[T](Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] GlobalVar[T](System.String) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] WithValue[T](T, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString(Boolean) @@ -3151,6 +3295,7 @@ Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) +Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[], System.Type[]) Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Boolean Equals(System.Object) Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Int32 GetHashCode() Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes @@ -3181,6 +3326,8 @@ Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuoteRawPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuoteTypedPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpVar] VarPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]],Microsoft.FSharp.Quotations.FSharpExpr]] LetRecursivePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.FieldInfo]] FieldGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -3205,6 +3352,8 @@ Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1 Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] PropertyGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] IfThenElsePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] LetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.Type,Microsoft.FSharp.Quotations.FSharpExpr]] WithValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.Type,System.String]] ValueWithNamePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar],Microsoft.FSharp.Quotations.FSharpExpr]] NewDelegatePattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Quotations.FSharpExpr]] PropertySetPattern(Microsoft.FSharp.Quotations.FSharpExpr) Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) @@ -3295,26 +3444,6 @@ Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType() System.IObservable`1[T]: System.IDisposable Subscribe(System.IObserver`1[T]) System.IObserver`1[T]: Void OnCompleted() System.IObserver`1[T]: Void OnError(System.Exception) -System.IObserver`1[T]: Void OnNext(T)" - let normalize (s:string) = - s.Replace("\r\n\r\n", "\r\n").Trim([|'\r';'\n'|]) - - let expected = - postdev10 |> normalize - - let act = actual.ToString() |> normalize - // add padding to ensure diagnostics below don't get IndexOutOfRange - let expected = expected + String.replicate 400 " " - let act = act + String.replicate 400 " " - if expected <> act then - let mutable indexFirstDiff = 0 - while indexFirstDiff < expected.Length && expected.[indexFirstDiff] = act.[indexFirstDiff] do - indexFirstDiff <- indexFirstDiff + 1 - printfn "First diff at char %d" indexFirstDiff - printfn "Next bit is" - printfn "Exp: %s" (expected.Substring(indexFirstDiff, 400).Replace("\n"," ")) - printfn "Act: %s" (act.Substring(indexFirstDiff, 400).Replace("\n"," ")) - printfn "Full actual below" - printfn "" - printf "%s" act - Assert.AreEqual(expected, act) +System.IObserver`1[T]: Void OnNext(T) +" + SurfaceArea.verify expected "portable47" (sprintf "%s\\%s" __SOURCE_DIRECTORY__ __SOURCE_FILE__) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable7.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable7.fs new file mode 100644 index 00000000000..a31efab40e3 --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable7.fs @@ -0,0 +1,3438 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace FSharp.Core.Unittests.Portable.SurfaceArea + +open NUnit.Framework +open FSharp.Core.Unittests.LibraryTestFx + +[] +type SurfaceAreaTest() = + [] + member this.VerifyArea() = + let expected = @" +Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.Array2DModule: Int32 Length1[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: Int32 Length2[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: System.String ToString() +Microsoft.FSharp.Collections.Array2DModule: System.Type GetType() +Microsoft.FSharp.Collections.Array2DModule: T Get[T](T[,], Int32, Int32) +Microsoft.FSharp.Collections.Array2DModule: TResult[,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]], T[,]) +Microsoft.FSharp.Collections.Array2DModule: TResult[,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,]) +Microsoft.FSharp.Collections.Array2DModule: T[,] Copy[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: T[,] CreateBased[T](Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.Array2DModule: T[,] Create[T](Int32, Int32, T) +Microsoft.FSharp.Collections.Array2DModule: T[,] InitializeBased[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]) +Microsoft.FSharp.Collections.Array2DModule: T[,] Initialize[T](Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]) +Microsoft.FSharp.Collections.Array2DModule: T[,] Rebase[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: T[,] ZeroCreateBased[T](Int32, Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array2DModule: T[,] ZeroCreate[T](Int32, Int32) +Microsoft.FSharp.Collections.Array2DModule: Void CopyTo[T](T[,], Int32, Int32, T[,], Int32, Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array2DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]], T[,]) +Microsoft.FSharp.Collections.Array2DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,]) +Microsoft.FSharp.Collections.Array2DModule: Void Set[T](T[,], Int32, Int32, T) +Microsoft.FSharp.Collections.Array3DModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.Array3DModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.Array3DModule: Int32 Length1[T](T[,,]) +Microsoft.FSharp.Collections.Array3DModule: Int32 Length2[T](T[,,]) +Microsoft.FSharp.Collections.Array3DModule: Int32 Length3[T](T[,,]) +Microsoft.FSharp.Collections.Array3DModule: System.String ToString() +Microsoft.FSharp.Collections.Array3DModule: System.Type GetType() +Microsoft.FSharp.Collections.Array3DModule: T Get[T](T[,,], Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array3DModule: TResult[,,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]]], T[,,]) +Microsoft.FSharp.Collections.Array3DModule: TResult[,,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,,]) +Microsoft.FSharp.Collections.Array3DModule: T[,,] Create[T](Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.Array3DModule: T[,,] Initialize[T](Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]) +Microsoft.FSharp.Collections.Array3DModule: T[,,] ZeroCreate[T](Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array3DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]]], T[,,]) +Microsoft.FSharp.Collections.Array3DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,,]) +Microsoft.FSharp.Collections.Array3DModule: Void Set[T](T[,,], Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.Array4DModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.Array4DModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.Array4DModule: Int32 Length1[T](T[,,,]) +Microsoft.FSharp.Collections.Array4DModule: Int32 Length2[T](T[,,,]) +Microsoft.FSharp.Collections.Array4DModule: Int32 Length3[T](T[,,,]) +Microsoft.FSharp.Collections.Array4DModule: Int32 Length4[T](T[,,,]) +Microsoft.FSharp.Collections.Array4DModule: System.String ToString() +Microsoft.FSharp.Collections.Array4DModule: System.Type GetType() +Microsoft.FSharp.Collections.Array4DModule: T Get[T](T[,,,], Int32, Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]]) +Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.ArrayModule+Parallel: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.ArrayModule+Parallel: Int32 GetHashCode() +Microsoft.FSharp.Collections.ArrayModule+Parallel: System.String ToString() +Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule+Parallel: System.Type GetType() +Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) +Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule+Parallel: TResult[] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule+Parallel: T[] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) +Microsoft.FSharp.Collections.ArrayModule+Parallel: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[]) +Microsoft.FSharp.Collections.ArrayModule+Parallel: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean Contains[T](T, T[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[], T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.ArrayModule+Parallel +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.String ToString() +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[System.Int32,T][] Indexed[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T,T][] Pairwise[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] Zip[T1,T2](T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1[],T2[]] Unzip[T1,T2](System.Tuple`2[T1,T2][]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TKey,System.Int32][] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TKey,T[]][] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TResult[],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], T[], TState) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TResult[],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] SplitAt[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) +Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() +Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T ExactlyOne[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Get[T](T[], Int32) +Microsoft.FSharp.Collections.ArrayModule: T Head[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T Item[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T Last[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Max[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Min[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Sum[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], T1[], T2[], T3[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], T1[], T2[], TState) +Microsoft.FSharp.Collections.ArrayModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], T[], TState) +Microsoft.FSharp.Collections.ArrayModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, T[]) +Microsoft.FSharp.Collections.ArrayModule: TState[] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], T[], TState) +Microsoft.FSharp.Collections.ArrayModule: TState[] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Append[T](T[], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Concat[T](System.Collections.Generic.IEnumerable`1[T[]]) +Microsoft.FSharp.Collections.ArrayModule: T[] Copy[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Create[T](Int32, T) +Microsoft.FSharp.Collections.ArrayModule: T[] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Distinct[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Empty[T]() +Microsoft.FSharp.Collections.ArrayModule: T[] Except[T](System.Collections.Generic.IEnumerable`1[T], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] GetSubArray[T](T[], Int32, Int32) +Microsoft.FSharp.Collections.ArrayModule: T[] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) +Microsoft.FSharp.Collections.ArrayModule: T[] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ArrayModule: T[] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.ArrayModule: T[] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Replicate[T](Int32, T) +Microsoft.FSharp.Collections.ArrayModule: T[] Reverse[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Singleton[T](T) +Microsoft.FSharp.Collections.ArrayModule: T[] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Skip[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortDescending[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Sort[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Tail[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Take[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Truncate[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Unfold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) +Microsoft.FSharp.Collections.ArrayModule: T[] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] ZeroCreate[T](Int32) +Microsoft.FSharp.Collections.ArrayModule: T[][] ChunkBySize[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[][] SplitInto[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[][] Windowed[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: Void CopyTo[T](T[], Int32, T[], Int32, Int32) +Microsoft.FSharp.Collections.ArrayModule: Void Fill[T](T[], Int32, Int32, T) +Microsoft.FSharp.Collections.ArrayModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[]) +Microsoft.FSharp.Collections.ArrayModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[]) +Microsoft.FSharp.Collections.ArrayModule: Void Set[T](T[], Int32, T) +Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) +Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) +Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() +Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) +Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] NonStructural[T]() +Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() +Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() +Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Cons +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Empty +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 GetHashCode() +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.String ToString() +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.Type GetType() +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean IsCons +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean IsEmpty +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean get_IsCons() +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean get_IsEmpty() +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 CompareTo(Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 Length +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 Tag +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 get_Length() +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 get_Tag() +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1+Tags[T] +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Cons(T, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Empty +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] GetSlice(Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Tail +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] TailOrNull +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Empty() +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Tail() +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_TailOrNull() +Microsoft.FSharp.Collections.FSharpList`1[T]: System.String ToString() +Microsoft.FSharp.Collections.FSharpList`1[T]: System.Type GetType() +Microsoft.FSharp.Collections.FSharpList`1[T]: T Head +Microsoft.FSharp.Collections.FSharpList`1[T]: T HeadOrDefault +Microsoft.FSharp.Collections.FSharpList`1[T]: T Item [Int32] +Microsoft.FSharp.Collections.FSharpList`1[T]: T get_Head() +Microsoft.FSharp.Collections.FSharpList`1[T]: T get_HeadOrDefault() +Microsoft.FSharp.Collections.FSharpList`1[T]: T get_Item(Int32) +Microsoft.FSharp.Collections.FSharpList`1[T]: Void .ctor(T, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean ContainsKey(TKey) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean IsEmpty +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean get_IsEmpty() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 Count +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 GetHashCode() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 get_Count() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Add(TKey, TValue) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Remove(TKey) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Core.FSharpOption`1[TValue] TryFind(TKey) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.String ToString() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.Type GetType() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue Item [TKey] +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue get_Item(TKey) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Void .ctor(System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean Contains(T) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsEmpty +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsProperSubsetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsProperSupersetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsSubsetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsSupersetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean get_IsEmpty() +Microsoft.FSharp.Collections.FSharpSet`1[T]: Int32 Count +Microsoft.FSharp.Collections.FSharpSet`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Collections.FSharpSet`1[T]: Int32 get_Count() +Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] Add(T) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] Remove(T) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Addition(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Subtraction(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: System.String ToString() +Microsoft.FSharp.Collections.FSharpSet`1[T]: System.Type GetType() +Microsoft.FSharp.Collections.FSharpSet`1[T]: T MaximumElement +Microsoft.FSharp.Collections.FSharpSet`1[T]: T MinimumElement +Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MaximumElement() +Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MinimumElement() +Microsoft.FSharp.Collections.FSharpSet`1[T]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] NonStructural[T]() +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() +Microsoft.FSharp.Collections.HashIdentity: System.String ToString() +Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() +Microsoft.FSharp.Collections.ListModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] ChunkBySize[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] SplitInto[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] Windowed[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Int32,T]] Indexed[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T,T]] Pairwise[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]] Zip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,Microsoft.FSharp.Collections.FSharpList`1[T]]] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,System.Int32]] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]] Zip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], Microsoft.FSharp.Collections.FSharpList`1[T3]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Collections.FSharpList`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], Microsoft.FSharp.Collections.FSharpList`1[T3]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TState] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Append[T](Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Concat[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpList`1[T]]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Distinct[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Empty[T]() +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Except[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfArray[T](T[]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Replicate[T](Int32, T) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Reverse[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Singleton[T](T) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Skip[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortDescending[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Sort[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Tail[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Take[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Truncate[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Unfold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.String ToString() +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] SplitAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) +Microsoft.FSharp.Collections.ListModule: System.Type GetType() +Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T ExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Get[T](Microsoft.FSharp.Collections.FSharpList`1[T], Int32) +Microsoft.FSharp.Collections.ListModule: T Head[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Item[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Last[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Max[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Min[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Sum[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], TState) +Microsoft.FSharp.Collections.ListModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) +Microsoft.FSharp.Collections.ListModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.MapModule: Boolean ContainsKey[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.MapModule: Boolean Exists[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Boolean ForAll[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Boolean IsEmpty[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]] ToList[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TResult] Map[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Add[TKey,T](TKey, T, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Empty[TKey,T]() +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Filter[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] OfArray[TKey,T](System.Tuple`2[TKey,T][]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] OfList[TKey,T](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] OfSeq[TKey,T](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Remove[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TKey] TryFindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]] ToSeq[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.String ToString() +Microsoft.FSharp.Collections.MapModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[TKey,T],Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]] Partition[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.Tuple`2[TKey,T][] ToArray[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.Type GetType() +Microsoft.FSharp.Collections.MapModule: T Find[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: TKey FindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T], TState) +Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.SeqModule: Boolean Contains[T](T, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.Int32,T]] Indexed[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T,T]] Pairwise[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T1,T2]] Zip[T1,T2](System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,System.Collections.Generic.IEnumerable`1[T]]] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,System.Int32]] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`3[T1,T2,T3]] Zip3[T1,T2,T3](System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], System.Collections.Generic.IEnumerable`1[T3]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Collect[T,TCollection,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], System.Collections.Generic.IEnumerable`1[T3]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TState] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], System.Collections.Generic.IEnumerable`1[T], TState) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] ChunkBySize[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] SplitInto[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] Windowed[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Append[T](System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Cache[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Cast[T](System.Collections.IEnumerable) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Concat[TCollection,T](System.Collections.Generic.IEnumerable`1[TCollection]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Delay[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Collections.Generic.IEnumerable`1[T]]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Distinct[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Empty[T]() +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Except[T](System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] InitializeInfinite[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfArray[T](T[]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] ReadOnly[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Replicate[T](Int32, T) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Reverse[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Singleton[T](T) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Skip[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortDescending[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Sort[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Tail[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Take[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.String ToString() +Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], System.Collections.Generic.IEnumerable`1[T], TState) +Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Type GetType() +Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T ExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Get[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Head[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Item[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Last[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Max[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Min[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Sum[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], TState) +Microsoft.FSharp.Collections.SeqModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], System.Collections.Generic.IEnumerable`1[T], TState) +Microsoft.FSharp.Collections.SeqModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T[] ToArray[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.SetModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean IsProperSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean IsProperSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean IsSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean IsSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Int32 Count[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Add[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Difference[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Empty[T]() +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] IntersectMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Intersect[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] OfArray[T](T[]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Remove[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Singleton[T](T) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] UnionMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Union[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: System.String ToString() +Microsoft.FSharp.Collections.SetModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpSet`1[T],Microsoft.FSharp.Collections.FSharpSet`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: System.Type GetType() +Microsoft.FSharp.Collections.SetModule: T MaxElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: T MinElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpSet`1[T], TState) +Microsoft.FSharp.Collections.SetModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Control.CommonExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Control.CommonExtensions: Int32 GetHashCode() +Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncWrite(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncReadBytes(System.IO.Stream, Int32) +Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Int32] AsyncRead(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.CommonExtensions: System.IDisposable SubscribeToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.CommonExtensions: System.String ToString() +Microsoft.FSharp.Control.CommonExtensions: System.Type GetType() +Microsoft.FSharp.Control.CommonExtensions: Void AddToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.EventModule: Boolean Equals(System.Object) +Microsoft.FSharp.Control.EventModule: Int32 GetHashCode() +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[T,T]],System.Tuple`2[T,T]] Pairwise[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Choose[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Map[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Scan[TResult,T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Filter[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Merge[TDel1,T,TDel2](Microsoft.FSharp.Control.IEvent`2[TDel1,T], Microsoft.FSharp.Control.IEvent`2[TDel2,T]) +Microsoft.FSharp.Control.EventModule: System.String ToString() +Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult1],TResult1],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult2],TResult2]] Split[T,TResult1,TResult2,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T]] Partition[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: System.Type GetType() +Microsoft.FSharp.Control.EventModule: Void Add[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AwaitTask(System.Threading.Tasks.Task) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Ignore[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Sleep(Int32) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToContext(System.Threading.SynchronizationContext) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToNewThread() +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToThreadPool() +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Boolean] AwaitIAsyncResult(System.IAsyncResult, Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Boolean] AwaitWaitHandle(System.Threading.WaitHandle, Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.IDisposable] OnCancel(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Threading.CancellationToken] CancellationToken +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Threading.CancellationToken] get_CancellationToken() +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Threading.Tasks.Task`1[T]] StartChildAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.Tasks.TaskCreationOptions]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T[]] Parallel[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] AwaitEvent[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] AwaitTask[T](System.Threading.Tasks.Task`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[TArg1,TArg2,TArg3,T](TArg1, TArg2, TArg3, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`5[TArg1,TArg2,TArg3,System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[TArg1,TArg2,T](TArg1, TArg2, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`4[TArg1,TArg2,System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[TArg1,T](TArg1, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg1,System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromContinuations[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]],Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] TryCancelled[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsync: System.String ToString() +Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken DefaultCancellationToken +Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken get_DefaultCancellationToken() +Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.Tasks.TaskCreationOptions], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsync: System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg,System.AsyncCallback,System.Object],System.IAsyncResult],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,Microsoft.FSharp.Core.Unit]] AsBeginEnd[TArg,T](Microsoft.FSharp.Core.FSharpFunc`2[TArg,Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsync: System.Type GetType() +Microsoft.FSharp.Control.FSharpAsync: T RunSynchronously[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsync: Void CancelDefaultToken() +Microsoft.FSharp.Control.FSharpAsync: Void Start(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsync: Void StartImmediate(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsync: Void StartWithContinuations[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] For[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] While(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Zero() +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[TResult] Bind[T,TResult](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[TResult]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[TResult] Using[T,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[TResult]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Combine[T](Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Delay[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] ReturnFrom[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Return[T](T) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryFinally[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryWith[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: System.String ToString() +Microsoft.FSharp.Control.FSharpAsyncBuilder: System.Type GetType() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.String ToString() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.Type GetType() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Void Reply(TReply) +Microsoft.FSharp.Control.FSharpAsync`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsync`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsync`1[T]: System.String ToString() +Microsoft.FSharp.Control.FSharpAsync`1[T]: System.Type GetType() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] Publish +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] get_Publish() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.String ToString() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.Type GetType() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void .ctor() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void Trigger(System.Object[]) +Microsoft.FSharp.Control.FSharpEvent`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpEvent`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Publish +Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] get_Publish() +Microsoft.FSharp.Control.FSharpEvent`1[T]: System.String ToString() +Microsoft.FSharp.Control.FSharpEvent`1[T]: System.Type GetType() +Microsoft.FSharp.Control.FSharpEvent`1[T]: Void .ctor() +Microsoft.FSharp.Control.FSharpEvent`1[T]: Void Trigger(T) +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] Publish +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] get_Publish() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.String ToString() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.Type GetType() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void .ctor() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void Trigger(System.Object, TArgs) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Delegate[] GetInvocationList() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.IAsyncResult BeginInvoke(System.Object, T, System.AsyncCallback, System.Object) +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Clone() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object DynamicInvoke(System.Object[]) +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Target +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object get_Target() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo Method +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo get_Method() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.String ToString() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Type GetType() +Microsoft.FSharp.Control.FSharpHandler`1[T]: Void .ctor(System.Object, IntPtr) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Void EndInvoke(System.IAsyncResult) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Void Invoke(System.Object, T) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 CurrentQueueLength +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 DefaultTimeout +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_CurrentQueueLength() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_DefaultTimeout() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TMsg]] TryReceive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TReply]] PostAndTryAsyncReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] TryScan[T](Microsoft.FSharp.Core.FSharpFunc`2[TMsg,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[TMsg] Receive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[TReply] PostAndAsyncReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[T] Scan[T](Microsoft.FSharp.Core.FSharpFunc`2[TMsg,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpHandler`1[System.Exception] Error +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg] Start(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Core.FSharpOption`1[TReply] TryPostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.String ToString() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.Type GetType() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: TReply PostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Post(TMsg) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Start() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void add_Error(Microsoft.FSharp.Control.FSharpHandler`1[System.Exception]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void remove_Error(Microsoft.FSharp.Control.FSharpHandler`1[System.Exception]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void set_DefaultTimeout(Int32) +Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void AddHandler(TDelegate) +Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelegate) +Microsoft.FSharp.Control.LazyExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Control.LazyExtensions: Int32 GetHashCode() +Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T) +Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) +Microsoft.FSharp.Control.LazyExtensions: System.String ToString() +Microsoft.FSharp.Control.LazyExtensions: System.Type GetType() +Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T]) +Microsoft.FSharp.Control.ObservableModule: Boolean Equals(System.Object) +Microsoft.FSharp.Control.ObservableModule: Int32 GetHashCode() +Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Scan[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Merge[T](System.IObservable`1[T], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.String ToString() +Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[TResult1],System.IObservable`1[TResult2]] Split[T,TResult1,TResult2](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[T],System.IObservable`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.Type GetType() +Microsoft.FSharp.Control.ObservableModule: Void Add[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) +Microsoft.FSharp.Control.WebExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Control.WebExtensions: Int32 GetHashCode() +Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Net.WebResponse] AsyncGetResponse(System.Net.WebRequest) +Microsoft.FSharp.Control.WebExtensions: System.String ToString() +Microsoft.FSharp.Control.WebExtensions: System.Type GetType() +Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AbstractClassAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AbstractClassAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AbstractClassAttribute: System.Object TypeId +Microsoft.FSharp.Core.AbstractClassAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AbstractClassAttribute: System.String ToString() +Microsoft.FSharp.Core.AbstractClassAttribute: System.Type GetType() +Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Value +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean get_Value() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object TypeId +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AutoOpenAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AutoOpenAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AutoOpenAttribute: System.Object TypeId +Microsoft.FSharp.Core.AutoOpenAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AutoOpenAttribute: System.String Path +Microsoft.FSharp.Core.AutoOpenAttribute: System.String ToString() +Microsoft.FSharp.Core.AutoOpenAttribute: System.String get_Path() +Microsoft.FSharp.Core.AutoOpenAttribute: System.Type GetType() +Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor() +Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Value +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean get_Value() +Microsoft.FSharp.Core.AutoSerializableAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object TypeId +Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AutoSerializableAttribute: System.String ToString() +Microsoft.FSharp.Core.AutoSerializableAttribute: System.Type GetType() +Microsoft.FSharp.Core.AutoSerializableAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.CLIEventAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CLIEventAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CLIEventAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CLIEventAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CLIEventAttribute: System.Object TypeId +Microsoft.FSharp.Core.CLIEventAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CLIEventAttribute: System.String ToString() +Microsoft.FSharp.Core.CLIEventAttribute: System.Type GetType() +Microsoft.FSharp.Core.CLIEventAttribute: Void .ctor() +Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CLIMutableAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CLIMutableAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CLIMutableAttribute: System.Object TypeId +Microsoft.FSharp.Core.CLIMutableAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CLIMutableAttribute: System.String ToString() +Microsoft.FSharp.Core.CLIMutableAttribute: System.Type GetType() +Microsoft.FSharp.Core.CLIMutableAttribute: Void .ctor() +Microsoft.FSharp.Core.ClassAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ClassAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ClassAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ClassAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ClassAttribute: System.Object TypeId +Microsoft.FSharp.Core.ClassAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ClassAttribute: System.String ToString() +Microsoft.FSharp.Core.ClassAttribute: System.Type GetType() +Microsoft.FSharp.Core.ClassAttribute: Void .ctor() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object TypeId +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.String ToString() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Type GetType() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] Counts +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] get_Counts() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Void .ctor(Int32[]) +Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 SequenceNumber +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 VariantNumber +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_SequenceNumber() +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_VariantNumber() +Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags SourceConstructFlags +Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ResourceName +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String get_ResourceName() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] TypeDefinitions +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] get_TypeDefinitions() +Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) +Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) +Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) +Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(System.String, System.Type[]) +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags Flags +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags get_Flags() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Void .ctor(Microsoft.FSharp.Core.CompilationRepresentationFlags) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean HasFlag(System.Enum) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 value__ +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Event +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Instance +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags ModuleSuffix +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags None +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Static +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags UseNullAsTrueValue +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString() +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.IFormatProvider) +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String) +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String, System.IFormatProvider) +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.Type GetType() +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.TypeCode GetTypeCode() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String SourceName +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String get_SourceName() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompiledNameAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompiledNameAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompiledNameAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompiledNameAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompiledNameAttribute: System.String CompiledName +Microsoft.FSharp.Core.CompiledNameAttribute: System.String ToString() +Microsoft.FSharp.Core.CompiledNameAttribute: System.String get_CompiledName() +Microsoft.FSharp.Core.CompiledNameAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompiledNameAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsError +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsHidden +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsError() +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsHidden() +Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 MessageNumber +Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 get_MessageNumber() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.String Message +Microsoft.FSharp.Core.CompilerMessageAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.String get_Message() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerMessageAttribute: Void .ctor(System.String, Int32) +Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsError(Boolean) +Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsHidden(Boolean) +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean CheckClose +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean get_CheckClose() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GenerateNext(System.Collections.Generic.IEnumerable`1[T] ByRef) +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Collections.Generic.IEnumerator`1[T] GetFreshEnumerator() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T LastGenerated +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T get_LastGenerated() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void Close() +Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace[] GetNestedNamespaces() +Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.String NamespaceName +Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.String get_NamespaceName() +Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.Type ResolveTypeName(System.String) +Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.Type[] GetTypes() +Microsoft.FSharp.Core.CompilerServices.ITypeProvider2: System.Reflection.MethodBase ApplyStaticArgumentsForMethod(System.Reflection.MethodBase, System.String, System.Object[]) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider2: System.Reflection.ParameterInfo[] GetStaticParametersForMethod(System.Reflection.MethodBase) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Byte[] GetGeneratedAssemblyContents(System.Reflection.Assembly) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace[] GetNamespaces() +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Microsoft.FSharp.Quotations.FSharpExpr GetInvokerExpression(System.Reflection.MethodBase, Microsoft.FSharp.Quotations.FSharpExpr[]) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.EventHandler Invalidate +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Reflection.ParameterInfo[] GetStaticParameters(System.Type) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Type ApplyStaticArguments(System.Type, System.String[], System.Object[]) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void add_Invalidate(System.EventHandler) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void remove_Invalidate(System.EventHandler) +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.MeasureOne: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.MeasureOne: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] CreateEvent[TDelegate,TArgs](Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpFunc`2[TArgs,Microsoft.FSharp.Core.Unit]],TDelegate]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateFromFunctions[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateUsing[T,TCollection,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateThenFinally[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String AssemblyName +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String get_AssemblyName() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsHostedExecution +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsInvalidationSupported +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean SystemRuntimeContainsType(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsHostedExecution() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsInvalidationSupported() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ResolutionFolder +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String RuntimeAssembly +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String TemporaryFolder +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_ResolutionFolder() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_RuntimeAssembly() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_TemporaryFolder() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] ReferencedAssemblies +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] get_ReferencedAssemblies() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version SystemRuntimeAssemblyVersion +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version get_SystemRuntimeAssemblyVersion() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean]) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_IsHostedExecution(Boolean) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_IsInvalidationSupported(Boolean) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_ReferencedAssemblies(System.String[]) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_ResolutionFolder(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_RuntimeAssembly(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_SystemRuntimeAssemblyVersion(System.Version) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_TemporaryFolder(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Column +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Line +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Column() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Line() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String FilePath +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String get_FilePath() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Column(Int32) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_FilePath(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Line(Int32) +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean HasFlag(System.Enum) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 value__ +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes IsErased +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes SuppressRelocate +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.IFormatProvider) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String, System.IFormatProvider) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.TypeCode GetTypeCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String CommentText +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String get_CommentText() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CustomComparisonAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object TypeId +Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CustomComparisonAttribute: System.String ToString() +Microsoft.FSharp.Core.CustomComparisonAttribute: System.Type GetType() +Microsoft.FSharp.Core.CustomComparisonAttribute: Void .ctor() +Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CustomEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CustomEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.CustomEqualityAttribute: System.Type GetType() +Microsoft.FSharp.Core.CustomEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean AllowIntoPattern +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeGroupJoin +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeJoin +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeZip +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpace +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpaceUsingBind +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_AllowIntoPattern() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeGroupJoin() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeJoin() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeZip() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpace() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpaceUsingBind() +Microsoft.FSharp.Core.CustomOperationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CustomOperationAttribute: System.Object TypeId +Microsoft.FSharp.Core.CustomOperationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CustomOperationAttribute: System.String JoinConditionWord +Microsoft.FSharp.Core.CustomOperationAttribute: System.String Name +Microsoft.FSharp.Core.CustomOperationAttribute: System.String ToString() +Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_JoinConditionWord() +Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_Name() +Microsoft.FSharp.Core.CustomOperationAttribute: System.Type GetType() +Microsoft.FSharp.Core.CustomOperationAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_AllowIntoPattern(Boolean) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeGroupJoin(Boolean) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeJoin(Boolean) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeZip(Boolean) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_JoinConditionWord(System.String) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpace(Boolean) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpaceUsingBind(Boolean) +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Value +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean get_Value() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object TypeId +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.String ToString() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Type GetType() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Check +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean get_Check() +Microsoft.FSharp.Core.DefaultValueAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.DefaultValueAttribute: System.Object TypeId +Microsoft.FSharp.Core.DefaultValueAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.DefaultValueAttribute: System.String ToString() +Microsoft.FSharp.Core.DefaultValueAttribute: System.Type GetType() +Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor() +Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.EntryPointAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.EntryPointAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.EntryPointAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.EntryPointAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.EntryPointAttribute: System.Object TypeId +Microsoft.FSharp.Core.EntryPointAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.EntryPointAttribute: System.String ToString() +Microsoft.FSharp.Core.EntryPointAttribute: System.Type GetType() +Microsoft.FSharp.Core.EntryPointAttribute: Void .ctor() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object TypeId +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.String ToString() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Type GetType() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Void .ctor() +Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ExperimentalAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ExperimentalAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ExperimentalAttribute: System.Object TypeId +Microsoft.FSharp.Core.ExperimentalAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ExperimentalAttribute: System.String Message +Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() +Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() +Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() +Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Byte ToByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Int32 GetHashCode() +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: SByte ToSByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.String ToString() +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.Type GetType() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Linq.QueryBuilder get_query() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Linq.QueryBuilder query +Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Single ToSingle[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IDictionary`2[TKey,TValue] CreateDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: System.String ToString() +Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Type GetType() +Microsoft.FSharp.Core.ExtraTopLevelOperators: T LazyPattern[T](System.Lazy`1[T]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToStringThenFail[T,TResult](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToString[T](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,System.String]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T SpliceExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T SpliceUntypedExpression[T](Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T[,] CreateArray2D[?,T](System.Collections.Generic.IEnumerable`1[?]) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean IsChoice1Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean IsChoice2Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean get_IsChoice1Of2() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean get_IsChoice2Of2() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean IsChoice1Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean IsChoice2Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean get_IsChoice1Of2() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean get_IsChoice2Of2() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice1Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice2Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean IsChoice1Of2 +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean IsChoice2Of2 +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean get_IsChoice1Of2() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean get_IsChoice2Of2() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2] +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2] +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2] +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice1Of2(T1) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice2Of2(T2) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean IsChoice1Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean IsChoice2Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean IsChoice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean get_IsChoice1Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean get_IsChoice2Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean get_IsChoice3Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean IsChoice1Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean IsChoice2Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean IsChoice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean get_IsChoice1Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean get_IsChoice2Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean get_IsChoice3Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean IsChoice1Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean IsChoice2Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean IsChoice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean get_IsChoice1Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean get_IsChoice2Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean get_IsChoice3Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 Item +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice1Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice2Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean IsChoice1Of3 +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean IsChoice2Of3 +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean IsChoice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean get_IsChoice1Of3() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean get_IsChoice2Of3() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean get_IsChoice3Of3() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3] +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3] +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3] +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3] +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice1Of3(T1) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice2Of3(T2) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice3Of3(T3) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 Item +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 Item +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 get_Item() +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4] +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4] +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4] +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4] +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4] +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice1Of4(T1) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice2Of4(T2) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice3Of4(T3) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice4Of4(T4) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 Item +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 Item +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 Item +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice1Of5(T1) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice2Of5(T2) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice3Of5(T3) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice4Of5(T4) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice5Of5(T5) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice1Of6(T1) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice2Of6(T2) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice3Of6(T3) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice4Of6(T4) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice5Of6(T5) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice6Of6(T6) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice1Of7(T1) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice2Of7(T2) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice3Of7(T3) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice4Of7(T4) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice5Of7(T5) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice6Of7(T6) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice7Of7(T7) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.String ToString() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Type GetType() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: TResult Invoke(T) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: V InvokeFast[V](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,V]], T, TResult) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Void .ctor() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: W InvokeFast[V,W](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,W]]], T, TResult, V) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: X InvokeFast[V,W,X](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,X]]]], T, TResult, V, W) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Y InvokeFast[V,W,X,Y](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,Microsoft.FSharp.Core.FSharpFunc`2[X,Y]]]]], T, TResult, V, W, X) +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Major +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Minor +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Release +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Major() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Minor() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Release() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object TypeId +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.String ToString() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Type GetType() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Void .ctor(Int32, Int32, Int32) +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 None +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 Some +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.Type GetType() +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean IsNone +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean IsSome +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean get_IsNone(Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean get_IsSome(Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 GetTag(Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1+Tags[T] +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] None +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Some(T) +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() +Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() +Microsoft.FSharp.Core.FSharpOption`1[T]: T Value +Microsoft.FSharp.Core.FSharpOption`1[T]: T get_Value() +Microsoft.FSharp.Core.FSharpOption`1[T]: Void .ctor(T) +Microsoft.FSharp.Core.FSharpRef`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpRef`1[T]) +Microsoft.FSharp.Core.FSharpRef`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpRef`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpRef`1[T]) +Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpRef`1[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpRef`1[T]: System.Type GetType() +Microsoft.FSharp.Core.FSharpRef`1[T]: T Value +Microsoft.FSharp.Core.FSharpRef`1[T]: T contents +Microsoft.FSharp.Core.FSharpRef`1[T]: T contents@ +Microsoft.FSharp.Core.FSharpRef`1[T]: T get_Value() +Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() +Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) +Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) +Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) +Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() +Microsoft.FSharp.Core.FSharpTypeFunc: System.String ToString() +Microsoft.FSharp.Core.FSharpTypeFunc: System.Type GetType() +Microsoft.FSharp.Core.FSharpTypeFunc: Void .ctor() +Microsoft.FSharp.Core.FuncConvert: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FuncConvert: Int32 GetHashCode() +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit] ToFSharpFunc[T](System.Action`1[T]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]] FuncFromTupled[T1,T2,T3,T4,T5,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`5[T1,T2,T3,T4,T5],TResult]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]] FuncFromTupled[T1,T2,T3,T4,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`4[T1,T2,T3,T4],TResult]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]] FuncFromTupled[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[T1,T2,T3],TResult]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FuncFromTupled[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[T1,T2],TResult]) +Microsoft.FSharp.Core.FuncConvert: System.String ToString() +Microsoft.FSharp.Core.FuncConvert: System.Type GetType() +Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.GeneralizableValueAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object TypeId +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.String ToString() +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Type GetType() +Microsoft.FSharp.Core.GeneralizableValueAttribute: Void .ctor() +Microsoft.FSharp.Core.InterfaceAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.InterfaceAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.InterfaceAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.InterfaceAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.InterfaceAttribute: System.Object TypeId +Microsoft.FSharp.Core.InterfaceAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.InterfaceAttribute: System.String ToString() +Microsoft.FSharp.Core.InterfaceAttribute: System.Type GetType() +Microsoft.FSharp.Core.InterfaceAttribute: Void .ctor() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Int32 GetHashCode() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String AddressOpNotFirstClassString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputArrayEmptyString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputMustBeNonNegativeString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputSequenceEmptyString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String NoNegateMinValueString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_AddressOpNotFirstClassString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputArrayEmptyString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputMustBeNonNegativeString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputSequenceEmptyString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_NoNegateMinValueString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple5[T1,T2,T3,T4,T5](System.Collections.IEqualityComparer, System.Tuple`5[T1,T2,T3,T4,T5], System.Tuple`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericEqualityERIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericEqualityIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericEqualityWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericGreaterOrEqualIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericGreaterThanIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericLessOrEqualIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericLessThanIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean PhysicalEqualityIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple2[T1,T2](System.Collections.IComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple3[T1,T2,T3](System.Collections.IComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple4[T1,T2,T3,T4](System.Collections.IComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple5[T1,T2,T3,T4,T5](System.Collections.IComparer, System.Tuple`5[T1,T2,T3,T4,T5], System.Tuple`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple5[T1,T2,T3,T4,T5](System.Collections.IEqualityComparer, System.Tuple`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonWithComparerIntrinsic[T](System.Collections.IComparer, T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashIntrinsic[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GetHashCode() +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 LimitedGenericHashIntrinsic[T](Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 PhysicalHashIntrinsic[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestFast[T](System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestGeneric[T](System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Char GetString(System.String, Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Int32 GetHashCode() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Decimal MakeDecimal(Int32, Int32, Int32, Boolean, Byte) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CheckThis[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CreateInstance[T]() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray2D[T](T[,], Int32, Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray3D[T](T[,,], Int32, Int32, Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray4D[T](T[,,,], Int32, Int32, Int32, Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray[T](T[], Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T UnboxFast[T](System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T UnboxGeneric[T](System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void Dispose[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void FailInit() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void FailStaticInit() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray2D[T](T[,], Int32, Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray3D[T](T[,,], Int32, Int32, Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray4D[T](T[,,,], Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray[T](T[], Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Or(Boolean, Boolean) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_Amp(Boolean, Boolean) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanAnd(Boolean, Boolean) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanOr(Boolean, Boolean) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Int32 GetHashCode() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: IntPtr op_IntegerAddressOf[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: T& op_AddressOf[T](T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityER[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityWithComparer[T](System.Collections.IEqualityComparer, T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEquality[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericGreaterOrEqual[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericGreaterThan[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericLessOrEqual[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericLessThan[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean PhysicalEquality[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Double FloatWithMeasure(Double) +Microsoft.FSharp.Core.LanguagePrimitives: Int16 Int16WithMeasure(Int16) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparisonWithComparer[T](System.Collections.IComparer, T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparison[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHashWithComparer[T](System.Collections.IEqualityComparer, T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHash[T](T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericLimitedHash[T](Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GetHashCode() +Microsoft.FSharp.Core.LanguagePrimitives: Int32 Int32WithMeasure(Int32) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 ParseInt32(System.String) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 PhysicalHash[T](T) +Microsoft.FSharp.Core.LanguagePrimitives: Int64 Int64WithMeasure(Int64) +Microsoft.FSharp.Core.LanguagePrimitives: Int64 ParseInt64(System.String) +Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings +Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+HashCompare +Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions +Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators +Microsoft.FSharp.Core.LanguagePrimitives: SByte SByteWithMeasure(SByte) +Microsoft.FSharp.Core.LanguagePrimitives: Single Float32WithMeasure(Single) +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IComparer`1[T] FastGenericComparerFromTable[T]() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IComparer`1[T] FastGenericComparer[T]() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastGenericEqualityComparerFromTable[T]() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastGenericEqualityComparer[T]() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastLimitedGenericEqualityComparer[T](Int32) +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IComparer GenericComparer +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IComparer get_GenericComparer() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer GenericEqualityComparer +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer GenericEqualityERComparer +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityComparer() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityERComparer() +Microsoft.FSharp.Core.LanguagePrimitives: System.Decimal DecimalWithMeasure(System.Decimal) +Microsoft.FSharp.Core.LanguagePrimitives: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives: T DivideByIntDynamic[T](T, Int32) +Microsoft.FSharp.Core.LanguagePrimitives: T DivideByInt[T](T, Int32) +Microsoft.FSharp.Core.LanguagePrimitives: T EnumToValue[TEnum,T](TEnum) +Microsoft.FSharp.Core.LanguagePrimitives: T GenericMaximum[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: T GenericMinimum[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: T GenericOneDynamic[T]() +Microsoft.FSharp.Core.LanguagePrimitives: T GenericOne[T]() +Microsoft.FSharp.Core.LanguagePrimitives: T GenericZeroDynamic[T]() +Microsoft.FSharp.Core.LanguagePrimitives: T GenericZero[T]() +Microsoft.FSharp.Core.LanguagePrimitives: TEnum EnumOfValue[T,TEnum](T) +Microsoft.FSharp.Core.LanguagePrimitives: TResult AdditionDynamic[T1,T2,TResult](T1, T2) +Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedAdditionDynamic[T1,T2,TResult](T1, T2) +Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedMultiplyDynamic[T1,T2,TResult](T1, T2) +Microsoft.FSharp.Core.LanguagePrimitives: TResult MultiplyDynamic[T1,T2,TResult](T1, T2) +Microsoft.FSharp.Core.LanguagePrimitives: UInt32 ParseUInt32(System.String) +Microsoft.FSharp.Core.LanguagePrimitives: UInt64 ParseUInt64(System.String) +Microsoft.FSharp.Core.LiteralAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LiteralAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.LiteralAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.LiteralAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.LiteralAttribute: System.Object TypeId +Microsoft.FSharp.Core.LiteralAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.LiteralAttribute: System.String ToString() +Microsoft.FSharp.Core.LiteralAttribute: System.Type GetType() +Microsoft.FSharp.Core.LiteralAttribute: Void .ctor() +Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object) +Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.MatchFailureException: Int32 Data1 +Microsoft.FSharp.Core.MatchFailureException: Int32 Data2 +Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode() +Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.MatchFailureException: Int32 HResult +Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data1() +Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data2() +Microsoft.FSharp.Core.MatchFailureException: Int32 get_HResult() +Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary Data +Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary get_Data() +Microsoft.FSharp.Core.MatchFailureException: System.Exception GetBaseException() +Microsoft.FSharp.Core.MatchFailureException: System.Exception InnerException +Microsoft.FSharp.Core.MatchFailureException: System.Exception get_InnerException() +Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase TargetSite +Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase get_TargetSite() +Microsoft.FSharp.Core.MatchFailureException: System.String Data0 +Microsoft.FSharp.Core.MatchFailureException: System.String HelpLink +Microsoft.FSharp.Core.MatchFailureException: System.String Message +Microsoft.FSharp.Core.MatchFailureException: System.String Source +Microsoft.FSharp.Core.MatchFailureException: System.String StackTrace +Microsoft.FSharp.Core.MatchFailureException: System.String ToString() +Microsoft.FSharp.Core.MatchFailureException: System.String get_Data0() +Microsoft.FSharp.Core.MatchFailureException: System.String get_HelpLink() +Microsoft.FSharp.Core.MatchFailureException: System.String get_Message() +Microsoft.FSharp.Core.MatchFailureException: System.String get_Source() +Microsoft.FSharp.Core.MatchFailureException: System.String get_StackTrace() +Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() +Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() +Microsoft.FSharp.Core.MatchFailureException: Void .ctor() +Microsoft.FSharp.Core.MatchFailureException: Void .ctor(System.String, Int32, Int32) +Microsoft.FSharp.Core.MatchFailureException: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) +Microsoft.FSharp.Core.MatchFailureException: Void set_HelpLink(System.String) +Microsoft.FSharp.Core.MatchFailureException: Void set_Source(System.String) +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object TypeId +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.String ToString() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Type GetType() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Void .ctor() +Microsoft.FSharp.Core.MeasureAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.MeasureAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.MeasureAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.MeasureAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.MeasureAttribute: System.Object TypeId +Microsoft.FSharp.Core.MeasureAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.MeasureAttribute: System.String ToString() +Microsoft.FSharp.Core.MeasureAttribute: System.Type GetType() +Microsoft.FSharp.Core.MeasureAttribute: Void .ctor() +Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NoComparisonAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.NoComparisonAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.NoComparisonAttribute: System.Object TypeId +Microsoft.FSharp.Core.NoComparisonAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.NoComparisonAttribute: System.String ToString() +Microsoft.FSharp.Core.NoComparisonAttribute: System.Type GetType() +Microsoft.FSharp.Core.NoComparisonAttribute: Void .ctor() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object TypeId +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.String ToString() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Type GetType() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Void .ctor() +Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NoEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.NoEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.NoEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.NoEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.NoEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.NoEqualityAttribute: System.Type GetType() +Microsoft.FSharp.Core.NoEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Int32 GetHashCode() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromInt64Dynamic(Int64) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromStringDynamic(System.String) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.String ToString() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Type GetType() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt32[T](Int32) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt64[T](Int64) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromOne[T]() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromString[T](System.String) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromZero[T]() +Microsoft.FSharp.Core.NumericLiterals: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NumericLiterals: Int32 GetHashCode() +Microsoft.FSharp.Core.NumericLiterals: Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI +Microsoft.FSharp.Core.NumericLiterals: System.String ToString() +Microsoft.FSharp.Core.NumericLiterals: System.Type GetType() +Microsoft.FSharp.Core.Operators+Checked: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T) +Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T) +Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16[T](T) +Microsoft.FSharp.Core.Operators+Checked: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt32[T](T) +Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt[T](T) +Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T) +Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T) +Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T) +Microsoft.FSharp.Core.Operators+Checked: System.String ToString() +Microsoft.FSharp.Core.Operators+Checked: System.Type GetType() +Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation[T](T) +Microsoft.FSharp.Core.Operators+Checked: T3 op_Addition[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators+Checked: T3 op_Multiply[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators+Checked: T3 op_Subtraction[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) +Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) +Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) +Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Equality[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThanOrEqual[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThan[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Inequality[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThanOrEqual[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThan[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.String ToString() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.Type GetType() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Max[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Min[T](T, T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int16 PowInt16(Int16, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 PowInt32(Int32, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 SignDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int64 PowInt64(Int64, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: IntPtr PowIntPtr(IntPtr, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: SByte PowSByte(SByte, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Single PowSingle(Single, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Byte] RangeByte(Byte, Byte, Byte) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Char] RangeChar(Char, Char) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Double] RangeDouble(Double, Double, Double) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Int16] RangeInt16(Int16, Int16, Int16) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Int32] RangeInt32(Int32, Int32, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Int64] RangeInt64(Int64, Int64, Int64) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.IntPtr] RangeIntPtr(IntPtr, IntPtr, IntPtr) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.SByte] RangeSByte(SByte, SByte, SByte) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Single] RangeSingle(Single, Single, Single) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UInt16] RangeUInt16(UInt16, UInt16, UInt16) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UInt32] RangeUInt32(UInt32, UInt32, UInt32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UInt64] RangeUInt64(UInt64, UInt64, UInt64) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UIntPtr] RangeUIntPtr(UIntPtr, UIntPtr, UIntPtr) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeGeneric[T](T, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T, T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeStepGeneric[TStep,T](TStep, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Decimal PowDecimal(System.Decimal, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String GetStringSlice(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String ToString() +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Type GetType() +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AbsDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AcosDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AsinDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AtanDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T CeilingDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T CosDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T CoshDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T ExpDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T FloorDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T Log10Dynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T LogDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T PowDynamic[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T PowGeneric[T](T, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T RoundDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T SinDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T SinhDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T TanDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T TanhDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T TruncateDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T2 Atan2Dynamic[T1,T2](T1, T1) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T2 SqrtDynamic[T1,T2](T1) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,,] GetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice2DFixed1[T](T[,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice2DFixed2[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt16 PowUInt16(UInt16, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt32 PowUInt32(UInt32, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt64 PowUInt64(UInt64, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UIntPtr PowUIntPtr(UIntPtr, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2DFixed1[T](T[,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2DFixed2[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) +Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) +Microsoft.FSharp.Core.Operators+Unchecked: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators+Unchecked: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators+Unchecked: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators+Unchecked: System.String ToString() +Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() +Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() +Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object) +Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T) +Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) +Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) +Microsoft.FSharp.Core.Operators: Boolean op_GreaterThanOrEqual[T](T, T) +Microsoft.FSharp.Core.Operators: Boolean op_GreaterThan[T](T, T) +Microsoft.FSharp.Core.Operators: Boolean op_Inequality[T](T, T) +Microsoft.FSharp.Core.Operators: Boolean op_LessThanOrEqual[T](T, T) +Microsoft.FSharp.Core.Operators: Boolean op_LessThan[T](T, T) +Microsoft.FSharp.Core.Operators: Byte ToByte[T](T) +Microsoft.FSharp.Core.Operators: Char ToChar[T](T) +Microsoft.FSharp.Core.Operators: Double Infinity +Microsoft.FSharp.Core.Operators: Double NaN +Microsoft.FSharp.Core.Operators: Double ToDouble[T](T) +Microsoft.FSharp.Core.Operators: Double get_Infinity() +Microsoft.FSharp.Core.Operators: Double get_NaN() +Microsoft.FSharp.Core.Operators: Int16 ToInt16[T](T) +Microsoft.FSharp.Core.Operators: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators: Int32 Sign[T](T) +Microsoft.FSharp.Core.Operators: Int32 SizeOf[T]() +Microsoft.FSharp.Core.Operators: Int32 ToInt32[T](T) +Microsoft.FSharp.Core.Operators: Int32 ToInt[T](T) +Microsoft.FSharp.Core.Operators: Int32 limitedHash[T](Int32, T) +Microsoft.FSharp.Core.Operators: Int64 ToInt64[T](T) +Microsoft.FSharp.Core.Operators: IntPtr ToIntPtr[T](T) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Collections.FSharpList`1[T] op_Append[T](Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeLeft[T2,T3,T1](Microsoft.FSharp.Core.FSharpFunc`2[T2,T3], Microsoft.FSharp.Core.FSharpFunc`2[T1,T2]) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeRight[T1,T2,T3](Microsoft.FSharp.Core.FSharpFunc`2[T1,T2], Microsoft.FSharp.Core.FSharpFunc`2[T2,T3]) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[System.String] FailurePattern(System.Exception) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[T] TryUnbox[T](System.Object) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpRef`1[T] Ref[T](T) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Checked +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+NonStructuralComparison +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+OperatorIntrinsics +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Unchecked +Microsoft.FSharp.Core.Operators: SByte ToSByte[T](T) +Microsoft.FSharp.Core.Operators: Single InfinitySingle +Microsoft.FSharp.Core.Operators: Single NaNSingle +Microsoft.FSharp.Core.Operators: Single ToSingle[T](T) +Microsoft.FSharp.Core.Operators: Single get_InfinitySingle() +Microsoft.FSharp.Core.Operators: Single get_NaNSingle() +Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] CreateSequence[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_RangeStep[T,TStep](T, TStep, T) +Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_Range[T](T, T) +Microsoft.FSharp.Core.Operators: System.Decimal ToDecimal[T](T) +Microsoft.FSharp.Core.Operators: System.Exception Failure(System.String) +Microsoft.FSharp.Core.Operators: System.Object Box[T](T)" + +#if DEBUG + @" +Microsoft.FSharp.Core.Operators: System.RuntimeMethodHandle MethodHandleOf[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult])" + +#endif + @" +Microsoft.FSharp.Core.Operators: System.String ToString() +Microsoft.FSharp.Core.Operators: System.String ToString[T](T) +Microsoft.FSharp.Core.Operators: System.String op_Concatenate(System.String, System.String) +Microsoft.FSharp.Core.Operators: System.Tuple`2[TKey,TValue] KeyValuePattern[TKey,TValue](System.Collections.Generic.KeyValuePair`2[TKey,TValue]) +Microsoft.FSharp.Core.Operators: System.Type GetType() +Microsoft.FSharp.Core.Operators: System.Type TypeDefOf[T]() +Microsoft.FSharp.Core.Operators: System.Type TypeOf[T]() +Microsoft.FSharp.Core.Operators: T Abs[T](T) +Microsoft.FSharp.Core.Operators: T Acos[T](T) +Microsoft.FSharp.Core.Operators: T Asin[T](T) +Microsoft.FSharp.Core.Operators: T Atan[T](T) +Microsoft.FSharp.Core.Operators: T Ceiling[T](T) +Microsoft.FSharp.Core.Operators: T Cos[T](T) +Microsoft.FSharp.Core.Operators: T Cosh[T](T) +Microsoft.FSharp.Core.Operators: T DefaultArg[T](Microsoft.FSharp.Core.FSharpOption`1[T], T) +Microsoft.FSharp.Core.Operators: T Exp[T](T) +Microsoft.FSharp.Core.Operators: T FailWith[T](System.String) +Microsoft.FSharp.Core.Operators: T Floor[T](T) +Microsoft.FSharp.Core.Operators: T Identity[T](T) +Microsoft.FSharp.Core.Operators: T InvalidArg[T](System.String, System.String) +Microsoft.FSharp.Core.Operators: T InvalidOp[T](System.String) +Microsoft.FSharp.Core.Operators: T Lock[TLock,T](TLock, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) +Microsoft.FSharp.Core.Operators: T Log10[T](T) +Microsoft.FSharp.Core.Operators: T Log[T](T) +Microsoft.FSharp.Core.Operators: T Max[T](T, T) +Microsoft.FSharp.Core.Operators: T Min[T](T, T) +Microsoft.FSharp.Core.Operators: T NullArg[T](System.String) +Microsoft.FSharp.Core.Operators: T PowInteger[T](T, Int32) +Microsoft.FSharp.Core.Operators: T Raise[T](System.Exception) +Microsoft.FSharp.Core.Operators: T Reraise[T]() +Microsoft.FSharp.Core.Operators: T Rethrow[T]() +Microsoft.FSharp.Core.Operators: T Round[T](T) +Microsoft.FSharp.Core.Operators: T Sin[T](T) +Microsoft.FSharp.Core.Operators: T Sinh[T](T) +Microsoft.FSharp.Core.Operators: T Tan[T](T) +Microsoft.FSharp.Core.Operators: T Tanh[T](T) +Microsoft.FSharp.Core.Operators: T Truncate[T](T) +Microsoft.FSharp.Core.Operators: T Unbox[T](System.Object) +Microsoft.FSharp.Core.Operators: T op_BitwiseAnd[T](T, T) +Microsoft.FSharp.Core.Operators: T op_BitwiseOr[T](T, T) +Microsoft.FSharp.Core.Operators: T op_Dereference[T](Microsoft.FSharp.Core.FSharpRef`1[T]) +Microsoft.FSharp.Core.Operators: T op_ExclusiveOr[T](T, T) +Microsoft.FSharp.Core.Operators: T op_Exponentiation[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators: T op_LeftShift[T](T, Int32) +Microsoft.FSharp.Core.Operators: T op_LogicalNot[T](T) +Microsoft.FSharp.Core.Operators: T op_RightShift[T](T, Int32) +Microsoft.FSharp.Core.Operators: T op_UnaryNegation[T](T) +Microsoft.FSharp.Core.Operators: T op_UnaryPlus[T](T) +Microsoft.FSharp.Core.Operators: T1 Fst[T1,T2](System.Tuple`2[T1,T2]) +Microsoft.FSharp.Core.Operators: T2 Atan2[T1,T2](T1, T1) +Microsoft.FSharp.Core.Operators: T2 Snd[T1,T2](System.Tuple`2[T1,T2]) +Microsoft.FSharp.Core.Operators: T3 op_Addition[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators: T3 op_Division[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators: T3 op_Modulus[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators: T3 op_Multiply[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators: T3 op_Subtraction[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators: TResult Sqrt[T,TResult](T) +Microsoft.FSharp.Core.Operators: TResult ToEnum[TResult](Int32) +Microsoft.FSharp.Core.Operators: TResult Using[T,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) +Microsoft.FSharp.Core.Operators: TResult op_PipeLeft2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], T1, T2) +Microsoft.FSharp.Core.Operators: TResult op_PipeLeft3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], T1, T2, T3) +Microsoft.FSharp.Core.Operators: TResult op_PipeLeft[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T) +Microsoft.FSharp.Core.Operators: TResult op_PipeRight2[T1,T2,TResult](T1, T2, Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) +Microsoft.FSharp.Core.Operators: TResult op_PipeRight3[T1,T2,T3,TResult](T1, T2, T3, Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) +Microsoft.FSharp.Core.Operators: TResult op_PipeRight[T1,TResult](T1, Microsoft.FSharp.Core.FSharpFunc`2[T1,TResult]) +Microsoft.FSharp.Core.Operators: UInt16 ToUInt16[T](T) +Microsoft.FSharp.Core.Operators: UInt32 ToUInt32[T](T) +Microsoft.FSharp.Core.Operators: UInt64 ToUInt64[T](T) +Microsoft.FSharp.Core.Operators: UIntPtr ToUIntPtr[T](T) +Microsoft.FSharp.Core.Operators: Void Decrement(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) +Microsoft.FSharp.Core.Operators: Void Ignore[T](T) +Microsoft.FSharp.Core.Operators: Void Increment(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) +Microsoft.FSharp.Core.Operators: Void op_ColonEquals[T](Microsoft.FSharp.Core.FSharpRef`1[T], T) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: FSharpFunc`3 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.Type GetType() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: TResult Invoke(T1, T2) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: FSharpFunc`4 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.Type GetType() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: TResult Invoke(T1, T2, T3) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: FSharpFunc`5 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.Type GetType() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: TResult Invoke(T1, T2, T3, T4) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: FSharpFunc`6 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.Type GetType() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: TResult Invoke(T1, T2, T3, T4, T5) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures: Int32 GetHashCode() +Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult] +Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult] +Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult] +Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult] +Microsoft.FSharp.Core.OptimizedClosures: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures: System.Type GetType() +Microsoft.FSharp.Core.OptionModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptionModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Int32 Count[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfNullable[T](System.Nullable`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfObj[T](T) +Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: System.String ToString() +Microsoft.FSharp.Core.OptionModule: System.Type GetType() +Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: T ToObj[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpOption`1[T], TState) +Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.OptionalArgumentAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object TypeId +Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.OptionalArgumentAttribute: System.String ToString() +Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Type GetType() +Microsoft.FSharp.Core.OptionalArgumentAttribute: Void .ctor() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String ToString() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String Value +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String get_Value() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.Type GetType() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Void .ctor(System.String) +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Int32 GetHashCode() +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String ToString() +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String Value +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String get_Value() +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.Type GetType() +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Void .ctor(System.String) +Microsoft.FSharp.Core.PrintfModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.PrintfModule: Int32 GetHashCode() +Microsoft.FSharp.Core.PrintfModule: System.String ToString() +Microsoft.FSharp.Core.PrintfModule: System.Type GetType() +Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[System.String,TResult], Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringBuilderThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.Text.StringBuilder, Microsoft.FSharp.Core.PrintfFormat`4[T,System.Text.StringBuilder,Microsoft.FSharp.Core.Unit,TResult]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringBuilder[T](System.Text.StringBuilder, Microsoft.FSharp.Core.PrintfFormat`4[T,System.Text.StringBuilder,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThenFail[T,TResult](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[System.String,TResult], Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[T](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,System.String]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriterThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,TResult]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ProjectionParameterAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object TypeId +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.String ToString() +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Type GetType() +Microsoft.FSharp.Core.ProjectionParameterAttribute: Void .ctor() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IncludeValue +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean get_IncludeValue() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object TypeId +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object TypeId +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.String ToString() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Type GetType() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Void .ctor() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object TypeId +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() +Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.SealedAttribute: Boolean Value +Microsoft.FSharp.Core.SealedAttribute: Boolean get_Value() +Microsoft.FSharp.Core.SealedAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.SealedAttribute: System.Object TypeId +Microsoft.FSharp.Core.SealedAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.SealedAttribute: System.String ToString() +Microsoft.FSharp.Core.SealedAttribute: System.Type GetType() +Microsoft.FSharp.Core.SealedAttribute: Void .ctor() +Microsoft.FSharp.Core.SealedAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.SourceConstructFlags: Boolean Equals(System.Object) +Microsoft.FSharp.Core.SourceConstructFlags: Boolean HasFlag(System.Enum) +Microsoft.FSharp.Core.SourceConstructFlags: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.SourceConstructFlags: Int32 GetHashCode() +Microsoft.FSharp.Core.SourceConstructFlags: Int32 value__ +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Closure +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Exception +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Field +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags KindMask +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Module +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags NonPublicRepresentation +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags None +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags ObjectType +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags RecordType +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags SumType +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags UnionCase +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Value +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString() +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.IFormatProvider) +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String) +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String, System.IFormatProvider) +Microsoft.FSharp.Core.SourceConstructFlags: System.Type GetType() +Microsoft.FSharp.Core.SourceConstructFlags: System.TypeCode GetTypeCode() +Microsoft.FSharp.Core.StringModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StringModule: Boolean Exists(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) +Microsoft.FSharp.Core.StringModule: Boolean ForAll(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) +Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() +Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) +Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) +Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) +Microsoft.FSharp.Core.StringModule: System.String Filter(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) +Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) +Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) +Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) +Microsoft.FSharp.Core.StringModule: System.String Replicate(Int32, System.String) +Microsoft.FSharp.Core.StringModule: System.String ToString() +Microsoft.FSharp.Core.StringModule: System.Type GetType() +Microsoft.FSharp.Core.StringModule: Void Iterate(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit], System.String) +Microsoft.FSharp.Core.StringModule: Void IterateIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit]], System.String) +Microsoft.FSharp.Core.StructAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructAttribute: System.String ToString() +Microsoft.FSharp.Core.StructAttribute: System.Type GetType() +Microsoft.FSharp.Core.StructAttribute: Void .ctor() +Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructuralComparisonAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.String ToString() +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Type GetType() +Microsoft.FSharp.Core.StructuralComparisonAttribute: Void .ctor() +Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructuralEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Type GetType() +Microsoft.FSharp.Core.StructuralEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String ToString() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String Value +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String get_Value() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Type GetType() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.Unit: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Unit: Int32 GetHashCode() +Microsoft.FSharp.Core.Unit: System.String ToString() +Microsoft.FSharp.Core.Unit: System.Type GetType() +Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.UnverifiableAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.UnverifiableAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.UnverifiableAttribute: System.Object TypeId +Microsoft.FSharp.Core.UnverifiableAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.UnverifiableAttribute: System.String ToString() +Microsoft.FSharp.Core.UnverifiableAttribute: System.Type GetType() +Microsoft.FSharp.Core.UnverifiableAttribute: Void .ctor() +Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.VolatileFieldAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object TypeId +Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.VolatileFieldAttribute: System.String ToString() +Microsoft.FSharp.Core.VolatileFieldAttribute: System.Type GetType() +Microsoft.FSharp.Core.VolatileFieldAttribute: Void .ctor() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.Type GetType() +Microsoft.FSharp.Linq.NullableModule: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.NullableModule: Int32 GetHashCode() +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToByte[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToUInt8[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Char] ToChar[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Decimal] ToDecimal[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Double] ToDouble[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Double] ToFloat[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int16] ToInt16[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int32] ToInt32[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int32] ToInt[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int64] ToInt64[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.IntPtr] ToIntPtr[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.SByte] ToInt8[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.SByte] ToSByte[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Single] ToFloat32[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Single] ToSingle[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt16] ToUInt16[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt32] ToUInt32[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt64] ToUInt64[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UIntPtr] ToUIntPtr[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[TResult] ToEnum[TResult](System.Nullable`1[System.Int32]) +Microsoft.FSharp.Linq.NullableModule: System.String ToString() +Microsoft.FSharp.Linq.NullableModule: System.Type GetType() +Microsoft.FSharp.Linq.NullableOperators: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_EqualsQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterEqualsQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_LessEqualsQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_LessGreaterQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_LessQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkEqualsQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkEquals[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkGreaterEqualsQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkGreaterEquals[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkGreaterQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkGreater[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessEqualsQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessEquals[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreaterQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreater[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLess[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Int32 GetHashCode() +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_DivideQmark[T1,T2,T3](T1, System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MinusQmark[T1,T2,T3](T1, System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MultiplyQmark[T1,T2,T3](T1, System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_PercentQmark[T1,T2,T3](T1, System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_PlusQmark[T1,T2,T3](T1, System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkDivideQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkDivide[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkMinusQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkMinus[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkMultiplyQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkMultiply[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercentQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercent[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlusQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlus[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.String ToString() +Microsoft.FSharp.Linq.NullableOperators: System.Type GetType() +Microsoft.FSharp.Linq.QueryBuilder: Boolean All[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: Boolean Contains[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], T) +Microsoft.FSharp.Linq.QueryBuilder: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QueryBuilder: Boolean Exists[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: Int32 Count[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: Int32 GetHashCode() +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,TValue],Q] GroupValBy[T,TKey,TValue,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,T],Q] GroupBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Distinct[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] SkipWhile[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Skip[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Int32) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] SortByDescending[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] SortByNullableDescending[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TKey]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] SortByNullable[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TKey]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] SortBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Source[T,Q](System.Linq.IQueryable`1[T]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] TakeWhile[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Take[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Int32) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] ThenByDescending[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] ThenByNullableDescending[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TKey]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] ThenByNullable[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TKey]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] ThenBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Where[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] YieldFrom[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Yield[T,Q](T) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Zero[T,Q]() +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,System.Collections.IEnumerable] Source[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[TResult,Q] For[T,Q,TResult,Q2](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Linq.QuerySource`2[TResult,Q2]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[TResult,Q] GroupJoin[TOuter,Q,TInner,TKey,TResult](Microsoft.FSharp.Linq.QuerySource`2[TOuter,Q], Microsoft.FSharp.Linq.QuerySource`2[TInner,Q], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TInner,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,Microsoft.FSharp.Core.FSharpFunc`2[System.Collections.Generic.IEnumerable`1[TInner],TResult]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[TResult,Q] Join[TOuter,Q,TInner,TKey,TResult](Microsoft.FSharp.Linq.QuerySource`2[TOuter,Q], Microsoft.FSharp.Linq.QuerySource`2[TInner,Q], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TInner,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,Microsoft.FSharp.Core.FSharpFunc`2[TInner,TResult]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[TResult,Q] LeftOuterJoin[TOuter,Q,TInner,TKey,TResult](Microsoft.FSharp.Linq.QuerySource`2[TOuter,Q], Microsoft.FSharp.Linq.QuerySource`2[TInner,Q], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TInner,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,Microsoft.FSharp.Core.FSharpFunc`2[System.Collections.Generic.IEnumerable`1[TInner],TResult]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[TResult,Q] Select[T,Q,TResult](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Quotations.FSharpExpr`1[T] Quote[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Linq.QueryBuilder: System.Linq.IQueryable`1[T] Run[T](Microsoft.FSharp.Quotations.FSharpExpr`1[Microsoft.FSharp.Linq.QuerySource`2[T,System.Linq.IQueryable]]) +Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] AverageByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) +Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MaxByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) +Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MinByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) +Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] SumByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) +Microsoft.FSharp.Linq.QueryBuilder: System.String ToString() +Microsoft.FSharp.Linq.QueryBuilder: System.Type GetType() +Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOneOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOne[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T Find[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: T HeadOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T Head[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T LastOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T Last[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T Nth[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Int32) +Microsoft.FSharp.Linq.QueryBuilder: TValue AverageBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) +Microsoft.FSharp.Linq.QueryBuilder: TValue MaxBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) +Microsoft.FSharp.Linq.QueryBuilder: TValue MinBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) +Microsoft.FSharp.Linq.QueryBuilder: TValue SumBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) +Microsoft.FSharp.Linq.QueryBuilder: Void .ctor() +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Int32 GetHashCode() +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Collections.Generic.IEnumerable`1[T] RunQueryAsEnumerable[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[Microsoft.FSharp.Linq.QuerySource`2[T,System.Collections.IEnumerable]]) +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.String ToString() +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Type GetType() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Int32 GetHashCode() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.String ToString() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.Type GetType() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: T RunQueryAsValue[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Int32 GetHashCode() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] Source +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] get_Source() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.String ToString() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Type GetType() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Void .ctor(T1) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Void .ctor(T1, T2) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Void .ctor(T1, T2, T3) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 Item4 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 get_Item4() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Void .ctor(T1, T2, T3, T4) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T4 Item4 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T4 get_Item4() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 Item5 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 get_Item5() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Void .ctor(T1, T2, T3, T4, T5) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T4 Item4 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T4 get_Item4() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T5 Item5 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T5 get_Item5() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 Item6 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 get_Item6() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Void .ctor(T1, T2, T3, T4, T5, T6) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T4 Item4 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item4() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T5 Item5 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item5() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T6 Item6 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item6() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 Item7 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item7() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Void .ctor(T1, T2, T3, T4, T5, T6, T7) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T4 Item4 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T4 get_Item4() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T5 Item5 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T5 get_Item5() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T6 Item6 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T6 get_Item6() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T7 Item7 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T7 get_Item7() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 Item8 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 get_Item8() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Void .ctor(T1, T2, T3, T4, T5, T6, T7, T8) +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Void .ctor(K, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr SubstHelperRaw(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr`1[T] SubstHelper[T](Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression QuotationToExpression(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] ImplicitExpressionConversionHelper[T](T) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] QuotationToLambdaExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Object EvaluateQuotation(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T MemberInitializationHelper[T](T) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T NewAnonymousObjectHelper[T](T) +Microsoft.FSharp.NativeInterop.NativePtrModule: Boolean Equals(System.Object) +Microsoft.FSharp.NativeInterop.NativePtrModule: Int32 GetHashCode() +Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr AddPointerInlined[T](IntPtr, Int32) +Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfNativeIntInlined[T](IntPtr) +Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr StackAllocate[T](Int32) +Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr ToNativeIntInlined[T](IntPtr) +Microsoft.FSharp.NativeInterop.NativePtrModule: System.String ToString() +Microsoft.FSharp.NativeInterop.NativePtrModule: System.Type GetType() +Microsoft.FSharp.NativeInterop.NativePtrModule: T GetPointerInlined[T](IntPtr, Int32) +Microsoft.FSharp.NativeInterop.NativePtrModule: T ReadPointerInlined[T](IntPtr) +Microsoft.FSharp.NativeInterop.NativePtrModule: Void SetPointerInlined[T](IntPtr, Int32, T) +Microsoft.FSharp.NativeInterop.NativePtrModule: Void WritePointerInlined[T](IntPtr, T) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Int32 GetHashCode() +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[System.Type],Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] SpecificCallPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] UnitPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] MethodWithReflectedDefinitionPattern(System.Reflection.MethodBase) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] PropertyGetterWithReflectedDefinitionPattern(System.Reflection.PropertyInfo) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] PropertySetterWithReflectedDefinitionPattern(System.Reflection.PropertyInfo) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] BoolPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Byte] BytePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Char] CharPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Decimal] DecimalPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Double] DoublePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int16] Int16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] Int32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int64] Int64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.SByte] SBytePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Single] SinglePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.String] StringPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar]],Microsoft.FSharp.Quotations.FSharpExpr]] LambdasPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] ApplicationsPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] AndAlsoPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] OrElsePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] UInt16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt32] UInt32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt64] UInt64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: System.String ToString() +Microsoft.FSharp.Quotations.DerivedPatternsModule: System.Type GetType() +Microsoft.FSharp.Quotations.ExprShapeModule: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.ExprShapeModule: Int32 GetHashCode() +Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Core.FSharpChoice`3[Microsoft.FSharp.Quotations.FSharpVar,System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr],System.Tuple`2[System.Object,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] ShapePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Quotations.FSharpExpr RebuildShapeCombination(System.Object, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.ExprShapeModule: System.String ToString() +Microsoft.FSharp.Quotations.ExprShapeModule: System.Type GetType() +Microsoft.FSharp.Quotations.FSharpExpr: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.FSharpExpr: Int32 GetHashCode() +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] get_CustomAttributes() +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] TryGetReflectedDefinition(System.Reflection.MethodBase) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr AddressOf(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr AddressSet(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Application(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Applications(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Call(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.MethodInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Call(System.Reflection.MethodInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Coerce(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr DefaultValue(System.Type) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Deserialize(System.Type, Microsoft.FSharp.Collections.FSharpList`1[System.Type], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr], Byte[]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Deserialize40(System.Type, System.Type[], System.Type[], Microsoft.FSharp.Quotations.FSharpExpr[], Byte[]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(System.Reflection.FieldInfo) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldSet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldSet(System.Reflection.FieldInfo, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ForIntegerRangeLoop(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr IfThenElse(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Lambda(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Let(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr LetRecursive(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]], Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewArray(System.Type, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewDelegate(System.Type, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar], Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewObject(System.Reflection.ConstructorInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewRecord(System.Type, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewTuple(Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewUnionCase(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertyGet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.PropertyInfo, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertyGet(System.Reflection.PropertyInfo, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Quote(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr QuoteRaw(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr QuoteTyped(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Sequential(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Substitute(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TryFinally(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TryWith(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TupleGet(Microsoft.FSharp.Quotations.FSharpExpr, Int32) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TypeTest(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr UnionCaseTest(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Reflection.UnionCaseInfo) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value(System.Object, System.Type) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ValueWithName(System.Object, System.Type, System.String) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ValueWithName[T](T, System.String) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value[T](T) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Var(Microsoft.FSharp.Quotations.FSharpVar) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr VarSet(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr WhileLoop(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr WithValue(System.Object, System.Type, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] Cast[T](Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] GlobalVar[T](System.String) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] WithValue[T](T, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() +Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() +Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString(Boolean) +Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() +Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type +Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() +Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) +Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[], System.Type[]) +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] get_CustomAttributes() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpExpr Raw +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpExpr Substitute(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpExpr get_Raw() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString(Boolean) +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type GetType() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type Type +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type get_Type() +Microsoft.FSharp.Quotations.FSharpVar: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.FSharpVar: Boolean IsMutable +Microsoft.FSharp.Quotations.FSharpVar: Boolean get_IsMutable() +Microsoft.FSharp.Quotations.FSharpVar: Int32 GetHashCode() +Microsoft.FSharp.Quotations.FSharpVar: Microsoft.FSharp.Quotations.FSharpVar Global(System.String, System.Type) +Microsoft.FSharp.Quotations.FSharpVar: System.String Name +Microsoft.FSharp.Quotations.FSharpVar: System.String ToString() +Microsoft.FSharp.Quotations.FSharpVar: System.String get_Name() +Microsoft.FSharp.Quotations.FSharpVar: System.Type GetType() +Microsoft.FSharp.Quotations.FSharpVar: System.Type Type +Microsoft.FSharp.Quotations.FSharpVar: System.Type get_Type() +Microsoft.FSharp.Quotations.FSharpVar: Void .ctor(System.String, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Quotations.PatternsModule: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuoteRawPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuoteTypedPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpVar] VarPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]],Microsoft.FSharp.Quotations.FSharpExpr]] LetRecursivePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.FieldInfo]] FieldGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] AddressSetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ApplicationPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] SequentialPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] TryFinallyPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] WhileLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Reflection.UnionCaseInfo]] UnionCaseTestPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,System.Int32]] TupleGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,System.Type]] CoercePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,System.Type]] TypeTestPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] LambdaPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] VarSetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewUnionCasePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Object,System.Type]] ValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewObjectPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewArrayPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewRecordPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.FieldInfo,Microsoft.FSharp.Quotations.FSharpExpr]] FieldSetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.MethodInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] CallPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] PropertyGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] IfThenElsePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] LetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.Type,Microsoft.FSharp.Quotations.FSharpExpr]] WithValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.Type,System.String]] ValueWithNamePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar],Microsoft.FSharp.Quotations.FSharpExpr]] NewDelegatePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Quotations.FSharpExpr]] PropertySetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] TryWithPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Type] DefaultValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: System.String ToString() +Microsoft.FSharp.Quotations.PatternsModule: System.Type GetType() +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsExceptionRepresentation.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsRecord.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsUnion.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Int32 GetHashCode() +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] FSharpValue.PreComputeUnionTagReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeRecordReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeUnionReader.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] FSharpValue.PreComputeRecordConstructor.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] FSharpValue.PreComputeUnionConstructor.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Reflection.UnionCaseInfo[] FSharpType.GetUnionCases.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object FSharpValue.MakeRecord.Static(System.Type, System.Object[], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object FSharpValue.MakeUnion.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, System.Object[], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object[] FSharpValue.GetExceptionFields.Static(System.Object, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object[] FSharpValue.GetRecordFields.Static(System.Object, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.ConstructorInfo FSharpValue.PreComputeRecordConstructorInfo.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MemberInfo FSharpValue.PreComputeUnionTagMemberInfo.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MethodInfo FSharpValue.PreComputeUnionConstructorInfo.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetExceptionFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetRecordFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.String ToString() +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] FSharpValue.GetUnionFields.Static(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Type GetType() +Microsoft.FSharp.Reflection.FSharpType: Boolean Equals(System.Object) +Microsoft.FSharp.Reflection.FSharpType: Boolean IsFunction(System.Type) +Microsoft.FSharp.Reflection.FSharpType: Boolean IsModule(System.Type) +Microsoft.FSharp.Reflection.FSharpType: Boolean IsTuple(System.Type) +Microsoft.FSharp.Reflection.FSharpType: Int32 GetHashCode() +Microsoft.FSharp.Reflection.FSharpType: System.String ToString() +Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) +Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) +Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) +Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) +Microsoft.FSharp.Reflection.FSharpValue: Int32 GetHashCode() +Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeTupleReader(System.Type) +Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object] PreComputeRecordFieldReader(System.Reflection.PropertyInfo) +Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] PreComputeTupleConstructor(System.Type) +Microsoft.FSharp.Reflection.FSharpValue: System.Object GetRecordField(System.Object, System.Reflection.PropertyInfo) +Microsoft.FSharp.Reflection.FSharpValue: System.Object GetTupleField(System.Object, Int32) +Microsoft.FSharp.Reflection.FSharpValue: System.Object MakeFunction(System.Type, Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object]) +Microsoft.FSharp.Reflection.FSharpValue: System.Object MakeTuple(System.Object[], System.Type) +Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetTupleFields(System.Object) +Microsoft.FSharp.Reflection.FSharpValue: System.String ToString() +Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Type]] PreComputeTupleConstructorInfo(System.Type) +Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.PropertyInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,System.Int32]]] PreComputeTuplePropertyInfo(System.Type, Int32) +Microsoft.FSharp.Reflection.FSharpValue: System.Type GetType() +Microsoft.FSharp.Reflection.UnionCaseInfo: Boolean Equals(System.Object) +Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 GetHashCode() +Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 Tag +Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 get_Tag() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Object[] GetCustomAttributes() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Object[] GetCustomAttributes(System.Type) +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Reflection.PropertyInfo[] GetFields() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.String Name +Microsoft.FSharp.Reflection.UnionCaseInfo: System.String ToString() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.String get_Name() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type DeclaringType +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type GetType() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType() +" + SurfaceArea.verify expected "portable7" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__)) diff --git a/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable78.fs b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable78.fs new file mode 100644 index 00000000000..aec1daf060a --- /dev/null +++ b/src/fsharp/FSharp.Core.Unittests/SurfaceArea.portable78.fs @@ -0,0 +1,3462 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +namespace FSharp.Core.Unittests.Portable.SurfaceArea + +open NUnit.Framework +open FSharp.Core.Unittests.LibraryTestFx + +[] +type SurfaceAreaTest() = + [] + member this.VerifyArea() = + let expected = @" +Microsoft.FSharp.Collections.Array2DModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.Array2DModule: Int32 Base1[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: Int32 Base2[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.Array2DModule: Int32 Length1[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: Int32 Length2[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: System.String ToString() +Microsoft.FSharp.Collections.Array2DModule: System.Type GetType() +Microsoft.FSharp.Collections.Array2DModule: T Get[T](T[,], Int32, Int32) +Microsoft.FSharp.Collections.Array2DModule: TResult[,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]], T[,]) +Microsoft.FSharp.Collections.Array2DModule: TResult[,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,]) +Microsoft.FSharp.Collections.Array2DModule: T[,] Copy[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: T[,] CreateBased[T](Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.Array2DModule: T[,] Create[T](Int32, Int32, T) +Microsoft.FSharp.Collections.Array2DModule: T[,] InitializeBased[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]) +Microsoft.FSharp.Collections.Array2DModule: T[,] Initialize[T](Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]) +Microsoft.FSharp.Collections.Array2DModule: T[,] Rebase[T](T[,]) +Microsoft.FSharp.Collections.Array2DModule: T[,] ZeroCreateBased[T](Int32, Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array2DModule: T[,] ZeroCreate[T](Int32, Int32) +Microsoft.FSharp.Collections.Array2DModule: Void CopyTo[T](T[,], Int32, Int32, T[,], Int32, Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array2DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]], T[,]) +Microsoft.FSharp.Collections.Array2DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,]) +Microsoft.FSharp.Collections.Array2DModule: Void Set[T](T[,], Int32, Int32, T) +Microsoft.FSharp.Collections.Array3DModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.Array3DModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.Array3DModule: Int32 Length1[T](T[,,]) +Microsoft.FSharp.Collections.Array3DModule: Int32 Length2[T](T[,,]) +Microsoft.FSharp.Collections.Array3DModule: Int32 Length3[T](T[,,]) +Microsoft.FSharp.Collections.Array3DModule: System.String ToString() +Microsoft.FSharp.Collections.Array3DModule: System.Type GetType() +Microsoft.FSharp.Collections.Array3DModule: T Get[T](T[,,], Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array3DModule: TResult[,,] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]]]], T[,,]) +Microsoft.FSharp.Collections.Array3DModule: TResult[,,] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[,,]) +Microsoft.FSharp.Collections.Array3DModule: T[,,] Create[T](Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.Array3DModule: T[,,] Initialize[T](Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]) +Microsoft.FSharp.Collections.Array3DModule: T[,,] ZeroCreate[T](Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array3DModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]]]], T[,,]) +Microsoft.FSharp.Collections.Array3DModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[,,]) +Microsoft.FSharp.Collections.Array3DModule: Void Set[T](T[,,], Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.Array4DModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.Array4DModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.Array4DModule: Int32 Length1[T](T[,,,]) +Microsoft.FSharp.Collections.Array4DModule: Int32 Length2[T](T[,,,]) +Microsoft.FSharp.Collections.Array4DModule: Int32 Length3[T](T[,,,]) +Microsoft.FSharp.Collections.Array4DModule: Int32 Length4[T](T[,,,]) +Microsoft.FSharp.Collections.Array4DModule: System.String ToString() +Microsoft.FSharp.Collections.Array4DModule: System.Type GetType() +Microsoft.FSharp.Collections.Array4DModule: T Get[T](T[,,,], Int32, Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array4DModule: T[,,,] Create[T](Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.Array4DModule: T[,,,] Initialize[T](Int32, Int32, Int32, Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]]]]) +Microsoft.FSharp.Collections.Array4DModule: T[,,,] ZeroCreate[T](Int32, Int32, Int32, Int32) +Microsoft.FSharp.Collections.Array4DModule: Void Set[T](T[,,,], Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Collections.ArrayModule: Boolean Contains[T](T, T[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.ArrayModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Boolean IsEmpty[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[], T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.ArrayModule: Int32 Length[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.String ToString() +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[System.Int32,T][] Indexed[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T,T][] Pairwise[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1,T2][] Zip[T1,T2](T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T1[],T2[]] Unzip[T1,T2](System.Tuple`2[T1,T2][]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TKey,System.Int32][] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TKey,T[]][] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TResult[],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], T[], TState) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[TResult[],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`2[T[],T[]] SplitAt[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1,T2,T3][] Zip3[T1,T2,T3](T1[], T2[], T3[]) +Microsoft.FSharp.Collections.ArrayModule: System.Tuple`3[T1[],T2[],T3[]] Unzip3[T1,T2,T3](System.Tuple`3[T1,T2,T3][]) +Microsoft.FSharp.Collections.ArrayModule: System.Type GetType() +Microsoft.FSharp.Collections.ArrayModule: T Average[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T ExactlyOne[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Get[T](T[], Int32) +Microsoft.FSharp.Collections.ArrayModule: T Head[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T Item[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T Last[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Max[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Min[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T[]) +Microsoft.FSharp.Collections.ArrayModule: T Sum[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult[]], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], T1[], T2[], T3[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], T[]) +Microsoft.FSharp.Collections.ArrayModule: TResult[] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T[]) +Microsoft.FSharp.Collections.ArrayModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], T1[], T2[], TState) +Microsoft.FSharp.Collections.ArrayModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], T[], TState) +Microsoft.FSharp.Collections.ArrayModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, T[]) +Microsoft.FSharp.Collections.ArrayModule: TState[] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], T[], TState) +Microsoft.FSharp.Collections.ArrayModule: TState[] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Append[T](T[], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Concat[T](System.Collections.Generic.IEnumerable`1[T[]]) +Microsoft.FSharp.Collections.ArrayModule: T[] Copy[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Create[T](Int32, T) +Microsoft.FSharp.Collections.ArrayModule: T[] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Distinct[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Empty[T]() +Microsoft.FSharp.Collections.ArrayModule: T[] Except[T](System.Collections.Generic.IEnumerable`1[T], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] GetSubArray[T](T[], Int32, Int32) +Microsoft.FSharp.Collections.ArrayModule: T[] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) +Microsoft.FSharp.Collections.ArrayModule: T[] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ArrayModule: T[] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.ArrayModule: T[] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Replicate[T](Int32, T) +Microsoft.FSharp.Collections.ArrayModule: T[] Reverse[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Singleton[T](T) +Microsoft.FSharp.Collections.ArrayModule: T[] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Skip[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortDescending[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Sort[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Tail[T](T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Take[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Truncate[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] Unfold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) +Microsoft.FSharp.Collections.ArrayModule: T[] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], T[]) +Microsoft.FSharp.Collections.ArrayModule: T[] ZeroCreate[T](Int32) +Microsoft.FSharp.Collections.ArrayModule: T[][] ChunkBySize[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[][] SplitInto[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: T[][] Windowed[T](Int32, T[]) +Microsoft.FSharp.Collections.ArrayModule: Void CopyTo[T](T[], Int32, T[], Int32, Int32) +Microsoft.FSharp.Collections.ArrayModule: Void Fill[T](T[], Int32, Int32, T) +Microsoft.FSharp.Collections.ArrayModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], T1[], T2[]) +Microsoft.FSharp.Collections.ArrayModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], T[]) +Microsoft.FSharp.Collections.ArrayModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], T[]) +Microsoft.FSharp.Collections.ArrayModule: Void Set[T](T[], Int32, T) +Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], T[]) +Microsoft.FSharp.Collections.ArrayModule: Void SortInPlaceWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], T[]) +Microsoft.FSharp.Collections.ArrayModule: Void SortInPlace[T](T[]) +Microsoft.FSharp.Collections.ComparisonIdentity: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.ComparisonIdentity: Int32 GetHashCode() +Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] FromFunction[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]]) +Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] NonStructural[T]() +Microsoft.FSharp.Collections.ComparisonIdentity: System.Collections.Generic.IComparer`1[T] Structural[T]() +Microsoft.FSharp.Collections.ComparisonIdentity: System.String ToString() +Microsoft.FSharp.Collections.ComparisonIdentity: System.Type GetType() +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Cons +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 Empty +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: Int32 GetHashCode() +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.String ToString() +Microsoft.FSharp.Collections.FSharpList`1+Tags[T]: System.Type GetType() +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean IsCons +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean IsEmpty +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean get_IsCons() +Microsoft.FSharp.Collections.FSharpList`1[T]: Boolean get_IsEmpty() +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 CompareTo(Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 Length +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 Tag +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 get_Length() +Microsoft.FSharp.Collections.FSharpList`1[T]: Int32 get_Tag() +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1+Tags[T] +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Cons(T, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Empty +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] GetSlice(Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] Tail +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] TailOrNull +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Empty() +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_Tail() +Microsoft.FSharp.Collections.FSharpList`1[T]: Microsoft.FSharp.Collections.FSharpList`1[T] get_TailOrNull() +Microsoft.FSharp.Collections.FSharpList`1[T]: System.String ToString() +Microsoft.FSharp.Collections.FSharpList`1[T]: System.Type GetType() +Microsoft.FSharp.Collections.FSharpList`1[T]: T Head +Microsoft.FSharp.Collections.FSharpList`1[T]: T HeadOrDefault +Microsoft.FSharp.Collections.FSharpList`1[T]: T Item [Int32] +Microsoft.FSharp.Collections.FSharpList`1[T]: T get_Head() +Microsoft.FSharp.Collections.FSharpList`1[T]: T get_HeadOrDefault() +Microsoft.FSharp.Collections.FSharpList`1[T]: T get_Item(Int32) +Microsoft.FSharp.Collections.FSharpList`1[T]: Void .ctor(T, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean ContainsKey(TKey) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean IsEmpty +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Boolean get_IsEmpty() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 Count +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 GetHashCode() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Int32 get_Count() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Add(TKey, TValue) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue] Remove(TKey) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Microsoft.FSharp.Core.FSharpOption`1[TValue] TryFind(TKey) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.String ToString() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: System.Type GetType() +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue Item [TKey] +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: TValue get_Item(TKey) +Microsoft.FSharp.Collections.FSharpMap`2[TKey,TValue]: Void .ctor(System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean Contains(T) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsEmpty +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsProperSubsetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsProperSupersetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsSubsetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean IsSupersetOf(Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Boolean get_IsEmpty() +Microsoft.FSharp.Collections.FSharpSet`1[T]: Int32 Count +Microsoft.FSharp.Collections.FSharpSet`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Collections.FSharpSet`1[T]: Int32 get_Count() +Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] Add(T) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] Remove(T) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Addition(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: Microsoft.FSharp.Collections.FSharpSet`1[T] op_Subtraction(Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.FSharpSet`1[T]: System.String ToString() +Microsoft.FSharp.Collections.FSharpSet`1[T]: System.Type GetType() +Microsoft.FSharp.Collections.FSharpSet`1[T]: T MaximumElement +Microsoft.FSharp.Collections.FSharpSet`1[T]: T MinimumElement +Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MaximumElement() +Microsoft.FSharp.Collections.FSharpSet`1[T]: T get_MinimumElement() +Microsoft.FSharp.Collections.FSharpSet`1[T]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.HashIdentity: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.HashIdentity: Int32 GetHashCode() +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] FromFunctions[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]]) +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] LimitedStructural[T](Int32) +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] NonStructural[T]() +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Reference[T]() +Microsoft.FSharp.Collections.HashIdentity: System.Collections.Generic.IEqualityComparer`1[T] Structural[T]() +Microsoft.FSharp.Collections.HashIdentity: System.String ToString() +Microsoft.FSharp.Collections.HashIdentity: System.Type GetType() +Microsoft.FSharp.Collections.ListModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.ListModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.ListModule: Int32 Length[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] ChunkBySize[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] SplitInto[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[T]] Windowed[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[System.Int32,T]] Indexed[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T,T]] Pairwise[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]] Zip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,Microsoft.FSharp.Collections.FSharpList`1[T]]] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,System.Int32]] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]] Zip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], Microsoft.FSharp.Collections.FSharpList`1[T3]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Collect[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Collections.FSharpList`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], Microsoft.FSharp.Collections.FSharpList`1[T3]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TState] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Append[T](Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Concat[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpList`1[T]]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Distinct[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Empty[T]() +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Except[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfArray[T](T[]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Replicate[T](Int32, T) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Reverse[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Singleton[T](T) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Skip[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortDescending[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Sort[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Tail[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Take[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Truncate[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Unfold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Collections.FSharpList`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.String ToString() +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2]] Unzip[T1,T2](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[T1,T2]]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[T],Microsoft.FSharp.Collections.FSharpList`1[T]] SplitAt[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: System.Tuple`3[Microsoft.FSharp.Collections.FSharpList`1[T1],Microsoft.FSharp.Collections.FSharpList`1[T2],Microsoft.FSharp.Collections.FSharpList`1[T3]] Unzip3[T1,T2,T3](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`3[T1,T2,T3]]) +Microsoft.FSharp.Collections.ListModule: System.Type GetType() +Microsoft.FSharp.Collections.ListModule: T Average[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T ExactlyOne[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Get[T](Microsoft.FSharp.Collections.FSharpList`1[T], Int32) +Microsoft.FSharp.Collections.ListModule: T Head[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Item[T](Int32, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Last[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Max[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Min[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T Sum[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2], TState) +Microsoft.FSharp.Collections.ListModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpList`1[T], TState) +Microsoft.FSharp.Collections.ListModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], Microsoft.FSharp.Collections.FSharpList`1[T1], Microsoft.FSharp.Collections.FSharpList`1[T2]) +Microsoft.FSharp.Collections.ListModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.ListModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.MapModule: Boolean ContainsKey[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.MapModule: Boolean Exists[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Boolean ForAll[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Boolean IsEmpty[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]] ToList[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,TResult] Map[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Add[TKey,T](TKey, T, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Empty[TKey,T]() +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Filter[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] OfArray[TKey,T](System.Tuple`2[TKey,T][]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] OfList[TKey,T](Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[TKey,T]]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] OfSeq[TKey,T](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Collections.FSharpMap`2[TKey,T] Remove[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TKey] TryFindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,T]] ToSeq[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.String ToString() +Microsoft.FSharp.Collections.MapModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpMap`2[TKey,T],Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]] Partition[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.Tuple`2[TKey,T][] ToArray[TKey,T](Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: System.Type GetType() +Microsoft.FSharp.Collections.MapModule: T Find[TKey,T](TKey, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: TKey FindKey[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: TResult Pick[TKey,T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: TState FoldBack[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T], TState) +Microsoft.FSharp.Collections.MapModule: TState Fold[TKey,T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]]], TState, Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.MapModule: Void Iterate[TKey,T](Microsoft.FSharp.Core.FSharpFunc`2[TKey,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Collections.FSharpMap`2[TKey,T]) +Microsoft.FSharp.Collections.SeqModule: Boolean Contains[T](T, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.SeqModule: Boolean Exists2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Boolean ForAll2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,System.Boolean]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Boolean IsEmpty[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 CompareWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 FindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 FindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.SeqModule: Int32 Length[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndexBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] TryFindIndex[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] TryPick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryFind[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryHead[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryItem[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Microsoft.FSharp.Core.FSharpOption`1[T] TryLast[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[System.Int32,T]] Indexed[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T,T]] Pairwise[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[T1,T2]] Zip[T1,T2](System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,System.Collections.Generic.IEnumerable`1[T]]] GroupBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,System.Int32]] CountBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[System.Tuple`3[T1,T2,T3]] Zip3[T1,T2,T3](System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], System.Collections.Generic.IEnumerable`1[T3]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Collect[T,TCollection,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], System.Collections.Generic.IEnumerable`1[T3]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] MapIndexed2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] MapIndexed[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TState] ScanBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], System.Collections.Generic.IEnumerable`1[T], TState) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[TState] Scan[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] ChunkBySize[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] SplitInto[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T[]] Windowed[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Append[T](System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Cache[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Cast[T](System.Collections.IEnumerable) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Concat[TCollection,T](System.Collections.Generic.IEnumerable`1[TCollection]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Delay[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Collections.Generic.IEnumerable`1[T]]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] DistinctBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Distinct[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Empty[T]() +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Except[T](System.Collections.Generic.IEnumerable`1[T], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] InitializeInfinite[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Initialize[T](Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfArray[T](T[]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Permute[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.Int32], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] ReadOnly[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Replicate[T](Int32, T) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Reverse[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Singleton[T](T) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SkipWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Skip[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortByDescending[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortBy[T,TKey](Microsoft.FSharp.Core.FSharpFunc`2[T,TKey], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortDescending[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] SortWith[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Int32]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Sort[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Tail[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] TakeWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Take[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Truncate[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Unfold[TState,T](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[T,TState]]], TState) +Microsoft.FSharp.Collections.SeqModule: System.Collections.Generic.IEnumerable`1[T] Where[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.String ToString() +Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFoldBack[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,System.Tuple`2[TResult,TState]]], System.Collections.Generic.IEnumerable`1[T], TState) +Microsoft.FSharp.Collections.SeqModule: System.Tuple`2[System.Collections.Generic.IEnumerable`1[TResult],TState] MapFold[T,TState,TResult](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,System.Tuple`2[TResult,TState]]], TState, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: System.Type GetType() +Microsoft.FSharp.Collections.SeqModule: T Average[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T ExactlyOne[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T FindBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Find[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Get[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Head[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Item[T](Int32, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Last[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T MaxBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Max[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T MinBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Min[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T ReduceBack[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Reduce[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T Sum[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: TResult AverageBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: TResult Pick[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: TResult SumBy[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: TState Fold2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TState]]], TState, System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: TState FoldBack2[T1,T2,TState](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2], TState) +Microsoft.FSharp.Collections.SeqModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], System.Collections.Generic.IEnumerable`1[T], TState) +Microsoft.FSharp.Collections.SeqModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: T[] ToArray[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Void Iterate2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed2[T1,T2](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.Unit]]], System.Collections.Generic.IEnumerable`1[T1], System.Collections.Generic.IEnumerable`1[T2]) +Microsoft.FSharp.Collections.SeqModule: Void IterateIndexed[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SeqModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean Contains[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean Equals(System.Object) +Microsoft.FSharp.Collections.SetModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean IsEmpty[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean IsProperSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean IsProperSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean IsSubset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Boolean IsSuperset[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Int32 Count[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Int32 GetHashCode() +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Add[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Difference[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Empty[T]() +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] IntersectMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Intersect[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] OfArray[T](T[]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] OfList[T](Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] OfSeq[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Remove[T](T, Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Singleton[T](T) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] UnionMany[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Collections.FSharpSet`1[T]]) +Microsoft.FSharp.Collections.SetModule: Microsoft.FSharp.Collections.FSharpSet`1[T] Union[T](Microsoft.FSharp.Collections.FSharpSet`1[T], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: System.Collections.Generic.IEnumerable`1[T] ToSeq[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: System.String ToString() +Microsoft.FSharp.Collections.SetModule: System.Tuple`2[Microsoft.FSharp.Collections.FSharpSet`1[T],Microsoft.FSharp.Collections.FSharpSet`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: System.Type GetType() +Microsoft.FSharp.Collections.SetModule: T MaxElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: T MinElement[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Collections.FSharpSet`1[T], TState) +Microsoft.FSharp.Collections.SetModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: T[] ToArray[T](Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Collections.SetModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Collections.FSharpSet`1[T]) +Microsoft.FSharp.Control.CommonExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Control.CommonExtensions: Int32 GetHashCode() +Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AsyncWrite(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Byte[]] AsyncReadBytes(System.IO.Stream, Int32) +Microsoft.FSharp.Control.CommonExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Int32] AsyncRead(System.IO.Stream, Byte[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.CommonExtensions: System.IDisposable SubscribeToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.CommonExtensions: System.String ToString() +Microsoft.FSharp.Control.CommonExtensions: System.Type GetType() +Microsoft.FSharp.Control.CommonExtensions: Void AddToObservable[T](System.IObservable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.EventModule: Boolean Equals(System.Object) +Microsoft.FSharp.Control.EventModule: Int32 GetHashCode() +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[System.Tuple`2[T,T]],System.Tuple`2[T,T]] Pairwise[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Choose[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Map[T,TResult,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult],TResult] Scan[TResult,T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Filter[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Merge[TDel1,T,TDel2](Microsoft.FSharp.Control.IEvent`2[TDel1,T], Microsoft.FSharp.Control.IEvent`2[TDel2,T]) +Microsoft.FSharp.Control.EventModule: System.String ToString() +Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult1],TResult1],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[TResult2],TResult2]] Split[T,TResult1,TResult2,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: System.Tuple`2[Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T],Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T]] Partition[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.EventModule: System.Type GetType() +Microsoft.FSharp.Control.EventModule: Void Add[T,TDel](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.IEvent`2[TDel,T]) +Microsoft.FSharp.Control.FSharpAsync: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsync: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Control.FSharpAsync`1[T]] StartChild[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpChoice`2[T,System.Exception]] Catch[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] AwaitTask(System.Threading.Tasks.Task) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Ignore[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Sleep(Int32) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToContext(System.Threading.SynchronizationContext) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToNewThread() +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] SwitchToThreadPool() +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Boolean] AwaitIAsyncResult(System.IAsyncResult, Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Boolean] AwaitWaitHandle(System.Threading.WaitHandle, Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.IDisposable] OnCancel(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Threading.CancellationToken] CancellationToken +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Threading.CancellationToken] get_CancellationToken() +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[System.Threading.Tasks.Task`1[T]] StartChildAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.Tasks.TaskCreationOptions]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T[]] Parallel[T](System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] AwaitEvent[TDel,T](Microsoft.FSharp.Control.IEvent`2[TDel,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] AwaitTask[T](System.Threading.Tasks.Task`1[T]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[TArg1,TArg2,TArg3,T](TArg1, TArg2, TArg3, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`5[TArg1,TArg2,TArg3,System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[TArg1,TArg2,T](TArg1, TArg2, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`4[TArg1,TArg2,System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[TArg1,T](TArg1, Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg1,System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromBeginEnd[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[System.AsyncCallback,System.Object],System.IAsyncResult], Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T], Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] FromContinuations[T](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit],Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]],Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsync: Microsoft.FSharp.Control.FSharpAsync`1[T] TryCancelled[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsync: System.String ToString() +Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken DefaultCancellationToken +Microsoft.FSharp.Control.FSharpAsync: System.Threading.CancellationToken get_DefaultCancellationToken() +Microsoft.FSharp.Control.FSharpAsync: System.Threading.Tasks.Task`1[T] StartAsTask[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.Tasks.TaskCreationOptions], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsync: System.Tuple`3[Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[TArg,System.AsyncCallback,System.Object],System.IAsyncResult],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,T],Microsoft.FSharp.Core.FSharpFunc`2[System.IAsyncResult,Microsoft.FSharp.Core.Unit]] AsBeginEnd[TArg,T](Microsoft.FSharp.Core.FSharpFunc`2[TArg,Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsync: System.Type GetType() +Microsoft.FSharp.Control.FSharpAsync: T RunSynchronously[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsync: Void CancelDefaultToken() +Microsoft.FSharp.Control.FSharpAsync: Void Start(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsync: Void StartImmediate(Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsync: Void StartWithContinuations[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[System.OperationCanceledException,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] For[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] While(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit] Zero() +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[TResult] Bind[T,TResult](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[TResult]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[TResult] Using[T,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Control.FSharpAsync`1[TResult]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Combine[T](Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Delay[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] ReturnFrom[T](Microsoft.FSharp.Control.FSharpAsync`1[T]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] Return[T](T) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryFinally[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: Microsoft.FSharp.Control.FSharpAsync`1[T] TryWith[T](Microsoft.FSharp.Control.FSharpAsync`1[T], Microsoft.FSharp.Core.FSharpFunc`2[System.Exception,Microsoft.FSharp.Control.FSharpAsync`1[T]]) +Microsoft.FSharp.Control.FSharpAsyncBuilder: System.String ToString() +Microsoft.FSharp.Control.FSharpAsyncBuilder: System.Type GetType() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.String ToString() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: System.Type GetType() +Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply]: Void Reply(TReply) +Microsoft.FSharp.Control.FSharpAsync`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpAsync`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpAsync`1[T]: System.String ToString() +Microsoft.FSharp.Control.FSharpAsync`1[T]: System.Type GetType() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] Publish +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate] get_Publish() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.String ToString() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: System.Type GetType() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void .ctor() +Microsoft.FSharp.Control.FSharpDelegateEvent`1[TDelegate]: Void Trigger(System.Object[]) +Microsoft.FSharp.Control.FSharpEvent`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpEvent`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] Publish +Microsoft.FSharp.Control.FSharpEvent`1[T]: Microsoft.FSharp.Control.IEvent`2[Microsoft.FSharp.Control.FSharpHandler`1[T],T] get_Publish() +Microsoft.FSharp.Control.FSharpEvent`1[T]: System.String ToString() +Microsoft.FSharp.Control.FSharpEvent`1[T]: System.Type GetType() +Microsoft.FSharp.Control.FSharpEvent`1[T]: Void .ctor() +Microsoft.FSharp.Control.FSharpEvent`1[T]: Void Trigger(T) +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] Publish +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] get_Publish() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.String ToString() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: System.Type GetType() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void .ctor() +Microsoft.FSharp.Control.FSharpEvent`2[TDelegate,TArgs]: Void Trigger(System.Object, TArgs) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Delegate[] GetInvocationList() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.IAsyncResult BeginInvoke(System.Object, T, System.AsyncCallback, System.Object) +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Clone() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object DynamicInvoke(System.Object[]) +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object Target +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Object get_Target() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo Method +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Reflection.MethodInfo get_Method() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.String ToString() +Microsoft.FSharp.Control.FSharpHandler`1[T]: System.Type GetType() +Microsoft.FSharp.Control.FSharpHandler`1[T]: Void .ctor(System.Object, IntPtr) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Void EndInvoke(System.IAsyncResult) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) +Microsoft.FSharp.Control.FSharpHandler`1[T]: Void Invoke(System.Object, T) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Boolean Equals(System.Object) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 CurrentQueueLength +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 DefaultTimeout +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 GetHashCode() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_CurrentQueueLength() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Int32 get_DefaultTimeout() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TMsg]] TryReceive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[TReply]] PostAndTryAsyncReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.FSharpOption`1[T]] TryScan[T](Microsoft.FSharp.Core.FSharpFunc`2[TMsg,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[TMsg] Receive(Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[TReply] PostAndAsyncReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpAsync`1[T] Scan[T](Microsoft.FSharp.Core.FSharpFunc`2[TMsg,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Control.FSharpAsync`1[T]]], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpHandler`1[System.Exception] Error +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg] Start(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Microsoft.FSharp.Core.FSharpOption`1[TReply] TryPostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.String ToString() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: System.Type GetType() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: TReply PostAndReply[TReply](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpAsyncReplyChannel`1[TReply],TMsg], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg],Microsoft.FSharp.Control.FSharpAsync`1[Microsoft.FSharp.Core.Unit]], Microsoft.FSharp.Core.FSharpOption`1[System.Threading.CancellationToken]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Post(TMsg) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void Start() +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void add_Error(Microsoft.FSharp.Control.FSharpHandler`1[System.Exception]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void remove_Error(Microsoft.FSharp.Control.FSharpHandler`1[System.Exception]) +Microsoft.FSharp.Control.FSharpMailboxProcessor`1[TMsg]: Void set_DefaultTimeout(Int32) +Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void AddHandler(TDelegate) +Microsoft.FSharp.Control.IDelegateEvent`1[TDelegate]: Void RemoveHandler(TDelegate) +Microsoft.FSharp.Control.LazyExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Control.LazyExtensions: Int32 GetHashCode() +Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] CreateFromValue[T](T) +Microsoft.FSharp.Control.LazyExtensions: System.Lazy`1[T] Create[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) +Microsoft.FSharp.Control.LazyExtensions: System.String ToString() +Microsoft.FSharp.Control.LazyExtensions: System.Type GetType() +Microsoft.FSharp.Control.LazyExtensions: T Force[T](System.Lazy`1[T]) +Microsoft.FSharp.Control.ObservableModule: Boolean Equals(System.Object) +Microsoft.FSharp.Control.ObservableModule: Int32 GetHashCode() +Microsoft.FSharp.Control.ObservableModule: System.IDisposable Subscribe[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[System.Tuple`2[T,T]] Pairwise[T](System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Choose[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[TResult] Scan[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]], TResult, System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.IObservable`1[T] Merge[T](System.IObservable`1[T], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.String ToString() +Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[TResult1],System.IObservable`1[TResult2]] Split[T,TResult1,TResult2](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpChoice`2[TResult1,TResult2]], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.Tuple`2[System.IObservable`1[T],System.IObservable`1[T]] Partition[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], System.IObservable`1[T]) +Microsoft.FSharp.Control.ObservableModule: System.Type GetType() +Microsoft.FSharp.Control.ObservableModule: Void Add[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], System.IObservable`1[T]) +Microsoft.FSharp.Control.WebExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Control.WebExtensions: Int32 GetHashCode() +Microsoft.FSharp.Control.WebExtensions: Microsoft.FSharp.Control.FSharpAsync`1[System.Net.WebResponse] AsyncGetResponse(System.Net.WebRequest) +Microsoft.FSharp.Control.WebExtensions: System.String ToString() +Microsoft.FSharp.Control.WebExtensions: System.Type GetType() +Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AbstractClassAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AbstractClassAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AbstractClassAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AbstractClassAttribute: System.Object TypeId +Microsoft.FSharp.Core.AbstractClassAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AbstractClassAttribute: System.String ToString() +Microsoft.FSharp.Core.AbstractClassAttribute: System.Type GetType() +Microsoft.FSharp.Core.AbstractClassAttribute: Void .ctor() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean Value +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Boolean get_Value() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object TypeId +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.String ToString() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: System.Type GetType() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor() +Microsoft.FSharp.Core.AllowNullLiteralAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AutoOpenAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AutoOpenAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AutoOpenAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AutoOpenAttribute: System.Object TypeId +Microsoft.FSharp.Core.AutoOpenAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AutoOpenAttribute: System.String Path +Microsoft.FSharp.Core.AutoOpenAttribute: System.String ToString() +Microsoft.FSharp.Core.AutoOpenAttribute: System.String get_Path() +Microsoft.FSharp.Core.AutoOpenAttribute: System.Type GetType() +Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor() +Microsoft.FSharp.Core.AutoOpenAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean Value +Microsoft.FSharp.Core.AutoSerializableAttribute: Boolean get_Value() +Microsoft.FSharp.Core.AutoSerializableAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object TypeId +Microsoft.FSharp.Core.AutoSerializableAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.AutoSerializableAttribute: System.String ToString() +Microsoft.FSharp.Core.AutoSerializableAttribute: System.Type GetType() +Microsoft.FSharp.Core.AutoSerializableAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.CLIEventAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CLIEventAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CLIEventAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CLIEventAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CLIEventAttribute: System.Object TypeId +Microsoft.FSharp.Core.CLIEventAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CLIEventAttribute: System.String ToString() +Microsoft.FSharp.Core.CLIEventAttribute: System.Type GetType() +Microsoft.FSharp.Core.CLIEventAttribute: Void .ctor() +Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CLIMutableAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CLIMutableAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CLIMutableAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CLIMutableAttribute: System.Object TypeId +Microsoft.FSharp.Core.CLIMutableAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CLIMutableAttribute: System.String ToString() +Microsoft.FSharp.Core.CLIMutableAttribute: System.Type GetType() +Microsoft.FSharp.Core.CLIMutableAttribute: Void .ctor() +Microsoft.FSharp.Core.ClassAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ClassAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ClassAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ClassAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ClassAttribute: System.Object TypeId +Microsoft.FSharp.Core.ClassAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ClassAttribute: System.String ToString() +Microsoft.FSharp.Core.ClassAttribute: System.Type GetType() +Microsoft.FSharp.Core.ClassAttribute: Void .ctor() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object TypeId +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.String ToString() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: System.Type GetType() +Microsoft.FSharp.Core.ComparisonConditionalOnAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] Counts +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Collections.Generic.IEnumerable`1[System.Int32] get_Counts() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilationArgumentCountsAttribute: Void .ctor(Int32[]) +Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationMappingAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 SequenceNumber +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 VariantNumber +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_SequenceNumber() +Microsoft.FSharp.Core.CompilationMappingAttribute: Int32 get_VariantNumber() +Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags SourceConstructFlags +Microsoft.FSharp.Core.CompilationMappingAttribute: Microsoft.FSharp.Core.SourceConstructFlags get_SourceConstructFlags() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ResourceName +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.String get_ResourceName() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] TypeDefinitions +Microsoft.FSharp.Core.CompilationMappingAttribute: System.Type[] get_TypeDefinitions() +Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags) +Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32) +Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(Microsoft.FSharp.Core.SourceConstructFlags, Int32, Int32) +Microsoft.FSharp.Core.CompilationMappingAttribute: Void .ctor(System.String, System.Type[]) +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags Flags +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Microsoft.FSharp.Core.CompilationRepresentationFlags get_Flags() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilationRepresentationAttribute: Void .ctor(Microsoft.FSharp.Core.CompilationRepresentationFlags) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Boolean HasFlag(System.Enum) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationRepresentationFlags: Int32 value__ +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Event +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Instance +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags ModuleSuffix +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags None +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags Static +Microsoft.FSharp.Core.CompilationRepresentationFlags: Microsoft.FSharp.Core.CompilationRepresentationFlags UseNullAsTrueValue +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString() +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.IFormatProvider) +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String) +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.String ToString(System.String, System.IFormatProvider) +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.Type GetType() +Microsoft.FSharp.Core.CompilationRepresentationFlags: System.TypeCode GetTypeCode() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String SourceName +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.String get_SourceName() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilationSourceNameAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompiledNameAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompiledNameAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompiledNameAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompiledNameAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompiledNameAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompiledNameAttribute: System.String CompiledName +Microsoft.FSharp.Core.CompiledNameAttribute: System.String ToString() +Microsoft.FSharp.Core.CompiledNameAttribute: System.String get_CompiledName() +Microsoft.FSharp.Core.CompiledNameAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompiledNameAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsError +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean IsHidden +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsError() +Microsoft.FSharp.Core.CompilerMessageAttribute: Boolean get_IsHidden() +Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 MessageNumber +Microsoft.FSharp.Core.CompilerMessageAttribute: Int32 get_MessageNumber() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerMessageAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.String Message +Microsoft.FSharp.Core.CompilerMessageAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.String get_Message() +Microsoft.FSharp.Core.CompilerMessageAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerMessageAttribute: Void .ctor(System.String, Int32) +Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsError(Boolean) +Microsoft.FSharp.Core.CompilerMessageAttribute: Void set_IsHidden(Boolean) +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean CheckClose +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Boolean get_CheckClose() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GenerateNext(System.Collections.Generic.IEnumerable`1[T] ByRef) +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Collections.Generic.IEnumerator`1[T] GetFreshEnumerator() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T LastGenerated +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: T get_LastGenerated() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T]: Void Close() +Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace[] GetNestedNamespaces() +Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.String NamespaceName +Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.String get_NamespaceName() +Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.Type ResolveTypeName(System.String) +Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace: System.Type[] GetTypes() +Microsoft.FSharp.Core.CompilerServices.ITypeProvider2: System.Reflection.MethodBase ApplyStaticArgumentsForMethod(System.Reflection.MethodBase, System.String, System.Object[]) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider2: System.Reflection.ParameterInfo[] GetStaticParametersForMethod(System.Reflection.MethodBase) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Byte[] GetGeneratedAssemblyContents(System.Reflection.Assembly) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Microsoft.FSharp.Core.CompilerServices.IProvidedNamespace[] GetNamespaces() +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Microsoft.FSharp.Quotations.FSharpExpr GetInvokerExpression(System.Reflection.MethodBase, Microsoft.FSharp.Quotations.FSharpExpr[]) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.EventHandler Invalidate +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Reflection.ParameterInfo[] GetStaticParameters(System.Type) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: System.Type ApplyStaticArguments(System.Type, System.String[], System.Object[]) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void add_Invalidate(System.EventHandler) +Microsoft.FSharp.Core.CompilerServices.ITypeProvider: Void remove_Invalidate(System.EventHandler) +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.MeasureInverse`1[TMeasure]: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.MeasureOne: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.MeasureOne: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.MeasureOne: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.MeasureProduct`2[TMeasure1,TMeasure2]: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: Microsoft.FSharp.Control.IEvent`2[TDelegate,TArgs] CreateEvent[TDelegate,TArgs](Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[TDelegate,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.FSharpFunc`2[System.Object,Microsoft.FSharp.Core.FSharpFunc`2[TArgs,Microsoft.FSharp.Core.Unit]],TDelegate]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateFromFunctions[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[TResult] EnumerateUsing[T,TCollection,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TCollection]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateThenFinally[T](System.Collections.Generic.IEnumerable`1[T], Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Collections.Generic.IEnumerable`1[T] EnumerateWhile[T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,System.Boolean], System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String AssemblyName +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.String get_AssemblyName() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsHostedExecution +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean IsInvalidationSupported +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean SystemRuntimeContainsType(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsHostedExecution() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Boolean get_IsInvalidationSupported() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ResolutionFolder +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String RuntimeAssembly +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String TemporaryFolder +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_ResolutionFolder() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_RuntimeAssembly() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String get_TemporaryFolder() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] ReferencedAssemblies +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.String[] get_ReferencedAssemblies() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version SystemRuntimeAssemblyVersion +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: System.Version get_SystemRuntimeAssemblyVersion() +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void .ctor(Microsoft.FSharp.Core.FSharpFunc`2[System.String,System.Boolean]) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_IsHostedExecution(Boolean) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_IsInvalidationSupported(Boolean) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_ReferencedAssemblies(System.String[]) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_ResolutionFolder(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_RuntimeAssembly(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_SystemRuntimeAssemblyVersion(System.Version) +Microsoft.FSharp.Core.CompilerServices.TypeProviderConfig: Void set_TemporaryFolder(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Column +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 Line +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Column() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Int32 get_Line() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String FilePath +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.String get_FilePath() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Column(Int32) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_FilePath(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderDefinitionLocationAttribute: Void set_Line(Int32) +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderEditorHideMethodsAttribute: Void .ctor() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Boolean HasFlag(System.Enum) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Int32 value__ +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes IsErased +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes SuppressRelocate +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.IFormatProvider) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.String ToString(System.String, System.IFormatProvider) +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderTypeAttributes: System.TypeCode GetTypeCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object TypeId +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String CommentText +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String ToString() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.String get_CommentText() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: System.Type GetType() +Microsoft.FSharp.Core.CompilerServices.TypeProviderXmlDocAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CustomComparisonAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CustomComparisonAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object TypeId +Microsoft.FSharp.Core.CustomComparisonAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CustomComparisonAttribute: System.String ToString() +Microsoft.FSharp.Core.CustomComparisonAttribute: System.Type GetType() +Microsoft.FSharp.Core.CustomComparisonAttribute: Void .ctor() +Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CustomEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CustomEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.CustomEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CustomEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.CustomEqualityAttribute: System.Type GetType() +Microsoft.FSharp.Core.CustomEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean AllowIntoPattern +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeGroupJoin +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeJoin +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean IsLikeZip +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpace +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean MaintainsVariableSpaceUsingBind +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_AllowIntoPattern() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeGroupJoin() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeJoin() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_IsLikeZip() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpace() +Microsoft.FSharp.Core.CustomOperationAttribute: Boolean get_MaintainsVariableSpaceUsingBind() +Microsoft.FSharp.Core.CustomOperationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.CustomOperationAttribute: System.Object TypeId +Microsoft.FSharp.Core.CustomOperationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.CustomOperationAttribute: System.String JoinConditionWord +Microsoft.FSharp.Core.CustomOperationAttribute: System.String Name +Microsoft.FSharp.Core.CustomOperationAttribute: System.String ToString() +Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_JoinConditionWord() +Microsoft.FSharp.Core.CustomOperationAttribute: System.String get_Name() +Microsoft.FSharp.Core.CustomOperationAttribute: System.Type GetType() +Microsoft.FSharp.Core.CustomOperationAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_AllowIntoPattern(Boolean) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeGroupJoin(Boolean) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeJoin(Boolean) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_IsLikeZip(Boolean) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_JoinConditionWord(System.String) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpace(Boolean) +Microsoft.FSharp.Core.CustomOperationAttribute: Void set_MaintainsVariableSpaceUsingBind(Boolean) +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean Value +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Boolean get_Value() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object TypeId +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.String ToString() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: System.Type GetType() +Microsoft.FSharp.Core.DefaultAugmentationAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Check +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.DefaultValueAttribute: Boolean get_Check() +Microsoft.FSharp.Core.DefaultValueAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.DefaultValueAttribute: System.Object TypeId +Microsoft.FSharp.Core.DefaultValueAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.DefaultValueAttribute: System.String ToString() +Microsoft.FSharp.Core.DefaultValueAttribute: System.Type GetType() +Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor() +Microsoft.FSharp.Core.DefaultValueAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.EntryPointAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.EntryPointAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.EntryPointAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.EntryPointAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.EntryPointAttribute: System.Object TypeId +Microsoft.FSharp.Core.EntryPointAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.EntryPointAttribute: System.String ToString() +Microsoft.FSharp.Core.EntryPointAttribute: System.Type GetType() +Microsoft.FSharp.Core.EntryPointAttribute: Void .ctor() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object TypeId +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.String ToString() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: System.Type GetType() +Microsoft.FSharp.Core.EqualityConditionalOnAttribute: Void .ctor() +Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ExperimentalAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ExperimentalAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ExperimentalAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ExperimentalAttribute: System.Object TypeId +Microsoft.FSharp.Core.ExperimentalAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ExperimentalAttribute: System.String Message +Microsoft.FSharp.Core.ExperimentalAttribute: System.String ToString() +Microsoft.FSharp.Core.ExperimentalAttribute: System.String get_Message() +Microsoft.FSharp.Core.ExperimentalAttribute: System.Type GetType() +Microsoft.FSharp.Core.ExperimentalAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Byte ToByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: Int32 GetHashCode() +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: SByte ToSByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.String ToString() +Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked: System.Type GetType() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Byte ToByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Double ToDouble[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Int32 GetHashCode() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Collections.FSharpSet`1[T] CreateSet[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder DefaultAsyncBuilder +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Control.FSharpAsyncBuilder get_DefaultAsyncBuilder() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Linq.QueryBuilder get_query() +Microsoft.FSharp.Core.ExtraTopLevelOperators: Microsoft.FSharp.Linq.QueryBuilder query +Microsoft.FSharp.Core.ExtraTopLevelOperators: SByte ToSByte[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators: Single ToSingle[T](T) +Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Collections.Generic.IDictionary`2[TKey,TValue] CreateDictionary[TKey,TValue](System.Collections.Generic.IEnumerable`1[System.Tuple`2[TKey,TValue]]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: System.String ToString() +Microsoft.FSharp.Core.ExtraTopLevelOperators: System.Type GetType() +Microsoft.FSharp.Core.ExtraTopLevelOperators: T LazyPattern[T](System.Lazy`1[T]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToStringThenFail[T,TResult](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToString[T](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,System.String]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T SpliceExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T SpliceUntypedExpression[T](Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Core.ExtraTopLevelOperators: T[,] CreateArray2D[?,T](System.Collections.Generic.IEnumerable`1[?]) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean IsChoice1Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean IsChoice2Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean get_IsChoice1Of2() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Boolean get_IsChoice2Of2() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean IsChoice1Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean IsChoice2Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean get_IsChoice1Of2() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Boolean get_IsChoice2Of2() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice1Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 Choice2Of2 +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean IsChoice1Of2 +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean IsChoice2Of2 +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean get_IsChoice1Of2() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Boolean get_IsChoice2Of2() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Choice1Of2[T1,T2] +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Choice2Of2[T1,T2] +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2+Tags[T1,T2] +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice1Of2(T1) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: Microsoft.FSharp.Core.FSharpChoice`2[T1,T2] NewChoice2Of2(T2) +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`2[T1,T2]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean IsChoice1Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean IsChoice2Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean IsChoice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean get_IsChoice1Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean get_IsChoice2Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Boolean get_IsChoice3Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean IsChoice1Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean IsChoice2Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean IsChoice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean get_IsChoice1Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean get_IsChoice2Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Boolean get_IsChoice3Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean IsChoice1Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean IsChoice2Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean IsChoice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean get_IsChoice1Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean get_IsChoice2Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Boolean get_IsChoice3Of3() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 Item +Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice1Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice2Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 Choice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean IsChoice1Of3 +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean IsChoice2Of3 +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean IsChoice3Of3 +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean get_IsChoice1Of3() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean get_IsChoice2Of3() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Boolean get_IsChoice3Of3() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Choice1Of3[T1,T2,T3] +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Choice2Of3[T1,T2,T3] +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Choice3Of3[T1,T2,T3] +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3+Tags[T1,T2,T3] +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice1Of3(T1) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice2Of3(T2) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3] NewChoice3Of3(T3) +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`3[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 Item +Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean IsChoice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 Item +Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4]: T4 get_Item() +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 Choice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice1Of4 +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice2Of4 +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice3Of4 +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean IsChoice4Of4 +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice1Of4() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice2Of4() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice3Of4() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Boolean get_IsChoice4Of4() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice1Of4[T1,T2,T3,T4] +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice2Of4[T1,T2,T3,T4] +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice3Of4[T1,T2,T3,T4] +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Choice4Of4[T1,T2,T3,T4] +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4+Tags[T1,T2,T3,T4] +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice1Of4(T1) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice2Of4(T2) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice3Of4(T3) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4] NewChoice4Of4(T4) +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 Item +Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 Item +Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5]: T4 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 Item +Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5]: T5 get_Item() +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 Choice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice1Of5 +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice2Of5 +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice3Of5 +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice4Of5 +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean IsChoice5Of5 +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice1Of5() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice2Of5() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice3Of5() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice4Of5() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Boolean get_IsChoice5Of5() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice1Of5[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice2Of5[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice3Of5[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice4Of5[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Choice5Of5[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5+Tags[T1,T2,T3,T4,T5] +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice1Of5(T1) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice2Of5(T2) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice3Of5(T3) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice4Of5(T4) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5] NewChoice5Of5(T5) +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6]: T4 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6]: T5 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 Item +Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6]: T6 get_Item() +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 Choice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice1Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice2Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice3Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice4Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice5Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean IsChoice6Of6 +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice1Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice2Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice3Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice4Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice5Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Boolean get_IsChoice6Of6() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice1Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice2Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice3Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice4Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice5Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Choice6Of6[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6+Tags[T1,T2,T3,T4,T5,T6] +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice1Of6(T1) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice2Of6(T2) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice3Of6(T3) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice4Of6(T4) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice5Of6(T5) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6] NewChoice6Of6(T6) +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 Item +Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item() +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 Choice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice1Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice2Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice3Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice4Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice5Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice6Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean IsChoice7Of7 +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice1Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice2Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice3Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice4Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice5Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice6Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Boolean get_IsChoice7Of7() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 Tag +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Int32 get_Tag() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice1Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice2Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice3Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice4Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice5Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice6Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Choice7Of7[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7+Tags[T1,T2,T3,T4,T5,T6,T7] +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice1Of7(T1) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice2Of7(T2) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice3Of7(T3) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice4Of7(T4) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice5Of7(T5) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice6Of7(T6) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7] NewChoice7Of7(T7) +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Core.FSharpChoice`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.String ToString() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: System.Type GetType() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: TResult Invoke(T) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: V InvokeFast[V](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,V]], T, TResult) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Void .ctor() +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: W InvokeFast[V,W](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,W]]], T, TResult, V) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: X InvokeFast[V,W,X](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,X]]]], T, TResult, V, W) +Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]: Y InvokeFast[V,W,X,Y](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TResult,Microsoft.FSharp.Core.FSharpFunc`2[V,Microsoft.FSharp.Core.FSharpFunc`2[W,Microsoft.FSharp.Core.FSharpFunc`2[X,Y]]]]], T, TResult, V, W, X) +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Major +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Minor +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 Release +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Major() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Minor() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Int32 get_Release() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object TypeId +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.String ToString() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: System.Type GetType() +Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute: Void .ctor(Int32, Int32, Int32) +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 None +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: Int32 Some +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpOption`1+Tags[T]: System.Type GetType() +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean IsNone +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean IsSome +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean get_IsNone(Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.FSharpOption`1[T]: Boolean get_IsSome(Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpOption`1[T]: Int32 GetTag(Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1+Tags[T] +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] None +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] Some(T) +Microsoft.FSharp.Core.FSharpOption`1[T]: Microsoft.FSharp.Core.FSharpOption`1[T] get_None() +Microsoft.FSharp.Core.FSharpOption`1[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpOption`1[T]: System.Type GetType() +Microsoft.FSharp.Core.FSharpOption`1[T]: T Value +Microsoft.FSharp.Core.FSharpOption`1[T]: T get_Value() +Microsoft.FSharp.Core.FSharpOption`1[T]: Void .ctor(T) +Microsoft.FSharp.Core.FSharpRef`1[T]: Boolean Equals(Microsoft.FSharp.Core.FSharpRef`1[T]) +Microsoft.FSharp.Core.FSharpRef`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpRef`1[T]: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(Microsoft.FSharp.Core.FSharpRef`1[T]) +Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 CompareTo(System.Object, System.Collections.IComparer) +Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpRef`1[T]: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.FSharpRef`1[T]: System.String ToString() +Microsoft.FSharp.Core.FSharpRef`1[T]: System.Type GetType() +Microsoft.FSharp.Core.FSharpRef`1[T]: T Value +Microsoft.FSharp.Core.FSharpRef`1[T]: T contents +Microsoft.FSharp.Core.FSharpRef`1[T]: T contents@ +Microsoft.FSharp.Core.FSharpRef`1[T]: T get_Value() +Microsoft.FSharp.Core.FSharpRef`1[T]: T get_contents() +Microsoft.FSharp.Core.FSharpRef`1[T]: Void .ctor(T) +Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_Value(T) +Microsoft.FSharp.Core.FSharpRef`1[T]: Void set_contents(T) +Microsoft.FSharp.Core.FSharpTypeFunc: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FSharpTypeFunc: Int32 GetHashCode() +Microsoft.FSharp.Core.FSharpTypeFunc: System.Object Specialize[T]() +Microsoft.FSharp.Core.FSharpTypeFunc: System.String ToString() +Microsoft.FSharp.Core.FSharpTypeFunc: System.Type GetType() +Microsoft.FSharp.Core.FSharpTypeFunc: Void .ctor() +Microsoft.FSharp.Core.FuncConvert: Boolean Equals(System.Object) +Microsoft.FSharp.Core.FuncConvert: Int32 GetHashCode() +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit] ToFSharpFunc[T](System.Action`1[T]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]] FuncFromTupled[T1,T2,T3,T4,T5,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`5[T1,T2,T3,T4,T5],TResult]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]] FuncFromTupled[T1,T2,T3,T4,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`4[T1,T2,T3,T4],TResult]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]] FuncFromTupled[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`3[T1,T2,T3],TResult]) +Microsoft.FSharp.Core.FuncConvert: Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]] FuncFromTupled[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[System.Tuple`2[T1,T2],TResult]) +Microsoft.FSharp.Core.FuncConvert: System.String ToString() +Microsoft.FSharp.Core.FuncConvert: System.Type GetType() +Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.GeneralizableValueAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.GeneralizableValueAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object TypeId +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.String ToString() +Microsoft.FSharp.Core.GeneralizableValueAttribute: System.Type GetType() +Microsoft.FSharp.Core.GeneralizableValueAttribute: Void .ctor() +Microsoft.FSharp.Core.InterfaceAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.InterfaceAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.InterfaceAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.InterfaceAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.InterfaceAttribute: System.Object TypeId +Microsoft.FSharp.Core.InterfaceAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.InterfaceAttribute: System.String ToString() +Microsoft.FSharp.Core.InterfaceAttribute: System.Type GetType() +Microsoft.FSharp.Core.InterfaceAttribute: Void .ctor() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: Int32 GetHashCode() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String AddressOpNotFirstClassString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputArrayEmptyString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputMustBeNonNegativeString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String InputSequenceEmptyString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String NoNegateMinValueString +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_AddressOpNotFirstClassString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputArrayEmptyString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputMustBeNonNegativeString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_InputSequenceEmptyString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.String get_NoNegateMinValueString() +Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean FastEqualsTuple5[T1,T2,T3,T4,T5](System.Collections.IEqualityComparer, System.Tuple`5[T1,T2,T3,T4,T5], System.Tuple`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericEqualityERIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericEqualityIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericEqualityWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericGreaterOrEqualIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericGreaterThanIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericLessOrEqualIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean GenericLessThanIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Boolean PhysicalEqualityIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple2[T1,T2](System.Collections.IComparer, System.Tuple`2[T1,T2], System.Tuple`2[T1,T2]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple3[T1,T2,T3](System.Collections.IComparer, System.Tuple`3[T1,T2,T3], System.Tuple`3[T1,T2,T3]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple4[T1,T2,T3,T4](System.Collections.IComparer, System.Tuple`4[T1,T2,T3,T4], System.Tuple`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastCompareTuple5[T1,T2,T3,T4,T5](System.Collections.IComparer, System.Tuple`5[T1,T2,T3,T4,T5], System.Tuple`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple2[T1,T2](System.Collections.IEqualityComparer, System.Tuple`2[T1,T2]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple3[T1,T2,T3](System.Collections.IEqualityComparer, System.Tuple`3[T1,T2,T3]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple4[T1,T2,T3,T4](System.Collections.IEqualityComparer, System.Tuple`4[T1,T2,T3,T4]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 FastHashTuple5[T1,T2,T3,T4,T5](System.Collections.IEqualityComparer, System.Tuple`5[T1,T2,T3,T4,T5]) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonIntrinsic[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericComparisonWithComparerIntrinsic[T](System.Collections.IComparer, T, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashIntrinsic[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GenericHashWithComparerIntrinsic[T](System.Collections.IEqualityComparer, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 GetHashCode() +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 LimitedGenericHashIntrinsic[T](Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: Int32 PhysicalHashIntrinsic[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+HashCompare: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestFast[T](System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Boolean TypeTestGeneric[T](System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Char GetString(System.String, Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Int32 GetHashCode() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Decimal MakeDecimal(Int32, Int32, Int32, Boolean, Byte) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CheckThis[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T CreateInstance[T]() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray2D[T](T[,], Int32, Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray3D[T](T[,,], Int32, Int32, Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray4D[T](T[,,,], Int32, Int32, Int32, Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T GetArray[T](T[], Int32) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T UnboxFast[T](System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: T UnboxGeneric[T](System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void Dispose[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void FailInit() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void FailStaticInit() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray2D[T](T[,], Int32, Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray3D[T](T[,,], Int32, Int32, Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray4D[T](T[,,,], Int32, Int32, Int32, Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions: Void SetArray[T](T[], Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean Or(Boolean, Boolean) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_Amp(Boolean, Boolean) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanAnd(Boolean, Boolean) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Boolean op_BooleanOr(Boolean, Boolean) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: Int32 GetHashCode() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: IntPtr op_IntegerAddressOf[T](T) +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators: T& op_AddressOf[T](T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityER[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEqualityWithComparer[T](System.Collections.IEqualityComparer, T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericEquality[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericGreaterOrEqual[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericGreaterThan[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericLessOrEqual[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean GenericLessThan[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Boolean PhysicalEquality[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Double FloatWithMeasure(Double) +Microsoft.FSharp.Core.LanguagePrimitives: Int16 Int16WithMeasure(Int16) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparisonWithComparer[T](System.Collections.IComparer, T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericComparison[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHashWithComparer[T](System.Collections.IEqualityComparer, T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericHash[T](T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GenericLimitedHash[T](Int32, T) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 GetHashCode() +Microsoft.FSharp.Core.LanguagePrimitives: Int32 Int32WithMeasure(Int32) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 ParseInt32(System.String) +Microsoft.FSharp.Core.LanguagePrimitives: Int32 PhysicalHash[T](T) +Microsoft.FSharp.Core.LanguagePrimitives: Int64 Int64WithMeasure(Int64) +Microsoft.FSharp.Core.LanguagePrimitives: Int64 ParseInt64(System.String) +Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+ErrorStrings +Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+HashCompare +Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicFunctions +Microsoft.FSharp.Core.LanguagePrimitives: Microsoft.FSharp.Core.LanguagePrimitives+IntrinsicOperators +Microsoft.FSharp.Core.LanguagePrimitives: SByte SByteWithMeasure(SByte) +Microsoft.FSharp.Core.LanguagePrimitives: Single Float32WithMeasure(Single) +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IComparer`1[T] FastGenericComparerFromTable[T]() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IComparer`1[T] FastGenericComparer[T]() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastGenericEqualityComparerFromTable[T]() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastGenericEqualityComparer[T]() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.Generic.IEqualityComparer`1[T] FastLimitedGenericEqualityComparer[T](Int32) +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IComparer GenericComparer +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IComparer get_GenericComparer() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer GenericEqualityComparer +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer GenericEqualityERComparer +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityComparer() +Microsoft.FSharp.Core.LanguagePrimitives: System.Collections.IEqualityComparer get_GenericEqualityERComparer() +Microsoft.FSharp.Core.LanguagePrimitives: System.Decimal DecimalWithMeasure(System.Decimal) +Microsoft.FSharp.Core.LanguagePrimitives: System.String ToString() +Microsoft.FSharp.Core.LanguagePrimitives: System.Type GetType() +Microsoft.FSharp.Core.LanguagePrimitives: T DivideByIntDynamic[T](T, Int32) +Microsoft.FSharp.Core.LanguagePrimitives: T DivideByInt[T](T, Int32) +Microsoft.FSharp.Core.LanguagePrimitives: T EnumToValue[TEnum,T](TEnum) +Microsoft.FSharp.Core.LanguagePrimitives: T GenericMaximum[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: T GenericMinimum[T](T, T) +Microsoft.FSharp.Core.LanguagePrimitives: T GenericOneDynamic[T]() +Microsoft.FSharp.Core.LanguagePrimitives: T GenericOne[T]() +Microsoft.FSharp.Core.LanguagePrimitives: T GenericZeroDynamic[T]() +Microsoft.FSharp.Core.LanguagePrimitives: T GenericZero[T]() +Microsoft.FSharp.Core.LanguagePrimitives: TEnum EnumOfValue[T,TEnum](T) +Microsoft.FSharp.Core.LanguagePrimitives: TResult AdditionDynamic[T1,T2,TResult](T1, T2) +Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedAdditionDynamic[T1,T2,TResult](T1, T2) +Microsoft.FSharp.Core.LanguagePrimitives: TResult CheckedMultiplyDynamic[T1,T2,TResult](T1, T2) +Microsoft.FSharp.Core.LanguagePrimitives: TResult MultiplyDynamic[T1,T2,TResult](T1, T2) +Microsoft.FSharp.Core.LanguagePrimitives: UInt32 ParseUInt32(System.String) +Microsoft.FSharp.Core.LanguagePrimitives: UInt64 ParseUInt64(System.String) +Microsoft.FSharp.Core.LiteralAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.LiteralAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.LiteralAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.LiteralAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.LiteralAttribute: System.Object TypeId +Microsoft.FSharp.Core.LiteralAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.LiteralAttribute: System.String ToString() +Microsoft.FSharp.Core.LiteralAttribute: System.Type GetType() +Microsoft.FSharp.Core.LiteralAttribute: Void .ctor() +Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object) +Microsoft.FSharp.Core.MatchFailureException: Boolean Equals(System.Object, System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.MatchFailureException: Int32 Data1 +Microsoft.FSharp.Core.MatchFailureException: Int32 Data2 +Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode() +Microsoft.FSharp.Core.MatchFailureException: Int32 GetHashCode(System.Collections.IEqualityComparer) +Microsoft.FSharp.Core.MatchFailureException: Int32 HResult +Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data1() +Microsoft.FSharp.Core.MatchFailureException: Int32 get_Data2() +Microsoft.FSharp.Core.MatchFailureException: Int32 get_HResult() +Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary Data +Microsoft.FSharp.Core.MatchFailureException: System.Collections.IDictionary get_Data() +Microsoft.FSharp.Core.MatchFailureException: System.Exception GetBaseException() +Microsoft.FSharp.Core.MatchFailureException: System.Exception InnerException +Microsoft.FSharp.Core.MatchFailureException: System.Exception get_InnerException() +Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase TargetSite +Microsoft.FSharp.Core.MatchFailureException: System.Reflection.MethodBase get_TargetSite() +Microsoft.FSharp.Core.MatchFailureException: System.String Data0 +Microsoft.FSharp.Core.MatchFailureException: System.String HelpLink +Microsoft.FSharp.Core.MatchFailureException: System.String Message +Microsoft.FSharp.Core.MatchFailureException: System.String Source +Microsoft.FSharp.Core.MatchFailureException: System.String StackTrace +Microsoft.FSharp.Core.MatchFailureException: System.String ToString() +Microsoft.FSharp.Core.MatchFailureException: System.String get_Data0() +Microsoft.FSharp.Core.MatchFailureException: System.String get_HelpLink() +Microsoft.FSharp.Core.MatchFailureException: System.String get_Message() +Microsoft.FSharp.Core.MatchFailureException: System.String get_Source() +Microsoft.FSharp.Core.MatchFailureException: System.String get_StackTrace() +Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() +Microsoft.FSharp.Core.MatchFailureException: System.Type GetType() +Microsoft.FSharp.Core.MatchFailureException: Void .ctor() +Microsoft.FSharp.Core.MatchFailureException: Void .ctor(System.String, Int32, Int32) +Microsoft.FSharp.Core.MatchFailureException: Void GetObjectData(System.Runtime.Serialization.SerializationInfo, System.Runtime.Serialization.StreamingContext) +Microsoft.FSharp.Core.MatchFailureException: Void set_HelpLink(System.String) +Microsoft.FSharp.Core.MatchFailureException: Void set_Source(System.String) +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object TypeId +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.String ToString() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: System.Type GetType() +Microsoft.FSharp.Core.MeasureAnnotatedAbbreviationAttribute: Void .ctor() +Microsoft.FSharp.Core.MeasureAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.MeasureAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.MeasureAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.MeasureAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.MeasureAttribute: System.Object TypeId +Microsoft.FSharp.Core.MeasureAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.MeasureAttribute: System.String ToString() +Microsoft.FSharp.Core.MeasureAttribute: System.Type GetType() +Microsoft.FSharp.Core.MeasureAttribute: Void .ctor() +Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NoComparisonAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.NoComparisonAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.NoComparisonAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.NoComparisonAttribute: System.Object TypeId +Microsoft.FSharp.Core.NoComparisonAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.NoComparisonAttribute: System.String ToString() +Microsoft.FSharp.Core.NoComparisonAttribute: System.Type GetType() +Microsoft.FSharp.Core.NoComparisonAttribute: Void .ctor() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object TypeId +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.String ToString() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: System.Type GetType() +Microsoft.FSharp.Core.NoDynamicInvocationAttribute: Void .ctor() +Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NoEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.NoEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.NoEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.NoEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.NoEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.NoEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.NoEqualityAttribute: System.Type GetType() +Microsoft.FSharp.Core.NoEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: Int32 GetHashCode() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromInt64Dynamic(Int64) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Object FromStringDynamic(System.String) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.String ToString() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: System.Type GetType() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt32[T](Int32) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromInt64[T](Int64) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromOne[T]() +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromString[T](System.String) +Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI: T FromZero[T]() +Microsoft.FSharp.Core.NumericLiterals: Boolean Equals(System.Object) +Microsoft.FSharp.Core.NumericLiterals: Int32 GetHashCode() +Microsoft.FSharp.Core.NumericLiterals: Microsoft.FSharp.Core.NumericLiterals+NumericLiteralI +Microsoft.FSharp.Core.NumericLiterals: System.String ToString() +Microsoft.FSharp.Core.NumericLiterals: System.Type GetType() +Microsoft.FSharp.Core.Operators+Checked: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators+Checked: Byte ToByte[T](T) +Microsoft.FSharp.Core.Operators+Checked: Char ToChar[T](T) +Microsoft.FSharp.Core.Operators+Checked: Int16 ToInt16[T](T) +Microsoft.FSharp.Core.Operators+Checked: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt32[T](T) +Microsoft.FSharp.Core.Operators+Checked: Int32 ToInt[T](T) +Microsoft.FSharp.Core.Operators+Checked: Int64 ToInt64[T](T) +Microsoft.FSharp.Core.Operators+Checked: IntPtr ToIntPtr[T](T) +Microsoft.FSharp.Core.Operators+Checked: SByte ToSByte[T](T) +Microsoft.FSharp.Core.Operators+Checked: System.String ToString() +Microsoft.FSharp.Core.Operators+Checked: System.Type GetType() +Microsoft.FSharp.Core.Operators+Checked: T op_UnaryNegation[T](T) +Microsoft.FSharp.Core.Operators+Checked: T3 op_Addition[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators+Checked: T3 op_Multiply[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators+Checked: T3 op_Subtraction[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators+Checked: UInt16 ToUInt16[T](T) +Microsoft.FSharp.Core.Operators+Checked: UInt32 ToUInt32[T](T) +Microsoft.FSharp.Core.Operators+Checked: UInt64 ToUInt64[T](T) +Microsoft.FSharp.Core.Operators+Checked: UIntPtr ToUIntPtr[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Equality[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThanOrEqual[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_GreaterThan[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_Inequality[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThanOrEqual[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Boolean op_LessThan[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.String ToString() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: System.Type GetType() +Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Max[T](T, T) +Microsoft.FSharp.Core.Operators+NonStructuralComparison: T Min[T](T, T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Byte PowByte(Byte, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Double PowDouble(Double, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int16 PowInt16(Int16, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 PowInt32(Int32, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int32 SignDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Int64 PowInt64(Int64, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: IntPtr PowIntPtr(IntPtr, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: SByte PowSByte(SByte, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Single PowSingle(Single, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Byte] RangeByte(Byte, Byte, Byte) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Char] RangeChar(Char, Char) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Double] RangeDouble(Double, Double, Double) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Int16] RangeInt16(Int16, Int16, Int16) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Int32] RangeInt32(Int32, Int32, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Int64] RangeInt64(Int64, Int64, Int64) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.IntPtr] RangeIntPtr(IntPtr, IntPtr, IntPtr) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.SByte] RangeSByte(SByte, SByte, SByte) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.Single] RangeSingle(Single, Single, Single) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UInt16] RangeUInt16(UInt16, UInt16, UInt16) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UInt32] RangeUInt32(UInt32, UInt32, UInt32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UInt64] RangeUInt64(UInt64, UInt64, UInt64) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[System.UIntPtr] RangeUIntPtr(UIntPtr, UIntPtr, UIntPtr) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeGeneric[T](T, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T, T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Collections.Generic.IEnumerable`1[T] RangeStepGeneric[TStep,T](TStep, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TStep,T]], T, TStep, T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Decimal PowDecimal(System.Decimal, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String GetStringSlice(System.String, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.String ToString() +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: System.Type GetType() +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AbsDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AcosDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AsinDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T AtanDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T CeilingDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T CosDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T CoshDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T ExpDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T FloorDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T Log10Dynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T LogDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T PowDynamic[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T PowGeneric[T](T, Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[T,T]], T, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T RoundDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T SinDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T SinhDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T TanDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T TanhDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T TruncateDynamic[T](T) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T2 Atan2Dynamic[T1,T2](T1, T1) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T2 SqrtDynamic[T1,T2](T1) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,,] GetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,,] GetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[,] GetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice2DFixed1[T](T[,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice2DFixed2[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: T[] GetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt16 PowUInt16(UInt16, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt32 PowUInt32(UInt32, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UInt64 PowUInt64(UInt64, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: UIntPtr PowUIntPtr(UIntPtr, Int32) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2DFixed1[T](T[,], Int32, Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2DFixed2[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Int32, T[]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice2D[T](T[,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice3D[T](T[,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice4D[T](T[,,,], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[,,,]) +Microsoft.FSharp.Core.Operators+OperatorIntrinsics: Void SetArraySlice[T](T[], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], Microsoft.FSharp.Core.FSharpOption`1[System.Int32], T[]) +Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators+Unchecked: Boolean Equals[T](T, T) +Microsoft.FSharp.Core.Operators+Unchecked: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators+Unchecked: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators+Unchecked: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators+Unchecked: System.String ToString() +Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType() +Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]() +Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object) +Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T) +Microsoft.FSharp.Core.Operators: Boolean Not(Boolean) +Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T) +Microsoft.FSharp.Core.Operators: Boolean op_GreaterThanOrEqual[T](T, T) +Microsoft.FSharp.Core.Operators: Boolean op_GreaterThan[T](T, T) +Microsoft.FSharp.Core.Operators: Boolean op_Inequality[T](T, T) +Microsoft.FSharp.Core.Operators: Boolean op_LessThanOrEqual[T](T, T) +Microsoft.FSharp.Core.Operators: Boolean op_LessThan[T](T, T) +Microsoft.FSharp.Core.Operators: Byte ToByte[T](T) +Microsoft.FSharp.Core.Operators: Char ToChar[T](T) +Microsoft.FSharp.Core.Operators: Double Infinity +Microsoft.FSharp.Core.Operators: Double NaN +Microsoft.FSharp.Core.Operators: Double ToDouble[T](T) +Microsoft.FSharp.Core.Operators: Double get_Infinity() +Microsoft.FSharp.Core.Operators: Double get_NaN() +Microsoft.FSharp.Core.Operators: Int16 ToInt16[T](T) +Microsoft.FSharp.Core.Operators: Int32 Compare[T](T, T) +Microsoft.FSharp.Core.Operators: Int32 GetHashCode() +Microsoft.FSharp.Core.Operators: Int32 Hash[T](T) +Microsoft.FSharp.Core.Operators: Int32 Sign[T](T) +Microsoft.FSharp.Core.Operators: Int32 SizeOf[T]() +Microsoft.FSharp.Core.Operators: Int32 ToInt32[T](T) +Microsoft.FSharp.Core.Operators: Int32 ToInt[T](T) +Microsoft.FSharp.Core.Operators: Int32 limitedHash[T](Int32, T) +Microsoft.FSharp.Core.Operators: Int64 ToInt64[T](T) +Microsoft.FSharp.Core.Operators: IntPtr ToIntPtr[T](T) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Collections.FSharpList`1[T] op_Append[T](Microsoft.FSharp.Collections.FSharpList`1[T], Microsoft.FSharp.Collections.FSharpList`1[T]) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeLeft[T2,T3,T1](Microsoft.FSharp.Core.FSharpFunc`2[T2,T3], Microsoft.FSharp.Core.FSharpFunc`2[T1,T2]) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeRight[T1,T2,T3](Microsoft.FSharp.Core.FSharpFunc`2[T1,T2], Microsoft.FSharp.Core.FSharpFunc`2[T2,T3]) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[System.String] FailurePattern(System.Exception) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[T] TryUnbox[T](System.Object) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpRef`1[T] Ref[T](T) +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Checked +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+NonStructuralComparison +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+OperatorIntrinsics +Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Unchecked +Microsoft.FSharp.Core.Operators: SByte ToSByte[T](T) +Microsoft.FSharp.Core.Operators: Single InfinitySingle +Microsoft.FSharp.Core.Operators: Single NaNSingle +Microsoft.FSharp.Core.Operators: Single ToSingle[T](T) +Microsoft.FSharp.Core.Operators: Single get_InfinitySingle() +Microsoft.FSharp.Core.Operators: Single get_NaNSingle() +Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] CreateSequence[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_RangeStep[T,TStep](T, TStep, T) +Microsoft.FSharp.Core.Operators: System.Collections.Generic.IEnumerable`1[T] op_Range[T](T, T) +Microsoft.FSharp.Core.Operators: System.Decimal ToDecimal[T](T) +Microsoft.FSharp.Core.Operators: System.Exception Failure(System.String) +Microsoft.FSharp.Core.Operators: System.Object Box[T](T)" + +#if DEBUG + @" +Microsoft.FSharp.Core.Operators: System.RuntimeMethodHandle MethodHandleOf[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult])" + +#endif + @" +Microsoft.FSharp.Core.Operators: System.String ToString() +Microsoft.FSharp.Core.Operators: System.String ToString[T](T) +Microsoft.FSharp.Core.Operators: System.String op_Concatenate(System.String, System.String) +Microsoft.FSharp.Core.Operators: System.Tuple`2[TKey,TValue] KeyValuePattern[TKey,TValue](System.Collections.Generic.KeyValuePair`2[TKey,TValue]) +Microsoft.FSharp.Core.Operators: System.Type GetType() +Microsoft.FSharp.Core.Operators: System.Type TypeDefOf[T]() +Microsoft.FSharp.Core.Operators: System.Type TypeOf[T]() +Microsoft.FSharp.Core.Operators: T Abs[T](T) +Microsoft.FSharp.Core.Operators: T Acos[T](T) +Microsoft.FSharp.Core.Operators: T Asin[T](T) +Microsoft.FSharp.Core.Operators: T Atan[T](T) +Microsoft.FSharp.Core.Operators: T Ceiling[T](T) +Microsoft.FSharp.Core.Operators: T Cos[T](T) +Microsoft.FSharp.Core.Operators: T Cosh[T](T) +Microsoft.FSharp.Core.Operators: T DefaultArg[T](Microsoft.FSharp.Core.FSharpOption`1[T], T) +Microsoft.FSharp.Core.Operators: T Exp[T](T) +Microsoft.FSharp.Core.Operators: T FailWith[T](System.String) +Microsoft.FSharp.Core.Operators: T Floor[T](T) +Microsoft.FSharp.Core.Operators: T Identity[T](T) +Microsoft.FSharp.Core.Operators: T InvalidArg[T](System.String, System.String) +Microsoft.FSharp.Core.Operators: T InvalidOp[T](System.String) +Microsoft.FSharp.Core.Operators: T Lock[TLock,T](TLock, Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,T]) +Microsoft.FSharp.Core.Operators: T Log10[T](T) +Microsoft.FSharp.Core.Operators: T Log[T](T) +Microsoft.FSharp.Core.Operators: T Max[T](T, T) +Microsoft.FSharp.Core.Operators: T Min[T](T, T) +Microsoft.FSharp.Core.Operators: T NullArg[T](System.String) +Microsoft.FSharp.Core.Operators: T PowInteger[T](T, Int32) +Microsoft.FSharp.Core.Operators: T Raise[T](System.Exception) +Microsoft.FSharp.Core.Operators: T Reraise[T]() +Microsoft.FSharp.Core.Operators: T Rethrow[T]() +Microsoft.FSharp.Core.Operators: T Round[T](T) +Microsoft.FSharp.Core.Operators: T Sin[T](T) +Microsoft.FSharp.Core.Operators: T Sinh[T](T) +Microsoft.FSharp.Core.Operators: T Tan[T](T) +Microsoft.FSharp.Core.Operators: T Tanh[T](T) +Microsoft.FSharp.Core.Operators: T Truncate[T](T) +Microsoft.FSharp.Core.Operators: T Unbox[T](System.Object) +Microsoft.FSharp.Core.Operators: T op_BitwiseAnd[T](T, T) +Microsoft.FSharp.Core.Operators: T op_BitwiseOr[T](T, T) +Microsoft.FSharp.Core.Operators: T op_Dereference[T](Microsoft.FSharp.Core.FSharpRef`1[T]) +Microsoft.FSharp.Core.Operators: T op_ExclusiveOr[T](T, T) +Microsoft.FSharp.Core.Operators: T op_Exponentiation[T,TResult](T, TResult) +Microsoft.FSharp.Core.Operators: T op_LeftShift[T](T, Int32) +Microsoft.FSharp.Core.Operators: T op_LogicalNot[T](T) +Microsoft.FSharp.Core.Operators: T op_RightShift[T](T, Int32) +Microsoft.FSharp.Core.Operators: T op_UnaryNegation[T](T) +Microsoft.FSharp.Core.Operators: T op_UnaryPlus[T](T) +Microsoft.FSharp.Core.Operators: T1 Fst[T1,T2](System.Tuple`2[T1,T2]) +Microsoft.FSharp.Core.Operators: T2 Atan2[T1,T2](T1, T1) +Microsoft.FSharp.Core.Operators: T2 Snd[T1,T2](System.Tuple`2[T1,T2]) +Microsoft.FSharp.Core.Operators: T3 op_Addition[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators: T3 op_Division[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators: T3 op_Modulus[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators: T3 op_Multiply[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators: T3 op_Subtraction[T1,T2,T3](T1, T2) +Microsoft.FSharp.Core.Operators: TResult Sqrt[T,TResult](T) +Microsoft.FSharp.Core.Operators: TResult ToEnum[TResult](Int32) +Microsoft.FSharp.Core.Operators: TResult Using[T,TResult](T, Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) +Microsoft.FSharp.Core.Operators: TResult op_PipeLeft2[T1,T2,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]], T1, T2) +Microsoft.FSharp.Core.Operators: TResult op_PipeLeft3[T1,T2,T3,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]], T1, T2, T3) +Microsoft.FSharp.Core.Operators: TResult op_PipeLeft[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], T) +Microsoft.FSharp.Core.Operators: TResult op_PipeRight2[T1,T2,TResult](T1, T2, Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) +Microsoft.FSharp.Core.Operators: TResult op_PipeRight3[T1,T2,T3,TResult](T1, T2, T3, Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) +Microsoft.FSharp.Core.Operators: TResult op_PipeRight[T1,TResult](T1, Microsoft.FSharp.Core.FSharpFunc`2[T1,TResult]) +Microsoft.FSharp.Core.Operators: UInt16 ToUInt16[T](T) +Microsoft.FSharp.Core.Operators: UInt32 ToUInt32[T](T) +Microsoft.FSharp.Core.Operators: UInt64 ToUInt64[T](T) +Microsoft.FSharp.Core.Operators: UIntPtr ToUIntPtr[T](T) +Microsoft.FSharp.Core.Operators: Void Decrement(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) +Microsoft.FSharp.Core.Operators: Void Ignore[T](T) +Microsoft.FSharp.Core.Operators: Void Increment(Microsoft.FSharp.Core.FSharpRef`1[System.Int32]) +Microsoft.FSharp.Core.Operators: Void op_ColonEquals[T](Microsoft.FSharp.Core.FSharpRef`1[T], T) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: FSharpFunc`3 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,TResult] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: System.Type GetType() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: TResult Invoke(T1, T2) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: FSharpFunc`4 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,TResult]] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: System.Type GetType() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: TResult Invoke(T1, T2, T3) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: FSharpFunc`5 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,TResult]]] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: System.Type GetType() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: TResult Invoke(T1, T2, T3, T4) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: FSharpFunc`6 Adapt(Microsoft.FSharp.Core.FSharpFunc`2[T1,Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]]]) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Microsoft.FSharp.Core.FSharpFunc`2[T2,Microsoft.FSharp.Core.FSharpFunc`2[T3,Microsoft.FSharp.Core.FSharpFunc`2[T4,Microsoft.FSharp.Core.FSharpFunc`2[T5,TResult]]]] Invoke(T1) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: System.Type GetType() +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: TResult Invoke(T1, T2, T3, T4, T5) +Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult]: Void .ctor() +Microsoft.FSharp.Core.OptimizedClosures: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptimizedClosures: Int32 GetHashCode() +Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`3[T1,T2,TResult] +Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`4[T1,T2,T3,TResult] +Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`5[T1,T2,T3,T4,TResult] +Microsoft.FSharp.Core.OptimizedClosures: Microsoft.FSharp.Core.OptimizedClosures+FSharpFunc`6[T1,T2,T3,T4,T5,TResult] +Microsoft.FSharp.Core.OptimizedClosures: System.String ToString() +Microsoft.FSharp.Core.OptimizedClosures: System.Type GetType() +Microsoft.FSharp.Core.OptionModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptionModule: Boolean Exists[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Boolean ForAll[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Boolean IsNone[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Boolean IsSome[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Int32 Count[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Int32 GetHashCode() +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T] ToList[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfNullable[T](System.Nullable`1[T]) +Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfObj[T](T) +Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: System.String ToString() +Microsoft.FSharp.Core.OptionModule: System.Type GetType() +Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: T ToObj[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpOption`1[T], TState) +Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionModule: Void Iterate[T](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.Unit], Microsoft.FSharp.Core.FSharpOption`1[T]) +Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.OptionalArgumentAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.OptionalArgumentAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object TypeId +Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.OptionalArgumentAttribute: System.String ToString() +Microsoft.FSharp.Core.OptionalArgumentAttribute: System.Type GetType() +Microsoft.FSharp.Core.OptionalArgumentAttribute: Void .ctor() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Int32 GetHashCode() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String ToString() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String Value +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.String get_Value() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: System.Type GetType() +Microsoft.FSharp.Core.PrintfFormat`4[TPrinter,TState,TResidue,TResult]: Void .ctor(System.String) +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Boolean Equals(System.Object) +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Int32 GetHashCode() +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String ToString() +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String Value +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.String get_Value() +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: System.Type GetType() +Microsoft.FSharp.Core.PrintfFormat`5[TPrinter,TState,TResidue,TResult,TTuple]: Void .ctor(System.String) +Microsoft.FSharp.Core.PrintfModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.PrintfModule: Int32 GetHashCode() +Microsoft.FSharp.Core.PrintfModule: System.String ToString() +Microsoft.FSharp.Core.PrintfModule: System.Type GetType() +Microsoft.FSharp.Core.PrintfModule: T PrintFormatLineToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[System.String,TResult], Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringBuilderThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.Text.StringBuilder, Microsoft.FSharp.Core.PrintfFormat`4[T,System.Text.StringBuilder,Microsoft.FSharp.Core.Unit,TResult]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringBuilder[T](System.Text.StringBuilder, Microsoft.FSharp.Core.PrintfFormat`4[T,System.Text.StringBuilder,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThenFail[T,TResult](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[System.String,TResult], Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,TResult]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToStringThen[T](Microsoft.FSharp.Core.PrintfFormat`4[T,Microsoft.FSharp.Core.Unit,System.String,System.String]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriterThen[TResult,T](Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Core.Unit,TResult], System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,TResult]) +Microsoft.FSharp.Core.PrintfModule: T PrintFormatToTextWriter[T](System.IO.TextWriter, Microsoft.FSharp.Core.PrintfFormat`4[T,System.IO.TextWriter,Microsoft.FSharp.Core.Unit,Microsoft.FSharp.Core.Unit]) +Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ProjectionParameterAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ProjectionParameterAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object TypeId +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.String ToString() +Microsoft.FSharp.Core.ProjectionParameterAttribute: System.Type GetType() +Microsoft.FSharp.Core.ProjectionParameterAttribute: Void .ctor() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: System.Type GetType() +Microsoft.FSharp.Core.ReferenceEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IncludeValue +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Boolean get_IncludeValue() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object TypeId +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.String ToString() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: System.Type GetType() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor() +Microsoft.FSharp.Core.ReflectedDefinitionAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object TypeId +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.String ToString() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: System.Type GetType() +Microsoft.FSharp.Core.RequireQualifiedAccessAttribute: Void .ctor() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object TypeId +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.String ToString() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: System.Type GetType() +Microsoft.FSharp.Core.RequiresExplicitTypeArgumentsAttribute: Void .ctor() +Microsoft.FSharp.Core.SealedAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.SealedAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.SealedAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.SealedAttribute: Boolean Value +Microsoft.FSharp.Core.SealedAttribute: Boolean get_Value() +Microsoft.FSharp.Core.SealedAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.SealedAttribute: System.Object TypeId +Microsoft.FSharp.Core.SealedAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.SealedAttribute: System.String ToString() +Microsoft.FSharp.Core.SealedAttribute: System.Type GetType() +Microsoft.FSharp.Core.SealedAttribute: Void .ctor() +Microsoft.FSharp.Core.SealedAttribute: Void .ctor(Boolean) +Microsoft.FSharp.Core.SourceConstructFlags: Boolean Equals(System.Object) +Microsoft.FSharp.Core.SourceConstructFlags: Boolean HasFlag(System.Enum) +Microsoft.FSharp.Core.SourceConstructFlags: Int32 CompareTo(System.Object) +Microsoft.FSharp.Core.SourceConstructFlags: Int32 GetHashCode() +Microsoft.FSharp.Core.SourceConstructFlags: Int32 value__ +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Closure +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Exception +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Field +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags KindMask +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Module +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags NonPublicRepresentation +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags None +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags ObjectType +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags RecordType +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags SumType +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags UnionCase +Microsoft.FSharp.Core.SourceConstructFlags: Microsoft.FSharp.Core.SourceConstructFlags Value +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString() +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.IFormatProvider) +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String) +Microsoft.FSharp.Core.SourceConstructFlags: System.String ToString(System.String, System.IFormatProvider) +Microsoft.FSharp.Core.SourceConstructFlags: System.Type GetType() +Microsoft.FSharp.Core.SourceConstructFlags: System.TypeCode GetTypeCode() +Microsoft.FSharp.Core.StringModule: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StringModule: Boolean Exists(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) +Microsoft.FSharp.Core.StringModule: Boolean ForAll(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) +Microsoft.FSharp.Core.StringModule: Int32 GetHashCode() +Microsoft.FSharp.Core.StringModule: Int32 Length(System.String) +Microsoft.FSharp.Core.StringModule: System.String Collect(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.String], System.String) +Microsoft.FSharp.Core.StringModule: System.String Concat(System.String, System.Collections.Generic.IEnumerable`1[System.String]) +Microsoft.FSharp.Core.StringModule: System.String Filter(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Boolean], System.String) +Microsoft.FSharp.Core.StringModule: System.String Initialize(Int32, Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,System.String]) +Microsoft.FSharp.Core.StringModule: System.String Map(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char], System.String) +Microsoft.FSharp.Core.StringModule: System.String MapIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,System.Char]], System.String) +Microsoft.FSharp.Core.StringModule: System.String Replicate(Int32, System.String) +Microsoft.FSharp.Core.StringModule: System.String ToString() +Microsoft.FSharp.Core.StringModule: System.Type GetType() +Microsoft.FSharp.Core.StringModule: Void Iterate(Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit], System.String) +Microsoft.FSharp.Core.StringModule: Void IterateIndexed(Microsoft.FSharp.Core.FSharpFunc`2[System.Int32,Microsoft.FSharp.Core.FSharpFunc`2[System.Char,Microsoft.FSharp.Core.Unit]], System.String) +Microsoft.FSharp.Core.StructAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructAttribute: System.String ToString() +Microsoft.FSharp.Core.StructAttribute: System.Type GetType() +Microsoft.FSharp.Core.StructAttribute: Void .ctor() +Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructuralComparisonAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructuralComparisonAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.String ToString() +Microsoft.FSharp.Core.StructuralComparisonAttribute: System.Type GetType() +Microsoft.FSharp.Core.StructuralComparisonAttribute: Void .ctor() +Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructuralEqualityAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructuralEqualityAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.String ToString() +Microsoft.FSharp.Core.StructuralEqualityAttribute: System.Type GetType() +Microsoft.FSharp.Core.StructuralEqualityAttribute: Void .ctor() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object TypeId +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String ToString() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String Value +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.String get_Value() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: System.Type GetType() +Microsoft.FSharp.Core.StructuredFormatDisplayAttribute: Void .ctor(System.String) +Microsoft.FSharp.Core.Unit: Boolean Equals(System.Object) +Microsoft.FSharp.Core.Unit: Int32 GetHashCode() +Microsoft.FSharp.Core.Unit: System.String ToString() +Microsoft.FSharp.Core.Unit: System.Type GetType() +Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.UnverifiableAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.UnverifiableAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.UnverifiableAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.UnverifiableAttribute: System.Object TypeId +Microsoft.FSharp.Core.UnverifiableAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.UnverifiableAttribute: System.String ToString() +Microsoft.FSharp.Core.UnverifiableAttribute: System.Type GetType() +Microsoft.FSharp.Core.UnverifiableAttribute: Void .ctor() +Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Equals(System.Object) +Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean IsDefaultAttribute() +Microsoft.FSharp.Core.VolatileFieldAttribute: Boolean Match(System.Object) +Microsoft.FSharp.Core.VolatileFieldAttribute: Int32 GetHashCode() +Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object TypeId +Microsoft.FSharp.Core.VolatileFieldAttribute: System.Object get_TypeId() +Microsoft.FSharp.Core.VolatileFieldAttribute: System.String ToString() +Microsoft.FSharp.Core.VolatileFieldAttribute: System.Type GetType() +Microsoft.FSharp.Core.VolatileFieldAttribute: Void .ctor() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.ampere: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.candela: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kelvin: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.kilogram: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.metre: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.mole: System.Type GetType() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Boolean Equals(System.Object) +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: Int32 GetHashCode() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.String ToString() +Microsoft.FSharp.Data.UnitSystems.SI.UnitNames.second: System.Type GetType() +Microsoft.FSharp.Linq.NullableModule: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.NullableModule: Int32 GetHashCode() +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToByte[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Byte] ToUInt8[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Char] ToChar[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Decimal] ToDecimal[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Double] ToDouble[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Double] ToFloat[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int16] ToInt16[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int32] ToInt32[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int32] ToInt[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Int64] ToInt64[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.IntPtr] ToIntPtr[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.SByte] ToInt8[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.SByte] ToSByte[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Single] ToFloat32[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.Single] ToSingle[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt16] ToUInt16[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt32] ToUInt32[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UInt64] ToUInt64[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[System.UIntPtr] ToUIntPtr[T](System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableModule: System.Nullable`1[TResult] ToEnum[TResult](System.Nullable`1[System.Int32]) +Microsoft.FSharp.Linq.NullableModule: System.String ToString() +Microsoft.FSharp.Linq.NullableModule: System.Type GetType() +Microsoft.FSharp.Linq.NullableOperators: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_EqualsQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterEqualsQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_GreaterQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_LessEqualsQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_LessGreaterQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_LessQmark[T](T, System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkEqualsQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkEquals[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkGreaterEqualsQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkGreaterEquals[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkGreaterQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkGreater[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessEqualsQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessEquals[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreaterQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessGreater[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLessQmark[T](System.Nullable`1[T], System.Nullable`1[T]) +Microsoft.FSharp.Linq.NullableOperators: Boolean op_QmarkLess[T](System.Nullable`1[T], T) +Microsoft.FSharp.Linq.NullableOperators: Int32 GetHashCode() +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_DivideQmark[T1,T2,T3](T1, System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MinusQmark[T1,T2,T3](T1, System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_MultiplyQmark[T1,T2,T3](T1, System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_PercentQmark[T1,T2,T3](T1, System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_PlusQmark[T1,T2,T3](T1, System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkDivideQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkDivide[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkMinusQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkMinus[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkMultiplyQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkMultiply[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercentQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPercent[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlusQmark[T1,T2,T3](System.Nullable`1[T1], System.Nullable`1[T2]) +Microsoft.FSharp.Linq.NullableOperators: System.Nullable`1[T3] op_QmarkPlus[T1,T2,T3](System.Nullable`1[T1], T2) +Microsoft.FSharp.Linq.NullableOperators: System.String ToString() +Microsoft.FSharp.Linq.NullableOperators: System.Type GetType() +Microsoft.FSharp.Linq.QueryBuilder: Boolean All[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: Boolean Contains[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], T) +Microsoft.FSharp.Linq.QueryBuilder: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QueryBuilder: Boolean Exists[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: Int32 Count[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: Int32 GetHashCode() +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,TValue],Q] GroupValBy[T,TKey,TValue,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[System.Linq.IGrouping`2[TKey,T],Q] GroupBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Distinct[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] SkipWhile[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Skip[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Int32) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] SortByDescending[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] SortByNullableDescending[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TKey]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] SortByNullable[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TKey]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] SortBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Source[T,Q](System.Linq.IQueryable`1[T]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] TakeWhile[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Take[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Int32) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] ThenByDescending[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] ThenByNullableDescending[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TKey]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] ThenByNullable[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TKey]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] ThenBy[T,Q,TKey](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TKey]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Where[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] YieldFrom[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Yield[T,Q](T) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,Q] Zero[T,Q]() +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[T,System.Collections.IEnumerable] Source[T](System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[TResult,Q] For[T,Q,TResult,Q2](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Linq.QuerySource`2[TResult,Q2]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[TResult,Q] GroupJoin[TOuter,Q,TInner,TKey,TResult](Microsoft.FSharp.Linq.QuerySource`2[TOuter,Q], Microsoft.FSharp.Linq.QuerySource`2[TInner,Q], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TInner,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,Microsoft.FSharp.Core.FSharpFunc`2[System.Collections.Generic.IEnumerable`1[TInner],TResult]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[TResult,Q] Join[TOuter,Q,TInner,TKey,TResult](Microsoft.FSharp.Linq.QuerySource`2[TOuter,Q], Microsoft.FSharp.Linq.QuerySource`2[TInner,Q], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TInner,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,Microsoft.FSharp.Core.FSharpFunc`2[TInner,TResult]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[TResult,Q] LeftOuterJoin[TOuter,Q,TInner,TKey,TResult](Microsoft.FSharp.Linq.QuerySource`2[TOuter,Q], Microsoft.FSharp.Linq.QuerySource`2[TInner,Q], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TInner,TKey], Microsoft.FSharp.Core.FSharpFunc`2[TOuter,Microsoft.FSharp.Core.FSharpFunc`2[System.Collections.Generic.IEnumerable`1[TInner],TResult]]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Linq.QuerySource`2[TResult,Q] Select[T,Q,TResult](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TResult]) +Microsoft.FSharp.Linq.QueryBuilder: Microsoft.FSharp.Quotations.FSharpExpr`1[T] Quote[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Linq.QueryBuilder: System.Linq.IQueryable`1[T] Run[T](Microsoft.FSharp.Quotations.FSharpExpr`1[Microsoft.FSharp.Linq.QuerySource`2[T,System.Linq.IQueryable]]) +Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] AverageByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) +Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MaxByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) +Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] MinByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) +Microsoft.FSharp.Linq.QueryBuilder: System.Nullable`1[TValue] SumByNullable[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Nullable`1[TValue]]) +Microsoft.FSharp.Linq.QueryBuilder: System.String ToString() +Microsoft.FSharp.Linq.QueryBuilder: System.Type GetType() +Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOneOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T ExactlyOne[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T Find[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean]) +Microsoft.FSharp.Linq.QueryBuilder: T HeadOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T Head[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T LastOrDefault[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T Last[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q]) +Microsoft.FSharp.Linq.QueryBuilder: T Nth[T,Q](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Int32) +Microsoft.FSharp.Linq.QueryBuilder: TValue AverageBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) +Microsoft.FSharp.Linq.QueryBuilder: TValue MaxBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) +Microsoft.FSharp.Linq.QueryBuilder: TValue MinBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) +Microsoft.FSharp.Linq.QueryBuilder: TValue SumBy[T,Q,TValue](Microsoft.FSharp.Linq.QuerySource`2[T,Q], Microsoft.FSharp.Core.FSharpFunc`2[T,TValue]) +Microsoft.FSharp.Linq.QueryBuilder: Void .ctor() +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: Int32 GetHashCode() +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Collections.Generic.IEnumerable`1[T] RunQueryAsEnumerable[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[Microsoft.FSharp.Linq.QuerySource`2[T,System.Collections.IEnumerable]]) +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.String ToString() +Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority: System.Type GetType() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: Int32 GetHashCode() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.String ToString() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: System.Type GetType() +Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority: T RunQueryAsValue[T](Microsoft.FSharp.Linq.QueryBuilder, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Int32 GetHashCode() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] Source +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Collections.Generic.IEnumerable`1[T] get_Source() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.String ToString() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: System.Type GetType() +Microsoft.FSharp.Linq.QuerySource`2[T,Q]: Void .ctor(System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`1[T1]: Void .ctor(T1) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`2[T1,T2]: Void .ctor(T1, T2) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`3[T1,T2,T3]: Void .ctor(T1, T2, T3) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 Item4 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: T4 get_Item4() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`4[T1,T2,T3,T4]: Void .ctor(T1, T2, T3, T4) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T4 Item4 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T4 get_Item4() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 Item5 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: T5 get_Item5() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`5[T1,T2,T3,T4,T5]: Void .ctor(T1, T2, T3, T4, T5) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T4 Item4 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T4 get_Item4() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T5 Item5 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T5 get_Item5() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 Item6 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: T6 get_Item6() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`6[T1,T2,T3,T4,T5,T6]: Void .ctor(T1, T2, T3, T4, T5, T6) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T4 Item4 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T4 get_Item4() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T5 Item5 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T5 get_Item5() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T6 Item6 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T6 get_Item6() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 Item7 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: T7 get_Item7() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`7[T1,T2,T3,T4,T5,T6,T7]: Void .ctor(T1, T2, T3, T4, T5, T6, T7) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 Item1 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T1 get_Item1() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T2 Item2 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T2 get_Item2() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T3 Item3 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T3 get_Item3() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T4 Item4 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T4 get_Item4() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T5 Item5 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T5 get_Item5() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T6 Item6 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T6 get_Item6() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T7 Item7 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T7 get_Item7() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 Item8 +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: T8 get_Item8() +Microsoft.FSharp.Linq.RuntimeHelpers.AnonymousObject`8[T1,T2,T3,T4,T5,T6,T7,T8]: Void .ctor(T1, T2, T3, T4, T5, T6, T7, T8) +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.Grouping`2[K,T]: Void .ctor(K, System.Collections.Generic.IEnumerable`1[T]) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Boolean Equals(System.Object) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Int32 GetHashCode() +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr SubstHelperRaw(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: Microsoft.FSharp.Quotations.FSharpExpr`1[T] SubstHelper[T](Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar[], System.Object[]) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression QuotationToExpression(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] ImplicitExpressionConversionHelper[T](T) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Linq.Expressions.Expression`1[T] QuotationToLambdaExpression[T](Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Object EvaluateQuotation(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.String ToString() +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: System.Type GetType() +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T MemberInitializationHelper[T](T) +Microsoft.FSharp.Linq.RuntimeHelpers.LeafExpressionConverter: T NewAnonymousObjectHelper[T](T) +Microsoft.FSharp.NativeInterop.NativePtrModule: Boolean Equals(System.Object) +Microsoft.FSharp.NativeInterop.NativePtrModule: Int32 GetHashCode() +Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr AddPointerInlined[T](IntPtr, Int32) +Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr OfNativeIntInlined[T](IntPtr) +Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr StackAllocate[T](Int32) +Microsoft.FSharp.NativeInterop.NativePtrModule: IntPtr ToNativeIntInlined[T](IntPtr) +Microsoft.FSharp.NativeInterop.NativePtrModule: System.String ToString() +Microsoft.FSharp.NativeInterop.NativePtrModule: System.Type GetType() +Microsoft.FSharp.NativeInterop.NativePtrModule: T GetPointerInlined[T](IntPtr, Int32) +Microsoft.FSharp.NativeInterop.NativePtrModule: T ReadPointerInlined[T](IntPtr) +Microsoft.FSharp.NativeInterop.NativePtrModule: Void SetPointerInlined[T](IntPtr, Int32, T) +Microsoft.FSharp.NativeInterop.NativePtrModule: Void WritePointerInlined[T](IntPtr, T) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Int32 GetHashCode() +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Collections.FSharpList`1[System.Type],Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] SpecificCallPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Core.Unit] UnitPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] MethodWithReflectedDefinitionPattern(System.Reflection.MethodBase) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] PropertyGetterWithReflectedDefinitionPattern(System.Reflection.PropertyInfo) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] PropertySetterWithReflectedDefinitionPattern(System.Reflection.PropertyInfo) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Boolean] BoolPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Byte] BytePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Char] CharPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Decimal] DecimalPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Double] DoublePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int16] Int16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int32] Int32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Int64] Int64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.SByte] SBytePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Single] SinglePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.String] StringPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar]],Microsoft.FSharp.Quotations.FSharpExpr]] LambdasPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]]] ApplicationsPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] AndAlsoPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] OrElsePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt16] UInt16Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt32] UInt32Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.UInt64] UInt64Pattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.DerivedPatternsModule: System.String ToString() +Microsoft.FSharp.Quotations.DerivedPatternsModule: System.Type GetType() +Microsoft.FSharp.Quotations.ExprShapeModule: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.ExprShapeModule: Int32 GetHashCode() +Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Core.FSharpChoice`3[Microsoft.FSharp.Quotations.FSharpVar,System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr],System.Tuple`2[System.Object,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] ShapePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.ExprShapeModule: Microsoft.FSharp.Quotations.FSharpExpr RebuildShapeCombination(System.Object, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.ExprShapeModule: System.String ToString() +Microsoft.FSharp.Quotations.ExprShapeModule: System.Type GetType() +Microsoft.FSharp.Quotations.FSharpExpr: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.FSharpExpr: Int32 GetHashCode() +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] get_CustomAttributes() +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] TryGetReflectedDefinition(System.Reflection.MethodBase) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr AddressOf(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr AddressSet(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Application(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Applications(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Call(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.MethodInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Call(System.Reflection.MethodInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Coerce(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr DefaultValue(System.Type) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Deserialize(System.Type, Microsoft.FSharp.Collections.FSharpList`1[System.Type], Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr], Byte[]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Deserialize40(System.Type, System.Type[], System.Type[], Microsoft.FSharp.Quotations.FSharpExpr[], Byte[]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldGet(System.Reflection.FieldInfo) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldSet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.FieldInfo, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr FieldSet(System.Reflection.FieldInfo, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ForIntegerRangeLoop(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr IfThenElse(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Lambda(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Let(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr LetRecursive(Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]], Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewArray(System.Type, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewDelegate(System.Type, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar], Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewObject(System.Reflection.ConstructorInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewRecord(System.Type, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewTuple(Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr NewUnionCase(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertyGet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.PropertyInfo, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertyGet(System.Reflection.PropertyInfo, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(Microsoft.FSharp.Quotations.FSharpExpr, System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr PropertySet(System.Reflection.PropertyInfo, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Quote(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr QuoteRaw(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr QuoteTyped(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Sequential(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Substitute(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TryFinally(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TryWith(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TupleGet(Microsoft.FSharp.Quotations.FSharpExpr, Int32) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr TypeTest(Microsoft.FSharp.Quotations.FSharpExpr, System.Type) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr UnionCaseTest(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Reflection.UnionCaseInfo) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value(System.Object, System.Type) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ValueWithName(System.Object, System.Type, System.String) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr ValueWithName[T](T, System.String) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Value[T](T) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr Var(Microsoft.FSharp.Quotations.FSharpVar) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr VarSet(Microsoft.FSharp.Quotations.FSharpVar, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr WhileLoop(Microsoft.FSharp.Quotations.FSharpExpr, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr WithValue(System.Object, System.Type, Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] Cast[T](Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] GlobalVar[T](System.String) +Microsoft.FSharp.Quotations.FSharpExpr: Microsoft.FSharp.Quotations.FSharpExpr`1[T] WithValue[T](T, Microsoft.FSharp.Quotations.FSharpExpr`1[T]) +Microsoft.FSharp.Quotations.FSharpExpr: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() +Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString() +Microsoft.FSharp.Quotations.FSharpExpr: System.String ToString(Boolean) +Microsoft.FSharp.Quotations.FSharpExpr: System.Type GetType() +Microsoft.FSharp.Quotations.FSharpExpr: System.Type Type +Microsoft.FSharp.Quotations.FSharpExpr: System.Type get_Type() +Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[]) +Microsoft.FSharp.Quotations.FSharpExpr: Void RegisterReflectedDefinitions(System.Reflection.Assembly, System.String, Byte[], System.Type[]) +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Int32 GetHashCode() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] CustomAttributes +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr] get_CustomAttributes() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpExpr Raw +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpExpr Substitute(Microsoft.FSharp.Core.FSharpFunc`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr]]) +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: Microsoft.FSharp.Quotations.FSharpExpr get_Raw() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Collections.Generic.IEnumerable`1[Microsoft.FSharp.Quotations.FSharpVar] GetFreeVars() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.String ToString(Boolean) +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type GetType() +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type Type +Microsoft.FSharp.Quotations.FSharpExpr`1[T]: System.Type get_Type() +Microsoft.FSharp.Quotations.FSharpVar: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.FSharpVar: Boolean IsMutable +Microsoft.FSharp.Quotations.FSharpVar: Boolean get_IsMutable() +Microsoft.FSharp.Quotations.FSharpVar: Int32 GetHashCode() +Microsoft.FSharp.Quotations.FSharpVar: Microsoft.FSharp.Quotations.FSharpVar Global(System.String, System.Type) +Microsoft.FSharp.Quotations.FSharpVar: System.String Name +Microsoft.FSharp.Quotations.FSharpVar: System.String ToString() +Microsoft.FSharp.Quotations.FSharpVar: System.String get_Name() +Microsoft.FSharp.Quotations.FSharpVar: System.Type GetType() +Microsoft.FSharp.Quotations.FSharpVar: System.Type Type +Microsoft.FSharp.Quotations.FSharpVar: System.Type get_Type() +Microsoft.FSharp.Quotations.FSharpVar: Void .ctor(System.String, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Quotations.PatternsModule: Boolean Equals(System.Object) +Microsoft.FSharp.Quotations.PatternsModule: Int32 GetHashCode() +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]] NewTuplePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] AddressOfPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuotePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuoteRawPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr] QuoteTypedPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpVar] VarPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Collections.FSharpList`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]],Microsoft.FSharp.Quotations.FSharpExpr]] LetRecursivePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.FieldInfo]] FieldGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] AddressSetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ApplicationPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] SequentialPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] TryFinallyPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] WhileLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Reflection.UnionCaseInfo]] UnionCaseTestPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,System.Int32]] TupleGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,System.Type]] CoercePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpExpr,System.Type]] TypeTestPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] LambdaPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] VarSetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewUnionCasePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Object,System.Type]] ValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewObjectPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewArrayPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] NewRecordPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.FieldInfo,Microsoft.FSharp.Quotations.FSharpExpr]] FieldSetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.MethodInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] CallPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr]]] PropertyGetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] IfThenElsePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] LetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.Type,Microsoft.FSharp.Quotations.FSharpExpr]] WithValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Object,System.Type,System.String]] ValueWithNamePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`3[System.Type,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpVar],Microsoft.FSharp.Quotations.FSharpExpr]] NewDelegatePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Core.FSharpOption`1[Microsoft.FSharp.Quotations.FSharpExpr],System.Reflection.PropertyInfo,Microsoft.FSharp.Collections.FSharpList`1[Microsoft.FSharp.Quotations.FSharpExpr],Microsoft.FSharp.Quotations.FSharpExpr]] PropertySetPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`4[Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpExpr]] ForIntegerRangeLoopPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`5[Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr,Microsoft.FSharp.Quotations.FSharpVar,Microsoft.FSharp.Quotations.FSharpExpr]] TryWithPattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: Microsoft.FSharp.Core.FSharpOption`1[System.Type] DefaultValuePattern(Microsoft.FSharp.Quotations.FSharpExpr) +Microsoft.FSharp.Quotations.PatternsModule: System.String ToString() +Microsoft.FSharp.Quotations.PatternsModule: System.Type GetType() +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean Equals(System.Object) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsExceptionRepresentation.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsRecord.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Boolean FSharpType.IsUnion.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Int32 GetHashCode() +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Int32] FSharpValue.PreComputeUnionTagReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeRecordReader.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] FSharpValue.PreComputeUnionReader.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] FSharpValue.PreComputeRecordConstructor.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] FSharpValue.PreComputeUnionConstructor.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: Microsoft.FSharp.Reflection.UnionCaseInfo[] FSharpType.GetUnionCases.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object FSharpValue.MakeRecord.Static(System.Type, System.Object[], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object FSharpValue.MakeUnion.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, System.Object[], Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object[] FSharpValue.GetExceptionFields.Static(System.Object, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Object[] FSharpValue.GetRecordFields.Static(System.Object, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.ConstructorInfo FSharpValue.PreComputeRecordConstructorInfo.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MemberInfo FSharpValue.PreComputeUnionTagMemberInfo.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.MethodInfo FSharpValue.PreComputeUnionConstructorInfo.Static(Microsoft.FSharp.Reflection.UnionCaseInfo, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetExceptionFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Reflection.PropertyInfo[] FSharpType.GetRecordFields.Static(System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.String ToString() +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Tuple`2[Microsoft.FSharp.Reflection.UnionCaseInfo,System.Object[]] FSharpValue.GetUnionFields.Static(System.Object, System.Type, Microsoft.FSharp.Core.FSharpOption`1[System.Boolean]) +Microsoft.FSharp.Reflection.FSharpReflectionExtensions: System.Type GetType() +Microsoft.FSharp.Reflection.FSharpType: Boolean Equals(System.Object) +Microsoft.FSharp.Reflection.FSharpType: Boolean IsFunction(System.Type) +Microsoft.FSharp.Reflection.FSharpType: Boolean IsModule(System.Type) +Microsoft.FSharp.Reflection.FSharpType: Boolean IsTuple(System.Type) +Microsoft.FSharp.Reflection.FSharpType: Int32 GetHashCode() +Microsoft.FSharp.Reflection.FSharpType: System.String ToString() +Microsoft.FSharp.Reflection.FSharpType: System.Tuple`2[System.Type,System.Type] GetFunctionElements(System.Type) +Microsoft.FSharp.Reflection.FSharpType: System.Type GetType() +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeFunctionType(System.Type, System.Type) +Microsoft.FSharp.Reflection.FSharpType: System.Type MakeTupleType(System.Type[]) +Microsoft.FSharp.Reflection.FSharpType: System.Type[] GetTupleElements(System.Type) +Microsoft.FSharp.Reflection.FSharpValue: Boolean Equals(System.Object) +Microsoft.FSharp.Reflection.FSharpValue: Int32 GetHashCode() +Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object[]] PreComputeTupleReader(System.Type) +Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object] PreComputeRecordFieldReader(System.Reflection.PropertyInfo) +Microsoft.FSharp.Reflection.FSharpValue: Microsoft.FSharp.Core.FSharpFunc`2[System.Object[],System.Object] PreComputeTupleConstructor(System.Type) +Microsoft.FSharp.Reflection.FSharpValue: System.Object GetRecordField(System.Object, System.Reflection.PropertyInfo) +Microsoft.FSharp.Reflection.FSharpValue: System.Object GetTupleField(System.Object, Int32) +Microsoft.FSharp.Reflection.FSharpValue: System.Object MakeFunction(System.Type, Microsoft.FSharp.Core.FSharpFunc`2[System.Object,System.Object]) +Microsoft.FSharp.Reflection.FSharpValue: System.Object MakeTuple(System.Object[], System.Type) +Microsoft.FSharp.Reflection.FSharpValue: System.Object[] GetTupleFields(System.Object) +Microsoft.FSharp.Reflection.FSharpValue: System.String ToString() +Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.ConstructorInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Type]] PreComputeTupleConstructorInfo(System.Type) +Microsoft.FSharp.Reflection.FSharpValue: System.Tuple`2[System.Reflection.PropertyInfo,Microsoft.FSharp.Core.FSharpOption`1[System.Tuple`2[System.Type,System.Int32]]] PreComputeTuplePropertyInfo(System.Type, Int32) +Microsoft.FSharp.Reflection.FSharpValue: System.Type GetType() +Microsoft.FSharp.Reflection.UnionCaseInfo: Boolean Equals(System.Object) +Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 GetHashCode() +Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 Tag +Microsoft.FSharp.Reflection.UnionCaseInfo: Int32 get_Tag() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Object[] GetCustomAttributes() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Object[] GetCustomAttributes(System.Type) +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Reflection.PropertyInfo[] GetFields() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.String Name +Microsoft.FSharp.Reflection.UnionCaseInfo: System.String ToString() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.String get_Name() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type DeclaringType +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type GetType() +Microsoft.FSharp.Reflection.UnionCaseInfo: System.Type get_DeclaringType() +System.Numerics.BigInteger: Boolean Equals(System.Object) +System.Numerics.BigInteger: Boolean IsOne +System.Numerics.BigInteger: Boolean IsZero +System.Numerics.BigInteger: Boolean get_IsOne() +System.Numerics.BigInteger: Boolean get_IsZero() +System.Numerics.BigInteger: Boolean op_Equality(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: Boolean op_GreaterThan(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: Boolean op_GreaterThanOrEqual(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: Boolean op_Inequality(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: Boolean op_LessThan(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: Boolean op_LessThanOrEqual(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: Double op_Explicit(System.Numerics.BigInteger) +System.Numerics.BigInteger: Int32 GetHashCode() +System.Numerics.BigInteger: Int32 Sign +System.Numerics.BigInteger: Int32 get_Sign() +System.Numerics.BigInteger: Int32 op_Explicit(System.Numerics.BigInteger) +System.Numerics.BigInteger: Int64 op_Explicit(System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger Abs(System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger DivRem(System.Numerics.BigInteger, System.Numerics.BigInteger, System.Numerics.BigInteger ByRef) +System.Numerics.BigInteger: System.Numerics.BigInteger GreatestCommonDivisor(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger One +System.Numerics.BigInteger: System.Numerics.BigInteger Parse(System.String) +System.Numerics.BigInteger: System.Numerics.BigInteger Pow(System.Numerics.BigInteger, Int32) +System.Numerics.BigInteger: System.Numerics.BigInteger Zero +System.Numerics.BigInteger: System.Numerics.BigInteger get_One() +System.Numerics.BigInteger: System.Numerics.BigInteger get_Zero() +System.Numerics.BigInteger: System.Numerics.BigInteger op_Addition(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger op_Division(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger op_Modulus(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger op_Multiply(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger op_Subtraction(System.Numerics.BigInteger, System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger op_UnaryNegation(System.Numerics.BigInteger) +System.Numerics.BigInteger: System.Numerics.BigInteger op_UnaryPlus(System.Numerics.BigInteger) +System.Numerics.BigInteger: System.String ToString() +System.Numerics.BigInteger: System.Type GetType() +System.Numerics.BigInteger: Void .ctor(Int32) +System.Numerics.BigInteger: Void .ctor(Int64) +" + SurfaceArea.verify expected "portable78" (System.IO.Path.Combine(__SOURCE_DIRECTORY__,__SOURCE_FILE__)) diff --git a/src/fsharp/FSharp.Core/FSCore.resx b/src/fsharp/FSharp.Core/FSCore.resx index 3ca7f692893..433a56a55a4 100644 --- a/src/fsharp/FSharp.Core/FSCore.resx +++ b/src/fsharp/FSharp.Core/FSCore.resx @@ -180,6 +180,9 @@ The input must be non-negative. + + The input must be positive. + The input sequence was empty. diff --git a/src/fsharp/FSharp.Core/FSharp.Core.fsproj b/src/fsharp/FSharp.Core/FSharp.Core.fsproj index 97b8140a04e..9b8556b2751 100644 --- a/src/fsharp/FSharp.Core/FSharp.Core.fsproj +++ b/src/fsharp/FSharp.Core/FSharp.Core.fsproj @@ -3,10 +3,10 @@ ..\.. + Debug - Debug AnyCPU {DED3BBD7-53F4-428A-8C9F-27968E768605} Library @@ -24,7 +24,6 @@ $(OtherFlags) --targetprofile:netcore - false @@ -206,24 +205,23 @@ '$(TargetFramework)' == 'portable47' OR '$(TargetFramework)' == 'XNA\5.0' OR '$(TargetFramework)' == 'sl3-wp' "/> - + + - - $(PrepareForRunDependsOn);CopyToBuiltBin - - - - - - - - + + + + + + + + diff --git a/src/fsharp/FSharp.Core/Linq.fs b/src/fsharp/FSharp.Core/Linq.fs index 65e8b294033..18b2eb6a04b 100644 --- a/src/fsharp/FSharp.Core/Linq.fs +++ b/src/fsharp/FSharp.Core/Linq.fs @@ -77,53 +77,66 @@ module NullableOperators = module Nullable = open System + + [] + let inline uint8 (x:Nullable<_>) = if x.HasValue then Nullable(Operators.byte x.Value) else Nullable() + + [] + let inline int8 (x:Nullable<_>) = if x.HasValue then Nullable(Operators.sbyte x.Value) else Nullable() + [] - let inline byte (x:Nullable< ^T >) = if x.HasValue then Nullable(byte x.Value) else Nullable() + let inline byte (x:Nullable<_>) = if x.HasValue then Nullable(Operators.byte x.Value) else Nullable() [] - let inline sbyte (x:Nullable< ^T >) = if x.HasValue then Nullable(sbyte x.Value) else Nullable() + let inline sbyte (x:Nullable<_>) = if x.HasValue then Nullable(Operators.sbyte x.Value) else Nullable() [] - let inline int16 (x:Nullable< ^T >) = if x.HasValue then Nullable(int16 x.Value) else Nullable() + let inline int16 (x:Nullable<_>) = if x.HasValue then Nullable(Operators.int16 x.Value) else Nullable() [] - let inline uint16 (x:Nullable< ^T >) = if x.HasValue then Nullable(uint16 x.Value) else Nullable() + let inline uint16 (x:Nullable<_>) = if x.HasValue then Nullable(Operators.uint16 x.Value) else Nullable() [] - let inline int (x:Nullable< ^T >) = if x.HasValue then Nullable(int x.Value) else Nullable() + let inline int (x:Nullable<_>) = if x.HasValue then Nullable(Operators.int x.Value) else Nullable() [] - let inline enum (x:Nullable< int32 >) = if x.HasValue then Nullable(enum x.Value) else Nullable() + let inline enum (x:Nullable< int32 >) = if x.HasValue then Nullable(Operators.enum x.Value) else Nullable() [] - let inline int32 (x:Nullable<_>) = if x.HasValue then Nullable(int32 x.Value) else Nullable() + let inline int32 (x:Nullable<_>) = if x.HasValue then Nullable(Operators.int32 x.Value) else Nullable() [] - let inline uint32 (x:Nullable<_>) = if x.HasValue then Nullable(uint32 x.Value) else Nullable() + let inline uint32 (x:Nullable<_>) = if x.HasValue then Nullable(Operators.uint32 x.Value) else Nullable() [] - let inline int64 (x:Nullable<_>) = if x.HasValue then Nullable(int64 x.Value) else Nullable() + let inline int64 (x:Nullable<_>) = if x.HasValue then Nullable(Operators.int64 x.Value) else Nullable() [] - let inline uint64 (x:Nullable<_>) = if x.HasValue then Nullable(uint64 x.Value) else Nullable() + let inline uint64 (x:Nullable<_>) = if x.HasValue then Nullable(Operators.uint64 x.Value) else Nullable() + + [] + let inline float32 (x:Nullable<_>) = if x.HasValue then Nullable(Operators.float32 x.Value) else Nullable() + + [] + let inline float (x:Nullable<_>) = if x.HasValue then Nullable(Operators.float x.Value) else Nullable() [] - let inline float32 (x:Nullable<_>) = if x.HasValue then Nullable(float32 x.Value) else Nullable() + let inline single (x:Nullable<_>) = if x.HasValue then Nullable(Operators.float32 x.Value) else Nullable() [] - let inline float (x:Nullable<_>) = if x.HasValue then Nullable(float x.Value) else Nullable() + let inline double (x:Nullable<_>) = if x.HasValue then Nullable(Operators.float x.Value) else Nullable() [] - let inline nativeint (x:Nullable<_>) = if x.HasValue then Nullable(nativeint x.Value) else Nullable() + let inline nativeint (x:Nullable<_>) = if x.HasValue then Nullable(Operators.nativeint x.Value) else Nullable() [] - let inline unativeint (x:Nullable<_>) = if x.HasValue then Nullable(unativeint x.Value) else Nullable() + let inline unativeint (x:Nullable<_>) = if x.HasValue then Nullable(Operators.unativeint x.Value) else Nullable() [] - let inline decimal (x:Nullable<_>) = if x.HasValue then Nullable(decimal x.Value) else Nullable() + let inline decimal (x:Nullable<_>) = if x.HasValue then Nullable(Operators.decimal x.Value) else Nullable() [] - let inline char (x:Nullable<_>) = if x.HasValue then Nullable(char x.Value) else Nullable() + let inline char (x:Nullable<_>) = if x.HasValue then Nullable(Operators.char x.Value) else Nullable() namespace Microsoft.FSharp.Linq.RuntimeHelpers @@ -194,9 +207,11 @@ module LeafExpressionConverter = |> System.Reflection.MethodInfo.GetMethodFromHandle :?> MethodInfo - let SubstHelper<'T> (q:Expr, x:Var[], y:obj[]) : Expr<'T> = + let SubstHelperRaw (q:Expr, x:Var[], y:obj[]) : Expr = let d = Map.ofArray (Array.zip x y) - q.Substitute(fun v -> v |> d.TryFind |> Option.map (fun x -> Expr.Value(x, v.Type))) |> Expr.Cast + q.Substitute(fun v -> v |> d.TryFind |> Option.map (fun x -> Expr.Value(x, v.Type))) + + let SubstHelper<'T> (q:Expr, x:Var[], y:obj[]) : Expr<'T> = SubstHelperRaw(q,x,y) |> Expr.Cast let showAll = #if FX_RESHAPED_REFLECTION @@ -207,8 +222,7 @@ module LeafExpressionConverter = let NullableConstructor = typedefof>.GetConstructors().[0] - let (|SpecificCallToMethod|_|) (mhandle: System.RuntimeMethodHandle) = - let minfo = (System.Reflection.MethodInfo.GetMethodFromHandle mhandle) :?> MethodInfo + let SpecificCallToMethodInfo (minfo: System.Reflection.MethodInfo) = let isg1 = minfo.IsGenericMethod let gmd = if isg1 then minfo.GetGenericMethodDefinition() else null (fun tm -> @@ -225,6 +239,11 @@ module LeafExpressionConverter = Some(obj,(minfo2.GetGenericArguments() |> Array.toList),args) | _ -> None) + + let (|SpecificCallToMethod|_|) (mhandle: System.RuntimeMethodHandle) = + let minfo = (System.Reflection.MethodInfo.GetMethodFromHandle mhandle) :?> MethodInfo + SpecificCallToMethodInfo minfo + let (|GenericEqualityQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x,y) -> LanguagePrimitives.GenericEquality x y)) let (|EqualsQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x,y) -> x = y)) let (|GreaterQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x,y) -> x > y)) @@ -233,6 +252,13 @@ module LeafExpressionConverter = let (|LessEqQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x,y) -> x <= y)) let (|NotEqQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x,y) -> x <> y)) + let (|StaticEqualsQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x:int,y:int) -> NonStructuralComparison.(=) x y)) + let (|StaticGreaterQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x:int,y:int) -> NonStructuralComparison.(>) x y)) + let (|StaticGreaterEqQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x:int,y:int) -> NonStructuralComparison.(>=) x y)) + let (|StaticLessQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x:int,y:int) -> NonStructuralComparison.(<) x y)) + let (|StaticLessEqQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x:int,y:int) -> NonStructuralComparison.(<=) x y)) + let (|StaticNotEqQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x:int,y:int) -> NonStructuralComparison.(<>) x y)) + let (|NullableEqualsQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x,y) -> NullableOperators.( ?= ) x y)) let (|NullableNotEqQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x,y) -> NullableOperators.( ?<> ) x y)) let (|NullableGreaterQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x,y) -> NullableOperators.( ?> ) x y)) @@ -295,30 +321,41 @@ module LeafExpressionConverter = let (|CheckedMinusQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x,y) -> Checked.( - ) x y)) let (|CheckedMultiplyQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun (x,y) -> Checked.( * ) x y)) - let (|ConvCharQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> char x)) - let (|ConvDecimalQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> decimal x)) - let (|ConvFloatQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> float x)) - let (|ConvFloat32Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> float32 x)) - let (|ConvSByteQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> sbyte x)) - let (|ConvInt16Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> int16 x)) - let (|ConvInt32Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> int32 x)) - let (|ConvIntQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> int x)) - let (|ConvInt64Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> int64 x)) - let (|ConvByteQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> byte x)) - let (|ConvUInt16Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> uint16 x)) - let (|ConvUInt32Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> uint32 x)) - let (|ConvUInt64Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> uint64 x)) + let (|ConvCharQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.char x)) + let (|ConvDecimalQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.decimal x)) + let (|ConvFloatQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.float x)) + let (|ConvFloat32Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.float32 x)) + let (|ConvSByteQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.sbyte x)) + + + let (|ConvInt16Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.int16 x)) + let (|ConvInt32Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.int32 x)) + let (|ConvIntQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.int x)) + let (|ConvInt64Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.int64 x)) + let (|ConvByteQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.byte x)) + let (|ConvUInt16Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.uint16 x)) + let (|ConvUInt32Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.uint32 x)) + let (|ConvUInt64Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Operators.uint64 x)) + + let (|ConvInt8Q|_|) = SpecificCallToMethodInfo (typeof.Assembly.GetType("Microsoft.FSharp.Core.ExtraTopLevelOperators").GetMethod("ToSByte")) + let (|ConvUInt8Q|_|) = SpecificCallToMethodInfo (typeof.Assembly.GetType("Microsoft.FSharp.Core.ExtraTopLevelOperators").GetMethod("ToByte")) + let (|ConvDoubleQ|_|) = SpecificCallToMethodInfo (typeof.Assembly.GetType("Microsoft.FSharp.Core.ExtraTopLevelOperators").GetMethod("ToDouble")) + let (|ConvSingleQ|_|) = SpecificCallToMethodInfo (typeof.Assembly.GetType("Microsoft.FSharp.Core.ExtraTopLevelOperators").GetMethod("ToSingle")) let (|ConvNullableCharQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.char x)) let (|ConvNullableDecimalQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.decimal x)) let (|ConvNullableFloatQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.float x)) + let (|ConvNullableDoubleQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.double x)) let (|ConvNullableFloat32Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.float32 x)) + let (|ConvNullableSingleQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.single x)) let (|ConvNullableSByteQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.sbyte x)) + let (|ConvNullableInt8Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.int8 x)) let (|ConvNullableInt16Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.int16 x)) let (|ConvNullableInt32Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.int32 x)) let (|ConvNullableIntQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.int x)) let (|ConvNullableInt64Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.int64 x)) let (|ConvNullableByteQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.byte x)) + let (|ConvNullableUInt8Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.uint8 x)) let (|ConvNullableUInt16Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.uint16 x)) let (|ConvNullableUInt32Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.uint32 x)) let (|ConvNullableUInt64Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Nullable.uint64 x)) @@ -331,6 +368,8 @@ module LeafExpressionConverter = let (|TypeTestGeneric|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> LanguagePrimitives.IntrinsicFunctions.TypeTestGeneric x)) let (|CheckedConvCharQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Checked.char x)) let (|CheckedConvSByteQ|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Checked.sbyte x)) + let (|CheckedConvInt8Q|_|) = SpecificCallToMethodInfo (typeof.Assembly.GetType("Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked").GetMethod("ToSByte")) + let (|CheckedConvUInt8Q|_|) = SpecificCallToMethodInfo (typeof.Assembly.GetType("Microsoft.FSharp.Core.ExtraTopLevelOperators+Checked").GetMethod("ToByte")) let (|CheckedConvInt16Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Checked.int16 x)) let (|CheckedConvInt32Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Checked.int32 x)) let (|CheckedConvInt64Q|_|) = (|SpecificCallToMethod|_|) (methodhandleof (fun x -> Checked.int64 x)) @@ -348,6 +387,12 @@ module LeafExpressionConverter = methodhandleof (fun (x:Expr,y:Var[],z:obj[]) -> SubstHelper (x,y,z)) |> System.Reflection.MethodInfo.GetMethodFromHandle :?> MethodInfo + + let substHelperRawMeth = + methodhandleof (fun (x:Expr,y:Var[],z:obj[]) -> SubstHelperRaw (x,y,z)) + |> System.Reflection.MethodInfo.GetMethodFromHandle + :?> MethodInfo + let (-->) ty1 ty2 = Reflection.FSharpType.MakeFunctionType(ty1, ty2) /// Extract member initialization expression stored in 'MemberInitializationHelper' (by QueryExtensions.fs) @@ -487,6 +532,13 @@ module LeafExpressionConverter = | LessEqQ (_, _,[x1;x2]) -> transBinOp env false x1 x2 false Expression.LessThanOrEqual | NotQ (_, _, [x1]) -> Expression.Not(ConvExprToLinqInContext env x1) |> asExpr + | StaticEqualsQ (_, _,[x1;x2]) -> transBinOp env false x1 x2 false Expression.Equal + | StaticNotEqQ (_, _,[x1;x2]) -> transBinOp env false x1 x2 false Expression.NotEqual + | StaticGreaterQ (_, _,[x1;x2]) -> transBinOp env false x1 x2 false Expression.GreaterThan + | StaticGreaterEqQ (_, _,[x1;x2]) -> transBinOp env false x1 x2 false Expression.GreaterThanOrEqual + | StaticLessQ (_, _,[x1;x2]) -> transBinOp env false x1 x2 false Expression.LessThan + | StaticLessEqQ (_, _,[x1;x2]) -> transBinOp env false x1 x2 false Expression.LessThanOrEqual + | NullableEqualsQ (_, _,[x1;x2]) -> transBinOp env false x1 x2 true Expression.Equal | NullableNotEqQ (_, _,[x1;x2]) -> transBinOp env false x1 x2 true Expression.NotEqual | NullableGreaterQ (_, _,[x1;x2]) -> transBinOp env false x1 x2 true Expression.GreaterThan @@ -555,13 +607,17 @@ module LeafExpressionConverter = | ConvNullableCharQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr | ConvNullableDecimalQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr | ConvNullableFloatQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr + | ConvNullableDoubleQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr | ConvNullableFloat32Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr + | ConvNullableSingleQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr | ConvNullableSByteQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr + | ConvNullableInt8Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr | ConvNullableInt16Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr | ConvNullableInt32Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr | ConvNullableIntQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr | ConvNullableInt64Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr | ConvNullableByteQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr + | ConvNullableUInt8Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr | ConvNullableUInt16Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr | ConvNullableUInt32Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr | ConvNullableUInt64Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof>) |> asExpr @@ -572,23 +628,29 @@ module LeafExpressionConverter = | ConvCharQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr | ConvDecimalQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr | ConvFloatQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr + | ConvDoubleQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr | ConvFloat32Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr + | ConvSingleQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr | ConvSByteQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr + | ConvInt8Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr | ConvInt16Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr | ConvInt32Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr | ConvIntQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr | ConvInt64Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr | ConvByteQ (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr + | ConvUInt8Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr | ConvUInt16Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr | ConvUInt32Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr | ConvUInt64Q (_, _, [x1]) -> Expression.Convert(ConvExprToLinqInContext env x1, typeof) |> asExpr - | CheckedConvCharQ (_, _, [x1]) -> Expression.ConvertChecked(ConvExprToLinqInContext env x1, typeof) |> asExpr + | CheckedConvCharQ (_, _, [x1]) -> Expression.ConvertChecked(ConvExprToLinqInContext env x1, typeof) |> asExpr | CheckedConvSByteQ (_, _, [x1]) -> Expression.ConvertChecked(ConvExprToLinqInContext env x1, typeof) |> asExpr + | CheckedConvInt8Q (_, _, [x1]) -> Expression.ConvertChecked(ConvExprToLinqInContext env x1, typeof) |> asExpr | CheckedConvInt16Q (_, _, [x1]) -> Expression.ConvertChecked(ConvExprToLinqInContext env x1, typeof) |> asExpr | CheckedConvInt32Q (_, _, [x1]) -> Expression.ConvertChecked(ConvExprToLinqInContext env x1, typeof) |> asExpr | CheckedConvInt64Q (_, _, [x1]) -> Expression.ConvertChecked(ConvExprToLinqInContext env x1, typeof) |> asExpr - | CheckedConvByteQ (_, _, [x1]) -> Expression.ConvertChecked(ConvExprToLinqInContext env x1, typeof) |> asExpr + | CheckedConvByteQ (_, _, [x1]) -> Expression.ConvertChecked(ConvExprToLinqInContext env x1, typeof) |> asExpr + | CheckedConvUInt8Q (_, _, [x1]) -> Expression.ConvertChecked(ConvExprToLinqInContext env x1, typeof) |> asExpr | CheckedConvUInt16Q (_, _, [x1]) -> Expression.ConvertChecked(ConvExprToLinqInContext env x1, typeof) |> asExpr | CheckedConvUInt32Q (_, _, [x1]) -> Expression.ConvertChecked(ConvExprToLinqInContext env x1, typeof) |> asExpr | CheckedConvUInt64Q (_, _, [x1]) -> Expression.ConvertChecked(ConvExprToLinqInContext env x1, typeof) |> asExpr @@ -708,7 +770,7 @@ module LeafExpressionConverter = | Patterns.IfThenElse(g, t, e) -> Expression.Condition(ConvExprToLinqInContext env g, ConvExprToLinqInContext env t, ConvExprToLinqInContext env e) |> asExpr - | Patterns.Quote x -> + | Patterns.QuoteTyped x -> let fvs = x.GetFreeVars() Expression.Call(substHelperMeth.MakeGenericMethod [| x.Type |], @@ -717,6 +779,15 @@ module LeafExpressionConverter = (Expression.NewArrayInit(typeof, [| for fv in fvs -> Expression.Convert(env.varEnv.[fv], typeof) |> asExpr |]) |> asExpr) |]) |> asExpr + | Patterns.QuoteRaw x -> + let fvs = x.GetFreeVars() + + Expression.Call(substHelperRawMeth, + [| (Expression.Constant x) |> asExpr; + (Expression.NewArrayInit(typeof, [| for fv in fvs -> Expression.Constant fv |> asExpr |]) |> asExpr); + (Expression.NewArrayInit(typeof, [| for fv in fvs -> Expression.Convert(env.varEnv.[fv], typeof) |> asExpr |]) |> asExpr) |]) + |> asExpr + | Patterns.Let (v, e, b) -> let vP = ConvVarToLinq v let envinner = { env with varEnv = Map.add v (vP |> asExpr) env.varEnv } diff --git a/src/fsharp/FSharp.Core/Linq.fsi b/src/fsharp/FSharp.Core/Linq.fsi index cb15acdbd95..a8032e830f8 100644 --- a/src/fsharp/FSharp.Core/Linq.fsi +++ b/src/fsharp/FSharp.Core/Linq.fsi @@ -101,6 +101,14 @@ namespace Microsoft.FSharp.Linq [] val inline byte : value:Nullable< ^T > -> Nullable when ^T : (static member op_Explicit : ^T -> byte) and default ^T : int + /// Converts the argument to byte. This is a direct conversion for all + /// primitive numeric types. The operation requires an appropriate + /// static conversion method on the input type. + /// The input value. + /// The converted byte + [] + val inline uint8 : value:Nullable< ^T > -> Nullable when ^T : (static member op_Explicit : ^T -> uint8) and default ^T : int + /// Converts the argument to signed byte. This is a direct conversion for all /// primitive numeric types. The operation requires an appropriate /// static conversion method on the input type. @@ -109,6 +117,15 @@ namespace Microsoft.FSharp.Linq [] val inline sbyte : value:Nullable< ^T > -> Nullable when ^T : (static member op_Explicit : ^T -> sbyte) and default ^T : int + + /// Converts the argument to signed byte. This is a direct conversion for all + /// primitive numeric types. The operation requires an appropriate + /// static conversion method on the input type. + /// The input value. + /// The converted sbyte + [] + val inline int8 : value:Nullable< ^T > -> Nullable when ^T : (static member op_Explicit : ^T -> int8) and default ^T : int + /// Converts the argument to signed 16-bit integer. This is a direct conversion for all /// primitive numeric types. The operation requires an appropriate /// static conversion method on the input type. @@ -176,7 +193,7 @@ namespace Microsoft.FSharp.Linq /// static conversion method on the input type. /// The input value. /// The converted float32 - [] + [] val inline float32 : value:Nullable< ^T > -> Nullable when ^T : (static member op_Explicit : ^T -> float32) and default ^T : int /// Converts the argument to 64-bit float. This is a direct conversion for all @@ -184,9 +201,25 @@ namespace Microsoft.FSharp.Linq /// static conversion method on the input type. /// The input value. /// The converted float - [] + [] val inline float : value:Nullable< ^T > -> Nullable when ^T : (static member op_Explicit : ^T -> float) and default ^T : int + /// Converts the argument to 32-bit float. This is a direct conversion for all + /// primitive numeric types. The operation requires an appropriate + /// static conversion method on the input type. + /// The input value. + /// The converted float32 + [] + val inline single : value:Nullable< ^T > -> Nullable when ^T : (static member op_Explicit : ^T -> single) and default ^T : int + + /// Converts the argument to 64-bit float. This is a direct conversion for all + /// primitive numeric types. The operation requires an appropriate + /// static conversion method on the input type. + /// The input value. + /// The converted float + [] + val inline double : value:Nullable< ^T > -> Nullable when ^T : (static member op_Explicit : ^T -> double) and default ^T : int + /// Converts the argument to signed native integer. This is a direct conversion for all /// primitive numeric types. Otherwise the operation requires an appropriate /// static conversion method on the input type. @@ -270,5 +303,8 @@ namespace Microsoft.FSharp.Linq.RuntimeHelpers /// A runtime helper used to evaluate nested quotation literals. val SubstHelper : Expr * Var[] * obj[] -> Expr<'T> + /// A runtime helper used to evaluate nested quotation literals. + val SubstHelperRaw : Expr * Var[] * obj[] -> Expr + val internal (|SpecificCallToMethod|_|) : System.RuntimeMethodHandle -> (Expr -> (Expr option * Type list * Expr list) option) #endif \ No newline at end of file diff --git a/src/fsharp/FSharp.Core/Query.fs b/src/fsharp/FSharp.Core/Query.fs index 7d7e061080b..d1752d6ef18 100644 --- a/src/fsharp/FSharp.Core/Query.fs +++ b/src/fsharp/FSharp.Core/Query.fs @@ -994,9 +994,7 @@ module Query = | _ -> None) let (|CallQueryBuilderRunQueryable|_|) : Quotations.Expr -> _ = (|SpecificCallToMethod|_|) (methodhandleof (fun (b :QueryBuilder, v) -> b.Run(v))) - // (typeof.Assembly.GetType("Microsoft.FSharp.Linq.QueryRunExtensions.LowPriority").GetMethod("RunQueryAsValue").MethodHandle) let (|CallQueryBuilderRunValue|_|) : Quotations.Expr -> _ = (|SpecificCallToMethod|_|) (methodhandleof (fun (b : QueryBuilder, v : Expr<'a>) -> b.Run(v)) : 'a) // type annotations here help overload resolution - // (typeof.Assembly.GetType("Microsoft.FSharp.Linq.QueryRunExtensions.HighPriority").GetMethod("RunQueryAsEnumerable").MethodHandle) let (|CallQueryBuilderRunEnumerable|_|) : Quotations.Expr -> _ = (|SpecificCallToMethod|_|) (methodhandleof (fun (b : QueryBuilder, v : Expr> ) -> b.Run(v))) // type annotations here help overload resolution let (|CallQueryBuilderFor|_|) : Quotations.Expr -> _ = (|SpecificCallToMethod|_|) (methodhandleof (fun (b:QueryBuilder,source:QuerySource,body) -> b.For(source,body))) let (|CallQueryBuilderYield|_|) : Quotations.Expr -> _ = (|SpecificCall1|_|) (methodhandleof (fun (b:QueryBuilder,value) -> b.Yield value)) @@ -1130,15 +1128,15 @@ module Query = let (|AnyNestedQuery|_|) e = match e with - | CallQueryBuilderRunValue (None, _, [_; Quote e ]) - | CallQueryBuilderRunEnumerable (None, _, [_; Quote e ]) - | CallQueryBuilderRunQueryable (Some _, _, [ Quote e ]) -> Some e + | CallQueryBuilderRunValue (None, _, [_; QuoteTyped e ]) + | CallQueryBuilderRunEnumerable (None, _, [_; QuoteTyped e ]) + | CallQueryBuilderRunQueryable (Some _, _, [ QuoteTyped e ]) -> Some e | _ -> None let (|EnumerableNestedQuery|_|) e = match e with - | CallQueryBuilderRunEnumerable (None, _, [_; Quote e ]) - | CallQueryBuilderRunQueryable (Some _, _, [ Quote e ]) -> Some e + | CallQueryBuilderRunEnumerable (None, _, [_; QuoteTyped e ]) + | CallQueryBuilderRunQueryable (Some _, _, [ QuoteTyped e ]) -> Some e | _ -> None /// Represents the result of TransInner - either a normal expression, or something we're about to turn into diff --git a/src/fsharp/FSharp.Core/SR.fs b/src/fsharp/FSharp.Core/SR.fs index 24f8f7b137f..639604a1f63 100644 --- a/src/fsharp/FSharp.Core/SR.fs +++ b/src/fsharp/FSharp.Core/SR.fs @@ -24,6 +24,7 @@ module internal SR = let pickElementNotFound = "pickElementNotFound" let notEnoughElements = "notEnoughElements" let inputMustBeNonNegative = "inputMustBeNonNegative" + let inputMustBePositive = "inputMustBePositive" let enumerationPastIntMaxValue = "enumerationPastIntMaxValue" let inputSequenceEmpty = "inputSequenceEmpty" let inputSequenceTooLong = "inputSequenceTooLong" diff --git a/src/fsharp/FSharp.Core/array.fs b/src/fsharp/FSharp.Core/array.fs index 9e264e8efd6..77654b56bcb 100644 --- a/src/fsharp/FSharp.Core/array.fs +++ b/src/fsharp/FSharp.Core/array.fs @@ -7,6 +7,7 @@ namespace Microsoft.FSharp.Collections open System.Collections.Generic open System.Diagnostics.CodeAnalysis open Microsoft.FSharp.Core + open Microsoft.FSharp.Core.CompilerServices open Microsoft.FSharp.Collections open Microsoft.FSharp.Core.Operators open Microsoft.FSharp.Core.LanguagePrimitives.IntrinsicOperators @@ -26,8 +27,22 @@ namespace Microsoft.FSharp.Collections | null -> nullArg argName | _ -> () + let inline indexNotFound() = raise (new System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) + [] let length (array: _[]) = array.Length + + [] + let inline last (array : 'T[]) = + checkNonNull "array" array + if array.Length = 0 then invalidArg "array" LanguagePrimitives.ErrorStrings.InputArrayEmptyString + array.[array.Length-1] + + [] + let tryLast (array : 'T[]) = + checkNonNull "array" array + if array.Length = 0 then None + else Some array.[array.Length-1] [] let inline init count f = Microsoft.FSharp.Primitives.Basics.Array.init count f @@ -45,12 +60,24 @@ namespace Microsoft.FSharp.Collections array.[i] <- x array + [] + let tryHead (array : 'T[]) = + checkNonNull "array" array + if array.Length = 0 then None + else Some array.[0] [] let isEmpty (array: 'T[]) = checkNonNull "array" array (array.Length = 0) + [] + let tail (array : 'T[]) = + checkNonNull "array" array + if array.Length = 0 then invalidArg "array" (SR.GetString(SR.notEnoughElements)) + let len = array.Length - 1 + Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 1 len array + [] let empty<'T> = ([| |] : 'T []) @@ -90,6 +117,14 @@ namespace Microsoft.FSharp.Collections match arrays with | :? ('T[][]) as ts -> ts |> concatArrays // avoid a clone, since we only read the array | _ -> arrays |> Seq.toArray |> concatArrays + + [] + let replicate count x = + if count < 0 then invalidArg "count" (SR.GetString(SR.inputMustBeNonNegative)) + let arr = (Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked count : 'T array) + for i = 0 to count - 1 do + arr.[i] <- x + arr [] let collect (f : 'T -> 'U[]) (array : 'T[]) : 'U[]= @@ -99,6 +134,61 @@ namespace Microsoft.FSharp.Collections for i = 0 to len - 1 do result.[i] <- f array.[i] concatArrays result + + [] + let splitAt index (array:'T[]) = + checkNonNull "array" array + if index < 0 then invalidArg "index" (SR.GetString(SR.inputMustBeNonNegative)) + if array.Length < index then raise <| System.InvalidOperationException (SR.GetString(SR.notEnoughElements)) + if index = 0 then + let right = Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 array.Length array + [||],right + elif index = array.Length then + let left = Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 array.Length array + left,[||] else + + let res1 = Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 index array + let res2 = Microsoft.FSharp.Primitives.Basics.Array.subUnchecked index (array.Length-index) array + + res1,res2 + + [] + let take count (array : 'T[]) = + checkNonNull "array" array + if count < 0 then invalidArg "count" (SR.GetString(SR.inputMustBeNonNegative)) + if count = 0 then empty else + if count > array.Length then + raise <| System.InvalidOperationException (SR.GetString(SR.notEnoughElements)) + + Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 count array + + [] + let takeWhile predicate (array: 'T[]) = + checkNonNull "array" array + if array.Length = 0 then empty else + let mutable count = 0 + while count < array.Length && predicate array.[count] do + count <- count + 1 + + Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 count array + + [] + let countBy projection (array:'T[]) = + checkNonNull "array" array + let dict = new Dictionary,int>(Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox<'Key>.Comparer) + + // Build the groupings + for v in array do + let key = Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox (projection v) + let mutable prev = Unchecked.defaultof<_> + if dict.TryGetValue(key, &prev) then dict.[key] <- prev + 1 else dict.[key] <- 1 + + let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked dict.Count + let mutable i = 0 + for group in dict do + res.[i] <- group.Key.Value, group.Value + i <- i + 1 + res [] let append (array1:'T[]) (array2:'T[]) = @@ -109,7 +199,12 @@ namespace Microsoft.FSharp.Collections let res : 'T[] = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked (n1 + n2) Array.Copy(array1, 0, res, 0, n1) Array.Copy(array2, 0, res, n1, n2) - res + res + + [] + let head (array : 'T[]) = + checkNonNull "array" array + if array.Length = 0 then invalidArg "array" LanguagePrimitives.ErrorStrings.InputArrayEmptyString else array.[0] [] let copy (array: 'T[]) = @@ -131,6 +226,14 @@ namespace Microsoft.FSharp.Collections checkNonNull "list" list Microsoft.FSharp.Primitives.Basics.List.toArray list + [] + let indexed (array: 'T[]) = + checkNonNull "array" array + let len = array.Length + let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len + for i = 0 to len - 1 do + res.[i] <- (i,array.[i]) + res [] let inline iter f (array: 'T[]) = @@ -139,6 +242,20 @@ namespace Microsoft.FSharp.Collections for i = 0 to len - 1 do f array.[i] + [] + let distinct (array:'T[]) = + checkNonNull "array" array + let temp = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked array.Length + let mutable i = 0 + + let hashSet = HashSet<'T>(HashIdentity.Structural<'T>) + for v in array do + if hashSet.Add(v) then + temp.[i] <- v + i <- i + 1 + + Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 i temp + [] let inline map (f: 'T -> 'U) (array:'T[]) = checkNonNull "array" array @@ -158,6 +275,19 @@ namespace Microsoft.FSharp.Collections for i = 0 to len1 - 1 do f.Invoke(array1.[i], array2.[i]) + [] + let distinctBy keyf (array:'T[]) = + checkNonNull "array" array + let temp = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked array.Length + let mutable i = 0 + let hashSet = HashSet<_>(HashIdentity.Structural<_>) + for v in array do + if hashSet.Add(keyf v) then + temp.[i] <- v + i <- i + 1 + + Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 i temp + [] let map2 f (array1: 'T[]) (array2: 'U[]) = checkNonNull "array1" array1 @@ -170,6 +300,20 @@ namespace Microsoft.FSharp.Collections res.[i] <- f.Invoke(array1.[i], array2.[i]) res + [] + let map3 f (array1: 'T1[]) (array2: 'T2[]) (array3: 'T3[]) = + checkNonNull "array1" array1 + checkNonNull "array2" array2 + checkNonNull "array3" array3 + let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) + let len1 = array1.Length + if not (len1 = array2.Length && len1 = array3.Length) then invalidArg "" (SR.GetString(SR.arraysHadDifferentLengths)) + + let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked len1 + for i = 0 to len1 - 1 do + res.[i] <- f.Invoke(array1.[i], array2.[i], array3.[i]) + res + [] let mapi2 f (array1: 'T[]) (array2: 'U[]) = checkNonNull "array1" array1 @@ -210,6 +354,16 @@ namespace Microsoft.FSharp.Collections res.[i] <- f.Invoke(i,array.[i]) res + [] + let mapFold<'T,'State,'Result> (f : 'State -> 'T -> 'Result * 'State) acc array = + checkNonNull "array" array + Microsoft.FSharp.Primitives.Basics.Array.mapFold f acc array + + [] + let mapFoldBack<'T,'State,'Result> (f : 'T -> 'State -> 'Result * 'State) array acc = + checkNonNull "array" array + Microsoft.FSharp.Primitives.Basics.Array.mapFoldBack f array acc + [] let exists (f: 'T -> bool) (array:'T[]) = checkNonNull "array" array @@ -217,6 +371,16 @@ namespace Microsoft.FSharp.Collections let rec loop i = i < len && (f array.[i] || loop (i+1)) loop 0 + [] + let inline contains e (array:'T[]) = + checkNonNull "array" array + let mutable state = false + let mutable i = 0 + while (not state && i < array.Length) do + state <- e = array.[i] + i <- i + 1 + state + [] let exists2 f (array1: _[]) (array2: _[]) = checkNonNull "array1" array1 @@ -244,12 +408,38 @@ namespace Microsoft.FSharp.Collections let rec loop i = i >= len1 || (f.Invoke(array1.[i], array2.[i]) && loop (i+1)) loop 0 + [] + let groupBy keyf (array: 'T[]) = + checkNonNull "array" array + let dict = new Dictionary,ResizeArray<'T>>(RuntimeHelpers.StructBox<'Key>.Comparer) + + // Build the groupings + for i = 0 to (array.Length - 1) do + let v = array.[i] + let key = RuntimeHelpers.StructBox (keyf v) + let ok, prev = dict.TryGetValue(key) + if ok then + prev.Add(v) + else + let prev = new ResizeArray<'T>(1) + dict.[key] <- prev + prev.Add(v) + + // Return the array-of-arrays. + let result = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked dict.Count + let mutable i = 0 + for group in dict do + result.[i] <- group.Key.Value, group.Value.ToArray() + i <- i + 1 + + result + [] let pick f (array: _[]) = checkNonNull "array" array let rec loop i = if i >= array.Length then - raise (System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) + indexNotFound() else match f array.[i] with | None -> loop(i+1) @@ -285,6 +475,20 @@ namespace Microsoft.FSharp.Collections if f x then res.Add(x) res.ToArray() + [] + let where f (array: _[]) = filter f array + + [] + let except (itemsToExclude: seq<_>) (array:_[]) = + checkNonNull "itemsToExclude" itemsToExclude + checkNonNull "array" array + + if array.Length = 0 then + array + else + let cached = HashSet(itemsToExclude, HashIdentity.Structural) + array |> filter cached.Add + [] let partition f (array: _[]) = checkNonNull "array" array @@ -299,7 +503,7 @@ namespace Microsoft.FSharp.Collections let find f (array: _[]) = checkNonNull "array" array let rec loop i = - if i >= array.Length then raise (System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) else + if i >= array.Length then indexNotFound() else if f array.[i] then array.[i] else loop (i+1) loop 0 @@ -311,6 +515,85 @@ namespace Microsoft.FSharp.Collections if f array.[i] then Some array.[i] else loop (i+1) loop 0 + [] + let skip count (array:'T[]) = + checkNonNull "array" array + if count > array.Length then invalidArg "count" (SR.GetString(SR.outOfRange)) + if count = array.Length then + [| |] + else + let count = max count 0 + Microsoft.FSharp.Primitives.Basics.Array.subUnchecked count (array.Length - count) array + + [] + let skipWhile p (array: 'T[]) = + checkNonNull "array" array + let mutable i = 0 + let len = array.Length + while i < len && p array.[i] do i <- i + 1 + + match len - i with + | 0 -> [| |] + | resLen -> + Microsoft.FSharp.Primitives.Basics.Array.subUnchecked i resLen array + + [] + let findBack f (array: _[]) = + checkNonNull "array" array + Microsoft.FSharp.Primitives.Basics.Array.findBack f array + + [] + let tryFindBack f (array: _[]) = + checkNonNull "array" array + Microsoft.FSharp.Primitives.Basics.Array.tryFindBack f array + + [] + let findIndexBack f (array : _[]) = + checkNonNull "array" array + Microsoft.FSharp.Primitives.Basics.Array.findIndexBack f array + + [] + let tryFindIndexBack f (array : _[]) = + checkNonNull "array" array + Microsoft.FSharp.Primitives.Basics.Array.tryFindIndexBack f array + + [] + let windowed windowSize (array:'T[]) = + checkNonNull "array" array + if windowSize <= 0 then invalidArg "windowSize" (SR.GetString(SR.inputMustBePositive)) + let len = array.Length + if windowSize > len then + [| |] + else + let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked (len - windowSize + 1) : 'T[][] + for i = 0 to len - windowSize do + res.[i] <- Microsoft.FSharp.Primitives.Basics.Array.subUnchecked i windowSize array + res + + [] + let chunkBySize chunkSize (array:'T[]) = + checkNonNull "array" array + if chunkSize <= 0 then invalidArg "chunkSize" (SR.GetString(SR.inputMustBePositive)) + let len = array.Length + if len = 0 then + [| |] + else if chunkSize > len then + [| copy array |] + else + let chunkCount = (len - 1) / chunkSize + 1 + let res = Microsoft.FSharp.Primitives.Basics.Array.zeroCreateUnchecked chunkCount : 'T[][] + for i = 0 to len / chunkSize - 1 do + res.[i] <- Microsoft.FSharp.Primitives.Basics.Array.subUnchecked (i * chunkSize) chunkSize array + if len % chunkSize <> 0 then + res.[chunkCount - 1] <- Microsoft.FSharp.Primitives.Basics.Array.subUnchecked ((chunkCount - 1) * chunkSize) (len % chunkSize) array + res + + [] + let splitInto count (array:_[]) = + checkNonNull "array" array + if count <= 0 then invalidArg "count" (SR.GetString(SR.inputMustBePositive)) + Microsoft.FSharp.Primitives.Basics.Array.splitInto count array + [] let zip (array1: _[]) (array2: _[]) = checkNonNull "array1" array1 @@ -335,6 +618,18 @@ namespace Microsoft.FSharp.Collections res.[i] <- (array1.[i],array2.[i],array3.[i]) res + [] + let unfold<'T,'State> (f:'State -> ('T*'State) option) (s:'State) = + let res = ResizeArray<_>() + let rec loop state = + match f state with + | None -> () + | Some (x,s') -> + res.Add(x) + loop s' + loop s + res.ToArray() + [] let unzip (array: _[]) = checkNonNull "array" array @@ -424,16 +719,6 @@ namespace Microsoft.FSharp.Collections res <- f.Invoke(array.[i],res) res - let scanSubRight f (array : _[]) start fin initState = - checkNonNull "array" array - let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) - let mutable state = initState - let res = create (2+fin-start) initState - for i = fin downto start do - state <- f.Invoke(array.[i],state); - res.[i - start] <- state - res - let scanSubLeft f initState (array : _[]) start fin = checkNonNull "array" array let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) @@ -453,8 +738,16 @@ namespace Microsoft.FSharp.Collections [] let scanBack<'T,'State> f (array : 'T[]) (acc:'State) = checkNonNull "array" array - let len = array.Length - scanSubRight f array 0 (len - 1) acc + Microsoft.FSharp.Primitives.Basics.Array.scanSubRight f array 0 (array.Length - 1) acc + + [] + let inline singleton value = [|value|] + + [] + let pairwise (array: 'T[]) = + checkNonNull "array" array + if array.Length < 2 then [||] else + init (array.Length-1) (fun i -> array.[i],array.[i+1]) [] let reduce f (array : _[]) = @@ -520,7 +813,19 @@ namespace Microsoft.FSharp.Collections let result = copy array sortInPlace result; result - + + [] + let inline sortByDescending f array = + checkNonNull "array" array + let inline compareDescending a b = compare (f b) (f a) + sortWith compareDescending array + + [] + let inline sortDescending array = + checkNonNull "array" array + let inline compareDescending a b = compare b a + sortWith compareDescending array + [] let toSeq array = checkNonNull "array" array @@ -537,7 +842,7 @@ namespace Microsoft.FSharp.Collections let len = array.Length let rec go n = if n >= len then - raise (System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) + indexNotFound() elif f array.[n] then n else go (n+1) @@ -631,6 +936,27 @@ namespace Microsoft.FSharp.Collections checkNonNull "array" array Seq.averageBy f array + [] + let inline compareWith (comparer:'T -> 'T -> int) (array1: 'T[]) (array2: 'T[]) = + checkNonNull "array1" array1 + checkNonNull "array2" array2 + + let length1 = array1.Length + let length2 = array2.Length + let minLength = Operators.min length1 length2 + + let rec loop index = + if index = minLength then + if length1 = length2 then 0 + elif length1 < length2 then -1 + else 1 + else + let result = comparer array1.[index] array2.[index] + if result <> 0 then result else + loop (index+1) + + loop 0 + [] let sub (array:'T[]) (startIndex:int) (count:int) = checkNonNull "array" array @@ -639,6 +965,16 @@ namespace Microsoft.FSharp.Collections if startIndex + count > array.Length then invalidArg "count" (SR.GetString(SR.outOfRange)) Microsoft.FSharp.Primitives.Basics.Array.subUnchecked startIndex count array + [] + let item n (array:_[]) = + array.[n] + + [] + let tryItem index (array:'T[]) = + checkNonNull "array" array + if index < 0 || index >= array.Length then None + else Some(array.[index]) + [] let get (array:_[]) n = array.[n] @@ -654,7 +990,22 @@ namespace Microsoft.FSharp.Collections if count < 0 then invalidArg "count" (SR.GetString(SR.inputMustBeNonNegative)) for i = targetIndex to targetIndex + count - 1 do target.[i] <- x - + + [] + let exactlyOne (array:'T[]) = + checkNonNull "array" array + if array.Length = 1 then array.[0] + elif array.Length = 0 then invalidArg "array" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString + else invalidArg "array" (SR.GetString(SR.inputSequenceTooLong)) + + [] + let truncate count (array:'T[]) = + checkNonNull "array" array + if count <= 0 then empty + else + let len = array.Length + let count' = Operators.min count len + Microsoft.FSharp.Primitives.Basics.Array.subUnchecked 0 count' array #if FX_NO_TPL_PARALLEL #else diff --git a/src/fsharp/FSharp.Core/array.fsi b/src/fsharp/FSharp.Core/array.fsi index 3033eec8ff2..95b8287436e 100644 --- a/src/fsharp/FSharp.Core/array.fsi +++ b/src/fsharp/FSharp.Core/array.fsi @@ -16,6 +16,7 @@ namespace Microsoft.FSharp.Collections /// The first input array. /// The second input array. /// The resulting array. + /// Thrown when either of the input arrays is null. [] val append: array1:'T[] -> array2:'T[] -> 'T[] @@ -23,6 +24,7 @@ namespace Microsoft.FSharp.Collections /// The input array. /// Thrown when array is empty. /// The average of the elements in the array. + /// Thrown when the input array is null. [] val inline average : array:^T[] -> ^T when ^T : (static member ( + ) : ^T * ^T -> ^T) @@ -35,6 +37,7 @@ namespace Microsoft.FSharp.Collections /// The input array. /// Thrown when array is empty. /// The computed average. + /// Thrown when the input array is null. [] val inline averageBy : projection:('T -> ^U) -> array:'T[] -> ^U when ^U : (static member ( + ) : ^U * ^U -> ^U) @@ -47,6 +50,9 @@ namespace Microsoft.FSharp.Collections /// The target array. /// The starting index of the target array. /// The number of elements to copy. + /// Thrown when either of the input arrays is null. + /// Thrown when any of sourceIndex, targetIndex or count are negative, + /// or when there aren't enough elements in source or target. [] val blit: source:'T[] -> sourceIndex:int -> target:'T[] -> targetIndex:int -> count:int -> unit @@ -54,27 +60,77 @@ namespace Microsoft.FSharp.Collections /// The function to create sub-arrays from the input array elements. /// The input array. /// The concatenation of the sub-arrays. + /// Thrown when the input array is null. [] val collect : mapping:('T -> 'U[]) -> array:'T[] -> 'U[] + /// Compares two arrays using the given comparison function, element by element. + /// Returns the first non-zero result from the comparison function. If the end of an array + /// is reached it returns a -1 if the first array is shorter and a 1 if the second array + /// is shorter. + /// + /// A function that takes an element from each array and returns an int. + /// If it evaluates to a non-zero value iteration is stopped and that value is returned. + /// The first input array. + /// The second input array. + /// + /// The first non-zero value from the comparison function. + /// + /// Thrown when either of the input arrays + /// is null. + [] + val inline compareWith: comparer:('T -> 'T -> int) -> array1:'T[] -> array2:'T[] -> int + /// Builds a new array that contains the elements of each of the given sequence of arrays. /// The input sequence of arrays. /// The concatenation of the sequence of input arrays. + /// Thrown when the input sequence is null. [] val concat: arrays:seq<'T[]> -> 'T[] + + /// Tests if the array contains the specified element. + /// The value to locate in the input array. + /// The input array. + /// True if the input array contains the specified element; false otherwise. + /// Thrown when the input array is null. + [] + val inline contains: value:'T -> array:'T[] -> bool when 'T : equality /// Builds a new array that contains the elements of the given array. /// The input array. /// A copy of the input array. + /// Thrown when the input array is null. [] val copy: array:'T[] -> 'T[] + /// Applies a key-generating function to each element of an array and returns an array yielding unique + /// keys and their number of occurrences in the original array. + /// + /// A function transforming each item of the input array into a key to be + /// compared against the others. + /// The input array. + /// + /// The result array. + /// + /// Thrown when the input array is null. + [] + val countBy : projection:('T -> 'Key) -> array:'T[] -> ('Key * int)[] when 'Key : equality + /// Creates an array whose elements are all initially the given value. /// The length of the array to create. /// The value for the elements. /// The created array. + /// Thrown when count is negative. [] val create: count:int -> value:'T -> 'T[] + + /// Returns the first element of the array, or + /// None if the array is empty. + /// The input array. + /// Thrown when the input array is null. + /// The first element of the array or None. + [] + val tryHead: array:'T[] -> 'T option /// Applies the given function to successive elements, returning the first /// result where function returns Some(x) for some x. If the function @@ -82,6 +138,7 @@ namespace Microsoft.FSharp.Collections /// The function to transform the array elements into options. /// The input array. /// The first transformed element that is Some(x). + /// Thrown when the input array is null. [] val tryPick: chooser:('T -> 'U option) -> array:'T[] -> 'U option @@ -90,6 +147,8 @@ namespace Microsoft.FSharp.Collections /// The index of the first element to set. /// The number of elements to set. /// The value to set. + /// Thrown when the input array is null. + /// Thrown when either targetIndex or count is negative. [] val fill: target:'T[] -> targetIndex:int -> count:int -> value:'T -> unit @@ -98,6 +157,7 @@ namespace Microsoft.FSharp.Collections /// never returns Some(x) then KeyNotFoundException is raised. /// The function to generate options from the elements. /// The input array. + /// Thrown when the input array is null. /// Thrown if every result from /// chooser is None. /// The first result. @@ -110,14 +170,83 @@ namespace Microsoft.FSharp.Collections /// The function to generate options from the elements. /// The input array. /// The array of results. + /// Thrown when the input array is null. [] val choose: chooser:('T -> 'U option) -> array:'T[] -> 'U[] + /// Divides the input array into chunks of size at most chunkSize. + /// The maximum size of each chunk. + /// The input array. + /// The array divided into chunks. + /// Thrown when the input array is null. + /// Thrown when chunkSize is not positive. + [] + val chunkBySize: chunkSize:int -> array:'T[] -> 'T[][] + + /// Returns an array that contains no duplicate entries according to generic hash and + /// equality comparisons on the entries. + /// If an element occurs multiple times in the array then the later occurrences are discarded. + /// + /// The input array. + /// + /// The result array. + /// + /// Thrown when the input array is null. + [] + val distinct: array:'T[] -> 'T[] when 'T : equality + + /// Returns an array that contains no duplicate entries according to the + /// generic hash and equality comparisons on the keys returned by the given key-generating function. + /// If an element occurs multiple times in the array then the later occurrences are discarded. + /// + /// A function transforming the array items into comparable keys. + /// The input array. + /// + /// The result array. + /// + /// Thrown when the input array is null. + [] + val distinctBy: projection:('T -> 'Key) -> array:'T[] -> 'T[] when 'Key : equality + + /// Splits the input array into at most count chunks. + /// The maximum number of chunks. + /// The input array. + /// The array split into chunks. + /// Thrown when the input array is null. + /// Thrown when count is not positive. + [] + val splitInto: count:int -> array:'T[] -> 'T[][] + /// Returns an empty array of the given type. + /// The empty array. [] [] val empty<'T> : 'T[] + /// Returns the only element of the array. + /// + /// The input array. + /// + /// The only element of the array. + /// + /// Thrown when the input array is null. + /// Thrown when the input does not have precisely one element. + [] + val exactlyOne: array:'T[] -> 'T + + /// Returns a new list with the distinct elements of the input array which do not appear in the itemsToExclude sequence, + /// using generic hash and equality comparisons to compare values. + /// + /// A sequence whose elements that also occur in the input array will cause those elements to be + /// removed from the result. + /// An array whose elements that are not also in itemsToExclude will be returned. + /// + /// An array that contains the distinct elements of array that do not appear in itemsToExclude. + /// + /// Thrown when either itemsToExclude or array is null. + [] + val except: itemsToExclude:seq<'T> -> array:'T[] -> 'T[] when 'T : equality + /// Tests if any element of the array satisfies the given predicate. /// /// The predicate is applied to the elements of the input array. If any application @@ -126,6 +255,7 @@ namespace Microsoft.FSharp.Collections /// The function to test the input elements. /// The input array. /// True if any result from predicate is true. + /// Thrown when the input array is null. [] val exists: predicate:('T -> bool) -> array:'T[] -> bool @@ -140,6 +270,8 @@ namespace Microsoft.FSharp.Collections /// The first input array. /// The second input array. /// True if any result from predicate is true. + /// Thrown when either of the input arrays is null. + /// Thrown when the input arrays differ in length. [] val exists2: predicate:('T1 -> 'T2 -> bool) -> array1:'T1[] -> array2:'T2[] -> bool @@ -148,6 +280,7 @@ namespace Microsoft.FSharp.Collections /// The function to test the input elements. /// The input array. /// An array containing the elements for which the given predicate returns true. + /// Thrown when the input array is null. [] val filter: predicate:('T -> bool) -> array:'T[] -> 'T[] @@ -155,23 +288,48 @@ namespace Microsoft.FSharp.Collections /// Raise KeyNotFoundException if no such element exists. /// The function to test the input elements. /// The input array. + /// Thrown when the input array is null. /// Thrown if predicate /// never returns true. /// The first element for which predicate returns true. [] val find: predicate:('T -> bool) -> array:'T[] -> 'T + /// Returns the last element for which the given function returns 'true'. + /// Raise KeyNotFoundException if no such element exists. + /// The function to test the input elements. + /// The input array. + /// Thrown if predicate + /// never returns true. + /// Thrown when the input array is null. + /// The last element for which predicate returns true. + [] + val findBack: predicate:('T -> bool) -> array:'T[] -> 'T + /// Returns the index of the first element in the array /// that satisfies the given predicate. Raise KeyNotFoundException if - /// none of the elements satisy the predicate. + /// none of the elements satisfy the predicate. /// The function to test the input elements. /// The input array. /// Thrown if predicate /// never returns true. + /// Thrown when the input array is null. /// The index of the first element in the array that satisfies the given predicate. [] val findIndex: predicate:('T -> bool) -> array:'T[] -> int + /// Returns the index of the last element in the array + /// that satisfies the given predicate. Raise KeyNotFoundException if + /// none of the elements satisfy the predicate. + /// The function to test the input elements. + /// The input array. + /// Thrown if predicate + /// never returns true. + /// Thrown when the input array is null. + /// The index of the last element in the array that satisfies the given predicate. + [] + val findIndexBack: predicate:('T -> bool) -> array:'T[] -> int + /// Tests if all elements of the array satisfy the given predicate. /// /// The predicate is applied to the elements of the input collection. If any application @@ -180,6 +338,7 @@ namespace Microsoft.FSharp.Collections /// The function to test the input elements. /// The input array. /// True if all of the array elements satisfy the predicate. + /// Thrown when the input array is null. [] val forall: predicate:('T -> bool) -> array:'T[] -> bool @@ -194,6 +353,7 @@ namespace Microsoft.FSharp.Collections /// The function to test the input elements. /// The first input array. /// The second input array. + /// Thrown when either of the input arrays is null. /// Thrown when the input arrays differ in length. /// True if all of the array elements satisfy the predicate. [] @@ -206,16 +366,18 @@ namespace Microsoft.FSharp.Collections /// The initial state. /// The input array. /// The final state. + /// Thrown when the input array is null. [] val fold<'T,'State> : folder:('State -> 'T -> 'State) -> state:'State -> array: 'T[] -> 'State - /// Applies a function to each element of the array, threading an accumulator argument + /// Applies a function to each element of the array, starting from the end, threading an accumulator argument /// through the computation. If the input function is f and the elements are i0...iN then computes /// f i0 (...(f iN s)) /// The function to update the state given the input elements. /// The input array. /// The initial state. - /// The final state. + /// The state object after the folding function is applied to each element of the array. + /// Thrown when the input array is null. [] val foldBack<'T,'State> : folder:('T -> 'State -> 'State) -> array:'T[] -> state:'State -> 'State @@ -228,6 +390,7 @@ namespace Microsoft.FSharp.Collections /// The initial state. /// The first input array. /// The second input array. + /// Thrown when either of the input arrays is null. /// Thrown when the input arrays differ in length. /// The final state. [] @@ -241,6 +404,7 @@ namespace Microsoft.FSharp.Collections /// The first input array. /// The second input array. /// The initial state. + /// Thrown when either of the input arrays is null. /// Thrown when the input arrays differ in length. /// The final state. [] @@ -250,31 +414,69 @@ namespace Microsoft.FSharp.Collections /// The input array. /// The input index. /// The value of the array at the given index. + /// Thrown when the input array is null. + /// Thrown when the index is negative or the input array does not contain enough elements. [] val get: array:'T[] -> index:int -> 'T + /// Returns the first element of the array. + /// + /// The input array. + /// + /// The first element of the array. + /// + /// Thrown when the input array is null. + /// Thrown when the input array is empty. + [] + val head: array:'T[] -> 'T + + /// Applies a key-generating function to each element of an array and yields an array of + /// unique keys. Each unique key contains an array of all elements that match + /// to this key. + /// + /// A function that transforms an element of the array into a comparable key. + /// The input array. + /// + /// The result array. + /// + /// Thrown when the input array is null. + [] + val groupBy : projection:('T -> 'Key) -> array:'T[] -> ('Key * 'T[])[] when 'Key : equality + + /// Builds a new array whose elements are the corresponding elements of the input array + /// paired with the integer index (from 0) of each element. + /// The input array. + /// The array of indexed elements. + /// Thrown when the input array is null. + [] + val indexed: array:'T[] -> (int * 'T)[] + /// Creates an array given the dimension and a generator function to compute the elements. /// The number of elements to initialize. /// The function to generate the initial values for each index. /// The created array. + /// Thrown when count is negative. [] val inline init: count:int -> initializer:(int -> 'T) -> 'T[] /// Creates an array where the entries are initially the default value Unchecked.defaultof<'T>. /// The length of the array to create. /// The created array. + /// Thrown when count is negative. [] val zeroCreate: count:int -> 'T[] /// Returns true if the given array is empty, otherwise false. /// The input array. /// True if the array is empty. + /// Thrown when the input array is null. [] val isEmpty: array:'T[] -> bool /// Applies the given function to each element of the array. /// The function to apply. /// The input array. + /// Thrown when the input array is null. [] val inline iter: action:('T -> unit) -> array:'T[] -> unit @@ -284,6 +486,7 @@ namespace Microsoft.FSharp.Collections /// The function to apply. /// The first input array. /// The second input array. + /// Thrown when either of the input arrays is null. /// Thrown when the input arrays differ in length. [] val iter2: action:('T1 -> 'T2 -> unit) -> array1:'T1[] -> array2:'T2[] -> unit @@ -292,6 +495,7 @@ namespace Microsoft.FSharp.Collections /// function indicates the index of element. /// The function to apply to each index and element. /// The input array. + /// Thrown when the input array is null. [] val iteri: action:(int -> 'T -> unit) -> array:'T[] -> unit @@ -301,21 +505,49 @@ namespace Microsoft.FSharp.Collections /// The function to apply to each index and pair of elements. /// The first input array. /// The second input array. + /// Thrown when either of the input arrays is null. /// Thrown when the input arrays differ in length. [] val iteri2: action:(int -> 'T1 -> 'T2 -> unit) -> array1:'T1[] -> array2:'T2[] -> unit + /// Returns the last element of the array. + /// The input array. + /// The last element of the array. + /// Thrown when the input array is null. + /// Thrown when the input does not have any elements. + [] + val inline last: array:'T[] -> 'T + + /// Gets an element from an array. + /// The input index. + /// The input array. + /// The value of the array at the given index. + /// Thrown when the input array is null. + /// Thrown when the index is negative or the input array does not contain enough elements. + [] + val item: index:int -> array:'T[] -> 'T + /// Returns the length of an array. You can also use property arr.Length. /// The input array. /// The length of the array. + /// Thrown when the input array is null. [] val length: array:'T[] -> int + + /// Returns the last element of the array. + /// Return None if no such element exists. + /// The input array. + /// The last element of the array or None. + /// Thrown when the input sequence is null. + [] + val tryLast: array:'T[] -> 'T option /// Builds a new array whose elements are the results of applying the given function /// to each of the elements of the array. /// The function to transform elements of the array. /// The input array. /// The array of transformed elements. + /// Thrown when the input array is null. [] val inline map: mapping:('T -> 'U) -> array:'T[] -> 'U[] @@ -327,10 +559,45 @@ namespace Microsoft.FSharp.Collections /// The first input array. /// The second input array. /// Thrown when the input arrays differ in length. + /// Thrown when either of the input arrays is null. /// The array of transformed elements. [] val map2: mapping:('T1 -> 'T2 -> 'U) -> array1:'T1[] -> array2:'T2[] -> 'U[] + /// Combines map and fold. Builds a new array whose elements are the results of applying the given function + /// to each of the elements of the input array. The function is also used to accumulate a final value. + /// The function to transform elements from the input array and accumulate the final value. + /// The initial state. + /// The input array. + /// Thrown when the input array is null. + /// The array of transformed elements, and the final accumulated value. + [] + val mapFold<'T,'State,'Result> : mapping:('State -> 'T -> 'Result * 'State) -> state:'State -> array:'T[] -> 'Result[] * 'State + + /// Combines map and foldBack. Builds a new array whose elements are the results of applying the given function + /// to each of the elements of the input array. The function is also used to accumulate a final value. + /// The function to transform elements from the input array and accumulate the final value. + /// The input array. + /// The initial state. + /// Thrown when the input array is null. + /// The array of transformed elements, and the final accumulated value. + [] + val mapFoldBack<'T,'State,'Result> : mapping:('T -> 'State -> 'Result * 'State) -> array:'T[] -> state:'State -> 'Result[] * 'State + + /// Builds a new collection whose elements are the results of applying the given function + /// to the corresponding triples from the three collections. The three input + /// arrays must have the same length, otherwise an ArgumentException is + /// raised. + /// The function to transform the pairs of the input elements. + /// The first input array. + /// The second input array. + /// The third input array. + /// Thrown when the input arrays differ in length. + /// Thrown when any of the input arrays is null. + /// The array of transformed elements. + [] + val map3: mapping:('T1 -> 'T2 -> 'T3 -> 'U) -> array1:'T1[] -> array2:'T2[] -> array3:'T3[] -> 'U[] + /// Builds a new collection whose elements are the results of applying the given function /// to the corresponding elements of the two collections pairwise, also passing the index of /// the elements. The two input arrays must have the same lengths, otherwise an ArgumentException is @@ -338,6 +605,7 @@ namespace Microsoft.FSharp.Collections /// The function to transform pairs of input elements and their indices. /// The first input array. /// The second input array. + /// Thrown when either of the input arrays is null. /// Thrown when the input arrays differ in length. /// The array of transformed elements. [] @@ -349,6 +617,7 @@ namespace Microsoft.FSharp.Collections /// The function to transform elements and their indices. /// The input array. /// The array of transformed elements. + /// Thrown when the input array is null. [] val mapi: mapping:(int -> 'T -> 'U) -> array:'T[] -> 'U[] @@ -356,6 +625,7 @@ namespace Microsoft.FSharp.Collections /// /// Throws ArgumentException for empty arrays. /// The input array. + /// Thrown when the input array is null. /// Thrown when the input array is empty. /// The maximum element. [] @@ -366,6 +636,7 @@ namespace Microsoft.FSharp.Collections /// Throws ArgumentException for empty arrays. /// The function to transform the elements into a type supporting comparison. /// The input array. + /// Thrown when the input array is null. /// Thrown when the input array is empty. /// The maximum element. [] @@ -375,6 +646,7 @@ namespace Microsoft.FSharp.Collections /// /// Throws ArgumentException for empty arrays /// The input array. + /// Thrown when the input array is null. /// Thrown when the input array is empty. /// The minimum element. [] @@ -385,6 +657,7 @@ namespace Microsoft.FSharp.Collections /// Throws ArgumentException for empty arrays. /// The function to transform the elements into a type supporting comparison. /// The input array. + /// Thrown when the input array is null. /// Thrown when the input array is empty. /// The minimum element. [] @@ -399,9 +672,21 @@ namespace Microsoft.FSharp.Collections /// Builds a new array from the given enumerable object. /// The input sequence. /// The array of elements from the sequence. + /// Thrown when the input sequence is null. [] val ofSeq: source:seq<'T> -> 'T[] + /// Returns an array of each element in the input array and its predecessor, with the + /// exception of the first element which is only returned as the predecessor of the second element. + /// + /// The input array. + /// + /// The result array. + /// + /// Thrown when the input sequence is null. + [] + val pairwise: array:'T[] -> ('T * 'T)[] + /// Splits the collection into two collections, containing the /// elements for which the given predicate returns "true" and "false" /// respectively. @@ -409,6 +694,7 @@ namespace Microsoft.FSharp.Collections /// The input array. /// A pair of arrays. The first containing the elements the predicate evaluated to true, /// and the second containing those evaluated to false. + /// Thrown when the input array is null. [] val partition: predicate:('T -> bool) -> array:'T[] -> 'T[] * 'T[] @@ -417,6 +703,8 @@ namespace Microsoft.FSharp.Collections /// The function that maps input indices to output indices. /// The input array. /// The output array. + /// Thrown when the input array is null. + /// Thrown when indexMap does not produce a valid permutation. [] val permute : indexMap:(int -> int) -> array:'T[] -> 'T[] @@ -426,25 +714,36 @@ namespace Microsoft.FSharp.Collections /// Raises ArgumentException if the array has size zero. /// The function to reduce a pair of elements to a single element. /// The input array. + /// Thrown when the input array is null. /// Thrown when the input array is empty. /// The final result of the redcutions. [] val reduce: reduction:('T -> 'T -> 'T) -> array:'T[] -> 'T - /// Applies a function to each element of the array, threading an accumulator argument + /// Applies a function to each element of the array, starting from the end, threading an accumulator argument /// through the computation. If the input function is f and the elements are i0...iN - /// then computes f i0 (...(f iN-1 iN)). - /// Raises ArgumentException if the array has size zero. - /// The function to reduce a pair of elements to a single element. + /// then computes f i0 (...(f iN-1 iN)). + /// A function that takes in the next-to-last element of the list and the + /// current accumulated result to produce the next accumulated result. /// The input array. + /// Thrown when the input array is null. /// Thrown when the input array is empty. /// The final result of the reductions. [] val reduceBack: reduction:('T -> 'T -> 'T) -> array:'T[] -> 'T + /// Creates an array by replicating the given initial value. + /// The number of elements to replicate. + /// The value to replicate + /// The generated array. + /// Thrown when count is negative. + [] + val replicate: count:int -> initial:'T -> 'T[] + /// Returns a new array with the elements in reverse order. /// The input array. /// The reversed array. + /// Thrown when the input array is null. [] val rev: array:'T[] -> 'T[] @@ -453,6 +752,7 @@ namespace Microsoft.FSharp.Collections /// The initial state. /// The input array. /// The array of state values. + /// Thrown when the input array is null. [] val scan<'T,'State> : folder:('State -> 'T -> 'State) -> state:'State -> array:'T[] -> 'State[] @@ -461,22 +761,55 @@ namespace Microsoft.FSharp.Collections /// The input array. /// The initial state. /// The array of state values. + /// Thrown when the input array is null. [] val scanBack<'T,'State> : folder:('T -> 'State -> 'State) -> array:'T[] -> state:'State -> 'State[] + /// Returns an array that contains one item only. + /// + /// The input item. + /// + /// The result array of one item. + [] + val inline singleton: value:'T -> 'T[] + /// Sets an element of an array. /// The input array. /// The input index. /// The input value. + /// Thrown when the input array is null. + /// Thrown when the index is negative or the input array does not contain enough elements. [] val set: array:'T[] -> index:int -> value:'T -> unit + /// Builds a new array that contains the elements of the given array, excluding the first N elements. + /// The number of elements to skip. + /// The input array. + /// A copy of the input array, after removing the first N elements. + /// Thrown when the input array is null. + /// Thrown when count is negative or exceeds the number of + /// elements in the array. + [] + val skip: count:int -> array:'T[] -> 'T[] + + /// Bypasses elements in an array while the given predicate returns true, and then returns + /// the remaining elements in a new array. + /// A function that evaluates an element of the array to a boolean value. + /// The input array. + /// The created sub array. + /// Thrown when the input array is null. + [] + val skipWhile: predicate:('T -> bool) -> array:'T[] -> 'T[] + /// Builds a new array that contains the given subrange specified by /// starting index and length. /// The input array. /// The index of the first element of the sub array. /// The length of the sub array. /// The created sub array. + /// Thrown when the input array is null. + /// Thrown when either startIndex or count is negative, + /// or when there aren't enough elements in the input array. [] val sub: array:'T[] -> startIndex:int -> count:int -> 'T[] @@ -486,6 +819,7 @@ namespace Microsoft.FSharp.Collections /// For a stable sort, consider using Seq.sort. /// The input array. /// The sorted array. + /// Thrown when the input array is null. [] val sort: array:'T[] -> 'T[] when 'T : comparison @@ -497,6 +831,7 @@ namespace Microsoft.FSharp.Collections /// The function to transform array elements into the type that is compared. /// The input array. /// The sorted array. + /// Thrown when the input array is null. [] val sortBy: projection:('T -> 'Key) -> array:'T[] -> 'T[] when 'Key : comparison @@ -507,6 +842,7 @@ namespace Microsoft.FSharp.Collections /// The function to compare pairs of array elements. /// The input array. /// The sorted array. + /// Thrown when the input array is null. [] val sortWith: comparer:('T -> 'T -> int) -> array:'T[] -> 'T[] @@ -517,6 +853,7 @@ namespace Microsoft.FSharp.Collections /// For a stable sort, consider using Seq.sort. /// The function to transform array elements into the type that is compared. /// The input array. + /// Thrown when the input array is null. [] val sortInPlaceBy: projection:('T -> 'Key) -> array:'T[] -> unit when 'Key : comparison @@ -525,18 +862,52 @@ namespace Microsoft.FSharp.Collections /// Sorts the elements of an array by mutating the array in-place, using the given comparison function as the order. /// The function to compare pairs of array elements. /// The input array. + /// Thrown when the input array is null. [] val sortInPlaceWith: comparer:('T -> 'T -> int) -> array:'T[] -> unit /// Sorts the elements of an array by mutating the array in-place, using the given comparison function. /// Elements are compared using Operators.compare. /// The input array. + /// Thrown when the input array is null. [] val sortInPlace: array:'T[] -> unit when 'T : comparison + /// Splits an array into two arrays, at the given index. + /// The index at which the array is split. + /// The input array. + /// The two split arrays. + /// + /// Thrown when the input array is null. + /// Thrown when split index exceeds the number of elements + /// in the array. + [] + val splitAt: index:int -> array:'T[] -> ('T[] * 'T[]) + + /// Sorts the elements of an array, in descending order, returning a new array. Elements are compared using Operators.compare. + /// + /// This is not a stable sort, i.e. the original order of equal elements is not necessarily preserved. + /// For a stable sort, consider using Seq.sort. + /// The input array. + /// The sorted array. + [] + val inline sortDescending: array:'T[] -> 'T[] when 'T : comparison + + /// Sorts the elements of an array, in descending order, using the given projection for the keys and returning a new array. + /// Elements are compared using Operators.compare. + /// + /// This is not a stable sort, i.e. the original order of equal elements is not necessarily preserved. + /// For a stable sort, consider using Seq.sort. + /// The function to transform array elements into the type that is compared. + /// The input array. + /// The sorted array. + [] + val inline sortByDescending: projection:('T -> 'Key) -> array:'T[] -> 'T[] when 'Key : comparison + /// Returns the sum of the elements in the array. /// The input array. /// The resulting sum. + /// Thrown when the input array is null. [] val inline sum : array: ^T[] -> ^T when ^T : (static member ( + ) : ^T * ^T -> ^T) @@ -547,55 +918,165 @@ namespace Microsoft.FSharp.Collections /// The function to transform the array elements into the type to be summed. /// The input array. /// The resulting sum. + /// Thrown when the input array is null. [] val inline sumBy : projection:('T -> ^U) -> array:'T[] -> ^U when ^U : (static member ( + ) : ^U * ^U -> ^U) and ^U : (static member Zero : ^U) + /// Returns the first N elements of the array. + /// Throws InvalidOperationException + /// if the count exceeds the number of elements in the array. Array.truncate + /// returns as many items as the array contains instead of throwing an exception. + /// + /// The number of items to take. + /// The input array. + /// + /// The result array. + /// + /// Thrown when the input array is null. + /// Thrown when the input array is empty. + /// Thrown when count exceeds the number of elements + /// in the list. + [] + val take: count:int -> array:'T[] -> 'T[] + + /// Returns an array that contains all elements of the original array while the + /// given predicate returns true, and then returns no further elements. + /// + /// A function that evaluates to false when no more items should be returned. + /// The input array. + /// + /// The result array. + /// + /// Thrown when the input array is null. + [] + val takeWhile: predicate:('T -> bool) -> array:'T[] -> 'T[] + + /// Returns a new array containing the elements of the original except the first element. + /// + /// The input array. + /// Thrown when the array is empty. + /// Thrown when the input array is null. + /// A new array containing the elements of the original except the first element. + [] + val tail: array:'T[] -> 'T[] + /// Builds a list from the given array. /// The input array. /// The list of array elements. + /// Thrown when the input array is null. [] val toList: array:'T[] -> 'T list /// Views the given array as a sequence. /// The input array. /// The sequence of array elements. + /// Thrown when the input array is null. [] val toSeq: array:'T[] -> seq<'T> + /// Returns at most N elements in a new array. + /// The maximum number of items to return. + /// The input array. + /// The result array. + /// Thrown when the input array is null. + [] + val truncate: count:int -> array:'T[] -> 'T[] + /// Returns the first element for which the given function returns true. /// Return None if no such element exists. /// The function to test the input elements. /// The input array. /// The first element that satisfies the predicate, or None. + /// Thrown when the input array is null. [] val tryFind: predicate:('T -> bool) -> array:'T[] -> 'T option + /// Returns the last element for which the given function returns true. + /// Return None if no such element exists. + /// The function to test the input elements. + /// The input array. + /// Thrown when the input array is null. + /// The last element that satisfies the predicate, or None. + [] + val tryFindBack: predicate:('T -> bool) -> array:'T[] -> 'T option + /// Returns the index of the first element in the array /// that satisfies the given predicate. /// The function to test the input elements. /// The input array. + /// Thrown when the input array is null. /// The index of the first element that satisfies the predicate, or None. [] val tryFindIndex : predicate:('T -> bool) -> array:'T[] -> int option + /// Tries to find the nth element in the array. + /// Returns None if index is negative or the input array does not contain enough elements. + /// The index of element to retrieve. + /// The input array. + /// The nth element of the array or None. + /// Thrown when the input array is null. + [] + val tryItem: index:int -> array:'T[] -> 'T option + + /// Returns the index of the last element in the array + /// that satisfies the given predicate. + /// The function to test the input elements. + /// The input array. + /// Thrown when the input array is null. + /// The index of the last element that satisfies the predicate, or None. + [] + val tryFindIndexBack : predicate:('T -> bool) -> array:'T[] -> int option + + /// Returns an array that contains the elements generated by the given computation. + /// The given initial state argument is passed to the element generator. + /// A function that takes in the current state and returns an option tuple of the next + /// element of the array and the next state value. + /// The initial state value. + /// The result array. + [] + val unfold<'T,'State> : generator:('State -> ('T * 'State) option) -> state:'State -> 'T[] + /// Splits an array of pairs into two arrays. /// The input array. /// The two arrays. + /// Thrown when the input array is null. [] val unzip: array:('T1 * 'T2)[] -> ('T1[] * 'T2[]) /// Splits an array of triples into three arrays. /// The input array. /// The tuple of three arrays. + /// Thrown when the input array is null. [] val unzip3: array:('T1 * 'T2 * 'T3)[] -> ('T1[] * 'T2[] * 'T3[]) + /// Returns a new array containing only the elements of the array + /// for which the given predicate returns "true". + /// The function to test the input elements. + /// The input array. + /// An array containing the elements for which the given predicate returns true. + /// + /// Thrown when the input array is null. + [] + val where: predicate:('T -> bool) -> array:'T[] -> 'T[] + + /// Returns an array of sliding windows containing elements drawn from the input + /// array. Each window is returned as a fresh array. + /// The number of elements in each window. + /// The input array. + /// The result array. + /// Thrown when the input array is null. + /// Thrown when windowSize is not positive. + [] + val windowed : windowSize:int -> array:'T[] -> 'T[][] + /// Combines the two arrays into an array of pairs. The two arrays must have equal lengths, otherwise an ArgumentException is /// raised. /// The first input array. /// The second input array. + /// Thrown when either of the input arrays is null. /// Thrown when the input arrays differ in length. /// The array of tupled elements. [] @@ -606,6 +1087,7 @@ namespace Microsoft.FSharp.Collections /// The first input array. /// The second input array. /// The third input array. + /// Thrown when any of the input arrays are null. /// Thrown when the input arrays differ in length. /// The array of tupled elements. [] @@ -625,6 +1107,7 @@ namespace Microsoft.FSharp.Collections /// The function to generate options from the elements. /// The input array. /// 'U[] + /// Thrown when the input array is null. [] val choose: chooser:('T -> 'U option) -> array:'T[] -> 'U[] @@ -635,6 +1118,7 @@ namespace Microsoft.FSharp.Collections /// /// The input array. /// 'U[] + /// Thrown when the input array is null. [] val collect : mapping:('T -> 'U[]) -> array:'T[] -> 'U[] @@ -646,6 +1130,7 @@ namespace Microsoft.FSharp.Collections /// /// The input array. /// 'U[] + /// Thrown when the input array is null. [] val map : mapping:('T -> 'U) -> array:'T[] -> 'U[] @@ -658,6 +1143,7 @@ namespace Microsoft.FSharp.Collections /// /// The input array. /// 'U[] + /// Thrown when the input array is null. [] val mapi: mapping:(int -> 'T -> 'U) -> array:'T[] -> 'U[] @@ -667,6 +1153,7 @@ namespace Microsoft.FSharp.Collections /// The order in which the given function is applied to elements of the input array is not specified. /// /// The input array. + /// Thrown when the input array is null. [] val iter : action:('T -> unit) -> array:'T[] -> unit @@ -677,6 +1164,7 @@ namespace Microsoft.FSharp.Collections /// The order in which the given function is applied to elements of the input array is not specified. /// /// The input array. + /// Thrown when the input array is null. [] val iteri: action:(int -> 'T -> unit) -> array:'T[] -> unit @@ -699,6 +1187,7 @@ namespace Microsoft.FSharp.Collections /// The function to test the input elements. /// The input array. /// 'T[] * 'T[] + /// Thrown when the input array is null. [] val partition : predicate:('T -> bool) -> array:'T[] -> 'T[] * 'T[] #endif diff --git a/src/fsharp/FSharp.Core/array2.fs b/src/fsharp/FSharp.Core/array2.fs index 44506182c6c..10af4df8cee 100644 --- a/src/fsharp/FSharp.Core/array2.fs +++ b/src/fsharp/FSharp.Core/array2.fs @@ -69,10 +69,11 @@ namespace Microsoft.FSharp.Collections [] let initBased b1 b2 n m f = - let array = (zeroCreateBased b1 b2 n m : 'T[,]) + let array = (zeroCreateBased b1 b2 n m : 'T[,]) + let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) for i = b1 to b1+n - 1 do for j = b2 to b2+m - 1 do - array.[i,j] <- f i j + array.[i,j] <- f.Invoke(i, j) array @@ -102,9 +103,10 @@ namespace Microsoft.FSharp.Collections let count2 = length2 array let b1 = base1 array let b2 = base2 array + let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) for i = b1 to b1+count1 - 1 do for j = b2 to b2+count2 - 1 do - f i j array.[i,j] + f.Invoke(i, j, array.[i,j]) [] let map f array = @@ -114,7 +116,8 @@ namespace Microsoft.FSharp.Collections [] let mapi f array = checkNonNull "array" array - initBased (base1 array) (base2 array) (length1 array) (length2 array) (fun i j -> f i j array.[i,j]) + let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) + initBased (base1 array) (base2 array) (length1 array) (length2 array) (fun i j -> f.Invoke(i, j, array.[i,j])) [] let copy array = diff --git a/src/fsharp/FSharp.Core/array3.fs b/src/fsharp/FSharp.Core/array3.fs index f14a92d7039..6f930c7af93 100644 --- a/src/fsharp/FSharp.Core/array3.fs +++ b/src/fsharp/FSharp.Core/array3.fs @@ -51,11 +51,12 @@ namespace Microsoft.FSharp.Collections [] let init n1 n2 n3 f = - let arr = (zeroCreate n1 n2 n3 : 'T[,,]) + let arr = (zeroCreate n1 n2 n3 : 'T[,,]) + let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) for i = 0 to n1 - 1 do for j = 0 to n2 - 1 do for k = 0 to n3 - 1 do - arr.[i,j,k] <- f i j k + arr.[i,j,k] <- f.Invoke(i, j, k) arr [] @@ -88,10 +89,11 @@ namespace Microsoft.FSharp.Collections let len1 = length1 array let len2 = length2 array let len3 = length3 array + let f = OptimizedClosures.FSharpFunc<_,_,_,_,_>.Adapt(f) for i = 0 to len1 - 1 do for j = 0 to len2 - 1 do for k = 0 to len3 - 1 do - f i j k array.[i,j,k] + f.Invoke(i, j, k, array.[i,j,k]) [] let mapi f array = @@ -100,10 +102,11 @@ namespace Microsoft.FSharp.Collections let len2 = length2 array let len3 = length3 array let res = (zeroCreate len1 len2 len3 : 'b[,,]) + let f = OptimizedClosures.FSharpFunc<_,_,_,_,_>.Adapt(f) for i = 0 to len1 - 1 do for j = 0 to len2 - 1 do for k = 0 to len3 - 1 do - res.[i,j,k] <- f i j k array.[i,j,k] + res.[i,j,k] <- f.Invoke(i, j, k, array.[i,j,k]) res [] @@ -143,11 +146,12 @@ namespace Microsoft.FSharp.Collections [] let init n1 n2 n3 n4 f = let arr = (zeroCreate n1 n2 n3 n4 : 'T[,,,]) + let f = OptimizedClosures.FSharpFunc<_,_,_,_,_>.Adapt(f) for i = 0 to n1 - 1 do for j = 0 to n2 - 1 do for k = 0 to n3 - 1 do for m = 0 to n4 - 1 do - arr.[i,j,k,m] <- f i j k m + arr.[i,j,k,m] <- f.Invoke(i, j, k, m) arr diff --git a/src/fsharp/FSharp.Core/collections.fs b/src/fsharp/FSharp.Core/collections.fs index 3a82ef1f246..6c4e2b23fa8 100644 --- a/src/fsharp/FSharp.Core/collections.fs +++ b/src/fsharp/FSharp.Core/collections.fs @@ -20,7 +20,7 @@ namespace Microsoft.FSharp.Collections let inline Structural<'T when 'T : equality> : IEqualityComparer<'T> = LanguagePrimitives.FastGenericEqualityComparer<'T> - let LimitedStructural<'T when 'T : equality>(limit) : IEqualityComparer<'T> = + let inline LimitedStructural<'T when 'T : equality>(limit) : IEqualityComparer<'T> = LanguagePrimitives.FastLimitedGenericEqualityComparer<'T>(limit) let Reference<'T when 'T : not struct > : IEqualityComparer<'T> = @@ -28,6 +28,11 @@ namespace Microsoft.FSharp.Collections member self.GetHashCode(x) = LanguagePrimitives.PhysicalHash(x) member self.Equals(x,y) = LanguagePrimitives.PhysicalEquality x y } + let inline NonStructural< 'T when 'T : equality and 'T : (static member ( = ) : 'T * 'T -> bool) > = + { new IEqualityComparer< 'T > with + member self.GetHashCode(x) = NonStructuralComparison.hash x + member self.Equals(x, y) = NonStructuralComparison.(=) x y } + let inline FromFunctions hash eq : IEqualityComparer<'T> = let eq = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(eq) { new IEqualityComparer<'T> with @@ -37,10 +42,16 @@ namespace Microsoft.FSharp.Collections module ComparisonIdentity = - - let Structural<'T when 'T : comparison > : IComparer<'T> = + let inline Structural<'T when 'T : comparison > : IComparer<'T> = LanguagePrimitives.FastGenericComparer<'T> - + +#if BUILDING_WITH_LKG +#else + let inline NonStructural< 'T when 'T : (static member ( < ) : 'T * 'T -> bool) and 'T : (static member ( > ) : 'T * 'T -> bool) > : IComparer< 'T > = + { new IComparer<'T> with + member self.Compare(x,y) = NonStructuralComparison.compare x y } +#endif + let FromFunction comparer = let comparer = OptimizedClosures.FSharpFunc<'T,'T,int>.Adapt(comparer) { new IComparer<'T> with diff --git a/src/fsharp/FSharp.Core/collections.fsi b/src/fsharp/FSharp.Core/collections.fsi index b14ec1fac9f..10e71fceb96 100644 --- a/src/fsharp/FSharp.Core/collections.fsi +++ b/src/fsharp/FSharp.Core/collections.fsi @@ -13,8 +13,14 @@ namespace Microsoft.FSharp.Collections module ComparisonIdentity = /// Structural comparison. Compare using Operators.compare. - val Structural<'T> : IComparer<'T> when 'T : comparison - + val inline Structural<'T> : IComparer<'T> when 'T : comparison + +#if BUILDING_WITH_LKG +#else + /// Non-structural comparison. Compare using NonStructuralComparison.compare. + val inline NonStructural< ^T > : IComparer< ^T > when ^T : (static member ( < ) : ^T * ^T -> bool) and ^T : (static member ( > ) : ^T * ^T -> bool) +#endif + /// Compare using the given comparer function. /// A function to compare two values. /// An object implementing IComparer using the supplied comparer. @@ -24,11 +30,12 @@ namespace Microsoft.FSharp.Collections module HashIdentity = /// Structural hashing. Hash using Operators.(=) and Operators.hash. - - // inline justification: allows specialization of structural hash functions based on type val inline Structural<'T> : IEqualityComparer<'T> when 'T : equality - val LimitedStructural<'T> : limit: int -> IEqualityComparer<'T> when 'T : equality + /// Non-structural hashing. Equality using NonStructuralComparison.(=) and NonStructuralComparison.hash. + val inline NonStructural<'T> : IEqualityComparer< ^T > when ^T : equality and ^T : (static member ( = ) : ^T * ^T -> bool) + + val inline LimitedStructural<'T> : limit: int -> IEqualityComparer<'T> when 'T : equality /// Physical hashing (hash on reference identity of objects, and the contents of value types). /// Hash using LanguagePrimitives.PhysicalEquality and LanguagePrimitives.PhysicalHash, diff --git a/src/fsharp/FSharp.Core/control.fs b/src/fsharp/FSharp.Core/control.fs index dd33de49d0c..43c39459ee8 100644 --- a/src/fsharp/FSharp.Core/control.fs +++ b/src/fsharp/FSharp.Core/control.fs @@ -308,11 +308,6 @@ namespace Microsoft.FSharp.Control #else open System.Threading open System.Threading.Tasks - - //[)>] - //[)>] - //[)>] - //do () #endif #if FX_NO_OPERATION_CANCELLED @@ -322,6 +317,15 @@ namespace Microsoft.FSharp.Control #endif +#if FX_NO_EXCEPTIONDISPATCHINFO + [] + type ExceptionDispatchInfo(exn: System.Exception) = + static member Capture(exn) = ExceptionDispatchInfo(exn) + member __.Throw() = raise exn; () + member __.SourceException = exn +#else + open System.Runtime.ExceptionServices +#endif /// We use our own internal implementation of queues to avoid a dependency on System.dll @@ -389,7 +393,7 @@ namespace Microsoft.FSharp.Control type cont<'T> = ('T -> FakeUnitValue) - type econt = (exn -> FakeUnitValue) + type econt = (ExceptionDispatchInfo -> FakeUnitValue) type ccont = (OperationCanceledException -> FakeUnitValue) @@ -594,12 +598,12 @@ namespace Microsoft.FSharp.Control let ignoreFake _ = FakeUnit - let defaultCancellationTokenSource = ref (new CancellationTokenSource()) + let mutable defaultCancellationTokenSource = new CancellationTokenSource() [] type Result<'T> = | Ok of 'T - | Error of exn + | Error of ExceptionDispatchInfo | Canceled of OperationCanceledException let inline hijack (trampolineHolder:TrampolineHolder) res (cont : 'T -> FakeUnitValue) : FakeUnitValue = @@ -607,39 +611,71 @@ namespace Microsoft.FSharp.Control trampolineHolder.Trampoline.Set(fun () -> cont res) FakeUnit else + // NOTE: this must be a tailcall cont res +#if FX_NO_CONDITIONAL_WEAK_TABLE +#else + /// Global mutable state used to associate Exception + let associationTable = System.Runtime.CompilerServices.ConditionalWeakTable() +#endif + + type ExceptionDispatchInfo with + + member edi.GetAssociatedSourceException() = + let exn = edi.SourceException +#if FX_NO_CONDITIONAL_WEAK_TABLE +#else + // Try to store the entry in the association table to allow us to recover it later. + try lock associationTable (fun () -> associationTable.Add(exn, edi)) with _ -> () +#endif + exn + + // Capture, but prefer the saved information if available + static member inline RestoreOrCapture(exn) = +#if FX_NO_CONDITIONAL_WEAK_TABLE +#else + match lock associationTable (fun () -> associationTable.TryGetValue(exn)) with + | true, edi -> edi + | _ -> +#endif + ExceptionDispatchInfo.Capture(exn) + + member inline edi.ThrowAny() = + edi.Throw() + Unchecked.defaultof<'T> // Note, this line should not be reached, but gives a generic return type + // Apply f to x and call either the continuation or exception continuation depending what happens let inline protect (trampolineHolder:TrampolineHolder) econt f x (cont : 'T -> FakeUnitValue) : FakeUnitValue = // This is deliberately written in a allocation-free style, except when the trampoline is taken let mutable res = Unchecked.defaultof<_> - let mutable exn = null + let mutable edi = null + try res <- f x - with - // Note: using a :? catch keeps FxCop happy - | :? System.Exception as e -> - exn <- e - match exn with + with exn -> + edi <- ExceptionDispatchInfo.RestoreOrCapture(exn) + + match edi with | null -> // NOTE: this must be a tailcall hijack trampolineHolder res cont - | exn -> + | _ -> // NOTE: this must be a tailcall - hijack trampolineHolder exn econt + hijack trampolineHolder edi econt // Apply f to x and call either the continuation or exception continuation depending what happens let inline protectNoHijack econt f x (cont : 'T -> FakeUnitValue) : FakeUnitValue = // This is deliberately written in a allocation-free style let mutable res = Unchecked.defaultof<_> - let mutable exn = null + let mutable edi = null + try res <- f x - with - // Note: using a :? catch keeps FxCop happy - | :? System.Exception as e -> - exn <- e - match exn with + with exn -> + edi <- ExceptionDispatchInfo.RestoreOrCapture(exn) + + match edi with | null -> // NOTE: this must be a tailcall cont res @@ -653,7 +689,7 @@ namespace Microsoft.FSharp.Control let commit res = match res with | Ok res -> res - | Error exn -> raise exn + | Error edi -> edi.ThrowAny() | Canceled exn -> raise exn // Reify exceptional results as exceptionsJIT 64 doesn't always take tailcalls correctly @@ -729,10 +765,17 @@ namespace Microsoft.FSharp.Control //---------------------------------- // PRIMITIVE ASYNC CONSTRUCTORS + + // Use this to recover ExceptionDispatchInfo when outside the "with" part of a try/with block. + // This indicates all the places where we lose a stack trace. + // + // Stack trace losses come when interoperating with other code that only provide us with an exception value, + // notably .NET 4.x tasks and user exceptions passed to the exception continuation in Async.FromContinuations. + let MayLoseStackTrace exn = ExceptionDispatchInfo.RestoreOrCapture(exn) // Call the exception continuation - let errorT args exn = - args.aux.econt exn + let errorT args edi = + args.aux.econt edi // Call the cancellation continuation let cancelT (args:AsyncParams<_>) = @@ -747,8 +790,11 @@ namespace Microsoft.FSharp.Control if args.aux.token.IsCancellationRequested then cancelT args else - try f args - with exn -> errorT args exn + try + f args + with exn -> + let edi = ExceptionDispatchInfo.RestoreOrCapture(exn) + errorT args edi // When run, ensures that any exceptions raised by the immediate execution of "f" are // sent to the exception continuation. @@ -835,18 +881,16 @@ namespace Microsoft.FSharp.Control // Re-route the exception continuation to call to catchFunction. If catchFunction or the new process fail // then call the original exception continuation with the failure. - let tryWithA catchFunction p = + let tryWithDispatchInfoA catchFunction p = unprotectedPrimitive (fun args -> if args.aux.token.IsCancellationRequested then cancelT args else - let econt exn = invokeA (callA catchFunction exn) args + let econt (edi: ExceptionDispatchInfo) = invokeA (callA catchFunction edi) args invokeA p { args with aux = { args.aux with econt = econt } }) - /// Send the given exception using the exception continuation - let raiseA exn = - unprotectedPrimitive (fun args -> - errorT args (exn :> Exception)) + let tryWithExnA catchFunction computation = + computation |> tryWithDispatchInfoA (fun edi -> catchFunction (edi.GetAssociatedSourceException())) /// Call the finallyFunction if the computation results in a cancellation let whenCancelledA (finallyFunction : OperationCanceledException -> unit) p = @@ -857,7 +901,7 @@ namespace Microsoft.FSharp.Control let getCancellationToken() = unprotectedPrimitive (fun ({ aux = aux } as args) -> args.cont aux.token) - let gettrampolineHolder() = + let getTrampolineHolder() = unprotectedPrimitive (fun ({ aux = aux } as args) -> args.cont aux.trampolineHolder) /// Return a unit result @@ -905,7 +949,7 @@ namespace Microsoft.FSharp.Control member b.For(e, prog) = forA e prog member b.Combine(p1, p2) = sequentialA p1 p2 member b.TryFinally(p, cf) = tryFinallyA cf p - member b.TryWith(p, cf) = tryWithA cf p + member b.TryWith(p, cf) = tryWithExnA cf p module AsyncImpl = let async = AsyncBuilder() @@ -1195,11 +1239,9 @@ namespace Microsoft.FSharp.Control use resultCell = new ResultCell>() queueAsync token - (fun res -> resultCell.RegisterResult(Ok(res),reuseThread=true)) - (fun exn -> resultCell.RegisterResult(Error(exn),reuseThread=true)) + (fun edi -> resultCell.RegisterResult(Error(edi),reuseThread=true)) (fun exn -> resultCell.RegisterResult(Canceled(exn),reuseThread=true)) - computation |> unfake @@ -1223,7 +1265,7 @@ namespace Microsoft.FSharp.Control queueAsync token (fun () -> FakeUnit) // nothing to do on success - (fun e -> raise e) // raise exception in child + (fun edi -> edi.ThrowAny()) // raise exception in child (fun _ -> FakeUnit) // ignore cancellation in child computation |> unfake @@ -1266,10 +1308,9 @@ namespace Microsoft.FSharp.Control do disposeReg() tcs.TrySetResult(result) |> ignore - with - | e -> - disposeReg() - tcs.TrySetException(e) |> ignore + with exn -> + disposeReg() + tcs.TrySetException(exn) |> ignore } Start(token, a) task @@ -1304,46 +1345,49 @@ namespace Microsoft.FSharp.Control else aux.trampolineHolder.Protect (fun () -> cont x ) |> unfake try - f (once args.cont, once aux.econt, once aux.ccont) + f (once args.cont, (fun exn -> once aux.econt (MayLoseStackTrace(exn))), once aux.ccont) with exn -> if not(latch.Enter()) then invalidOp(SR.GetString(SR.controlContinuationInvokedMultipleTimes)) - aux.econt exn |> unfake + let edi = ExceptionDispatchInfo.RestoreOrCapture(exn) + aux.econt edi |> unfake + underCurrentThreadStack := false + match !contToTailCall with | Some k -> k() | _ -> FakeUnit ) - static member DefaultCancellationToken = (!defaultCancellationTokenSource).Token + static member DefaultCancellationToken = defaultCancellationTokenSource.Token static member CancelDefaultToken() = - let cts = !defaultCancellationTokenSource + let cts = defaultCancellationTokenSource // set new CancellationTokenSource before calling Cancel - otherwise if Cancel throws token will stay unchanged - defaultCancellationTokenSource := new CancellationTokenSource() + defaultCancellationTokenSource <- new CancellationTokenSource() // we do not dispose the old default CTS - let GC collect it cts.Cancel() // we do not dispose the old default CTS - let GC collect it static member Catch (p: Async<'T>) = unprotectedPrimitive (fun ({ aux = aux } as args) -> - startA aux.token aux.trampolineHolder (Choice1Of2 >> args.cont) (Choice2Of2 >> args.cont) aux.ccont p) + startA aux.token aux.trampolineHolder (Choice1Of2 >> args.cont) (fun edi -> args.cont (Choice2Of2 (edi.GetAssociatedSourceException()))) aux.ccont p) static member RunSynchronously (p: Async<'T>,?timeout,?cancellationToken:CancellationToken) = let timeout,token = match cancellationToken with - | None -> timeout,(!defaultCancellationTokenSource).Token + | None -> timeout,defaultCancellationTokenSource.Token | Some token when not token.CanBeCanceled -> timeout, token | Some token -> None, token CancellationTokenOps.RunSynchronously(token, p, timeout) static member Start (computation, ?cancellationToken) = - let token = defaultArg cancellationToken (!defaultCancellationTokenSource).Token + let token = defaultArg cancellationToken defaultCancellationTokenSource.Token CancellationTokenOps.Start (token, computation) #if FX_NO_TASK #else static member StartAsTask (computation,?taskCreationOptions,?cancellationToken)= - let token = defaultArg cancellationToken (!defaultCancellationTokenSource).Token + let token = defaultArg cancellationToken defaultCancellationTokenSource.Token CancellationTokenOps.StartAsTask(token,computation,taskCreationOptions) static member StartChildAsTask (computation,?taskCreationOptions) = @@ -1355,8 +1399,12 @@ namespace Microsoft.FSharp.Control static member Parallel (l: seq>) = unprotectedPrimitive (fun args -> let tasks,result = - try Seq.toArray l, None // manually protect eval of seq - with exn -> null, Some(errorT args exn) + try + Seq.toArray l, None // manually protect eval of seq + with exn -> + let edi = ExceptionDispatchInfo.RestoreOrCapture(exn) + null, Some(errorT args edi) + match result with | Some r -> r | None -> @@ -1408,7 +1456,7 @@ namespace Microsoft.FSharp.Control // on success, record the result (fun res -> recordSuccess i res) // on exception... - (fun exn -> recordFailure (Choice1Of2 exn)) + (fun edi -> recordFailure (Choice1Of2 edi)) // on cancellation... (fun cexn -> recordFailure (Choice2Of2 cexn)) p @@ -1420,26 +1468,30 @@ namespace Microsoft.FSharp.Control // Contains helpers that will attach continuation to the given task. // Should be invoked as a part of protectedPrimitive(withResync) call module TaskHelpers = - let continueWith (task : Task<'T>, ({ aux = aux } as args)) = + let continueWith (task : Task<'T>, args) = + let continuation (completedTask : Task<_>) : unit = - aux.trampolineHolder.Protect((fun () -> + args.aux.trampolineHolder.Protect((fun () -> if completedTask.IsCanceled then - aux.ccont (new OperationCanceledException()) + args.aux.ccont (new OperationCanceledException()) elif completedTask.IsFaulted then - aux.econt (upcast completedTask.Exception) + args.aux.econt (MayLoseStackTrace(completedTask.Exception)) else args.cont completedTask.Result)) |> unfake + task.ContinueWith(Action>(continuation), TaskContinuationOptions.None) |> ignore |> fake - let continueWithUnit (task : Task, ({ aux = aux } as args)) = + let continueWithUnit (task : Task, args) = + let continuation (completedTask : Task) : unit = - aux.trampolineHolder.Protect((fun () -> + args.aux.trampolineHolder.Protect((fun () -> if completedTask.IsCanceled then - aux.ccont (new OperationCanceledException()) + args.aux.ccont (new OperationCanceledException()) elif completedTask.IsFaulted then - aux.econt (upcast completedTask.Exception) + args.aux.econt (MayLoseStackTrace(completedTask.Exception)) else args.cont ())) |> unfake + task.ContinueWith(Action(continuation), TaskContinuationOptions.None) |> ignore |> fake #endif @@ -1465,23 +1517,34 @@ namespace Microsoft.FSharp.Control type Async with - static member StartWithContinuations(a:Async<'T>,cont,econt,ccont,?cancellationToken) : unit = - let token = defaultArg cancellationToken (!defaultCancellationTokenSource).Token - CancellationTokenOps.StartWithContinuations(token, a,cont,econt,ccont) + /// StartWithContinuations, except the exception continuation is given an ExceptionDispatchInfo + static member StartWithContinuationsUsingDispatchInfo(computation:Async<'T>, continuation, exceptionContinuation, cancellationContinuation, ?cancellationToken) : unit = + let token = defaultArg cancellationToken defaultCancellationTokenSource.Token + CancellationTokenOps.StartWithContinuations(token, computation, continuation, exceptionContinuation, cancellationContinuation) + + static member StartWithContinuations(computation:Async<'T>, continuation, exceptionContinuation, cancellationContinuation, ?cancellationToken) : unit = + Async.StartWithContinuationsUsingDispatchInfo(computation, continuation, (fun edi -> exceptionContinuation (edi.GetAssociatedSourceException())), cancellationContinuation, ?cancellationToken=cancellationToken) - static member StartImmediate(a:Async,?cancellationToken) : unit = - Async.StartWithContinuations(a,id,raise,ignore,?cancellationToken=cancellationToken) + static member StartImmediate(computation:Async, ?cancellationToken) : unit = + let token = defaultArg cancellationToken defaultCancellationTokenSource.Token + CancellationTokenOps.StartWithContinuations(token, computation, id, (fun edi -> edi.ThrowAny()), ignore) #if FSHARP_CORE_NETCORE_PORTABLE static member Sleep(dueTime : int) : Async = // use combo protectedPrimitiveWithResync + continueWith instead of AwaitTask so we can pass cancellation token to the Delay task unprotectedPrimitiveWithResync ( fun ({ aux = aux} as args) -> - let mutable the_exn = null - let task = try Task.Delay(dueTime, aux.token) - with e -> the_exn <- e; null - match the_exn with + let mutable edi = null + + let task = + try + Task.Delay(dueTime, aux.token) + with exn -> + edi <- ExceptionDispatchInfo.RestoreOrCapture(exn) + null + + match edi with | null -> TaskHelpers.continueWithUnit(task, args) - | e -> aux.econt e + | _ -> aux.econt edi ) #else static member Sleep(dueTime) : Async = @@ -1500,7 +1563,7 @@ namespace Microsoft.FSharp.Control aux.trampolineHolder.Protect(fun () -> savedCCont(new OperationCanceledException())) |> unfake ), null) - let mutable the_exn = null + let mutable edi = null try timer := new Timer((fun _ -> if latch.Enter() then @@ -1519,13 +1582,15 @@ namespace Microsoft.FSharp.Control // Now we're done, so call the continuation aux.trampolineHolder.Protect (fun () -> savedCont()) |> unfake), null, dueTime=dueTime, period = -1) |> Some - with - exn -> if latch.Enter() then the_exn <- exn // post exception to econt only if we successfully enter the latch (no other continuations were called) - match the_exn with + with exn -> + if latch.Enter() then + edi <- ExceptionDispatchInfo.RestoreOrCapture(exn) // post exception to econt only if we successfully enter the latch (no other continuations were called) + + match edi with | null -> FakeUnit - | exn -> - aux.econt exn + | _ -> + aux.econt edi ) #endif @@ -1580,14 +1645,14 @@ namespace Microsoft.FSharp.Control if millisecondsTimeout <> Timeout.Infinite then Async.StartWithContinuations ( - a = (Async.Sleep millisecondsTimeout), - cont = (fun () -> + computation = (Async.Sleep millisecondsTimeout), + continuation = (fun () -> if latch.Enter() then registration.Dispose() aux.trampolineHolder.Protect(fun () -> scont false) |> unfake), - econt = ignore, // we do not expect exceptions here - ccont = cancel, + exceptionContinuation = ignore, // we do not expect exceptions here + cancellationContinuation = cancel, cancellationToken = aux.token ) FakeUnit @@ -1725,8 +1790,15 @@ namespace Microsoft.FSharp.Control registration.Dispose() | None -> once.Do(fun () -> registration.Dispose()) + // Run the endAction and collect its result. - let res = try Ok(endAction iar) with e -> Error(e) + let res = + try + Ok(endAction iar) + with exn -> + let edi = ExceptionDispatchInfo.RestoreOrCapture(exn) + Error edi + // Register the result. This may race with a cancellation result, but // ResultCell allows a race and throws away whichever comes last. resultCell.RegisterResult(res,reuseThread=true) |> unfake @@ -1778,7 +1850,7 @@ namespace Microsoft.FSharp.Control member s.GetResult() = match result.TryWaitForResultSynchronously (-1) with | Some (Ok v) -> v - | Some (Error err) -> raise err + | Some (Error edi) -> edi.ThrowAny() | Some (Canceled err) -> raise err | None -> failwith "unreachable" @@ -1921,9 +1993,8 @@ namespace Microsoft.FSharp.Control innerCTS.Token // since innerCTS is not ever Disposed, can call reg.Dispose() without a safety Latch (fun res -> ctsRef := null; reg.Dispose(); resultCell.RegisterResult (Ok res, reuseThread=true)) - (fun err -> ctsRef := null; reg.Dispose(); resultCell.RegisterResult (Error err,reuseThread=true)) + (fun edi -> ctsRef := null; reg.Dispose(); resultCell.RegisterResult (Error edi,reuseThread=true)) (fun err -> ctsRef := null; reg.Dispose(); resultCell.RegisterResult (Canceled err,reuseThread=true)) - computation |> unfake @@ -1968,6 +2039,11 @@ namespace Microsoft.FSharp.Control protectedPrimitiveWithResync (fun args -> TaskHelpers.continueWith(task, args) ) + + static member AwaitTask (task:Task) : Async = + protectedPrimitiveWithResync (fun args -> + TaskHelpers.continueWithUnit(task, args) + ) #endif module CommonExtensions = @@ -2039,18 +2115,20 @@ namespace Microsoft.FSharp.Control [] // give the extension member a 'nice', unmangled compiled name, unique within this module member req.AsyncGetResponse() : Async= - async { let canceled = ref false // WebException with Status = WebExceptionStatus.RequestCanceled can be raised in other situations except cancellation, use flag to filter out false positives - try - // Note that we specify req.Abort as the cancelAction. If successful, this will cause - // a WebExceptionStatus.RequestCanceled to be raised from the web request. - return! Async.FromBeginEnd(beginAction=req.BeginGetResponse, - endAction = req.EndGetResponse, - cancelAction = fun() -> canceled := true; req.Abort()) - with - | :? System.Net.WebException as webExn - when webExn.Status = System.Net.WebExceptionStatus.RequestCanceled && !canceled -> + let canceled = ref false // WebException with Status = WebExceptionStatus.RequestCanceled can be raised in other situations except cancellation, use flag to filter out false positives - return! Async.ReifyResult(Result.Canceled (OperationCanceledException webExn.Message)) } + // Use tryWithDispatchInfoA to allow propagation of ExceptionDispatchInfo + Async.FromBeginEnd(beginAction=req.BeginGetResponse, + endAction = req.EndGetResponse, + cancelAction = fun() -> canceled := true; req.Abort()) + |> tryWithDispatchInfoA (fun edi -> + match edi.SourceException with + | :? System.Net.WebException as webExn + when webExn.Status = System.Net.WebExceptionStatus.RequestCanceled && !canceled -> + + Async.ReifyResult(Result.Canceled (OperationCanceledException webExn.Message)) + | _ -> + edi.ThrowAny()) #endif @@ -2058,29 +2136,56 @@ namespace Microsoft.FSharp.Control #else type System.Net.WebClient with - [] // give the extension member a 'nice', unmangled compiled name, unique within this module - member this.AsyncDownloadString (address:Uri) : Async = + member inline private this.Download(event: IEvent<'T, _>, handler: _ -> 'T, start, result) = let downloadAsync = Async.FromContinuations (fun (cont, econt, ccont) -> - let userToken = new obj() - let rec handler = - System.Net.DownloadStringCompletedEventHandler (fun _ args -> - if userToken = args.UserState then - this.DownloadStringCompleted.RemoveHandler(handler) - if args.Cancelled then - ccont (new OperationCanceledException()) - elif args.Error <> null then - econt args.Error - else - cont args.Result) - this.DownloadStringCompleted.AddHandler(handler) - this.DownloadStringAsync(address, userToken) - ) + let userToken = new obj() + let rec delegate' (_: obj) (args : #ComponentModel.AsyncCompletedEventArgs) = + // ensure we handle the completed event from correct download call + if userToken = args.UserState then + event.RemoveHandler handle + if args.Cancelled then + ccont (new OperationCanceledException()) + elif args.Error <> null then + econt args.Error + else + cont (result args) + and handle = handler delegate' + event.AddHandler handle + start userToken + ) - async { + async { use! _holder = Async.OnCancel(fun _ -> this.CancelAsync()) return! downloadAsync } + + [] // give the extension member a 'nice', unmangled compiled name, unique within this module + member this.AsyncDownloadString (address:Uri) : Async = + this.Download( + event = this.DownloadStringCompleted, + handler = (fun action -> Net.DownloadStringCompletedEventHandler(action)), + start = (fun userToken -> this.DownloadStringAsync(address, userToken)), + result = (fun args -> args.Result) + ) + + [] // give the extension member a 'nice', unmangled compiled name, unique within this module + member this.AsyncDownloadData (address:Uri) : Async = + this.Download( + event = this.DownloadDataCompleted, + handler = (fun action -> Net.DownloadDataCompletedEventHandler(action)), + start = (fun userToken -> this.DownloadDataAsync(address, userToken)), + result = (fun args -> args.Result) + ) + + [] // give the extension member a 'nice', unmangled compiled name, unique within this module + member this.AsyncDownloadFile (address:Uri, fileName:string) : Async = + this.Download( + event = this.DownloadFileCompleted, + handler = (fun action -> ComponentModel.AsyncCompletedEventHandler(action)), + start = (fun userToken -> this.DownloadFileAsync(address, fileName, userToken)), + result = (fun _ -> ()) + ) #endif @@ -2092,9 +2197,9 @@ namespace Microsoft.FSharp.Control let c = new ResultCell<_>() let! ct = Async.CancellationToken let start a f = - Async.StartWithContinuations(a, + Async.StartWithContinuationsUsingDispatchInfo(a, (fun res -> c.RegisterResult(f res |> Result.Ok, reuseThread=false) |> unfake), - (fun e -> c.RegisterResult(e |> Result.Error, reuseThread=false) |> unfake), + (fun edi -> c.RegisterResult(edi |> Result.Error, reuseThread=false) |> unfake), (fun oce -> c.RegisterResult(oce |> Result.Canceled, reuseThread=false) |> unfake), cancellationToken = ct ) @@ -2108,9 +2213,12 @@ namespace Microsoft.FSharp.Control unprotectedPrimitive(fun _ -> FakeUnit) // "block" forever else let c = new ResultCell<_>() - Async.StartWithContinuations(Async.Sleep(msec), - (fun () -> c.RegisterResult((), reuseThread = false) |> unfake), - (fun _ -> ()), (fun _ -> ()), cancellationToken = cancellationToken) + Async.StartWithContinuations( + computation=Async.Sleep(msec), + continuation=(fun () -> c.RegisterResult((), reuseThread = false) |> unfake), + exceptionContinuation=ignore, + cancellationContinuation=ignore, + cancellationToken = cancellationToken) c.AwaitResult [] @@ -2367,11 +2475,14 @@ namespace Microsoft.FSharp.Control else started <- true - // Protect the execution and send errors to the event - let p = async { try - do! initial x - with err -> - errorEvent.Trigger err } + // Protect the execution and send errors to the event. + // Note that exception stack traces are lost in this design - in an extended design + // the event could propagate an ExceptionDispatchInfo instead of an Exception. + let p = + async { try + do! initial x + with exn -> + errorEvent.Trigger exn } Async.Start(computation=p, cancellationToken=cancellationToken) diff --git a/src/fsharp/FSharp.Core/control.fsi b/src/fsharp/FSharp.Core/control.fsi index 0b91f3e078d..ea3959af4d9 100644 --- a/src/fsharp/FSharp.Core/control.fsi +++ b/src/fsharp/FSharp.Core/control.fsi @@ -341,6 +341,9 @@ namespace Microsoft.FSharp.Control /// Return an asynchronous computation that will wait for the given task to complete and return /// its result. static member AwaitTask: task: Task<'T> -> Async<'T> + /// Return an asynchronous computation that will wait for the given task to complete and return + /// its result. + static member AwaitTask: task: Task -> Async #endif /// Creates an asynchronous computation that will sleep for the given time. This is scheduled @@ -723,6 +726,17 @@ namespace Microsoft.FSharp.Control /// An asynchronous computation that will wait for the download of the URI. [] // give the extension member a nice, unmangled compiled name, unique within this module member AsyncDownloadString : address:System.Uri -> Async + /// Returns an asynchronous computation that, when run, will wait for the download of the given URI. + /// The URI to retrieve. + /// An asynchronous computation that will wait for the download of the URI. + [] // give the extension member a nice, unmangled compiled name, unique within this module + member AsyncDownloadData : address:System.Uri -> Async + /// Returns an asynchronous computation that, when run, will wait for the download of the given URI to specified file. + /// The URI to retrieve. + /// The filename to save download to. + /// An asynchronous computation that will wait for the download of the URI to specified file. + [] // give the extension member a nice, unmangled compiled name, unique within this module + member AsyncDownloadFile : address:System.Uri * fileName: string -> Async #endif end diff --git a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs index e85cd43af34..0fa7edf74e2 100644 --- a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs +++ b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fs @@ -166,6 +166,14 @@ module ExtraTopLevelOperators = [] let inline int8 x = sbyte x + module Checked = + + [] + let inline uint8 x = Checked.byte x + + [] + let inline int8 x = Checked.sbyte x + #if FX_MINIMAL_REFLECTION // not on Compact Framework #else @@ -298,6 +306,7 @@ namespace Microsoft.FSharp.Core.CompilerServices abstract GetTypes : unit -> Type[] abstract ResolveTypeName : typeName: string -> Type + type ITypeProvider = inherit System.IDisposable abstract GetNamespaces : unit -> IProvidedNamespace[] @@ -314,4 +323,8 @@ namespace Microsoft.FSharp.Core.CompilerServices abstract GetParameterCustomAttributesData : assembly:System.Reflection.ParameterInfo -> System.Collections.Generic.IList #endif + type ITypeProvider2 = + abstract GetStaticParametersForMethod : methodWithoutArguments:MethodBase -> ParameterInfo[] + abstract ApplyStaticArgumentsForMethod : methodWithoutArguments:MethodBase * methodNameWithArguments:string * staticArguments:obj[] -> MethodBase + #endif diff --git a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi index bab7b44e776..1fbedfad29c 100644 --- a/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi +++ b/src/fsharp/FSharp.Core/fslib-extra-pervasives.fsi @@ -87,20 +87,36 @@ module ExtraTopLevelOperators = /// This is a direct conversion for all /// primitive numeric types. For strings, the input is converted using Double.Parse() with InvariantCulture settings. Otherwise the operation requires and invokes a ToDouble method on the input type. [] - val inline double : value:^T -> float when ^T : (static member op_Explicit : ^T -> double) and default ^T : int + val inline double : value:^T -> double when ^T : (static member op_Explicit : ^T -> double) and default ^T : int /// Converts the argument to byte. /// This is a direct conversion for all /// primitive numeric types. For strings, the input is converted using Byte.Parse() on strings and otherwise requires a ToByte method on the input type. [] - val inline uint8 : value:^T -> byte when ^T : (static member op_Explicit : ^T -> byte) and default ^T : int + val inline uint8 : value:^T -> uint8 when ^T : (static member op_Explicit : ^T -> uint8) and default ^T : int /// Converts the argument to signed byte. /// This is a direct conversion for all /// primitive numeric types. For strings, the input is converted using SByte.Parse() with InvariantCulture settings. /// Otherwise the operation requires and invokes a ToSByte method on the input type. [] - val inline int8 : value:^T -> sbyte when ^T : (static member op_Explicit : ^T -> sbyte) and default ^T : int + val inline int8 : value:^T -> int8 when ^T : (static member op_Explicit : ^T -> int8) and default ^T : int + + + module Checked = + + /// Converts the argument to byte. + /// This is a direct, checked conversion for all + /// primitive numeric types. For strings, the input is converted using Byte.Parse() on strings and otherwise requires a ToByte method on the input type. + [] + val inline uint8 : value:^T -> byte when ^T : (static member op_Explicit : ^T -> uint8) and default ^T : int + + /// Converts the argument to signed byte. + /// This is a direct, checked conversion for all + /// primitive numeric types. For strings, the input is converted using SByte.Parse() with InvariantCulture settings. + /// Otherwise the operation requires and invokes a ToSByte method on the input type. + [] + val inline int8 : value:^T -> sbyte when ^T : (static member op_Explicit : ^T -> int8) and default ^T : int /// Builds a read-only lookup table from a sequence of key/value pairs. The key objects are indexed using generic hashing and equality. @@ -261,6 +277,9 @@ namespace Microsoft.FSharp.Core.CompilerServices #endif + /// + /// Represents a namespace provided by a type provider component. + /// type IProvidedNamespace = /// Namespace name the provider injects types into. abstract NamespaceName : string @@ -282,6 +301,9 @@ namespace Microsoft.FSharp.Core.CompilerServices /// abstract ResolveTypeName : typeName: string -> Type + /// + /// Represents an instantiation of a type provider component. + /// type ITypeProvider = inherit System.IDisposable @@ -331,4 +353,25 @@ namespace Microsoft.FSharp.Core.CompilerServices abstract GetParameterCustomAttributesData : assembly:System.Reflection.ParameterInfo -> System.Collections.Generic.IList #endif + /// Represents additional, optional information for a type provider component + type ITypeProvider2 = + + /// + /// Get the static parameters for a provided method. + /// + /// A method returned by GetMethod on a provided type + /// The static parameters of the provided method, if any + + abstract GetStaticParametersForMethod : methodWithoutArguments:MethodBase -> ParameterInfo[] + + /// + /// Apply static arguments to a provided method that accepts static arguments. + /// + /// The provider must return a provided method with the given mangled name. + /// the provided method definition which has static parameters + /// the full name of the method that must be returned, including encoded representations of static parameters + /// the values of the static parameters, indexed by name + /// The provided method definition corresponding to the given static parameter values + abstract ApplyStaticArgumentsForMethod : methodWithoutArguments:MethodBase * methodNameWithArguments:string * staticArguments:obj[] -> MethodBase + #endif diff --git a/src/fsharp/FSharp.Core/list.fs b/src/fsharp/FSharp.Core/list.fs index 08e118d5999..541e5e31fc3 100644 --- a/src/fsharp/FSharp.Core/list.fs +++ b/src/fsharp/FSharp.Core/list.fs @@ -16,8 +16,24 @@ namespace Microsoft.FSharp.Collections [] module List = + let inline indexNotFound() = raise (new System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) + [] let length (list: 'T list) = list.Length + + [] + let rec last (list : 'T list) = + match list with + | [x] -> x + | _ :: tail -> last tail + | [] -> invalidArg "list" (SR.GetString(SR.inputListWasEmpty)) + + [] + let rec tryLast (list: 'T list) = + match list with + | [x] -> Some x + | _ :: tail -> tryLast tail + | [] -> None [] let rev list = Microsoft.FSharp.Primitives.Basics.List.rev list @@ -25,14 +41,59 @@ namespace Microsoft.FSharp.Collections [] let concat lists = Microsoft.FSharp.Primitives.Basics.List.concat lists + [] + let countBy projection (list:'T list) = + let dict = new Dictionary,int>(Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox<'Key>.Comparer) + let rec loop srcList = + match srcList with + | [] -> () + | h::t -> + let key = Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox (projection h) + let mutable prev = 0 + if dict.TryGetValue(key, &prev) then dict.[key] <- prev + 1 else dict.[key] <- 1 + loop t + loop list + let mutable result = [] + for group in dict do + result <- (group.Key.Value, group.Value) :: result + result |> rev + [] let map f list = Microsoft.FSharp.Primitives.Basics.List.map f list [] let mapi f list = Microsoft.FSharp.Primitives.Basics.List.mapi f list + [] + let indexed list = Microsoft.FSharp.Primitives.Basics.List.indexed list + + [] + let mapFold<'T,'State,'Result> (f:'State -> 'T -> 'Result * 'State) acc list = + Microsoft.FSharp.Primitives.Basics.List.mapFold f acc list + + [] + let mapFoldBack<'T,'State,'Result> (f:'T -> 'State -> 'Result * 'State) list acc = + match list with + | [] -> [], acc + | [h] -> let h',s' = f h acc in [h'], s' + | _ -> + let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) + let rec loop res list = + match list, res with + | [], _ -> res + | h::t, (list', acc') -> + let h',s' = f.Invoke(h,acc') + loop (h'::list', s') t + loop ([], acc) (rev list) + [] let iter f list = Microsoft.FSharp.Primitives.Basics.List.iter f list + + [] + let distinct (list:'T list) = Microsoft.FSharp.Primitives.Basics.List.distinctWithComparer HashIdentity.Structural<'T> list + + [] + let distinctBy keyf (list:'T list) = Microsoft.FSharp.Primitives.Basics.List.distinctByWithComparer HashIdentity.Structural<_> keyf list [] let ofArray (array:'T array) = Microsoft.FSharp.Primitives.Basics.List.ofArray array @@ -46,6 +107,9 @@ namespace Microsoft.FSharp.Collections [] let head list = match list with (x:: _) -> x | [] -> invalidArg "list" (SR.GetString(SR.inputListWasEmpty)) + [] + let tryHead list = match list with (x:: _) -> Some x | [] -> None + [] let tail list = match list with (_ :: t) -> t | [] -> invalidArg "list" (SR.GetString(SR.inputListWasEmpty)) @@ -55,14 +119,25 @@ namespace Microsoft.FSharp.Collections [] let append list1 list2 = list1 @ list2 - [] - let rec nth list index = - match list with - | h::t when index >= 0 -> - if index = 0 then h else nth t (index - 1) - | _ -> + [] + let rec item index list = + match list with + | h::t when index >= 0 -> + if index = 0 then h else item (index - 1) t + | _ -> invalidArg "index" (SR.GetString(SR.indexOutOfBounds)) + [] + let rec tryItem index list = + match list with + | h::t when index >= 0 -> + if index = 0 then Some h else tryItem (index - 1) t + | _ -> + None + + [] + let nth list index = item index list + let rec chooseAllAcc f xs acc = match xs with | [] -> rev acc @@ -73,6 +148,15 @@ namespace Microsoft.FSharp.Collections [] let choose f xs = chooseAllAcc f xs [] + + [] + let splitAt index (list:'T list) = Microsoft.FSharp.Primitives.Basics.List.splitAt index list + + [] + let take count (list : 'T list) = Microsoft.FSharp.Primitives.Basics.List.take count list + + [] + let takeWhile p (list: 'T list) = Microsoft.FSharp.Primitives.Basics.List.takeWhile p list [] let iteri f list = Microsoft.FSharp.Primitives.Basics.List.iteri f list @@ -145,6 +229,13 @@ namespace Microsoft.FSharp.Collections | h::t -> loop (f.Invoke(s,h)) t loop s list + [] + let pairwise (list: 'T list) = + let array = List.toArray list + if array.Length < 2 then [] else + List.init (array.Length-1) (fun i -> array.[i],array.[i+1]) + + [] let reduce f list = match list with @@ -160,6 +251,9 @@ namespace Microsoft.FSharp.Collections | (h::t) -> let s = f.Invoke(s,h) in loop s t (s :: acc) loop s list [s] + [] + let inline singleton value = [value] + [] let fold2<'T1,'T2,'State> f (acc:'State) (list1:list<'T1>) (list2:list<'T2>) = let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) @@ -269,6 +363,14 @@ namespace Microsoft.FSharp.Collections [] let exists f list1 = Microsoft.FSharp.Primitives.Basics.List.exists f list1 + + [] + let inline contains e list1 = + let rec contains e xs1 = + match xs1 with + | [] -> false + | (h1::t1) -> e = h1 || contains e t1 + contains e list1 let rec exists2aux (f:OptimizedClosures.FSharpFunc<_,_,_>) list1 list2 = match list1,list2 with @@ -285,11 +387,17 @@ namespace Microsoft.FSharp.Collections exists2aux f list1 list2 [] - let rec find f list = match list with [] -> raise (System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) | h::t -> if f h then h else find f t + let rec find f list = match list with [] -> indexNotFound() | h::t -> if f h then h else find f t [] let rec tryFind f list = match list with [] -> None | h::t -> if f h then Some h else tryFind f t + [] + let findBack f list = list |> toArray |> Array.findBack f + + [] + let tryFindBack f list = list |> toArray |> Array.tryFindBack f + [] let rec tryPick f list = match list with @@ -302,7 +410,7 @@ namespace Microsoft.FSharp.Collections [] let rec pick f list = match list with - | [] -> raise (System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) + | [] -> indexNotFound() | h::t -> match f h with | None -> pick f t @@ -311,6 +419,46 @@ namespace Microsoft.FSharp.Collections [] let filter f x = Microsoft.FSharp.Primitives.Basics.List.filter f x + [] + let except itemsToExclude list = + match box itemsToExclude with + | null -> nullArg "itemsToExclude" + | _ -> () + + match list with + | [] -> list + | _ -> + let cached = HashSet(itemsToExclude, HashIdentity.Structural) + list |> filter cached.Add + + [] + let where f x = Microsoft.FSharp.Primitives.Basics.List.filter f x + + [] + let groupBy keyf (list: 'T list) = + let dict = new Dictionary,ResizeArray<'T>>(Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox<'Key>.Comparer) + + // Build the groupings + let rec loop list = + match list with + | v :: t -> + let key = Microsoft.FSharp.Core.CompilerServices.RuntimeHelpers.StructBox (keyf v) + let ok,prev = dict.TryGetValue(key) + if ok then + prev.Add(v) + else + let prev = new ResizeArray<'T>(1) + dict.[key] <- prev + prev.Add(v) + loop t + | _ -> () + loop list + + // Return the list-of-lists. + dict + |> Seq.map (fun group -> (group.Key.Value, Seq.toList group.Value)) + |> Seq.toList + [] let partition p x = Microsoft.FSharp.Primitives.Basics.List.partition p x @@ -320,14 +468,45 @@ namespace Microsoft.FSharp.Collections [] let unzip3 x = Microsoft.FSharp.Primitives.Basics.List.unzip3 x + [] + let windowed n x = Microsoft.FSharp.Primitives.Basics.List.windowed n x + + [] + let chunkBySize chunkSize list = Microsoft.FSharp.Primitives.Basics.List.chunkBySize chunkSize list + + [] + let splitInto count list = Microsoft.FSharp.Primitives.Basics.List.splitInto count list + [] let zip x1 x2 = Microsoft.FSharp.Primitives.Basics.List.zip x1 x2 [] let zip3 x1 x2 x3 = Microsoft.FSharp.Primitives.Basics.List.zip3 x1 x2 x3 + [] + let skip count list = + if count <= 0 then list else + let rec loop i lst = + match lst with + | _ when i = 0 -> lst + | _::t -> loop (i-1) t + | [] -> invalidArg "count" (SR.GetString(SR.outOfRange)) + loop count list + + [] + let rec skipWhile p xs = + match xs with + | head :: tail when p head -> skipWhile p tail + | _ -> xs + [] - let sortWith cmp xs = Microsoft.FSharp.Primitives.Basics.List.sortWith cmp xs + let sortWith cmp xs = + match xs with + | [] | [_] -> xs + | _ -> + let array = List.toArray xs + Microsoft.FSharp.Primitives.Basics.Array.stableSortInPlaceWith cmp array + List.ofArray array [] let sortBy f xs = @@ -347,6 +526,16 @@ namespace Microsoft.FSharp.Collections Microsoft.FSharp.Primitives.Basics.Array.stableSortInPlace array List.ofArray array + [] + let inline sortByDescending f xs = + let inline compareDescending a b = compare (f b) (f a) + sortWith compareDescending xs + + [] + let inline sortDescending xs = + let inline compareDescending a b = compare b a + sortWith compareDescending xs + [] let ofSeq source = Seq.toList source @@ -355,7 +544,7 @@ namespace Microsoft.FSharp.Collections [] let findIndex f list = - let rec loop n = function[] -> raise (System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) | h::t -> if f h then n else loop (n+1) t + let rec loop n = function[] -> indexNotFound() | h::t -> if f h then n else loop (n+1) t loop 0 list [] @@ -363,6 +552,12 @@ namespace Microsoft.FSharp.Collections let rec loop n = function[] -> None | h::t -> if f h then Some n else loop (n+1) t loop 0 list + [] + let findIndexBack f list = list |> toArray |> Array.findIndexBack f + + [] + let tryFindIndexBack f list = list |> toArray |> Array.tryFindIndexBack f + [] let inline sum (list:list<_>) = Seq.sum list @@ -390,6 +585,31 @@ namespace Microsoft.FSharp.Collections [] let collect f list = Microsoft.FSharp.Primitives.Basics.List.collect f list + [] + let inline compareWith (comparer:'T -> 'T -> int) (list1: 'T list) (list2: 'T list) = + let rec loop list1 list2 = + match list1, list2 with + | head1 :: tail1, head2 :: tail2 -> + let c = comparer head1 head2 + if c = 0 then loop tail1 tail2 else c + | [], [] -> 0 + | _, [] -> 1 + | [], _ -> -1 + + loop list1 list2 + [] let permute indexMap list = list |> toArray |> Array.permute indexMap |> ofArray + [] + let exactlyOne (source : list<_>) = + match source with + | [x] -> x + | [] -> invalidArg "source" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString + | _ -> invalidArg "source" (SR.GetString(SR.inputSequenceTooLong)) + + [] + let truncate count list = Microsoft.FSharp.Primitives.Basics.List.truncate count list + + [] + let unfold<'T,'State> (f:'State -> ('T*'State) option) (s:'State) = Microsoft.FSharp.Primitives.Basics.List.unfold f s diff --git a/src/fsharp/FSharp.Core/list.fsi b/src/fsharp/FSharp.Core/list.fsi index 305d412f922..dfffdce32ea 100644 --- a/src/fsharp/FSharp.Core/list.fsi +++ b/src/fsharp/FSharp.Core/list.fsi @@ -54,6 +54,14 @@ namespace Microsoft.FSharp.Collections [] val choose: chooser:('T -> 'U option) -> list:'T list -> 'U list + /// Divides the input list into chunks of size at most chunkSize. + /// The maximum size of each chunk. + /// The input list. + /// The list divided into chunks. + /// Thrown when chunkSize is not positive. + [] + val chunkBySize: chunkSize:int -> list:'T list -> 'T list list + /// For each element of the list, applies the given function. Concatenates all the results and return the combined list. /// The function to transform each input element into a sublist to be concatenated. /// The input list. @@ -61,17 +69,101 @@ namespace Microsoft.FSharp.Collections [] val collect: mapping:('T -> 'U list) -> list:'T list -> 'U list + /// Compares two lists using the given comparison function, element by element. + /// Returns the first non-zero result from the comparison function. If the end of a list + /// is reached it returns a -1 if the first list is shorter and a 1 if the second list + /// is shorter. + /// + /// A function that takes an element from each list and returns an int. + /// If it evaluates to a non-zero value iteration is stopped and that value is returned. + /// The first input list. + /// The second input list. + /// + /// The first non-zero value from the comparison function. + [] + val inline compareWith: comparer:('T -> 'T -> int) -> list1:'T list -> list2:'T list -> int + /// Returns a new list that contains the elements of each the lists in order. /// The input sequence of lists. /// The resulting concatenated list. [] val concat: lists:seq<'T list> -> 'T list + + /// Tests if the list contains the specified element. + /// The value to locate in the input list. + /// The input list. + /// True if the input list contains the specified element; false otherwise. + [] + val inline contains: value:'T -> source:'T list -> bool when 'T : equality + + /// Returns a list that contains no duplicate entries according to generic hash and + /// equality comparisons on the entries. + /// If an element occurs multiple times in the list then the later occurrences are discarded. + /// + /// The input list. + /// + /// The result list. + [] + val distinct: list:'T list -> 'T list when 'T : equality + + /// Returns a list that contains no duplicate entries according to the + /// generic hash and equality comparisons on the keys returned by the given key-generating function. + /// If an element occurs multiple times in the list then the later occurrences are discarded. + /// + /// A function transforming the list items into comparable keys. + /// The input list. + /// + /// The result list. + [] + val distinctBy: projection:('T -> 'Key) -> list:'T list -> 'T list when 'Key : equality + + /// Applies a key-generating function to each element of a list and returns a list yielding unique + /// keys and their number of occurrences in the original list. + /// + /// A function transforming each item of the input list into a key to be + /// compared against the others. + /// The input list. + /// + /// The result list. + [] + val countBy : projection:('T -> 'Key) -> list:'T list -> ('Key * int) list when 'Key : equality + + /// Splits the input list into at most count chunks. + /// The maximum number of chunks. + /// The input list. + /// The list split into chunks. + /// Thrown when count is not positive. + [] + val splitInto: count:int -> list:'T list -> 'T list list /// Returns an empty list of the given type. [] [] val empty<'T> : 'T list + /// Returns a new list with the distinct elements of the input list which do not appear in the itemsToExclude sequence, + /// using generic hash and equality comparisons to compare values. + /// + /// A sequence whose elements that also occur in the input list will cause those elements to be + /// removed from the result. + /// A list whose elements that are not also in itemsToExclude will be returned. + /// + /// A list that contains the distinct elements of list that do not appear in itemsToExclude. + /// + /// Thrown when itemsToExclude is null. + [] + val except: itemsToExclude:seq<'T> -> list:'T list -> 'T list when 'T : equality + + /// Returns the only element of the list. + /// + /// The input list. + /// + /// The only element of the list. + /// + /// Thrown when the input does not have precisely one element. + [] + val exactlyOne: list:'T list -> 'T + /// Tests if any element of the list satisfies the given predicate. /// /// The predicate is applied to the elements of the input list. If any application @@ -108,6 +200,16 @@ namespace Microsoft.FSharp.Collections [] val find: predicate:('T -> bool) -> list:'T list -> 'T + /// Returns the last element for which the given function returns true. + /// Raises KeyNotFoundException if no such element exists. + /// The function to test the input elements. + /// The input list. + /// Thrown if the predicate evaluates to false for + /// all the elements of the list. + /// The last element that satisfies the predicate. + [] + val findBack: predicate:('T -> bool) -> list:'T list -> 'T + /// Returns the index of the first element in the list /// that satisfies the given predicate. /// Raises KeyNotFoundException if no such element exists. @@ -119,6 +221,17 @@ namespace Microsoft.FSharp.Collections [] val findIndex: predicate:('T -> bool) -> list:'T list -> int + /// Returns the index of the last element in the list + /// that satisfies the given predicate. + /// Raises KeyNotFoundException if no such element exists. + /// The function to test the input elements. + /// The input list. + /// Thrown if the predicate evaluates to false for all the + /// elements of the list. + /// The index of the last element that satisfies the predicate. + [] + val findIndexBack: predicate:('T -> bool) -> list:'T list -> int + /// Returns a new collection containing only the elements of the collection /// for which the given predicate returns "true" /// The function to test the input elements. @@ -152,13 +265,13 @@ namespace Microsoft.FSharp.Collections [] val fold2<'T1,'T2,'State> : folder:('State -> 'T1 -> 'T2 -> 'State) -> state:'State -> list1:'T1 list -> list2:'T2 list -> 'State - /// Applies a function to each element of the collection, threading an accumulator argument + /// Applies a function to each element of the collection, starting from the end, threading an accumulator argument /// through the computation. If the input function is f and the elements are i0...iN then /// computes f i0 (...(f iN s)). /// The function to update the state given the input elements. /// The input list. /// The initial state. - /// The final state value. + /// The state object after the folding function is applied to each element of the list. [] val foldBack<'T,'State> : folder:('T -> 'State -> 'State) -> list:'T list -> state:'State -> 'State @@ -200,6 +313,17 @@ namespace Microsoft.FSharp.Collections [] val forall2: predicate:('T1 -> 'T2 -> bool) -> list1:'T1 list -> list2:'T2 list -> bool + /// Applies a key-generating function to each element of a list and yields a list of + /// unique keys. Each unique key contains a list of all elements that match + /// to this key. + /// + /// A function that transforms an element of the list into a comparable key. + /// The input list. + /// + /// The result list. + [] + val groupBy : projection:('T -> 'Key) -> list:'T list -> ('Key * 'T list) list when 'Key : equality + /// Returns the first element of the list. /// /// The input list. @@ -208,6 +332,13 @@ namespace Microsoft.FSharp.Collections [] val head: list:'T list -> 'T + /// Returns a new list whose elements are the corresponding elements + /// of the input list paired with the index (from 0) of each element. + /// The input list. + /// The list of indexed elements. + [] + val indexed: list:'T list -> (int * 'T) list + /// Creates a list by calling the given generator on each index. /// The length of the list to generate. /// The function to generate an element from an index. @@ -221,6 +352,14 @@ namespace Microsoft.FSharp.Collections [] val isEmpty: list:'T list -> bool + /// Indexes into the list. The first element has index 0. + /// The index to retrieve. + /// The input list. + /// The value at the given index. + /// Thrown when the index is negative or the input list does not contain enough elements. + [] + val item: index:int -> list:'T list -> 'T + /// Applies the given function to each element of the collection. /// The function to apply to elements from the input list. /// The input list. @@ -251,12 +390,26 @@ namespace Microsoft.FSharp.Collections [] val iteri2: action:(int -> 'T1 -> 'T2 -> unit) -> list1:'T1 list -> list2:'T2 list -> unit + /// Returns the last element of the list. + /// The input list. + /// The last element of the list. + /// Thrown when the input does not have any elements. + [] + val last: list:'T list -> 'T + /// Returns the length of the list. /// The input list. /// The length of the list. [] val length: list:'T list -> int + /// Returns the last element of the list. + /// Return None if no such element exists. + /// The input list. + /// The last element of the list or None. + [] + val tryLast: list:'T list -> 'T option + /// Builds a new collection whose elements are the results of applying the given function /// to each of the elements of the collection. /// The function to transform elements from the input list. @@ -284,6 +437,24 @@ namespace Microsoft.FSharp.Collections [] val map3: mapping:('T1 -> 'T2 -> 'T3 -> 'U) -> list1:'T1 list -> list2:'T2 list -> list3:'T3 list -> 'U list + /// Combines map and fold. Builds a new list whose elements are the results of applying the given function + /// to each of the elements of the input list. The function is also used to accumulate a final value. + /// The function to transform elements from the input list and accumulate the final value. + /// The initial state. + /// The input list. + /// The list of transformed elements, and the final accumulated value. + [] + val mapFold<'T,'State,'Result> : mapping:('State -> 'T -> 'Result * 'State) -> state:'State -> list:'T list -> 'Result list * 'State + + /// Combines map and foldBack. Builds a new list whose elements are the results of applying the given function + /// to each of the elements of the input list. The function is also used to accumulate a final value. + /// The function to transform elements from the input list and accumulate the final value. + /// The input list. + /// The initial state. + /// The list of transformed elements, and the final accumulated value. + [] + val mapFoldBack<'T,'State,'Result> : mapping:('T -> 'State -> 'Result * 'State) -> list:'T list -> state:'State -> 'Result list * 'State + /// Builds a new collection whose elements are the results of applying the given function /// to each of the elements of the collection. The integer index passed to the /// function indicates the index (from 0) of element being transformed. @@ -343,7 +514,9 @@ namespace Microsoft.FSharp.Collections /// The input list. /// The index to retrieve. /// The value at the given index. + /// Thrown when the index is negative or the input list does not contain enough elements. [] + [] val nth: list:'T list -> index:int -> 'T /// Builds a list from the given array. @@ -358,6 +531,15 @@ namespace Microsoft.FSharp.Collections [] val ofSeq: source:seq<'T> -> 'T list + /// Returns a list of each element in the input list and its predecessor, with the + /// exception of the first element which is only returned as the predecessor of the second element. + /// + /// The input list. + /// + /// The result list. + [] + val pairwise: list:'T list -> ('T * 'T) list + /// Splits the collection into two collections, containing the /// elements for which the given predicate returns true and false /// respectively. Element order is preserved in both of the created lists. @@ -382,7 +564,8 @@ namespace Microsoft.FSharp.Collections /// specified permutation. /// The function to map input indices to output indices. /// The input list. - /// The permutated list. + /// The permuted list. + /// Thrown when indexMap does not produce a valid permutation. [] val permute : indexMap:(int -> int) -> list:'T list -> 'T list @@ -400,19 +583,18 @@ namespace Microsoft.FSharp.Collections [] val reduce: reduction:('T -> 'T -> 'T) -> list:'T list -> 'T - /// Applies a function to each element of the collection, threading an accumulator argument + /// Applies a function to each element of the collection, starting from the end, threading an accumulator argument /// through the computation. If the input function is f and the elements are i0...iN then computes /// f i0 (...(f iN-1 iN)). - /// - /// Raises System.ArgumentException if list is empty - /// The function to reduce two list elements to a single element. + /// A function that takes in the next-to-last element of the list and the + /// current accumulated result to produce the next accumulated result. /// The input list. /// Thrown when the list is empty. - /// The final reduced value. + /// The final result of the reductions. [] val reduceBack: reduction:('T -> 'T -> 'T) -> list:'T list -> 'T - /// Creates a list by calling the given generator on each index. + /// Creates a list by replicating the given initial value. /// The number of elements to replicate. /// The value to replicate /// The generated list. @@ -444,6 +626,31 @@ namespace Microsoft.FSharp.Collections [] val scanBack<'T,'State> : folder:('T -> 'State -> 'State) -> list:'T list -> state:'State -> 'State list + /// Returns a list that contains one item only. + /// + /// The input item. + /// + /// The result list of one item. + [] + val inline singleton: value:'T -> 'T list + + /// Returns the list after removing the first N elements. + /// The number of elements to skip. + /// The input list. + /// The list after removing the first N elements. + /// Thrown when count is negative or exceeds the number of + /// elements in the list. + [] + val skip: count:int -> list: 'T list -> 'T list + + /// Bypasses elements in a list while the given predicate returns true, and then returns + /// the remaining elements of the list. + /// A function that evaluates an element of the list to a boolean value. + /// The input list. + /// The result list. + [] + val skipWhile: predicate:('T -> bool) -> list:'T list -> 'T list + /// Sorts the given list using the given comparison function. /// /// This is a stable sort, i.e. the original order of equal elements is preserved. @@ -470,6 +677,33 @@ namespace Microsoft.FSharp.Collections [] val sort: list:'T list -> 'T list when 'T : comparison + /// Splits a list into two lists, at the given index. + /// The index at which the list is split. + /// The input list. + /// The two split lists. + /// + /// Thrown when split index exceeds the number of elements + /// in the list. + [] + val splitAt: index:int -> list:'T list -> ('T list * 'T list) + + /// Sorts the given list in descending order using keys given by the given projection. Keys are compared using Operators.compare. + /// + /// This is a stable sort, i.e. the original order of equal elements is preserved. + /// The function to transform the list elements into the type to be compared. + /// The input list. + /// The sorted list. + [] + val inline sortByDescending: projection:('T -> 'Key) -> list:'T list -> 'T list when 'Key : comparison + + /// Sorts the given list in descending order using Operators.compare. + /// + /// This is a stable sort, i.e. the original order of equal elements is preserved. + /// The input list. + /// The sorted list. + [] + val inline sortDescending: list:'T list -> 'T list when 'T : comparison + /// Returns the sum of the elements in the list. /// The input list. /// The resulting sum. @@ -495,6 +729,32 @@ namespace Microsoft.FSharp.Collections [] val tail: list:'T list -> 'T list + /// Returns the first N elements of the list. + /// Throws InvalidOperationException + /// if the count exceeds the number of elements in the list. List.truncate + /// returns as many items as the list contains instead of throwing an exception. + /// + /// The number of items to take. + /// The input list. + /// + /// The result list. + /// + /// Thrown when the input list is empty. + /// Thrown when count exceeds the number of elements + /// in the list. + [] + val take: count:int -> list:'T list -> 'T list + + /// Returns a list that contains all elements of the original list while the + /// given predicate returns true, and then returns no further elements. + /// + /// A function that evaluates to false when no more items should be returned. + /// The input list. + /// + /// The result list. + [] + val takeWhile: predicate:('T -> bool) -> list:'T list -> 'T list + /// Builds an array from the given list. /// The input list. /// The array containing the elements of the list. @@ -507,6 +767,20 @@ namespace Microsoft.FSharp.Collections [] val toSeq: list:'T list -> seq<'T> + /// Returns the first element of the list, or + /// None if the list is empty. + /// The input list. + /// The first element of the list or None. + [] + val tryHead: list:'T list -> 'T option + + /// Returns at most N elements in a new list. + /// The maximum number of items to return. + /// The input list. + /// The result list. + [] + val truncate: count:int -> list:'T list -> 'T list + /// Applies the given function to successive elements, returning Some(x) the first /// result where function returns Some(x) for some x. If no such element /// exists then return None. @@ -525,6 +799,15 @@ namespace Microsoft.FSharp.Collections [] val tryFind: predicate:('T -> bool) -> list:'T list -> 'T option + /// Returns the last element for which the given function returns true.. + /// Return None if no such element exists. + /// The function to test the input elements. + /// The input list. + /// The last element for which the predicate returns true, or None if + /// every element evaluates to false. + [] + val tryFindBack: predicate:('T -> bool) -> list:'T list -> 'T option + /// Returns the index of the first element in the list /// that satisfies the given predicate. /// Return None if no such element exists. @@ -535,6 +818,33 @@ namespace Microsoft.FSharp.Collections [] val tryFindIndex: predicate:('T -> bool) -> list:'T list -> int option + /// Tries to find the nth element in the list. + /// Returns None if index is negative or the list does not contain enough elements. + /// The index to retrieve. + /// The input list. + /// The value at the given index or None. + [] + val tryItem: index:int -> list:'T list -> 'T option + + /// Returns the index of the last element in the list + /// that satisfies the given predicate. + /// Return None if no such element exists. + /// The function to test the input elements. + /// The input list. + /// The index of the last element for which the predicate returns true, or None if + /// every element evaluates to false. + [] + val tryFindIndexBack: predicate:('T -> bool) -> list:'T list -> int option + + /// Returns a list that contains the elements generated by the given computation. + /// The given initial state argument is passed to the element generator. + /// A function that takes in the current state and returns an option tuple of the next + /// element of the list and the next state value. + /// The initial state value. + /// The result list. + [] + val unfold<'T,'State> : generator:('State -> ('T * 'State) option) -> state:'State -> 'T list + /// Splits a list of pairs into two lists. /// The input list. /// Two lists of split elements. @@ -546,6 +856,23 @@ namespace Microsoft.FSharp.Collections /// Three lists of split elements. [] val unzip3: list:('T1 * 'T2 * 'T3) list -> ('T1 list * 'T2 list * 'T3 list) + + /// Returns a new list containing only the elements of the list + /// for which the given predicate returns "true" + /// The function to test the input elements. + /// The input list. + /// A list containing only the elements that satisfy the predicate. + [] + val where: predicate:('T -> bool) -> list:'T list -> 'T list + + /// Returns a list of sliding windows containing elements drawn from the input + /// list. Each window is returned as a fresh list. + /// The number of elements in each window. + /// The input list. + /// The result list. + /// Thrown when windowSize is not positive. + [] + val windowed : windowSize:int -> list:'T list -> 'T list list /// Combines the two lists into a list of pairs. The two lists must have equal lengths. /// The first input list. diff --git a/src/fsharp/FSharp.Core/local.fs b/src/fsharp/FSharp.Core/local.fs index 927f87ed5ea..ae109683b7e 100644 --- a/src/fsharp/FSharp.Core/local.fs +++ b/src/fsharp/FSharp.Core/local.fs @@ -29,6 +29,49 @@ module internal List = let inline setFreshConsTail cons t = cons.(::).1 <- t let inline freshConsNoTail h = h :: (# "ldnull" : 'T list #) + let rec distinctToFreshConsTail cons (hashSet:HashSet<_>) list = + match list with + | [] -> setFreshConsTail cons [] + | (x::rest) -> + if hashSet.Add(x) then + let cons2 = freshConsNoTail x + setFreshConsTail cons cons2 + distinctToFreshConsTail cons2 hashSet rest + else + distinctToFreshConsTail cons hashSet rest + + let distinctWithComparer (comparer: System.Collections.Generic.IEqualityComparer<'T>) (list:'T list) = + match list with + | [] -> [] + | [h] -> [h] + | (x::rest) -> + let hashSet = System.Collections.Generic.HashSet<'T>(comparer) + hashSet.Add(x) |> ignore + let cons = freshConsNoTail x + distinctToFreshConsTail cons hashSet rest + cons + + let rec distinctByToFreshConsTail cons (hashSet:HashSet<_>) keyf list = + match list with + | [] -> setFreshConsTail cons [] + | (x::rest) -> + if hashSet.Add(keyf x) then + let cons2 = freshConsNoTail x + setFreshConsTail cons cons2 + distinctByToFreshConsTail cons2 hashSet keyf rest + else + distinctByToFreshConsTail cons hashSet keyf rest + + let distinctByWithComparer (comparer: System.Collections.Generic.IEqualityComparer<'Key>) (keyf:'T -> 'Key) (list:'T list) = + match list with + | [] -> [] + | [h] -> [h] + | (x::rest) -> + let hashSet = System.Collections.Generic.HashSet<'Key>(comparer) + hashSet.Add(keyf x) |> ignore + let cons = freshConsNoTail x + distinctByToFreshConsTail cons hashSet keyf rest + cons let rec mapToFreshConsTail cons f x = match x with @@ -87,6 +130,48 @@ module internal List = cons | _ -> invalidArg "xs2" (SR.GetString(SR.listsHadDifferentLengths)) + let rec indexedToFreshConsTail cons xs i = + match xs with + | [] -> + setFreshConsTail cons []; + | (h::t) -> + let cons2 = freshConsNoTail (i,h) + setFreshConsTail cons cons2; + indexedToFreshConsTail cons2 t (i+1) + + let indexed xs = + match xs with + | [] -> [] + | [h] -> [(0,h)] + | (h::t) -> + let cons = freshConsNoTail (0,h) + indexedToFreshConsTail cons t 1 + cons + + let rec mapFoldToFreshConsTail cons (f:OptimizedClosures.FSharpFunc<'State, 'T, 'U * 'State>) acc xs = + match xs with + | [] -> + setFreshConsTail cons []; + acc + | (h::t) -> + let x',s' = f.Invoke(acc,h) + let cons2 = freshConsNoTail x' + setFreshConsTail cons cons2; + mapFoldToFreshConsTail cons2 f s' t + + let mapFold f acc xs = + match xs with + | [] -> [], acc + | [h] -> + let x',s' = f acc h + [x'],s' + | (h::t) -> + let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) + let x',s' = f.Invoke(acc,h) + let cons = freshConsNoTail x' + let s' = mapFoldToFreshConsTail cons f s' t + cons, s' + let rec forall f xs1 = match xs1 with | [] -> true @@ -248,7 +333,48 @@ module internal List = initToFreshConsTail res 1 count f res - + let rec takeFreshConsTail cons n l = + if n = 0 then setFreshConsTail cons [] else + match l with + | [] -> raise <| System.InvalidOperationException (SR.GetString(SR.notEnoughElements)) + | x::xs -> + let cons2 = freshConsNoTail x + setFreshConsTail cons cons2 + takeFreshConsTail cons2 (n - 1) xs + + let take n l = + if n < 0 then invalidArg "count" LanguagePrimitives.ErrorStrings.InputMustBeNonNegativeString + if n = 0 then [] else + match l with + | [] -> raise <| System.InvalidOperationException (SR.GetString(SR.notEnoughElements)) + | x::xs -> + let cons = freshConsNoTail x + takeFreshConsTail cons (n - 1) xs + cons + + let rec splitAtFreshConsTail cons index l = + if index = 0 then + setFreshConsTail cons [] + l + else + match l with + | [] -> raise <| System.InvalidOperationException (SR.GetString(SR.notEnoughElements)) + | x :: xs -> + let cons2 = freshConsNoTail x + setFreshConsTail cons cons2 + splitAtFreshConsTail cons2 (index - 1) xs + + let splitAt index l = + if index < 0 then invalidArg "index" (SR.GetString(SR.inputMustBeNonNegative)) + if index = 0 then [], l else + match l with + | [] -> raise <| System.InvalidOperationException (SR.GetString(SR.notEnoughElements)) + | [_] -> if index = 1 then l, [] else raise <| System.InvalidOperationException (SR.GetString(SR.notEnoughElements)) + | x::xs -> + if index = 1 then [x], xs else + let cons = freshConsNoTail x + let tail = splitAtFreshConsTail cons (index - 1) xs + cons, tail // optimized mutation-based implementation. This code is only valid in fslib, where mutation of private // tail cons cells is permitted in carefully written library code. @@ -304,7 +430,43 @@ module internal List = if p h then cons, (partitionToFreshConsTailLeft cons p t) else (partitionToFreshConsTailRight cons p t), cons - + + let rec truncateToFreshConsTail cons count list = + if count = 0 then setFreshConsTail cons [] else + match list with + | [] -> setFreshConsTail cons [] + | h::t -> + let cons2 = freshConsNoTail h + setFreshConsTail cons cons2; + truncateToFreshConsTail cons2 (count-1) t + + let truncate count list = + match list with + | [] -> list + | _ :: ([] as nil) -> if count > 0 then list else nil + | h::t -> + if count <= 0 then [] + else + let cons = freshConsNoTail h + truncateToFreshConsTail cons (count-1) t + cons + + let rec unfoldToFreshConsTail cons f s = + match f s with + | None -> setFreshConsTail cons [] + | Some (x,s') -> + let cons2 = freshConsNoTail x + setFreshConsTail cons cons2 + unfoldToFreshConsTail cons2 f s' + + let unfold (f:'State -> ('T * 'State) option) (s:'State) = + match f s with + | None -> [] + | Some (x,s') -> + let cons = freshConsNoTail x + unfoldToFreshConsTail cons f s' + cons + // optimized mutation-based implementation. This code is only valid in fslib, where mutation of private // tail cons cells is permitted in carefully written library code. let rec unzipToFreshConsTail cons1a cons1b x = @@ -361,6 +523,77 @@ module internal List = unzip3ToFreshConsTail res1a res1b res1c t; res1a,res1b,res1c + let rec windowedToFreshConsTail cons windowSize i list = + if i = 0 then + setFreshConsTail cons [] + else + let cons2 = freshConsNoTail <| take windowSize list + setFreshConsTail cons cons2 + windowedToFreshConsTail cons2 windowSize (i - 1) list.Tail + + let windowed windowSize (list: 'T list) = + if windowSize <= 0 then invalidArg "windowSize" (SR.GetString(SR.inputMustBePositive)) + let len = list.Length + if windowSize > len then + [] + else + let cons = freshConsNoTail <| take windowSize list + windowedToFreshConsTail cons windowSize (len - windowSize) list.Tail + cons + + let rec chunkBySizeToFreshConsTail chunkCons resCons chunkSize i list = + match list with + | [] -> + setFreshConsTail chunkCons [] + setFreshConsTail resCons [] + | h::t -> + let cons = freshConsNoTail h + if i = chunkSize then + setFreshConsTail chunkCons [] + let newResCons = freshConsNoTail cons + setFreshConsTail resCons newResCons + chunkBySizeToFreshConsTail cons newResCons chunkSize 1 t + else + setFreshConsTail chunkCons cons + chunkBySizeToFreshConsTail cons resCons chunkSize (i+1) t + + let chunkBySize chunkSize list = + if chunkSize <= 0 then invalidArg "chunkSize" (SR.GetString(SR.inputMustBePositive)) + match list with + | [] -> [] + | head::tail -> + let chunkCons = freshConsNoTail head + let res = freshConsNoTail chunkCons + chunkBySizeToFreshConsTail chunkCons res chunkSize 1 tail + res + + let rec splitIntoToFreshConsTail chunkCons resCons lenDivCount lenModCount i j list = + match list with + | [] -> + setFreshConsTail chunkCons [] + setFreshConsTail resCons [] + | h::t -> + let cons = freshConsNoTail h + if (i < lenModCount && j = lenDivCount + 1) || (i >= lenModCount && j = lenDivCount) then + setFreshConsTail chunkCons [] + let newResCons = freshConsNoTail cons + setFreshConsTail resCons newResCons + splitIntoToFreshConsTail cons newResCons lenDivCount lenModCount (i + 1) 1 t + else + setFreshConsTail chunkCons cons + splitIntoToFreshConsTail cons resCons lenDivCount lenModCount i (j + 1) t + + let splitInto count (list: _ list) = + if count <= 0 then invalidArg "count" (SR.GetString(SR.inputMustBePositive)) + match list.Length with + | 0 -> [] + | len -> + let chunkCons = freshConsNoTail list.Head + let res = freshConsNoTail chunkCons + let count = min len count + splitIntoToFreshConsTail chunkCons res (len / count) (len % count) 0 1 list.Tail + res + // optimized mutation-based implementation. This code is only valid in fslib, where mutation of private // tail cons cells is permitted in carefully written library code. let rec zipToFreshConsTail cons xs1 xs2 = @@ -412,66 +645,27 @@ module internal List = | _ -> invalidArg "xs1" (SR.GetString(SR.listsHadDifferentLengths)) - // NOTE: This implementation is now only used for List.sortWith. We should change that to use the stable sort via arrays - // below, and remove this implementation. - module StableSortImplementation = - // Internal copy of stable sort - let rec revAppend xs1 xs2 = - match xs1 with - | [] -> xs2 - | h::t -> revAppend t (h::xs2) - let half x = x >>> 1 - - let rec merge cmp a b acc = - match a,b with - | [], a | a,[] -> revAppend acc a - | x::a', y::b' -> if cmp x y > 0 then merge cmp a b' (y::acc) else merge cmp a' b (x::acc) - - let sort2 cmp x y = - if cmp x y > 0 then [y;x] else [x;y] - - let sort3 cmp x y z = - let cxy = cmp x y - let cyz = cmp y z - if cxy > 0 && cyz < 0 then - if cmp x z > 0 then [y;z;x] else [y;x;z] - elif cxy < 0 && cyz > 0 then - if cmp x z > 0 then [z;x;y] else [x;z;y] - elif cxy > 0 then - if cyz > 0 then [z;y;x] - else [y;z;x] - else - if cyz > 0 then [z;x;y] - else [x;y;z] + let rec takeWhileFreshConsTail cons p l = + match l with + | [] -> setFreshConsTail cons [] + | x::xs -> + if p x then + let cons2 = freshConsNoTail x + setFreshConsTail cons cons2 + takeWhileFreshConsTail cons2 p xs + else + setFreshConsTail cons [] + + let takeWhile p (l: 'T list) = + match l with + | [] -> l + | x :: ([] as nil) -> if p x then l else nil + | x::xs -> + if not (p x) then [] else + let cons = freshConsNoTail x + takeWhileFreshConsTail cons p xs + cons - let trivial a = match a with [] | [_] -> true | _ -> false - - (* tail recursive using a ref *) - - let rec stableSortInner cmp la ar = - if la < 4 then (* sort two || three new entries *) - match !ar with - | x::y::b -> - if la = 2 then ( ar := b; sort2 cmp x y ) - else begin - match b with - | z::c -> ( ar := c; sort3 cmp x y z ) - | _ -> failwith "never" - end - | _ -> failwith "never" - else (* divide *) - let lb = half la - let sb = stableSortInner cmp lb ar - let sc = stableSortInner cmp (la - lb) ar - merge cmp sb sc [] - - let stableSort cmp (a: 'T list) = - if trivial a then a else - let ar = ref a - stableSortInner cmp a.Length ar - - let sortWith cmp a = StableSortImplementation.stableSort cmp a - module internal Array = open System @@ -517,7 +711,7 @@ module internal Array = qs(start, last) type System.Array with - static member Sort<'Key,'Value when 'Key : comparison>(keys : 'Key[], values : 'Value[], comparer : IComparer<'Key>) = + static member Sort<'Key,'Value>(keys : 'Key[], values : 'Value[], comparer : IComparer<'Key>) = let valuesExist = match values with | null -> false @@ -525,9 +719,8 @@ module internal Array = match keys,values with | null,_ -> raise (ArgumentNullException()) | _,_ when valuesExist && (keys.Length <> values.Length) -> raise (ArgumentException()) - | _,_ -> - let comparer = match comparer with null -> LanguagePrimitives.FastGenericComparer<'Key> | _ -> comparer - qsort(keys, values, 0, keys.Length-1, comparer) + | _,_ -> qsort(keys, values, 0, keys.Length-1, comparer) + static member Sort<'Key,'Value when 'Key : comparison>(keys : 'Key[], values : 'Value[]) = let valuesExist = match values with @@ -536,24 +729,22 @@ module internal Array = match keys,values with | null,_ -> raise (ArgumentNullException()) | _,_ when valuesExist && (keys.Length <> values.Length) -> raise (ArgumentException()) - | _,_ -> - qsort(keys,values,0,keys.Length-1,LanguagePrimitives.FastGenericComparer<'Key>) -(* - static member Sort<'Key,'Value when 'Key : comparison>(keys : 'Key[], values : 'Value[], start : int, last : int) = - match keys with - | null -> raise (ArgumentNullException()) - | _ -> - qsort(keys,values,start,last,LanguagePrimitives.FastGenericComparer<'Key>) -*) - static member Sort<'Key,'Value when 'Key : comparison>(keys : 'Key[], values : 'Value[], start : int, length : int, comparer : IComparer<'Key>) = + | _,_ -> qsort(keys,values,0,keys.Length-1,LanguagePrimitives.FastGenericComparer<'Key>) + + static member Sort<'Key,'Value>(keys : 'Key[], values : 'Value[], start : int, length : int, comparer : IComparer<'Key>) = match keys with | null -> raise (ArgumentNullException()) - | _ -> - let comparer = match comparer with null -> LanguagePrimitives.FastGenericComparer<'Key> | _ -> comparer - qsort(keys,values,start,start+length-1,comparer) + | _ -> qsort(keys,values,start,start+length-1,comparer) #else #endif + let inline fastComparerForArraySort<'t when 't : comparison> () = +#if FX_NO_ARRAY_KEY_SORT + LanguagePrimitives.FastGenericComparer<'t> +#else + LanguagePrimitives.FastGenericComparerCanBeNull<'t> +#endif + // The input parameter should be checked by callers if necessary let inline zeroCreateUnchecked (count:int) = (# "newarr !0" type ('T) count : 'T array #) @@ -565,6 +756,36 @@ module internal Array = arr.[i] <- f i arr + let inline indexNotFound() = raise (new System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) + + let findBack f (array: _[]) = + let rec loop i = + if i < 0 then indexNotFound() + elif f array.[i] then array.[i] + else loop (i - 1) + loop (array.Length - 1) + + let tryFindBack f (array: _[]) = + let rec loop i = + if i < 0 then None + elif f array.[i] then Some array.[i] + else loop (i - 1) + loop (array.Length - 1) + + let findIndexBack f (array: _[]) = + let rec loop i = + if i < 0 then indexNotFound() + elif f array.[i] then i + else loop (i - 1) + loop (array.Length - 1) + + let tryFindIndexBack f (array: _[]) = + let rec loop i = + if i < 0 then None + elif f array.[i] then Some i + else loop (i - 1) + loop (array.Length - 1) + let permute indexMap (arr : _[]) = let res = zeroCreateUnchecked arr.Length let inv = zeroCreateUnchecked arr.Length @@ -577,6 +798,41 @@ module internal Array = if inv.[i] <> 1uy then invalidArg "indexMap" (SR.GetString(SR.notAPermutation)) res + let mapFold f acc (array : _[]) = + match array.Length with + | 0 -> [| |], acc + | len -> + let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) + let mutable acc = acc + let res = zeroCreateUnchecked len + for i = 0 to len - 1 do + let h',s' = f.Invoke(acc,array.[i]) + res.[i] <- h' + acc <- s' + res, acc + + let mapFoldBack f (array : _[]) acc = + match array.Length with + | 0 -> [| |], acc + | len -> + let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) + let mutable acc = acc + let res = zeroCreateUnchecked len + for i = len - 1 downto 0 do + let h',s' = f.Invoke(array.[i],acc) + res.[i] <- h' + acc <- s' + res, acc + + let scanSubRight f (array : _[]) start fin initState = + let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) + let mutable state = initState + let res = zeroCreateUnchecked (fin-start+2) + res.[fin - start + 1] <- state + for i = fin downto start do + state <- f.Invoke(array.[i], state); + res.[i - start] <- state + res let unstableSortInPlaceBy (f: 'T -> 'U) (array : array<'T>) = let len = array.Length @@ -585,31 +841,27 @@ module internal Array = let keys = zeroCreateUnchecked array.Length for i = 0 to array.Length - 1 do keys.[i] <- f array.[i] - System.Array.Sort<_,_>(keys, array, LanguagePrimitives.FastGenericComparerCanBeNull<_>) - + System.Array.Sort<_,_>(keys, array, fastComparerForArraySort()) let unstableSortInPlace (array : array<'T>) = let len = array.Length if len < 2 then () - else System.Array.Sort<_>(array, LanguagePrimitives.FastGenericComparerCanBeNull<_>) + else System.Array.Sort<_>(array, fastComparerForArraySort()) - let stableSortWithKeys (array:array<'T>) (keys:array<'Key>) = + 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.[i] <- i - - let cFast = LanguagePrimitives.FastGenericComparerCanBeNull<'Key> - System.Array.Sort<_,_>(keys, places, cFast) + System.Array.Sort<_,_>(keys, places, cFast) // 'array2' is a copy of the original values let array2 = (array.Clone() :?> array<'T>) - // 'c' is a comparer for the keys - let c = LanguagePrimitives.FastGenericComparer<'Key> - // Walk through any chunks where the keys are equal let mutable i = 0 let len = array.Length + let intCompare = fastComparerForArraySort() + while i < len do let mutable j = i let ki = keys.[i] @@ -618,10 +870,15 @@ module internal Array = // Copy the values into the result array and re-sort the chunk if needed by the original place indexes for n = i to j - 1 do array.[n] <- array2.[places.[n]] - if j - i >= 2 then - System.Array.Sort<_,_>(places, array, i, j-i, null) + if j - i >= 2 then + System.Array.Sort<_,_>(places, array, i, j-i, intCompare) i <- j + let stableSortWithKeys (array:array<'T>) (keys:array<'Key>) = + let cFast = fastComparerForArraySort() + let c = LanguagePrimitives.FastGenericComparer<'Key> + stableSortWithKeysAndComparer cFast c array keys + let stableSortInPlaceBy (f: 'T -> 'U) (array : array<'T>) = let len = array.Length if len < 2 then () @@ -641,12 +898,20 @@ module internal Array = | null -> // An optimization for the cases where the keys and values coincide and do not have identity, e.g. are integers // In this case an unstable sort is just as good as a stable sort (and faster) - System.Array.Sort<_,_>(array, null) + System.Array.Sort<_,_>(array, null) | _ -> // 'keys' is an array storing the projected keys let keys = (array.Clone() :?> array<'T>) stableSortWithKeys array keys + let stableSortInPlaceWith (comparer:'T -> 'T -> int) (array : array<'T>) = + let len = array.Length + 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) } + stableSortWithKeysAndComparer c c array keys + let inline subUnchecked startIndex count (array : 'T[]) = let res = zeroCreateUnchecked count : 'T[] if count < 64 then @@ -655,3 +920,20 @@ module internal Array = else Array.Copy(array, startIndex, res, 0, count) res + + let splitInto count (array : 'T[]) = + let len = array.Length + if len = 0 then + [| |] + else + let count = min count len + let res = zeroCreateUnchecked count : 'T[][] + let minChunkSize = len / count + let startIndex = ref 0 + for i = 0 to len % count - 1 do + res.[i] <- subUnchecked !startIndex (minChunkSize + 1) array + startIndex := !startIndex + minChunkSize + 1 + for i = len % count to count - 1 do + res.[i] <- subUnchecked !startIndex minChunkSize array + startIndex := !startIndex + minChunkSize + res diff --git a/src/fsharp/FSharp.Core/local.fsi b/src/fsharp/FSharp.Core/local.fsi index da00ddd5630..8c3f604096f 100644 --- a/src/fsharp/FSharp.Core/local.fsi +++ b/src/fsharp/FSharp.Core/local.fsi @@ -7,6 +7,8 @@ open Microsoft.FSharp.Core open Microsoft.FSharp.Collections module internal List = + val distinctWithComparer : System.Collections.Generic.IEqualityComparer<'T> -> 'T list -> 'T list + val distinctByWithComparer : System.Collections.Generic.IEqualityComparer<'Key> -> ('T -> 'Key) -> list:'T list -> 'T list when 'Key : equality val init : int -> (int -> 'T) -> 'T list val iter : ('T -> unit) -> 'T list -> unit val filter : predicate:('T -> bool) -> 'T list -> 'T list @@ -15,19 +17,28 @@ module internal List = val map : mapping:('T -> 'U) -> 'T list -> 'U list val map2 : mapping:('T1 -> 'T2 -> 'U) -> 'T1 list -> 'T2 list -> 'U list val mapi : (int -> 'T -> 'U) -> 'T list -> 'U list + val indexed : 'T list -> (int * 'T) list + val mapFold : ('State -> 'T -> 'U * 'State) -> 'State -> 'T list -> 'U list * 'State val forall : predicate:('T -> bool) -> 'T list -> bool val exists : predicate:('T -> bool) -> 'T list -> bool val rev: 'T list -> 'T list val concat : seq<'T list> -> 'T list val iteri : action:(int -> 'T -> unit) -> 'T list -> unit + val unfold : ('State -> ('T * 'State) option) -> 'State -> 'T list val unzip : ('T1 * 'T2) list -> 'T1 list * 'T2 list val unzip3 : ('T1 * 'T2 * 'T3) list -> 'T1 list * 'T2 list * 'T3 list + val windowed : int -> 'T list -> 'T list list + val chunkBySize : int -> 'T list -> 'T list list + val splitInto : int -> 'T list -> 'T list list val zip : 'T1 list -> 'T2 list -> ('T1 * 'T2) list val zip3 : 'T1 list -> 'T2 list -> 'T3 list -> ('T1 * 'T2 * 'T3) list val ofArray : 'T[] -> 'T list + val take : int -> 'T list -> 'T list + val takeWhile : ('T -> bool) -> 'T list -> 'T list val toArray : 'T list -> 'T[] val inline ofSeq : seq<'T> -> 'T List - val sortWith : ('T -> 'T -> int) -> 'T list -> 'T list + val splitAt : int -> 'T list -> ('T list * 'T list) + val truncate : int -> 'T list -> 'T list module internal Array = // The input parameter should be checked by callers if necessary @@ -35,7 +46,23 @@ module internal Array = val inline init : int -> (int -> 'T) -> 'T[] + val splitInto : int -> 'T[] -> 'T[][] + + val findBack: predicate:('T -> bool) -> array:'T[] -> 'T + + val tryFindBack: predicate:('T -> bool) -> array:'T[] -> 'T option + + val findIndexBack: predicate:('T -> bool) -> array:'T[] -> int + + val tryFindIndexBack: predicate:('T -> bool) -> array:'T[] -> int option + + val mapFold : ('State -> 'T -> 'U * 'State) -> 'State -> 'T[] -> 'U[] * 'State + + val mapFoldBack : ('T -> 'State -> 'U * 'State) -> 'T[] -> 'State -> 'U[] * 'State + val permute : indexMap:(int -> int) -> 'T[] -> 'T[] + + val scanSubRight: f:('T -> 'State -> 'State) -> array:'T[] -> start:int -> fin:int -> initState:'State -> 'State[] val inline subUnchecked : int -> int -> 'T[] -> 'T[] @@ -45,4 +72,6 @@ module internal Array = val stableSortInPlaceBy: projection:('T -> 'Key) -> array:'T[] -> unit when 'Key : comparison + val stableSortInPlaceWith: comparer:('T -> 'T -> int) -> array:'T[] -> unit + val stableSortInPlace: array:'T[] -> unit when 'T : comparison diff --git a/src/fsharp/FSharp.Core/map.fs b/src/fsharp/FSharp.Core/map.fs index 4bff9c59eb7..be2d96db02d 100644 --- a/src/fsharp/FSharp.Core/map.fs +++ b/src/fsharp/FSharp.Core/map.fs @@ -157,10 +157,10 @@ namespace Microsoft.FSharp.Collections elif c = 0 then Some v2 else tryFind comparer k r - let partition1 (comparer: IComparer<'Value>) f k v (acc1,acc2) = - if f k v then (add comparer k v acc1,acc2) else (acc1,add comparer k v acc2) + let partition1 (comparer: IComparer<'Value>) (f:OptimizedClosures.FSharpFunc<_,_,_>) k v (acc1,acc2) = + if f.Invoke(k, v) then (add comparer k v acc1,acc2) else (acc1,add comparer k v acc2) - let rec partitionAux (comparer: IComparer<'Value>) f s acc = + let rec partitionAux (comparer: IComparer<'Value>) (f:OptimizedClosures.FSharpFunc<_,_,_>) s acc = match s with | MapEmpty -> acc | MapOne(k,v) -> partition1 comparer f k v acc @@ -169,11 +169,11 @@ namespace Microsoft.FSharp.Collections let acc = partition1 comparer f k v acc partitionAux comparer f l acc - let partition (comparer: IComparer<'Value>) f s = partitionAux comparer f s (empty,empty) + let partition (comparer: IComparer<'Value>) f s = partitionAux comparer (OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f)) s (empty,empty) - let filter1 (comparer: IComparer<'Value>) f k v acc = if f k v then add comparer k v acc else acc + let filter1 (comparer: IComparer<'Value>) (f:OptimizedClosures.FSharpFunc<_,_,_>) k v acc = if f.Invoke(k, v) then add comparer k v acc else acc - let rec filterAux (comparer: IComparer<'Value>) f s acc = + let rec filterAux (comparer: IComparer<'Value>) (f:OptimizedClosures.FSharpFunc<_,_,_>) s acc = match s with | MapEmpty -> acc | MapOne(k,v) -> filter1 comparer f k v acc @@ -182,7 +182,7 @@ namespace Microsoft.FSharp.Collections let acc = filter1 comparer f k v acc filterAux comparer f r acc - let filter (comparer: IComparer<'Value>) f s = filterAux comparer f s empty + let filter (comparer: IComparer<'Value>) f s = filterAux comparer (OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f)) s empty let rec spliceOutSuccessor m = match m with @@ -220,36 +220,44 @@ namespace Microsoft.FSharp.Collections if c < 0 then mem comparer k l else (c = 0 || mem comparer k r) - let rec iter f m = + let rec iterOpt (f:OptimizedClosures.FSharpFunc<_,_,_>) m = match m with | MapEmpty -> () - | MapOne(k2,v2) -> f k2 v2 - | MapNode(k2,v2,l,r,_) -> iter f l; f k2 v2; iter f r + | MapOne(k2,v2) -> f.Invoke(k2, v2) + | MapNode(k2,v2,l,r,_) -> iterOpt f l; f.Invoke(k2, v2); iterOpt f r - let rec tryPick f m = + let iter f m = iterOpt (OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f)) m + + let rec tryPickOpt (f:OptimizedClosures.FSharpFunc<_,_,_>) m = match m with | MapEmpty -> None - | MapOne(k2,v2) -> f k2 v2 + | MapOne(k2,v2) -> f.Invoke(k2, v2) | MapNode(k2,v2,l,r,_) -> - match tryPick f l with + match tryPickOpt f l with | Some _ as res -> res | None -> - match f k2 v2 with + match f.Invoke(k2, v2) with | Some _ as res -> res | None -> - tryPick f r + tryPickOpt f r + + let tryPick f m = tryPickOpt (OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f)) m - let rec exists f m = + let rec existsOpt (f:OptimizedClosures.FSharpFunc<_,_,_>) m = match m with | MapEmpty -> false - | MapOne(k2,v2) -> f k2 v2 - | MapNode(k2,v2,l,r,_) -> exists f l || f k2 v2 || exists f r + | MapOne(k2,v2) -> f.Invoke(k2, v2) + | MapNode(k2,v2,l,r,_) -> existsOpt f l || f.Invoke(k2, v2) || existsOpt f r + + let exists f m = existsOpt (OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f)) m - let rec forall f m = + let rec forallOpt (f:OptimizedClosures.FSharpFunc<_,_,_>) m = match m with | MapEmpty -> true - | MapOne(k2,v2) -> f k2 v2 - | MapNode(k2,v2,l,r,_) -> forall f l && f k2 v2 && forall f r + | MapOne(k2,v2) -> f.Invoke(k2, v2) + | MapNode(k2,v2,l,r,_) -> forallOpt f l && f.Invoke(k2, v2) && forallOpt f r + + let forall f m = forallOpt (OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f)) m let rec map f m = match m with @@ -261,53 +269,61 @@ namespace Microsoft.FSharp.Collections let r2 = map f r MapNode(k,v2,l2, r2,h) - let rec mapi f m = + let rec mapiOpt (f:OptimizedClosures.FSharpFunc<_,_,_>) m = match m with | MapEmpty -> empty - | MapOne(k,v) -> MapOne(k,f k v) + | MapOne(k,v) -> MapOne(k, f.Invoke(k, v)) | MapNode(k,v,l,r,h) -> - let l2 = mapi f l - let v2 = f k v - let r2 = mapi f r + let l2 = mapiOpt f l + let v2 = f.Invoke(k, v) + let r2 = mapiOpt f r MapNode(k,v2, l2, r2,h) - let rec foldBack (f:OptimizedClosures.FSharpFunc<_,_,_,_>) m x = + let mapi f m = mapiOpt (OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f)) m + + let rec foldBackOpt (f:OptimizedClosures.FSharpFunc<_,_,_,_>) m x = match m with | MapEmpty -> x | MapOne(k,v) -> f.Invoke(k,v,x) | MapNode(k,v,l,r,_) -> - let x = foldBack f r x + let x = foldBackOpt f r x let x = f.Invoke(k,v,x) - foldBack f l x + foldBackOpt f l x + + let foldBack f m x = foldBackOpt (OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f)) m x - let rec fold (f:OptimizedClosures.FSharpFunc<_,_,_,_>) x m = + let rec foldOpt (f:OptimizedClosures.FSharpFunc<_,_,_,_>) x m = match m with | MapEmpty -> x | MapOne(k,v) -> f.Invoke(x,k,v) | MapNode(k,v,l,r,_) -> - let x = fold f x l + let x = foldOpt f x l let x = f.Invoke(x,k,v) - fold f x r + foldOpt f x r - let foldSection (comparer: IComparer<'Value>) lo hi f m x = - let rec foldFromTo f m x = + let fold f x m = foldOpt (OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f)) x m + + let foldSectionOpt (comparer: IComparer<'Value>) lo hi (f:OptimizedClosures.FSharpFunc<_,_,_,_>) m x = + let rec foldFromTo (f:OptimizedClosures.FSharpFunc<_,_,_,_>) m x = match m with | MapEmpty -> x | MapOne(k,v) -> let cLoKey = comparer.Compare(lo,k) let cKeyHi = comparer.Compare(k,hi) - let x = if cLoKey <= 0 && cKeyHi <= 0 then f k v x else x + let x = if cLoKey <= 0 && cKeyHi <= 0 then f.Invoke(k, v, x) else x x | MapNode(k,v,l,r,_) -> let cLoKey = comparer.Compare(lo,k) let cKeyHi = comparer.Compare(k,hi) - let x = if cLoKey < 0 then foldFromTo f l x else x - let x = if cLoKey <= 0 && cKeyHi <= 0 then f k v x else x - let x = if cKeyHi < 0 then foldFromTo f r x else x + let x = if cLoKey < 0 then foldFromTo f l x else x + let x = if cLoKey <= 0 && cKeyHi <= 0 then f.Invoke(k, v, x) else x + let x = if cKeyHi < 0 then foldFromTo f r x else x x if comparer.Compare(lo,hi) = 1 then x else foldFromTo f m x + let foldSection (comparer: IComparer<'Value>) lo hi f m x = + foldSectionOpt comparer lo hi (OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f)) m x let toList m = let rec loop m acc = @@ -504,9 +520,7 @@ namespace Microsoft.FSharp.Collections member m.Exists(f) = MapTree.exists f tree member m.Filter(f) : Map<'Key,'Value> = new Map<'Key,'Value>(comparer ,MapTree.filter comparer f tree) member m.ForAll(f) = MapTree.forall f tree - member m.Fold f acc = - let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) - MapTree.foldBack f tree acc + member m.Fold f acc = MapTree.foldBack f tree acc member m.FoldSection (lo:'Key) (hi:'Key) f (acc:'z) = MapTree.foldSection comparer lo hi f tree acc @@ -694,14 +708,10 @@ namespace Microsoft.FSharp.Collections let map f (m:Map<_,_>) = m.Map(f) [] - let fold<'Key,'T,'State when 'Key : comparison> f (z:'State) (m:Map<'Key,'T>) = - let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) - MapTree.fold f z m.Tree + let fold<'Key,'T,'State when 'Key : comparison> f (z:'State) (m:Map<'Key,'T>) = MapTree.fold f z m.Tree [] - let foldBack<'Key,'T,'State when 'Key : comparison> f (m:Map<'Key,'T>) (z:'State) = - let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) - MapTree.foldBack f m.Tree z + let foldBack<'Key,'T,'State when 'Key : comparison> f (m:Map<'Key,'T>) (z:'State) = MapTree.foldBack f m.Tree z [] let toSeq (m:Map<_,_>) = m |> Seq.map (fun kvp -> kvp.Key, kvp.Value) @@ -729,7 +739,5 @@ namespace Microsoft.FSharp.Collections [] let toArray (m:Map<_,_>) = m.ToArray() - [] - let empty<'Key,'Value when 'Key : comparison> = Map<'Key,'Value>.Empty - + let empty<'Key,'Value when 'Key : comparison> = Map<'Key,'Value>.Empty \ No newline at end of file diff --git a/src/fsharp/FSharp.Core/option.fs b/src/fsharp/FSharp.Core/option.fs index a36c94dae36..eec8bf383a7 100644 --- a/src/fsharp/FSharp.Core/option.fs +++ b/src/fsharp/FSharp.Core/option.fs @@ -44,9 +44,23 @@ namespace Microsoft.FSharp.Core [] let bind f inp = match inp with None -> None | Some x -> f x + [] + let filter f inp = match inp with None -> None | Some x -> if f x then Some x else None + [] let toArray option = match option with None -> [| |] | Some x -> [| x |] [] let toList option = match option with None -> [ ] | Some x -> [ x ] + [] + let toNullable option = match option with None -> System.Nullable() | Some v -> System.Nullable(v) + + [] + let ofNullable (value:System.Nullable<'T>) = if value.HasValue then Some value.Value else None + + [] + let ofObj value = match value with null -> None | _ -> Some value + + [] + let toObj value = match value with None -> null | Some x -> x diff --git a/src/fsharp/FSharp.Core/option.fsi b/src/fsharp/FSharp.Core/option.fsi index b8909563f1e..c9bea0f908e 100644 --- a/src/fsharp/FSharp.Core/option.fsi +++ b/src/fsharp/FSharp.Core/option.fsi @@ -94,6 +94,12 @@ namespace Microsoft.FSharp.Core [] val bind: binder:('T -> 'U option) -> option:'T option -> 'U option + /// filter f inp evaluates to match inp with None -> None | Some x -> if f x then Some x else None. + /// A function that evaluates whether the value contained in the option should remain, or be filtered out. + /// The input option. + /// The input if the predicate evaluates to true; otherwise, None. + [] + val filter: predicate:('T -> bool) -> option:'T option -> 'T option /// Convert the option to an array of length 0 or 1. /// The input option. @@ -108,3 +114,26 @@ namespace Microsoft.FSharp.Core val toList: option:'T option -> 'T list + /// Convert the option to a Nullable value. + /// The input option. + /// The result value. + [] + val toNullable: option:'T option -> Nullable<'T> + + /// Convert a Nullable value to an option. + /// The input nullable value. + /// The result option. + [] + val ofNullable: value:Nullable<'T> -> 'T option + + /// Convert a potentially null value to an option. + /// The input value. + /// The result option. + [] + val ofObj: value: 'T -> 'T option when 'T : null + + /// Convert an option to a potentially null value. + /// The input value. + /// The result value, which is null if the input was None. + [] + val toObj: value: 'T option -> 'T when 'T : null diff --git a/src/fsharp/FSharp.Core/prim-types.fs b/src/fsharp/FSharp.Core/prim-types.fs index 50b02a731bd..24e6f71c967 100644 --- a/src/fsharp/FSharp.Core/prim-types.fs +++ b/src/fsharp/FSharp.Core/prim-types.fs @@ -127,8 +127,10 @@ namespace Microsoft.FSharp.Core [] [] - type AllowNullLiteralAttribute() = + type AllowNullLiteralAttribute(value: bool) = inherit System.Attribute() + member x.Value = value + new () = new AllowNullLiteralAttribute(true) [] [] @@ -204,10 +206,12 @@ namespace Microsoft.FSharp.Core type NoComparisonAttribute() = inherit System.Attribute() - [] + [] [] - type ReflectedDefinitionAttribute() = + type ReflectedDefinitionAttribute(includeValue: bool) = inherit System.Attribute() + new() = ReflectedDefinitionAttribute(false) + member x.IncludeValue = includeValue [] [] @@ -257,13 +261,19 @@ namespace Microsoft.FSharp.Core [] type CompilationMappingAttribute(sourceConstructFlags:SourceConstructFlags, variantNumber:int, - sequenceNumber:int) = + sequenceNumber:int, + resourceName:string, + typeDefinitions:System.Type[]) = inherit System.Attribute() member x.SourceConstructFlags = sourceConstructFlags member x.SequenceNumber = sequenceNumber member x.VariantNumber = variantNumber new(sourceConstructFlags) = CompilationMappingAttribute(sourceConstructFlags,0,0) new(sourceConstructFlags,sequenceNumber) = CompilationMappingAttribute(sourceConstructFlags,0,sequenceNumber) + new(sourceConstructFlags,variantNumber,sequenceNumber) = CompilationMappingAttribute(sourceConstructFlags,variantNumber,sequenceNumber,null,null) + new(resourceName, typeDefinitions) = CompilationMappingAttribute(SourceConstructFlags.None,0,0,resourceName, typeDefinitions) + member x.TypeDefinitions = typeDefinitions + member x.ResourceName = resourceName [] [] @@ -646,17 +656,17 @@ namespace Microsoft.FSharp.Core module LanguagePrimitives = - [] - type (* internal *) ErrorStrings = + + module (* internal *) ErrorStrings = // inline functions cannot call GetString, so we must make these bits public - static member AddressOpNotFirstClassString with get () = SR.GetString(SR.addressOpNotFirstClass) - static member NoNegateMinValueString with get () = SR.GetString(SR.noNegateMinValue) + let AddressOpNotFirstClassString = SR.GetString(SR.addressOpNotFirstClass) + let NoNegateMinValueString = SR.GetString(SR.noNegateMinValue) // needs to be public to be visible from inline function 'average' and others - static member InputSequenceEmptyString with get () = SR.GetString(SR.inputSequenceEmpty) + let InputSequenceEmptyString = SR.GetString(SR.inputSequenceEmpty) // needs to be public to be visible from inline function 'average' and others - static member InputArrayEmptyString with get () = SR.GetString(SR.arrayWasEmpty) + let InputArrayEmptyString = SR.GetString(SR.arrayWasEmpty) // needs to be public to be visible from inline function 'average' and others - static member InputMustBeNonNegativeString with get () = SR.GetString(SR.inputMustBeNonNegative) + let InputMustBeNonNegativeString = SR.GetString(SR.inputMustBeNonNegative) [] // nested module OK module IntrinsicOperators = @@ -855,7 +865,6 @@ namespace Microsoft.FSharp.Core SetArray3D dst (src1+i) (src2+j) (src3+k) (GetArray3D src i j k) - let inline GetArray4D (arr: 'T[,,,]) (n1:int) (n2:int) (n3:int) (n4:int) = (# "ldelem.multi 4 !0" type ('T) arr n1 n2 n3 n4 : 'T #) let inline SetArray4D (arr: 'T[,,,]) (n1:int) (n2:int) (n3:int) (n4:int) (x:'T) = (# "stelem.multi 4 !0" type ('T) arr n1 n2 n3 n4 x #) let inline Array4DLength1 (arr: 'T[,,,]) = (# "ldlen.multi 4 0" arr : int #) @@ -895,6 +904,10 @@ namespace Microsoft.FSharp.Core module HashCompare = + //------------------------------------------------------------------------- + // LangaugePrimitives.HashCompare: Physical Equality + //------------------------------------------------------------------------- + // NOTE: compiler/optimizer is aware of this function and optimizes calls to it in many situations // where it is known that PhysicalEqualityObj is identical to reference comparison let PhysicalEqualityIntrinsic (x:'T) (y:'T) : bool when 'T : not struct = @@ -915,59 +928,43 @@ namespace Microsoft.FSharp.Core //------------------------------------------------------------------------- - // Bi-modal generic comparison helper implementation. - // - // For structured data (records, tuples, unions) the IComparable implementation on - // types is run in either Equivalence Relation or Partial Equivalence Relation (PER) mode. - // - // In the second mode, generic comparison of two NaN values is recorded by clearing - // the PERMode.mode variable. PER mode can also be thought of as "no pair of NaNs detected yet" mode. - // Entry points that care about NaN pairs set the PERMode.mode variable and if it remains un-set by - // the end of their execution then no NaN pair was detected. + // LangaugePrimitives.HashCompare: Comparison // - // From the library spec point of view: - // - GenericComparisonWithComparer will (a) make IComparable calls in the same mode as - // called and (b) if in PER node then a NaN pair will cause the outer operation that entered - // PER mode to return false. - // - // - GenericLessThan, GenericGreaterThan etc. enters PER mode and retores the previous PER mode on exit - // - // - GenericComparison clears PER mode and retores the previous PER mode on exit + // Bi-modal generic comparison helper implementation. // - // - GenericEquality is implemented via obj.Equals and always has ER semantics + // The comparison implementation is run in either Equivalence Relation or Partial + // Equivalence Relation (PER) mode which governs what happens when NaNs are compared. // - // Note that some representations chosen by F# are legitimately allowed to be null, e.g. the empty list. - // However, because null values don't support the polymorphic virtual comparison operation CompareTo - // the test for nullness must be made on the caller side. + // Some representations chosen by F# are legitimately allowed to be null, e.g. the None value. + // However, null values don't support the polymorphic virtual comparison operation CompareTo + // so the test for nullness must be made on the caller side. //------------------------------------------------------------------------- - let FailGenericComparison (obj: obj) = raise (new System.ArgumentException(SR.GetString1(SR.genericCompareFail1, obj.GetType().ToString()))) + /// This type has two instances - fsComparerER and fsComparerThrow. + /// - fsComparerER = ER semantics = no throw on NaN comparison = new GenericComparer(false) = GenericComparer = GenericComparison + /// - fsComparerPER = PER semantics = local throw on NaN comparison = new GenericComparer(true) = LessThan/GreaterThan etc. type GenericComparer(throwsOnPER:bool) = - interface System.Collections.IComparer - abstract CompareC : obj * obj -> int // implemented further below - member c.ThrowsOnPER() = throwsOnPER + member c.ThrowsOnPER = throwsOnPER + /// The unique exception object that is thrown locally when NaNs are compared in PER mode (by fsComparerPER) + /// This exception should never be observed by user code. let NaNException = new System.Exception() + /// Implements generic comparison between two objects. This corresponds to the pseudo-code in the F# + /// specification. The treatment of NaNs is governed by "comp". let rec GenericCompare (comp:GenericComparer) (xobj:obj,yobj:obj) = (*if objEq xobj yobj then 0 else *) - //System.Console.WriteLine("xobj = {0}, yobj = {1}, NaNs = {2}, PERMode.mode = {3}", [| xobj; yobj; box PER_NAN_PAIR_DETECTED; box PERMode.mode |]) match xobj,yobj with | null,null -> 0 | null,_ -> -1 | _,null -> 1 -#if INVARIANT_CULTURE_STRING_COMPARISON - // Use invariant culture comparison for strings - | (:? string as x),(:? string as y) -> System.String.Compare(x, y, false, CultureInfo.InvariantCulture) -#else // Use Ordinal comparison for strings | (:? string as x),(:? string as y) -> System.String.CompareOrdinal(x, y) -#endif // Permit structural comparison on arrays | (:? System.Array as arr1),_ -> match arr1,yobj with @@ -982,14 +979,15 @@ namespace Microsoft.FSharp.Core x.CompareTo(yobj,comp) // Check for IComparable | (:? System.IComparable as x),_ -> - match xobj,yobj with - | (:? float as x),(:? float as y) -> - if (System.Double.IsNaN x || System.Double.IsNaN y) && (comp.ThrowsOnPER()) then - raise NaNException - | (:? float32 as x),(:? float32 as y) -> - if (System.Single.IsNaN x || System.Single.IsNaN y) && (comp.ThrowsOnPER()) then - raise NaNException - | _ -> () + if comp.ThrowsOnPER then + match xobj,yobj with + | (:? float as x),(:? float as y) -> + if (System.Double.IsNaN x || System.Double.IsNaN y) then + raise NaNException + | (:? float32 as x),(:? float32 as y) -> + if (System.Single.IsNaN x || System.Single.IsNaN y) then + raise NaNException + | _ -> () x.CompareTo(yobj) | (:? nativeint as x),(:? nativeint as y) -> if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) | (:? unativeint as x),(:? unativeint as y) -> if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) @@ -1179,28 +1177,35 @@ namespace Microsoft.FSharp.Core res type GenericComparer with - interface System.Collections.IComparer with override c.Compare(x:obj,y:obj) = GenericCompare c (x,y) - override c.CompareC(x:obj,y:obj) = GenericCompare c (x,y) - let fsComparer = GenericComparer(true) - let fsComparerNoThrow = GenericComparer(false) + /// The unique object for comparing values in PER mode (where local exceptions are thrown when NaNs are compared) + let fsComparerPER = GenericComparer(true) + + /// The unique object for comparing values in ER mode (where "0" is returned when NaNs are compared) + let fsComparerER = GenericComparer(false) - // NOTE: compiler/optimizer is aware of this function and optimizes calls to it in many situations - // where it is known how GenericComparisonObjBimodal will dispatch via IComparable. + /// Compare two values of the same generic type, using "comp". + // + // "comp" is assumed to be either fsComparerPER or fsComparerER (and hence 'Compare' is implemented via 'GenericCompare'). + // + // NOTE: the compiler optimizer is aware of this function and devirtualizes in the + // cases where it is known how a particular type implements generic comparison. let GenericComparisonWithComparerIntrinsic<'T> (comp:System.Collections.IComparer) (x:'T) (y:'T) : int = - // if 'T = float then x.CompareTo(y) - // if 'T = float32 then x.CompareTo(y) comp.Compare(box x, box y) + /// Compare two values of the same generic type, in either PER or ER mode, but include static optimizations + /// for various well-known cases. + // + // "comp" is assumed to be either fsComparerPER or fsComparerER (and hence 'Compare' is implemented via 'GenericCompare'). + // let inline GenericComparisonWithComparerFast<'T> (comp:System.Collections.IComparer) (x:'T) (y:'T) : int = GenericComparisonWithComparerIntrinsic comp x y when 'T : bool = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) when 'T : sbyte = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) when 'T : int16 = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) when 'T : int32 = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) - when 'T : int = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) when 'T : int64 = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) when 'T : nativeint = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) when 'T : byte = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) @@ -1208,71 +1213,76 @@ namespace Microsoft.FSharp.Core when 'T : uint32 = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) when 'T : uint64 = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) when 'T : unativeint = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) - // Multi-modal direct implementation for float/float32 all of "clt", "cgt" and "ceq" may fail on NaN. In this case we must detect our mode - // and possibly change PERMode.mode. We do this by bailing out to call GenericComparisonWithComparerIntrinsic - when 'T : float = if (# "clt" x y : bool #) then (-1) else if (# "cgt" x y : bool #) then 1 else if (# "ceq" x y : bool #) then 0 else GenericComparisonWithComparerIntrinsic comp x y - when 'T : float32 = if (# "clt" x y : bool #) then (-1) else if (# "cgt" x y : bool #) then 1 else if (# "ceq" x y : bool #) then 0 else GenericComparisonWithComparerIntrinsic comp x y + // Note, these bail out to GenericComparisonWithComparerIntrinsic if called with NaN values, because clt and cgt and ceq all return "false" for that case. + when 'T : float = if (# "clt" x y : bool #) then (-1) + elif (# "cgt" x y : bool #) then (1) + elif (# "ceq" x y : bool #) then (0) + else GenericComparisonWithComparerIntrinsic comp x y + when 'T : float32 = if (# "clt" x y : bool #) then (-1) + elif (# "cgt" x y : bool #) then (1) + elif (# "ceq" x y : bool #) then (0) + else GenericComparisonWithComparerIntrinsic comp x y when 'T : char = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) when 'T : string = -#if INVARIANT_CULTURE_STRING_COMPARISON - // NOTE: we don't have to null check here because System.String.Compare - // gives reliable results on null values. - System.String.Compare((# "" x : string #) ,(# "" y : string #), false, CultureInfo.InvariantCulture) -#else // NOTE: we don't have to null check here because System.String.CompareOrdinal // gives reliable results on null values. System.String.CompareOrdinal((# "" x : string #) ,(# "" y : string #)) -#endif - when ^T : decimal = System.Decimal.Compare((# "" x:decimal #), (# "" y:decimal #)) + when 'T : decimal = System.Decimal.Compare((# "" x:decimal #), (# "" y:decimal #)) + /// Generic comparison. Implements ER mode (where "0" is returned when NaNs are compared) + // + // The compiler optimizer is aware of this function (see use of generic_comparison_inner_vref in opt.fs) + // and devirtualizes calls to it based on "T". let GenericComparisonIntrinsic<'T> (x:'T) (y:'T) : int = - GenericComparisonWithComparerIntrinsic (fsComparerNoThrow :> System.Collections.IComparer) x y + GenericComparisonWithComparerIntrinsic (fsComparerER :> IComparer) x y - // Check for 'T = float or 'T = float32 (in case we didn't resolve this statically). - // In these cases we must use the right "clt" to cope with NaN. Note "<" etc. take - // on a different meaning for floats nested inside data structures than when immediately - // applied to type float. This gives us the IEEE semantics when "<" etc. are used on - // floats, and a sound structural semantics when used on structured data, though - // comparisons on structural data containing floats do not get optimized. + /// Generic less-than. Uses comparison implementation in PER mode but catches + /// the local exception that is thrown when NaN's are compared. let GenericLessThanIntrinsic (x:'T) (y:'T) = try - (# "clt" (GenericComparisonWithComparerIntrinsic fsComparer x y) 0 : bool #) + (# "clt" (GenericComparisonWithComparerIntrinsic fsComparerPER x y) 0 : bool #) with | e when System.Runtime.CompilerServices.RuntimeHelpers.Equals(e, NaNException) -> false + /// Generic greater-than. Uses comparison implementation in PER mode but catches + /// the local exception that is thrown when NaN's are compared. let GenericGreaterThanIntrinsic (x:'T) (y:'T) = try - (# "cgt" (GenericComparisonWithComparerIntrinsic fsComparer x y) 0 : bool #) + (# "cgt" (GenericComparisonWithComparerIntrinsic fsComparerPER x y) 0 : bool #) with | e when System.Runtime.CompilerServices.RuntimeHelpers.Equals(e, NaNException) -> false + /// Generic greater-than-or-equal. Uses comparison implementation in PER mode but catches + /// the local exception that is thrown when NaN's are compared. let GenericGreaterOrEqualIntrinsic (x:'T) (y:'T) = try - (# "cgt" (GenericComparisonWithComparerIntrinsic fsComparer x y) (-1) : bool #) + (# "cgt" (GenericComparisonWithComparerIntrinsic fsComparerPER x y) (-1) : bool #) with | e when System.Runtime.CompilerServices.RuntimeHelpers.Equals(e, NaNException) -> false + /// Generic less-than-or-equal. Uses comparison implementation in PER mode but catches + /// the local exception that is thrown when NaN's are compared. let GenericLessOrEqualIntrinsic (x:'T) (y:'T) = try - (# "clt" (GenericComparisonWithComparerIntrinsic fsComparer x y) 1 : bool #) + (# "clt" (GenericComparisonWithComparerIntrinsic fsComparerPER x y) 1 : bool #) with | e when System.Runtime.CompilerServices.RuntimeHelpers.Equals(e, NaNException) -> false - /// Core implementation of structural comparison on arbitrary values. + /// Compare two values of the same generic type, in ER mode, with static optimizations + /// for known cases. let inline GenericComparisonFast<'T> (x:'T) (y:'T) : int = GenericComparisonIntrinsic x y when 'T : bool = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) when 'T : sbyte = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) when 'T : int16 = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) when 'T : int32 = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) - when 'T : int = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) when 'T : int64 = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) when 'T : nativeint = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) when 'T : byte = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) @@ -1280,26 +1290,27 @@ namespace Microsoft.FSharp.Core when 'T : uint32 = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) when 'T : uint64 = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) when 'T : unativeint = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) - when 'T : float = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) - when 'T : float32 = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) + when 'T : float = if (# "clt" x y : bool #) then (-1) + elif (# "cgt" x y : bool #) then (1) + elif (# "ceq" x y : bool #) then (0) + elif (# "ceq" y y : bool #) then (-1) + else (# "ceq" x x : int #) + when 'T : float32 = if (# "clt" x y : bool #) then (-1) + elif (# "cgt" x y : bool #) then (1) + elif (# "ceq" x y : bool #) then (0) + elif (# "ceq" y y : bool #) then (-1) + else (# "ceq" x x : int #) when 'T : char = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) when 'T : string = -#if INVARIANT_CULTURE_STRING_COMPARISON - // NOTE: we don't have to null check here because System.String.Compare - // gives reliable results on null values. - System.String.Compare((# "" x : string #) ,(# "" y : string #), false, CultureInfo.InvariantCulture) -#else // NOTE: we don't have to null check here because System.String.CompareOrdinal // gives reliable results on null values. System.String.CompareOrdinal((# "" x : string #) ,(# "" y : string #)) -#endif - when ^T : decimal = System.Decimal.Compare((# "" x:decimal #), (# "" y:decimal #)) + when 'T : decimal = System.Decimal.Compare((# "" x:decimal #), (# "" y:decimal #)) - + /// Generic less-than with static optimizations for some well-known cases. let inline GenericLessThanFast (x:'T) (y:'T) = GenericLessThanIntrinsic x y when 'T : bool = (# "clt" x y : bool #) - when 'T : int = (# "clt" x y : bool #) when 'T : sbyte = (# "clt" x y : bool #) when 'T : int16 = (# "clt" x y : bool #) when 'T : int32 = (# "clt" x y : bool #) @@ -1313,12 +1324,12 @@ namespace Microsoft.FSharp.Core when 'T : float = (# "clt" x y : bool #) when 'T : float32= (# "clt" x y : bool #) when 'T : char = (# "clt" x y : bool #) - when ^T : decimal = System.Decimal.op_LessThan ((# "" x:decimal #), (# "" y:decimal #)) + when 'T : decimal = System.Decimal.op_LessThan ((# "" x:decimal #), (# "" y:decimal #)) + /// Generic greater-than with static optimizations for some well-known cases. let inline GenericGreaterThanFast (x:'T) (y:'T) = GenericGreaterThanIntrinsic x y when 'T : bool = (# "cgt" x y : bool #) - when 'T : int = (# "cgt" x y : bool #) when 'T : sbyte = (# "cgt" x y : bool #) when 'T : int16 = (# "cgt" x y : bool #) when 'T : int32 = (# "cgt" x y : bool #) @@ -1332,12 +1343,12 @@ namespace Microsoft.FSharp.Core when 'T : float = (# "cgt" x y : bool #) when 'T : float32 = (# "cgt" x y : bool #) when 'T : char = (# "cgt" x y : bool #) - when ^T : decimal = System.Decimal.op_GreaterThan ((# "" x:decimal #), (# "" y:decimal #)) + when 'T : decimal = System.Decimal.op_GreaterThan ((# "" x:decimal #), (# "" y:decimal #)) + /// Generic less-than-or-equal with static optimizations for some well-known cases. let inline GenericLessOrEqualFast (x:'T) (y:'T) = GenericLessOrEqualIntrinsic x y when 'T : bool = not (# "cgt" x y : bool #) - when 'T : int = not (# "cgt" x y : bool #) when 'T : sbyte = not (# "cgt" x y : bool #) when 'T : int16 = not (# "cgt" x y : bool #) when 'T : int32 = not (# "cgt" x y : bool #) @@ -1351,12 +1362,12 @@ namespace Microsoft.FSharp.Core when 'T : float = not (# "cgt.un" x y : bool #) when 'T : float32 = not (# "cgt.un" x y : bool #) when 'T : char = not(# "cgt" x y : bool #) - when ^T : decimal = System.Decimal.op_LessThanOrEqual ((# "" x:decimal #), (# "" y:decimal #)) + when 'T : decimal = System.Decimal.op_LessThanOrEqual ((# "" x:decimal #), (# "" y:decimal #)) + /// Generic greater-than-or-equal with static optimizations for some well-known cases. let inline GenericGreaterOrEqualFast (x:'T) (y:'T) = GenericGreaterOrEqualIntrinsic x y when 'T : bool = not (# "clt" x y : bool #) - when 'T : int = not (# "clt" x y : bool #) when 'T : sbyte = not (# "clt" x y : bool #) when 'T : int16 = not (# "clt" x y : bool #) when 'T : int32 = not (# "clt" x y : bool #) @@ -1370,11 +1381,11 @@ namespace Microsoft.FSharp.Core when 'T : float = not (# "clt.un" x y : bool #) when 'T : float32 = not (# "clt.un" x y : bool #) when 'T : char = not (# "clt" x y : bool #) - when ^T : decimal = System.Decimal.op_GreaterThanOrEqual ((# "" x:decimal #), (# "" y:decimal #)) + when 'T : decimal = System.Decimal.op_GreaterThanOrEqual ((# "" x:decimal #), (# "" y:decimal #)) //------------------------------------------------------------------------- - // EQUALITY + // LangaugePrimitives.HashCompare: EQUALITY //------------------------------------------------------------------------- @@ -1472,6 +1483,14 @@ namespace Microsoft.FSharp.Core + /// The core implementation of generic equality between two objects. This corresponds + /// to th e pseudo-code in the F# language spec. + // + // Run in either PER or ER mode. In PER mode, equality involving a NaN returns "false". + // In ER mode, equality on two NaNs returns "true". + // + // If "er" is true the "iec" is fsEqualityComparerNoHashingER + // If "er" is false the "iec" is fsEqualityComparerNoHashingPER let rec GenericEqualityObj (er:bool) (iec:System.Collections.IEqualityComparer) ((xobj:obj),(yobj:obj)) : bool = (*if objEq xobj yobj then true else *) match xobj,yobj with @@ -1635,30 +1654,53 @@ namespace Microsoft.FSharp.Core res - let fsEqualityComparer = + /// One of the two unique instances of System.Collections.IEqualityComparer. Implements PER semantics + /// where equality on NaN returns "false". + let fsEqualityComparerNoHashingPER = { new System.Collections.IEqualityComparer with override iec.Equals(x:obj,y:obj) = GenericEqualityObj false iec (x,y) // PER Semantics override iec.GetHashCode(x:obj) = raise (InvalidOperationException (SR.GetString(SR.notUsedForHashing))) } - let fsEqualityComparerER = + /// One of the two unique instances of System.Collections.IEqualityComparer. Implements ER semantics + /// where equality on NaN returns "true". + let fsEqualityComparerNoHashingER = { new System.Collections.IEqualityComparer with override iec.Equals(x:obj,y:obj) = GenericEqualityObj true iec (x,y) // ER Semantics override iec.GetHashCode(x:obj) = raise (InvalidOperationException (SR.GetString(SR.notUsedForHashing))) } - let rec GenericEqualityIntrinsic (x : 'T) (y : 'T) : bool = - fsEqualityComparer.Equals((box x), (box y)) + /// Implements generic equality between two values, with PER semantics for NaN (so equality on two NaN values returns false) + // + // The compiler optimizer is aware of this function (see use of generic_equality_per_inner_vref in opt.fs) + // and devirtualizes calls to it based on "T". + let GenericEqualityIntrinsic (x : 'T) (y : 'T) : bool = + GenericEqualityObj false fsEqualityComparerNoHashingPER ((box x), (box y)) - let rec GenericEqualityERIntrinsic (x : 'T) (y : 'T) : bool = - fsEqualityComparerER.Equals((box x), (box y)) + /// Implements generic equality between two values, with ER semantics for NaN (so equality on two NaN values returns true) + // + // ER semantics is used for recursive calls when implementing .Equals(that) for structural data, see the code generated for record and union types in augment.fs + // + // The compiler optimizer is aware of this function (see use of generic_equality_er_inner_vref in opt.fs) + // and devirtualizes calls to it based on "T". + let GenericEqualityERIntrinsic (x : 'T) (y : 'T) : bool = + GenericEqualityObj true fsEqualityComparerNoHashingER ((box x), (box y)) - let rec GenericEqualityWithComparerIntrinsic (comp : System.Collections.IEqualityComparer) (x : 'T) (y : 'T) : bool = + /// Implements generic equality between two values using "comp" for recursive calls. + // + // The compiler optimizer is aware of this function (see use of generic_equality_withc_inner_vref in opt.fs) + // and devirtualizes calls to it based on "T", and under the assumption that "comp" + // is either fsEqualityComparerNoHashingER or fsEqualityComparerNoHashingPER. + let GenericEqualityWithComparerIntrinsic (comp : System.Collections.IEqualityComparer) (x : 'T) (y : 'T) : bool = comp.Equals((box x),(box y)) + /// Implements generic equality between two values, with ER semantics for NaN (so equality on two NaN values returns true) + // + // ER semantics is used for recursive calls when implementing .Equals(that) for structural data, see the code generated for record and union types in augment.fs + // + // If no static optimization applies, this becomes GenericEqualityERIntrinsic. let inline GenericEqualityERFast (x : 'T) (y : 'T) : bool = GenericEqualityERIntrinsic x y when 'T : bool = (# "ceq" x y : bool #) - when 'T : int = (# "ceq" x y : bool #) when 'T : sbyte = (# "ceq" x y : bool #) when 'T : int16 = (# "ceq" x y : bool #) when 'T : int32 = (# "ceq" x y : bool #) @@ -1681,12 +1723,14 @@ namespace Microsoft.FSharp.Core (# "ceq" x y : bool #) when 'T : char = (# "ceq" x y : bool #) when 'T : string = System.String.Equals((# "" x : string #),(# "" y : string #)) - when ^T : decimal = System.Decimal.op_Equality((# "" x:decimal #), (# "" y:decimal #)) + when 'T : decimal = System.Decimal.op_Equality((# "" x:decimal #), (# "" y:decimal #)) + /// Implements generic equality between two values, with PER semantics for NaN (so equality on two NaN values returns false) + // + // If no static optimization applies, this becomes GenericEqualityIntrinsic. let inline GenericEqualityFast (x : 'T) (y : 'T) : bool = GenericEqualityIntrinsic x y when 'T : bool = (# "ceq" x y : bool #) - when 'T : int = (# "ceq" x y : bool #) when 'T : sbyte = (# "ceq" x y : bool #) when 'T : int16 = (# "ceq" x y : bool #) when 'T : int32 = (# "ceq" x y : bool #) @@ -1701,13 +1745,18 @@ namespace Microsoft.FSharp.Core when 'T : nativeint = (# "ceq" x y : bool #) when 'T : unativeint = (# "ceq" x y : bool #) when 'T : string = System.String.Equals((# "" x : string #),(# "" y : string #)) - when ^T : decimal = System.Decimal.op_Equality((# "" x:decimal #), (# "" y:decimal #)) + when 'T : decimal = System.Decimal.op_Equality((# "" x:decimal #), (# "" y:decimal #)) - // Note, because of the static optimization conditionals for float and float32, this operation has PER semantics + /// A compiler intrinsic generated during optimization of calls to GenericEqualityIntrinsic on tuple values. + // + // If no static optimization applies, this becomes GenericEqualityIntrinsic. + // + // Note, although this function says "WithComparer", the static optimization conditionals for float and float32 + // mean that it has PER semantics. This is OK because calls to this function are only generated by + // the F# compiler, ultimately stemming from an optimization of GenericEqualityIntrinsic when used on a tuple type. let inline GenericEqualityWithComparerFast (comp : System.Collections.IEqualityComparer) (x : 'T) (y : 'T) : bool = GenericEqualityWithComparerIntrinsic comp x y when 'T : bool = (# "ceq" x y : bool #) - when 'T : int = (# "ceq" x y : bool #) when 'T : sbyte = (# "ceq" x y : bool #) when 'T : int16 = (# "ceq" x y : bool #) when 'T : int32 = (# "ceq" x y : bool #) @@ -1722,51 +1771,23 @@ namespace Microsoft.FSharp.Core when 'T : nativeint = (# "ceq" x y : bool #) when 'T : unativeint = (# "ceq" x y : bool #) when 'T : string = System.String.Equals((# "" x : string #),(# "" y : string #)) - when ^T : decimal = System.Decimal.op_Equality((# "" x:decimal #), (# "" y:decimal #)) + when 'T : decimal = System.Decimal.op_Equality((# "" x:decimal #), (# "" y:decimal #)) - // Note, because of the static optimization conditionals for float and float32, this operation has ER semantics - let inline GenericEqualityWithComparerERFast (comp : System.Collections.IEqualityComparer) (x : 'T) (y : 'T) : bool = - GenericEqualityWithComparerIntrinsic comp x y - when 'T : bool = (# "ceq" x y : bool #) - when 'T : int = (# "ceq" x y : bool #) - when 'T : sbyte = (# "ceq" x y : bool #) - when 'T : int16 = (# "ceq" x y : bool #) - when 'T : int32 = (# "ceq" x y : bool #) - when 'T : int64 = (# "ceq" x y : bool #) - when 'T : byte = (# "ceq" x y : bool #) - when 'T : uint16 = (# "ceq" x y : bool #) - when 'T : uint32 = (# "ceq" x y : bool #) - when 'T : uint64 = (# "ceq" x y : bool #) - when 'T : nativeint = (# "ceq" x y : bool #) - when 'T : unativeint = (# "ceq" x y : bool #) - when 'T : float = - if not (# "ceq" x x : bool #) && not (# "ceq" y y : bool #) then - true - else - (# "ceq" x y : bool #) - when 'T : float32 = - if not (# "ceq" x x : bool #) && not (# "ceq" y y : bool #) then - true - else - (# "ceq" x y : bool #) - when 'T : char = (# "ceq" x y : bool #) - when 'T : string = System.String.Equals((# "" x : string #),(# "" y : string #)) - when ^T : decimal = System.Decimal.op_Equality((# "" x:decimal #), (# "" y:decimal #)) - let inline GenericInequalityFast (x:'T) (y:'T) = (not(GenericEqualityFast x y) : bool) let inline GenericInequalityERFast (x:'T) (y:'T) = (not(GenericEqualityERFast x y) : bool) //------------------------------------------------------------------------- - // HASHING + // LangaugePrimitives.HashCompare: HASHING. //------------------------------------------------------------------------- let defaultHashNodes = 18 - type CountLimitedHasher(sz:int) = + /// The implementation of IEqualityComparer, using depth-limited for hashing and PER semantics for NaN equality. + type CountLimitedHasherPER(sz:int) = [] val mutable nodeCount : int @@ -1774,21 +1795,24 @@ namespace Microsoft.FSharp.Core if (System.Threading.Interlocked.CompareExchange(&(x.nodeCount), sz, 0) = 0) then x else - new CountLimitedHasher(sz) + new CountLimitedHasherPER(sz) interface IEqualityComparer - + /// The implementation of IEqualityComparer, using unlimited depth for hashing and ER semantics for NaN equality. type UnlimitedHasherER() = - interface IEqualityComparer - type UnlimitedHasher() = + /// The implementation of IEqualityComparer, using unlimited depth for hashing and PER semantics for NaN equality. + type UnlimitedHasherPER() = interface IEqualityComparer - let fsUnlimitedHasherER = UnlimitedHasherER() - let fsUnlimitedHasher = UnlimitedHasher() + /// The unique object for unlimited depth for hashing and ER semantics for equality. + let fsEqualityComparerUnlimitedHashingER = UnlimitedHasherER() + + /// The unique object for unlimited depth for hashing and PER semantics for equality. + let fsEqualityComparerUnlimitedHashingPER = UnlimitedHasherPER() let inline HashCombine nr x y = (x <<< 1) + y + 631 * nr @@ -1853,10 +1877,11 @@ namespace Microsoft.FSharp.Core | _ -> HashCombine 10 (x.GetLength(0)) (x.GetLength(1)) - // Core implementation of structural hashing. Search for the IStructuralHash interface. - // Arrays and strings are structurally hashed through a separate technique. - // Objects which do not support this interface get hashed using a virtual - // call to the standard Object::GetStructuralHashCode(). + // Core implementation of structural hashing, corresponds to pseudo-code in the + // F# Language spec. Searches for the IStructuralHash interface, otherwise uses GetHashCode(). + // Arrays are structurally hashed through a separate technique. + // + // "iec" is either fsEqualityComparerUnlimitedHashingER, fsEqualityComparerUnlimitedHashingPER or a CountLimitedHasherPER. let rec GenericHashParamObj (iec : System.Collections.IEqualityComparer) (x: obj) : int = match x with | null -> 0 @@ -1867,17 +1892,14 @@ namespace Microsoft.FSharp.Core | :? (int[]) as ba -> GenericHashInt32Array ba | :? (int64[]) as ba -> GenericHashInt64Array ba | _ -> GenericHashArbArray iec a - // REVIEW: System.Array implements IStructuralEquatable in Dev10 | :? IStructuralEquatable as a -> a.GetHashCode(iec) | _ -> x.GetHashCode() - // optimized case - hash on things compatible with obj[] - - - type CountLimitedHasher with + /// Fill in the implementation of CountLimitedHasherPER + type CountLimitedHasherPER with interface System.Collections.IEqualityComparer with override iec.Equals(x:obj,y:obj) = @@ -1889,97 +1911,191 @@ namespace Microsoft.FSharp.Core else -1 + /// Fill in the implementation of UnlimitedHasherER type UnlimitedHasherER with interface System.Collections.IEqualityComparer with override iec.Equals(x:obj,y:obj) = GenericEqualityObj true iec (x,y) override iec.GetHashCode(x:obj) = GenericHashParamObj iec x - type UnlimitedHasher with + /// Fill in the implementation of UnlimitedHasherPER + type UnlimitedHasherPER with interface System.Collections.IEqualityComparer with override iec.Equals(x:obj,y:obj) = GenericEqualityObj false iec (x,y) override iec.GetHashCode(x:obj) = GenericHashParamObj iec x - // Represents an call to structural hashing that was not optimized by static conditionals. - // NOTE: compiler/optimizer is aware of this function and optimizes calls to it in many situations - let GenericHashIntrinsic x = GenericHashParamObj fsUnlimitedHasher (box(x)) + /// Intrinsic for calls to depth-unlimited structural hashing that were not optimized by static conditionals. + // + // NOTE: The compiler optimizer is aware of this function (see uses of generic_hash_inner_vref in opt.fs) + // and devirtualizes calls to it based on type "T". + let GenericHashIntrinsic x = GenericHashParamObj fsEqualityComparerUnlimitedHashingPER (box(x)) - let LimitedGenericHashIntrinsic limit x = GenericHashParamObj (CountLimitedHasher(limit)) (box(x)) + /// Intrinsic for calls to depth-limited structural hashing that were not optimized by static conditionals. + let LimitedGenericHashIntrinsic limit x = GenericHashParamObj (CountLimitedHasherPER(limit)) (box(x)) - // Represents a recursive call to structural hashing that was not optimized by static conditionals. - // For unoptimized recursive calls we fetch the generic hasher - let GenericHashWithComparerIntrinsic<'T> (comp : System.Collections.IEqualityComparer) (x : 'T) : int = - GenericHashParamObj comp (box(x)) + /// Intrinsic for a recursive call to structural hashing that was not optimized by static conditionals. + // + // "iec" is assumed to be either fsEqualityComparerUnlimitedHashingER, fsEqualityComparerUnlimitedHashingPER or + // a CountLimitedHasherPER. + // + // NOTE: The compiler optimizer is aware of this function (see uses of generic_hash_withc_inner_vref in opt.fs) + // and devirtualizes calls to it based on type "T". + let GenericHashWithComparerIntrinsic<'T> (iec : System.Collections.IEqualityComparer) (x : 'T) : int = + GenericHashParamObj iec (box(x)) + /// Direct call to GetHashCode on the string type + let inline HashString (s:string) = + match s with + | null -> 0 + | _ -> (# "call instance int32 [mscorlib]System.String::GetHashCode()" s : int #) - /// Core entry into structural hashing. Hash to a given depth limit. - let inline GenericHashWithComparerFast (comp : System.Collections.IEqualityComparer) (x:'T) : int = - GenericHashWithComparerIntrinsic comp x + // from mscorlib v4.0.30319 + let inline HashChar (x:char) = (# "or" (# "shl" x 16 : int #) x : int #) + let inline HashSByte (x:sbyte) = (# "xor" (# "shl" x 8 : int #) x : int #) + let inline HashInt16 (x:int16) = (# "or" (# "conv.u2" x : int #) (# "shl" x 16 : int #) : int #) + let inline HashInt64 (x:int64) = (# "xor" (# "conv.i4" x : int #) (# "conv.i4" (# "shr" x 32 : int #) : int #) : int #) + let inline HashUInt64 (x:uint64) = (# "xor" (# "conv.i4" x : int #) (# "conv.i4" (# "shr.un" x 32 : int #) : int #) : int #) + let inline HashIntPtr (x:nativeint) = (# "conv.i4" (# "conv.u8" x : uint64 #) : int #) + let inline HashUIntPtr (x:unativeint) = (# "and" (# "conv.i4" (# "conv.u8" x : uint64 #) : int #) 0x7fffffff : int #) + + /// Core entry into structural hashing for either limited or unlimited hashing. + // + // "iec" is assumed to be either fsEqualityComparerUnlimitedHashingER, fsEqualityComparerUnlimitedHashingPER or + // a CountLimitedHasherPER. + let inline GenericHashWithComparerFast (iec : System.Collections.IEqualityComparer) (x:'T) : int = + GenericHashWithComparerIntrinsic iec x when 'T : bool = (# "" x : int #) - when 'T : int = (# "" x : int #) when 'T : int32 = (# "" x : int #) when 'T : byte = (# "" x : int #) when 'T : uint32 = (# "" x : int #) - when 'T : string = - match (# "" x : obj #) with - | null -> 0 - | _ -> (# "call instance int32 [mscorlib]System.String:: GetHashCode()" x : int #) + when 'T : char = HashChar (# "" x : char #) + when 'T : sbyte = HashSByte (# "" x : sbyte #) + when 'T : int16 = HashInt16 (# "" x : int16 #) + when 'T : int64 = HashInt64 (# "" x : int64 #) + when 'T : uint64 = HashUInt64 (# "" x : uint64 #) + when 'T : nativeint = HashIntPtr (# "" x : nativeint #) + when 'T : unativeint = HashUIntPtr (# "" x : unativeint #) + when 'T : uint16 = (# "" x : int #) + when 'T : string = HashString (# "" x : string #) - /// Core entry into structural hashing. Hash to a given depth limit. + /// Core entry into depth-unlimited structural hashing. Hash to a given depth limit. let inline GenericHashFast (x:'T) : int = GenericHashIntrinsic x when 'T : bool = (# "" x : int #) - when 'T : int = (# "" x : int #) when 'T : int32 = (# "" x : int #) when 'T : byte = (# "" x : int #) - when 'T : uint32 = (# "" x : int #) - when 'T : string = - match (# "" x : obj #) with - | null -> 0 - | _ -> (# "call instance int32 [mscorlib]System.String:: GetHashCode()" x : int #) - - /// Core entry into structural hashing. Hash to a given depth limit. + when 'T : uint32 = (# "" x : int #) + when 'T : char = HashChar (# "" x : char #) + when 'T : sbyte = HashSByte (# "" x : sbyte #) + when 'T : int16 = HashInt16 (# "" x : int16 #) + when 'T : int64 = HashInt64 (# "" x : int64 #) + when 'T : uint64 = HashUInt64 (# "" x : uint64 #) + when 'T : nativeint = HashIntPtr (# "" x : nativeint #) + when 'T : unativeint = HashUIntPtr (# "" x : unativeint #) + when 'T : uint16 = (# "" x : int #) + when 'T : string = HashString (# "" x : string #) + + /// Core entry into depth-limited structural hashing. let inline GenericLimitedHashFast (limit:int) (x:'T) : int = LimitedGenericHashIntrinsic limit x when 'T : bool = (# "" x : int #) - when 'T : int = (# "" x : int #) when 'T : int32 = (# "" x : int #) when 'T : byte = (# "" x : int #) when 'T : uint32 = (# "" x : int #) - when 'T : string = - match (# "" x : obj #) with - | null -> 0 - | _ -> (# "call instance int32 [mscorlib]System.String:: GetHashCode()" x : int #) - - + when 'T : char = HashChar (# "" x : char #) + when 'T : sbyte = HashSByte (# "" x : sbyte #) + when 'T : int16 = HashInt16 (# "" x : int16 #) + when 'T : int64 = HashInt64 (# "" x : int64 #) + when 'T : uint64 = HashUInt64 (# "" x : uint64 #) + when 'T : nativeint = HashIntPtr (# "" x : nativeint #) + when 'T : unativeint = HashUIntPtr (# "" x : unativeint #) + when 'T : uint16 = (# "" x : int #) + when 'T : string = HashString (# "" x : string #) + + + /// Compiler intrinsic generated for devirtualized calls to structural hashing on tuples. + // + // The F# compiler optimizer generates calls to this function when GenericHashWithComparerIntrinsic is used + // statically with a tuple type. + // + // Because the function subsequently gets inlined, the calls to GenericHashWithComparerFast can be + // often statically optimized or devirtualized based on the statically known type. let inline FastHashTuple2 (comparer:System.Collections.IEqualityComparer) (x1,x2) = TupleUtils.combineTupleHashes (GenericHashWithComparerFast comparer x1) (GenericHashWithComparerFast comparer x2) + /// Compiler intrinsic generated for devirtualized calls to structural hashing on tuples. + // + // The F# compiler optimizer generates calls to this function when GenericHashWithComparerIntrinsic is used + // statically with a tuple type. + // + // Because the function subsequently gets inlined, the calls to GenericHashWithComparerFast can be + // often statically optimized or devirtualized based on the statically known type. let inline FastHashTuple3 (comparer:System.Collections.IEqualityComparer) (x1,x2,x3) = TupleUtils.combineTupleHashes (TupleUtils.combineTupleHashes (GenericHashWithComparerFast comparer x1) (GenericHashWithComparerFast comparer x2)) (GenericHashWithComparerFast comparer x3) + /// Compiler intrinsic generated for devirtualized calls to structural hashing on tuples. + // + // The F# compiler optimizer generates calls to this function when GenericHashWithComparerIntrinsic is used + // statically with a tuple type. + // + // Because the function subsequently gets inlined, the calls to GenericHashWithComparerFast can be + // often statically optimized or devirtualized based on the statically known type. let inline FastHashTuple4 (comparer:System.Collections.IEqualityComparer) (x1,x2,x3,x4) = TupleUtils.combineTupleHashes (TupleUtils.combineTupleHashes (GenericHashWithComparerFast comparer x1) (GenericHashWithComparerFast comparer x2)) (TupleUtils.combineTupleHashes (GenericHashWithComparerFast comparer x3) (GenericHashWithComparerFast comparer x4)) + /// Compiler intrinsic generated for devirtualized calls to structural hashing on tuples. + // + // The F# compiler optimizer generates calls to this function when GenericHashWithComparerIntrinsic is used + // statically with a tuple type. + // + // Because the function subsequently gets inlined, the calls to GenericHashWithComparerFast can be + // often statically optimized or devirtualized based on the statically known type. let inline FastHashTuple5 (comparer:System.Collections.IEqualityComparer) (x1,x2,x3,x4,x5) = TupleUtils.combineTupleHashes (TupleUtils.combineTupleHashes (TupleUtils.combineTupleHashes (GenericHashWithComparerFast comparer x1) (GenericHashWithComparerFast comparer x2)) (TupleUtils.combineTupleHashes (GenericHashWithComparerFast comparer x3) (GenericHashWithComparerFast comparer x4))) (GenericHashWithComparerFast comparer x5) - // Note: because these FastEqualsTupleN functions are devirtualized by (=), they have PER semantics + /// Compiler intrinsic generated for devirtualized calls to PER-semantic structural equality on tuples + // + // The F# compiler optimizer generates calls to this function when GenericEqualityIntrinsic is used + // statically with a tuple type. + // + // Because the function subsequently gets inlined, the calls to GenericEqualityWithComparerFast can be + // often statically optimized or devirtualized based on the statically known type. let inline FastEqualsTuple2 (comparer:System.Collections.IEqualityComparer) (x1,x2) (y1,y2) = GenericEqualityWithComparerFast comparer x1 y1 && GenericEqualityWithComparerFast comparer x2 y2 + /// Compiler intrinsic generated for devirtualized calls to PER-semantic structural equality on tuples. + // + // The F# compiler optimizer generates calls to this function when GenericEqualityIntrinsic is used + // statically with a tuple type. + // + // Because the function subsequently gets inlined, the calls to GenericEqualityWithComparerFast can be + // often statically optimized or devirtualized based on the statically known type. let inline FastEqualsTuple3 (comparer:System.Collections.IEqualityComparer) (x1,x2,x3) (y1,y2,y3) = GenericEqualityWithComparerFast comparer x1 y1 && GenericEqualityWithComparerFast comparer x2 y2 && GenericEqualityWithComparerFast comparer x3 y3 + /// Compiler intrinsic generated for devirtualized calls to PER-semantic structural equality on tuples (with PER semantics). + // + // The F# compiler optimizer generates calls to this function when GenericEqualityIntrinsic is used + // statically with a tuple type. + // + // Because the function subsequently gets inlined, the calls to GenericEqualityWithComparerFast can be + // often statically optimized or devirtualized based on the statically known type. let inline FastEqualsTuple4 (comparer:System.Collections.IEqualityComparer) (x1,x2,x3,x4) (y1,y2,y3,y4) = GenericEqualityWithComparerFast comparer x1 y1 && GenericEqualityWithComparerFast comparer x2 y2 && GenericEqualityWithComparerFast comparer x3 y3 && GenericEqualityWithComparerFast comparer x4 y4 + /// Compiler intrinsic generated for devirtualized calls to PER-semantic structural equality on tuples. + // + // The F# compiler optimizer generates calls to this function when GenericEqualityIntrinsic is used + // statically with a tuple type. + // + // Because the function subsequently gets inlined, the calls to GenericEqualityWithComparerFast can be + // often statically optimized or devirtualized based on the statically known type. let inline FastEqualsTuple5 (comparer:System.Collections.IEqualityComparer) (x1,x2,x3,x4,x5) (y1,y2,y3,y4,y5) = GenericEqualityWithComparerFast comparer x1 y1 && GenericEqualityWithComparerFast comparer x2 y2 && @@ -1987,11 +2103,25 @@ namespace Microsoft.FSharp.Core GenericEqualityWithComparerFast comparer x4 y4 && GenericEqualityWithComparerFast comparer x5 y5 + /// Compiler intrinsic generated for devirtualized calls to structural comparison on tuples (with ER semantics) + // + // The F# compiler optimizer generates calls to this function when GenericComparisonIntrinsic is used + // statically with a tuple type. + // + // Because the function subsequently gets inlined, the calls to GenericComparisonWithComparerFast can be + // often statically optimized or devirtualized based on the statically known type. let inline FastCompareTuple2 (comparer:System.Collections.IComparer) (x1,x2) (y1,y2) = let n = GenericComparisonWithComparerFast comparer x1 y1 if n <> 0 then n else GenericComparisonWithComparerFast comparer x2 y2 + /// Compiler intrinsic generated for devirtualized calls to structural comparison on tuples (with ER semantics) + // + // The F# compiler optimizer generates calls to this function when GenericComparisonIntrinsic is used + // statically with a tuple type. + // + // Because the function subsequently gets inlined, the calls to GenericComparisonWithComparerFast can be + // often statically optimized or devirtualized based on the statically known type. let inline FastCompareTuple3 (comparer:System.Collections.IComparer) (x1,x2,x3) (y1,y2,y3) = let n = GenericComparisonWithComparerFast comparer x1 y1 if n <> 0 then n else @@ -1999,6 +2129,13 @@ namespace Microsoft.FSharp.Core if n <> 0 then n else GenericComparisonWithComparerFast comparer x3 y3 + /// Compiler intrinsic generated for devirtualized calls to structural comparison on tuples (with ER semantics) + // + // The F# compiler optimizer generates calls to this function when GenericComparisonIntrinsic is used + // statically with a tuple type. + // + // Because the function subsequently gets inlined, the calls to GenericComparisonWithComparerFast can be + // often statically optimized or devirtualized based on the statically known type. let inline FastCompareTuple4 (comparer:System.Collections.IComparer) (x1,x2,x3,x4) (y1,y2,y3,y4) = let n = GenericComparisonWithComparerFast comparer x1 y1 if n <> 0 then n else @@ -2008,6 +2145,13 @@ namespace Microsoft.FSharp.Core if n <> 0 then n else GenericComparisonWithComparerFast comparer x4 y4 + /// Compiler intrinsic generated for devirtualized calls to structural comparison on tuples (with ER semantics) + // + // The F# compiler optimizer generates calls to this function when GenericComparisonIntrinsic is used + // statically with a tuple type. + // + // Because the function subsequently gets inlined, the calls to GenericComparisonWithComparerFast can be + // often statically optimized or devirtualized based on the statically known type. let inline FastCompareTuple5 (comparer:System.Collections.IComparer) (x1,x2,x3,x4,x5) (y1,y2,y3,y4,y5) = let n = GenericComparisonWithComparerFast comparer x1 y1 if n <> 0 then n else @@ -2019,9 +2163,15 @@ namespace Microsoft.FSharp.Core if n <> 0 then n else GenericComparisonWithComparerFast comparer x5 y5 + //------------------------------------------------------------------------- + // LanguagePrimitives: PUBLISH HASH, EQUALITY AND COMPARISON FUNCTIONS. + //------------------------------------------------------------------------- + + // Publish the intrinsic plus the static optimization conditionals let inline GenericEquality x y = HashCompare.GenericEqualityFast x y + let inline GenericEqualityER x y = HashCompare.GenericEqualityERFast x y let inline GenericEqualityWithComparer comp x y = HashCompare.GenericEqualityWithComparerFast comp x y let inline GenericComparison x y = HashCompare.GenericComparisonFast x y @@ -2047,14 +2197,18 @@ namespace Microsoft.FSharp.Core let inline PhysicalEquality x y = HashCompare.PhysicalEqualityFast x y let inline PhysicalHash x = HashCompare.PhysicalHashFast x - let GenericComparer = HashCompare.fsComparerNoThrow :> System.Collections.IComparer - let GenericEqualityComparer = HashCompare.fsUnlimitedHasher :> System.Collections.IEqualityComparer - let GenericEqualityERComparer = HashCompare.fsUnlimitedHasherER :> System.Collections.IEqualityComparer + let GenericComparer = HashCompare.fsComparerER :> System.Collections.IComparer + let GenericEqualityComparer = HashCompare.fsEqualityComparerUnlimitedHashingPER :> System.Collections.IEqualityComparer + let GenericEqualityERComparer = HashCompare.fsEqualityComparerUnlimitedHashingER :> System.Collections.IEqualityComparer let inline GenericHash x = HashCompare.GenericHashFast x let inline GenericLimitedHash limit x = HashCompare.GenericLimitedHashFast limit x let inline GenericHashWithComparer comp x = HashCompare.GenericHashWithComparerFast comp x + //------------------------------------------------------------------------- + // LanguagePrimitives: PUBLISH IEqualityComparer AND IComparer OBJECTS + //------------------------------------------------------------------------- + let inline MakeGenericEqualityComparer<'T>() = // type-specialize some common cases to generate more efficient functions @@ -2068,7 +2222,7 @@ namespace Microsoft.FSharp.Core member self.GetHashCode(x) = GenericLimitedHash limit x member self.Equals(x,y) = GenericEquality x y } -(* + let BoolIEquality = MakeGenericEqualityComparer() let CharIEquality = MakeGenericEqualityComparer() let StringIEquality = MakeGenericEqualityComparer() let SByteIEquality = MakeGenericEqualityComparer() @@ -2089,15 +2243,16 @@ namespace Microsoft.FSharp.Core type FastGenericEqualityComparerTable<'T>() = static let f : System.Collections.Generic.IEqualityComparer<'T> = match typeof<'T> with + | ty when ty.Equals(typeof) -> unboxPrim (box BoolIEquality) | ty when ty.Equals(typeof) -> unboxPrim (box ByteIEquality) + | ty when ty.Equals(typeof) -> unboxPrim (box Int32IEquality) + | ty when ty.Equals(typeof) -> unboxPrim (box UInt32IEquality) | ty when ty.Equals(typeof) -> unboxPrim (box CharIEquality) | ty when ty.Equals(typeof) -> unboxPrim (box SByteIEquality) | ty when ty.Equals(typeof) -> unboxPrim (box Int16IEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box Int32IEquality) | ty when ty.Equals(typeof) -> unboxPrim (box Int64IEquality) | ty when ty.Equals(typeof) -> unboxPrim (box IntPtrIEquality) | ty when ty.Equals(typeof) -> unboxPrim (box UInt16IEquality) - | ty when ty.Equals(typeof) -> unboxPrim (box UInt32IEquality) | ty when ty.Equals(typeof) -> unboxPrim (box UInt64IEquality) | ty when ty.Equals(typeof) -> unboxPrim (box UIntPtrIEquality) | ty when ty.Equals(typeof) -> unboxPrim (box FloatIEquality) @@ -2107,53 +2262,84 @@ namespace Microsoft.FSharp.Core | _ -> MakeGenericEqualityComparer<'T>() static member Function : System.Collections.Generic.IEqualityComparer<'T> = f - let FastGenericEqualityComparer<'T> = FastGenericEqualityComparerTable<'T>.Function -*) - let inline FastGenericEqualityComparer<'T> = MakeGenericEqualityComparer<'T>() + let FastGenericEqualityComparerFromTable<'T> = FastGenericEqualityComparerTable<'T>.Function + + // This is the implementation of HashIdentity.Structural. In most cases this just becomes + // FastGenericEqualityComparerFromTable. + let inline FastGenericEqualityComparer<'T> = + // This gets used if 'T can't be resolved to anything interesting + FastGenericEqualityComparerFromTable<'T> + // When 'T is a primitive, just use the fixed entry in the table + when 'T : bool = FastGenericEqualityComparerFromTable<'T> + when 'T : int32 = FastGenericEqualityComparerFromTable<'T> + when 'T : byte = FastGenericEqualityComparerFromTable<'T> + when 'T : uint32 = FastGenericEqualityComparerFromTable<'T> + when 'T : string = FastGenericEqualityComparerFromTable<'T> + when 'T : sbyte = FastGenericEqualityComparerFromTable<'T> + when 'T : int16 = FastGenericEqualityComparerFromTable<'T> + when 'T : int64 = FastGenericEqualityComparerFromTable<'T> + when 'T : nativeint = FastGenericEqualityComparerFromTable<'T> + when 'T : uint16 = FastGenericEqualityComparerFromTable<'T> + when 'T : uint64 = FastGenericEqualityComparerFromTable<'T> + when 'T : unativeint = FastGenericEqualityComparerFromTable<'T> + when 'T : float = FastGenericEqualityComparerFromTable<'T> + when 'T : float32 = FastGenericEqualityComparerFromTable<'T> + when 'T : char = FastGenericEqualityComparerFromTable<'T> + when 'T : decimal = FastGenericEqualityComparerFromTable<'T> + // According to the somewhat subtle rules of static optimizations, + // this condition is used whenever 'T is resolved to a nominal or tuple type + // and none of the other rules above apply. + // + // When 'T is statically known to be nominal or tuple, it is better to inline the implementation of + // MakeGenericEqualityComparer. This is then reduced by further inlining to the primitives + // known to the F# compiler which are then often optimized for the particular nominal type involved. + when 'T : 'T = MakeGenericEqualityComparer<'T>() + let inline FastLimitedGenericEqualityComparer<'T>(limit) = MakeGenericLimitedEqualityComparer<'T>(limit) - let inline MakeFastGenericComparer<'T>() = + let inline MakeGenericComparer<'T>() = { new System.Collections.Generic.IComparer<'T> with member __.Compare(x,y) = GenericComparison x y } - let CharComparer = MakeFastGenericComparer() - let StringComparer = MakeFastGenericComparer() - let SByteComparer = MakeFastGenericComparer() - let Int16Comparer = MakeFastGenericComparer() - let Int32Comparer = MakeFastGenericComparer() - let Int64Comparer = MakeFastGenericComparer() - let IntPtrComparer = MakeFastGenericComparer() - let ByteComparer = MakeFastGenericComparer() - let UInt16Comparer = MakeFastGenericComparer() - let UInt32Comparer = MakeFastGenericComparer() - let UInt64Comparer = MakeFastGenericComparer() - let UIntPtrComparer = MakeFastGenericComparer() - let FloatComparer = MakeFastGenericComparer() - let Float32Comparer = MakeFastGenericComparer() - let DecimalComparer = MakeFastGenericComparer() + let CharComparer = MakeGenericComparer() + let StringComparer = MakeGenericComparer() + let SByteComparer = MakeGenericComparer() + let Int16Comparer = MakeGenericComparer() + let Int32Comparer = MakeGenericComparer() + let Int64Comparer = MakeGenericComparer() + let IntPtrComparer = MakeGenericComparer() + let ByteComparer = MakeGenericComparer() + let UInt16Comparer = MakeGenericComparer() + let UInt32Comparer = MakeGenericComparer() + let UInt64Comparer = MakeGenericComparer() + let UIntPtrComparer = MakeGenericComparer() + let FloatComparer = MakeGenericComparer() + let Float32Comparer = MakeGenericComparer() + let DecimalComparer = MakeGenericComparer() /// Use a type-indexed table to ensure we only create a single FastStructuralComparison function /// for each type [] type FastGenericComparerTable<'T>() = + + // The CLI implementation of mscorlib optimizes array sorting + // when the comparer is either null or precisely + // reference-equals to System.Collections.Generic.Comparer<'T>.Default. + // This is an indication that a "fast" array sorting helper can be used. + // + // So, for all the types listed below, we want to pass in a value of "null" for + // the comparer object. Note that F# generic comparison coincides precisely with + // System.Collections.Generic.Comparer<'T>.Default for these types. + // + // A "null" comparer is only valid if the values do not have identity, e.g. integers. + // That is, an unstable sort of the array must be the semantically the + // same as a stable sort of the array. See Array.stableSortInPlace. + // + // REVIEW: in a future version we could extend this to include additional types static let fCanBeNull : System.Collections.Generic.IComparer<'T> = match typeof<'T> with | ty when ty.Equals(typeof) -> unboxPrim (box IntPtrComparer) | ty when ty.Equals(typeof) -> unboxPrim (box UIntPtrComparer) - - // The CLI implementation of mscorlib optimizes array sorting - // when the comparer is either null or precisely - // reference-equals to System.Collections.Generic.Comparer<'T>.Default. - // This is an indication that a "fast" array sorting helper can be used. - // - // For all the types listed below, F# generic comparison - // coincides precisely with System.Collections.Generic.Comparer<'T>.Default. - // - // ALSO: This must only be null if the values do not have identity, e.g. integers. - // That is, an unstable sort of the array must be the semantically the - // same as a stable sort of the array. See Array.stableSortInPlace. - // - // REVIEW: in a future version we could extend this to include additional types | ty when ty.Equals(typeof) -> null | ty when ty.Equals(typeof) -> null | ty when ty.Equals(typeof) -> null @@ -2167,7 +2353,7 @@ namespace Microsoft.FSharp.Core | ty when ty.Equals(typeof) -> null | ty when ty.Equals(typeof) -> null | ty when ty.Equals(typeof) -> unboxPrim (box StringComparer) - | _ -> MakeFastGenericComparer<'T>() + | _ -> MakeGenericComparer<'T>() static let f : System.Collections.Generic.IComparer<'T> = match typeof<'T> with @@ -2190,26 +2376,65 @@ namespace Microsoft.FSharp.Core // Review: There are situations where we should be able // to return System.Collections.Generic.Comparer<'T>.Default here. // For example, for any value type. - MakeFastGenericComparer<'T>() + MakeGenericComparer<'T>() static member Value : System.Collections.Generic.IComparer<'T> = f static member ValueCanBeNullIfDefaultSemantics : System.Collections.Generic.IComparer<'T> = fCanBeNull - let FastGenericComparer<'T> = FastGenericComparerTable<'T>.Value + let FastGenericComparerFromTable<'T> = + FastGenericComparerTable<'T>.Value + + let inline FastGenericComparer<'T> = + // This gets used is 'T can't be resolved to anything interesting + FastGenericComparerFromTable<'T> + // When 'T is a primitive, just use the fixed entry in the table + when 'T : bool = FastGenericComparerFromTable<'T> + when 'T : sbyte = FastGenericComparerFromTable<'T> + when 'T : int16 = FastGenericComparerFromTable<'T> + when 'T : int32 = FastGenericComparerFromTable<'T> + when 'T : int64 = FastGenericComparerFromTable<'T> + when 'T : nativeint = FastGenericComparerFromTable<'T> + when 'T : byte = FastGenericComparerFromTable<'T> + when 'T : uint16 = FastGenericComparerFromTable<'T> + when 'T : uint32 = FastGenericComparerFromTable<'T> + when 'T : uint64 = FastGenericComparerFromTable<'T> + when 'T : unativeint = FastGenericComparerFromTable<'T> + when 'T : float = FastGenericComparerFromTable<'T> + when 'T : float32 = FastGenericComparerFromTable<'T> + when 'T : char = FastGenericComparerFromTable<'T> + when 'T : string = FastGenericComparerFromTable<'T> + when 'T : decimal = FastGenericComparerFromTable<'T> + // According to the somewhat subtle rules of static optimizations, + // this condition is used whenever 'T is resolved by inlining to be a nominal type + // and none of the other rules above apply + // + // In this case it is better to inline the implementation of MakeGenericComparer so that + // the comparison object is eventually reduced to the primitives known to the F# compiler + // which are then optimized for the particular nominal type involved. + when 'T : 'T = MakeGenericComparer<'T>() + let FastGenericComparerCanBeNull<'T> = FastGenericComparerTable<'T>.ValueCanBeNullIfDefaultSemantics + //------------------------------------------------------------------------- + // LanguagePrimitives: ENUMS + //------------------------------------------------------------------------- - let inline EnumOfValue (u : 'u) : 'e when 'e : enum<'u> = - unboxPrim<'e>(box u) - when 'e : 'e = (retype u : 'e) + let inline EnumOfValue (u : 'T) : 'Enum when 'Enum : enum<'T> = + unboxPrim<'Enum>(box u) + // According to the somewhat subtle rules of static optimizations, + // this condition is used whenever 'Enum is resolved to a nominal type + when 'Enum : 'Enum = (retype u : 'Enum) - let inline EnumToValue (e : 'e) : 'u when 'e : enum<'u> = - unboxPrim<'u>(box e) + let inline EnumToValue (e : 'Enum) : 'T when 'Enum : enum<'T> = + unboxPrim<'T>(box e) // According to the somewhat subtle rules of static optimizations, - // this condition is used whenever ^T is resolved to a nominal type - when 'e : 'e = (retype e : 'u) + // this condition is used whenever 'Enum is resolved to a nominal type + when 'Enum : 'Enum = (retype e : 'T) + //------------------------------------------------------------------------- + // LanguagePrimitives: MEASURES + //------------------------------------------------------------------------- let inline FloatWithMeasure (f : float) : float<'Measure> = retype f let inline Float32WithMeasure (f : float32) : float32<'Measure> = retype f @@ -2393,8 +2618,8 @@ namespace Microsoft.FSharp.Core static member Result : 'T = result - let GenericZeroDynamic< 'T >() : 'T = GenericZeroDynamicImplTable<'T>.Result - let GenericOneDynamic< 'T >() : 'T = GenericOneDynamicImplTable<'T>.Result + let GenericZeroDynamic<'T>() : 'T = GenericZeroDynamicImplTable<'T>.Result + let GenericOneDynamic<'T>() : 'T = GenericOneDynamicImplTable<'T>.Result let inline GenericZero< ^T when ^T : (static member Zero : ^T) > : ^T = GenericZeroDynamic<(^T)>() @@ -2669,11 +2894,11 @@ namespace System comparer.GetHashCode(t.Item1) interface IComparable with override t.CompareTo(other:obj) = - (t :> IStructuralComparable).CompareTo(other,(HashCompare.fsComparer :> System.Collections.IComparer)) + (t :> IStructuralComparable).CompareTo(other,(HashCompare.fsComparerER :> System.Collections.IComparer)) override t.GetHashCode() = - (t :> IStructuralEquatable).GetHashCode(HashCompare.fsUnlimitedHasher) + (t :> IStructuralEquatable).GetHashCode(HashCompare.fsEqualityComparerUnlimitedHashingPER) override t.Equals(other:obj) = - (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparer) + (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparerNoHashingPER) type Tuple<'T1,'T2> with override x.ToString() = @@ -2692,11 +2917,11 @@ namespace System HashCompare.FastHashTuple2 comparer (retype t : ('T1 * 'T2)) interface IComparable with override t.CompareTo(other:obj) = - (t :> IStructuralComparable).CompareTo(other, (HashCompare.fsComparer :> System.Collections.IComparer)) + (t :> IStructuralComparable).CompareTo(other, (HashCompare.fsComparerER :> System.Collections.IComparer)) override t.GetHashCode() = - (t :> IStructuralEquatable).GetHashCode(HashCompare.fsUnlimitedHasher) + (t :> IStructuralEquatable).GetHashCode(HashCompare.fsEqualityComparerUnlimitedHashingPER) override t.Equals(other:obj) = - (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparer) + (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparerNoHashingPER) type Tuple<'T1,'T2,'T3> with @@ -2717,11 +2942,11 @@ namespace System HashCompare.FastHashTuple3 comparer (retype t : ('T1 * 'T2 * 'T3)) interface IComparable with override t.CompareTo(other:obj) = - (t :> IStructuralComparable).CompareTo(other, (HashCompare.fsComparer :> System.Collections.IComparer)) + (t :> IStructuralComparable).CompareTo(other, (HashCompare.fsComparerER :> System.Collections.IComparer)) override t.GetHashCode() = - (t :> IStructuralEquatable).GetHashCode(HashCompare.fsUnlimitedHasher) + (t :> IStructuralEquatable).GetHashCode(HashCompare.fsEqualityComparerUnlimitedHashingPER) override t.Equals(other:obj) = - (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparer) + (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparerNoHashingPER) type Tuple<'T1,'T2,'T3,'T4> with override x.ToString() = @@ -2742,11 +2967,11 @@ namespace System HashCompare.FastHashTuple4 comparer (retype t : ('T1 * 'T2 * 'T3 * 'T4)) interface IComparable with override t.CompareTo(other:obj) = - (t :> IStructuralComparable).CompareTo(other, (HashCompare.fsComparer :> System.Collections.IComparer)) + (t :> IStructuralComparable).CompareTo(other, (HashCompare.fsComparerER :> System.Collections.IComparer)) override t.GetHashCode() = - (t :> IStructuralEquatable).GetHashCode(HashCompare.fsUnlimitedHasher) + (t :> IStructuralEquatable).GetHashCode(HashCompare.fsEqualityComparerUnlimitedHashingPER) override t.Equals(other:obj) = - (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparer) + (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparerNoHashingPER) type Tuple<'T1,'T2,'T3,'T4,'T5> with override x.ToString() = @@ -2768,11 +2993,11 @@ namespace System HashCompare.FastHashTuple5 comparer (retype t : ('T1 * 'T2 * 'T3 * 'T4 * 'T5)) interface IComparable with override t.CompareTo(other:obj) = - (t :> IStructuralComparable).CompareTo(other, (HashCompare.fsComparer :> System.Collections.IComparer)) + (t :> IStructuralComparable).CompareTo(other, (HashCompare.fsComparerER :> System.Collections.IComparer)) override t.GetHashCode() = - (t :> IStructuralEquatable).GetHashCode(HashCompare.fsUnlimitedHasher) + (t :> IStructuralEquatable).GetHashCode(HashCompare.fsEqualityComparerUnlimitedHashingPER) override t.Equals(other:obj) = - (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparer) + (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparerNoHashingPER) type Tuple<'T1,'T2,'T3,'T4,'T5,'T6> with override x.ToString() = @@ -2816,11 +3041,11 @@ namespace System TupleUtils.combineTupleHashCodes [|(comparer.GetHashCode(t.Item1)) ; (comparer.GetHashCode(t.Item2)) ; (comparer.GetHashCode(t.Item3)) ; (comparer.GetHashCode(t.Item4)) ; (comparer.GetHashCode(t.Item5)) ; (comparer.GetHashCode(t.Item6))|] interface IComparable with override t.CompareTo(other:obj) = - (t :> IStructuralComparable).CompareTo(other, (HashCompare.fsComparer :> System.Collections.IComparer)) + (t :> IStructuralComparable).CompareTo(other, (HashCompare.fsComparerER :> System.Collections.IComparer)) override t.GetHashCode() = - (t :> IStructuralEquatable).GetHashCode(HashCompare.fsUnlimitedHasher) + (t :> IStructuralEquatable).GetHashCode(HashCompare.fsEqualityComparerUnlimitedHashingPER) override t.Equals(other:obj) = - (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparer) + (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparerNoHashingPER) type Tuple<'T1,'T2,'T3,'T4,'T5,'T6,'T7> with override x.ToString() = @@ -2869,11 +3094,11 @@ namespace System TupleUtils.combineTupleHashCodes [|(comparer.GetHashCode(t.Item1)) ; (comparer.GetHashCode(t.Item2)) ; (comparer.GetHashCode(t.Item3)) ; (comparer.GetHashCode(t.Item4)) ; (comparer.GetHashCode(t.Item5)) ; (comparer.GetHashCode(t.Item6)) ; (comparer.GetHashCode(t.Item7))|] interface IComparable with override t.CompareTo(other:obj) = - (t :> IStructuralComparable).CompareTo(other, (HashCompare.fsComparer :> System.Collections.IComparer)) + (t :> IStructuralComparable).CompareTo(other, (HashCompare.fsComparerER :> System.Collections.IComparer)) override t.GetHashCode() = - (t :> IStructuralEquatable).GetHashCode(HashCompare.fsUnlimitedHasher) + (t :> IStructuralEquatable).GetHashCode(HashCompare.fsEqualityComparerUnlimitedHashingPER) override t.Equals(other:obj) = - (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparer) + (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparerNoHashingPER) type Tuple<'T1,'T2,'T3,'T4,'T5,'T6,'T7,'TRest> with override x.ToString() = @@ -2928,11 +3153,11 @@ namespace System TupleUtils.combineTupleHashCodes [|(comparer.GetHashCode(t.Item1)) ; (comparer.GetHashCode(t.Item2)) ; (comparer.GetHashCode(t.Item3)) ; (comparer.GetHashCode(t.Item4)) ; (comparer.GetHashCode(t.Item5)) ; (comparer.GetHashCode(t.Item6)) ; (comparer.GetHashCode(t.Item7)) ; (comparer.GetHashCode(t.Rest))|] interface IComparable with override t.CompareTo(other:obj) = - (t :> IStructuralComparable).CompareTo(other, (HashCompare.fsComparer :> System.Collections.IComparer)) + (t :> IStructuralComparable).CompareTo(other, (HashCompare.fsComparerER :> System.Collections.IComparer)) override t.GetHashCode() = - (t :> IStructuralEquatable).GetHashCode(HashCompare.fsUnlimitedHasher) + (t :> IStructuralEquatable).GetHashCode(HashCompare.fsEqualityComparerUnlimitedHashingPER) override t.Equals(other:obj) = - (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparer) + (t :> IStructuralEquatable).Equals(other,HashCompare.fsEqualityComparerNoHashingPER) #else #endif @@ -3315,11 +3540,13 @@ namespace Microsoft.FSharp.Collections let notStarted() = raise (new System.InvalidOperationException(SR.GetString(SR.enumerationNotStarted))) let alreadyFinished() = raise (new System.InvalidOperationException(SR.GetString(SR.enumerationAlreadyFinished))) + let outOfRange() = raise (System.IndexOutOfRangeException(SR.GetString(SR.indexOutOfBounds))) + let nonempty x = match x with [] -> false | _ -> true // optimized mutation-based implementation. This code is only valid in fslib, where mutation of private // tail cons cells is permitted in carefully written library code. - let setFreshConsTail cons t = - cons.(::).1 <- t + let inline setFreshConsTail cons t = cons.(::).1 <- t + let inline freshConsNoTail h = h :: (# "ldnull" : 'T list #) // Return the last cons it the chain let rec appendToFreshConsTail cons xs = @@ -3370,11 +3597,6 @@ namespace Microsoft.FSharp.Collections let rec lengthAcc acc xs = match xs with [] -> acc | _ :: t -> lengthAcc (acc+1) t - //let rec getRange startIndex endIndex xs = - // match xs with - // | [] -> [] - // | h :: t -> - let rec nth l n = match l with | [] -> raise (new System.ArgumentException(SR.GetString(SR.indexOutOfBounds),"n")) @@ -3383,6 +3605,37 @@ namespace Microsoft.FSharp.Collections elif n = 0 then h else nth t (n - 1) + // similar to 'takeFreshConsTail' but with exceptions same as array slicing + let rec sliceFreshConsTail cons n l = + if n = 0 then setFreshConsTail cons [] else + match l with + | [] -> outOfRange() + | x::xs -> + let cons2 = freshConsNoTail x + setFreshConsTail cons cons2 + sliceFreshConsTail cons2 (n - 1) xs + + // similar to 'take' but with n representing an index, not a number of elements + // and with exceptions matching array slicing + let sliceTake n l = + if n < 0 then outOfRange() + match l with + | [] -> outOfRange() + | x::xs -> + let cons = freshConsNoTail x + sliceFreshConsTail cons n xs + cons + + // similar to 'skip' but with exceptions same as array slicing + let sliceSkip n l = + if n < 0 then outOfRange() + let rec loop i lst = + match lst with + | _ when i = 0 -> lst + | _::t -> loop (i-1) t + | [] -> outOfRange() + loop n l + type List<'T> with #if FX_NO_DEBUG_DISPLAYS #else @@ -3400,9 +3653,7 @@ namespace Microsoft.FSharp.Collections if n > 1000 then "Length > 1000" else System.String.Concat( [| "Length = "; n.ToString() |]) txt - - - + member l.Head = match l with a :: _ -> a | [] -> raise (System.InvalidOperationException(SR.GetString(SR.inputListWasEmpty))) member l.Tail = match l with _ :: b -> b | [] -> raise (System.InvalidOperationException(SR.GetString(SR.inputListWasEmpty))) @@ -3428,9 +3679,14 @@ namespace Microsoft.FSharp.Collections | [h1;h2;h3] -> System.Text.StringBuilder().Append("[").Append(anyToStringShowingNull h1).Append("; ").Append(anyToStringShowingNull h2).Append("; ").Append(anyToStringShowingNull h3).Append("]").ToString() | h1 :: h2 :: h3 :: _ -> System.Text.StringBuilder().Append("[").Append(anyToStringShowingNull h1).Append("; ").Append(anyToStringShowingNull h2).Append("; ").Append(anyToStringShowingNull h3).Append("; ... ]").ToString() - //member x.GetSlice(startIndex: int option ,endIndex: int option ) = - // let startIndex = match startIndex with Some x -> x | None -> 0 - // PrivateListHelpers.getRange startIndex endIndex l [] + member l.GetSlice(startIndex: int option, endIndex: int option ) = + match (startIndex, endIndex) with + | None, None -> l + | Some(i), None -> PrivateListHelpers.sliceSkip i l + | None, Some(j) -> PrivateListHelpers.sliceTake j l + | Some(i), Some(j) -> + if i > j then [] else + PrivateListHelpers.sliceTake (j-i) (PrivateListHelpers.sliceSkip i l) interface IEnumerable<'T> with member l.GetEnumerator() = PrivateListHelpers.mkListEnumerator l @@ -3520,6 +3776,18 @@ namespace Microsoft.FSharp.Core [] let inline box (x:'T) = (# "box !0" type ('T) x : obj #) + [] + let inline tryUnbox (x:obj) = + match x with + | :? 'T as v -> Some v + | _ -> None + + [] + let inline isNull (value : 'T) = + match value with + | null -> true + | _ -> false + [] let raise (e: exn) = (# "throw" e : 'T #) @@ -4235,6 +4503,189 @@ namespace Microsoft.FSharp.Core when ^T : byte = (# "conv.u2" x : char #) + module NonStructuralComparison = + /// Static less-than with static optimizations for some well-known cases. + let inline (<) (x:^T) (y:^U) = + ((^T or ^U): (static member (<) : ^T * ^U -> bool) (x,y)) + when ^T : bool = (# "clt" x y : bool #) + when ^T : sbyte = (# "clt" x y : bool #) + when ^T : int16 = (# "clt" x y : bool #) + when ^T : int32 = (# "clt" x y : bool #) + when ^T : int64 = (# "clt" x y : bool #) + when ^T : byte = (# "clt.un" x y : bool #) + when ^T : uint16 = (# "clt.un" x y : bool #) + when ^T : uint32 = (# "clt.un" x y : bool #) + when ^T : uint64 = (# "clt.un" x y : bool #) + when ^T : unativeint = (# "clt.un" x y : bool #) + when ^T : nativeint = (# "clt" x y : bool #) + when ^T : float = (# "clt" x y : bool #) + when ^T : float32= (# "clt" x y : bool #) + when ^T : char = (# "clt" x y : bool #) + when ^T : decimal = System.Decimal.op_LessThan ((# "" x:decimal #), (# "" y:decimal #)) + when ^T : string = (# "clt" (System.String.CompareOrdinal((# "" x : string #) ,(# "" y : string #))) 0 : bool #) + + /// Static greater-than with static optimizations for some well-known cases. + let inline (>) (x:^T) (y:^U) = + ((^T or ^U): (static member (>) : ^T * ^U -> bool) (x,y)) + when 'T : bool = (# "cgt" x y : bool #) + when 'T : sbyte = (# "cgt" x y : bool #) + when 'T : int16 = (# "cgt" x y : bool #) + when 'T : int32 = (# "cgt" x y : bool #) + when 'T : int64 = (# "cgt" x y : bool #) + when 'T : nativeint = (# "cgt" x y : bool #) + when 'T : byte = (# "cgt.un" x y : bool #) + when 'T : uint16 = (# "cgt.un" x y : bool #) + when 'T : uint32 = (# "cgt.un" x y : bool #) + when 'T : uint64 = (# "cgt.un" x y : bool #) + when 'T : unativeint = (# "cgt.un" x y : bool #) + when 'T : float = (# "cgt" x y : bool #) + when 'T : float32 = (# "cgt" x y : bool #) + when 'T : char = (# "cgt" x y : bool #) + when 'T : decimal = System.Decimal.op_GreaterThan ((# "" x:decimal #), (# "" y:decimal #)) + when ^T : string = (# "cgt" (System.String.CompareOrdinal((# "" x : string #) ,(# "" y : string #))) 0 : bool #) + + /// Static less-than-or-equal with static optimizations for some well-known cases. + let inline (<=) (x:^T) (y:^U) = + ((^T or ^U): (static member (<=) : ^T * ^U -> bool) (x,y)) + when 'T : bool = not (# "cgt" x y : bool #) + when 'T : sbyte = not (# "cgt" x y : bool #) + when 'T : int16 = not (# "cgt" x y : bool #) + when 'T : int32 = not (# "cgt" x y : bool #) + when 'T : int64 = not (# "cgt" x y : bool #) + when 'T : nativeint = not (# "cgt" x y : bool #) + when 'T : byte = not (# "cgt.un" x y : bool #) + when 'T : uint16 = not (# "cgt.un" x y : bool #) + when 'T : uint32 = not (# "cgt.un" x y : bool #) + when 'T : uint64 = not (# "cgt.un" x y : bool #) + when 'T : unativeint = not (# "cgt.un" x y : bool #) + when 'T : float = not (# "cgt.un" x y : bool #) + when 'T : float32 = not (# "cgt.un" x y : bool #) + when 'T : char = not (# "cgt" x y : bool #) + when 'T : decimal = System.Decimal.op_LessThanOrEqual ((# "" x:decimal #), (# "" y:decimal #)) + when ^T : string = not (# "cgt" (System.String.CompareOrdinal((# "" x : string #) ,(# "" y : string #))) 0 : bool #) + + /// Static greater-than-or-equal with static optimizations for some well-known cases. + let inline (>=) (x:^T) (y:^U) = + ((^T or ^U): (static member (>=) : ^T * ^U -> bool) (x,y)) + when 'T : bool = not (# "clt" x y : bool #) + when 'T : sbyte = not (# "clt" x y : bool #) + when 'T : int16 = not (# "clt" x y : bool #) + when 'T : int32 = not (# "clt" x y : bool #) + when 'T : int64 = not (# "clt" x y : bool #) + when 'T : nativeint = not (# "clt" x y : bool #) + when 'T : byte = not (# "clt.un" x y : bool #) + when 'T : uint16 = not (# "clt.un" x y : bool #) + when 'T : uint32 = not (# "clt.un" x y : bool #) + when 'T : uint64 = not (# "clt.un" x y : bool #) + when 'T : unativeint = not (# "clt.un" x y : bool #) + when 'T : float = not (# "clt.un" x y : bool #) + when 'T : float32 = not (# "clt.un" x y : bool #) + when 'T : char = not (# "clt" x y : bool #) + when 'T : decimal = System.Decimal.op_GreaterThanOrEqual ((# "" x:decimal #), (# "" y:decimal #)) + when ^T : string = not (# "clt" (System.String.CompareOrdinal((# "" x : string #) ,(# "" y : string #))) 0 : bool #) + + + /// Static greater-than-or-equal with static optimizations for some well-known cases. + let inline (=) (x:^T) (y:^T) = + (^T : (static member (=) : ^T * ^T -> bool) (x,y)) + when ^T : bool = (# "ceq" x y : bool #) + when ^T : sbyte = (# "ceq" x y : bool #) + when ^T : int16 = (# "ceq" x y : bool #) + when ^T : int32 = (# "ceq" x y : bool #) + when ^T : int64 = (# "ceq" x y : bool #) + when ^T : byte = (# "ceq" x y : bool #) + when ^T : uint16 = (# "ceq" x y : bool #) + when ^T : uint32 = (# "ceq" x y : bool #) + when ^T : uint64 = (# "ceq" x y : bool #) + when ^T : float = (# "ceq" x y : bool #) + when ^T : float32 = (# "ceq" x y : bool #) + when ^T : char = (# "ceq" x y : bool #) + when ^T : nativeint = (# "ceq" x y : bool #) + when ^T : unativeint = (# "ceq" x y : bool #) + when ^T : string = System.String.Equals((# "" x : string #),(# "" y : string #)) + when ^T : decimal = System.Decimal.op_Equality((# "" x:decimal #), (# "" y:decimal #)) + + let inline (<>) (x:^T) (y:^T) = + (^T : (static member (<>) : ^T * ^T -> bool) (x,y)) + when ^T : bool = not (# "ceq" x y : bool #) + when ^T : sbyte = not (# "ceq" x y : bool #) + when ^T : int16 = not (# "ceq" x y : bool #) + when ^T : int32 = not (# "ceq" x y : bool #) + when ^T : int64 = not (# "ceq" x y : bool #) + when ^T : byte = not (# "ceq" x y : bool #) + when ^T : uint16 = not (# "ceq" x y : bool #) + when ^T : uint32 = not (# "ceq" x y : bool #) + when ^T : uint64 = not (# "ceq" x y : bool #) + when ^T : float = not (# "ceq" x y : bool #) + when ^T : float32 = not (# "ceq" x y : bool #) + when ^T : char = not (# "ceq" x y : bool #) + when ^T : nativeint = not (# "ceq" x y : bool #) + when ^T : unativeint = not (# "ceq" x y : bool #) + when ^T : string = not (System.String.Equals((# "" x : string #),(# "" y : string #))) + when ^T : decimal = System.Decimal.op_Inequality((# "" x:decimal #), (# "" y:decimal #)) + + + // static comparison (ER mode) with static optimizations for some well-known cases + [] + let inline compare (x:^T) (y:^T) : int = + (if x < y then -1 elif x > y then 1 else 0) + when ^T : bool = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) + when ^T : sbyte = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) + when ^T : int16 = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) + when ^T : int32 = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) + when ^T : int64 = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) + when ^T : nativeint = if (# "clt" x y : bool #) then (-1) else (# "cgt" x y : int #) + when ^T : byte = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) + when ^T : uint16 = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) + when ^T : uint32 = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) + when ^T : uint64 = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) + when ^T : unativeint = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) + when ^T : float = if (# "clt" x y : bool #) then (-1) + elif (# "cgt" x y : bool #) then (1) + elif (# "ceq" x y : bool #) then (0) + elif (# "ceq" y y : bool #) then (-1) + else (# "ceq" x x : int #) + when ^T : float32 = if (# "clt" x y : bool #) then (-1) + elif (# "cgt" x y : bool #) then (1) + elif (# "ceq" x y : bool #) then (1) + elif (# "ceq" y y : bool #) then (-1) + else (# "ceq" x x : int #) + when ^T : char = if (# "clt.un" x y : bool #) then (-1) else (# "cgt.un" x y : int #) + when ^T : string = + // NOTE: we don't have to null check here because System.String.CompareOrdinal + // gives reliable results on null values. + System.String.CompareOrdinal((# "" x : string #) ,(# "" y : string #)) + when ^T : decimal = System.Decimal.Compare((# "" x:decimal #), (# "" y:decimal #)) + + [] + let inline max (x:^T) y = + (if x < y then y else x) + when ^T : float = (System.Math.Max : float * float -> float)(retype<_,float> x, retype<_,float> y) + when ^T : float32 = (System.Math.Max : float32 * float32 -> float32)(retype<_,float32> x, retype<_,float32> y) + + [] + let inline min (x: ^T) y = + (if x < y then x else y) + when ^T : float = (System.Math.Min : float * float -> float)(retype<_,float> x, retype<_,float> y) + when ^T : float32 = (System.Math.Min : float32 * float32 -> float32)(retype<_,float32> x, retype<_,float32> y) + + [] + let inline hash (x:'T) = + x.GetHashCode() + when 'T : bool = (# "" x : int #) + when 'T : int32 = (# "" x : int #) + when 'T : byte = (# "" x : int #) + when 'T : uint32 = (# "" x : int #) + when 'T : char = HashCompare.HashChar (# "" x : char #) + when 'T : sbyte = HashCompare.HashSByte (# "" x : sbyte #) + when 'T : int16 = HashCompare.HashInt16 (# "" x : int16 #) + when 'T : int64 = HashCompare.HashInt64 (# "" x : int64 #) + when 'T : uint64 = HashCompare.HashUInt64 (# "" x : uint64 #) + when 'T : nativeint = HashCompare.HashIntPtr (# "" x : nativeint #) + when 'T : unativeint = HashCompare.HashUIntPtr (# "" x : unativeint #) + when 'T : uint16 = (# "" x : int #) + when 'T : string = HashCompare.HashString (# "" x : string #) + module Attributes = open System.Runtime.CompilerServices @@ -4930,16 +5381,16 @@ namespace Microsoft.FSharp.Core [] let PowGeneric (one,mul,x:'T,n) = ComputePowerGenericInlined one mul x n - let inline ComputeSlice start finish length = + let inline ComputeSlice bound start finish length = match start, finish with - | None, None -> 0, length - 1 - | None, Some n when n >= 0 -> 0, n - | Some m, None when m <= length -> m, length - 1 + | None, None -> bound, bound + length - 1 + | None, Some n when n >= bound -> bound , n + | Some m, None when m <= bound + length -> m, bound + length - 1 | Some m, Some n -> m, n | _ -> raise (System.IndexOutOfRangeException()) let inline GetArraySlice (arr: _[]) start finish = - let start, finish = ComputeSlice start finish arr.Length + let start, finish = ComputeSlice 0 start finish arr.Length GetArraySub arr start (finish - start + 1) let inline SetArraySlice (dst: _[]) start finish (src:_[]) = @@ -4948,14 +5399,17 @@ namespace Microsoft.FSharp.Core SetArraySub dst start (finish - start + 1) src let GetArraySlice2D (arr: _[,]) start1 finish1 start2 finish2 = - let start1, finish1 = ComputeSlice start1 finish1 (GetArray2DLength1 arr) - let start2, finish2 = ComputeSlice start2 finish2 (GetArray2DLength2 arr) + let bound1 = arr.GetLowerBound(0) + let bound2 = arr.GetLowerBound(1) + let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray2DLength1 arr) + let start2, finish2 = ComputeSlice bound2 start2 finish2 (GetArray2DLength2 arr) let len1 = (finish1 - start1 + 1) let len2 = (finish2 - start2 + 1) GetArray2DSub arr start1 start2 len1 len2 let inline GetArraySlice2DFixed1 (arr: _[,]) fixed1 start2 finish2 = - let start2, finish2 = ComputeSlice start2 finish2 (GetArray2DLength2 arr) + let bound2 = arr.GetLowerBound(1) + let start2, finish2 = ComputeSlice bound2 start2 finish2 (GetArray2DLength2 arr) let len2 = (finish2 - start2 + 1) let dst = zeroCreate (if len2 < 0 then 0 else len2) for j = 0 to len2 - 1 do @@ -4963,7 +5417,8 @@ namespace Microsoft.FSharp.Core dst let inline GetArraySlice2DFixed2 (arr: _[,]) start1 finish1 fixed2 = - let start1, finish1 = ComputeSlice start1 finish1 (GetArray2DLength1 arr) + let bound1 = arr.GetLowerBound(0) + let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray2DLength1 arr) let len1 = (finish1 - start1 + 1) let dst = zeroCreate (if len1 < 0 then 0 else len1) for i = 0 to len1 - 1 do @@ -4971,49 +5426,63 @@ namespace Microsoft.FSharp.Core dst let inline SetArraySlice2DFixed1 (dst: _[,]) fixed1 start2 finish2 (src:_[]) = - let start2 = (match start2 with None -> 0 | Some n -> n) - let finish2 = (match finish2 with None -> GetArray2DLength2 dst - 1 | Some n -> n) + let bound2 = dst.GetLowerBound(1) + let start2 = (match start2 with None -> bound2 | Some n -> n) + let finish2 = (match finish2 with None -> bound2 + GetArray2DLength2 dst - 1 | Some n -> n) let len2 = (finish2 - start2 + 1) for j = 0 to len2 - 1 do - SetArray2D dst fixed1 (start2+j) (GetArray src j) + SetArray2D dst fixed1 (bound2+start2+j) (GetArray src j) let inline SetArraySlice2DFixed2 (dst: _[,]) start1 finish1 fixed2 (src:_[]) = - let start1 = (match start1 with None -> 0 | Some n -> n) - let finish1 = (match finish1 with None -> GetArray2DLength1 dst - 1 | Some n -> n) + let bound1 = dst.GetLowerBound(0) + let start1 = (match start1 with None -> bound1 | Some n -> n) + let finish1 = (match finish1 with None -> bound1 + GetArray2DLength1 dst - 1 | Some n -> n) let len1 = (finish1 - start1 + 1) for i = 0 to len1 - 1 do - SetArray2D dst (start1+i) fixed2 (GetArray src i) + SetArray2D dst (bound1+start1+i) fixed2 (GetArray src i) let SetArraySlice2D (dst: _[,]) start1 finish1 start2 finish2 (src:_[,]) = - let start1 = (match start1 with None -> 0 | Some n -> n) - let start2 = (match start2 with None -> 0 | Some n -> n) - let finish1 = (match finish1 with None -> GetArray2DLength1 dst - 1 | Some n -> n) - let finish2 = (match finish2 with None -> GetArray2DLength2 dst - 1 | Some n -> n) + let bound1 = dst.GetLowerBound(0) + let bound2 = dst.GetLowerBound(1) + let start1 = (match start1 with None -> bound1 | Some n -> n) + let start2 = (match start2 with None -> bound2 | Some n -> n) + let finish1 = (match finish1 with None -> bound1 + GetArray2DLength1 dst - 1 | Some n -> n) + let finish2 = (match finish2 with None -> bound2 + GetArray2DLength2 dst - 1 | Some n -> n) SetArray2DSub dst start1 start2 (finish1 - start1 + 1) (finish2 - start2 + 1) src let GetArraySlice3D (arr: _[,,]) start1 finish1 start2 finish2 start3 finish3 = - let start1, finish1 = ComputeSlice start1 finish1 (GetArray3DLength1 arr) - let start2, finish2 = ComputeSlice start2 finish2 (GetArray3DLength2 arr) - let start3, finish3 = ComputeSlice start3 finish3 (GetArray3DLength3 arr) + let bound1 = arr.GetLowerBound(0) + let bound2 = arr.GetLowerBound(1) + let bound3 = arr.GetLowerBound(2) + let start1, finish1 = ComputeSlice bound1 start1 finish1 (GetArray3DLength1 arr) + let start2, finish2 = ComputeSlice bound2 start2 finish2 (GetArray3DLength2 arr) + let start3, finish3 = ComputeSlice bound3 start3 finish3 (GetArray3DLength3 arr) let len1 = (finish1 - start1 + 1) let len2 = (finish2 - start2 + 1) let len3 = (finish3 - start3 + 1) GetArray3DSub arr start1 start2 start3 len1 len2 len3 let SetArraySlice3D (dst: _[,,]) start1 finish1 start2 finish2 start3 finish3 (src:_[,,]) = - let start1 = (match start1 with None -> 0 | Some n -> n) - let start2 = (match start2 with None -> 0 | Some n -> n) - let start3 = (match start3 with None -> 0 | Some n -> n) - let finish1 = (match finish1 with None -> GetArray3DLength1 dst - 1 | Some n -> n) - let finish2 = (match finish2 with None -> GetArray3DLength2 dst - 1 | Some n -> n) - let finish3 = (match finish3 with None -> GetArray3DLength3 dst - 1 | Some n -> n) + let bound1 = dst.GetLowerBound(0) + let bound2 = dst.GetLowerBound(1) + let bound3 = dst.GetLowerBound(2) + let start1 = (match start1 with None -> bound1 | Some n -> n) + let start2 = (match start2 with None -> bound2 | Some n -> n) + let start3 = (match start3 with None -> bound3 | Some n -> n) + let finish1 = (match finish1 with None -> bound1 + GetArray3DLength1 dst - 1 | Some n -> n) + let finish2 = (match finish2 with None -> bound2 + GetArray3DLength2 dst - 1 | Some n -> n) + let finish3 = (match finish3 with None -> bound3 + GetArray3DLength3 dst - 1 | Some n -> n) SetArray3DSub dst start1 start2 start3 (finish1 - start1 + 1) (finish2 - start2 + 1) (finish3 - start3 + 1) src let GetArraySlice4D (arr: _[,,,]) start1 finish1 start2 finish2 start3 finish3 start4 finish4 = - let start1, finish1 = ComputeSlice start1 finish1 (Array4DLength1 arr) - let start2, finish2 = ComputeSlice start2 finish2 (Array4DLength2 arr) - let start3, finish3 = ComputeSlice start3 finish3 (Array4DLength3 arr) - let start4, finish4 = ComputeSlice start4 finish4 (Array4DLength4 arr) + let bound1 = arr.GetLowerBound(0) + let bound2 = arr.GetLowerBound(1) + let bound3 = arr.GetLowerBound(2) + let bound4 = arr.GetLowerBound(3) + let start1, finish1 = ComputeSlice bound1 start1 finish1 (Array4DLength1 arr) + let start2, finish2 = ComputeSlice bound2 start2 finish2 (Array4DLength2 arr) + let start3, finish3 = ComputeSlice bound3 start3 finish3 (Array4DLength3 arr) + let start4, finish4 = ComputeSlice bound4 start4 finish4 (Array4DLength4 arr) let len1 = (finish1 - start1 + 1) let len2 = (finish2 - start2 + 1) let len3 = (finish3 - start3 + 1) @@ -5021,20 +5490,24 @@ namespace Microsoft.FSharp.Core GetArray4DSub arr start1 start2 start3 start4 len1 len2 len3 len4 let SetArraySlice4D (dst: _[,,,]) start1 finish1 start2 finish2 start3 finish3 start4 finish4 (src:_[,,,]) = - let start1 = (match start1 with None -> 0 | Some n -> n) - let start2 = (match start2 with None -> 0 | Some n -> n) - let start3 = (match start3 with None -> 0 | Some n -> n) - let start4 = (match start4 with None -> 0 | Some n -> n) - let finish1 = (match finish1 with None -> Array4DLength1 dst - 1 | Some n -> n) - let finish2 = (match finish2 with None -> Array4DLength2 dst - 1 | Some n -> n) - let finish3 = (match finish3 with None -> Array4DLength3 dst - 1 | Some n -> n) - let finish4 = (match finish4 with None -> Array4DLength4 dst - 1 | Some n -> n) + let bound1 = dst.GetLowerBound(0) + let bound2 = dst.GetLowerBound(1) + let bound3 = dst.GetLowerBound(2) + let bound4 = dst.GetLowerBound(3) + let start1 = (match start1 with None -> bound1 | Some n -> n) + let start2 = (match start2 with None -> bound2 | Some n -> n) + let start3 = (match start3 with None -> bound3 | Some n -> n) + let start4 = (match start4 with None -> bound4 | Some n -> n) + let finish1 = (match finish1 with None -> bound1 + Array4DLength1 dst - 1 | Some n -> n) + let finish2 = (match finish2 with None -> bound2 + Array4DLength2 dst - 1 | Some n -> n) + let finish3 = (match finish3 with None -> bound3 + Array4DLength3 dst - 1 | Some n -> n) + let finish4 = (match finish4 with None -> bound4 + Array4DLength4 dst - 1 | Some n -> n) SetArray4DSub dst start1 start2 start3 start4 (finish1 - start1 + 1) (finish2 - start2 + 1) (finish3 - start3 + 1) (finish4 - start4 + 1) src let inline GetStringSlice (str:string) start finish = - let start, finish = ComputeSlice start finish str.Length + let start, finish = ComputeSlice 0 start finish str.Length let len = finish-start+1 - if len < 0 then String.Empty + if len <= 0 then String.Empty else str.Substring(start, len) [] diff --git a/src/fsharp/FSharp.Core/prim-types.fsi b/src/fsharp/FSharp.Core/prim-types.fsi index 52d351f1f9e..9a72dcb4dec 100644 --- a/src/fsharp/FSharp.Core/prim-types.fsi +++ b/src/fsharp/FSharp.Core/prim-types.fsi @@ -138,7 +138,7 @@ namespace Microsoft.FSharp.Core /// Adding this attribute to the let-binding for the definition of a top-level /// value makes the quotation expression that implements the value available /// for use at runtime. - [] + [] [] type ReflectedDefinitionAttribute = inherit System.Attribute @@ -146,6 +146,14 @@ namespace Microsoft.FSharp.Core /// ReflectedDefinitionAttribute new : unit -> ReflectedDefinitionAttribute + /// Creates an instance of the attribute + /// Indicates whether to include the evaluated value of the definition as the outer node of the quotation + /// ReflectedDefinitionAttribute + new : includeValue:bool -> ReflectedDefinitionAttribute + + /// The value of the attribute, indicating whether to include the evaluated value of the definition as the outer node of the quotation + member IncludeValue: bool + /// This attribute is used to indicate a generic container type satisfies the F# 'equality' /// constraint only if a generic argument also satisfies this constraint. For example, adding /// this attribute to parameter 'T on a type definition C<'T> means that a type C<X> only supports @@ -238,6 +246,13 @@ namespace Microsoft.FSharp.Core /// AllowNullLiteralAttribute new : unit -> AllowNullLiteralAttribute + /// Creates an instance of the attribute with the specified value + /// AllowNullLiteralAttribute + new : value: bool -> AllowNullLiteralAttribute + + /// The value of the attribute, indicating whether the type allows the null literal or not + member Value: bool + /// Adding this attribute to a value causes it to be compiled as a CLI constant literal. [] [] @@ -540,6 +555,15 @@ namespace Microsoft.FSharp.Core /// CompilationMappingAttribute new : sourceConstructFlags:SourceConstructFlags * variantNumber : int * sequenceNumber : int -> CompilationMappingAttribute + /// Creates an instance of the attribute + /// Indicates the type definitions needed to resolve the source construct. + /// CompilationMappingAttribute + new : resourceName:string * typeDefinitions:System.Type[] -> CompilationMappingAttribute + /// Indicates the resource the source construct relates to + member ResourceName : string + /// Indicates the type definitions needed to resolve the source construct + member TypeDefinitions : System.Type[] + /// This attribute is inserted automatically by the F# compiler to tag /// methods which are given the 'CompiledName' attribute. It is not intended /// for use from user code. @@ -596,8 +620,8 @@ namespace Microsoft.FSharp.Core /// This attribute is used to mark how a type is displayed by default when using /// '%A' printf formatting patterns and other two-dimensional text-based display layouts. - /// In this version of F# the only valid values are of the form PreText {PropertyName} PostText. - /// The property name indicates a property to evaluate and to display instead of the object itself. + /// In this version of F# valid values are of the form PreText {PropertyName1} PostText {PropertyName2} ... {PropertyNameX} PostText. + /// The property names indicate properties to evaluate and to display instead of the object itself. [] [] type StructuredFormatDisplayAttribute = @@ -842,7 +866,7 @@ namespace Microsoft.FSharp.Core val GenericComparer : System.Collections.IComparer /// Make an F# comparer object for the given type - val FastGenericComparer<'T> : System.Collections.Generic.IComparer<'T> when 'T : comparison + val inline FastGenericComparer<'T> : System.Collections.Generic.IComparer<'T> when 'T : comparison /// Make an F# comparer object for the given type, where it can be null if System.Collections.Generic.Comparer<'T>.Default val internal FastGenericComparerCanBeNull<'T> : System.Collections.Generic.IComparer<'T> when 'T : comparison @@ -856,6 +880,14 @@ namespace Microsoft.FSharp.Core /// System.Collections.Generic.IEqualityComparer<'T> val inline FastLimitedGenericEqualityComparer<'T> : limit: int -> System.Collections.Generic.IEqualityComparer<'T> when 'T : equality + /// Make an F# hash/equality object for the given type + [] + val FastGenericEqualityComparerFromTable<'T> : System.Collections.Generic.IEqualityComparer<'T> when 'T : equality + + [] + /// Make an F# comparer object for the given type + val FastGenericComparerFromTable<'T> : System.Collections.Generic.IComparer<'T> when 'T : comparison + /// Hash a value according to its structure. This hash is not limited by an overall node count when hashing F# /// records, lists and union types. /// The input object. @@ -983,23 +1015,22 @@ namespace Microsoft.FSharp.Core val inline DivideByInt< ^T > : x:^T -> y:int -> ^T when ^T : (static member DivideByInt : ^T * int -> ^T) /// For compiler use only - [] - type (* internal *) ErrorStrings = + module (* internal *) ErrorStrings = [] - static member InputSequenceEmptyString : string with get + val InputSequenceEmptyString : string [] - static member InputArrayEmptyString : string with get + val InputArrayEmptyString : string [] - static member AddressOpNotFirstClassString : string with get + val AddressOpNotFirstClassString : string [] - static member NoNegateMinValueString : string with get + val NoNegateMinValueString : string [] - static member InputMustBeNonNegativeString : string with get + val InputMustBeNonNegativeString : string //------------------------------------------------------------------------- @@ -1763,6 +1794,7 @@ namespace Microsoft.FSharp.Collections /// Gets the number of items contained in the list member Length : int + /// Gets a value indicating if the list contains no entries member IsEmpty : bool @@ -1778,8 +1810,11 @@ namespace Microsoft.FSharp.Collections /// The value at the given index. member Item : index:int -> 'T with get - // /// Get the elements of the list from the given start index to the given end index. - // member GetSlice : startIndex:int option * endIndex:int option -> 'T list + /// Gets a slice of the list, the elements of the list from the given start index to the given end index. + /// The start index. + /// The end index. + /// The sub list specified by the input indices. + member GetSlice : startIndex:int option * endIndex:int option -> 'T list /// Returns a list with head as its first element and tail as its subsequent elements /// A new head value for the list. @@ -2086,7 +2121,7 @@ namespace Microsoft.FSharp.Core [] val inline ignore : value:'T -> unit - /// Unboxes a strongly typed value. This is the inverse of box, unbox<t>(box<t> a) equals a. + /// Unboxes a strongly typed value. /// The boxed value. /// The unboxed result. [] @@ -2098,6 +2133,18 @@ namespace Microsoft.FSharp.Core [] val inline box : value:'T -> obj + /// Try to unbox a strongly typed value. + /// The boxed value. + /// The unboxed result as an option. + [] + val inline tryUnbox : value:obj -> 'T option + + /// Determines whether the given value is null. + /// The value to check. + /// True when value is null, false otherwise. + [] + val inline isNull : value:'T -> bool when 'T : null + /// Throw a System.Exception exception. /// The exception message. /// The result value. @@ -2256,8 +2303,7 @@ namespace Microsoft.FSharp.Core val using: resource:('T :> System.IDisposable) -> action:('T -> 'U) -> 'U - /// Generate a System.Type runtime representation of a static type. - /// The static type is still maintained on the value returned. + /// Generate a System.Type runtime representation of a static type. [] [] val inline typeof<'T> : System.Type @@ -3017,6 +3063,73 @@ namespace Microsoft.FSharp.Core /// The computed hash value. val inline hash : 'T -> int + /// A module of comparison and equality operators that are statically resolved, but which are not fully generic and do not make structural comparison. Opening this + /// module may make code that relies on structural or generic comparison no longer compile. + module NonStructuralComparison = + + /// Compares the two values for less-than + /// The first parameter. + /// The second parameter. + /// The result of the comparison. + val inline ( < ) : x:^T -> y:^U -> bool when (^T or ^U) : (static member ( < ) : ^T * ^U -> bool) + + /// Compares the two values for greater-than + /// The first parameter. + /// The second parameter. + /// The result of the comparison. + val inline ( > ) : x:^T -> y:^U -> bool when (^T or ^U) : (static member ( > ) : ^T * ^U -> bool) + + /// Compares the two values for greater-than-or-equal + /// The first parameter. + /// The second parameter. + /// The result of the comparison. + val inline ( >= ) : x:^T -> y:^U -> bool when (^T or ^U) : (static member ( >= ) : ^T * ^U -> bool) + + /// Compares the two values for less-than-or-equal + /// The first parameter. + /// The second parameter. + /// The result of the comparison. + val inline ( <= ) : x:^T -> y:^U -> bool when (^T or ^U) : (static member ( <= ) : ^T * ^U -> bool) + + /// Compares the two values for equality + /// The first parameter. + /// The second parameter. + /// The result of the comparison. + val inline ( = ) : x:^T -> y:^T -> bool when ^T : (static member ( = ) : ^T * ^T -> bool) + + /// Compares the two values for inequality + /// The first parameter. + /// The second parameter. + /// The result of the comparison. + val inline ( <> ) : x:^T -> y:^T -> bool when ^T : (static member ( <> ) : ^T * ^T -> bool) + + /// Compares the two values + /// The first value. + /// The second value. + /// The result of the comparison. + [] + val inline compare: e1:'T -> e2:^T -> int when ^T : (static member ( < ) : ^T * ^T -> bool) and ^T : (static member ( > ) : ^T * ^T -> bool) + + /// Maximum of the two values + /// The first value. + /// The second value. + /// The maximum value. + [] + val inline max : e1:^T -> e2:^T -> ^T when ^T : (static member ( < ) : ^T * ^T -> bool) + + /// Minimum of the two values + /// The first value. + /// The second value. + /// The minimum value. + [] + val inline min : e1:^T -> e2:^T -> ^T when ^T : (static member ( < ) : ^T * ^T -> bool) + + /// Calls GetHashCode() on the value + /// The value. + /// The hash code. + [] + val inline hash :value:'T -> int when 'T : equality + /// This module contains the basic arithmetic operations with overflow checks. module Checked = /// Overloaded unary negation (checks for overflow) diff --git a/src/fsharp/FSharp.Core/printf.fs b/src/fsharp/FSharp.Core/printf.fs index b06c97e0ba8..64784937098 100644 --- a/src/fsharp/FSharp.Core/printf.fs +++ b/src/fsharp/FSharp.Core/printf.fs @@ -131,7 +131,7 @@ module internal PrintfImpl = let parseTypeChar (s : string) i : char * int = s.[i], (i + 1) - + let findNextFormatSpecifier (s : string) i = let rec go i (buf : Text.StringBuilder) = if i >= s.Length then @@ -400,8 +400,8 @@ module internal PrintfImpl = env.Write s2 env.Finalize() ) - ) - + ) + static member PercentStarFinal1(s1 : string, s2 : string) = (fun (env : unit -> PrintfEnv<'State, 'Residue, 'Result>) -> (fun (_star1 : int) -> @@ -1386,4 +1386,4 @@ module Printf = [] let eprintfn fmt = fprintfn System.Console.Error fmt #endif -#endif \ No newline at end of file +#endif diff --git a/src/fsharp/FSharp.Core/quotations.fs b/src/fsharp/FSharp.Core/quotations.fs index a80a2c1660e..e016c4694d5 100644 --- a/src/fsharp/FSharp.Core/quotations.fs +++ b/src/fsharp/FSharp.Core/quotations.fs @@ -179,7 +179,7 @@ and | CoerceOp of Type | NewArrayOp of Type | NewDelegateOp of Type - | QuoteOp + | QuoteOp of bool | SequentialOp | AddressOfOp | VarSetOp @@ -190,16 +190,28 @@ and | ForIntegerRangeLoopOp | WhileLoopOp // Arbitrary spliced values - not serialized - | ValueOp of obj * Type + | ValueOp of obj * Type * string option + | WithValueOp of obj * Type | DefaultValueOp of Type and [] Expr(term:Tree,attribs:Expr list) = member x.Tree = term member x.CustomAttributes = attribs - override x.Equals(obj:obj) = - match obj with - | :? Expr as yt -> x.Tree = yt.Tree + + override x.Equals(yobj) = + match yobj with + | :? Expr as y -> + let rec eq t1 t2 = + match t1, t2 with + // We special-case ValueOp to ensure that ValueWithName = Value + | CombTerm(ValueOp(v1,ty1,_),[]),CombTerm(ValueOp(v2,ty2,_),[]) -> (v1 = v2) && (ty1 = ty2) + | CombTerm(c1, es1), CombTerm(c2,es2) -> c1 = c2 && es1.Length = es2.Length && (es1 = es2) + | VarTerm v1, VarTerm v2 -> (v1 = v2) + | LambdaTerm (v1,e1), LambdaTerm(v2,e2) -> (v1 = v2) && (e1 = e2) + | HoleTerm (ty1,n1), HoleTerm(ty2,n2) -> (ty1 = ty2) && (n1 = n2) + | _ -> false + eq x.Tree y.Tree | _ -> false override x.GetHashCode() = @@ -246,7 +258,9 @@ and [] | CombTerm(UnionCaseTestOp(unionCase),args) -> combL "UnionCaseTest" (exprs args@ [ucaseL unionCase]) | CombTerm(NewTupleOp _,args) -> combL "NewTuple" (exprs args) | CombTerm(TupleGetOp (_,i),[arg]) -> combL "TupleGet" ([expr arg] @ [objL i]) - | CombTerm(ValueOp(v,_),[]) -> combL "Value" [objL v] + | CombTerm(ValueOp(v,_,Some nm),[]) -> combL "ValueWithName" [objL v; wordL nm] + | CombTerm(ValueOp(v,_,None),[]) -> combL "Value" [objL v] + | CombTerm(WithValueOp(v,_),[defn]) -> combL "WithValue" [objL v; expr defn] | CombTerm(InstanceMethodCallOp(minfo),obj::args) -> combL "Call" [someL obj; minfoL minfo; listL (exprs args)] | CombTerm(StaticMethodCallOp(minfo),args) -> combL "Call" [noneL; minfoL minfo; listL (exprs args)] | CombTerm(InstancePropGetOp(pinfo),(obj::args)) -> combL "PropertyGet" [someL obj; pinfoL pinfo; listL (exprs args)] @@ -279,7 +293,7 @@ and [] | VarTerm(v) -> wordL v.Name | LambdaTerm(v,b) -> combL "Lambda" [varL v; expr b] | HoleTerm _ -> wordL "_" - | CombTerm(QuoteOp,args) -> combL "Quote" (exprs args) + | CombTerm(QuoteOp _,args) -> combL "Quote" (exprs args) | _ -> failwithf "Unexpected term in layout %A" x.Tree @@ -343,6 +357,7 @@ module Patterns = let mkArrayTy (t:Type) = t.MakeArrayType(); let mkExprTy (t:Type) = exprTyC.MakeGenericType([| t |]) + let rawExprTy = typeof //-------------------------------------------------------------------------- @@ -367,7 +382,13 @@ module Patterns = let (|Lambda|_|) (E x) = match x with LambdaTerm(a,b) -> Some (a,b) | _ -> None [] - let (|Quote|_|) (E x) = match x with CombTerm(QuoteOp,[a]) -> Some (a) | _ -> None + let (|Quote|_|) (E x) = match x with CombTerm(QuoteOp _,[a]) -> Some (a) | _ -> None + + [] + let (|QuoteRaw|_|) (E x) = match x with CombTerm(QuoteOp false,[a]) -> Some (a) | _ -> None + + [] + let (|QuoteTyped|_|) (E x) = match x with CombTerm(QuoteOp true,[a]) -> Some (a) | _ -> None [] let (|IfThenElse|_|) = function Comb3(IfThenElseOp,e1,e2,e3) -> Some(e1,e2,e3) | _ -> None @@ -412,10 +433,16 @@ module Patterns = let (|VarSet|_| ) = function E(CombTerm(VarSetOp,[E(VarTerm(v)); e])) -> Some(v,e) | _ -> None [] - let (|Value|_|) = function E(CombTerm(ValueOp (v,ty),_)) -> Some(v,ty) | _ -> None + let (|Value|_|) = function E(CombTerm(ValueOp (v,ty,_),_)) -> Some(v,ty) | _ -> None [] - let (|ValueObj|_|) = function E(CombTerm(ValueOp (v,_),_)) -> Some(v) | _ -> None + let (|ValueObj|_|) = function E(CombTerm(ValueOp (v,_,_),_)) -> Some(v) | _ -> None + + [] + let (|ValueWithName|_|) = function E(CombTerm(ValueOp (v,ty,Some nm),_)) -> Some(v,ty,nm) | _ -> None + + [] + let (|WithValue|_|) = function E(CombTerm(WithValueOp (v,ty),[e])) -> Some(v,ty,e) | _ -> None [] let (|AddressOf|_|) = function Comb1(AddressOfOp,e) -> Some(e) | _ -> None @@ -535,7 +562,8 @@ module Patterns = | NewRecordOp ty,_ -> ty | NewUnionCaseOp unionCase,_ -> unionCase.DeclaringType | UnionCaseTestOp _,_ -> typeof - | ValueOp (_, ty),_ -> ty + | ValueOp (_, ty, _),_ -> ty + | WithValueOp (_, ty),_ -> ty | TupleGetOp (ty,i),_ -> FSharpType.GetTupleElements(ty).[i] | NewTupleOp ty,_ -> ty | StaticPropGetOp prop,_ -> prop.PropertyType @@ -556,14 +584,15 @@ module Patterns = | NewDelegateOp ty,_ -> ty | DefaultValueOp ty,_ -> ty | TypeTestOp _,_ -> typeof - | QuoteOp,[expr] -> mkExprTy (typeOf expr) + | QuoteOp true,[expr] -> mkExprTy (typeOf expr) + | QuoteOp false,[_] -> rawExprTy | TryFinallyOp,[e1;_] -> typeOf e1 | TryWithOp,[e1;_;_] -> typeOf e1 | WhileLoopOp,_ | VarSetOp,_ | AddressSetOp,_ -> typeof | AddressOfOp,_ -> raise <| System.InvalidOperationException (SR.GetString(SR.QcannotTakeAddress)) - | (QuoteOp | SequentialOp | TryWithOp | TryFinallyOp | IfThenElseOp | AppOp),_ -> failwith "unreachable" + | (QuoteOp _ | SequentialOp | TryWithOp | TryFinallyOp | IfThenElseOp | AppOp),_ -> failwith "unreachable" //-------------------------------------------------------------------------- @@ -635,13 +664,15 @@ module Patterns = // [Correct by definition] let mkVar v = E(VarTerm v ) - let mkQuote(a) = E(CombTerm(QuoteOp,[(a:>Expr)] )) + let mkQuote(a,isTyped) = E(CombTerm(QuoteOp isTyped,[(a:>Expr)] )) - let mkValue (v,ty) = mkFE0 (ValueOp(v,ty)) + let mkValue (v,ty) = mkFE0 (ValueOp(v,ty,None)) + let mkValueWithName (v,ty,nm) = mkFE0 (ValueOp(v,ty,Some nm)) + let mkValueWithDefn (v,ty,defn) = mkFE1 (WithValueOp(v,ty)) defn let mkValueG (v:'T) = mkValue(box v, typeof<'T>) let mkLiftedValueOpG (v, ty: System.Type) = let obj = if ty.IsEnum then System.Enum.ToObject(ty, box v) else box v - ValueOp(obj, ty) + ValueOp(obj, ty, None) let mkUnit () = mkValue(null, typeof) let mkAddressOf v = mkFE1 AddressOfOp v let mkSequential (e1,e2) = mkFE2 SequentialOp (e1,e2) @@ -653,7 +684,7 @@ module Patterns = let mkTryFinally(e1,e2) = mkFE2 TryFinallyOp (e1,e2) let mkCoerce (ty,x) = mkFE1 (CoerceOp ty) x - let mkNull (ty) = mkFE0 (ValueOp(null,ty)) + let mkNull (ty) = mkFE0 (ValueOp(null,ty,None)) let mkApplication v = checkAppliedLambda v; mkFE2 AppOp v @@ -1135,8 +1166,9 @@ module Patterns = [] type InputState = { is: ByteStream; - istrings: string array; - localAssembly: System.Reflection.Assembly } + istrings: string[]; + localAssembly: System.Reflection.Assembly + referencedTypeDefs: Type[] } let u_byte_as_int st = st.is.ReadByte() @@ -1203,18 +1235,20 @@ module Patterns = | n -> failwith ("u_list: found number " + string n) let u_list f st = u_list_aux f [] st - let unpickle_obj localAssembly u phase2bytes = + let unpickleObj localAssembly referencedTypeDefs u phase2bytes = let phase2data = let st2 = - { is = new ByteStream(phase2bytes,0,phase2bytes.Length); - istrings = [| |]; - localAssembly=localAssembly } + { is = new ByteStream(phase2bytes,0,phase2bytes.Length) + istrings = [| |] + localAssembly=localAssembly + referencedTypeDefs=referencedTypeDefs } u_tup2 (u_list prim_u_string) u_bytes st2 let stringTab,phase1bytes = phase2data let st1 = - { is = new ByteStream(phase1bytes,0,phase1bytes.Length); - istrings = Array.ofList stringTab; - localAssembly=localAssembly } + { is = new ByteStream(phase1bytes,0,phase1bytes.Length) + istrings = Array.ofList stringTab + localAssembly=localAssembly + referencedTypeDefs=referencedTypeDefs } let res = u st1 res @@ -1243,8 +1277,8 @@ module Patterns = let decodeNamedTy tc tsR = mkNamedType(tc,tsR) let mscorlib = typeof.Assembly - let u_assref st = - let a = u_string st + let u_assref st = u_string st + let decodeAssemblyRef st a = if a = "" then mscorlib elif a = "." then st.localAssembly else @@ -1258,14 +1292,24 @@ module Patterns = let u_NamedType st = let a,b = u_tup2 u_string u_assref st - mkNamedTycon (a,b) + let mutable idx = 0 + // From FSharp.Core for F# 4.0+ (4.4.0.0+), referenced type definitions can be integer indexes into a table of type definitions provided on quotation + // deserialization, avoiding the need for System.Reflection.Assembly.Load + if System.Int32.TryParse(a, &idx) && b = "" then + st.referencedTypeDefs.[idx] + else + // escape commas found in type name, which are not already escaped + // '\' is not valid in a type name except as an escape character, so logic can be pretty simple + let escapedTcName = System.Text.RegularExpressions.Regex.Replace(a, @"(? u_unit st |> (fun () -> decodeFunTy) + | 1 -> u_unit st |> (fun () -> decodeFunTy) | 2 -> u_NamedType st |> decodeNamedTy - | 3 -> u_int st |> decodeArrayTy + | 3 -> u_int st |> decodeArrayTy | _ -> failwith "u_tyconstSpec" let appL fs env = List.map (fun f -> f env) fs @@ -1284,17 +1328,26 @@ module Patterns = [] type BindingEnv = - { vars : Map; - varn: int; + { /// Mapping from variable index to Var object for the variable + vars : Map + /// The number of indexes in the mapping + varn: int + /// The active type instantiation for generic type parameters typeInst : int -> Type } let addVar env v = { env with vars = env.vars.Add(env.varn,v); varn=env.varn+1 } - let envClosed (types:Type[]) = - { vars = Map.empty; - varn = 0; - typeInst = fun (n:int) -> types.[n] } + let mkTyparSubst (tyargs:Type[]) = + let n = tyargs.Length + fun idx -> + if idx < n then tyargs.[idx] + else raise <| System.InvalidOperationException (SR.GetString(SR.QtypeArgumentOutOfRange)) + + let envClosed (spliceTypes:Type[]) = + { vars = Map.empty; + varn = 0 + typeInst = mkTyparSubst spliceTypes } type Bindable<'T> = BindingEnv -> 'T @@ -1321,22 +1374,28 @@ module Patterns = let idx = u_int st (fun env -> E(HoleTerm(a env.typeInst , idx))) | 4 -> let a = u_Expr st - (fun env -> mkQuote(a env)) + (fun env -> mkQuote(a env, true)) | 5 -> let a = u_Expr st let attrs = u_list u_Expr st (fun env -> let e = (a env) in EA(e.Tree,(e.CustomAttributes @ List.map (fun attrf -> attrf env) attrs))) | 6 -> let a = u_dtype st (fun env -> mkVar(Var.Global("this", a env.typeInst))) + | 7 -> let a = u_Expr st + (fun env -> mkQuote(a env, false)) | _ -> failwith "u_Expr" + and u_VarDecl st = let s,b,mut = u_tup3 u_string u_dtype u_bool st (fun env -> new Var(s, b env.typeInst, mut)) + and u_VarRef st = let i = u_int st (fun env -> env.vars.[i]) + and u_RecdField st = let ty,nm = u_tup2 u_NamedType u_string st (fun tyargs -> getRecordProperty(mkNamedType(ty,tyargs),nm)) + and u_UnionCaseInfo st = let ty,nm = u_tup2 u_NamedType u_string st (fun tyargs -> getUnionCaseInfo(mkNamedType(ty,tyargs),nm)) @@ -1434,7 +1493,7 @@ module Patterns = | 37 -> u_tup2 u_NamedType u_string st |> (fun (a,b) tyargs -> let finfo = bindField(a,b,tyargs) in if finfo.IsStatic then StaticFieldGetOp(finfo) else InstanceFieldGetOp(finfo)) | 38 -> u_void st |> (fun () NoTyArgs -> LetRecCombOp) | 39 -> u_void st |> (fun () NoTyArgs -> AppOp) - | 40 -> u_void st |> (fun () (OneTyArg(ty)) -> ValueOp(null,ty)) + | 40 -> u_void st |> (fun () (OneTyArg(ty)) -> ValueOp(null,ty,None)) | 41 -> u_void st |> (fun () (OneTyArg(ty)) -> DefaultValueOp(ty)) | 42 -> u_PropInfoData st |> (fun (a,b,c,d) tyargs -> let pinfo = bindProp(a,b,c,d,tyargs) in if pinfoIsStatic pinfo then StaticPropSetOp(pinfo) else InstancePropSetOp(pinfo)) | 43 -> u_tup2 u_NamedType u_string st |> (fun (a,b) tyargs -> let finfo = bindField(a,b,tyargs) in if finfo.IsStatic then StaticFieldSetOp(finfo) else InstanceFieldSetOp(finfo)) @@ -1449,9 +1508,11 @@ module Patterns = let u_ReflectedDefinition = u_tup2 u_MethodBase u_Expr let u_ReflectedDefinitions = u_list u_ReflectedDefinition - let unpickleExpr (localType : System.Type) = unpickle_obj localType.Assembly u_Expr + let unpickleExpr (localType: Type) referencedTypes bytes = + unpickleObj localType.Assembly referencedTypes u_Expr bytes - let unpickleReflectedDefns (localAssembly : System.Reflection.Assembly) = unpickle_obj localAssembly u_ReflectedDefinitions + let unpickleReflectedDefns localAssembly referencedTypes bytes = + unpickleObj localAssembly referencedTypes u_ReflectedDefinitions bytes //-------------------------------------------------------------------------- // General utilities that will eventually be folded into @@ -1487,12 +1548,6 @@ module Patterns = res <- f (match res with Some a -> a | _ -> failwith "internal error") e.Current; res - let mkTyparSubst (tyargs:Type[]) = - let n = tyargs.Length - fun idx -> - if idx < n then tyargs.[idx] - else raise <| System.InvalidOperationException (SR.GetString(SR.QtypeArgumentOutOfRange)) - [] exception Clash of Var @@ -1676,26 +1731,23 @@ module Patterns = let reflectedDefinitionTable = new Dictionary(10,HashIdentity.Structural) - let registerReflectedDefinitions (assem: Assembly, rn, bytes: byte[]) = - let defns = unpickleReflectedDefns assem bytes - defns |> List.iter (fun (minfo,e) -> - //printfn "minfo = %A, handle = %A, token = %A" minfo minfo.Module.ModuleHandle minfo.MetadataToken + let registerReflectedDefinitions (assem, resourceName, bytes, referencedTypes) = + let defns = unpickleReflectedDefns assem referencedTypes bytes + defns |> List.iter (fun (minfo,exprBuilder) -> let key = ReflectedDefinitionTableKey.GetKey minfo lock reflectedDefinitionTable (fun () -> - //printfn "Adding %A, hc = %d" key (key.GetHashCode()); - reflectedDefinitionTable.Add(key,Entry(e)))); - //System.Console.WriteLine("Added {0} resource {1}", assem.FullName, rn); - decodedTopResources.Add((assem,rn),0) + reflectedDefinitionTable.Add(key,Entry(exprBuilder)))) + decodedTopResources.Add((assem,resourceName),0) - let resolveMethodBase (methodBase: MethodBase, tyargs: Type []) = + let tryGetReflectedDefinition (methodBase: MethodBase, tyargs: Type []) = checkNonNull "methodBase" methodBase let data = - let assem = methodBase.DeclaringType.Assembly - let key = ReflectedDefinitionTableKey.GetKey methodBase - //printfn "Looking for %A, hc = %d, hc2 = %d" key (key.GetHashCode()) (assem.GetHashCode()); - let ok,res = lock reflectedDefinitionTable (fun () -> reflectedDefinitionTable.TryGetValue(key)) - if ok then Some(res) else - //System.Console.WriteLine("Loading {0}", td.Assembly); + let assem = methodBase.DeclaringType.Assembly + let key = ReflectedDefinitionTableKey.GetKey methodBase + let ok,res = lock reflectedDefinitionTable (fun () -> reflectedDefinitionTable.TryGetValue(key)) + + if ok then Some res else + let qdataResources = // dynamic assemblies don't support the GetManifestResourceNames match assem with @@ -1704,15 +1756,31 @@ module Patterns = | :? System.Reflection.Emit.AssemblyBuilder -> [] #endif | _ -> - (try assem.GetManifestResourceNames() - // This raises NotSupportedException for dynamic assemblies - with :? NotSupportedException -> [| |]) - |> Array.toList - |> List.filter (fun rn -> - //System.Console.WriteLine("Considering resource {0}", rn); - rn.StartsWith(ReflectedDefinitionsResourceNameBase,StringComparison.Ordinal) && - not (decodedTopResources.ContainsKey((assem,rn)))) - |> List.map (fun rn -> rn,unpickleReflectedDefns assem (readToEnd (assem.GetManifestResourceStream(rn)))) + let resources = + // This raises NotSupportedException for dynamic assemblies + try assem.GetManifestResourceNames() + with :? NotSupportedException -> [| |] + [ for resourceName in resources do + if resourceName.StartsWith(ReflectedDefinitionsResourceNameBase,StringComparison.Ordinal) && + not (decodedTopResources.ContainsKey((assem,resourceName))) then + + let cmaAttribForResource = +#if FX_RESHAPED_REFLECTION + CustomAttributeExtensions.GetCustomAttributes(assem, typeof) |> Seq.toArray +#else + assem.GetCustomAttributes(typeof, false) +#endif + |> (function null -> [| |] | x -> x) + |> Array.tryPick (fun ca -> + match ca with + | :? CompilationMappingAttribute as cma when cma.ResourceName = resourceName -> Some cma + | _ -> None) + let resourceBytes = readToEnd (assem.GetManifestResourceStream(resourceName)) + let referencedTypes = + match cmaAttribForResource with + | None -> [| |] + | Some cma -> cma.TypeDefinitions + yield (resourceName,unpickleReflectedDefns assem referencedTypes resourceBytes) ] // ok, add to the table let ok,res = @@ -1720,15 +1788,15 @@ module Patterns = // check another thread didn't get in first if not (reflectedDefinitionTable.ContainsKey(key)) then qdataResources - |> List.iter (fun (rn,defns) -> - defns |> List.iter (fun (methodBase,e) -> - reflectedDefinitionTable.[ReflectedDefinitionTableKey.GetKey methodBase] <- Entry(e)); - decodedTopResources.Add((assem,rn),0)) + |> List.iter (fun (resourceName,defns) -> + defns |> List.iter (fun (methodBase,exprBuilder) -> + reflectedDefinitionTable.[ReflectedDefinitionTableKey.GetKey methodBase] <- Entry(exprBuilder)); + decodedTopResources.Add((assem,resourceName),0)) // we know it's in the table now, if it's ever going to be there reflectedDefinitionTable.TryGetValue(key) ); - if ok then Some(res) else None + if ok then Some res else None match data with | Some (Entry(exprBuilder)) -> @@ -1739,10 +1807,10 @@ module Patterns = | _ -> 0) if (expectedNumTypars <> tyargs.Length) then invalidArg "tyargs" (SR.GetString3(SR.QwrongNumOfTypeArgs, methodBase.Name, expectedNumTypars.ToString(), tyargs.Length.ToString())); - Some(exprBuilder {typeInst = mkTyparSubst tyargs; vars=Map.empty; varn=0}) + Some(exprBuilder (envClosed tyargs)) | None -> None - let resolveMethodBaseInstantiated (methodBase:MethodBase) = + let tryGetReflectedDefinitionInstantiated (methodBase:MethodBase) = checkNonNull "methodBase" methodBase match methodBase with | :? MethodInfo as minfo -> @@ -1750,16 +1818,16 @@ module Patterns = Array.append (getGenericArguments minfo.DeclaringType) (if minfo.IsGenericMethod then minfo.GetGenericArguments() else [| |]) - resolveMethodBase (methodBase, tyargs) + tryGetReflectedDefinition (methodBase, tyargs) | :? ConstructorInfo as cinfo -> let tyargs = getGenericArguments cinfo.DeclaringType - resolveMethodBase (methodBase, tyargs) + tryGetReflectedDefinition (methodBase, tyargs) | _ -> - resolveMethodBase (methodBase, [| |]) + tryGetReflectedDefinition (methodBase, [| |]) - let deserialize (localAssembly, types, splices, bytes) : Expr = - let expr = unpickleExpr localAssembly bytes (envClosed (Array.ofList types)) - fillHolesInRawExpr (Array.ofList splices) expr + let deserialize (localAssembly, referencedTypeDefs, spliceTypes, spliceExprs, bytes) : Expr = + let expr = unpickleExpr localAssembly referencedTypeDefs bytes (envClosed spliceTypes) + fillHolesInRawExpr spliceExprs expr let cast (expr: Expr) : Expr<'T> = @@ -1803,8 +1871,6 @@ type Expr with static member ForIntegerRangeLoop (v, start:Expr, finish:Expr, body:Expr) = mkForLoop(v, start, finish, body) - //static member Range: Expr * Expr -> Expr - //static member RangeStep: Expr * Expr * Expr -> Expr static member FieldGet (fieldInfo:FieldInfo) = checkNonNull "fieldInfo" fieldInfo @@ -1869,7 +1935,11 @@ type Expr with static member PropertySet (property:PropertyInfo, value:Expr, ?args) = mkStaticPropSet(property, defaultArg args [], value) - static member Quote (expr:Expr) = mkQuote expr + static member Quote (expr:Expr) = mkQuote (expr, true) + + static member QuoteRaw (expr:Expr) = mkQuote (expr, false) + + static member QuoteTyped (expr:Expr) = mkQuote (expr, true) static member Sequential (e1:Expr, e2:Expr) = mkSequential (e1, e2) @@ -1897,6 +1967,24 @@ type Expr with checkNonNull "expressionType" expressionType mkValue(obj, expressionType) + static member ValueWithName (v:'T, name:string) = + checkNonNull "name" name + mkValueWithName (box v, typeof<'T>, name) + + static member ValueWithName(obj: obj, expressionType: Type, name:string) = + checkNonNull "expressionType" expressionType + checkNonNull "name" name + mkValueWithName(obj, expressionType, name) + + static member WithValue (v:'T, definition: Expr<'T>) = + let raw = mkValueWithDefn(box v, typeof<'T>, definition) + new Expr<'T>(raw.Tree,raw.CustomAttributes) + + static member WithValue(obj: obj, expressionType: Type, definition: Expr) = + checkNonNull "expressionType" expressionType + mkValueWithDefn (obj, expressionType, definition) + + static member Var(v) = mkVar(v) @@ -1906,21 +1994,31 @@ type Expr with static member WhileLoop (e1:Expr, e2:Expr) = mkWhileLoop (e1, e2) - //static member IsInlinedMethodInfo(minfo:MethodInfo) = false static member TryGetReflectedDefinition(methodBase:MethodBase) = checkNonNull "methodBase" methodBase - resolveMethodBaseInstantiated(methodBase) + tryGetReflectedDefinitionInstantiated(methodBase) static member Cast(expr:Expr) = cast expr static member Deserialize(qualifyingType:Type, spliceTypes, spliceExprs, bytes: byte[]) = checkNonNull "qualifyingType" qualifyingType checkNonNull "bytes" bytes - deserialize (qualifyingType, spliceTypes, spliceExprs, bytes) + deserialize (qualifyingType, [| |], Array.ofList spliceTypes, Array.ofList spliceExprs, bytes) - static member RegisterReflectedDefinitions(assembly:Assembly, nm, bytes) = + static member Deserialize40(qualifyingType:Type, referencedTypeDefs, spliceTypes, spliceExprs, bytes: byte[]) = + checkNonNull "spliceExprs" spliceExprs + checkNonNull "spliceTypes" spliceTypes + checkNonNull "referencedTypeDefs" referencedTypeDefs + checkNonNull "qualifyingType" qualifyingType + checkNonNull "bytes" bytes + deserialize (qualifyingType, referencedTypeDefs, spliceTypes, spliceExprs, bytes) + + static member RegisterReflectedDefinitions(assembly, resourceName, bytes) = + Expr.RegisterReflectedDefinitions(assembly, resourceName, bytes, [| |]) + + static member RegisterReflectedDefinitions(assembly, resourceName, bytes, referencedTypeDefs) = checkNonNull "assembly" assembly - registerReflectedDefinitions(assembly, nm, bytes) + registerReflectedDefinitions(assembly, resourceName, bytes, referencedTypeDefs) static member GlobalVar<'T>(name) : Expr<'T> = checkNonNull "name" name @@ -1957,7 +2055,7 @@ module DerivedPatterns = [] let (|UInt64|_|) = function ValueObj(:? uint64 as v) -> Some(v) | _ -> None [] - let (|Unit|_|) = function Comb0(ValueOp(_,ty)) when ty = typeof -> Some() | _ -> None + let (|Unit|_|) = function Comb0(ValueOp(_,ty,None)) when ty = typeof -> Some() | _ -> None /// (fun (x,y) -> z) is represented as 'fun p -> let x = p#0 let y = p#1' etc. /// This reverses this encoding. @@ -2029,7 +2127,19 @@ module DerivedPatterns = | _ -> None) | _ -> invalidArg "templateParameter" (SR.GetString(SR.QunrecognizedMethodCall)) - + + let private new_decimal_info = + methodhandleof (fun (low, medium, high, isNegative, scale) -> LanguagePrimitives.IntrinsicFunctions.MakeDecimal low medium high isNegative scale) + |> System.Reflection.MethodInfo.GetMethodFromHandle + :?> MethodInfo + + [] + let (|Decimal|_|) = function + | Call (None, mi, [Int32 low; Int32 medium; Int32 high; Bool isNegative; Byte scale]) + when mi.Name = new_decimal_info.Name + && mi.DeclaringType.FullName = new_decimal_info.DeclaringType.FullName -> + Some (LanguagePrimitives.IntrinsicFunctions.MakeDecimal low medium high isNegative scale) + | _ -> None [] let (|MethodWithReflectedDefinition|_|) (minfo) = @@ -2085,8 +2195,10 @@ module ExprShape = | WhileLoopOp,[e1;e2] -> mkWhileLoop(e1,e2) | TryFinallyOp,[e1;e2] -> mkTryFinally(e1,e2) | TryWithOp,[e1;Lambda(v1,e2);Lambda(v2,e3)] -> mkTryWith(e1,v1,e2,v2,e3) - | QuoteOp,[e1] -> mkQuote(e1) - | ValueOp(v,ty),[] -> mkValue(v,ty) + | QuoteOp flg,[e1] -> mkQuote(e1,flg) + | ValueOp(v,ty,None),[] -> mkValue(v,ty) + | ValueOp(v,ty,Some nm),[] -> mkValueWithName(v,ty,nm) + | WithValueOp(v,ty),[e] -> mkValueWithDefn(v,ty,e) | _ -> raise <| System.InvalidOperationException (SR.GetString(SR.QillFormedAppOrLet)) diff --git a/src/fsharp/FSharp.Core/quotations.fsi b/src/fsharp/FSharp.Core/quotations.fsi index 522cb4fe410..262ed2a7a46 100644 --- a/src/fsharp/FSharp.Core/quotations.fsi +++ b/src/fsharp/FSharp.Core/quotations.fsi @@ -17,16 +17,20 @@ open System.Reflection type Var = /// The type associated with the variable member Type : Type + /// The declared name of the variable member Name : string + /// Indicates if the variable represents a mutable storage location member IsMutable: bool + /// Creates a new variable with the given name, type and mutability /// The declared name of the variable. /// The type associated with the variable. /// Indicates if the variable represents a mutable storage location. Default is false. /// The created variable. new : name:string * typ:Type * ?isMutable : bool -> Var + /// Fetches or create a new variable with the given name and type from a global pool of shared variables /// indexed by name and type /// The name of the variable. @@ -232,11 +236,22 @@ type Expr = /// The resulting expression. static member PropertySet: property:PropertyInfo * value:Expr * ?indexerArgs: Expr list -> Expr - /// Builds an expression that represents a nested quotation literal + /// Builds an expression that represents a nested typed or raw quotation literal /// The expression being quoted. /// The resulting expression. + [] static member Quote: inner:Expr -> Expr + /// Builds an expression that represents a nested raw quotation literal + /// The expression being quoted. + /// The resulting expression. + static member QuoteRaw: inner:Expr -> Expr + + /// Builds an expression that represents a nested typed quotation literal + /// The expression being quoted. + /// The resulting expression. + static member QuoteTyped: inner:Expr -> Expr + /// Builds an expression that represents the sequential execution of one expression followed by another /// The first expression. /// The second expression. @@ -288,6 +303,35 @@ type Expr = /// The resulting expression. static member Value : value:'T -> Expr + /// Builds an expression that represents a constant value, arising from a variable of the given name + /// The typed value. + /// The name of the variable. + /// The resulting expression. + static member ValueWithName : value:'T * name: string -> Expr + + /// Builds an expression that represents a constant value of a particular type, arising from a variable of the given name + /// The untyped object. + /// The type of the object. + /// The name of the variable. + /// The resulting expression. + static member ValueWithName : value:obj * expressionType:Type * name: string -> Expr + + /// Builds an expression that represents a value and its associated reflected definition as a quotation + /// The value being quoted. + /// The definition of the value being quoted. + /// The resulting expression. + static member WithValue: value: 'T * definition: Expr<'T> -> Expr<'T> + + + /// Builds an expression that represents a value and its associated reflected definition as a quotation + /// The untyped object. + /// The type of the object. + /// The definition of the value being quoted. + /// The resulting expression. + static member WithValue: value: obj * expressionType:Type * definition: Expr -> Expr + + + /// Builds an expression that represents a variable /// The input variable. /// The resulting expression. @@ -321,27 +365,42 @@ type Expr = /// The reflection definition or None if a match could not be found. static member TryGetReflectedDefinition : methodBase:MethodBase -> Expr option - /// This function is called automatically when quotation syntax (<@ @>) and related typed-expression - /// quotations are used. The bytes are a pickled binary representation of an unlinked form of the quoted expression, - /// and the System.Type argument is any type in the assembly where the quoted - /// expression occurs, i.e. it helps scope the interpretation of the cross-assembly - /// references in the bytes. + /// This function is called automatically when quotation syntax (<@ @>) and other sources of + /// quotations are used. /// A type in the assembly where the quotation occurs. - /// The list of spliced types. - /// The list of spliced expressions. + /// The spliced types, to replace references to type variables. + /// The spliced expressions to replace references to spliced expressions. /// The serialized form of the quoted expression. /// The resulting expression. static member Deserialize : qualifyingType:System.Type * spliceTypes:list * spliceExprs:list * bytes:byte[] -> Expr + /// This function is called automatically when quotation syntax (<@ @>) and other sources of + /// quotations are used. + /// A type in the assembly where the quotation occurs. + /// The type definitions referenced. + /// The spliced types, to replace references to type variables. + /// The spliced expressions to replace references to spliced expressions. + /// The serialized form of the quoted expression. + /// The resulting expression. + static member Deserialize40 : qualifyingType:Type * referencedTypes:Type[] * spliceTypes:Type[] * spliceExprs:Expr[] * bytes:byte[] -> Expr + /// Permits interactive environments such as F# Interactive /// to explicitly register new pickled resources that represent persisted - /// top level definitions. The string indicates a unique name for the resources - /// being added. The format for the bytes is the encoding generated by the F# compiler. + /// top level definitions. /// The assembly associated with the resource. /// The unique name for the resources being added. /// The serialized resource to register with the environment. static member RegisterReflectedDefinitions: assembly:Assembly * resource:string * serializedValue:byte[] -> unit + /// Permits interactive environments such as F# Interactive + /// to explicitly register new pickled resources that represent persisted + /// top level definitions. + /// The assembly associated with the resource. + /// The unique name for the resources being added. + /// The type definitions referenced. + /// The serialized resource to register with the environment. + static member RegisterReflectedDefinitions: assembly:Assembly * resource:string * serializedValue:byte[] * referencedTypes:Type[] -> unit + /// Fetches or creates a new variable with the given name and type from a global pool of shared variables /// indexed by name and type. The type is given by the expicit or inferred type parameter /// The variable name. @@ -373,184 +432,241 @@ module Patterns = /// Expr option [] val (|AddressOf|_|) : input:Expr -> Expr option + /// An active pattern to recognize expressions that represent setting the value held at an address /// The input expression to match against. /// (Expr * Expr) option [] val (|AddressSet|_|) : input:Expr -> (Expr * Expr) option + /// An active pattern to recognize expressions that represent applications of first class function values /// The input expression to match against. /// (Expr * Expr) option [] val (|Application|_|) : input:Expr -> (Expr * Expr) option + /// An active pattern to recognize expressions that represent calls to static and instance methods, and functions defined in modules /// The input expression to match against. /// (Expr option * MethodInfo * Expr list) option [] val (|Call|_|) : input:Expr -> (Expr option * MethodInfo * Expr list) option + /// An active pattern to recognize expressions that represent coercions from one type to another /// The input expression to match against. /// (Expr * Type) option [] val (|Coerce|_|) : input:Expr -> (Expr * Type) option + /// An active pattern to recognize expressions that represent getting a static or instance field /// The input expression to match against. /// (Expr option * FieldInfo) option [] val (|FieldGet|_|) : input:Expr -> (Expr option * FieldInfo) option + /// An active pattern to recognize expressions that represent setting a static or instance field /// The input expression to match against. /// (Expr option * FieldInfo * Expr) option [] val (|FieldSet|_|) : input:Expr -> (Expr option * FieldInfo * Expr) option + /// An active pattern to recognize expressions that represent loops over integer ranges /// The input expression to match against. /// (Var * Expr * Expr * Expr) option [] val (|ForIntegerRangeLoop|_|) : input:Expr -> (Var * Expr * Expr * Expr) option + /// An active pattern to recognize expressions that represent while loops /// The input expression to match against. /// (Expr * Expr) option [] val (|WhileLoop|_|) : input:Expr -> (Expr * Expr) option + /// An active pattern to recognize expressions that represent conditionals /// The input expression to match against. /// (Expr * Expr * Expr) option [] val (|IfThenElse|_|) : input:Expr -> (Expr * Expr * Expr) option + /// An active pattern to recognize expressions that represent first class function values /// The input expression to match against. /// (Var * Expr) option [] val (|Lambda|_|) : input:Expr -> (Var * Expr) option + /// An active pattern to recognize expressions that represent let bindings /// The input expression to match against. /// (Var * Expr * Expr) option [] val (|Let|_|) : input:Expr -> (Var * Expr * Expr) option + /// An active pattern to recognize expressions that represent recursive let bindings of one or more variables /// The input expression to match against. /// ((Var * Expr) list * Expr) option [] val (|LetRecursive|_|) : input:Expr -> ((Var * Expr) list * Expr) option + /// An active pattern to recognize expressions that represent the construction of arrays /// The input expression to match against. /// (Type * Expr list) option [] val (|NewArray|_|) : input:Expr -> (Type * Expr list) option + /// An active pattern to recognize expressions that represent invocations of a default constructor of a struct /// The input expression to match against. /// Type option [] val (|DefaultValue|_|) : input:Expr -> Type option + /// An active pattern to recognize expressions that represent construction of delegate values /// The input expression to match against. /// (Type * Var list * Expr) option [] val (|NewDelegate|_|) : input:Expr -> (Type * Var list * Expr) option + /// An active pattern to recognize expressions that represent invocation of object constructors /// The input expression to match against. /// (ConstructorInfo * Expr list) option [] val (|NewObject|_|) : input:Expr -> (ConstructorInfo * Expr list) option + /// An active pattern to recognize expressions that represent construction of record values /// The input expression to match against. /// (Type * Expr list) option [] val (|NewRecord|_|) : input:Expr -> (Type * Expr list) option + /// An active pattern to recognize expressions that represent construction of particular union case values /// The input expression to match against. /// (UnionCaseInfo * Expr list) option [] val (|NewUnionCase|_|) : input:Expr -> (UnionCaseInfo * Expr list) option + /// An active pattern to recognize expressions that represent construction of tuple values /// The input expression to match against. /// (Expr list) option [] val (|NewTuple|_|) : input:Expr -> (Expr list) option + /// An active pattern to recognize expressions that represent the read of a static or instance property, or a non-function value declared in a module /// The input expression to match against. /// (Expr option * PropertyInfo * Expr list) option [] val (|PropertyGet|_|) : input:Expr -> (Expr option * PropertyInfo * Expr list) option + /// An active pattern to recognize expressions that represent setting a static or instance property, or a non-function value declared in a module /// The input expression to match against. /// (Expr option * PropertyInfo * Expr list * Expr) option [] val (|PropertySet|_|) : input:Expr -> (Expr option * PropertyInfo * Expr list * Expr) option + /// An active pattern to recognize expressions that represent a nested quotation literal /// The input expression to match against. /// Expr option [] + [] val (|Quote|_|) : input:Expr -> Expr option + + /// An active pattern to recognize expressions that represent a nested raw quotation literal + /// The input expression to match against. + /// Expr option + [] + val (|QuoteRaw|_|) : input:Expr -> Expr option + + /// An active pattern to recognize expressions that represent a nested typed quotation literal + /// The input expression to match against. + /// Expr option + [] + val (|QuoteTyped|_|) : input:Expr -> Expr option + /// An active pattern to recognize expressions that represent sequential exeuction of one expression followed by another /// The input expression to match against. /// (Expr * Expr) option [] val (|Sequential|_|) : input:Expr -> (Expr * Expr) option + /// An active pattern to recognize expressions that represent a try/with construct for exception filtering and catching /// The input expression to match against. /// (Expr * Var * Expr * Var * Expr) option [] val (|TryWith|_|) : input:Expr -> (Expr * Var * Expr * Var * Expr) option + /// An active pattern to recognize expressions that represent a try/finally construct /// The input expression to match against. - /// (Expr * Expr) option + /// The body and handler parts of the try/finally expression [] val (|TryFinally|_|) : input:Expr -> (Expr * Expr) option + /// An active pattern to recognize expressions that represent getting a tuple field /// The input expression to match against. - /// (Expr * int) option + /// The expression and tuple field being accessed [] val (|TupleGet|_|) : input:Expr -> (Expr * int) option + /// An active pattern to recognize expressions that represent a dynamic type test /// The input expression to match against. - /// (Expr * Type) option + /// The expression and type being tested [] val (|TypeTest|_|) : input:Expr -> (Expr * Type) option + /// An active pattern to recognize expressions that represent a test if a value is of a particular union case /// The input expression to match against. - /// (Expr * UnionCaseInfo) option + /// The expression and union case being tested [] val (|UnionCaseTest|_|) : input:Expr -> (Expr * UnionCaseInfo) option - /// An active pattern to recognize expressions that represent a constant value + + /// An active pattern to recognize expressions that represent a constant value. This also matches expressions matched by ValueWithName. /// The input expression to match against. - /// (obj * Type) option + /// The boxed value and its static type [] val (|Value|_|) : input:Expr -> (obj * Type) option + + /// An active pattern to recognize expressions that represent a constant value + /// The input expression to match against. + /// The boxed value, its static type and its name + [] + val (|ValueWithName|_|) : input:Expr -> (obj * Type * string) option + + /// An active pattern to recognize expressions that are a value with an associated definition + /// The input expression to match against. + /// The boxed value, its static type and its definition + [] + val (|WithValue|_|) : input:Expr -> (obj * Type * Expr) option + /// An active pattern to recognize expressions that represent a variable /// The input expression to match against. /// Var option [] val (|Var|_|) : input:Expr -> Var option + /// An active pattern to recognize expressions that represent setting a mutable variable /// The input expression to match against. /// (Var * Expr) option [] val (|VarSet|_|) : input:Expr -> (Var * Expr) option - //---------------------------------------------------------------- - // Helpers [] /// Contains a set of derived F# active patterns to analyze F# expression objects module DerivedPatterns = - //val (|NewList|_|) : input:Expr -> Expr list option + /// An active pattern to recognize expressions that represent a (possibly curried or tupled) first class function value /// The input expression to match against. /// (Var list list * Expr) option [] val (|Lambdas|_|) : input:Expr -> (Var list list * Expr) option + /// An active pattern to recognize expressions that represent the application of a (possibly curried or tupled) first class function value /// The input expression to match against. /// (Expr * Expr list list) option [] val (|Applications|_|) : input:Expr -> (Expr * Expr list list) option + /// An active pattern to recognize expressions of the form a && b /// The input expression to match against. /// (Expr * Expr) option [] val (|AndAlso|_|) : input:Expr -> (Expr * Expr) option + /// An active pattern to recognize expressions of the form a || b /// The input expression to match against. /// (Expr * Expr) option @@ -562,71 +678,91 @@ module DerivedPatterns = /// unit option [] val (|Unit|_|) : input:Expr -> unit option + /// An active pattern to recognize constant boolean expressions /// The input expression to match against. /// bool option [] val (|Bool|_|) : input:Expr -> bool option + /// An active pattern to recognize constant string expressions /// The input expression to match against. /// string option [] val (|String|_|) : input:Expr -> string option + /// An active pattern to recognize constant 32-bit floating point number expressions /// The input expression to match against. /// float32 option [] val (|Single|_|) : input:Expr -> float32 option + /// An active pattern to recognize constant 64-bit floating point number expressions /// The input expression to match against. /// float option [] val (|Double|_|) : input:Expr -> float option + /// An active pattern to recognize constant unicode character expressions /// The input expression to match against. /// char option [] val (|Char|_|) : input:Expr -> char option + /// An active pattern to recognize constant signed byte expressions /// The input expression to match against. /// sbyte option [] val (|SByte|_|) : input:Expr -> sbyte option + /// An active pattern to recognize constant byte expressions /// The input expression to match against. /// byte option [] val (|Byte|_|) : input:Expr -> byte option + /// An active pattern to recognize constant int16 expressions /// The input expression to match against. /// int16 option [] val (|Int16|_|) : input:Expr -> int16 option + /// An active pattern to recognize constant unsigned int16 expressions /// The input expression to match against. /// uint16 option [] val (|UInt16|_|) : input:Expr -> uint16 option + /// An active pattern to recognize constant int32 expressions /// The input expression to match against. /// int32 option [] val (|Int32|_|) : input:Expr -> int32 option + /// An active pattern to recognize constant unsigned int32 expressions /// The input expression to match against. /// uint32 option [] val (|UInt32|_|) : input:Expr -> uint32 option + /// An active pattern to recognize constant int64 expressions /// The input expression to match against. /// int64 option [] val (|Int64|_|) : input:Expr -> int64 option + /// An active pattern to recognize constant unsigned int64 expressions /// The input expression to match against. /// uint64 option [] val (|UInt64|_|) : input:Expr -> uint64 option + + /// An active pattern to recognize constant decimal expressions + /// The input expression to match against. + /// decimal option + [] + val (|Decimal|_|) : input:Expr -> decimal option + /// A parameterized active pattern to recognize calls to a specified function or method. /// The returned elements are the optional target object (present if the target is an /// instance method), the generic type instantation (non-empty if the target is a generic @@ -649,6 +785,7 @@ module DerivedPatterns = /// The expression of the method definition if found, or None. [] val (|PropertyGetterWithReflectedDefinition|_|) : propertyInfo:PropertyInfo -> Expr option + /// An active pattern to recognize property setters that have an associated ReflectedDefinition /// The description of the property. /// The expression of the method definition if found, or None. @@ -658,6 +795,7 @@ module DerivedPatterns = /// Active patterns for traversing, visiting, rebuilding and tranforming expressions in a generic way [] module ExprShape = + /// An active pattern that performs a complete decomposition viewing the expression tree as a binding structure /// The input expression. /// The decomposed Var, Lambda, or ConstApp. @@ -666,6 +804,7 @@ module ExprShape = input:Expr -> Choice)> // ConstApp + /// Re-build combination expressions. The first parameter should be an object /// returned by the ShapeCombination case of the active pattern in this module. /// The input shape. diff --git a/src/fsharp/FSharp.Core/reflect.fs b/src/fsharp/FSharp.Core/reflect.fs index bb0a76051df..57034bd6802 100644 --- a/src/fsharp/FSharp.Core/reflect.fs +++ b/src/fsharp/FSharp.Core/reflect.fs @@ -125,9 +125,12 @@ module ReflectionAdapters = member this.GetConstructor(parameterTypes : Type[]) = this.GetTypeInfo().DeclaredConstructors |> Seq.filter (fun ci -> - let parameters = ci.GetParameters() - (parameters.Length = parameterTypes.Length) && - (parameterTypes, parameters) ||> Array.forall2 (fun ty pi -> pi.ParameterType.Equals ty) + not ci.IsStatic && //exclude type initializer + ( + let parameters = ci.GetParameters() + (parameters.Length = parameterTypes.Length) && + (parameterTypes, parameters) ||> Array.forall2 (fun ty pi -> pi.ParameterType.Equals ty) + ) ) |> Seq.toArray |> commit diff --git a/src/fsharp/FSharp.Core/seq.fs b/src/fsharp/FSharp.Core/seq.fs index 99a279a97bb..fc297daebc2 100644 --- a/src/fsharp/FSharp.Core/seq.fs +++ b/src/fsharp/FSharp.Core/seq.fs @@ -58,9 +58,13 @@ namespace Microsoft.FSharp.Collections let Empty<'T> () = (new EmptyEnumerator<'T>() :> IEnumerator<'T>) + let rec tryItem index (e : IEnumerator<'T>) = + if not (e.MoveNext()) then None + elif index = 0 then Some(e.Current) + else tryItem (index-1) e + let rec nth index (e : IEnumerator<'T>) = - if not (e.MoveNext()) then invalidArg "index" (SR.GetString(SR.notEnoughElements)); - if index < 0 then invalidArg "index" (SR.GetString(SR.inputMustBeNonNegative)); + if not (e.MoveNext()) then invalidArg "index" (SR.GetString(SR.notEnoughElements)) if index = 0 then e.Current else nth (index-1) e @@ -148,6 +152,48 @@ namespace Microsoft.FSharp.Collections e2.Dispose() } + let mapi2 f (e1 : IEnumerator<_>) (e2 : IEnumerator<_>) : IEnumerator<_> = + let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) + let i = ref (-1) + upcast + { new MapEnumerator<_>() with + member this.DoMoveNext curr = + i := !i + 1 + if (e1.MoveNext() && e2.MoveNext()) then + curr <- f.Invoke(!i, e1.Current, e2.Current) + true + else + false + member this.Dispose() = + try + e1.Dispose() + finally + e2.Dispose() + } + + let map3 f (e1 : IEnumerator<_>) (e2 : IEnumerator<_>) (e3 : IEnumerator<_>) : IEnumerator<_> = + let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) + upcast + { new MapEnumerator<_>() with + member this.DoMoveNext curr = + let n1 = e1.MoveNext() + let n2 = e2.MoveNext() + let n3 = e3.MoveNext() + + if n1 && n2 && n3 then + curr <- f.Invoke(e1.Current, e2.Current, e3.Current) + true + else + false + member this.Dispose() = + try + e1.Dispose() + finally + try + e2.Dispose() + finally + e3.Dispose() + } let choose f (e : IEnumerator<'T>) = let started = ref false @@ -833,6 +879,7 @@ namespace Microsoft.FSharp.Collections let mkDelayedSeq (f: unit -> IEnumerable<'T>) = mkSeq (fun () -> f().GetEnumerator()) let mkUnfoldSeq f x = mkSeq (fun () -> IEnumerator.unfold f x) + let inline indexNotFound() = raise (new System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) [] let delay f = mkDelayedSeq f @@ -858,12 +905,23 @@ namespace Microsoft.FSharp.Collections while e.MoveNext() do f e.Current; - [] - let nth i (source : seq<'T>) = + [] + let item i (source : seq<'T>) = checkNonNull "source" source + if i < 0 then invalidArg "index" (SR.GetString(SR.inputMustBeNonNegative)) use e = source.GetEnumerator() IEnumerator.nth i e + [] + let tryItem i (source : seq<'T>) = + checkNonNull "source" source + if i < 0 then None else + use e = source.GetEnumerator() + IEnumerator.tryItem i e + + [] + let nth i (source : seq<'T>) = item i source + [] let iteri f (source : seq<'T>) = checkNonNull "source" source @@ -883,6 +941,15 @@ namespace Microsoft.FSharp.Collections state <- f e.Current state + [] + let inline contains element (source : seq<'T>) = + checkNonNull "source" source + use e = source.GetEnumerator() + let mutable state = false + while (not state && e.MoveNext()) do + state <- element = e.Current + state + [] let forall f (source : seq<'T>) = checkNonNull "source" source @@ -903,11 +970,24 @@ namespace Microsoft.FSharp.Collections while (e1.MoveNext() && e2.MoveNext()) do f.Invoke(e1.Current, e2.Current); + [] + let iteri2 f (source1 : seq<_>) (source2 : seq<_>) = + checkNonNull "source1" source1 + checkNonNull "source2" source2 + use e1 = source1.GetEnumerator() + use e2 = source2.GetEnumerator() + let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) + let mutable i = 0 + while (e1.MoveNext() && e2.MoveNext()) do + f.Invoke(i, e1.Current, e2.Current) + i <- i + 1 // Build an IEnumerble by wrapping/transforming iterators as they get generated. let revamp f (ie : seq<_>) = mkSeq (fun () -> f (ie.GetEnumerator())) let revamp2 f (ie1 : seq<_>) (source2 : seq<_>) = mkSeq (fun () -> f (ie1.GetEnumerator()) (source2.GetEnumerator())) + let revamp3 f (ie1 : seq<_>) (source2 : seq<_>) (source3 : seq<_>) = + mkSeq (fun () -> f (ie1.GetEnumerator()) (source2.GetEnumerator()) (source3.GetEnumerator())) [] let filter f source = @@ -927,17 +1007,35 @@ namespace Microsoft.FSharp.Collections checkNonNull "source" source revamp (IEnumerator.mapi f) source + [] + let mapi2 f source1 source2 = + checkNonNull "source1" source1 + checkNonNull "source2" source2 + revamp2 (IEnumerator.mapi2 f) source1 source2 + [] let map2 f source1 source2 = checkNonNull "source1" source1 checkNonNull "source2" source2 revamp2 (IEnumerator.map2 f) source1 source2 + [] + let map3 f source1 source2 source3 = + checkNonNull "source1" source1 + checkNonNull "source2" source2 + checkNonNull "source3" source3 + revamp3 (IEnumerator.map3 f) source1 source2 source3 + [] let choose f source = checkNonNull "source" source revamp (IEnumerator.choose f) source + [] + let indexed source = + checkNonNull "source" source + mapi (fun i x -> i,x) source + [] let zip source1 source2 = checkNonNull "source1" source1 @@ -969,7 +1067,7 @@ namespace Microsoft.FSharp.Collections let pick f source = checkNonNull "source" source match tryPick f source with - | None -> raise (System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) + | None -> indexNotFound() | Some x -> x [] @@ -986,7 +1084,7 @@ namespace Microsoft.FSharp.Collections let find f source = checkNonNull "source" source match tryFind f source with - | None -> raise (System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) + | None -> indexNotFound() | Some x -> x [] @@ -1042,6 +1140,22 @@ namespace Microsoft.FSharp.Collections state <- f.Invoke(state, e.Current) state + [] + let fold2<'T1,'T2,'State> f (state:'State) (source1: seq<'T1>) (source2: seq<'T2>) = + checkNonNull "source1" source1 + checkNonNull "source2" source2 + + use e1 = source1.GetEnumerator() + use e2 = source2.GetEnumerator() + + let f = OptimizedClosures.FSharpFunc<_,_,_,_>.Adapt(f) + + let mutable state = state + while e1.MoveNext() && e2.MoveNext() do + state <- f.Invoke(state, e1.Current, e2.Current) + + state + [] let reduce f (source : seq<'T>) = checkNonNull "source" source @@ -1055,7 +1169,16 @@ namespace Microsoft.FSharp.Collections let fromGenerator f = mkSeq(fun () -> Generator.EnumerateFromGenerator (f())) let toGenerator (ie : seq<_>) = Generator.GenerateFromEnumerator (ie.GetEnumerator()) - + + [] + let replicate count x = + #if FX_ATLEAST_40 + System.Linq.Enumerable.Repeat(x,count) + #else + if count < 0 then invalidArg "count" (SR.GetString(SR.inputMustBeNonNegative)) + seq { for _ in 1 .. count -> x } + #endif + [] let append (source1: seq<'T>) (source2: seq<'T>) = @@ -1077,7 +1200,7 @@ namespace Microsoft.FSharp.Collections let rec go () = let e1ok = e1.MoveNext() let e2ok = e2.MoveNext() - let c = (if e1ok = e2ok then 0 else if e1ok then 1 else -1) + let c = if e1ok = e2ok then 0 else if e1ok then 1 else -1 if c <> 0 then c else if not e1ok || not e2ok then 0 else @@ -1117,6 +1240,34 @@ namespace Microsoft.FSharp.Collections let res = ResizeArray<_>(source) res.ToArray() + let foldArraySubRight (f:OptimizedClosures.FSharpFunc<'T,_,_>) (arr: 'T[]) start fin acc = + let mutable state = acc + for i = fin downto start do + state <- f.Invoke(arr.[i], state) + state + + [] + let foldBack<'T,'State> f (source : seq<'T>) (x:'State) = + checkNonNull "source" source + let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) + let arr = toArray source + let len = arr.Length + foldArraySubRight f arr 0 (len - 1) x + + [] + let foldBack2<'T1,'T2,'State> f (source1 : seq<'T1>) (source2 : seq<'T2>) (x:'State) = + let zipped = zip source1 source2 + foldBack ((<||) f) zipped x + + [] + let reduceBack f (source : seq<'T>) = + checkNonNull "source" source + let arr = toArray source + match arr.Length with + | 0 -> invalidArg "source" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString + | len -> + let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) + foldArraySubRight f arr 0 (len - 2) arr.[len - 1] [] let singleton x = mkSeq (fun () -> IEnumerator.Singleton x) @@ -1153,6 +1304,24 @@ namespace Microsoft.FSharp.Collections zref := f.Invoke(!zref, ie.Current) yield !zref } + [] + let tryFindBack f (source : seq<'T>) = + checkNonNull "source" source + source |> toArray |> Array.tryFindBack f + + [] + let findBack f source = + checkNonNull "source" source + source |> toArray |> Array.findBack f + + [] + let scanBack<'T,'State> f (source : seq<'T>) (acc:'State) = + checkNonNull "source" source + mkDelayedSeq(fun () -> + let arr = source |> toArray + let res = Array.scanSubRight f arr 0 (arr.Length - 1) acc + res :> seq<_>) + [] let findIndex p (source:seq<_>) = checkNonNull "source" source @@ -1163,7 +1332,7 @@ namespace Microsoft.FSharp.Collections i else loop (i+1) else - raise (System.Collections.Generic.KeyNotFoundException(SR.GetString(SR.keyNotFoundAlt))) + indexNotFound() loop 0 [] @@ -1179,13 +1348,21 @@ namespace Microsoft.FSharp.Collections None loop 0 - + [] + let tryFindIndexBack f (source : seq<'T>) = + checkNonNull "source" source + source |> toArray |> Array.tryFindIndexBack f + + [] + let findIndexBack f source = + checkNonNull "source" source + source |> toArray |> Array.findIndexBack f // windowed : int -> seq<'T> -> seq<'T[]> [] let windowed windowSize (source: seq<_>) = checkNonNull "source" source - if windowSize <= 0 then invalidArg "windowSize" (SR.GetString(SR.inputMustBeNonNegative)) + if windowSize <= 0 then invalidArg "windowSize" (SR.GetString(SR.inputMustBePositive)) seq { let arr = Array.zeroCreateUnchecked windowSize let r = ref (windowSize - 1) @@ -1297,23 +1474,17 @@ namespace Microsoft.FSharp.Collections [] let distinct source = checkNonNull "source" source - seq { // Wrap a StructBox(_) aroud all keys in case the key type is itself a type using null as a representation - let dict = new Dictionary,obj>(StructBox<'T>.Comparer) - for v in source do - let key = StructBox v - if not (dict.ContainsKey(key)) then - dict.[key] <- null; - yield v } + seq { let hashSet = HashSet<'T>(HashIdentity.Structural<'T>) + for v in source do + if hashSet.Add(v) then + yield v } [] let distinctBy keyf source = checkNonNull "source" source - seq { // Wrap a StructBox(_) aroud all keys in case the key type is itself a type using null as a representation - let dict = new Dictionary,obj>(StructBox<'Key>.Comparer) + seq { let hashSet = HashSet<_>(HashIdentity.Structural<_>) for v in source do - let key = StructBox (keyf v) - if not (dict.ContainsKey(key)) then - dict.[key] <- null; + if hashSet.Add(keyf v) then yield v } [] @@ -1332,6 +1503,26 @@ namespace Microsoft.FSharp.Collections Array.stableSortInPlace array array :> seq<_>) + [] + let sortWith f source = + checkNonNull "source" source + mkDelayedSeq (fun () -> + let array = source |> toArray + Array.stableSortInPlaceWith f array + array :> seq<_>) + + [] + let inline sortByDescending keyf source = + checkNonNull "source" source + let inline compareDescending a b = compare (keyf b) (keyf a) + sortWith compareDescending source + + [] + let inline sortDescending source = + checkNonNull "source" source + let inline compareDescending a b = compare b a + sortWith compareDescending source + [] let countBy keyf source = checkNonNull "source" source @@ -1342,9 +1533,7 @@ namespace Microsoft.FSharp.Collections source |> iter (fun v -> let key = StructBox (keyf v ) let mutable prev = Unchecked.defaultof<_> - let ok = dict.TryGetValue(key, &prev) - if ok then dict.[key] <- prev + 1 - else dict.[key] <- 1) + if dict.TryGetValue(key, &prev) then dict.[key] <- prev + 1 else dict.[key] <- 1) dict |> map (fun group -> (group.Key.Value, group.Value))) @@ -1547,6 +1736,22 @@ namespace Microsoft.FSharp.Collections if (e.MoveNext()) then e.Current else invalidArg "source" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString + [] + let tryHead (source : seq<_>) = + checkNonNull "source" source + use e = source.GetEnumerator() + if (e.MoveNext()) then Some e.Current + else None + + [] + let tail (source: seq<'T>) = + checkNonNull "source" source + seq { use e = source.GetEnumerator() + if not (e.MoveNext()) then + invalidArg "source" (SR.GetString(SR.notEnoughElements)) + while e.MoveNext() do + yield e.Current } + [] let last (source : seq<_>) = checkNonNull "source" source @@ -1558,6 +1763,16 @@ namespace Microsoft.FSharp.Collections else invalidArg "source" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString + [] + let tryLast (source : seq<_>) = + checkNonNull "source" source + use e = source.GetEnumerator() + if e.MoveNext() then + let mutable res = e.Current + while (e.MoveNext()) do res <- e.Current + Some res + else + None [] let exactlyOne (source : seq<_>) = @@ -1571,3 +1786,71 @@ namespace Microsoft.FSharp.Collections v else invalidArg "source" LanguagePrimitives.ErrorStrings.InputSequenceEmptyString + + [] + let rev source = + checkNonNull "source" source + mkDelayedSeq (fun () -> + let array = source |> toArray + Array.Reverse array + array :> seq<_>) + + [] + let permute f (source : seq<_>) = + checkNonNull "source" source + mkDelayedSeq (fun () -> + source |> toArray |> Array.permute f :> seq<_>) + + [] + let mapFold<'T,'State,'Result> (f: 'State -> 'T -> 'Result * 'State) acc source = + checkNonNull "source" source + let arr,state = source |> toArray |> Array.mapFold f acc + readonly arr, state + + [] + let mapFoldBack<'T,'State,'Result> (f: 'T -> 'State -> 'Result * 'State) source acc = + checkNonNull "source" source + let array = source |> toArray + let arr,state = Array.mapFoldBack f array acc + readonly arr, state + + [] + let except (itemsToExclude: seq<'T>) (source: seq<'T>) = + checkNonNull "itemsToExclude" itemsToExclude + checkNonNull "source" source + + seq { + use e = source.GetEnumerator() + if e.MoveNext() then + let cached = HashSet(itemsToExclude, HashIdentity.Structural) + let next = e.Current + if (cached.Add next) then yield next + while e.MoveNext() do + let next = e.Current + if (cached.Add next) then yield next } + + [] + let chunkBySize chunkSize (source : seq<_>) = + checkNonNull "source" source + if chunkSize <= 0 then invalidArg "chunkSize" (SR.GetString(SR.inputMustBePositive)) + seq { use e = source.GetEnumerator() + let nextChunk() = + let res = Array.zeroCreateUnchecked chunkSize + res.[0] <- e.Current + let i = ref 1 + while !i < chunkSize && e.MoveNext() do + res.[!i] <- e.Current + i := !i + 1 + if !i = chunkSize then + res + else + res |> Array.subUnchecked 0 !i + while e.MoveNext() do + yield nextChunk() } + + [] + let splitInto count source = + checkNonNull "source" source + if count <= 0 then invalidArg "count" (SR.GetString(SR.inputMustBePositive)) + mkDelayedSeq (fun () -> + source |> toArray |> Array.splitInto count :> seq<_>) diff --git a/src/fsharp/FSharp.Core/seq.fsi b/src/fsharp/FSharp.Core/seq.fsi index 0aa0d4563c7..2dd5446ec86 100644 --- a/src/fsharp/FSharp.Core/seq.fsi +++ b/src/fsharp/FSharp.Core/seq.fsi @@ -129,6 +129,15 @@ namespace Microsoft.FSharp.Collections [] val choose: chooser:('T -> 'U option) -> source:seq<'T> -> seq<'U> + /// Divides the input sequence into chunks of size at most chunkSize. + /// The maximum size of each chunk. + /// The input sequence. + /// The sequence divided into chunks. + /// Thrown when the input sequence is null. + /// Thrown when chunkSize is not positive. + [] + val chunkBySize: chunkSize:int -> source:seq<'T> -> seq<'T[]> + /// Applies the given function to each element of the sequence and concatenates all the /// results. /// @@ -175,8 +184,15 @@ namespace Microsoft.FSharp.Collections [] val concat: sources:seq<'Collection> -> seq<'T> when 'Collection :> seq<'T> + /// Tests if the sequence contains the specified element. + /// The value to locate in the input sequence. + /// The input sequence. + /// True if the input sequence contains the specified element; false otherwise. + /// Thrown when the input sequence is null. + [] + val inline contains: value:'T -> source:seq<'T> -> bool when 'T : equality - /// Applies a key-generating function to each element of a sequence and return a sequence yielding unique + /// Applies a key-generating function to each element of a sequence and returns a sequence yielding unique /// keys and their number of occurrences in the original sequence. /// /// Note that this function returns a sequence that digests the whole initial sequence as soon as @@ -184,7 +200,7 @@ namespace Microsoft.FSharp.Collections /// large or infinite sequences. The function makes no assumption on the ordering of the original /// sequence. /// - /// A function transforming each item of input sequence into a key to be + /// A function transforming each item of the input sequence into a key to be /// compared against the others. /// The input sequence. /// @@ -229,6 +245,17 @@ namespace Microsoft.FSharp.Collections [] val distinctBy: projection:('T -> 'Key) -> source:seq<'T> -> seq<'T> when 'Key : equality + /// Splits the input sequence into at most count chunks. + /// This function returns a sequence that digests the whole initial sequence as soon as that + /// sequence is iterated. As a result this function should not be used with large or infinite sequences. + /// The maximum number of chunks. + /// The input sequence. + /// The sequence split into chunks. + /// Thrown when the input sequence is null. + /// Thrown when count is not positive. + [] + val splitInto: count:int -> source:seq<'T> -> seq<'T[]> + /// Creates an empty sequence. /// /// An empty sequence. @@ -236,6 +263,24 @@ namespace Microsoft.FSharp.Collections [] val empty<'T> : seq<'T> + /// Returns a new sequence with the distinct elements of the second sequence which do not apear in the first sequence, + /// using generic hash and equality comparisons to compare values. + /// + /// Note that this function returns a sequence that digests the whole of the first input sequence as soon as + /// the result sequence is iterated. As a result this function should not be used with + /// large or infinite sequences in the first parameter. The function makes no assumption on the ordering of the first input + /// sequence. + /// + /// A sequence whose elements that also occur in the second sequence will cause those elements to be + /// removed from the returned sequence. + /// A sequence whose elements that are not also in first will be returned. + /// + /// A sequence that contains the set difference of the elements of two sequences. + /// + /// Thrown when either of the two input sequences is null. + [] + val except: itemsToExclude:seq<'T> -> source:seq<'T> -> seq<'T> when 'T : equality + /// Tests if any element of the sequence satisfies the given predicate. /// /// The predicate is applied to the elements of the input sequence. If any application @@ -317,6 +362,18 @@ namespace Microsoft.FSharp.Collections [] val find: predicate:('T -> bool) -> source:seq<'T> -> 'T + /// Returns the last element for which the given function returns true. + /// This function digests the whole initial sequence as soon as it is called. As a + /// result this function should not be used with large or infinite sequences. + /// A function to test whether an item in the sequence should be returned. + /// The input sequence. + /// The last element for which the predicate returns true. + /// Thrown if no element returns true when + /// evaluated by the predicate + /// Thrown when the input sequence is null + [] + val findBack: predicate:('T -> bool) -> source:seq<'T> -> 'T + /// Returns the index of the first element for which the given function returns true. /// /// A function to test whether the index of a particular element should be returned. @@ -330,6 +387,18 @@ namespace Microsoft.FSharp.Collections [] val findIndex: predicate:('T -> bool) -> source:seq<'T> -> int + /// Returns the index of the last element for which the given function returns true. + /// This function digests the whole initial sequence as soon as it is called. As a + /// result this function should not be used with large or infinite sequences. + /// A function to test whether the index of a particular element should be returned. + /// The input sequence. + /// The index of the last element for which the predicate returns true. + /// Thrown if no element returns true when + /// evaluated by the predicate + /// Thrown when the input sequence is null + [] + val findIndexBack: predicate:('T -> bool) -> source:seq<'T> -> int + /// Applies a function to each element of the collection, threading an accumulator argument /// through the computation. If the input function is f and the elements are i0...iN /// then computes f (... (f s i0)...) iN @@ -344,6 +413,44 @@ namespace Microsoft.FSharp.Collections [] val fold<'T,'State> : folder:('State -> 'T -> 'State) -> state:'State -> source:seq<'T> -> 'State + /// Applies a function to corresponding elements of two collections, threading an accumulator argument + /// through the computation. The two sequences need not have equal lengths: + /// when one sequence is exhausted any remaining elements in the other sequence are ignored. + /// If the input function is f and the elements are i0...iN and j0...jN + /// then computes f (... (f s i0 j0)...) iN jN. + /// The function to update the state given the input elements. + /// The initial state. + /// The first input sequence. + /// The second input sequence. + /// The final state value. + /// Thrown when the either of the input sequences is null. + [] + val fold2<'T1,'T2,'State> : folder:('State -> 'T1 -> 'T2 -> 'State) -> state:'State -> source1:seq<'T1> -> source2:seq<'T2> -> 'State + + /// Applies a function to each element of the collection, starting from the end, threading an accumulator argument + /// through the computation. If the input function is f and the elements are i0...iN + /// then computes f i0 (... (f iN s)...) + /// The function to update the state given the input elements. + /// The input sequence. + /// The initial state. + /// The state object after the folding function is applied to each element of the sequence. + /// Thrown when the input sequence is null. + [] + val foldBack<'T,'State> : folder:('T -> 'State -> 'State) -> source:seq<'T> -> state:'State -> 'State + + /// Applies a function to corresponding elements of two collections, starting from the end of the shorter collection, + /// threading an accumulator argument through the computation. The two sequences need not have equal lengths. + /// If the input function is f and the elements are i0...iN and j0...jM, N < M + /// then computes f i0 j0 (... (f iN jN s)...). + /// The function to update the state given the input elements. + /// The first input sequence. + /// The second input sequence. + /// The initial state. + /// The final state value. + /// Thrown when the either of the input sequences is null. + [] + val foldBack2<'T1,'T2,'State> : folder:('T1 -> 'T2 -> 'State -> 'State) -> source1:seq<'T1> -> source2:seq<'T2> -> state:'State -> 'State + /// Tests if all elements of the sequence satisfy the given predicate. /// /// The predicate is applied to the elements of the input sequence. If any application @@ -400,22 +507,40 @@ namespace Microsoft.FSharp.Collections [] val head: source:seq<'T> -> 'T - /// Returns the last element of the sequence. + /// Returns the first element of the sequence, or None if the sequence is empty. /// /// The input sequence. /// - /// The last element of the sequence. + /// The first element of the sequence or None. /// /// Thrown when the input sequence is null. + [] + val tryHead: source:seq<'T> -> 'T option + + /// Returns the last element of the sequence. + /// The input sequence. + /// The last element of the sequence. + /// Thrown when the input sequence is null. /// Thrown when the input does not have any elements. [] val last: source:seq<'T> -> 'T + /// Returns the last element of the sequence. + /// Return None if no such element exists. + /// + /// The input sequence. + /// + /// The last element of the sequence or None. + /// + /// Thrown when the input sequence is null. + [] + val tryLast: source:seq<'T> -> 'T option + /// Returns the only element of the sequence. /// /// The input sequence. /// - /// The last element of the sequence. + /// The only element of the sequence. /// /// Thrown when the input sequence is null. /// Thrown when the input does not have precisely one element. @@ -432,6 +557,14 @@ namespace Microsoft.FSharp.Collections [] val isEmpty: source:seq<'T> -> bool + /// Builds a new collection whose elements are the corresponding elements of the input collection + /// paired with the integer index (from 0) of each element. + /// The input sequence. + /// The result sequence. + /// Thrown when the input sequence is null. + [] + val indexed: source:seq<'T> -> seq + /// Generates a new sequence which, when iterated, will return successive /// elements by calling the given function, up to the given count. Each element is saved after its /// initialization. The function is passed the index of the item being @@ -465,6 +598,15 @@ namespace Microsoft.FSharp.Collections [] val initInfinite: initializer:(int -> 'T) -> seq<'T> + /// Computes the element at the specified index in the collection. + /// The index of the element to retrieve. + /// The input sequence. + /// The element at the specified index of the sequence. + /// Thrown when the input sequence is null. + /// Thrown when the index is negative or the input sequence does not contain enough elements. + [] + val item: index:int -> source:seq<'T> -> 'T + /// Applies the given function to each element of the collection. /// /// A function to apply to each element of the sequence. @@ -495,6 +637,18 @@ namespace Microsoft.FSharp.Collections [] val iter2: action:('T1 -> 'T2 -> unit) -> source1:seq<'T1> -> source2:seq<'T2> -> unit + /// Applies the given function to two collections simultaneously. If one sequence is shorter than + /// the other then the remaining elements of the longer sequence are ignored. The integer passed to the + /// function indicates the index of element. + /// + /// A function to apply to each pair of elements from the input sequences along with their index. + /// The first input sequence. + /// The second input sequence. + /// + /// Thrown when either of the input sequences is null. + [] + val iteri2: action:(int -> 'T1 -> 'T2 -> unit) -> source1:seq<'T1> -> source2:seq<'T2> -> unit + /// Returns the length of the sequence /// /// The input sequence. @@ -527,7 +681,7 @@ namespace Microsoft.FSharp.Collections /// the other then the remaining elements of the longer sequence are ignored. /// /// A function to transform pairs of items from the input sequences. - /// The first input sequence. + /// The first input sequence. /// The second input sequence. /// /// The result sequence. @@ -536,6 +690,45 @@ namespace Microsoft.FSharp.Collections [] val map2: mapping:('T1 -> 'T2 -> 'U) -> source1:seq<'T1> -> source2:seq<'T2> -> seq<'U> + /// Combines map and fold. Builds a new collection whose elements are the results of applying the given function + /// to each of the elements of the collection. The function is also used to accumulate a final value. + /// This function digests the whole initial sequence as soon as it is called. As a result this function should + /// not be used with large or infinite sequences. + /// The function to transform elements from the input collection and accumulate the final value. + /// The initial state. + /// The input collection. + /// Thrown when the input collection is null. + /// The collection of transformed elements, and the final accumulated value. + [] + val mapFold<'T,'State,'Result> : mapping:('State -> 'T -> 'Result * 'State) -> state:'State -> source:seq<'T> -> seq<'Result> * 'State + + /// Combines map and foldBack. Builds a new collection whose elements are the results of applying the given function + /// to each of the elements of the collection. The function is also used to accumulate a final value. + /// This function digests the whole initial sequence as soon as it is called. As a result this function should + /// not be used with large or infinite sequences. + /// The function to transform elements from the input collection and accumulate the final value. + /// The input collection. + /// The initial state. + /// Thrown when the input collection is null. + /// The collection of transformed elements, and the final accumulated value. + [] + val mapFoldBack<'T,'State,'Result> : mapping:('T -> 'State -> 'Result * 'State) -> source:seq<'T> -> state:'State -> seq<'Result> * 'State + + /// Builds a new collection whose elements are the results of applying the given function + /// to the corresponding triples of elements from the three sequences. If one input sequence if shorter than + /// the others then the remaining elements of the longer sequences are ignored. + /// + /// The function to transform triples of elements from the input sequences. + /// The first input sequence. + /// The second input sequence. + /// The third input sequence. + /// + /// The result sequence. + /// + /// Thrown when any of the input sequences is null. + [] + val map3: mapping:('T1 -> 'T2 -> 'T3 -> 'U) -> source1:seq<'T1> -> source2:seq<'T2> -> source3:seq<'T3> -> seq<'U> + /// Builds a new collection whose elements are the results of applying the given function /// to each of the elements of the collection. The integer index passed to the /// function indicates the index (from 0) of element being transformed. @@ -549,6 +742,21 @@ namespace Microsoft.FSharp.Collections [] val mapi: mapping:(int -> 'T -> 'U) -> source:seq<'T> -> seq<'U> + /// Builds a new collection whose elements are the results of applying the given function + /// to the corresponding pairs of elements from the two sequences. If one input sequence is shorter than + /// the other then the remaining elements of the longer sequence are ignored. The integer index passed to the + /// function indicates the index (from 0) of element being transformed. + /// + /// A function to transform pairs of items from the input sequences that also supplies the current index. + /// The first input sequence. + /// The second input sequence. + /// + /// The result sequence. + /// + /// Thrown when either of the input sequences is null. + [] + val mapi2: mapping:(int -> 'T1 -> 'T2 -> 'U) -> source1:seq<'T1> -> source2:seq<'T2> -> seq<'U> + /// Returns the greatest of all elements of the sequence, compared via Operators.max /// /// The input sequence. @@ -631,7 +839,9 @@ namespace Microsoft.FSharp.Collections /// The nth element of the sequence. /// /// Thrown when the input sequence is null. + /// Thrown when the index is negative or the input sequence does not contain enough elements. [] + [] val nth: index:int -> source:seq<'T> -> 'T @@ -664,6 +874,23 @@ namespace Microsoft.FSharp.Collections [] val pairwise: source:seq<'T> -> seq<'T * 'T> + /// Returns a sequence with all elements permuted according to the + /// specified permutation. + /// + /// Note that this function returns a sequence that digests the whole initial sequence as soon as + /// that sequence is iterated. As a result this function should not be used with + /// large or infinite sequences. + /// + /// The function that maps input indices to output indices. + /// The input sequence. + /// + /// The result sequence. + /// + /// Thrown when the input sequence is null. + /// Thrown when indexMap does not produce a valid permutation. + [] + val permute: indexMap:(int -> int) -> source:seq<'T> -> seq<'T> + /// Applies the given function to successive elements, returning the first /// x where the function returns "Some(x)". /// @@ -707,6 +934,32 @@ namespace Microsoft.FSharp.Collections [] val reduce: reduction:('T -> 'T -> 'T) -> source:seq<'T> -> 'T + /// Creates a sequence by replicating the given initial value. + /// The number of elements to replicate. + /// The value to replicate + /// The generated sequence. + [] + val replicate: count:int -> initial:'T -> seq<'T> + + /// Applies a function to each element of the sequence, starting from the end, threading an accumulator argument + /// through the computation. If the input function is f and the elements are i0...iN + /// then computes f i0 (...(f iN-1 iN)). + /// A function that takes in the next-to-last element of the sequence and the + /// current accumulated result to produce the next accumulated result. + /// The input sequence. + /// The final result of the reductions. + /// Thrown when the input sequence is null. + /// Thrown when the input sequence is empty. + [] + val reduceBack: reduction:('T -> 'T -> 'T) -> source:seq<'T> -> 'T + + /// Returns a new sequence with the elements in reverse order. + /// The input sequence. + /// The reversed sequence. + /// Thrown when the input sequence is null. + [] + val rev: source:seq<'T> -> seq<'T> + /// Like fold, but computes on-demand and returns the sequence of intermediary and final results. /// /// A function that updates the state with each element from the sequence. @@ -719,6 +972,18 @@ namespace Microsoft.FSharp.Collections [] val scan<'T,'State> : folder:('State -> 'T -> 'State) -> state:'State -> source:seq<'T> -> seq<'State> + /// Like foldBack, but returns the sequence of intermediary and final results. + /// This function returns a sequence that digests the whole initial sequence as soon as that + /// sequence is iterated. As a result this function should not be used with large or infinite sequences. + /// + /// A function that updates the state with each element from the sequence. + /// The input sequence. + /// The initial state. + /// The resulting sequence of computed states. + /// Thrown when the input sequence is null. + [] + val scanBack<'T,'State> : folder:('T -> 'State -> 'State) -> source:seq<'T> -> state:'State -> seq<'State> + /// Returns a sequence that yields one item only. /// /// The input item. @@ -770,6 +1035,19 @@ namespace Microsoft.FSharp.Collections [] val sort : source:seq<'T> -> seq<'T> when 'T : comparison + /// Yields a sequence ordered using the given comparison function. + /// This function returns a sequence that digests the whole initial sequence as soon as + /// that sequence is iterated. As a result this function should not be used with + /// large or infinite sequences. The function makes no assumption on the ordering of the original + /// sequence. + /// + /// This is a stable sort, that is the original order of equal elements is preserved. + /// The function to compare the collection elements. + /// The input sequence. + /// The result sequence. + [] + val sortWith : comparer:('T -> 'T -> int) -> source:seq<'T> -> seq<'T> + /// Applies a key-generating function to each element of a sequence and yield a sequence ordered /// by keys. The keys are compared using generic comparison as implemented by Operators.compare. /// @@ -789,6 +1067,42 @@ namespace Microsoft.FSharp.Collections [] val sortBy : projection:('T -> 'Key) -> source:seq<'T> -> seq<'T> when 'Key : comparison + /// Yields a sequence ordered descending by keys. + /// + /// This function returns a sequence that digests the whole initial sequence as soon as + /// that sequence is iterated. As a result this function should not be used with + /// large or infinite sequences. The function makes no assumption on the ordering of the original + /// sequence. + /// + /// This is a stable sort, that is the original order of equal elements is preserved. + /// + /// The input sequence. + /// + /// The result sequence. + /// + /// Thrown when the input sequence is null. + [] + val inline sortDescending : source:seq<'T> -> seq<'T> when 'T : comparison + + /// Applies a key-generating function to each element of a sequence and yield a sequence ordered + /// descending by keys. The keys are compared using generic comparison as implemented by Operators.compare. + /// + /// This function returns a sequence that digests the whole initial sequence as soon as + /// that sequence is iterated. As a result this function should not be used with + /// large or infinite sequences. The function makes no assumption on the ordering of the original + /// sequence. + /// + /// This is a stable sort, that is the original order of equal elements is preserved. + /// + /// A function to transform items of the input sequence into comparable keys. + /// The input sequence. + /// + /// The result sequence. + /// + /// Thrown when the input sequence is null. + [] + val inline sortByDescending : projection:('T -> 'Key) -> source:seq<'T> -> seq<'T> when 'Key : comparison + /// Returns the sum of the elements in the sequence. /// /// The elements are summed using the + operator and Zero property associated with the generated type. @@ -813,6 +1127,18 @@ namespace Microsoft.FSharp.Collections when ^U : (static member ( + ) : ^U * ^U -> ^U) and ^U : (static member Zero : ^U) + /// Returns a sequence that skips 1 element of the underlying sequence and then yields the + /// remaining elements of the sequence. + /// + /// The input sequence. + /// + /// The result sequence. + /// + /// Thrown when the input sequence is null. + /// Thrown when the input sequence is empty. + [] + val tail: source:seq<'T> -> seq<'T> + /// Returns the first N elements of the sequence. /// Throws InvalidOperationException /// if the count exceeds the number of elements in the sequence. Seq.truncate @@ -874,6 +1200,17 @@ namespace Microsoft.FSharp.Collections [] val tryFind: predicate:('T -> bool) -> source:seq<'T> -> 'T option + /// Returns the last element for which the given function returns true. + /// Return None if no such element exists. + /// This function digests the whole initial sequence as soon as it is called. As a + /// result this function should not be used with large or infinite sequences. + /// A function that evaluates to a Boolean when given an item in the sequence. + /// The input sequence. + /// The found element or None. + /// Thrown when the input sequence is null. + [] + val tryFindBack: predicate:('T -> bool) -> source:seq<'T> -> 'T option + /// Returns the index of the first element in the sequence /// that satisfies the given predicate. Return None if no such element exists. /// @@ -886,6 +1223,26 @@ namespace Microsoft.FSharp.Collections [] val tryFindIndex : predicate:('T -> bool) -> source:seq<'T> -> int option + /// Tries to find the nth element in the sequence. + /// Returns None if index is negative or the input sequence does not contain enough elements. + /// The index of element to retrieve. + /// The input sequence. + /// The nth element of the sequence or None. + /// Thrown when the input sequence is null. + [] + val tryItem: index:int -> source:seq<'T> -> 'T option + + /// Returns the index of the last element in the sequence + /// that satisfies the given predicate. Return None if no such element exists. + /// This function digests the whole initial sequence as soon as it is called. As a + /// result this function should not be used with large or infinite sequences. + /// A function that evaluates to a Boolean when given an item in the sequence. + /// The input sequence. + /// The found index or None. + /// Thrown when the input sequence is null. + [] + val tryFindIndexBack : predicate:('T -> bool) -> source:seq<'T> -> int option + /// Applies the given function to successive elements, returning the first /// result where the function returns "Some(x)". /// @@ -928,16 +1285,13 @@ namespace Microsoft.FSharp.Collections [] val unfold : generator:('State -> ('T * 'State) option) -> state:'State -> seq<'T> - /// Returns a sequence that yields sliding windows of containing elements drawn from the input + /// Returns a sequence that yields sliding windows containing elements drawn from the input /// sequence. Each window is returned as a fresh array. - /// /// The number of elements in each window. /// The input sequence. - /// /// The result sequence. - /// /// Thrown when the input sequence is null. - /// Thrown when the input sequence is empty. + /// Thrown when windowSize is not positive. [] val windowed: windowSize:int -> source:seq<'T> -> seq<'T[]> diff --git a/src/fsharp/FSharp.Core/set.fs b/src/fsharp/FSharp.Core/set.fs index fd96f14eed4..936fa78775c 100644 --- a/src/fsharp/FSharp.Core/set.fs +++ b/src/fsharp/FSharp.Core/set.fs @@ -236,21 +236,25 @@ namespace Microsoft.FSharp.Collections | SetOne(k2) -> f k2 | SetEmpty -> () - let rec foldBack f m x = + let rec foldBackOpt (f:OptimizedClosures.FSharpFunc<_,_,_>) m x = match m with - | SetNode(k,l,r,_) -> foldBack f l (f k (foldBack f r x)) - | SetOne(k) -> f k x + | SetNode(k,l,r,_) -> foldBackOpt f l (f.Invoke(k, (foldBackOpt f r x))) + | SetOne(k) -> f.Invoke(k, x) | SetEmpty -> x - let rec fold f x m = + let foldBack f m x = foldBackOpt (OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f)) m x + + let rec foldOpt (f:OptimizedClosures.FSharpFunc<_,_,_>) x m = match m with | SetNode(k,l,r,_) -> - let x = fold f x l in - let x = f x k - fold f x r - | SetOne(k) -> f x k + let x = foldOpt f x l in + let x = f.Invoke(x, k) + foldOpt f x r + | SetOne(k) -> f.Invoke(x, k) | SetEmpty -> x + let fold f x m = foldOpt (OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f)) x m + let rec forall f m = match m with | SetNode(k2,l,r,_) -> f k2 && forall f l && forall f r @@ -598,7 +602,9 @@ namespace Microsoft.FSharp.Collections #endif SetTree.mem s.Comparer x s.Tree member s.Iterate(x) = SetTree.iter x s.Tree - member s.Fold f z = SetTree.fold (fun x z -> f z x) z s.Tree + member s.Fold f z = + let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) + SetTree.fold (fun x z -> f.Invoke(z, x)) z s.Tree #if FX_NO_DEBUG_DISPLAYS #else diff --git a/src/fsharp/FSharp.Core/string.fs b/src/fsharp/FSharp.Core/string.fs index ce807bca4e6..37079a4f702 100644 --- a/src/fsharp/FSharp.Core/string.fs +++ b/src/fsharp/FSharp.Core/string.fs @@ -29,8 +29,9 @@ namespace Microsoft.FSharp.Core [] let iteri f (str:string) = let str = emptyIfNull str + let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) for i = 0 to str.Length - 1 do - f i str.[i] + f.Invoke(i, str.[i]) [] let map (f: char -> char) (str:string) = @@ -43,7 +44,15 @@ namespace Microsoft.FSharp.Core let mapi (f: int -> char -> char) (str:string) = let str = emptyIfNull str let res = new System.Text.StringBuilder(str.Length) - str |> iteri (fun i c -> res.Append(f i c) |> ignore); + let f = OptimizedClosures.FSharpFunc<_,_,_>.Adapt(f) + str |> iteri (fun i c -> res.Append(f.Invoke(i, c)) |> ignore); + res.ToString() + + [] + let filter (f: char -> bool) (str:string) = + let str = emptyIfNull str + let res = new System.Text.StringBuilder(str.Length) + str |> iter (fun c -> if f c then res.Append(c) |> ignore) res.ToString() [] diff --git a/src/fsharp/FSharp.Core/string.fsi b/src/fsharp/FSharp.Core/string.fsi index 7e01a972766..27cd416cc93 100644 --- a/src/fsharp/FSharp.Core/string.fsi +++ b/src/fsharp/FSharp.Core/string.fsi @@ -64,6 +64,17 @@ namespace Microsoft.FSharp.Core [] val collect: mapping:(char -> string) -> str:string -> string + /// Builds a new string containing only the characters of the input string + /// for which the given predicate returns "true". + /// + /// Returns an empty string if the input string is null + /// + /// A function to test whether each character in the input sequence should be included in the output string. + /// The input string. + /// The resulting string. + [] + val filter: predicate:(char -> bool) -> str:string -> string + /// Builds a new string whose characters are the results of applying the function mapping /// to each index from 0 to count-1 and concatenating the resulting /// strings. diff --git a/src/fsharp/FSharp.Data.TypeProviders/TypeProviders.fs b/src/fsharp/FSharp.Data.TypeProviders/TypeProviders.fs index 703c319b7eb..a10b157f4cd 100644 --- a/src/fsharp/FSharp.Data.TypeProviders/TypeProviders.fs +++ b/src/fsharp/FSharp.Data.TypeProviders/TypeProviders.fs @@ -1,7 +1,9 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. namespace Microsoft.FSharp.Data.TypeProviders.DesignTime + #nowarn "57" +#nowarn "44" // This construct is deprecated. please use List.item open System open System.IO diff --git a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj index 93b5172b918..a3fb8f2a56d 100644 --- a/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj +++ b/src/fsharp/FSharp.LanguageService.Compiler/FSharp.LanguageService.Compiler.fsproj @@ -36,429 +36,445 @@ assemblyinfo.FSharp.Compiler.dll.fs - - --lexlib Internal.Utilities.Text.Lexing - lex.fsl - - - --lexlib Internal.Utilities.Text.Lexing - illex.fsl - - - Microsoft.FSharp.Compiler.Parser - Microsoft.FSharp.Compiler - --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing - pars.fsy - - - Microsoft.FSharp.Compiler.AbstractIL.Internal.AsciiParser - Microsoft.FSharp.Compiler.AbstractIL - --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing - ilpars.fsy - - - ExtensibleDumper.fsi - - - ExtensibleDumper.fs - - sformat.fsi + ErrorText\sformat.fsi - sformat.fs + ErrorText\sformat.fs - sr.fsi + ErrorText\sr.fsi - sr.fs + ErrorText\sr.fs - prim-lexing.fsi + LexYaccRuntime\prim-lexing.fsi - prim-lexing.fs + LexYaccRuntime\prim-lexing.fs - prim-parsing.fsi + LexYaccRuntime\prim-parsing.fsi - prim-parsing.fs + LexYaccRuntime\prim-parsing.fs - resizearray.fsi + Utilities\resizearray.fsi - resizearray.fs + Utilities\resizearray.fs - HashMultiMap.fsi + Utilities\HashMultiMap.fsi - HashMultiMap.fs + Utilities\HashMultiMap.fs - TaggedCollections.fsi + Utilities\TaggedCollections.fsi - TaggedCollections.fs + Utilities\TaggedCollections.fs - FlatList.fs + Utilities\FlatList.fs + + + Utilities\QueueList.fs - illib.fs + Utilities\illib.fs - filename.fsi + Utilities\filename.fsi - filename.fs + Utilities\filename.fs - zmap.fsi + Utilities\zmap.fsi - zmap.fs + Utilities\zmap.fs - zset.fsi + Utilities\zset.fsi - zset.fs + Utilities\zset.fs - bytes.fsi + Utilities\bytes.fsi - bytes.fs + Utilities\bytes.fs - ildiag.fsi + Utilities\ildiag.fsi - ildiag.fs + Utilities\ildiag.fs + + + Utilities\lib.fs + + + Utilities\InternalCollections.fsi + + + Utilities\InternalCollections.fs + + + Utilities\InternalFileSystemUtils.fsi + + + Utilities\InternalFileSystemUtils.fs + + + Utilities\rational.fsi + + + Utilities\rational.fs + + + Utilities\TraceCall.fs + + + ErrorLogging\range.fsi + + + ErrorLogging\range.fs + + + ErrorLogging\ErrorLogger.fs - ReferenceResolution.fs + ReferenceResolution\ReferenceResolution.fs + + --lexlib Internal.Utilities.Text.Lexing + AbsIL\illex.fsl + + + Microsoft.FSharp.Compiler.AbstractIL.Internal.AsciiParser + Microsoft.FSharp.Compiler.AbstractIL + --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + AbsIL\ilpars.fsy + - il.fsi + AbsIL\il.fsi - il.fs + AbsIL\il.fs - ilx.fsi + AbsIL\ilx.fsi - ilx.fs + AbsIL\ilx.fs - ilascii.fsi + AbsIL\ilascii.fsi - ilascii.fs + AbsIL\ilascii.fs - ilprint.fsi + AbsIL\ilprint.fsi - ilprint.fs + AbsIL\ilprint.fs - ilmorph.fsi + AbsIL\ilmorph.fsi - ilmorph.fs + AbsIL\ilmorph.fs - ilsupp.fsi + AbsIL\ilsupp.fsi - ilsupp.fs - - - - - ilbinary.fsi - - - ilbinary.fs + AbsIL\ilsupp.fs - - lib.fs + + AbsIL\ilpars.fs - - range.fsi - - - range.fs - - - ErrorLogger.fs - - - tainted.fsi - - - tainted.fs + + AbsIL\illex.fs - - InternalCollections.fsi + + AbsIL\ilbinary.fsi - - InternalCollections.fs + + AbsIL\ilbinary.fs - ilread.fsi + AbsIL\ilread.fsi - ilread.fs + AbsIL\ilread.fs - CompilerLocationUtils.fs + CompilerLocation\CompilerLocationUtils.fs - PrettyNaming.fs + PrettyNaming\PrettyNaming.fs - ilxsettings.fs - - - InternalFileSystemUtils.fsi + ILXErase\ilxsettings.fs - - InternalFileSystemUtils.fs - - - unilex.fsi + + --lexlib Internal.Utilities.Text.Lexing + ParserAndUntypedAST\pplex.fsl + + + Microsoft.FSharp.Compiler.PPParser + Microsoft.FSharp.Compiler + --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + ParserAndUntypedAST\pppars.fsy + + + --lexlib Internal.Utilities.Text.Lexing + ParserAndUntypedAST\lex.fsl + + + Microsoft.FSharp.Compiler.Parser + Microsoft.FSharp.Compiler + --internal --lexlib Internal.Utilities.Text.Lexing --parslib Internal.Utilities.Text.Parsing + ParserAndUntypedAST\pars.fsy + + + ParserAndUntypedAST\UnicodeLexing.fsi - - unilex.fs + + ParserAndUntypedAST\UnicodeLexing.fs - layout.fsi + ParserAndUntypedAST\layout.fsi - layout.fs + ParserAndUntypedAST\layout.fs - ast.fs + ParserAndUntypedAST\ast.fs - - est.fsi + + ParserAndUntypedAST\pppars.fs - - est.fs + + ParserAndUntypedAST\pars.fs - - lexhelp.fsi + ParserAndUntypedAST\lexhelp.fsi - lexhelp.fs + ParserAndUntypedAST\lexhelp.fs - - - sreflect.fsi + + ParserAndUntypedAST\pplex.fs - - sreflect.fs + + ParserAndUntypedAST\lex.fs - - QueueList.fs + + ParserAndUntypedAST\lexfilter.fs - - tast.fs + + TypedAST\tainted.fsi - - env.fs + + TypedAST\tainted.fs - - tastops.fsi + + TypedAST\ExtensionTyping.fsi - - tastops.fs + + TypedAST\ExtensionTyping.fs - - pickle.fsi + + TypedAST\QuotationPickler.fsi - - pickle.fs + + TypedAST\QuotationPickler.fs - - lexfilter.fs + + TypedAST\tast.fs - - import.fsi + + TypedAST\TcGlobals.fs - - import.fs + + TypedAST\TastOps.fsi - - infos.fs + + TypedAST\TastOps.fs - - NicePrint.fs + + TypedAST\TastPickle.fsi - - augment.fsi + + TypedAST\TastPickle.fs - - augment.fs + + Logic\import.fsi + + + Logic\import.fs - - outcome.fsi + + Logic\infos.fs - - outcome.fs + + Logic\NicePrint.fs - - nameres.fsi + + Logic\AugmentWithHashCompare.fsi - - nameres.fs + + Logic\AugmentWithHashCompare.fs - - typrelns.fs + + Logic\NameResolution.fsi - - patcompile.fsi + + Logic\NameResolution.fs - - patcompile.fs + + Logic\TypeRelations.fs - - csolve.fsi + + Logic\PatternMatchCompilation.fsi - - csolve.fs + + Logic\PatternMatchCompilation.fs - - formats.fsi + + Logic\ConstraintSolver.fsi - - formats.fs + + Logic\ConstraintSolver.fs - - unsolved.fs + + Logic\CheckFormatStrings.fsi - - creflect.fsi + + Logic\CheckFormatStrings.fs - - creflect.fs + + Logic\FindUnsolved.fs - - check.fsi + + Logic\QuotationTranslator.fsi - - check.fs + + Logic\QuotationTranslator.fs - - tc.fsi + + Logic\PostInferenceChecks.fsi - - tc.fs + + Logic\PostInferenceChecks.fs - - opt.fsi + + Logic\TypeChecker.fsi - - opt.fs + + Logic\TypeChecker.fs - - TraceCall.fsi + + Optimize\Optimizer.fsi - - TraceCall.fs + + Optimize\Optimizer.fs - - build.fsi + + Driver\CompileOps.fsi - - build.fs + + Driver\CompileOps.fs - - fscopts.fsi + + Driver\CompileOptions.fsi - - fscopts.fs + + Driver\CompileOptions.fs - IncrementalBuild.fsi + Driver\IncrementalBuild.fsi - IncrementalBuild.fs + Driver\IncrementalBuild.fs - fsc.fs + Driver\fsc.fs - Reactor.fsi + Service\Reactor.fsi - Reactor.fs + Service\Reactor.fs - ServiceLexing.fsi + Service\ServiceLexing.fsi - ServiceLexing.fs + Service\ServiceLexing.fs - ServiceConstants.fs + Service\ServiceConstants.fs - ServiceParseTreeWalk.fs + Service\ServiceParseTreeWalk.fs - ServiceNavigation.fsi + Service\ServiceNavigation.fsi - ServiceNavigation.fs + Service\ServiceNavigation.fs - ServiceParamInfoLocations.fsi + Service\ServiceParamInfoLocations.fsi - ServiceParamInfoLocations.fs + Service\ServiceParamInfoLocations.fs - ServiceUntypedParse.fsi + Service\ServiceUntypedParse.fsi - ServiceUntypedParse.fs + Service\ServiceUntypedParse.fs - ServiceDeclarations.fsi + Service\ServiceDeclarations.fsi - ServiceDeclarations.fs + Service\ServiceDeclarations.fs - service.fsi + Service\service.fsi - service.fs + Service\service.fs + - - - + - - - + + + + + {DED3BBD7-53F4-428A-8C9F-27968E768605} FSharp.Core diff --git a/src/fsharp/unsolved.fs b/src/fsharp/FindUnsolved.fs similarity index 99% rename from src/fsharp/unsolved.fs rename to src/fsharp/FindUnsolved.fs index 221cff97a0b..b1032468908 100644 --- a/src/fsharp/unsolved.fs +++ b/src/fsharp/FindUnsolved.fs @@ -19,11 +19,11 @@ open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Layout open Microsoft.FSharp.Compiler.AbstractIL.IL -open Microsoft.FSharp.Compiler.Typrelns +open Microsoft.FSharp.Compiler.TypeRelations open Microsoft.FSharp.Compiler.Infos type env = Nix diff --git a/src/fsharp/Fsc-proto/Fsc-proto.fsproj b/src/fsharp/Fsc-proto/Fsc-proto.fsproj index dbe51512d79..0c16d80809e 100644 --- a/src/fsharp/Fsc-proto/Fsc-proto.fsproj +++ b/src/fsharp/Fsc-proto/Fsc-proto.fsproj @@ -26,6 +26,10 @@ fscmain.fs + + fsc-proto.exe.config + PreserveNewest + diff --git a/src/fsharp/Fsc-proto/fsc-proto.exe.config b/src/fsharp/Fsc-proto/fsc-proto.exe.config index 2ac619ab917..f3f56cb6aea 100644 --- a/src/fsharp/Fsc-proto/fsc-proto.exe.config +++ b/src/fsharp/Fsc-proto/fsc-proto.exe.config @@ -1,17 +1,6 @@ - - - + @@ -19,5 +8,4 @@ - diff --git a/src/fsharp/Fsc/fsc.exe.config b/src/fsharp/Fsc/fsc.exe.config index c74c885ae32..fc7e2236a67 100644 --- a/src/fsharp/Fsc/fsc.exe.config +++ b/src/fsharp/Fsc/fsc.exe.config @@ -2,6 +2,7 @@ + + oldVersion="2.0.0.0-4.4.0.0" + newVersion="4.4.0.9055"/> diff --git a/src/fsharp/ilxgen.fs b/src/fsharp/IlxGen.fs similarity index 97% rename from src/fsharp/ilxgen.fs rename to src/fsharp/IlxGen.fs index a14f39593fb..059060cf7cc 100644 --- a/src/fsharp/ilxgen.fs +++ b/src/fsharp/IlxGen.fs @@ -4,7 +4,9 @@ // The ILX generator. //-------------------------------------------------------------------------- -module internal Microsoft.FSharp.Compiler.Ilxgen +module internal Microsoft.FSharp.Compiler.IlxGen + +#nowarn "44" // This construct is deprecated. please use List.item open System.IO open System.Collections.Generic @@ -27,10 +29,10 @@ open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.PrettyNaming -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Layout open Microsoft.FSharp.Compiler.Lib -open Microsoft.FSharp.Compiler.Typrelns +open Microsoft.FSharp.Compiler.TypeRelations open Microsoft.FSharp.Compiler.TypeChecker open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.Types @@ -192,7 +194,7 @@ type IlxGenOptions = /// Compilation environment for compiling a fragment of an assembly [] type cenv = - { g: Env.TcGlobals + { g: TcGlobals TcVal : ConstraintSolver.TcValF viewCcu: CcuThunk opts: IlxGenOptions @@ -430,16 +432,16 @@ and GenTypeAux amap m g (tyenv: TypeReprEnv) voidOK ptrsOK ty = match stripTyEqnsAndMeasureEqns g ty with | TType_app (tcref, tinst) -> GenNamedTyAppAux amap m g tyenv ptrsOK tcref tinst | TType_tuple args -> GenTypeAux amap m g tyenv VoidNotOK ptrsOK (mkCompiledTupleTy g args) - | TType_fun (dty, returnTy) -> EraseIlxFuncs.mkILFuncTy g.ilxPubCloEnv (GenTypeArgAux amap m g tyenv dty) (GenTypeArgAux amap m g tyenv returnTy) + | TType_fun (dty, returnTy) -> EraseClosures.mkILFuncTy g.ilxPubCloEnv (GenTypeArgAux amap m g tyenv dty) (GenTypeArgAux amap m g tyenv returnTy) | TType_ucase (ucref, args) -> let cuspec,idx = GenUnionCaseSpec amap m g tyenv ucref args - EraseIlxUnions.GetILTypeForAlternative cuspec idx + EraseUnions.GetILTypeForAlternative cuspec idx | TType_forall (tps, tau) -> let tps = DropErasedTypars tps if tps.IsEmpty then GenTypeAux amap m g tyenv VoidNotOK ptrsOK tau - else EraseIlxFuncs.mkILTyFuncTy g.ilxPubCloEnv + else EraseClosures.mkILTyFuncTy g.ilxPubCloEnv | TType_var tp -> mkILTyvarTy tyenv.[tp,m] | TType_measure _ -> g.ilg.typ_int32 @@ -750,13 +752,6 @@ let StorageForVal m v eenv = let v = try eenv.valsInScope.[v] with :? KeyNotFoundException -> - (* REVIEW: The binary will probably still be written under these error conditions. - * That is useful when debugging the compiler, but not in Retail mode. - * Fail with an internal error if Retail? *) - (* // Diagnostics for bug://4046 - * let vals = eenv.valsInScope.Contents |> Zmap.toList - * vals |> List.iter (printf "v,s = %A\n") - *) assert false errorR(Error(FSComp.SR.ilUndefinedValue(showL(vspecAtBindL v)),m)); notlazy (Arg 668(* random value for post-hoc diagnostic analysis on generated tree *) ) @@ -776,7 +771,7 @@ let StorageForValRef m (v: ValRef) eenv = StorageForVal m v.Deref eenv let IsValRefIsDllImport g (vref:ValRef) = vref.Attribs |> HasFSharpAttributeOpt g g.attrib_DllImportAttribute -let GetMethodSpecForMemberVal amap g memberInfo (vref:ValRef) = +let GetMethodSpecForMemberVal amap g (memberInfo:ValMemberInfo) (vref:ValRef) = let m = vref.Range let tps,curriedArgInfos,returnTy,retInfo = assert(vref.ValReprInfo.IsSome); @@ -929,7 +924,7 @@ let ComputeStorageForNonLocalTopVal amap g cloc modref (v:Val) = let rec ComputeStorageForNonLocalModuleOrNamespaceRef amap g cloc acc (modref:ModuleOrNamespaceRef) (modul:ModuleOrNamespace) = let acc = (acc, modul.ModuleOrNamespaceType.ModuleAndNamespaceDefinitions) ||> List.fold (fun acc smodul -> - ComputeStorageForNonLocalModuleOrNamespaceRef amap g (CompLocForSubModuleOrNamespace cloc smodul) acc (modref.MkNestedTyconRef smodul) smodul) + ComputeStorageForNonLocalModuleOrNamespaceRef amap g (CompLocForSubModuleOrNamespace cloc smodul) acc (modref.NestedTyconRef smodul) smodul) let acc = (acc, modul.ModuleOrNamespaceType.AllValsAndMembers) ||> Seq.fold (fun acc v -> @@ -1539,7 +1534,7 @@ let discardAndReturnVoid = DiscardThen ReturnVoid // the bodies of methods in a couple of places //------------------------------------------------------------------------- -let CodeGenThen mgbuf (zapFirstSeqPointToStart,entryPointInfo,methodName,eenv,alreadyUsedArgs,alreadyUsedLocals,codeGenFunction,m) = +let CodeGenThen cenv mgbuf (zapFirstSeqPointToStart,entryPointInfo,methodName,eenv,alreadyUsedArgs,alreadyUsedLocals,codeGenFunction,m) = let cgbuf = new CodeGenBuffer(m,mgbuf,methodName,alreadyUsedArgs,alreadyUsedLocals,zapFirstSeqPointToStart) let start = CG.GenerateMark cgbuf "mstart" let innerVals = entryPointInfo |> List.map (fun (v,kind) -> (v,(kind,start))) @@ -1559,7 +1554,21 @@ let CodeGenThen mgbuf (zapFirstSeqPointToStart,entryPointInfo,methodName,eenv,al { locRange=(start.CodeLabel, finish.CodeLabel); locInfos= [{ LocalIndex=i; LocalName=nm }] }) - (List.map (snd >> mkILLocal) locals, + let ilLocals = + locals + |> List.map (fun (infos, ty) -> + // in interactive environment, attach name and range info to locals to improve debug experience + if cenv.opts.isInteractive && cenv.opts.generateDebugSymbols then + match infos with + | [(nm, (start, finish))] -> mkILLocal ty (Some(nm, start.CodeLabel, finish.CodeLabel)) + // REVIEW: what do these cases represent? + | _ :: _ + | [] -> mkILLocal ty None + // if not interactive, don't bother adding this info + else + mkILLocal ty None) + + (ilLocals, maxStack, computeCodeLabelToPC, code, @@ -1571,7 +1580,7 @@ let CodeGenMethod cenv mgbuf (zapFirstSeqPointToStart,entryPointInfo,methodName, (* Codegen the method. REVIEW: change this to generate the AbsIL code tree directly... *) let locals,maxStack,computeCodeLabelToPC,instrs,exns,localDebugSpecs,hasSequencePoints = - CodeGenThen mgbuf (zapFirstSeqPointToStart,entryPointInfo,methodName,eenv,alreadyUsedArgs,alreadyUsedLocals,codeGenFunction,m) + CodeGenThen cenv mgbuf (zapFirstSeqPointToStart,entryPointInfo,methodName,eenv,alreadyUsedArgs,alreadyUsedLocals,codeGenFunction,m) let dump() = instrs |> Array.iteri (fun i instr -> dprintf "%s: %d: %A\n" methodName i instr); @@ -1670,7 +1679,7 @@ let rec GenExpr cenv (cgbuf:CodeGenBuffer) eenv sp expr sequel = if not (WillGenerateSequencePoint sp expr) && not (AlwaysSuppressSequencePoint sp expr) then CG.EmitSeqPoint cgbuf expr.Range; - match (if compileSequenceExpressions then Lowertop.LowerSeqExpr cenv.g cenv.amap expr else None) with + match (if compileSequenceExpressions then LowerCallsAndSeqs.LowerSeqExpr cenv.g cenv.amap expr else None) with | Some info -> GenSequenceExpr cenv cgbuf eenv info sequel | None -> @@ -2033,7 +2042,7 @@ and GenAllocRecd cenv cgbuf eenv ctorInfo (tcref,argtys,args,m) sequel = (args,relevantFields) ||> List.iter2 (fun e f -> CG.EmitInstr cgbuf (pop 0) (Push (if tcref.IsStructOrEnumTycon then [ILType.Byref typ] else [typ])) mkLdarg0; GenExpr cenv cgbuf eenv SPSuppress e Continue; - GenFieldStore false cenv cgbuf eenv (mkNestedRecdFieldRef tcref f,argtys,m) discard) + GenFieldStore false cenv cgbuf eenv (tcref.MakeNestedRecdFieldRef f,argtys,m) discard) // Object construction doesn't generate a true value. // Object constructions will always just get thrown away so this is safe GenSequel cenv eenv.cloc cgbuf sequel @@ -2094,9 +2103,9 @@ and GenNewArray cenv cgbuf eenv (elems: Expr list,elemTy,m) sequel = and GenCoerce cenv cgbuf eenv (e,tgty,m,srcty) sequel = // Is this an upcast? - if Typrelns.TypeDefinitelySubsumesTypeNoCoercion 0 cenv.g cenv.amap m tgty srcty && + if TypeRelations.TypeDefinitelySubsumesTypeNoCoercion 0 cenv.g cenv.amap m tgty srcty && // Do an extra check - should not be needed - Typrelns.TypeFeasiblySubsumesType 0 cenv.g cenv.amap m tgty Typrelns.NoCoerce srcty then + TypeRelations.TypeFeasiblySubsumesType 0 cenv.g cenv.amap m tgty TypeRelations.NoCoerce srcty then begin // The .NET IL doesn't always support implict subsumption for interface types, e.g. at stack merge points // Hence be conservative here and always cast explicitly. @@ -2158,7 +2167,7 @@ and GenSetExnField cenv cgbuf eenv (e,ecref,fieldNum,e2,m) sequel = and GenUnionCaseProof cenv cgbuf eenv (e,ucref,tyargs,m) sequel = GenExpr cenv cgbuf eenv SPSuppress e Continue; let cuspec,idx = GenUnionCaseSpec cenv.amap m cenv.g eenv.tyenv ucref tyargs - let fty = EraseIlxUnions.GetILTypeForAlternative cuspec idx + let fty = EraseUnions.GetILTypeForAlternative cuspec idx CG.EmitInstrs cgbuf (pop 1) (Push [fty]) [ mkIlxInstr (EI_castdata(false,cuspec,idx)); ]; GenSequel cenv eenv.cloc cgbuf sequel @@ -2237,14 +2246,11 @@ and GenFieldStore isStatic cenv cgbuf eenv (rfref:RecdFieldRef,tyargs,m) sequel if fld.IsMutable && not (useGenuineField rfref.Tycon fld) then let cconv = if isStatic then ILCallingConv.Static else ILCallingConv.Instance let mspec = mkILMethSpecInTy (fspec.EnclosingType, cconv, "set_" + fld.rfield_id.idText, [fspec.FormalType],ILType.Void,[]) - CG.EmitInstr cgbuf (mk_field_pops isStatic 1) Push0 (mkNormalCall mspec) else - // Within assemblies we do generate some set-field operations - // for immutable fields even when resolving recursive bindings. - // However we do not generate "set" properties for these. - // Hence we just set the field directly in this case. - CG.EmitInstr cgbuf (mk_field_pops isStatic 1) Push0 (if isStatic then mkNormalStsfld fspec else mkNormalStfld fspec); + let vol = if rfref.RecdField.IsVolatile then Volatile else Nonvolatile + let instr = if isStatic then I_stsfld (vol, fspec) else I_stfld (ILAlignment.Aligned, vol, fspec) + CG.EmitInstr cgbuf (mk_field_pops isStatic 1) Push0 instr; GenUnitThenSequel cenv eenv m eenv.cloc cgbuf sequel //-------------------------------------------------------------------------- @@ -2578,10 +2584,10 @@ and GenApp cenv cgbuf eenv (f,fty,tyargs,args,m) sequel = let localMethodHandle,eenvinner = AllocLocal cenv cgbuf eenvinner true (ilxgenGlobalNng.FreshCompilerGeneratedName ("handle",m),runtimeMethodHandleTy) scopeMarks // push args - GenUntupledArgsDiscardingLoneUnit cenv cgbuf eenvinner m vref.NumObjArgs curriedArgInfos nowArgs; + GenUntupledArgsDiscardingLoneUnit cenv cgbuf eenvinner m vref.NumObjArgs curriedArgInfos nowArgs if isSuperInit || isSelfInit then - CG.EmitInstrs cgbuf (pop 0) (Push [mspec.EnclosingType]) [ mkLdarg0 ] ; + CG.EmitInstrs cgbuf (pop 0) (Push [mspec.EnclosingType]) [ mkLdarg0 ] // set up indirect call // push the method's enclosing type on the top of the stack @@ -2676,7 +2682,7 @@ and GenApp cenv cgbuf eenv (f,fty,tyargs,args,m) sequel = let whereSaved,eenv = (eenv,laterArgs) ||> List.mapFold (fun eenv laterArg -> // Only save arguments that have effects - if Opt.ExprHasEffect cenv.g laterArg then + if Optimizer.ExprHasEffect cenv.g laterArg then let ilTy = laterArg |> tyOfExpr cenv.g |> GenType cenv.amap m cenv.g eenv.tyenv let loc,eenv = AllocLocal cenv cgbuf eenv true (ilxgenGlobalNng.FreshCompilerGeneratedName ("arg",m), ilTy) scopeMarks GenExpr cenv cgbuf eenv SPSuppress laterArg Continue @@ -2751,7 +2757,7 @@ and GenNamedLocalTyFuncCall cenv (cgbuf: CodeGenBuffer) eenv typ cloinfo tyargs let ilContractTy = mkILBoxedTy ilContractCloTySpec.TypeRef ilContractClassTyargs - if not (ilContractMethTyargs.Length = tyargs.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. @@ -3135,6 +3141,8 @@ and GenAsmCode cenv cgbuf eenv (il,tyargs,args,returnTys,m) sequel = | I_stobj (a,b,ILType.TypeVar _) ,[tyarg] -> I_stobj (a,b,tyarg) | I_ldtoken (ILToken.ILType (ILType.TypeVar _)),[tyarg] -> I_ldtoken (ILToken.ILType (tyarg)) | I_sizeof (ILType.TypeVar _) ,[tyarg] -> I_sizeof (tyarg) + | I_cpobj (ILType.TypeVar _) ,[tyarg] -> I_cpobj (tyarg) // currently unused, added for forward compat, see https://visualfsharp.codeplex.com/SourceControl/network/forks/jackpappas/fsharpcontrib/contribution/7134 + | I_initobj (ILType.TypeVar _) ,[tyarg] -> I_initobj (tyarg) // currently unused, added for forward compat, see https://visualfsharp.codeplex.com/SourceControl/network/forks/jackpappas/fsharpcontrib/contribution/7134 | 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) @@ -3264,33 +3272,49 @@ and GenAsmCode cenv cgbuf eenv (il,tyargs,args,returnTys,m) sequel = //-------------------------------------------------------------------------- and GenQuotation cenv cgbuf eenv (ast,conv,m,ety) sequel = - let argTypes,argExprs, astSpec = + + let referencedTypeDefs, spliceTypes, spliceArgExprs, astSpec = match !conv with | Some res -> res | None -> try - QuotationTranslator.ConvExprPublic - (cenv.g, cenv.amap, cenv.viewCcu, QuotationTranslator.IsReflectedDefinition.No) - QuotationTranslator.QuotationTranslationEnv.Empty ast + let qscope = QuotationTranslator.QuotationGenerationScope.Create (cenv.g, cenv.amap, cenv.viewCcu, QuotationTranslator.IsReflectedDefinition.No) + let astSpec = QuotationTranslator.ConvExprPublic qscope QuotationTranslator.QuotationTranslationEnv.Empty ast + let referencedTypeDefs, spliceTypes, spliceArgExprs = qscope.Close() + referencedTypeDefs, List.map fst spliceTypes, List.map fst spliceArgExprs, astSpec with QuotationTranslator.InvalidQuotedTerm e -> error(e) - let astPickledBytes = QuotationPickler.pickle astSpec + + let astSerializedBytes = QuotationPickler.pickle astSpec let someTypeInModuleExpr = mkTypeOfExpr cenv m eenv.someTypeInThisAssembly let rawTy = mkRawQuotedExprTy cenv.g - let mkList ty els = List.foldBack (mkCons cenv.g ty) els (mkNil cenv.g m ty) - let typeExprs = List.map (GenType cenv.amap m cenv.g eenv.tyenv >> (mkTypeOfExpr cenv m)) argTypes - let typesExpr = mkList cenv.g.system_Type_typ typeExprs - let argsExpr = mkList rawTy argExprs - let bytesExpr = Expr.Op(TOp.Bytes(astPickledBytes),[],[],m) - let unpickledExpr = mkCallUnpickleQuotation cenv.g m someTypeInModuleExpr typesExpr argsExpr bytesExpr + let spliceTypeExprs = List.map (GenType cenv.amap m cenv.g eenv.tyenv >> (mkTypeOfExpr cenv m)) spliceTypes + + let bytesExpr = Expr.Op(TOp.Bytes(astSerializedBytes),[],[],m) + + let deserializeExpr = + match QuotationTranslator.QuotationGenerationScope.ComputeQuotationFormat cenv.g with + | QuotationTranslator.QuotationSerializationFormat.FSharp_40_Plus -> + let referencedTypeDefExprs = List.map (mkILNonGenericBoxedTy >> mkTypeOfExpr cenv m) referencedTypeDefs + let referencedTypeDefsExpr = mkArray (cenv.g.system_Type_typ, referencedTypeDefExprs, m) + let spliceTypesExpr = mkArray (cenv.g.system_Type_typ, spliceTypeExprs, m) + let spliceArgsExpr = mkArray (rawTy, spliceArgExprs, m) + mkCallDeserializeQuotationFSharp40Plus cenv.g m someTypeInModuleExpr referencedTypeDefsExpr spliceTypesExpr spliceArgsExpr bytesExpr + + | QuotationTranslator.QuotationSerializationFormat.FSharp_20_Plus -> + let mkList ty els = List.foldBack (mkCons cenv.g ty) els (mkNil cenv.g m ty) + let spliceTypesExpr = mkList cenv.g.system_Type_typ spliceTypeExprs + let spliceArgsExpr = mkList rawTy spliceArgExprs + mkCallDeserializeQuotationFSharp20Plus cenv.g m someTypeInModuleExpr spliceTypesExpr spliceArgsExpr bytesExpr + let afterCastExpr = // Detect a typed quotation and insert the cast if needed. The cast should not fail but does // unfortunately involve a "typeOf" computation over a quotation tree. if tyconRefEq cenv.g (tcrefOfAppTy cenv.g ety) cenv.g.expr_tcr then - mkCallCastQuotation cenv.g m (List.head (argsOfAppTy cenv.g ety)) unpickledExpr + mkCallCastQuotation cenv.g m (List.head (argsOfAppTy cenv.g ety)) deserializeExpr else - unpickledExpr + deserializeExpr GenExpr cenv cgbuf eenv SPSuppress afterCastExpr sequel //-------------------------------------------------------------------------- @@ -3632,7 +3656,7 @@ and GenObjectExpr cenv cgbuf eenvouter expr (baseType,baseValOpt,basecall,overri cgbuf.mgbuf.AddTypeDef(ilCloTypeRef, cloTypeDef, false, false); CountClosure(); GenGetLocalVals cenv cgbuf eenvouter m cloFreeVars; - CG.EmitInstr cgbuf (pop ilCloFreeVars.Length) (Push [ EraseIlxFuncs.mkTyOfLambdas cenv.g.ilxPubCloEnv ilCloLambdas]) (I_newobj (ilxCloSpec.Constructor,None)); + CG.EmitInstr cgbuf (pop ilCloFreeVars.Length) (Push [ EraseClosures.mkTyOfLambdas cenv.g.ilxPubCloEnv ilCloLambdas]) (I_newobj (ilxCloSpec.Constructor,None)); GenSequel cenv eenvouter.cloc cgbuf sequel and GenSequenceExpr cenv (cgbuf:CodeGenBuffer) eenvouter (nextEnumeratorValRef:ValRef,pcvref:ValRef,currvref:ValRef,stateVars,generateNextExpr,closeExpr,checkCloseExpr:Expr,seqElemTy, m) sequel = @@ -3827,7 +3851,7 @@ and GenLambdaVal cenv (cgbuf:CodeGenBuffer) eenv (cloinfo,m) = GenGetLocalVals cenv cgbuf eenv m cloinfo.cloFreeVars; CG.EmitInstr cgbuf (pop cloinfo.cloILFreeVars.Length) - (Push [EraseIlxFuncs.mkTyOfLambdas cenv.g.ilxPubCloEnv cloinfo.ilCloLambdas]) + (Push [EraseClosures.mkTyOfLambdas cenv.g.ilxPubCloEnv cloinfo.ilCloLambdas]) (I_newobj (cloinfo.cloSpec.Constructor,None)) and GenLambda cenv cgbuf eenv isLocalTypeFunc selfv expr sequel = @@ -4160,7 +4184,7 @@ and GenDelegateExpr cenv cgbuf eenvouter expr (TObjExprMethod((TSlotSig(_,delega let ctxtGenericArgsForDelegee = GenGenericArgs m eenvouter.tyenv cloFreeTyvars let ilxCloSpec = IlxClosureSpec.Create(IlxClosureRef(ilDelegeeTypeRef, ilCloLambdas, ilCloFreeVars), mkILGenericArgs ctxtGenericArgsForDelegee) GenGetLocalVals cenv cgbuf eenvouter m cloFreeVars; - CG.EmitInstr cgbuf (pop ilCloFreeVars.Length) (Push [EraseIlxFuncs.mkTyOfLambdas cenv.g.ilxPubCloEnv ilCloLambdas]) (I_newobj (ilxCloSpec.Constructor,None)); + CG.EmitInstr cgbuf (pop ilCloFreeVars.Length) (Push [EraseClosures.mkTyOfLambdas cenv.g.ilxPubCloEnv ilCloLambdas]) (I_newobj (ilxCloSpec.Constructor,None)); let ilDelegeeTyOuter = mkILBoxedTy ilDelegeeTypeRef ctxtGenericArgsForDelegee let ilDelegeeInvokeMethOuter = mkILNonGenericInstanceMethSpecInTy (ilDelegeeTyOuter,"Invoke",typesOfILParamsList ilDelegeeParams, ilDelegeeRet.Type) @@ -5267,14 +5291,6 @@ and GenMethodForBinding let ilMethTypars = ilTypars |> List.drop mspec.EnclosingType.GenericArgs.Length if memberInfo.MemberFlags.MemberKind = MemberKind.Constructor then assert (isNil ilMethTypars) - - // Constructors in abstract classes become protected - let access = - if HasFSharpAttribute cenv.g cenv.g.attrib_AbstractClassAttribute v.MemberApparentParent.Attribs then - ILMemberAccess.Family - else - access - let mdef = mkILCtor (access,ilParams,ilMethodBody) let mdef = { mdef with CustomAttrs= mkILCustomAttrs (ilAttrsThatGoOnPrimaryItem @ sourceNameAttribs @ ilAttrsCompilerGenerated) }; EmitTheMethodDef mdef @@ -5666,7 +5682,11 @@ and GenAttribArg amap g eenv x (ilArgTy:ILType) = match x,ilArgTy with - (* Detect standard constants *) + // Detect 'null' used for an array argument + | Expr.Const(Const.Zero,_,_),ILType.Array _ -> + ILAttribElem.Null + + // Detect standard constants | Expr.Const(c,m,_),_ -> let tynm = ilArgTy.TypeSpec.Name let isobj = (tynm = "System.Object") @@ -5776,7 +5796,7 @@ and CreatePermissionSets g amap eenv (securityAttributes : Attrib list) = let tref = tcref.CompiledRepresentationForNamedType let ilattr = GenAttr amap g eenv attr let _, ilNamedArgs = - match TryDecodeILAttribute g tref (Some(tref.Scope)) (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)) @@ -6306,7 +6326,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = let isPropHidden = ((fspec.IsCompilerGenerated && not tycon.IsEnumTycon) || hiddenRepr || - IsHiddenRecdField eenv.sigToImplRemapInfo (mkNestedRecdFieldRef tcref fspec)) + IsHiddenRecdField eenv.sigToImplRemapInfo (tcref.MakeNestedRecdFieldRef fspec)) let ilType = GenType cenv.amap m cenv.g eenvinner.tyenv fspec.FormalType let ilFieldName = ComputeFieldName tycon fspec @@ -6428,7 +6448,7 @@ and GenTypeDef cenv mgbuf lazyInitInfo eenv m (tycon:Tycon) = eenv.valsInScope.TryFind cenv.g.new_format_vref.Deref) with | Some(Lazy(Method(_,_,sprintfMethSpec,_,_,_))), Some(Lazy(Method(_,_,newFormatMethSpec,_,_,_))) -> // The type returned by the 'sprintf' call - let funcTy = EraseIlxFuncs.mkILFuncTy cenv.g.ilxPubCloEnv ilThisTy cenv.g.ilg.typ_String + let funcTy = EraseClosures.mkILFuncTy cenv.g.ilxPubCloEnv ilThisTy cenv.g.ilg.typ_String // Give the instantiation of the printf format object, i.e. a Format`5 object compatible with StringFormat let newFormatMethSpec = mkILMethSpec(newFormatMethSpec.MethodRef,AsObject, [// 'T -> string' @@ -6791,9 +6811,6 @@ and GenExnDef cenv mgbuf eenv m (exnc:Tycon) = let ilTypeName = tref.Name let ilMethodDefsForComparison = - (*if isSome exnc.TypeContents.tcaug_compare - then [ GenCompareOverride cenv mgbuf eenv m cenv.g.exn_ty (ilThisTy,cenv.g.ilg.typ_Exception) ] - else*) [] let interfaces = exnc.ImmediateInterfaceTypesOfFSharpTycon |> List.map (GenType cenv.amap m cenv.g eenv.tyenv) @@ -6841,7 +6858,7 @@ type IlxGenResults = { ilTypeDefs: ILTypeDef list; ilAssemAttrs : ILAttribute list; ilNetModuleAttrs: ILAttribute list; - quotationResourceBytes: byte[] list } + quotationResourceInfo: (ILTypeRef list * byte[]) list } let GenerateCode (cenv, eenv, TAssembly fileImpls, assemAttribs, moduleAttribs) = @@ -6863,11 +6880,12 @@ let GenerateCode (cenv, eenv, TAssembly fileImpls, assemAttribs, moduleAttribs) let tdefs,reflectedDefinitions = mgbuf.Close() // Generate the quotations - let quotationResourceBytes = + let quotationResourceInfo = match reflectedDefinitions with | [] -> [] | _ -> - let defnsResource = + let qscope = QuotationTranslator.QuotationGenerationScope.Create (cenv.g, cenv.amap, cenv.viewCcu, QuotationTranslator.IsReflectedDefinition.Yes) + let defns = reflectedDefinitions |> List.choose (fun ((methName, v),e) -> try let ety = tyOfExpr cenv.g e @@ -6876,24 +6894,41 @@ let GenerateCode (cenv, eenv, TAssembly fileImpls, assemAttribs, moduleAttribs) | Expr.TyLambda (_,tps,b,_,_) -> tps,b,applyForallTy cenv.g ety (List.map mkTyparTy tps) | _ -> [],e,ety let env = QuotationTranslator.QuotationTranslationEnv.Empty.BindTypars tps - let freeTypes,argExprs, astExpr = QuotationTranslator.ConvExprPublic (cenv.g, cenv.amap, cenv.viewCcu, QuotationTranslator.IsReflectedDefinition.Yes) env taue - let m = e.Range - if nonNil freeTypes then error(InternalError("A free type variable was detected in a reflected definition",m)); - if nonNil argExprs then error(Error(FSComp.SR.ilReflectedDefinitionsCannotUseSliceOperator(),m)); - let mbaseR = QuotationTranslator.ConvMethodBase (cenv.g,cenv.amap,cenv.viewCcu) env (methName, v) + let astExpr = QuotationTranslator.ConvExprPublic qscope env taue + let mbaseR = QuotationTranslator.ConvMethodBase qscope env (methName, v) Some(mbaseR,astExpr) with | QuotationTranslator.InvalidQuotedTerm e -> warning(e); None) - |> QuotationPickler.PickleDefns - [ defnsResource ] + + let referencedTypeDefs, freeTypes, spliceArgExprs = qscope.Close() + + for (_freeType, m) in freeTypes do + error(InternalError("A free type variable was detected in a reflected definition",m)); + + for (_spliceArgExpr, m) in spliceArgExprs do + error(Error(FSComp.SR.ilReflectedDefinitionsCannotUseSliceOperator(),m)) + + let defnsResourceBytes = defns |> QuotationPickler.PickleDefns + +(* + let ilFieldName = CompilerGeneratedName ("field" + string(newUnique())) + let ilFieldTy = mkILArr1DTy cenv.g.ilg.typ_Type + let ilFieldDef = mkILStaticField (ilFieldName,ilFieldTy, None, None, ILMemberAccess.Assembly) + let ilFieldDef = { ilFieldDef with CustomAttrs = mkILCustomAttrs [ cenv.g.ilg.mkDebuggerBrowsableNeverAttribute() ] } + let fspec = mkILFieldSpecInTy (mkILTyForCompLoc (CompLocForPrivateImplementationDetails env.cloc),ilFieldName, ilFieldTy) + CountStaticFieldDef(); + cgbuf.mgbuf.AddFieldDef(fspec.EnclosingTypeRef,ilFieldDef); +*) + + [ (referencedTypeDefs, defnsResourceBytes) ] let ilNetModuleAttrs = GenAttrs cenv eenv moduleAttribs - { ilTypeDefs= tdefs; - ilAssemAttrs = ilAssemAttrs; - ilNetModuleAttrs = ilNetModuleAttrs; - quotationResourceBytes = quotationResourceBytes } + { ilTypeDefs= tdefs + ilAssemAttrs = ilAssemAttrs + ilNetModuleAttrs = ilNetModuleAttrs + quotationResourceInfo = quotationResourceInfo } //------------------------------------------------------------------------- @@ -6924,8 +6959,8 @@ let defaultOf = /// Top-level val bindings are stored (for example) in static fields. /// In the FSI case, these fields are be created and initialised, so we can recover the object. -/// Ilxgen knows how v was stored, and then ilreflect knows how this storage was generated. -/// Ilxgen converts (v:Tast.Val) to AbsIL datatstructures. +/// IlxGen knows how v was stored, and then ilreflect knows how this storage was generated. +/// IlxGen converts (v:Tast.Val) to AbsIL datatstructures. /// Ilreflect converts from AbsIL datatstructures to emitted Type, FieldInfo, MethodInfo etc. let LookupGeneratedValue (amap:Import.ImportMap) (ctxt: ExecutionContext) g eenv (v:Val) = try @@ -7021,7 +7056,7 @@ let LookupGeneratedInfo (ctxt: ExecutionContext) (g:TcGlobals) eenv (v:Val) = /// The published API from the ILX code generator -type IlxAssemblyGenerator(amap: Import.ImportMap, tcGlobals: Env.TcGlobals, tcVal : ConstraintSolver.TcValF, ccu: Tast.CcuThunk) = +type IlxAssemblyGenerator(amap: Import.ImportMap, tcGlobals: TcGlobals, tcVal : ConstraintSolver.TcValF, ccu: Tast.CcuThunk) = // The incremental state held by the ILX code generator let mutable ilxGenEnv = GetEmptyIlxGenEnv tcGlobals.ilg ccu diff --git a/src/fsharp/ilxgen.fsi b/src/fsharp/IlxGen.fsi similarity index 94% rename from src/fsharp/ilxgen.fsi rename to src/fsharp/IlxGen.fsi index b37df4dee6f..7f1745910c5 100644 --- a/src/fsharp/ilxgen.fsi +++ b/src/fsharp/IlxGen.fsi @@ -1,14 +1,15 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Ilxgen +module internal Microsoft.FSharp.Compiler.IlxGen +open System +open System.IO +open System.Reflection open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.Tast -open System -open System.IO -open System.Reflection +open Microsoft.FSharp.Compiler.TcGlobals /// Indicates how the generated IL code is ultimately emitted type IlxGenBackend = @@ -47,7 +48,7 @@ type public IlxGenResults = /// The generated IL/ILX .NET module attributes ilNetModuleAttrs : ILAttribute list /// The generated IL/ILX resources associated with F# quotations - quotationResourceBytes : byte[] list } + quotationResourceInfo : (ILTypeRef list * byte[]) list } /// Used to support the compilation-inversion operations "ClearGeneratedValue" and "LookupGeneratedValue" @@ -60,7 +61,7 @@ type ExecutionContext = /// An incremental ILX code generator for a single assembly type public IlxAssemblyGenerator = /// Create an incremental ILX code generator for a single assembly - new : Import.ImportMap * Env.TcGlobals * ConstraintSolver.TcValF * CcuThunk -> IlxAssemblyGenerator + new : Import.ImportMap * TcGlobals * ConstraintSolver.TcValF * CcuThunk -> IlxAssemblyGenerator /// Register a set of referenced assemblies with the ILX code generator member AddExternalCcus : CcuThunk list -> unit diff --git a/src/fsharp/tlr.fs b/src/fsharp/InnerLambdasToTopLevelFuncs.fs similarity index 99% rename from src/fsharp/tlr.fs rename to src/fsharp/InnerLambdasToTopLevelFuncs.fs index 7d9a952dd2c..7792c3af477 100644 --- a/src/fsharp/tlr.fs +++ b/src/fsharp/InnerLambdasToTopLevelFuncs.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Tlr +module internal Microsoft.FSharp.Compiler.InnerLambdasToTopLevelFuncs open Internal.Utilities open Microsoft.FSharp.Compiler.AbstractIL @@ -14,7 +14,7 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Layout open Microsoft.FSharp.Compiler.Detuple.GlobalUsageAnalysis open Microsoft.FSharp.Compiler.Lib @@ -868,7 +868,7 @@ module Pass4_RewriteAssembly = [] type RewriteContext = { ccu : CcuThunk; - g : Env.TcGlobals; + g : TcGlobals; tlrS : Zset ; topValS : Zset ; arityM : Zmap ; @@ -1048,9 +1048,9 @@ module Pass4_RewriteAssembly = let newTlrBinds,tlrRebinds = TransTLRBindings penv tlrBs let aenvBinds = GetAEnvBindings penv fclass // lower nonTlrBs if they are GTL - // QUERY: we repeat this logic in Lowertop. Do we really need to do this here? + // QUERY: we repeat this logic in LowerCallsAndSeqs. Do we really need to do this here? // QUERY: yes and no - if we don't, we have an unrealizable term, and many decisions must - // QUERY: correlate with Lowertop. + // QUERY: correlate with LowerCallsAndSeqs. let forceTopBindToHaveArity (bind:Binding) = if penv.topValS.Contains(bind.Var) then ConvertBind penv.g bind else bind @@ -1170,9 +1170,9 @@ module Pass4_RewriteAssembly = // all others - below - rewrite structurally - so boiler plate code after this point... | Expr.Const _ -> z,expr (* constant wrt Val *) - | Expr.Quote (a,{contents=Some(argTypes,argExprs,data)},isFromQueryExpression,m,ty) -> + | Expr.Quote (a,{contents=Some(typeDefs,argTypes,argExprs,data)},isFromQueryExpression,m,ty) -> let z,argExprs = List.foldMap (TransExpr penv) z argExprs - z,Expr.Quote(a,{contents=Some(argTypes,argExprs,data)},isFromQueryExpression,m,ty) + z,Expr.Quote(a,{contents=Some(typeDefs,argTypes,argExprs,data)},isFromQueryExpression,m,ty) | Expr.Quote (a,{contents=None},isFromQueryExpression,m,ty) -> z,Expr.Quote(a,{contents=None},isFromQueryExpression,m,ty) | Expr.Op (c,tyargs,args,m) -> diff --git a/src/fsharp/tlr.fsi b/src/fsharp/InnerLambdasToTopLevelFuncs.fsi similarity index 55% rename from src/fsharp/tlr.fsi rename to src/fsharp/InnerLambdasToTopLevelFuncs.fsi index c0b16fcaeea..1c6225cb119 100644 --- a/src/fsharp/tlr.fsi +++ b/src/fsharp/InnerLambdasToTopLevelFuncs.fsi @@ -1,10 +1,11 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Tlr +module internal Microsoft.FSharp.Compiler.InnerLambdasToTopLevelFuncs open Microsoft.FSharp.Compiler +open Microsoft.FSharp.Compiler.TcGlobals -val MakeTLRDecisions : Tast.CcuThunk -> Env.TcGlobals -> Tast.TypedImplFile -> Tast.TypedImplFile +val MakeTLRDecisions : Tast.CcuThunk -> TcGlobals -> Tast.TypedImplFile -> Tast.TypedImplFile #if TLR_LIFT val liftTLR : bool ref #endif diff --git a/src/fsharp/InternalCollections.fs b/src/fsharp/InternalCollections.fs index 6b9e2cf3b9c..403bd20498a 100644 --- a/src/fsharp/InternalCollections.fs +++ b/src/fsharp/InternalCollections.fs @@ -7,11 +7,15 @@ open System.Collections.Generic #nowarn "44" // This construct is deprecated. This F# library function has been renamed. Use 'isSome' instead [] -type internal ValueStrength<'T> = +type internal ValueStrength<'T when 'T : not struct> = | Strong of 'T +#if FX_NO_GENERIC_WEAKREFERENCE | Weak of WeakReference +#else + | Weak of WeakReference<'T> +#endif -type internal AgedLookup<'TKey,'TValue>(keepStrongly:int, areSame, ?onStrongDiscard : ('TValue -> unit), ?keepMax: int) = +type internal AgedLookup<'TKey,'TValue when 'TValue : not struct>(keepStrongly:int, areSame, ?onStrongDiscard : ('TValue -> unit), ?keepMax: int) = /// The list of items stored. Youngest is at the end of the list. /// The choice of order is somewhat aribtrary. If the other way then adding /// items would be O(1) and removing O(N). @@ -69,10 +73,15 @@ type internal AgedLookup<'TKey,'TValue>(keepStrongly:int, areSame, ?onStrongDisc match value with | Strong(value) -> yield (key,value) | Weak(weakReference) -> +#if FX_NO_GENERIC_WEAKREFERENCE match weakReference.Target with | null -> assert onStrongDiscard.IsNone; () | value -> yield key,(value:?>'TValue) ] - +#else + match weakReference.TryGetTarget () with + | false, _ -> assert onStrongDiscard.IsNone; () + | true, value -> yield key, value ] +#endif let AssignWithStrength(newdata,discard1) = let actualLength = List.length newdata @@ -87,7 +96,11 @@ type internal AgedLookup<'TKey,'TValue>(keepStrongly:int, areSame, ?onStrongDisc let handle = if n(v)) +#endif else Strong(v) k,handle ) @@ -136,7 +149,7 @@ type internal AgedLookup<'TKey,'TValue>(keepStrongly:int, areSame, ?onStrongDisc -type internal MruCache<'TKey,'TValue>(keepStrongly,compute, areSame, ?isStillValid : 'TKey*'TValue->bool, ?areSameForSubsumption, ?logComputedNewValue, ?logUsedCachedValue, ?onStrongDiscard, ?keepMax) = +type internal MruCache<'TKey,'TValue when 'TValue : not struct>(keepStrongly,compute, areSame, ?isStillValid : 'TKey*'TValue->bool, ?areSameForSubsumption, ?logComputedNewValue, ?logUsedCachedValue, ?onStrongDiscard, ?keepMax) = /// Default behavior of areSameForSubsumption function is areSame let areSameForSubsumption = defaultArg areSameForSubsumption areSame diff --git a/src/fsharp/InternalCollections.fsi b/src/fsharp/InternalCollections.fsi index 2775107bf0a..115f715233d 100644 --- a/src/fsharp/InternalCollections.fsi +++ b/src/fsharp/InternalCollections.fsi @@ -5,7 +5,7 @@ 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. - type internal AgedLookup<'TKey,'TValue> = + type internal AgedLookup<'TKey,'TValue when 'TValue : not struct> = new : keepStrongly:int * areSame:('TKey * 'TKey -> bool) * ?onStrongDiscard : ('TValue -> unit) // this may only be set if keepTotal=keepStrongly, i.e. not weak entries @@ -32,7 +32,7 @@ namespace Internal.Utilities.Collections /// 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. - type internal MruCache<'TKey,'TValue> = + type internal MruCache<'TKey,'TValue when 'TValue : not struct> = new : keepStrongly:int * compute:('TKey -> 'TValue) * areSame:('TKey * 'TKey -> bool) diff --git a/src/fsharp/InternalFileSystemUtils.fs b/src/fsharp/InternalFileSystemUtils.fs index fcae6705288..e3fd8a0f962 100644 --- a/src/fsharp/InternalFileSystemUtils.fs +++ b/src/fsharp/InternalFileSystemUtils.fs @@ -24,26 +24,15 @@ open System.IO open System.Diagnostics type internal File() = - static member SafeExists filename = - Debug.Assert(Path.IsPathRooted(filename), sprintf "SafeExists: '%s' is not absolute" filename) - System.IO.File.Exists(filename) - static member SafeNewFileStream(filename:string,mode:FileMode,access:FileAccess,share:FileShare) = - new FileStream(filename,mode,access,share) + static member SafeExists filename = FileSystem.SafeExists filename + //static member SafeNewFileStream(filename:string,mode:FileMode,access:FileAccess,share:FileShare) = + // FileSystem new FileStream(filename,mode,access,share) type internal Path() = - /// Take in a Windows 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 - static member SafeGetFullPath filename = - Debug.Assert(Path.IsPathRooted(filename), sprintf "SafeGetFullPath: '%s' is not absolute" filename) - System.IO.Path.GetFullPath(filename) static member IsInvalidDirectory(path:string) = path=null || path.IndexOfAny(Path.GetInvalidPathChars()) <> -1 - static member IsInvalidFilename(filename:string) = - String.IsNullOrEmpty(filename) || filename.IndexOfAny(Path.GetInvalidFileNameChars()) <> -1 - static member IsInvalidPath(path:string) = if String.IsNullOrEmpty(path) then true else diff --git a/src/fsharp/InternalFileSystemUtils.fsi b/src/fsharp/InternalFileSystemUtils.fsi index 7647b5980f2..34c05728377 100644 --- a/src/fsharp/InternalFileSystemUtils.fsi +++ b/src/fsharp/InternalFileSystemUtils.fsi @@ -5,11 +5,8 @@ namespace Internal.Utilities.FileSystem [] type internal File = static member SafeExists : filename:string -> bool - static member SafeNewFileStream : filename:string * mode:System.IO.FileMode * access:System.IO.FileAccess * share:System.IO.FileShare -> System.IO.FileStream [] type internal Path = - static member SafeGetFullPath : filename:string -> string static member IsInvalidDirectory : path:string -> bool - static member IsInvalidFilename : filename:string -> bool static member IsInvalidPath : path:string -> bool diff --git a/src/fsharp/lexfilter.fs b/src/fsharp/LexFilter.fs similarity index 99% rename from src/fsharp/lexfilter.fs rename to src/fsharp/LexFilter.fs index 81cf6a0ed5b..d7183777f5d 100644 --- a/src/fsharp/lexfilter.fs +++ b/src/fsharp/LexFilter.fs @@ -2,7 +2,7 @@ /// LexFilter - process the token stream prior to parsing. /// Implements the offside rule and a copule of other lexical transformations. -module internal Microsoft.FSharp.Compiler.Lexfilter +module internal Microsoft.FSharp.Compiler.LexFilter open Internal.Utilities open Internal.Utilities.Text.Lexing diff --git a/src/fsharp/lowertop.fs b/src/fsharp/LowerCallsAndSeqs.fs similarity index 99% rename from src/fsharp/lowertop.fs rename to src/fsharp/LowerCallsAndSeqs.fs index e2fbe7702f0..eaea08b433c 100644 --- a/src/fsharp/lowertop.fs +++ b/src/fsharp/LowerCallsAndSeqs.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Lowertop +module internal Microsoft.FSharp.Compiler.LowerCallsAndSeqs open Internal.Utilities open Microsoft.FSharp.Compiler.AbstractIL @@ -17,7 +17,7 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Lib -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.PrettyNaming //---------------------------------------------------------------------------- @@ -56,6 +56,7 @@ let InterceptExpr g cont expr = /// optimizer in opt.fs let LowerImplFile g ass = RewriteImplFile { PreIntercept = Some(InterceptExpr g); + PreInterceptBinding=None PostTransform= (fun _ -> None); IsUnderQuotations=false } ass diff --git a/src/fsharp/nameres.fs b/src/fsharp/NameResolution.fs similarity index 94% rename from src/fsharp/nameres.fs rename to src/fsharp/NameResolution.fs index 710c4b8f1b3..50b1e4f0186 100644 --- a/src/fsharp/nameres.fs +++ b/src/fsharp/NameResolution.fs @@ -5,7 +5,7 @@ //------------------------------------------------------------------------- -module internal Microsoft.FSharp.Compiler.Nameres +module internal Microsoft.FSharp.Compiler.NameResolution open Internal.Utilities open Microsoft.FSharp.Compiler @@ -15,14 +15,14 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Import -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library +open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.ResultOrException open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.AbstractIL.IL // Abstract IL -open Microsoft.FSharp.Compiler.Outcome open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.Infos.AccessibilityLogic open Microsoft.FSharp.Compiler.Infos.AttributeChecking @@ -135,7 +135,7 @@ type Item = /// Represents the resolution of a name to an F# value or function. | Value of ValRef /// Represents the resolution of a name to an F# union case. - | UnionCase of UnionCaseInfo + | UnionCase of UnionCaseInfo * bool /// Represents the resolution of a name to an F# active pattern result. | 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. @@ -197,7 +197,7 @@ type Item = match d with | Item.Value v -> v.DisplayName | Item.ActivePatternCase apref -> apref.Name - | Item.UnionCase uinfo -> DecompileOpName uinfo.UnionCase.DisplayName + | Item.UnionCase(uinfo,_) -> DecompileOpName uinfo.UnionCase.DisplayName | Item.ExnCase tcref -> tcref.LogicalName | Item.RecdField rfinfo -> DecompileOpName rfinfo.RecdField.Name | Item.NewDef id -> id.idText @@ -221,6 +221,9 @@ let valRefHash (vref: ValRef) = | None -> 0 | Some v -> LanguagePrimitives.PhysicalHash v +/// Represents a record field resolution and the information if the usage is deprecated. +type FieldResolution = FieldResolution of RecdFieldRef * bool + /// Information about an extension member held in the name resolution environment type ExtensionMember = @@ -521,7 +524,7 @@ let AddRecdField (rfref:RecdFieldRef) tab = NameMultiMap.add rfref.FieldName rfr /// Add a set of union cases to the corresponding sub-table of the environment let AddUnionCases1 (tab:Map<_,_>) (ucrefs:UnionCaseRef list)= (tab, ucrefs) ||> List.fold (fun acc ucref -> - let item = Item.UnionCase (GeneralizeUnionCaseRef ucref) + let item = Item.UnionCase(GeneralizeUnionCaseRef ucref,false) acc.Add (ucref.CaseName, item)) /// Add a set of union cases to the corresponding sub-table of the environment @@ -530,20 +533,20 @@ let AddUnionCases2 bulkAddMode (eUnqualifiedItems: LayeredMap<_,_>) (ucrefs :Uni | BulkAdd.Yes -> let items = ucrefs |> Array.ofList |> Array.map (fun ucref -> - let item = Item.UnionCase (GeneralizeUnionCaseRef ucref) + let item = Item.UnionCase(GeneralizeUnionCaseRef ucref,false) KeyValuePair(ucref.CaseName,item)) eUnqualifiedItems.AddAndMarkAsCollapsible items | BulkAdd.No -> (eUnqualifiedItems,ucrefs) ||> List.fold (fun acc ucref -> - let item = Item.UnionCase (GeneralizeUnionCaseRef ucref) + let item = Item.UnionCase(GeneralizeUnionCaseRef ucref,false) acc.Add (ucref.CaseName, item)) /// Add any implied contents of a type definition to the environment. let private AddPartsOfTyconRefToNameEnv bulkAddMode ownDefinition (g:TcGlobals) amap m nenv (tcref:TyconRef) = let isIL = tcref.IsILTycon - let ucrefs = if isIL then [] else tcref.UnionCasesAsList |> List.map (mkNestedUnionCaseRef tcref) + let ucrefs = if isIL then [] else tcref.UnionCasesAsList |> List.map tcref.MakeNestedUnionCaseRef let flds = if isIL then [| |] else tcref.AllFieldsArray let eIndexedExtensionMembers, eUnindexedExtensionMembers = @@ -559,7 +562,7 @@ let private AddPartsOfTyconRefToNameEnv bulkAddMode ownDefinition (g:TcGlobals) else (nenv.eFieldLabels,flds) ||> Array.fold (fun acc f -> if f.IsStatic || f.IsCompilerGenerated then acc - else AddRecdField (mkNestedRecdFieldRef tcref f) acc) + else AddRecdField (tcref.MakeNestedRecdFieldRef f) acc) let eUnqualifiedItems = let tab = nenv.eUnqualifiedItems @@ -647,7 +650,7 @@ let AddModuleAbbrevToNameEnv (id:Ident) nenv modrefs = let MakeNestedModuleRefs (modref: ModuleOrNamespaceRef) = modref.ModuleOrNamespaceType.ModuleAndNamespaceDefinitions - |> List.map modref.MkNestedTyconRef + |> List.map modref.NestedTyconRef /// Add a set of module or namespace to the name resolution environment, including any sub-modules marked 'AutoOpen' // @@ -671,21 +674,21 @@ let rec AddModuleOrNamespaceRefsToNameEnv g amap m root ad nenv (modrefs: Module let nenv = (nenv,modrefs) ||> List.fold (fun nenv modref -> if modref.IsModule && TryFindFSharpBoolAttribute g g.attrib_AutoOpenAttribute modref.Attribs = Some true then - AddModuleOrNamespaceContentsToNameEnv g amap ad m nenv modref + AddModuleOrNamespaceContentsToNameEnv g amap ad m false nenv modref else nenv) nenv /// Add the contents of a module or namespace to the name resolution environment -and AddModuleOrNamespaceContentsToNameEnv (g:TcGlobals) amap (ad:AccessorDomain) m nenv (modref:ModuleOrNamespaceRef) = +and AddModuleOrNamespaceContentsToNameEnv (g:TcGlobals) amap (ad:AccessorDomain) m root nenv (modref:ModuleOrNamespaceRef) = let pri = NextExtensionMethodPriority() let mty = modref.ModuleOrNamespaceType let tycons = mty.TypeAndExceptionDefinitions let exncs = mty.ExceptionDefinitions let nenv = { nenv with eDisplayEnv= nenv.eDisplayEnv.AddOpenModuleOrNamespace modref } - let tcrefs = tycons |> List.map modref.MkNestedTyconRef |> List.filter (IsEntityAccessible amap m ad) - let exrefs = exncs |> List.map modref.MkNestedTyconRef |> List.filter (IsEntityAccessible amap m ad) + let tcrefs = tycons |> List.map modref.NestedTyconRef |> List.filter (IsEntityAccessible amap m ad) + let exrefs = exncs |> List.map modref.NestedTyconRef |> List.filter (IsEntityAccessible amap m ad) let nenv = (nenv,exrefs) ||> List.fold (AddExceptionDeclsToNameEnv BulkAdd.Yes) let nenv = (nenv,tcrefs) ||> AddTyconRefsToNameEnv BulkAdd.Yes false g amap m false let vrefs = @@ -695,7 +698,7 @@ and AddModuleOrNamespaceContentsToNameEnv (g:TcGlobals) amap (ad:AccessorDomain) else None) |> FlatList.toArray let nenv = AddValRefsToNameEnvWithPriority BulkAdd.Yes pri nenv vrefs - let nenv = (nenv,MakeNestedModuleRefs modref) ||> AddModuleOrNamespaceRefsToNameEnv g amap m false ad + let nenv = (nenv,MakeNestedModuleRefs modref) ||> AddModuleOrNamespaceRefsToNameEnv g amap m root ad nenv /// Add a set of modules or namespaces to the name resolution environment @@ -706,8 +709,8 @@ and AddModuleOrNamespaceContentsToNameEnv (g:TcGlobals) amap (ad:AccessorDomain) // open M1 // // The list contains [M1b; M1a] -and AddModulesAndNamespacesContentsToNameEnv g amap ad m nenv modrefs = - (modrefs, nenv) ||> List.foldBack (fun modref acc -> AddModuleOrNamespaceContentsToNameEnv g amap ad m acc modref) +and AddModulesAndNamespacesContentsToNameEnv g amap ad m root nenv modrefs = + (modrefs, nenv) ||> List.foldBack (fun modref acc -> AddModuleOrNamespaceContentsToNameEnv g amap ad m root acc modref) /// Add a single modules or namespace to the name resolution environment let AddModuleOrNamespaceRefToNameEnv g amap m root ad nenv (modref:EntityRef) = @@ -754,7 +757,7 @@ let FreshenUnionCaseRef (ncenv: NameResolver) m (ucref:UnionCaseRef) = /// This must be called after fetching unqualified items that may need to be freshened let FreshenUnqualifiedItem (ncenv: NameResolver) m res = match res with - | Item.UnionCase (UnionCaseInfo(_,ucref)) -> Item.UnionCase (FreshenUnionCaseRef ncenv m ucref) + | Item.UnionCase(UnionCaseInfo(_,ucref),_) -> Item.UnionCase(FreshenUnionCaseRef ncenv m ucref,false) | _ -> res @@ -954,14 +957,14 @@ let AddEntityForProvidedType (amap: Import.ImportMap, modref: ModuleOrNamespaceR let isSuppressRelocate = amap.g.isInteractive || st.PUntaint((fun st -> st.IsSuppressRelocate),m) let tycon = Construct.NewProvidedTycon(resolutionEnvironment, st, importProvidedType, isSuppressRelocate, m) modref.ModuleOrNamespaceType.AddProvidedTypeEntity(tycon) - let tcref = modref.MkNestedTyconRef tycon + let tcref = modref.NestedTyconRef tycon System.Diagnostics.Debug.Assert modref.TryDeref.IsSome tcref /// Given a provided type or provided namespace, resolve the type name using the type provider API. /// If necessary, incorporate the provided type or namespace into the entity. -let ResolveProvidedTypeNameInEntity (amap, m, typeName, staticResInfo: TypeNameResolutionStaticArgsInfo, modref: ModuleOrNamespaceRef) = +let ResolveProvidedTypeNameInEntity (amap, m, typeName, modref: ModuleOrNamespaceRef) = match modref.TypeReprInfo with | TProvidedNamespaceExtensionPoint(resolutionEnvironment,resolvers) -> match modref.Deref.PublicPath with @@ -980,14 +983,15 @@ let ResolveProvidedTypeNameInEntity (amap, m, typeName, staticResInfo: TypeNameR | TProvidedTypeExtensionPoint info -> let sty = info.ProvidedType let resolutionEnvironment = info.ResolutionEnvironment - if staticResInfo.NumStaticArgs > 0 then - error(Error(FSComp.SR.etNestedProvidedTypesDoNotTakeStaticArgumentsOrGenericParameters(),m)) if resolutionEnvironment.showResolutionMessages then dprintfn "resolving name '%s' in TProvidedTypeExtensionPoint '%s'" typeName (sty.PUntaint((fun sty -> sty.FullName), m)) match sty.PApply((fun sty -> sty.GetNestedType(typeName)), m) with - | Tainted.Null -> [] + | Tainted.Null -> + //if staticResInfo.NumStaticArgs > 0 then + // error(Error(FSComp.SR.etNestedProvidedTypesDoNotTakeStaticArgumentsOrGenericParameters(),m)) + [] | nestedSty -> [AddEntityForProvidedType (amap, modref, resolutionEnvironment, nestedSty, m) ] | _ -> [] @@ -1001,15 +1005,15 @@ let LookupTypeNameInEntityMaybeHaveArity (amap, m, nm, staticResInfo:TypeNameRes | TypeNameResolutionStaticArgsInfo.Indefinite -> match LookupTypeNameInEntityNoArity m nm mtyp with | [] -> [] - | tycons -> tycons |> List.map modref.MkNestedTyconRef + | tycons -> tycons |> List.map modref.NestedTyconRef | TypeNameResolutionStaticArgsInfo.Definite _ -> match LookupTypeNameInEntityHaveArity nm staticResInfo mtyp with - | Some tycon -> [modref.MkNestedTyconRef tycon] + | Some tycon -> [modref.NestedTyconRef tycon] | None -> [] #if EXTENSIONTYPING let tcrefs = match tcrefs with - | [] -> ResolveProvidedTypeNameInEntity (amap, m, nm, staticResInfo, modref) + | [] -> ResolveProvidedTypeNameInEntity (amap, m, nm, modref) | _ -> tcrefs #else amap |> ignore @@ -1029,7 +1033,7 @@ let MakeNestedType (ncenv:NameResolver) (tinst:TType list) m (tcrefNested:TyconR /// Get all the accessible nested types of an existing type. let GetNestedTypesOfType (ad, ncenv:NameResolver, optFilter, staticResInfo, checkForGenerated, m) typ = let g = ncenv.g - ncenv.InfoReader.GetPrimaryTypeHierachy(AllowMultiIntfInstantiations.No,m,typ) |> List.collect (fun typ -> + ncenv.InfoReader.GetPrimaryTypeHierachy(AllowMultiIntfInstantiations.Yes,m,typ) |> List.collect (fun typ -> if isAppTy g typ then let tcref,tinst = destAppTy g typ let tycon = tcref.Deref @@ -1059,7 +1063,7 @@ let GetNestedTypesOfType (ad, ncenv:NameResolver, optFilter, staticResInfo, chec #endif mty.TypesByAccessNames.Values |> Seq.toList - |> List.map (tcref.MkNestedTyconRef >> MakeNestedType ncenv tinst m) + |> List.map (tcref.NestedTyconRef >> MakeNestedType ncenv tinst m) |> List.filter (IsTypeAccessible g ncenv.amap m ad) else []) @@ -1310,8 +1314,8 @@ let rec ResolveLongIndentAsModuleOrNamespace amap m fullyQualified (nenv:NameRes | [] -> success (depth,modref,mty) | id:: rest -> match mty.ModulesAndNamespacesByDemangledName.TryFind id.idText with - | Some mspec when IsEntityAccessible amap m ad (modref.MkNestedTyconRef mspec) -> - let subref = modref.MkNestedTyconRef mspec + | Some mspec when IsEntityAccessible amap m ad (modref.NestedTyconRef mspec) -> + let subref = modref.NestedTyconRef mspec look (depth+1) subref mspec.ModuleOrNamespaceType rest | _ -> raze (UndefinedName(depth,FSComp.SR.undefinedNameNamespace,id,[])) @@ -1371,7 +1375,7 @@ let ResolveObjectConstructor (ncenv:NameResolver) edenv m ad typ = let IntrinsicPropInfosOfTypeInScope (infoReader:InfoReader) (optFilter, ad) findFlag m typ = let g = infoReader.g let amap = infoReader.amap - let pinfos = GetIntrinsicPropInfoSetsOfType infoReader (optFilter, ad, AllowMultiIntfInstantiations.No) findFlag m typ + let pinfos = GetIntrinsicPropInfoSetsOfType infoReader (optFilter, ad, AllowMultiIntfInstantiations.Yes) findFlag m typ let pinfos = pinfos |> ExcludeHiddenOfPropInfos g amap m pinfos @@ -1399,7 +1403,7 @@ let ExtensionPropInfosOfTypeInScope (infoReader:InfoReader) (nenv: NameResolutio let g = infoReader.g let extMemsFromHierarchy = - infoReader.GetEntireTypeHierachy(AllowMultiIntfInstantiations.No,m,typ) |> List.collect (fun typ -> + infoReader.GetEntireTypeHierachy(AllowMultiIntfInstantiations.Yes,m,typ) |> List.collect (fun typ -> if (isAppTy g typ) then let tcref = tcrefOfAppTy g typ let extMemInfos = nenv.eIndexedExtensionMembers.Find tcref @@ -1461,7 +1465,7 @@ let SelectMethInfosFromExtMembers (infoReader:InfoReader) optFilter apparentTy m let ExtensionMethInfosOfTypeInScope (infoReader:InfoReader) (nenv: NameResolutionEnv) optFilter m typ = let extMemsDangling = SelectMethInfosFromExtMembers infoReader optFilter typ m nenv.eUnindexedExtensionMembers let extMemsFromHierarchy = - infoReader.GetEntireTypeHierachy(AllowMultiIntfInstantiations.No,m,typ) |> List.collect (fun typ -> + infoReader.GetEntireTypeHierachy(AllowMultiIntfInstantiations.Yes,m,typ) |> List.collect (fun typ -> let g = infoReader.g if (isAppTy g typ) then let tcref = tcrefOfAppTy g typ @@ -1472,7 +1476,7 @@ let ExtensionMethInfosOfTypeInScope (infoReader:InfoReader) (nenv: NameResolutio /// Get all the available methods of a type (both intrinsic and extension) let AllMethInfosOfTypeInScope infoReader nenv (optFilter,ad) findFlag m typ = - IntrinsicMethInfosOfType infoReader (optFilter,ad,AllowMultiIntfInstantiations.No) findFlag m typ + IntrinsicMethInfosOfType infoReader (optFilter,ad,AllowMultiIntfInstantiations.Yes) findFlag m typ @ ExtensionMethInfosOfTypeInScope infoReader nenv optFilter m typ @@ -1495,7 +1499,7 @@ let TryFindUnionCaseOfType g typ nm = let tcref,tinst = destAppTy g typ match tcref.GetUnionCaseByName nm with | None -> None - | Some ucase -> Some(UnionCaseInfo(tinst,mkNestedUnionCaseRef tcref ucase)) + | Some ucase -> Some(UnionCaseInfo(tinst,tcref.MakeNestedUnionCaseRef ucase)) else None @@ -1548,7 +1552,7 @@ let rec ResolveLongIdentInTypePrim (ncenv:NameResolver) nenv lookupKind (resInfo // Lookup: datatype constructors take precedence match unionCaseSearch with | Some ucase -> - success(resInfo,Item.UnionCase(ucase),rest) + success(resInfo,Item.UnionCase(ucase,false),rest) | None -> match TryFindIntrinsicNamedItemOfType ncenv.InfoReader (nm,ad) findFlag m typ with | Some (PropertyItem psets) when (match lookupKind with LookupKind.Expr -> true | _ -> false) -> @@ -1635,7 +1639,7 @@ let private ResolveLongIdentInTyconRefs (ncenv:NameResolver) nenv lookupKind dep //------------------------------------------------------------------------- let (|AccessibleEntityRef|_|) amap m ad (modref: ModuleOrNamespaceRef) mspec = - let eref = modref.MkNestedTyconRef mspec + let eref = modref.NestedTyconRef mspec if IsEntityAccessible amap m ad eref then Some eref else None let rec ResolveExprLongIdentInModuleOrNamespace (ncenv:NameResolver) nenv (typeNameResInfo: TypeNameResolutionInfo) ad resInfo depth m modref (mty:ModuleOrNamespaceType) (lid :Ident list) = @@ -1649,14 +1653,15 @@ let rec ResolveExprLongIdentInModuleOrNamespace (ncenv:NameResolver) nenv (typeN success(resInfo,Item.Value (mkNestedValRef modref vspec),rest) | _-> match TryFindTypeWithUnionCase modref id with - | Some tycon when IsTyconReprAccessible ncenv.amap m ad (modref.MkNestedTyconRef tycon) -> - let ucref = mkUnionCaseRef (modref.MkNestedTyconRef tycon) id.idText + | Some tycon when IsTyconReprAccessible ncenv.amap m ad (modref.NestedTyconRef tycon) -> + let ucref = mkUnionCaseRef (modref.NestedTyconRef tycon) id.idText + let showDeprecated = HasFSharpAttribute ncenv.g ncenv.g.attrib_RequireQualifiedAccessAttribute tycon.Attribs let ucinfo = FreshenUnionCaseRef ncenv m ucref - success (resInfo,Item.UnionCase ucinfo,rest) + success (resInfo,Item.UnionCase(ucinfo,showDeprecated),rest) | _ -> match mty.ExceptionDefinitionsByDemangledName.TryFind(id.idText) with - | Some excon when IsTyconReprAccessible ncenv.amap m ad (modref.MkNestedTyconRef excon) -> - success (resInfo,Item.ExnCase (modref.MkNestedTyconRef excon),rest) + | Some excon when IsTyconReprAccessible ncenv.amap m ad (modref.NestedTyconRef excon) -> + success (resInfo,Item.ExnCase (modref.NestedTyconRef excon),rest) | _ -> // Something in a type? @@ -1850,15 +1855,16 @@ let rec ResolvePatternLongIdentInModuleOrNamespace (ncenv:NameResolver) nenv num | id :: rest -> let m = unionRanges m id.idRange match TryFindTypeWithUnionCase modref id with - | Some tycon when IsTyconReprAccessible ncenv.amap m ad (modref.MkNestedTyconRef tycon) -> - let tcref = modref.MkNestedTyconRef tycon + | Some tycon when IsTyconReprAccessible ncenv.amap m ad (modref.NestedTyconRef tycon) -> + let tcref = modref.NestedTyconRef tycon let ucref = mkUnionCaseRef tcref id.idText + let showDeprecated = HasFSharpAttribute ncenv.g ncenv.g.attrib_RequireQualifiedAccessAttribute tycon.Attribs let ucinfo = FreshenUnionCaseRef ncenv m ucref - success (resInfo,Item.UnionCase ucinfo,rest) + success (resInfo,Item.UnionCase(ucinfo,showDeprecated),rest) | _ -> match mty.ExceptionDefinitionsByDemangledName.TryFind(id.idText) with - | Some exnc when IsEntityAccessible ncenv.amap m ad (modref.MkNestedTyconRef exnc) -> - success (resInfo,Item.ExnCase (modref.MkNestedTyconRef exnc),rest) + | Some exnc when IsEntityAccessible ncenv.amap m ad (modref.NestedTyconRef exnc) -> + success (resInfo,Item.ExnCase (modref.NestedTyconRef exnc),rest) | _ -> // An active pattern constructor in a module match (ActivePatternElemsOfModuleOrNamespace modref).TryFind(id.idText) with @@ -2140,8 +2146,9 @@ let rec ResolveFieldInModuleOrNamespace (ncenv:NameResolver) nenv ad (resInfo:Re // search for module-qualified names, e.g. { Microsoft.FSharp.Core.contents = 1 } let modulScopedFieldNames = match TryFindTypeWithRecdField modref id with - | Some tycon when IsEntityAccessible ncenv.amap m ad (modref.MkNestedTyconRef tycon) -> - success(modref.MkNestedRecdFieldRef tycon id, rest) + | Some tycon when IsEntityAccessible ncenv.amap m ad (modref.NestedTyconRef tycon) -> + let showDeprecated = HasFSharpAttribute ncenv.g ncenv.g.attrib_RequireQualifiedAccessAttribute tycon.Attribs + success(FieldResolution(modref.RecdFieldRefInNestedTycon tycon id,showDeprecated), rest) | _ -> error // search for type-qualified names, e.g. { Microsoft.FSharp.Core.Ref.contents = 1 } let tyconSearch = @@ -2151,7 +2158,7 @@ let rec ResolveFieldInModuleOrNamespace (ncenv:NameResolver) nenv ad (resInfo:Re let tcrefs = tcrefs |> List.map (fun tcref -> (ResolutionInfo.Empty,tcref)) let tyconSearch = ResolveLongIdentInTyconRefs ncenv nenv LookupKind.RecdField (depth+1) m ad rest typeNameResInfo id.idRange tcrefs // choose only fields - let tyconSearch = tyconSearch |?> List.choose (function (_,Item.RecdField(RecdFieldInfo(_,rfref)),rest) -> Some(rfref,rest) | _ -> None) + let tyconSearch = tyconSearch |?> List.choose (function (_,Item.RecdField(RecdFieldInfo(_,rfref)),rest) -> Some(FieldResolution(rfref,false),rest) | _ -> None) tyconSearch | _ -> NoResultsOrUsefulErrors @@ -2178,15 +2185,16 @@ let ResolveField (ncenv:NameResolver) nenv ad typ (mp,id:Ident) = | [] -> if isAppTy g typ then match ncenv.InfoReader.TryFindRecdOrClassFieldInfoOfType(id.idText,m,typ) with - | Some (RecdFieldInfo(_,rfref)) -> [rfref] + | Some (RecdFieldInfo(_,rfref)) -> [FieldResolution(rfref,false)] | None -> error(Error(FSComp.SR.nrTypeDoesNotContainSuchField((NicePrint.minimalStringOfType nenv.eDisplayEnv typ), id.idText),m)) else let frefs = try Map.find id.idText nenv.eFieldLabels with :? KeyNotFoundException -> error (UndefinedName(0,FSComp.SR.undefinedNameRecordLabel,id,NameMap.domainL nenv.eFieldLabels)) // Eliminate duplicates arising from multiple 'open' - let frefs = frefs |> ListSet.setify (fun fref1 fref2 -> tyconRefEq g fref1.TyconRef fref2.TyconRef) - frefs + frefs + |> ListSet.setify (fun fref1 fref2 -> tyconRefEq g fref1.TyconRef fref2.TyconRef) + |> List.map (fun x -> FieldResolution(x,false)) | _ -> let lid = (mp@[id]) @@ -2198,7 +2206,7 @@ let ResolveField (ncenv:NameResolver) nenv ad typ (mp,id:Ident) = let tcrefs = tcrefs |> List.map (fun tcref -> (ResolutionInfo.Empty,tcref)) let tyconSearch = ResolveLongIdentInTyconRefs ncenv nenv LookupKind.RecdField 1 m ad rest typeNameResInfo tn.idRange tcrefs // choose only fields - let tyconSearch = tyconSearch |?> List.choose (function (_,Item.RecdField(RecdFieldInfo(_,rfref)),rest) -> Some(rfref,rest) | _ -> None) + let tyconSearch = tyconSearch |?> List.choose (function (_,Item.RecdField(RecdFieldInfo(_,rfref)),rest) -> Some(FieldResolution(rfref,false),rest) | _ -> None) tyconSearch | _ -> NoResultsOrUsefulErrors let modulSearch ad = @@ -2410,7 +2418,7 @@ let IsUnionCaseUnseen ad g amap m (ucref:UnionCaseRef) = let ItemIsUnseen ad g amap m item = match item with | Item.Value x -> IsValUnseen ad g m x - | Item.UnionCase x -> IsUnionCaseUnseen ad g amap m x.UnionCaseRef + | Item.UnionCase(x,_) -> IsUnionCaseUnseen ad g amap m x.UnionCaseRef | Item.ExnCase x -> IsTyconUnseen ad g amap m x | _ -> false @@ -2432,7 +2440,7 @@ let rec PartialResolveLookupInModuleOrNamespaceAsModuleOrNamespaceThen f plid (m | [] -> f modref | id:: rest -> match mty.ModulesAndNamespacesByDemangledName.TryFind(id) with - | Some mty -> PartialResolveLookupInModuleOrNamespaceAsModuleOrNamespaceThen f rest (modref.MkNestedTyconRef mty) + | Some mty -> PartialResolveLookupInModuleOrNamespaceAsModuleOrNamespaceThen f rest (modref.NestedTyconRef mty) | None -> [] let PartialResolveLongIndentAsModuleOrNamespaceThen (nenv:NameResolutionEnv) plid f = @@ -2451,8 +2459,17 @@ let ResolveRecordOrClassFieldsOfType (ncenv: NameResolver) m ad typ statics = |> List.filter (fun rfref -> rfref.IsStatic = statics && IsFieldInfoAccessible ad rfref) |> List.map Item.RecdField +[] +type ResolveCompletionTargets = + | All of (MethInfo -> TType -> bool) + | SettablePropertiesAndFields + member this.ResolveAll = + match this with + | All _ -> true + | SettablePropertiesAndFields -> false + /// Resolve a (possibly incomplete) long identifier to a set of possible resolutions, qualified by type. -let ResolveCompletionsInType (ncenv: NameResolver) nenv isApplicableMeth m ad statics typ = +let ResolveCompletionsInType (ncenv: NameResolver) nenv (completionTargets: ResolveCompletionTargets) m ad statics typ = let g = ncenv.g let amap = ncenv.amap @@ -2461,21 +2478,23 @@ let ResolveCompletionsInType (ncenv: NameResolver) nenv isApplicableMeth m ad st |> List.filter (fun rfref -> rfref.IsStatic = statics && IsFieldInfoAccessible ad rfref) let ucinfos = - if statics && isAppTy g typ then + if completionTargets.ResolveAll && statics && isAppTy g typ then let tc,tinst = destAppTy g typ tc.UnionCasesAsRefList |> List.filter (IsUnionCaseUnseen ad g ncenv.amap m >> not) - |> List.map (fun ucref -> Item.UnionCase(UnionCaseInfo(tinst,ucref))) + |> List.map (fun ucref -> Item.UnionCase(UnionCaseInfo(tinst,ucref),false)) else [] let einfos = - ncenv.InfoReader.GetEventInfosOfType(None,ad,m,typ) - |> List.filter (fun x -> - IsStandardEventInfo ncenv.InfoReader m ad x && - x.IsStatic = statics) + if completionTargets.ResolveAll then + ncenv.InfoReader.GetEventInfosOfType(None,ad,m,typ) + |> List.filter (fun x -> + IsStandardEventInfo ncenv.InfoReader m ad x && + x.IsStatic = statics) + else [] let nestedTypes = - if statics then + if completionTargets.ResolveAll && statics then typ |> GetNestedTypesOfType (ad, ncenv, None, TypeNameResolutionStaticArgsInfo.Indefinite, false, m) else @@ -2493,7 +2512,6 @@ let ResolveCompletionsInType (ncenv: NameResolver) nenv isApplicableMeth m ad st x.IsStatic = statics && IsPropInfoAccessible g amap m ad x) - // Exclude get_ and set_ methods accessed by properties let pinfoMethNames = (pinfosIncludingUnseen @@ -2505,13 +2523,15 @@ let ResolveCompletionsInType (ncenv: NameResolver) nenv isApplicableMeth m ad st |> List.map (fun pinfo -> pinfo.SetterMethod.LogicalName)) let einfoMethNames = - [ for einfo in einfos do - let delegateType = einfo.GetDelegateType(amap,m) - let (SigOfFunctionForDelegate(invokeMethInfo,_,_,_)) = GetSigOfFunctionForDelegate ncenv.InfoReader delegateType m ad - // Only events with void return types are suppressed in intellisense. - if slotSigHasVoidReturnTy (invokeMethInfo.GetSlotSig(amap, m)) then - yield einfo.GetAddMethod().DisplayName - yield einfo.GetRemoveMethod().DisplayName ] + if completionTargets.ResolveAll then + [ for einfo in einfos do + let delegateType = einfo.GetDelegateType(amap,m) + let (SigOfFunctionForDelegate(invokeMethInfo,_,_,_)) = GetSigOfFunctionForDelegate ncenv.InfoReader delegateType m ad + // Only events with void return types are suppressed in intellisense. + if slotSigHasVoidReturnTy (invokeMethInfo.GetSlotSig(amap, m)) then + yield einfo.GetAddMethod().DisplayName + yield einfo.GetRemoveMethod().DisplayName ] + else [] let suppressedMethNames = Zset.ofList String.order (pinfoMethNames @ einfoMethNames) @@ -2520,6 +2540,10 @@ let ResolveCompletionsInType (ncenv: NameResolver) nenv isApplicableMeth m ad st |> List.filter (fun x -> not (PropInfoIsUnseen m x)) let minfoFilter (minfo:MethInfo) = + let isApplicableMeth = + match completionTargets with + | ResolveCompletionTargets.All x -> x + | _ -> failwith "internal error: expected completionTargets = ResolveCompletionTargets.All" // Only show the Finalize, MemberwiseClose etc. methods on System.Object for values whose static type really is // System.Object. Few of these are typically used from F#. // @@ -2529,7 +2553,7 @@ let ResolveCompletionsInType (ncenv: NameResolver) nenv isApplicableMeth m ad st not minfo.IsExtensionMember && match minfo.LogicalName with | "GetType" -> false - | "GetHashCode" -> isObjTy g minfo.EnclosingType && not (Augment.TypeDefinitelyHasEquality g typ) + | "GetHashCode" -> isObjTy g minfo.EnclosingType && not (AugmentWithHashCompare.TypeDefinitelyHasEquality g typ) | "ToString" -> false | "Equals" -> if not (isObjTy g minfo.EnclosingType) then @@ -2537,7 +2561,7 @@ let ResolveCompletionsInType (ncenv: NameResolver) nenv isApplicableMeth m ad st false elif minfo.IsInstance then // System.Object has only one instance Equals method and we want to suppress it unless Augment.TypeDefinitelyHasEquality is true - not (Augment.TypeDefinitelyHasEquality g typ) + not (AugmentWithHashCompare.TypeDefinitelyHasEquality g typ) else // System.Object has only one static Equals method and we always want to suppress it true @@ -2558,24 +2582,37 @@ let ResolveCompletionsInType (ncenv: NameResolver) nenv isApplicableMeth m ad st result let pinfoItems = + let pinfos = + match completionTargets with + | ResolveCompletionTargets.SettablePropertiesAndFields -> pinfos |> List.filter (fun p -> p.HasSetter) + | _ -> pinfos + pinfos - |> List.map (fun pinfo -> DecodeFSharpEvent [pinfo] ad g ncenv m) - |> List.filter (fun pinfo-> match pinfo with - | Some(Item.Event(einfo)) -> IsStandardEventInfo ncenv.InfoReader m ad einfo - | _ -> pinfo.IsSome) - |> List.map (fun pinfo->pinfo.Value) - - let addersAndRemovers = - pinfoItems - |> List.map (function Item.Event(FSEvent(_,_,addValRef,removeValRef)) -> [addValRef.LogicalName;removeValRef.LogicalName] | _ -> []) - |> List.concat - + |> List.choose (fun pinfo-> + let pinfoOpt = DecodeFSharpEvent [pinfo] ad g ncenv m + match pinfoOpt, completionTargets with + | Some(Item.Event(einfo)), ResolveCompletionTargets.All _ -> if IsStandardEventInfo ncenv.InfoReader m ad einfo then pinfoOpt else None + | _ -> pinfoOpt) + // REVIEW: add a name filter here in the common cases? let minfos = - AllMethInfosOfTypeInScope ncenv.InfoReader nenv (None,ad) PreferOverrides m typ - |> List.filter minfoFilter - |> List.filter (fun minfo -> not(addersAndRemovers|>List.exists (fun ar-> ar = minfo.LogicalName))) + if completionTargets.ResolveAll then + let minfos = + AllMethInfosOfTypeInScope ncenv.InfoReader nenv (None,ad) PreferOverrides m typ + |> List.filter minfoFilter + + let addersAndRemovers = + pinfoItems + |> List.map (function Item.Event(FSEvent(_,_,addValRef,removeValRef)) -> [addValRef.LogicalName;removeValRef.LogicalName] | _ -> []) + |> List.concat + + match addersAndRemovers with + | [] -> minfos + | addersAndRemovers -> + let isNotAdderOrRemover (minfo: MethInfo) = not(addersAndRemovers |> List.exists (fun ar -> ar = minfo.LogicalName)) + List.filter isNotAdderOrRemover minfos + else [] // Partition methods into overload sets let rec partitionl (l:MethInfo list) acc = match l with @@ -2584,8 +2621,6 @@ let ResolveCompletionsInType (ncenv: NameResolver) nenv isApplicableMeth m ad st let nm = h.LogicalName partitionl t (NameMultiMap.add nm h acc) - - // Build the results ucinfos @ List.map Item.RecdField rfinfos @ @@ -2699,12 +2734,12 @@ let rec private EntityRefContainsSomethingAccessible (ncenv: NameResolver) m ad (mty.AllEntities |> QueueList.exists (fun tc -> not tc.IsModuleOrNamespace && - not (IsTyconUnseen ad g ncenv.amap m (modref.MkNestedTyconRef tc)))) || + not (IsTyconUnseen ad g ncenv.amap m (modref.NestedTyconRef tc)))) || // Search the sub-modules of the namespace/modulefor something accessible (mty.ModulesAndNamespacesByDemangledName |> NameMap.exists (fun _ submod -> - let submodref = modref.MkNestedTyconRef submod + let submodref = modref.NestedTyconRef submod EntityRefContainsSomethingAccessible ncenv m ad submodref)) let rec ResolvePartialLongIdentInModuleOrNamespace (ncenv: NameResolver) nenv isApplicableMeth m ad (modref:ModuleOrNamespaceRef) plid allowObsolete = @@ -2714,7 +2749,7 @@ let rec ResolvePartialLongIdentInModuleOrNamespace (ncenv: NameResolver) nenv is let tycons = mty.TypeDefinitions |> List.filter (fun tcref -> not (tcref.LogicalName.Contains(","))) - |> List.filter (fun tycon -> not (IsTyconUnseen ad g ncenv.amap m (modref.MkNestedTyconRef tycon))) + |> List.filter (fun tycon -> not (IsTyconUnseen ad g ncenv.amap m (modref.NestedTyconRef tycon))) let ilTyconNames = mty.TypesByAccessNames.Values @@ -2737,7 +2772,7 @@ let rec ResolvePartialLongIdentInModuleOrNamespace (ncenv: NameResolver) nenv is @ (UnionCaseRefsInModuleOrNamespace modref |> List.filter (IsUnionCaseUnseen ad g ncenv.amap m >> not) |> List.map GeneralizeUnionCaseRef - |> List.map Item.UnionCase) + |> List.map (fun x -> Item.UnionCase(x,false))) // Collect up the accessible active patterns in the module @ (ActivePatternElemsOfModuleOrNamespace modref @@ -2749,7 +2784,7 @@ let rec ResolvePartialLongIdentInModuleOrNamespace (ncenv: NameResolver) nenv is // Collect up the accessible F# exception declarations in the module @ (mty.ExceptionDefinitionsByDemangledName |> NameMap.range - |> List.map modref.MkNestedTyconRef + |> List.map modref.NestedTyconRef |> List.filter (IsTyconUnseen ad g ncenv.amap m >> not) |> List.map Item.ExnCase) @@ -2758,30 +2793,30 @@ let rec ResolvePartialLongIdentInModuleOrNamespace (ncenv: NameResolver) nenv is |> NameMap.range |> List.filter (fun x -> x.DemangledModuleOrNamespaceName |> notFakeContainerModule ilTyconNames) |> List.filter (fun x -> x.DemangledModuleOrNamespaceName |> IsInterestingModuleName) - |> List.map modref.MkNestedTyconRef + |> List.map modref.NestedTyconRef |> List.filter (IsTyconUnseen ad g ncenv.amap m >> not) |> List.filter (EntityRefContainsSomethingAccessible ncenv m ad) |> List.map ItemForModuleOrNamespaceRef) // Get all the types and .NET constructor groups accessible from here @ (tycons - |> List.map (modref.MkNestedTyconRef >> ItemOfTyconRef ncenv m) ) + |> List.map (modref.NestedTyconRef >> ItemOfTyconRef ncenv m) ) @ (tycons - |> List.map (modref.MkNestedTyconRef >> InfosForTyconConstructors ncenv m ad) |> List.concat) + |> List.map (modref.NestedTyconRef >> InfosForTyconConstructors ncenv m ad) |> List.concat) | id :: rest -> (match mty.ModulesAndNamespacesByDemangledName.TryFind(id) with | Some mspec - when not (IsTyconUnseenObsoleteSpec ad g ncenv.amap m (modref.MkNestedTyconRef mspec) allowObsolete) -> + when not (IsTyconUnseenObsoleteSpec ad g ncenv.amap m (modref.NestedTyconRef mspec) allowObsolete) -> let allowObsolete = rest <> [] && allowObsolete - ResolvePartialLongIdentInModuleOrNamespace ncenv nenv isApplicableMeth m ad (modref.MkNestedTyconRef mspec) rest allowObsolete + ResolvePartialLongIdentInModuleOrNamespace ncenv nenv isApplicableMeth m ad (modref.NestedTyconRef mspec) rest allowObsolete | _ -> []) @ (LookupTypeNameInEntityNoArity m id modref.ModuleOrNamespaceType |> List.collect (fun tycon -> - let tcref = modref.MkNestedTyconRef tycon + let tcref = modref.NestedTyconRef tycon if not (IsTyconUnseenObsoleteSpec ad g ncenv.amap m tcref allowObsolete) then tcref |> generalizedTyconRef |> ResolvePartialLongIdentInType ncenv nenv isApplicableMeth m ad true rest else @@ -2883,7 +2918,7 @@ let rec ResolvePartialLongIdentPrim (ncenv: NameResolver) (nenv: NameResolutionE /// Resolve a (possibly incomplete) long identifier to a set of possible resolutions. let ResolvePartialLongIdent ncenv nenv isApplicableMeth m ad plid allowObsolete = - ResolvePartialLongIdentPrim ncenv nenv isApplicableMeth OpenQualified m ad plid allowObsolete + ResolvePartialLongIdentPrim ncenv nenv (ResolveCompletionTargets.All isApplicableMeth) OpenQualified m ad plid allowObsolete // REVIEW: has much in common with ResolvePartialLongIdentInModuleOrNamespace - probably they should be united let rec ResolvePartialLongIdentInModuleOrNamespaceForRecordFields (ncenv: NameResolver) nenv m ad (modref:ModuleOrNamespaceRef) plid allowObsolete = @@ -2895,7 +2930,7 @@ let rec ResolvePartialLongIdentInModuleOrNamespaceForRecordFields (ncenv: NameRe mty.TypeDefinitions |> List.filter (fun tcref -> not (tcref.LogicalName.Contains(","))) |> List.filter (fun tycon -> tycon.IsRecordTycon) - |> List.filter (fun tycon -> not (IsTyconUnseen ad g ncenv.amap m (modref.MkNestedTyconRef tycon))) + |> List.filter (fun tycon -> not (IsTyconUnseen ad g ncenv.amap m (modref.NestedTyconRef tycon))) let ilTyconNames = mty.TypesByAccessNames.Values @@ -2910,17 +2945,17 @@ let rec ResolvePartialLongIdentInModuleOrNamespaceForRecordFields (ncenv: NameRe |> NameMap.range |> List.filter (fun x -> x.DemangledModuleOrNamespaceName |> notFakeContainerModule ilTyconNames) |> List.filter (fun x -> x.DemangledModuleOrNamespaceName |> IsInterestingModuleName) - |> List.map modref.MkNestedTyconRef + |> List.map modref.NestedTyconRef |> List.filter (IsTyconUnseen ad g ncenv.amap m >> not) |> List.filter (EntityRefContainsSomethingAccessible ncenv m ad) |> List.map ItemForModuleOrNamespaceRef) // Collect all accessible record types - @ (tycons |> List.map (modref.MkNestedTyconRef >> ItemOfTyconRef ncenv m) ) + @ (tycons |> List.map (modref.NestedTyconRef >> ItemOfTyconRef ncenv m) ) @ [ // accessible record fields for tycon in tycons do - if IsEntityAccessible ncenv.amap m ad (modref.MkNestedTyconRef tycon) then - let ttype = FreshenTycon ncenv m (modref.MkNestedTyconRef tycon) + if IsEntityAccessible ncenv.amap m ad (modref.NestedTyconRef tycon) then + let ttype = FreshenTycon ncenv m (modref.NestedTyconRef tycon) yield! ncenv.InfoReader.GetRecordOrClassFieldsOfType(None, ad, m, ttype) |> List.map Item.RecdField @@ -2929,9 +2964,9 @@ let rec ResolvePartialLongIdentInModuleOrNamespaceForRecordFields (ncenv: NameRe | id :: rest -> (match mty.ModulesAndNamespacesByDemangledName.TryFind(id) with | Some mspec - when not (IsTyconUnseenObsoleteSpec ad g ncenv.amap m (modref.MkNestedTyconRef mspec) allowObsolete) -> + when not (IsTyconUnseenObsoleteSpec ad g ncenv.amap m (modref.NestedTyconRef mspec) allowObsolete) -> let allowObsolete = rest <> [] && allowObsolete - ResolvePartialLongIdentInModuleOrNamespaceForRecordFields ncenv nenv m ad (modref.MkNestedTyconRef mspec) rest allowObsolete + ResolvePartialLongIdentInModuleOrNamespaceForRecordFields ncenv nenv m ad (modref.NestedTyconRef mspec) rest allowObsolete | _ -> []) @ ( match rest with @@ -2941,7 +2976,7 @@ let rec ResolvePartialLongIdentInModuleOrNamespaceForRecordFields (ncenv: NameRe tycons |> List.filter (fun tc -> tc.IsRecordTycon) |> List.collect (fun tycon -> - let tcref = modref.MkNestedTyconRef tycon + let tcref = modref.NestedTyconRef tycon let ttype = FreshenTycon ncenv m tcref ncenv.InfoReader.GetRecordOrClassFieldsOfType(None, ad, m, ttype ) ) diff --git a/src/fsharp/nameres.fsi b/src/fsharp/NameResolution.fsi similarity index 94% rename from src/fsharp/nameres.fsi rename to src/fsharp/NameResolution.fsi index 61cba72b298..3587fea3682 100644 --- a/src/fsharp/nameres.fsi +++ b/src/fsharp/NameResolution.fsi @@ -1,16 +1,15 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Nameres +module internal Microsoft.FSharp.Compiler.NameResolution open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Import -open Microsoft.FSharp.Compiler.Outcome open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library open Microsoft.FSharp.Compiler.PrettyNaming @@ -38,7 +37,8 @@ type ArgumentContainer = type Item = // These exist in the "eUnqualifiedItems" List.map in the type environment. | Value of ValRef - | UnionCase of UnionCaseInfo + // UnionCaseInfo and temporary flag which is used to show a "use case is deprecated" message + | UnionCase of UnionCaseInfo * bool | ActivePatternResult of ActivePatternInfo * TType * int * range | ActivePatternCase of ActivePatternElemRef | ExnCase of TyconRef @@ -67,6 +67,8 @@ type Item = | UnqualifiedType of TyconRef list member DisplayName : TcGlobals -> string +/// Represents a record field resolution and the information if the usage is deprecated. +type FieldResolution = FieldResolution of RecdFieldRef * bool /// Information about an extension member held in the name resolution environment [] @@ -127,7 +129,7 @@ val internal AddModuleOrNamespaceRefsToNameEnv : TcGlobals -> 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 AddModulesAndNamespacesContentsToNameEnv : TcGlobals -> ImportMap -> AccessorDomain -> range -> NameResolutionEnv -> ModuleOrNamespaceRef list -> NameResolutionEnv +val internal AddModulesAndNamespacesContentsToNameEnv : TcGlobals -> ImportMap -> AccessorDomain -> range -> bool -> NameResolutionEnv -> ModuleOrNamespaceRef list -> NameResolutionEnv /// A flag which indicates if it is an error to have two declared type parameters with identical names /// in the name resolution environment. @@ -206,6 +208,9 @@ val internal CallExprHasTypeSink : TcResultsSink -> range * NameResolutio /// Get all the available properties of a type (both intrinsic and extension) val internal AllPropInfosOfTypeInScope : InfoReader -> NameResolutionEnv -> string option * AccessorDomain -> FindMemberFlag -> range -> TType -> PropInfo list +/// Get all the available properties of a type (only extension) +val internal ExtensionPropInfosOfTypeInScope : InfoReader -> NameResolutionEnv -> string option * AccessorDomain -> range -> TType -> PropInfo list + /// Get the available methods of a type (both declared and inherited) val internal AllMethInfosOfTypeInScope : InfoReader -> NameResolutionEnv -> string option * AccessorDomain -> FindMemberFlag -> range -> TType -> MethInfo list @@ -259,7 +264,7 @@ val internal ResolveTypeLongIdentInTyconRef : TcResultsSink -> NameResol val internal ResolveTypeLongIdent : TcResultsSink -> NameResolver -> ItemOccurence -> FullyQualifiedFlag -> NameResolutionEnv -> AccessorDomain -> Ident list -> TypeNameResolutionStaticArgsInfo -> PermitDirectReferenceToGeneratedType -> ResultOrException /// Resolve a long identifier to a field -val internal ResolveField : NameResolver -> NameResolutionEnv -> AccessorDomain -> TType -> Ident list * Ident -> RecdFieldRef list +val internal ResolveField : NameResolver -> NameResolutionEnv -> AccessorDomain -> TType -> Ident list * Ident -> FieldResolution list /// Resolve a long identifier occurring in an expression position val internal ResolveExprLongIdent : TcResultsSink -> NameResolver -> range -> AccessorDomain -> NameResolutionEnv -> TypeNameResolutionInfo -> Ident list -> Item * Ident list @@ -297,5 +302,10 @@ val FakeInstantiationGenerator : range -> Typar list -> TType list /// 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 +[] +type ResolveCompletionTargets = + | All of (MethInfo -> TType -> bool) + | SettablePropertiesAndFields + /// Resolve a (possibly incomplete) long identifier to a set of possible resolutions, qualified by type. -val ResolveCompletionsInType : NameResolver -> NameResolutionEnv -> (MethInfo -> TType -> bool) -> Range.range -> Infos.AccessorDomain -> bool -> TType -> Item list +val ResolveCompletionsInType : NameResolver -> NameResolutionEnv -> ResolveCompletionTargets -> Range.range -> Infos.AccessorDomain -> bool -> TType -> Item list diff --git a/src/fsharp/NicePrint.fs b/src/fsharp/NicePrint.fs index a11694fd577..66b955dff0e 100644 --- a/src/fsharp/NicePrint.fs +++ b/src/fsharp/NicePrint.fs @@ -6,6 +6,8 @@ module internal Microsoft.FSharp.Compiler.NicePrint +#nowarn "44" // This construct is deprecated. please use List.item + open Internal.Utilities open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.IL @@ -14,12 +16,13 @@ open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.Range +open Microsoft.FSharp.Compiler.Rational open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.AbstractIL.IL (* Abstract IL *) open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Infos @@ -33,7 +36,7 @@ open Microsoft.FSharp.Compiler.Layout open Microsoft.FSharp.Compiler.PrettyNaming [] -module private PrintUtilities = +module internal PrintUtilities = let bracketIfL x lyt = if x then bracketL lyt else lyt let squareAngleL x = leftL "[<" ^^ x ^^ rightL ">]" let angleL x = sepL "<" ^^ x ^^ rightL ">" @@ -67,6 +70,37 @@ module private PrintUtilities = | [x] -> [resultFunction x (layoutFunction x)] | (x:: rest) -> [ resultFunction x (layoutFunction x -- leftL (match rest.Length with 1 -> FSComp.SR.nicePrintOtherOverloads1() | n -> FSComp.SR.nicePrintOtherOverloadsN(n))) ] | _ -> [] + + let layoutTyconRefImpl isAttribute (denv: DisplayEnv) (tcref:TyconRef) = + let demangled = + let name = + if denv.includeStaticParametersInTypeNames then + tcref.DisplayNameWithStaticParameters + elif tcref.DisplayName = tcref.DisplayNameWithStaticParameters then + tcref.DisplayName // has no static params + else + tcref.DisplayName+"<...>" // shorten + if isAttribute then + defaultArg (String.tryDropSuffix name "Attribute") name + else name + let tyconTextL = wordL demangled + if denv.shortTypeNames then + tyconTextL + else + let path = demangledPathOfCompPath tcref.CompilationPath + let path = + if denv.includeStaticParametersInTypeNames then + path + else + path |> List.map (fun s -> let i = s.IndexOf(',') + if i <> -1 then s.Substring(0,i)+"<...>" // apparently has static params, shorten + else s) + let pathText = trimPathByDisplayEnv denv path + if pathText = "" then tyconTextL else leftL pathText ^^ tyconTextL + + let layoutBuiltinAttribute (denv: DisplayEnv) (attrib: BuiltinAttribInfo) = + let tcref = attrib.TyconRef + squareAngleL (layoutTyconRefImpl true denv tcref) module private PrintIL = @@ -182,7 +216,8 @@ module private PrintIL = // Layout an unnamed argument | _, None, _ -> leftL ":" // Layout a named argument - | true, Some nm,_ -> wordL "params" ^^ leftL (nm+":") + | true, Some nm,_ -> + layoutBuiltinAttribute denv denv.g.attrib_ParamArrayAttribute ^^ leftL (nm + ":") | false, Some nm,_ -> leftL (nm+":") preL ^^ (layoutILType denv ilTyparSubst p.Type) @@ -547,27 +582,7 @@ module private PrintTypes = | _ -> itemL /// Layout a reference to a type - let layoutTyconRef (denv: DisplayEnv) (tcref:TyconRef) = - let demangled = if denv.includeStaticParametersInTypeNames then - tcref.DisplayNameWithStaticParameters - elif tcref.DisplayName = tcref.DisplayNameWithStaticParameters then - tcref.DisplayName // has no static params - else - tcref.DisplayName+"<...>" // shorten - let tyconTextL = wordL demangled - if denv.shortTypeNames then - tyconTextL - else - let path = demangledPathOfCompPath tcref.CompilationPath - let path = - if denv.includeStaticParametersInTypeNames then - path - else - path |> List.map (fun s -> let i = s.IndexOf(',') - if i <> -1 then s.Substring(0,i)+"<...>" // apparently has static params, shorten - else s) - let pathText = trimPathByDisplayEnv denv path - if pathText = "" then tyconTextL else leftL pathText ^^ tyconTextL + let layoutTyconRef denv tycon = layoutTyconRefImpl false denv tycon /// Layout the flags of a member let layoutMemberFlags memFlags = @@ -812,14 +827,16 @@ module private PrintTypes = and private layoutMeasure denv unt = let sortVars vs = vs |> List.sortBy (fun (v:Typar,_) -> v.DisplayName) let sortCons cs = cs |> List.sortBy (fun (c:TyconRef,_) -> c.DisplayName) - let negvs,posvs = ListMeasureVarOccsWithNonZeroExponents unt |> sortVars |> List.partition (fun (_,e) -> e<0) - let negcs,poscs = ListMeasureConOccsWithNonZeroExponents denv.g false unt |> sortCons |> List.partition (fun (_,e) -> e<0) + 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 prefix = spaceListL (List.map (fun (v,e) -> if e=1 then unparL v else unparL v -- wordL (sprintf "^ %d" e)) posvs @ - List.map (fun (c,e) -> if e=1 then unconL c else unconL c -- wordL (sprintf "^ %d" e)) poscs) - let postfix = spaceListL (List.map (fun (v,e) -> if e= -1 then unparL v else unparL v -- wordL (sprintf "^ %d" (-e))) negvs @ - List.map (fun (c,e) -> if e= -1 then unconL c else unconL c -- wordL (sprintf "^ %d" (-e))) negcs) + let rationalL e = wordL (RationalToString e) + let measureToPowerL x e = if e = OneRational then x else x -- wordL "^" -- rationalL e + let prefix = spaceListL (List.map (fun (v,e) -> measureToPowerL (unparL v) e) posvs @ + List.map (fun (c,e) -> measureToPowerL (unconL c) e) poscs) + let postfix = spaceListL (List.map (fun (v,e) -> measureToPowerL (unparL v) (NegRational e)) negvs @ + List.map (fun (c,e) -> measureToPowerL (unconL c) (NegRational e)) negcs) match (negvs,negcs) with | [],[] -> (match posvs,poscs with [],[] -> wordL "1" | _ -> prefix) | _ -> prefix ^^ sepL "/" ^^ (if List.length negvs + List.length negcs > 1 then sepL "(" ^^ postfix ^^ sepL ")" else postfix) @@ -913,7 +930,12 @@ module private PrintTypes = layoutTypeWithInfoAndPrec denv env 2 ty // Layout a named argument | Some id,_,isParamArray,_ -> - leftL ((if isParamArray then "params " else "") + id.idText) ^^ sepL ":" ^^ layoutTypeWithInfoAndPrec denv env 2 ty + let prefix = + if isParamArray then + layoutBuiltinAttribute denv denv.g.attrib_ParamArrayAttribute ^^ leftL id.idText + else + leftL id.idText + prefix ^^ sepL ":" ^^ layoutTypeWithInfoAndPrec denv env 2 ty let delimitReturnValue = if denv.useColonForReturnType then ":" else "->" @@ -1128,7 +1150,7 @@ module InfoMemberPrinting = /// Format the arguments of a method to a buffer. /// /// This uses somewhat "old fashioned" printf-style buffer printing. - let formatParamDataToBuffer denv os (ParamData(isParamArray,_isOutArg,optArgInfo,nmOpt,pty)) = + let formatParamDataToBuffer denv os (ParamData(isParamArray, _isOutArg, optArgInfo, nmOpt, _reflArgInfo, pty)) = let isOptArg = optArgInfo.IsOptional match isParamArray, nmOpt, isOptArg, tryDestOptionTy denv.g pty with // Layout an optional argument @@ -1142,7 +1164,8 @@ module InfoMemberPrinting = outputTy denv os pty; // Layout a named argument | true, Some nm,_,_ -> - bprintf os "params %s: " nm + layoutBuiltinAttribute denv denv.g.attrib_ParamArrayAttribute |> bufferL os + bprintf os " %s: " nm outputTy denv os pty | false, Some nm,_,_ -> bprintf os "%s: " nm @@ -1300,7 +1323,7 @@ module private TastDefinitionPrinting = let isGenerated = if isUnionCase then isGeneratedUnionCaseField else isGeneratedExceptionField sepListL (wordL "*") (List.mapi (layoutUnionOrExceptionField denv isGenerated) fields) - let layoutUnionCase denv prefixL ucase = + let layoutUnionCase denv prefixL (ucase:UnionCase) = let nmL = wordL (DemangleOperatorName ucase.Id.idText) //let nmL = layoutAccessibility denv ucase.Accessibility nmL match ucase.RecdFields with @@ -1376,20 +1399,35 @@ module private TastDefinitionPrinting = v.DisplayName, // sort by name List.sum v.NumArgs , // sort by #curried v.NumArgs.Length) // sort by arity - let ctors = GetIntrinsicConstructorInfosOfType infoReader m ty - let meths = GetImmediateIntrinsicMethInfosOfType (None,ad) g amap m ty + + let shouldShow (valRef : ValRef option) = + match valRef with + | None -> true + | Some(vr) -> + (denv.showObsoleteMembers || not (Infos.AttributeChecking.CheckFSharpAttributesForObsolete denv.g vr.Attribs)) && + (denv.showHiddenMembers || not (Infos.AttributeChecking.CheckFSharpAttributesForHidden denv.g vr.Attribs)) + + let ctors = + GetIntrinsicConstructorInfosOfType infoReader m ty + |> List.filter (fun v -> shouldShow v.ArbitraryValRef) + + let meths = + GetImmediateIntrinsicMethInfosOfType (None,ad) g amap m ty + |> List.filter (fun v -> shouldShow v.ArbitraryValRef) + let iimplsLs = if suppressInheritanceAndInterfacesForTyInSimplifiedDisplays g amap m ty then [] else - GetImmediateInterfacesOfType g amap m ty |> List.map (fun ity -> wordL (if isInterfaceTy g ty then "inherit" else "interface") --- layoutType denv ity) + GetImmediateInterfacesOfType SkipUnrefInterfaces.Yes g amap m ty |> List.map (fun ity -> wordL (if isInterfaceTy g ty then "inherit" else "interface") --- layoutType denv ity) let props = - //GetImmediateIntrinsicPropInfosOfType (None,ad) g amap m ty - GetIntrinsicPropInfosOfType infoReader (None,ad,AllowMultiIntfInstantiations.No) PreferOverrides m ty + GetIntrinsicPropInfosOfType infoReader (None,ad,AllowMultiIntfInstantiations.Yes) PreferOverrides m ty + |> List.filter (fun v -> shouldShow v.ArbitraryValRef) let events = - infoReader.GetEventInfosOfType(None,ad,m,ty) + infoReader.GetEventInfosOfType(None,ad,m,ty) + |> List.filter (fun v -> shouldShow v.ArbitraryValRef) let impliedNames = try diff --git a/src/fsharp/opt.fs b/src/fsharp/Optimizer.fs similarity index 97% rename from src/fsharp/opt.fs rename to src/fsharp/Optimizer.fs index 96342bcbf21..0b702fd3725 100644 --- a/src/fsharp/opt.fs +++ b/src/fsharp/Optimizer.fs @@ -7,7 +7,7 @@ //------------------------------------------------------------------------- -module internal Microsoft.FSharp.Compiler.Opt +module internal Microsoft.FSharp.Compiler.Optimizer open Internal.Utilities open Microsoft.FSharp.Compiler.AbstractIL @@ -19,7 +19,7 @@ open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics -open Microsoft.FSharp.Compiler.Pickle +open Microsoft.FSharp.Compiler.TastPickle open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger @@ -28,10 +28,10 @@ open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint open Microsoft.FSharp.Compiler.TypeChecker -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Layout -open Microsoft.FSharp.Compiler.Typrelns +open Microsoft.FSharp.Compiler.TypeRelations open Microsoft.FSharp.Compiler.Infos open System.Collections.Generic @@ -145,7 +145,10 @@ type ModuleInfo = ModuleOrNamespaceInfos: NameMap } and LazyModuleInfo = Lazy +type ImplFileOptimizationInfo = LazyModuleInfo +type CcuOptimizationInfo = LazyModuleInfo +#if DEBUG let braceL x = leftL "{" ^^ x ^^ rightL "}" let seqL xL xs = Seq.fold (fun z x -> z @@ xL x) emptyL xs let namemapL xL xmap = NameMap.foldBack (fun nm x z -> xL nm x @@ z) xmap emptyL @@ -169,6 +172,7 @@ and moduleInfoL g (x:LazyModuleInfo) = and valInfoL g (x:ValInfo) = braceL ((wordL "ValExprInfo: " @@ exprValueInfoL g x.ValExprInfo) @@ (wordL "ValMakesNoCriticalTailcalls:" @@ wordL (if x.ValMakesNoCriticalTailcalls then "true" else "false"))) +#endif type Summary<'Info> = { Info: 'Info; @@ -289,7 +293,7 @@ type OptimizationSettings = /// eliminate unused bindings with no effect member x.EliminateUnusedBindings () = x.localOpt () /// eliminate try around expr with no effect - member x.EliminateTryCatchAndTryFinally () = x.localOpt () + member x.EliminateTryCatchAndTryFinally () = false // deemed too risky, given tiny overhead of including try/catch. See https://github.com/Microsoft/visualfsharp/pull/376 /// eliminate first part of seq if no effect member x.EliminateSequential () = x.localOpt () /// determine branches in pattern matching @@ -306,7 +310,7 @@ type OptimizationSettings = #else type cenv = - { g: Env.TcGlobals; + { g: TcGlobals; TcVal : ConstraintSolver.TcValF amap: Import.ImportMap; optimizing: bool; @@ -374,10 +378,10 @@ let check (vref: ValRef) (res:ValInfo) = let EmptyModuleInfo = notlazy { ValInfos = ValInfos([]); ModuleOrNamespaceInfos = Map.empty } -let rec UnionModuleInfos (minfos : seq) = +let rec UnionOptimizationInfos (minfos : seq) = notlazy { ValInfos = ValInfos(seq { for minfo in minfos do yield! minfo.Force().ValInfos.Entries }) - ModuleOrNamespaceInfos = minfos |> Seq.map (fun m -> m.Force().ModuleOrNamespaceInfos) |> NameMap.union UnionModuleInfos } + ModuleOrNamespaceInfos = minfos |> Seq.map (fun m -> m.Force().ModuleOrNamespaceInfos) |> NameMap.union UnionOptimizationInfos } let FindOrCreateModuleInfo n (ss: Map<_,_>) = match ss.TryFind n with @@ -490,9 +494,13 @@ let BindTypeVarsToUnknown (tps:Typar list) env = tp.Data.typar_id <- ident (nm,tp.Range)); List.fold (fun sofar arg -> BindTypeVar arg UnknownTypeValue sofar) env tps -let BindCcu (ccu:Tast.CcuThunk) mval env cenv = +let BindCcu (ccu:Tast.CcuThunk) mval env (g:TcGlobals) = +#if DEBUG if verboseOptimizationInfo then - dprintf "*** Reloading optimization data for assembly %s, info = \n%s\n" ccu.AssemblyName (showL (Layout.squashTo 192 (moduleInfoL cenv mval))); + dprintf "*** Reloading optimization data for assembly %s, info = \n%s\n" ccu.AssemblyName (showL (Layout.squashTo 192 (moduleInfoL g mval))); +#else + ignore g +#endif { env with globalModuleInfos=env.globalModuleInfos.Add(ccu.AssemblyName,mval) } @@ -626,12 +634,16 @@ let (|StripInt32Value|_|) = function StripConstValue(Const.Int32 n) -> Some n | //------------------------------------------------------------------------- let MakeValueInfoForValue g m vref vinfo = +#if DEBUG let rec check x = match x with | ValValue (vref2,detail) -> if valRefEq g vref vref2 then error(Error(FSComp.SR.optRecursiveValValue(showL(exprValueInfoL g vinfo)),m)) else check detail | SizeValue (_n,detail) -> check detail | _ -> () check vinfo; +#else + ignore g; ignore m; +#endif ValValue (vref,vinfo) |> BoundValueInfoBySize let MakeValueInfoForRecord tcref argvals = RecdValue (tcref,argvals) |> BoundValueInfoBySize @@ -1032,12 +1044,12 @@ let AbstractLazyModulInfoByHiding isAssemblyBoundary mhi = | TupleValue vinfos -> TupleValue (Array.map abstractExprInfo vinfos) | RecdValue (tcref,vinfos) -> - if hiddenTyconRepr tcref.Deref || Array.exists (mkNestedRecdFieldRef tcref >> hiddenRecdField) tcref.AllFieldsArray + if hiddenTyconRepr tcref.Deref || Array.exists (tcref.MakeNestedRecdFieldRef >> hiddenRecdField) tcref.AllFieldsArray then UnknownValue else RecdValue (tcref,Array.map abstractExprInfo vinfos) | UnionCaseValue(ucref,vinfos) -> let tcref = ucref.TyconRef - if hiddenTyconRepr ucref.Tycon || tcref.UnionCasesArray |> Array.exists (mkNestedUnionCaseRef tcref >> hiddenUnionCase) + if hiddenTyconRepr ucref.Tycon || tcref.UnionCasesArray |> Array.exists (tcref.MakeNestedUnionCaseRef >> hiddenUnionCase) then UnknownValue else UnionCaseValue (ucref,Array.map abstractExprInfo vinfos) | SizeValue(_vdepth,vinfo) -> MakeSizedValueInfo (abstractExprInfo vinfo) @@ -1061,7 +1073,7 @@ let AbstractLazyModulInfoByHiding isAssemblyBoundary mhi = abstractLazyModulInfo /// Hide all information except what we need for "must inline". We always save this optimization information -let AbstractLazyModulInfoToEssentials = +let AbstractOptimizationInfoToEssentials = let rec abstractModulInfo (ss:ModuleInfo) = { ModuleOrNamespaceInfos = NameMap.map (Lazy.force >> abstractModulInfo >> notlazy) ss.ModuleOrNamespaceInfos; @@ -1155,7 +1167,7 @@ let AbstractExprInfoByVars (boundVars:Val list,boundTyVars) ivalue = // Remap optimization information, e.g. to use public stable references so we can pickle it // to disk. //------------------------------------------------------------------------- -let RemapLazyModulInfo g tmenv = +let RemapOptimizationInfo g tmenv = let rec remapExprInfo ivalue = if verboseOptimizationInfo then dprintf "remapExprInfo\n"; @@ -1173,7 +1185,7 @@ let RemapLazyModulInfo g tmenv = let remapValInfo v = { ValExprInfo=remapExprInfo v.ValExprInfo; ValMakesNoCriticalTailcalls=v.ValMakesNoCriticalTailcalls } let rec remapModulInfo ss = if verboseOptimizationInfo then dprintf "remapModulInfo\n"; - { ModuleOrNamespaceInfos = ss.ModuleOrNamespaceInfos |> NameMap.map RemapLazyModulInfo; + { ModuleOrNamespaceInfos = ss.ModuleOrNamespaceInfos |> NameMap.map remapLazyModulInfo; ValInfos = ss.ValInfos.Map (fun (vref,vinfo) -> let vref' = remapValRef tmenv vref let vinfo = remapValInfo vinfo @@ -1181,10 +1193,10 @@ let RemapLazyModulInfo g tmenv = if vinfo.ValMakesNoCriticalTailcalls then vref'.Deref.SetMakesNoCriticalTailcalls() (vref',vinfo)) } - and RemapLazyModulInfo ss = + and remapLazyModulInfo ss = ss |> Lazy.force |> remapModulInfo |> notlazy - RemapLazyModulInfo + remapLazyModulInfo //------------------------------------------------------------------------- // Hide information when a value is no longer visible @@ -1192,11 +1204,19 @@ let RemapLazyModulInfo g tmenv = let AbstractAndRemapModulInfo msg g m (repackage,hidden) info = let mrpi = mkRepackageRemapping repackage +#if DEBUG if verboseOptimizationInfo then dprintf "%s - %a - Optimization data prior to trim: \n%s\n" msg outputRange m (Layout.showL (Layout.squashTo 192 (moduleInfoL g info))); +#else + ignore (msg,m) +#endif let info = info |> AbstractLazyModulInfoByHiding false hidden +#if DEBUG if verboseOptimizationInfo then dprintf "%s - %a - Optimization data after trim:\n%s\n" msg outputRange m (Layout.showL (Layout.squashTo 192 (moduleInfoL g info))); - let info = info |> RemapLazyModulInfo g mrpi +#endif + let info = info |> RemapOptimizationInfo g mrpi +#if DEBUG if verboseOptimizationInfo then dprintf "%s - %a - Optimization data after remap:\n%s\n" msg outputRange m (Layout.showL (Layout.squashTo 192 (moduleInfoL g info))); +#endif info //------------------------------------------------------------------------- @@ -1300,7 +1320,7 @@ and OpHasEffect g op = | TOp.TupleFieldGet(_) -> false | TOp.ExnFieldGet(ecref,n) -> isExnFieldMutable ecref n | TOp.RefAddrGet -> false - | TOp.ValFieldGet rfref -> rfref.RecdField.IsMutable + | TOp.ValFieldGet rfref -> rfref.RecdField.IsMutable || (TryFindTyconRefBoolAttribute g Range.range0 g.attrib_AllowNullLiteralAttribute rfref.TyconRef = Some(true)) | TOp.ValFieldGetAddr _rfref -> true (* check *) | TOp.LValueOp (LGetAddr,lv) -> lv.IsMutable | TOp.UnionCaseFieldSet _ @@ -1416,15 +1436,18 @@ let rec (|KnownValApp|_|) expr = // This transform encourages that by allowing projections to be simplified. //------------------------------------------------------------------------- +let CanExpandStructuralBinding (v: Val) = + not v.IsCompiledAsTopLevel && + not v.IsMember && + not v.IsTypeFunction && + not v.IsMutable + let ExprIsValue = function Expr.Val _ -> true | _ -> false -let ExpandStructuralBinding cenv expr = +let ExpandStructuralBindingRaw cenv expr = match expr with | Expr.Let (TBind(v,rhs,tgtSeqPtOpt),body,m,_) - when (isTupleExpr rhs && - not v.IsCompiledAsTopLevel && - not v.IsMember && - not v.IsTypeFunction && - not v.IsMutable) -> + when (isTupleExpr rhs && + CanExpandStructuralBinding v) -> let args = tryDestTuple rhs if List.forall ExprIsValue args then expr (* avoid re-expanding when recursion hits original binding *) @@ -1440,6 +1463,35 @@ let ExpandStructuralBinding cenv expr = mkLetsBind m binds (mkLet tgtSeqPtOpt m v tuple body) (* REVIEW: other cases - records, explicit lists etc. *) | expr -> expr + +// Moves outer tuple binding inside near the tupled expression: +// let t = (let a0=v0 in let a1=v1 in ... in let an=vn in e0,e1,...,em) in body +// let a0=v0 in let a1=v1 in ... in let an=vn in (let t = e0,e1,...,em in body) +// This way ExpandStructuralBinding can replace expressions in constants, t is directly bound +// to a tuple expression so that other optimizations such as OptimizeTupleFieldGet work, +// and the tuple allocation can be eliminated. +// Most importantly, this successfully eliminates tuple allocations for implicitly returned +// formal arguments in method calls. +let rec RearrangeTupleBindings expr fin = + match expr with + | Expr.Let (bind,body,m,_) -> + match RearrangeTupleBindings body fin with + | Some b -> Some (mkLetBind m bind b) + | None -> None + | Expr.Op (TOp.Tuple,_,_,_) -> Some (fin expr) + | _ -> None + +let ExpandStructuralBinding cenv expr = + match expr with + | Expr.Let (TBind(v,rhs,tgtSeqPtOpt),body,m,_) + when (isTupleTy cenv.g v.Type && + not (isTupleExpr rhs) && + CanExpandStructuralBinding v) -> + match RearrangeTupleBindings rhs (fun top -> mkLet tgtSeqPtOpt m v top body) with + | Some e -> ExpandStructuralBindingRaw cenv e + | None -> expr + | e -> ExpandStructuralBindingRaw cenv e + //------------------------------------------------------------------------- // QueryBuilder.Run elimination helpers //------------------------------------------------------------------------- @@ -1680,7 +1732,7 @@ let rec OptimizeExpr cenv (env:IncrementalOptimizationEnv) expr = | Expr.Const (c,m,ty) -> OptimizeConst cenv env expr (c,m,ty) | Expr.Val (v,_vFlags,m) -> OptimizeVal cenv env expr (v,m) | Expr.Quote(ast,splices,isFromQueryExpression,m,ty) -> - let splices = ref (splices.Value |> Option.map (map2Of3 (List.map (OptimizeExpr cenv env >> fst)))) + let splices = ref (splices.Value |> Option.map (map3Of4 (List.map (OptimizeExpr cenv env >> fst)))) Expr.Quote(ast,splices,isFromQueryExpression,m,ty), { TotalSize = 10; FunctionSize = 1; @@ -1703,7 +1755,7 @@ let rec OptimizeExpr cenv (env:IncrementalOptimizationEnv) expr = let topValInfo = ValReprInfo (ValReprInfo.InferTyparInfo tps,[],ValReprInfo.unnamedRetVal) let ty = tryMkForallTy tps rty OptimizeLambdas None cenv env topValInfo expr ty - | Expr.TyChoose _ -> OptimizeExpr cenv env (Typrelns.ChooseTyparSolutionsForFreeChoiceTypars cenv.g cenv.amap expr) + | Expr.TyChoose _ -> OptimizeExpr cenv env (TypeRelations.ChooseTyparSolutionsForFreeChoiceTypars cenv.g cenv.amap expr) | Expr.Match(spMatch,exprm,dtree,targets,m,ty) -> OptimizeMatch cenv env (spMatch,exprm,dtree,targets,m,ty) | Expr.LetRec (binds,e,m,_) -> OptimizeLetRec cenv env (binds,e,m) | Expr.StaticOptimization (constraints,e2,e3,m) -> @@ -2470,7 +2522,7 @@ and TryDevirtualizeApplication cenv env (f,tyargs,args,m) = // target type isn't 'NullNotLiked', i.e. that the target type is not an F# union, record etc. // Note UnboxFast is just the .NET IL 'unbox.any' instruction. | Expr.Val(v,_,_),[ty],_ when valRefEq cenv.g v cenv.g.unbox_vref && - canUseUnboxFast cenv.g ty -> + canUseUnboxFast cenv.g m ty -> Some(DevirtualizeApplication cenv env cenv.g.unbox_fast_vref ty tyargs args m) @@ -3004,7 +3056,9 @@ and OptimizeBinding cenv isRec env (TBind(v,e,spBind)) = else einfo if v.MustInline && IsPartialExprVal einfo.Info then errorR(InternalError("the mustinline value '"^v.LogicalName^"' was not inferred to have a known value",v.Range)); +#if DEBUG if verboseOptimizations then dprintf "val %s gets opt info %s\n" (showL(valL v)) (showL(exprValueInfoL cenv.g einfo.Info)); +#endif let env = BindInternalLocalVal cenv v (mkValInfo einfo v) env (TBind(v,repr',spBind), einfo), env @@ -3137,7 +3191,7 @@ and OptimizeModuleDefs cenv (env,bindInfosColl) defs = if verboseOptimizations then dprintf "OptimizeModuleDefs\n"; let defs,(env,bindInfosColl) = List.mapFold (OptimizeModuleDef cenv) (env,bindInfosColl) defs let defs,minfos = List.unzip defs - (defs,UnionModuleInfos minfos),(env,bindInfosColl) + (defs,UnionOptimizationInfos minfos),(env,bindInfosColl) and OptimizeImplFileInternal cenv env isIncrementalFragment (TImplFile(qname, pragmas, (ModuleOrNamespaceExprWithSig(mty,_,_) as mexpr), hasExplicitEntryPoint,isScript)) = let env,mexpr',minfo = @@ -3207,6 +3261,7 @@ and p_ModuleInfo x st = and p_LazyModuleInfo x st = p_lazy p_ModuleInfo x st +let p_CcuOptimizationInfo x st = p_LazyModuleInfo x st #endif // !NO_COMPILER_BACKEND @@ -3235,3 +3290,4 @@ and u_ModuleInfo st = and u_LazyModuleInfo st = u_lazy u_ModuleInfo st +let u_CcuOptimizationInfo st = u_LazyModuleInfo st diff --git a/src/fsharp/opt.fsi b/src/fsharp/Optimizer.fsi similarity index 54% rename from src/fsharp/opt.fsi rename to src/fsharp/Optimizer.fsi index ab33a344e59..94f378d9308 100644 --- a/src/fsharp/opt.fsi +++ b/src/fsharp/Optimizer.fsi @@ -1,11 +1,11 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Opt +module internal Microsoft.FSharp.Compiler.Optimizer open Internal.Utilities open Microsoft.FSharp.Compiler -open Microsoft.FSharp.Compiler.Env open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.Internal @@ -30,6 +30,8 @@ type OptimizationSettings = /// Optimization information type ModuleInfo type LazyModuleInfo = Lazy +type ImplFileOptimizationInfo = LazyModuleInfo +type CcuOptimizationInfo = LazyModuleInfo #if NO_COMPILER_BACKEND #else @@ -38,22 +40,30 @@ type IncrementalOptimizationEnv = static member Empty : IncrementalOptimizationEnv /// For building optimization environments incrementally -val internal BindCcu : CcuThunk -> LazyModuleInfo -> IncrementalOptimizationEnv -> TcGlobals -> IncrementalOptimizationEnv +val internal BindCcu : CcuThunk -> CcuOptimizationInfo -> IncrementalOptimizationEnv -> TcGlobals -> IncrementalOptimizationEnv -/// The entry point. Boolean indicates 'incremental extension' in FSI -val internal OptimizeImplFile : OptimizationSettings * CcuThunk (* scope *) * Env.TcGlobals * ConstraintSolver.TcValF * Import.ImportMap * IncrementalOptimizationEnv * isIncrementalFragment: bool * emitTaicalls: bool * TypedImplFile -> IncrementalOptimizationEnv * TypedImplFile * LazyModuleInfo +/// Optimize one implementation file in the given environment +val internal OptimizeImplFile : OptimizationSettings * CcuThunk * TcGlobals * ConstraintSolver.TcValF * Import.ImportMap * IncrementalOptimizationEnv * isIncrementalFragment: bool * emitTaicalls: bool * TypedImplFile -> IncrementalOptimizationEnv * TypedImplFile * ImplFileOptimizationInfo +#if DEBUG /// Displaying optimization data val internal moduleInfoL : TcGlobals -> LazyModuleInfo -> Layout.layout +#endif /// Saving and re-reading optimization information -val p_LazyModuleInfo : LazyModuleInfo -> Pickle.WriterState -> unit +val p_CcuOptimizationInfo : CcuOptimizationInfo -> TastPickle.WriterState -> unit /// Rewrite the modul info using the export remapping -val RemapLazyModulInfo : Env.TcGlobals -> Tastops.Remap -> (LazyModuleInfo -> LazyModuleInfo) -val AbstractLazyModulInfoToEssentials : (LazyModuleInfo -> LazyModuleInfo) -val UnionModuleInfos: seq -> LazyModuleInfo -val ExprHasEffect: Env.TcGlobals -> Expr -> bool +val RemapOptimizationInfo : TcGlobals -> Tastops.Remap -> (CcuOptimizationInfo -> CcuOptimizationInfo) + +/// Ensure that 'internal' items are not exported in the optimization info +val AbstractOptimizationInfoToEssentials : (CcuOptimizationInfo -> CcuOptimizationInfo) + +/// Combine optimization infos +val UnionOptimizationInfos: seq -> CcuOptimizationInfo + +/// Check if an expression has an effect +val ExprHasEffect: TcGlobals -> Expr -> bool #endif -val internal u_LazyModuleInfo : Pickle.ReaderState -> LazyModuleInfo +val internal u_CcuOptimizationInfo : TastPickle.ReaderState -> CcuOptimizationInfo diff --git a/src/fsharp/patcompile.fs b/src/fsharp/PatternMatchCompilation.fs similarity index 99% rename from src/fsharp/patcompile.fs rename to src/fsharp/PatternMatchCompilation.fs index 3b18175425f..d44033ad8d3 100644 --- a/src/fsharp/patcompile.fs +++ b/src/fsharp/PatternMatchCompilation.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Patcompile +module internal Microsoft.FSharp.Compiler.PatternMatchCompilation open System.Collections.Generic open Internal.Utilities @@ -17,8 +17,8 @@ open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.Tastops.DebugPrint open Microsoft.FSharp.Compiler.PrettyNaming -open Microsoft.FSharp.Compiler.Typrelns -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TypeRelations +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Lib exception MatchIncomplete of bool * (string * bool) option * range @@ -112,11 +112,11 @@ let BindSubExprOfInput g amap gtps (PBind(v,tyscheme)) m (SubExpr(accessf,(ve2,v mkTyparTy gtp else someSolved := true - Typrelns.ChooseTyparSolution g amap gtp + TypeRelations.ChooseTyparSolution g amap gtp let solutions = List.map freezeVar gtps if !someSolved then - Typrelns.IterativelySubstituteTyparSolutions g gtps solutions + TypeRelations.IterativelySubstituteTyparSolutions g gtps solutions else solutions diff --git a/src/fsharp/patcompile.fsi b/src/fsharp/PatternMatchCompilation.fsi similarity index 94% rename from src/fsharp/patcompile.fsi rename to src/fsharp/PatternMatchCompilation.fsi index cb82196756b..169b7201113 100644 --- a/src/fsharp/patcompile.fsi +++ b/src/fsharp/PatternMatchCompilation.fsi @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Patcompile +module internal Microsoft.FSharp.Compiler.PatternMatchCompilation open Internal.Utilities open Microsoft.FSharp.Compiler @@ -8,6 +8,7 @@ open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Range @@ -47,8 +48,8 @@ and TypedMatchClause = /// Compile a pattern into a decision tree and a set of targets. val internal CompilePattern : - Env.TcGlobals -> - Tastops.DisplayEnv -> + TcGlobals -> + DisplayEnv -> Import.ImportMap -> // range of the expression we are matching on range -> diff --git a/src/fsharp/check.fs b/src/fsharp/PostInferenceChecks.fs similarity index 94% rename from src/fsharp/check.fs rename to src/fsharp/PostInferenceChecks.fs index 4caaa250311..47ec79b1b53 100644 --- a/src/fsharp/check.fs +++ b/src/fsharp/PostInferenceChecks.fs @@ -1,26 +1,28 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.PostTypecheckSemanticChecks +/// Implements a set of checks on the TAST for a file that can only be performed after type inference +/// is complete. +module internal Microsoft.FSharp.Compiler.PostTypeCheckSemanticChecks open System.Collections.Generic open Internal.Utilities + +open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library -open Microsoft.FSharp.Compiler - open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Layout open Microsoft.FSharp.Compiler.AbstractIL.IL -open Microsoft.FSharp.Compiler.Typrelns +open Microsoft.FSharp.Compiler.TypeRelations open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.PrettyNaming @@ -31,11 +33,11 @@ open Microsoft.FSharp.Compiler.PrettyNaming //-------------------------------------------------------------------------- let testFlagMemberBody = ref false -let testHookMemberBody membInfo (expr:Expr) = +let testHookMemberBody (membInfo: ValMemberInfo) (expr:Expr) = if !testFlagMemberBody then let m = expr.Range printf "TestMemberBody,%A,%s,%d,%d,%d,%d\n" - (membInfo.MemberFlags.MemberKind) + membInfo.MemberFlags.MemberKind m.FileName m.StartLine m.StartColumn @@ -187,7 +189,7 @@ let BindVals cenv vs = List.iter (BindVal cenv) vs let rec CheckTypeDeep ((visitTyp,visitTyconRef,visitByrefsOfByrefs,visitTraitSolution) as f) typ = // We iterate the _solved_ constraints as well, to pick up any record of trait constraint solutions // This means we walk _all_ the constraints _everywhere_ in a type, including - // those attached to _solved_ type variables. This is used by PostTypecheckSemanticChecks to detect uses of + // those attached to _solved_ type variables. This is used by PostTypeCheckSemanticChecks to detect uses of // values as solutions to trait constraints and determine if inference has caused the value to escape its scope. // The only record of these solutions is in the _solved_ constraints of types. // In an ideal world we would, instead, record the solutions to these constraints as "witness variables" in expressions, @@ -261,19 +263,16 @@ let CheckEscapes cenv allowProtected m syntacticArgs body = (* m is a range suit let cantBeFree v = // First, if v is a syntactic argument, then it can be free since it was passed in. // The following can not be free: - // a) "Local" mutables, being mutables such that: - // i) the mutable has no arity (since arity implies top-level storage, top level mutables...) - // Note: "this" arguments to instance members on mutable structs are mutable arguments. - // b) BaseVal can never escape. - // c) Byref typed values can never escape. + // a) BaseVal can never escape. + // b) Byref typed values can never escape. + // Note that: Local mutables can be free, as they will be boxed later. // These checks must correspond to the tests governing the error messages below. let passedIn = ListSet.contains valEq v syntacticArgs if passedIn then false else - (v.IsMutable && v.ValReprInfo.IsNone) || - (v.BaseOrThisInfo = BaseVal && not passedIn) || + (v.BaseOrThisInfo = BaseVal) || (isByrefLikeTy cenv.g v.Type) let frees = freeInExpr CollectLocals body @@ -288,8 +287,6 @@ let CheckEscapes cenv allowProtected m syntacticArgs body = (* m is a range suit // As such, partial applications involving byref arguments could lead to closures containing byrefs. // For safety, such functions are assumed to have no known arity, and so can not accept byrefs. errorR(Error(FSComp.SR.chkByrefUsedInInvalidWay(v.DisplayName), m)) - elif v.IsMutable then - errorR(Error(FSComp.SR.chkMutableUsedInInvalidWay(v.DisplayName), m)) elif v.BaseOrThisInfo = BaseVal then errorR(Error(FSComp.SR.chkBaseUsedInInvalidWay(), m)) else @@ -478,11 +475,11 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = if cenv.reportErrors then cenv.usesQuotations <- true try - let conv = QuotationTranslator.ConvExprPublic - (cenv.g, cenv.amap, cenv.viewCcu, QuotationTranslator.IsReflectedDefinition.No) - QuotationTranslator.QuotationTranslationEnv.Empty ast - match !savedConv with - | None -> savedConv:= Some conv + let qscope = QuotationTranslator.QuotationGenerationScope.Create (cenv.g,cenv.amap,cenv.viewCcu, QuotationTranslator.IsReflectedDefinition.No) + let qdata = QuotationTranslator.ConvExprPublic qscope QuotationTranslator.QuotationTranslationEnv.Empty ast + let typeDefs,spliceTypes,spliceExprs = qscope.Close() + match savedConv.Value with + | None -> savedConv:= Some (typeDefs, List.map fst spliceTypes, List.map fst spliceExprs, qdata) | Some _ -> () with QuotationTranslator.InvalidQuotedTerm e -> errorRecovery e m @@ -495,9 +492,10 @@ and CheckExprInContext (cenv:cenv) (env:env) expr (context:ByrefCallContext) = CheckInterfaceImpls cenv env basev iimpls; CheckTypePermitByrefs cenv m typ let interfaces = - [ yield! AllSuperTypesOfType cenv.g cenv.amap m AllowMultiIntfInstantiations.Yes typ + [ if isInterfaceTy cenv.g typ then + yield! AllSuperTypesOfType cenv.g cenv.amap m AllowMultiIntfInstantiations.Yes typ for (ty,_) in iimpls do - yield! AllSuperTypesOfType cenv.g cenv.amap m AllowMultiIntfInstantiations.Yes ty ] + yield! AllSuperTypesOfType cenv.g cenv.amap m AllowMultiIntfInstantiations.Yes ty ] |> List.filter (isInterfaceTy cenv.g) CheckMultipleInterfaceInstantiations cenv interfaces m @@ -737,7 +735,7 @@ and CheckExprOp cenv env (op,tyargs,args,m) context = CheckTypeInstNoByrefs cenv m tyargs; CheckExprs cenv env args -and CheckLambdas memInfo cenv env inlined topValInfo alwaysCheckNoReraise e m ety = +and CheckLambdas (memInfo: ValMemberInfo option) cenv env inlined topValInfo alwaysCheckNoReraise e m ety = // The topValInfo here says we are _guaranteeing_ to compile a function value // as a .NET method with precisely the corresponding argument counts. match e with @@ -905,14 +903,7 @@ and CheckAttribs cenv env (attribs: Attribs) = |> Seq.map fst |> Seq.toList // Filter for allowMultiple = false - |> List.filter (fun (tcref,m) -> - let allowMultiple = - Infos.AttributeChecking.TryBindTyconRefAttribute cenv.g m cenv.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 _ -> None) - - (allowMultiple <> Some(true))) + |> List.filter (fun (tcref,m) -> TryFindAttributeUsageAttribute cenv.g m tcref <> Some(true)) if cenv.reportErrors then for (tcref,m) in duplicates do errorR(Error(FSComp.SR.chkAttrHasAllowMultiFalse(tcref.DisplayName), m)) @@ -1007,12 +998,12 @@ and CheckBinding cenv env alwaysCheckNoReraise (TBind(v,e,_) as bind) = | Expr.TyLambda (_,tps,b,_,_) -> tps,b,applyForallTy cenv.g ety (List.map mkTyparTy tps) | _ -> [],e,ety let env = QuotationTranslator.QuotationTranslationEnv.Empty.BindTypars tps - let _,argExprs,_ = QuotationTranslator.ConvExprPublic - (cenv.g,cenv.amap,cenv.viewCcu, QuotationTranslator.IsReflectedDefinition.Yes) - env taue - if nonNil(argExprs) then - errorR(Error(FSComp.SR.chkReflectedDefCantSplice(), v.Range)); - QuotationTranslator.ConvMethodBase (cenv.g,cenv.amap,cenv.viewCcu) env (v.CompiledName, v) |> ignore + let qscope = QuotationTranslator.QuotationGenerationScope.Create (cenv.g,cenv.amap,cenv.viewCcu, QuotationTranslator.IsReflectedDefinition.Yes) + QuotationTranslator.ConvExprPublic qscope env taue |> ignore + let _,_,argExprs = qscope.Close() + if nonNil argExprs then + errorR(Error(FSComp.SR.chkReflectedDefCantSplice(), v.Range)) + QuotationTranslator.ConvMethodBase qscope env (v.CompiledName, v) |> ignore with | QuotationTranslator.InvalidQuotedTerm e -> errorR(e) @@ -1136,6 +1127,18 @@ let CheckTopBinding cenv env (TBind(v,e,_) as bind) = check false v.DisplayName check false v.CompiledName + // Check if an F# extension member clashes + if v.IsExtensionMember then + tcref.ModuleOrNamespaceType.AllValsAndMembersByLogicalNameUncached.[v.LogicalName] |> List.iter (fun v2 -> + if v2.IsExtensionMember && not (valEq v v2) && v.CompiledName = v2.CompiledName then + let minfo1 = FSMeth(cenv.g, generalizedTyconRef tcref, mkLocalValRef v, Some 0UL) + let minfo2 = FSMeth(cenv.g, generalizedTyconRef tcref, mkLocalValRef v2, Some 0UL) + if tyconRefEq cenv.g v.MemberApparentParent v2.MemberApparentParent && + MethInfosEquivByNameAndSig EraseAll true cenv.g cenv.amap v.Range minfo1 minfo2 then + errorR(Duplicate(kind,v.DisplayName,v.Range))) + + + // Properties get 'get_X', only if there are no args // Properties get 'get_X' match v.ValReprInfo with @@ -1162,7 +1165,7 @@ let CheckRecdField isUnion cenv env (tycon:Tycon) (rfield:RecdField) = let isHidden = IsHiddenTycon env.sigToImplRemapInfo tycon || IsHiddenTyconRepr env.sigToImplRemapInfo tycon || - (not isUnion && IsHiddenRecdField env.sigToImplRemapInfo (mkNestedRecdFieldRef (mkLocalTyconRef tycon) rfield)) + (not isUnion && IsHiddenRecdField env.sigToImplRemapInfo ((mkLocalTyconRef tycon).MakeNestedRecdFieldRef rfield)) let access = AdjustAccess isHidden (fun () -> tycon.CompilationPath) rfield.Accessibility CheckTypeForAccess cenv (fun () -> rfield.Name) access rfield.Range rfield.FormalType; CheckTypePermitByrefs cenv rfield.Range rfield.FormalType; @@ -1251,8 +1254,8 @@ let CheckEntityDefn cenv env (tycon:Entity) = if minfo.NumArgs.Length > 1 && (minfo.GetParamDatas(cenv.amap, m, minfo.FormalMethodInst) - |> List.existsSquared (fun (ParamData(isParamArrayArg, isOutArg, optArgInfo, _, ty)) -> - isParamArrayArg || isOutArg || optArgInfo.IsOptional || isByrefTy cenv.g ty)) then + |> List.existsSquared (fun (ParamData(isParamArrayArg, isOutArg, optArgInfo, _, reflArgInfo, ty)) -> + isParamArrayArg || isOutArg || reflArgInfo.AutoQuote || optArgInfo.IsOptional || isByrefTy cenv.g ty)) then errorR(Error(FSComp.SR.chkCurriedMethodsCantHaveOutParams(), m)) for pinfo in immediateProps do @@ -1379,6 +1382,11 @@ let CheckEntityDefn cenv env (tycon:Entity) = if cenv.reportErrors then if not tycon.IsTypeAbbrev then + let typ = generalizedTyconRef (mkLocalTyconRef tycon) + let immediateInterfaces = GetImmediateInterfacesOfType SkipUnrefInterfaces.Yes cenv.g cenv.amap m typ + let interfaces = + [ for ty in immediateInterfaces do + yield! AllSuperTypesOfType cenv.g cenv.amap m AllowMultiIntfInstantiations.Yes ty ] CheckMultipleInterfaceInstantiations cenv interfaces m // Check struct fields. We check these late because we have to have first checked that the structs are @@ -1389,7 +1397,7 @@ let CheckEntityDefn cenv env (tycon:Entity) = let zeroInitUnsafe = TryFindFSharpBoolAttribute cenv.g cenv.g.attrib_DefaultValueAttribute f.FieldAttribs if zeroInitUnsafe = Some(true) then let ty' = generalizedTyconRef (mkLocalTyconRef tycon) - if not (TypeHasDefaultValue cenv.g ty') then + if not (TypeHasDefaultValue cenv.g m ty') then errorR(Error(FSComp.SR.chkValueWithDefaultValueMustHaveDefaultValue(), m)); ) match tycon.TypeAbbrev with (* And type abbreviations *) @@ -1477,6 +1485,6 @@ let CheckTopImpl (g,amap,reportErrors,infoReader,internalsVisibleToPaths,viewCcu CheckModuleExpr cenv env mexpr; CheckAttribs cenv env extraAttribs; - if cenv.usesQuotations then - viewCcu.UsesQuotations <- true + if cenv.usesQuotations && QuotationTranslator.QuotationGenerationScope.ComputeQuotationFormat(cenv.g) = QuotationTranslator.QuotationSerializationFormat.FSharp_20_Plus then + viewCcu.UsesFSharp20PlusQuotations <- true cenv.entryPointGiven diff --git a/src/fsharp/PostInferenceChecks.fsi b/src/fsharp/PostInferenceChecks.fsi new file mode 100644 index 00000000000..b2665479fc0 --- /dev/null +++ b/src/fsharp/PostInferenceChecks.fsi @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +/// Implements a set of checks on the TAST for a file that can only be performed after type inference +/// is complete. +module internal Microsoft.FSharp.Compiler.PostTypeCheckSemanticChecks + +open Microsoft.FSharp.Compiler +open Microsoft.FSharp.Compiler.TcGlobals + +val testFlagMemberBody : bool ref +val CheckTopImpl : TcGlobals * Import.ImportMap * bool * Infos.InfoReader * Tast.CompilationPath list * Tast.CcuThunk * Tastops.DisplayEnv * Tast.ModuleOrNamespaceExprWithSig * Tast.Attribs * bool -> bool diff --git a/src/fsharp/PrettyNaming.fs b/src/fsharp/PrettyNaming.fs index 9b74deacf49..84e3848095c 100644 --- a/src/fsharp/PrettyNaming.fs +++ b/src/fsharp/PrettyNaming.fs @@ -445,16 +445,15 @@ module internal Microsoft.FSharp.Compiler.PrettyNaming let demangleProvidedTypeName (typeLogicalName:string) = if typeLogicalName.Contains "," then - let pieces = splitAroundQuotation typeLogicalName ',' - if pieces.[1..] |> Array.forall (fun x -> tryDemangleStaticStringArg x |> Option.isSome) then - let argNamesAndValues = - pieces.[1..] |> Array.map (fun piece -> - match tryDemangleStaticStringArg piece with - | None -> raise (InvalidMangledStaticArg piece) - | Some v -> v) - pieces.[0], argNamesAndValues - else - typeLogicalName, [| |] + let pieces = splitAroundQuotation typeLogicalName ',' + match pieces with + | [| x; "" |] -> x, [| |] + | _ -> + let argNamesAndValues = pieces.[1..] |> Array.choose tryDemangleStaticStringArg + if argNamesAndValues.Length = (pieces.Length - 1) then + pieces.[0], argNamesAndValues + else + typeLogicalName, [| |] else typeLogicalName, [| |] @@ -463,8 +462,20 @@ module internal Microsoft.FSharp.Compiler.PrettyNaming nonDefaultArgs |> Array.map mangleStaticStringArg |> String.concat "," - typeLogicalName+","+nonDefaultArgsText - //let testDemangleStaticStringArg() = - // for x in [ ""; "\""; "\"\""; "a"; "\\"; "\\\\"; "\\\""; "_"; "\"\"" ] do - // if demangleStaticStringArg (mangleStaticStringArg x) <> x then printfn "failed for <<%s>>" x + if nonDefaultArgsText = "" then + typeLogicalName + else + typeLogicalName + "," + nonDefaultArgsText + + + let computeMangledNameWithoutDefaultArgValues(nm,staticArgs,defaultArgValues) = + let nonDefaultArgs = + (staticArgs,defaultArgValues) + ||> Array.zip + |> Array.choose (fun (staticArg, (defaultArgName, defaultArgValue)) -> + let actualArgValue = string staticArg + match defaultArgValue with + | Some v when v = actualArgValue -> None + | _ -> Some (defaultArgName, actualArgValue)) + mangleProvidedTypeName (nm, nonDefaultArgs) \ No newline at end of file diff --git a/src/fsharp/sreflect.fs b/src/fsharp/QuotationPickler.fs similarity index 96% rename from src/fsharp/sreflect.fs rename to src/fsharp/QuotationPickler.fs index 4bd19d109e7..dde90bfb8c6 100644 --- a/src/fsharp/sreflect.fs +++ b/src/fsharp/QuotationPickler.fs @@ -20,7 +20,10 @@ open Microsoft.FSharp.Compiler.Lib let mkRLinear mk (vs,body) = List.foldBack (fun v acc -> mk (v,acc)) vs body type TypeVarData = { tvName: string; } -type NamedTypeData = { tcName: string; tcAssembly: string } + +type NamedTypeData = + | Idx of int + | Named of (* tcName: *) string * (* tcAssembly: *) string type TypeCombOp = | ArrayTyOp of int (* rank *) @@ -116,12 +119,14 @@ type ExprData = | LambdaExpr of VarData * ExprData | 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 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 mkModuleValueApp (tcref,nm,isProp,tyargs,args: ExprData list list) = CombExpr(ModuleValueOp(tcref,nm,isProp),tyargs,List.concat args) @@ -187,7 +192,7 @@ let isAttributedExpression e = match e with AttrExpr(_, _) -> true | _ -> false // compatible with those read by Microsoft.FSharp.Quotations //--------------------------------------------------------------------------- -let pickledDefinitionsResourceNameBase = "ReflectedDefinitions" +let SerializedReflectedDefinitionsResourceNameBase = "ReflectedDefinitions" let freshVar (n, ty, mut) = { vText=n; vType=ty; vMutable=mut } @@ -309,7 +314,10 @@ open SimplePickle let p_assref x st = p_string x st -let p_NamedType x st = p_tup2 p_string p_assref (x.tcName, x.tcAssembly) st +let p_NamedType x st = + match x with + | Idx n -> p_tup2 p_string p_assref (string n, "") st + | Named (nm,ass) -> p_tup2 p_string p_assref (nm, ass) st let p_tycon x st = match x with @@ -399,6 +407,7 @@ let rec p_expr x st = | QuoteExpr(tm) -> p_byte 4 st; p_expr tm 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 = { Module: NamedTypeData; diff --git a/src/fsharp/sreflect.fsi b/src/fsharp/QuotationPickler.fsi similarity index 90% rename from src/fsharp/sreflect.fsi rename to src/fsharp/QuotationPickler.fsi index f5a360cbcfd..f815d916ee5 100644 --- a/src/fsharp/sreflect.fsi +++ b/src/fsharp/QuotationPickler.fsi @@ -13,7 +13,13 @@ open Microsoft.FSharp.Compiler.Lib type TypeData type TypeVarData = { tvName: string } -type NamedTypeData = { tcName: string; tcAssembly: 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 + val mkVarTy : int -> TypeData val mkFunTy : (TypeData * TypeData) -> TypeData @@ -55,6 +61,7 @@ val mkHole : TypeData * int -> ExprData val mkApp : ExprData * ExprData -> ExprData val mkLambda : VarData * ExprData -> ExprData val mkQuote : ExprData -> ExprData +val mkQuoteRaw40 : ExprData -> ExprData // only available for FSharp.Core 4.4.0.0+ val mkCond : ExprData * ExprData * ExprData -> ExprData val mkModuleValueApp : NamedTypeData * string * bool * TypeData list * ExprData list list -> ExprData val mkLetRec : (VarData * ExprData) list * ExprData -> ExprData @@ -106,6 +113,6 @@ val pickle : (ExprData -> byte[]) val isAttributedExpression : ExprData -> bool val PickleDefns : ((MethodBaseData * ExprData) list -> byte[]) -val pickledDefinitionsResourceNameBase : string +val SerializedReflectedDefinitionsResourceNameBase : string val freshVar : string * TypeData * bool -> VarData diff --git a/src/fsharp/creflect.fs b/src/fsharp/QuotationTranslator.fs similarity index 89% rename from src/fsharp/creflect.fs rename to src/fsharp/QuotationTranslator.fs index ae60038107b..565eb2b65f0 100644 --- a/src/fsharp/creflect.fs +++ b/src/fsharp/QuotationTranslator.fs @@ -15,44 +15,66 @@ open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.PrettyNaming open Microsoft.FSharp.Compiler.ErrorLogger -open Microsoft.FSharp.Compiler.Env -open Microsoft.FSharp.Compiler.Typrelns +open Microsoft.FSharp.Compiler.TcGlobals +open Microsoft.FSharp.Compiler.TypeRelations open Microsoft.FSharp.Compiler.Range +open System.Collections.Generic module QP = Microsoft.FSharp.Compiler.QuotationPickler let verboseCReflect = condition "VERBOSE_CREFLECT" -let mscorlibName = "" -let mkVoidTy = QP.mkILNamedTy({ tcName = "System.Void"; tcAssembly=mscorlibName},[]) [] type IsReflectedDefinition = | Yes | No -type cenv = - { g: Env.TcGlobals; +[] +type QuotationSerializationFormat = +/// Indicates that type references are emitted as integer indexes into a supplied table +| FSharp_40_Plus +| FSharp_20_Plus + +type QuotationGenerationScope = + { g: TcGlobals; amap: Import.ImportMap; scope: CcuThunk; + // Accumulate the references to type definitions + referencedTypeDefs: ResizeArray + referencedTypeDefsTable: Dictionary // Accumulate the type splices (i.e. captured type parameters) into here - typeSplices: ResizeArray ; + typeSplices: ResizeArray // Accumulate the expression splices into here - exprSplices: ResizeArray + exprSplices: ResizeArray isReflectedDefinition : IsReflectedDefinition + quotationFormat : QuotationSerializationFormat mutable emitDebugInfoInQuotations : bool } - - -let mk_cenv (g,amap,scope,isReflectedDefinition) = - { g = g - scope=scope - amap=amap - typeSplices = new ResizeArray<_>() - exprSplices = new ResizeArray<_>() - isReflectedDefinition = isReflectedDefinition - emitDebugInfoInQuotations = g.emitDebugInfoInQuotations } + static member Create (g, amap, scope, isReflectedDefinition) = + { g = g + scope=scope + amap=amap + referencedTypeDefs = new ResizeArray<_>() + referencedTypeDefsTable = new Dictionary<_,_>() + typeSplices = new ResizeArray<_>() + exprSplices = new ResizeArray<_>() + isReflectedDefinition = isReflectedDefinition + quotationFormat = QuotationGenerationScope.ComputeQuotationFormat g + emitDebugInfoInQuotations = g.emitDebugInfoInQuotations } + + member cenv.Close() = + cenv.referencedTypeDefs |> ResizeArray.toList, + cenv.typeSplices |> ResizeArray.toList |> List.map (fun (ty,m) -> mkTyparTy ty, m), + cenv.exprSplices |> ResizeArray.toList + + static member ComputeQuotationFormat g = + let deserializeExValRef = ValRefForIntrinsic g.deserialize_quoted_FSharp_40_plus_info + if deserializeExValRef.TryDeref.IsSome then + QuotationSerializationFormat.FSharp_40_Plus + else + QuotationSerializationFormat.FSharp_20_Plus type QuotationTranslationEnv = { //Map from Val to binding index @@ -203,7 +225,7 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. match (freeInExpr CollectTyparsAndLocalsNoCaching x0).FreeLocals |> Seq.tryPick (fun v -> if env.vs.ContainsVal v then Some(v) else None) with | Some v -> errorR(Error(FSComp.SR.crefBoundVarUsedInSplice(v.DisplayName), v.Range)) | None -> () - cenv.exprSplices.Add(x0); + cenv.exprSplices.Add((x0, m)); let hole = QP.mkHole(ConvType cenv env m ty,idx) (hole, rest) ||> List.fold (fun fR arg -> QP.mkApp (fR,ConvExpr cenv env arg)) @@ -356,8 +378,15 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. let bR = ConvExpr cenv (BindVal env v) b QP.mkLambda(vR, bR) - | Expr.Quote(ast,_,_,_,_) -> - QP.mkQuote(ConvExpr cenv env ast) + | Expr.Quote(ast,_,_,_,ety) -> + // F# 2.0-3.1 had a bug with nested 'raw' quotations. F# 4.0 + FSharp.Core 4.4.0.0+ allows us to do the right thing. + if cenv.quotationFormat = QuotationSerializationFormat.FSharp_40_Plus && + // Look for a 'raw' quotation + tyconRefEq cenv.g (tcrefOfAppTy cenv.g ety) cenv.g.raw_expr_tcr + then + QP.mkQuoteRaw40(ConvExpr cenv env ast) + else + QP.mkQuote(ConvExpr cenv env ast) | Expr.TyLambda (_,_,_,m,_) -> wfail(Error(FSComp.SR.crefQuotationsCantContainGenericFunctions(), m)) @@ -376,7 +405,7 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. QP.mkDelegate(tyargR, fR) | Expr.StaticOptimization (_,_,x,_) -> ConvExpr cenv env x - | Expr.TyChoose _ -> ConvExpr cenv env (Typrelns.ChooseTyparSolutionsForFreeChoiceTypars cenv.g cenv.amap expr) + | Expr.TyChoose _ -> ConvExpr cenv env (TypeRelations.ChooseTyparSolutionsForFreeChoiceTypars cenv.g cenv.amap expr) | Expr.Sequential (x0,x1,ThenDoSeq,_,_) -> QP.mkSequential(ConvExpr cenv env x0, ConvExpr cenv env x1) | Expr.Obj (_lambdaId,_typ,_basev,_basecall,_overrides,_iimpls,m) -> wfail(Error(FSComp.SR.crefQuotationsCantContainObjExprs(),m)) @@ -422,7 +451,7 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. | TOp.ILAsm([ I_stfld(_,_,fspec) | I_stsfld (_,fspec) ],_),enclTypeArgs,args -> let tyargsR = ConvTypes cenv env m enclTypeArgs - let parentTyconR = ConvILTypeRef cenv m fspec.EnclosingTypeRef + let parentTyconR = ConvILTypeRefUnadjusted cenv m fspec.EnclosingTypeRef let argsR = ConvLValueArgs cenv env args QP.mkFieldSet( (parentTyconR, fspec.Name),tyargsR, argsR) @@ -527,7 +556,7 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. | _ -> wfail(Error(FSComp.SR.crefQuotationsCantContainDescendingForLoops(), m)) | TOp.ILCall(_,_,_,isNewObj,valUseFlags,isProp,_,ilMethRef,enclTypeArgs,methTypeArgs,_tys),[],callArgs -> - let parentTyconR = ConvILTypeRef cenv m ilMethRef.EnclosingTypeRef + let parentTyconR = ConvILTypeRefUnadjusted cenv m ilMethRef.EnclosingTypeRef let isNewObj = (isNewObj || (match valUseFlags with CtorValUsedAsSuperInit | CtorValUsedAsSelfInit -> true | _ -> false)) let methArgTypesR = List.map (ConvILType cenv env m) (ILList.toList ilMethRef.ArgTypes) let methRetTypeR = ConvILType cenv env m ilMethRef.ReturnType @@ -565,7 +594,7 @@ and private ConvExprCore cenv (env : QuotationTranslationEnv) (expr: Expr) : QP. and ConvLdfld cenv env m (fspec: ILFieldSpec) enclTypeArgs args = let tyargsR = ConvTypes cenv env m enclTypeArgs - let parentTyconR = ConvILTypeRef cenv m fspec.EnclosingTypeRef + let parentTyconR = ConvILTypeRefUnadjusted cenv m fspec.EnclosingTypeRef let argsR = ConvLValueArgs cenv env args QP.mkFieldGet( (parentTyconR, fspec.Name),tyargsR, argsR) @@ -706,7 +735,7 @@ and private ConvValRefCore holeOk cenv env m (vref:ValRef) tyargs = // References to local values are embedded by value if not holeOk then wfail(Error(FSComp.SR.crefNoSetOfHole(),m)) let idx = cenv.exprSplices.Count - cenv.exprSplices.Add(mkCallLiftValue cenv.g m vty (exprForValRef m vref)); + cenv.exprSplices.Add((mkCallLiftValueWithName cenv.g m vty v.LogicalName (exprForValRef m vref), m)); QP.mkHole(ConvType cenv env m vty,idx) | Parent _ -> ConvModuleValueApp cenv env m vref tyargs [] @@ -732,15 +761,15 @@ and ConvVal cenv env (v:Val) = let tyR = ConvType cenv env v.Range v.Type QP.freshVar (v.CompiledName, tyR, v.IsMutable) -and ConvTyparRef cenv env _m (tp:Typar) = +and ConvTyparRef cenv env m (tp:Typar) = match env.tyvs.TryFind tp.Stamp with | Some x -> x | None -> - match ResizeArray.tryFindIndex (typarEq tp) cenv.typeSplices with + match ResizeArray.tryFindIndex (fun (tp2,_m) -> typarEq tp tp2) cenv.typeSplices with | Some idx -> idx | None -> let idx = cenv.typeSplices.Count - cenv.typeSplices.Add(tp); + cenv.typeSplices.Add((tp, m)); idx and FilterMeasureTyargs tys = @@ -863,39 +892,58 @@ and ConvDecisionTree cenv env tgs typR x = | Some(bindR),env -> QP.mkLet(bindR,ConvDecisionTree cenv env tgs typR rest) - -// REVIEW: quotation references to items in the assembly being generated -// are persisted as assembly-qualified-name strings. However this means -// they are not correctly re-adjusted when later static-linking the assembly. We could consider persisting these references -// by creating fake IL metadata (e.g. fields) that refer to the relevant assemblies, which then -// get fixed-up automatically by IL metadata rewriting. When we know which assemblies -// we are static linking ahead of time (as in the type provider case), then we can generate the correct references here -and ConvILTypeRef cenv m (tr:ILTypeRef) = - cenv |> ignore; m |> ignore - let assref = +// Check if this is an provider-generated assembly that will be statically linked +and IsILTypeRefStaticLinkLocal cenv m (tr:ILTypeRef) = + ignore cenv; ignore m match tr.Scope with - // Check if this is a local assembly - | ILScopeRef.Local -> "." #if EXTENSIONTYPING - // Check if this is an provider-generated assembly that will be statically linked | ILScopeRef.Assembly aref when not cenv.g.isInteractive && aref.Name <> cenv.g.sysCcu.AssemblyName && // optimization to avoid this check in the common case (match cenv.amap.assemblyLoader.LoadAssembly (m,aref) with | ResolvedCcu ccu -> ccu.IsProviderGenerated | UnresolvedCcu _ -> false) - -> "." + -> true #endif - | _ -> tr.Scope.QualifiedName - - {tcName = tr.BasicQualifiedName; tcAssembly = assref} + | _ -> false + +// Adjust for static linking information, then convert +and ConvILTypeRefUnadjusted cenv m (tr:ILTypeRef) = + let trefAdjusted = + if IsILTypeRefStaticLinkLocal cenv m tr then + ILTypeRef.Create(ILScopeRef.Local, tr.Enclosing, tr.Name) + else tr + ConvILTypeRef cenv trefAdjusted + +and ConvILTypeRef cenv (tr:ILTypeRef) = + match cenv.quotationFormat with + | QuotationSerializationFormat.FSharp_40_Plus -> + let idx = + match cenv.referencedTypeDefsTable.TryGetValue tr with + | true, idx -> idx + | _ -> + let idx = cenv.referencedTypeDefs.Count + cenv.referencedTypeDefs.Add tr + cenv.referencedTypeDefsTable.[tr] <- idx + idx + QP.Idx idx + + | QuotationSerializationFormat.FSharp_20_Plus -> + let assref = + match tr.Scope with + | ILScopeRef.Local -> "." + | _ -> tr.Scope.QualifiedName + + QP.Named(tr.BasicQualifiedName, assref) +and ConvVoidType cenv m = QP.mkILNamedTy(ConvTyconRef cenv cenv.g.system_Void_tcref m, []) + and ConvILType cenv env m ty = match ty with - | ILType.Boxed tspec | ILType.Value tspec -> QP.mkILNamedTy(ConvILTypeRef cenv m tspec.TypeRef, List.map (ConvILType cenv env m) (ILList.toList tspec.GenericArgs)) + | ILType.Boxed tspec | ILType.Value tspec -> QP.mkILNamedTy(ConvILTypeRefUnadjusted cenv m tspec.TypeRef, List.map (ConvILType cenv env m) (ILList.toList tspec.GenericArgs)) | ILType.Array (shape,ty) -> QP.mkArrayTy(shape.Rank,ConvILType cenv env m ty) | ILType.TypeVar idx -> QP.mkVarTy(int idx) - | ILType.Void -> mkVoidTy + | ILType.Void -> ConvVoidType cenv m | ILType.Ptr _ | ILType.Byref _ | ILType.Modified _ @@ -919,9 +967,7 @@ and ConvTyconRef cenv (tcref:TyconRef) m = | TProvidedTypeExtensionPoint info when not cenv.g.isInteractive && not info.IsErased -> // Note, generated types are (currently) non-generic let tref = ExtensionTyping.GetILTypeRefOfProvidedType (info.ProvidedType, m) - // Reference to provided types are compiled as if they are local references - // We use the name "." as a special marker for the "local" assembly - see below - { tcName= tref.BasicQualifiedName; tcAssembly="." } + ConvILTypeRefUnadjusted cenv m tref | _ -> #endif let repr = tcref.CompiledRepresentation @@ -929,29 +975,18 @@ and ConvTyconRef cenv (tcref:TyconRef) m = | CompiledTypeRepr.ILAsmOpen asm -> match asm with | ILType.Boxed tspec | ILType.Value tspec -> - ConvILTypeRef cenv m tspec.TypeRef -// | ILType.Byref _-> -// wfail(Error(FSComp.SR.crefQuotationsCantContainByrefTypes(),m)) + ConvILTypeRef cenv tspec.TypeRef | _ -> wfail(Error(FSComp.SR.crefQuotationsCantContainThisType(),m)) | CompiledTypeRepr.ILAsmNamed (tref,_boxity,_) -> - if tcref.IsLocalRef -#if EXTENSIONTYPING - && not (cenv.g.isInteractive && tcref.IsProvidedGeneratedTycon) -#endif - then - // We use the name "." as a special marker for the "local" assembly - { tcName= tref.BasicQualifiedName; tcAssembly="." } - else - ConvILTypeRef cenv m tref + ConvILTypeRefUnadjusted cenv m tref and ConvReturnType cenv envinner m retTy = match retTy with - | None -> mkVoidTy + | None -> ConvVoidType cenv m | Some ty -> ConvType cenv envinner m ty -let ConvExprPublic (g,amap,scope,isReflectedDefintion) env (e) = - let cenv = mk_cenv (g,amap,scope,isReflectedDefintion) +let ConvExprPublic cenv env e = let astExpr = let astExpr = ConvExpr cenv env e // always emit debug info for the top level expression @@ -959,17 +994,14 @@ let ConvExprPublic (g,amap,scope,isReflectedDefintion) env (e) = // EmitDebugInfoIfNecessary will check if astExpr is already augmented with debug info and won't wrap it twice EmitDebugInfoIfNecessary cenv env e.Range astExpr - cenv.typeSplices |> ResizeArray.toList |> List.map mkTyparTy, - cenv.exprSplices |> ResizeArray.toList, astExpr -let ConvMethodBase (g,amap,scope) env (methName, v:Val) = - let cenv = mk_cenv (g,amap,scope,IsReflectedDefinition.Yes) +let ConvMethodBase cenv env (methName, v:Val) = let m = v.Range let parentTyconR = ConvTyconRef cenv v.TopValActualParent m match v.MemberInfo with - | Some(vspr) when not v.IsExtensionMember -> + | Some vspr when not v.IsExtensionMember -> let vref = mkLocalValRef v let tps,argInfos,retTy,_ = GetTypeOfMemberInMemberForm cenv.g vref @@ -996,6 +1028,22 @@ let ConvMethodBase (g,amap,scope) env (methName, v:Val) = methRetType = methRetTypeR; methName = methName; numGenericArgs=numGenericArgs } + + | _ when v.IsExtensionMember -> + + let tps,argInfos,retTy,_ = GetTopValTypeInCompiledForm cenv.g v.ValReprInfo.Value v.Type v.Range + let argTys = argInfos |> List.concat |> List.map fst + let envinner = BindFormalTypars env tps + let methArgTypesR = ConvTypes cenv envinner m argTys + let methRetTypeR = ConvReturnType cenv envinner m retTy + let numGenericArgs = tps.Length + + QP.MethodBaseData.Method + { methParent = parentTyconR + methArgTypes = methArgTypesR + methRetType = methRetTypeR + methName = methName + numGenericArgs=numGenericArgs } | _ -> QP.MethodBaseData.ModuleDefn diff --git a/src/fsharp/QuotationTranslator.fsi b/src/fsharp/QuotationTranslator.fsi new file mode 100644 index 00000000000..74acfe49b46 --- /dev/null +++ b/src/fsharp/QuotationTranslator.fsi @@ -0,0 +1,43 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +// Convert quoted TAST data structures to structures ready for pickling + +module internal Microsoft.FSharp.Compiler.QuotationTranslator + +open Microsoft.FSharp.Compiler +open Microsoft.FSharp.Compiler.Range +open Microsoft.FSharp.Compiler.Import +open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.TcGlobals +open Microsoft.FSharp.Compiler.Tastops +open Microsoft.FSharp.Compiler.AbstractIL.IL + +[] +type QuotationTranslationEnv = + static member Empty : QuotationTranslationEnv + member BindTypars : Typars -> QuotationTranslationEnv + +exception InvalidQuotedTerm of exn +exception IgnoringPartOfQuotedTermWarning of string * Range.range + +[] +type IsReflectedDefinition = + | Yes + | No + +[] +type QuotationSerializationFormat = + /// Indicates that type references are emitted as integer indexes into a supplied table + | FSharp_40_Plus + | FSharp_20_Plus + +[] +type QuotationGenerationScope = + static member Create: TcGlobals * ImportMap * CcuThunk * IsReflectedDefinition -> QuotationGenerationScope + member Close: unit -> ILTypeRef list * (TType * range) list * (Expr * range) list + static member ComputeQuotationFormat : TcGlobals -> QuotationSerializationFormat + +val ConvExprPublic : QuotationGenerationScope -> QuotationTranslationEnv -> Expr -> QuotationPickler.ExprData +val ConvMethodBase : QuotationGenerationScope -> QuotationTranslationEnv -> string * Val -> QuotationPickler.MethodBaseData + + diff --git a/src/fsharp/ReferenceResolution.fs b/src/fsharp/ReferenceResolution.fs index 185079c5259..e8c76b94644 100644 --- a/src/fsharp/ReferenceResolution.fs +++ b/src/fsharp/ReferenceResolution.fs @@ -1,22 +1,20 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -namespace Viz - -/// This type exists to have a concrete 'Target' type for a DebuggerVisualizerAttribute. -/// Ideally it would be out in its own assembly, but then the compiler would need to take a dependency on that assembly, so instead we -/// pragmatically just shove this into the compiler assembly itself. -type internal Visualizable(o:obj) = - member this.Data = o - /// assuming this assembly is already in the debuggee process, then Viz.Visualiable.Make(foo) in the Watch window will make a visualizer for foo - static member Make(o:obj) = new Visualizable(o) - namespace Microsoft.FSharp.Compiler module internal MSBuildResolver = + open System + open System.IO + open Microsoft.Build.Tasks + open Microsoft.Build.Utilities + open Microsoft.Build.Framework + open Microsoft.Build.BuildEngine open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library + exception ResolutionFailure + /// Describes the location where the reference was found. type ResolvedFrom = | AssemblyFolders | AssemblyFoldersEx @@ -26,77 +24,111 @@ module internal MSBuildResolver = | Path of string | Unknown - type ResolutionEnvironment = CompileTimeLike | RuntimeLike | DesigntimeLike + /// Indicates whether the resolve should follow compile-time rules or runtime rules. + type ResolutionEnvironment = + | CompileTimeLike + | RuntimeLike + | DesigntimeLike - open System - open Microsoft.Build.Tasks - open Microsoft.Build.Utilities - open Microsoft.Build.Framework - open Microsoft.Build.BuildEngine - open System.IO - - type ResolvedFile = { - itemSpec:string - resolvedFrom:ResolvedFrom - fusionName:string - version:string - redist:string - baggage:string + /// Information about a resolved file. + type ResolvedFile = + { /// Item specification + itemSpec:string + /// Location that the assembly was resolved from + resolvedFrom:ResolvedFrom + /// The long fusion name of the assembly + fusionName:string + /// The version of the assembly (like 4.0.0.0) + version:string + /// The name of the redist the assembly was found in + redist:string + /// Round-tripped baggage string + baggage:string } - with override this.ToString() = sprintf "ResolvedFile(%s)" this.itemSpec + + override this.ToString() = sprintf "ResolvedFile(%s)" this.itemSpec - type ResolutionResults = { - resolvedFiles:ResolvedFile array - referenceDependencyPaths:string array - relatedPaths:string array - referenceSatellitePaths:string array - referenceScatterPaths:string array - referenceCopyLocalPaths:string array - suggestedBindingRedirects:string array + /// Reference resolution results. All paths are fully qualified. + type ResolutionResults = + { /// Paths to primary references + resolvedFiles:ResolvedFile[] + /// Paths to dependencies + referenceDependencyPaths:string[] + /// Paths to related files (like .xml and .pdb) + relatedPaths:string[] + /// Paths to satellite assemblies used for localization. + referenceSatellitePaths:string[] + /// Additional files required to support multi-file assemblies. + referenceScatterPaths:string[] + /// Paths to files that reference resolution recommend be copied to the local directory + referenceCopyLocalPaths:string[] + /// Binding redirects that reference resolution recommends for the app.config file. + suggestedBindingRedirects:string[] } - let DotNetFrameworkReferenceAssembliesRootDirectory = + static member Empty = + { resolvedFiles = [| |] + referenceDependencyPaths = [| |] + relatedPaths = [| |] + referenceSatellitePaths = [| |] + referenceScatterPaths = [| |] + referenceCopyLocalPaths = [| |] + suggestedBindingRedirects = [| |] } + + + /// Get the Reference Assemblies directory for the .NET Framework on Window + let DotNetFrameworkReferenceAssembliesRootDirectoryOnWindows = // Note that ProgramFilesX86 is correct for both x86 and x64 architectures (the reference assemblies are always in the 32-bit location, which is PF(x86) on an x64 machine) let PF = - //System.Environment.GetFolderPath(System.Environment.SpecialFolder.ProgramFilesX86) // This API is not available to bootstrap compiler - match System.Environment.GetEnvironmentVariable("ProgramFiles(x86)") with - | null -> System.Environment.GetEnvironmentVariable("ProgramFiles") // if PFx86 is null, then we are 32-bit and just get PF + match Environment.GetEnvironmentVariable("ProgramFiles(x86)") with + | null -> Environment.GetEnvironmentVariable("ProgramFiles") // if PFx86 is null, then we are 32-bit and just get PF | s -> s PF + @"\Reference Assemblies\Microsoft\Framework\.NETFramework" - let ReplaceFrameworkVariables(dirs) = - let windowsFramework = System.Environment.GetEnvironmentVariable("windir")+ @"\Microsoft.NET\Framework" - let referenceAssemblies = DotNetFrameworkReferenceAssembliesRootDirectory - dirs|>List.map(fun (d:string)->d.Replace("{WindowsFramework}",windowsFramework).Replace("{ReferenceAssemblies}",referenceAssemblies)) + /// 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 = DotNetFrameworkReferenceAssembliesRootDirectoryOnWindows + 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 // 2. DeriveTargetFrameworkDirectoriesFor45Plus // 3. HighestInstalledNetFrameworkVersionMajorMinor - // 4. GetPathToDotNetFramework + // 4. GetPathToDotNetFrameworkImlpementationAssemblies [] let private Net10 = "v1.0" + [] let private Net11 = "v1.1" + [] let private Net20 = "v2.0" + [] let private Net30 = "v3.0" + [] let private Net35 = "v3.5" + [] let private Net40 = "v4.0" + [] let private Net45 = "v4.5" + [] let private Net451 = "v4.5.1" + /// The list of supported .NET Framework version numbers, using the monikers of the Reference Assemblies folder. let SupportedNetFrameworkVersions = set [ Net20; Net30; Net35; Net40; Net45; Net451; (*SL only*) "v5.0" ] - - let GetPathToDotNetFramework(v) = + + /// Get the path to the .NET Framework implementation assemblies by using ToolLocationHelper.GetPathToDotNetFramework. + /// This is only used to specify the "last resort" path for assembly resolution. + let GetPathToDotNetFrameworkImlpementationAssemblies(v) = #if FX_ATLEAST_45 let v = match v with @@ -116,10 +148,11 @@ module internal MSBuildResolver = | _ -> [] #else // FX_ATLEAST_45 is not defined for step when we build compiler with proto compiler. + ignore v [] #endif - let DeriveTargetFrameworkDirectoriesFor40Plus(version) = + let GetPathToDotNetFrameworkReferenceAssembliesFor40Plus(version) = #if FX_ATLEAST_45 // starting with .Net 4.0, the runtime dirs (WindowsFramework) are never used by MSBuild RAR let v = @@ -136,149 +169,149 @@ module internal MSBuildResolver = | None -> [] #else // FX_ATLEAST_45 is not defined for step when we build compiler with proto compiler. + ignore version [] #endif - /// Determine the default "frameworkVersion" (which is passed into MSBuild resolve). - /// This code uses MSBuild to determine version of the highest installed framework. + /// Use MSBuild to determine the version of the highest installed framework. let HighestInstalledNetFrameworkVersionMajorMinor() = -#if FX_ATLEAST_45 - if box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version451)) <> null then 4, Net451 - elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version45)) <> null then 4, Net45 - else 4, Net40 // version is 4.0 assumed since this code is running. +#if FX_ATLEAST_45 + if box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version451)) <> null then 4, Net451 + elif box (ToolLocationHelper.GetPathToDotNetFramework(TargetDotNetFrameworkVersion.Version45)) <> null then 4, Net45 + else 4, Net40 // version is 4.0 assumed since this code is running. #else // FX_ATLEAST_45 is not defined is required for step when we build compiler with proto compiler and this branch should not be hit 4, Net40 #endif /// Derive the target framework directories. - let DeriveTargetFrameworkDirectories - (targetFrameworkVersion:string, // e.g. v2.0, v3.0, v3.5, v4.0 etc - logmessage:string->unit) = + let DeriveTargetFrameworkDirectories (targetFrameworkVersion:string, logMessage) = + let targetFrameworkVersion = - if not(targetFrameworkVersion.StartsWith("v",StringComparison.Ordinal)) then "v"^targetFrameworkVersion + if not(targetFrameworkVersion.StartsWith("v",StringComparison.Ordinal)) then "v"+targetFrameworkVersion else targetFrameworkVersion - let FrameworkStartsWith(short) = - targetFrameworkVersion.StartsWith(short,StringComparison.Ordinal) + let result = - if FrameworkStartsWith(Net10) then ReplaceFrameworkVariables([@"{WindowsFramework}\v1.0.3705"]) - else if FrameworkStartsWith(Net11) then ReplaceFrameworkVariables([@"{WindowsFramework}\v1.1.4322"]) - else if FrameworkStartsWith(Net20) then ReplaceFrameworkVariables([@"{WindowsFramework}\v2.0.50727"]) - else if FrameworkStartsWith(Net30) then ReplaceFrameworkVariables([@"{ReferenceAssemblies}\v3.0"; @"{WindowsFramework}\v3.0"; @"{WindowsFramework}\v2.0.50727"]) - else if FrameworkStartsWith(Net35) then ReplaceFrameworkVariables([@"{ReferenceAssemblies}\v3.5"; @"{WindowsFramework}\v3.5"; @"{ReferenceAssemblies}\v3.0"; @"{WindowsFramework}\v3.0"; @"{WindowsFramework}\v2.0.50727"]) - else DeriveTargetFrameworkDirectoriesFor40Plus(targetFrameworkVersion) + if targetFrameworkVersion.StartsWith(Net10, StringComparison.Ordinal) then ReplaceVariablesForLegacyFxOnWindows([@"{WindowsFramework}\v1.0.3705"]) + elif targetFrameworkVersion.StartsWith(Net11, StringComparison.Ordinal) then ReplaceVariablesForLegacyFxOnWindows([@"{WindowsFramework}\v1.1.4322"]) + elif targetFrameworkVersion.StartsWith(Net20, StringComparison.Ordinal) then ReplaceVariablesForLegacyFxOnWindows([@"{WindowsFramework}\v2.0.50727"]) + elif targetFrameworkVersion.StartsWith(Net30, StringComparison.Ordinal) then ReplaceVariablesForLegacyFxOnWindows([@"{ReferenceAssemblies}\v3.0"; @"{WindowsFramework}\v3.0"; @"{WindowsFramework}\v2.0.50727"]) + elif targetFrameworkVersion.StartsWith(Net35, StringComparison.Ordinal) then ReplaceVariablesForLegacyFxOnWindows([@"{ReferenceAssemblies}\v3.5"; @"{WindowsFramework}\v3.5"; @"{ReferenceAssemblies}\v3.0"; @"{WindowsFramework}\v3.0"; @"{WindowsFramework}\v2.0.50727"]) + else GetPathToDotNetFrameworkReferenceAssembliesFor40Plus(targetFrameworkVersion) let result = result |> Array.ofList - logmessage (sprintf "Derived target framework directories for version %s are: %s" targetFrameworkVersion (String.Join(",", result))) + logMessage (sprintf "Derived target framework directories for version %s are: %s" targetFrameworkVersion (String.Join(",", result))) result /// Decode the ResolvedFrom code from MSBuild. let DecodeResolvedFrom(resolvedFrom:string) : ResolvedFrom = - let Same a b = - String.CompareOrdinal(a,b) = 0 match resolvedFrom with - | r when Same "{RawFileName}" r -> RawFileName - | r when Same "{GAC}" r -> GlobalAssemblyCache - | r when Same "{TargetFrameworkDirectory}" r -> TargetFrameworkDirectory - | r when Same "{AssemblyFolders}" r -> AssemblyFolders - | r when r.Length >= 10 && Same "{Registry:" (r.Substring(0,10)) -> AssemblyFoldersEx + | "{RawFileName}" -> RawFileName + | "{GAC}" -> GlobalAssemblyCache + | "{TargetFrameworkDirectory}" -> TargetFrameworkDirectory + | "{AssemblyFolders}" -> AssemblyFolders + | r when r.Length >= 10 && "{Registry:" = r.Substring(0,10) -> AssemblyFoldersEx | r -> ResolvedFrom.Path r - type ErrorWarningCallbackSig = ((*code:*)string->(*message*)string->unit) - - type Foregrounded = - | ForegroundedMessage of string - | ForegroundedError of string * string - | ForegroundedWarning of string * string - - let ResolveCore( - resolutionEnvironment: ResolutionEnvironment, + /// Perform assembly resolution by instantiating the ResolveAssemblyReference task directly from the MSBuild SDK. + let ResolveCore(resolutionEnvironment: ResolutionEnvironment, references:(string*(*baggage*)string)[], - targetFrameworkVersion:string, - targetFrameworkDirectories:string list, - targetProcessorArchitecture:string, - outputDirectory:string, - fsharpCoreExplicitDirOrFSharpBinariesDir:string, - explicitIncludeDirs:string list, - implicitIncludeDir:string, - frameworkRegistryBase:string, - assemblyFoldersSuffix:string, - assemblyFoldersConditions:string, - allowRawFileName:bool, - logmessage:string->unit, - logwarning:ErrorWarningCallbackSig, - logerror:ErrorWarningCallbackSig ) = - - // Message Foregrounding: - // In version 4.0 MSBuild began calling log methods on a background (non-UI) thread. If there is an exception thrown from - // logmessage, logwarning or logerror then it would kill the process. - // The fix is to catch these exceptions and log the rest of the messages to a list to output at the end. - // It looks simpler to always just accumulate the messages during resolution and show them all at the end, but then - // we couldn't see the messages as resolution progresses. - let foregrounded = ref [] - let backgroundException : exn option ref = ref None + targetFrameworkVersion: string, + targetFrameworkDirectories: string list, + targetProcessorArchitecture: string, + outputDirectory: string, + fsharpCoreExplicitDirOrFSharpBinariesDir: string, + explicitIncludeDirs: string list, + implicitIncludeDir: string, + frameworkRegistryBase: string, + assemblyFoldersSuffix: string, + assemblyFoldersConditions: string, + allowRawFileName: bool, + logMessage: (string -> unit), + logWarning: (string -> string -> unit), + logError: (string -> string -> unit)) = + + if Array.isEmpty references then ResolutionResults.Empty else + + let backgroundException = ref false - let logmessage message = - match !backgroundException with - | Some _ -> foregrounded := ForegroundedMessage(message) :: !foregrounded - | None -> - try - logmessage message - with e -> - backgroundException := Some(e) - foregrounded := ForegroundedMessage(message) :: !foregrounded - - let logwarning code message = - match !backgroundException with - | Some _ -> foregrounded := ForegroundedWarning(code,message) :: !foregrounded - | None -> - try - logwarning code message - with e -> - backgroundException := Some(e) - foregrounded := ForegroundedWarning(code,message) :: !foregrounded - - let logerror code message = - match !backgroundException with - | Some _ -> foregrounded := ForegroundedError(code,message) :: !foregrounded - | None -> - try - logerror code message - with e -> - backgroundException := Some(e) - foregrounded := ForegroundedError(code,message) :: !foregrounded - + let protect f = + if not !backgroundException then + try f() + with _ -> backgroundException := true - let engine = { new IBuildEngine with - member be.BuildProjectFile(projectFileName, targetNames, globalProperties, targetOutputs) = true - member be.LogCustomEvent(e) = logmessage e.Message - member be.LogErrorEvent(e) = logerror e.Code e.Message - member be.LogMessageEvent(e) = logmessage e.Message - member be.LogWarningEvent(e) = logwarning e.Code e.Message - member be.ColumnNumberOfTaskNode with get() = 1 - member be.LineNumberOfTaskNode with get() = 1 - member be.ContinueOnError with get() = true - member be.ProjectFileOfTaskNode with get() = "" } + 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 () -> logError e.Code e.Message) + member __.LogMessageEvent(e) = protect (fun () -> logMessage e.Message) + member __.LogWarningEvent(e) = protect (fun () -> logWarning e.Code e.Message) + member __.ColumnNumberOfTaskNode = 1 + member __.LineNumberOfTaskNode = 1 + member __.ContinueOnError = true + member __.ProjectFileOfTaskNode = "" } - let rar = new ResolveAssemblyReference() - rar.BuildEngine <- engine - - // Derive target framework directory if none was supplied. + // Derive the target framework directory if none was supplied. let targetFrameworkDirectories = - if targetFrameworkDirectories=[] then DeriveTargetFrameworkDirectories(targetFrameworkVersion, logmessage) + if targetFrameworkDirectories=[] then DeriveTargetFrameworkDirectories(targetFrameworkVersion, logMessage) else targetFrameworkDirectories |> Array.ofList - // Filter for null and zero length, and escape backslashes so legitimate path characters aren't mistaken for - // escape characters (E.g., ".\r.dll") - let explicitIncludeDirs = explicitIncludeDirs |> List.filter(fun eid->not(String.IsNullOrEmpty(eid))) - let references = references |> Array.filter(fun (path,_)->not(String.IsNullOrEmpty(path))) // |> Array.map (fun (path,baggage) -> (path.Replace("\\","\\\\"),baggage)) - - rar.TargetFrameworkDirectories <- targetFrameworkDirectories - rar.FindRelatedFiles <- false - rar.FindDependencies <- false - rar.FindSatellites <- false - rar.FindSerializationAssemblies <- false + // Filter for null and zero length + let references = references |> Array.filter(fst >> String.IsNullOrEmpty >> not) + + // Determine the set of search paths for the resolution + let searchPaths = + + let explicitIncludeDirs = explicitIncludeDirs |> List.filter(String.IsNullOrEmpty >> not) + + let rawFileNamePath = if allowRawFileName then ["{RawFileName}"] else [] + + let registry = sprintf "{Registry:%s,%s,%s%s}" frameworkRegistryBase targetFrameworkVersion assemblyFoldersSuffix assemblyFoldersConditions + + [| match resolutionEnvironment with + | DesigntimeLike + | RuntimeLike -> + logMessage("Using scripting resolution precedence.") + // These are search paths for runtime-like or scripting resolution. GAC searching is present. + yield! rawFileNamePath // Quick-resolve straight to filename first + yield! explicitIncludeDirs // From -I, #I + yield implicitIncludeDir // Usually the project directory + yield fsharpCoreExplicitDirOrFSharpBinariesDir // Location of explicit reference to FSharp.Core, otherwise location of fsc.exe + yield "{TargetFrameworkDirectory}" + yield registry + yield "{AssemblyFolders}" + yield "{GAC}" + + | CompileTimeLike -> + logMessage("Using compilation resolution precedence.") + // These are search paths for compile-like resolution. GAC searching is not present. + yield "{TargetFrameworkDirectory}" + yield! rawFileNamePath // Quick-resolve straight to filename first + yield! explicitIncludeDirs // From -I, #I + yield implicitIncludeDir // Usually the project directory + yield fsharpCoreExplicitDirOrFSharpBinariesDir // Location of explicit reference to FSharp.Core, otherwise location of fsc.exe + yield registry + yield "{AssemblyFolders}" + yield outputDirectory + yield "{GAC}" + // use path to implementation assemblies as the last resort + yield! GetPathToDotNetFrameworkImlpementationAssemblies targetFrameworkVersion + |] + + let assemblies = + [| for (referenceName,baggage) in references -> + let item = new Microsoft.Build.Utilities.TaskItem(referenceName) + item.SetMetadata("Baggage", baggage) + item:>ITaskItem |] + + let rar = + ResolveAssemblyReference(BuildEngine=engine, TargetFrameworkDirectories=targetFrameworkDirectories, + FindRelatedFiles=false, FindDependencies=false, FindSatellites=false, + FindSerializationAssemblies=false, Assemblies=assemblies, + SearchPaths=searchPaths, + AllowedAssemblyExtensions= [| ".dll" ; ".exe" |]) #if BUILDING_WITH_LKG ignore targetProcessorArchitecture #else @@ -286,147 +319,60 @@ module internal MSBuildResolver = rar.TargetProcessorArchitecture <- targetProcessorArchitecture rar.CopyLocalDependenciesWhenParentReferenceInGac <- true #endif - rar.Assemblies <- [|for (referenceName,baggage) in references -> - let item = new Microsoft.Build.Utilities.TaskItem(referenceName) - item.SetMetadata("Baggage", baggage) - item:>ITaskItem|] - - let rawFileNamePath = if allowRawFileName then ["{RawFileName}"] else [] - let searchPaths = - match resolutionEnvironment with - | DesigntimeLike - | RuntimeLike -> - logmessage("Using scripting resolution precedence.") - // These are search paths for runtime-like or scripting resolution. GAC searching is present. - rawFileNamePath @ // Quick-resolve straight to filename first - explicitIncludeDirs @ // From -I, #I - [implicitIncludeDir] @ // Usually the project directory - [fsharpCoreExplicitDirOrFSharpBinariesDir] @ // Location of explicit reference to FSharp.Core, otherwise location of fsc.exe - ["{TargetFrameworkDirectory}"] @ - [sprintf "{Registry:%s,%s,%s%s}" frameworkRegistryBase targetFrameworkVersion assemblyFoldersSuffix assemblyFoldersConditions] @ - ["{AssemblyFolders}"] @ - ["{GAC}"] - | CompileTimeLike -> - logmessage("Using compilation resolution precedence.") - // These are search paths for compile-like resolution. GAC searching is not present. - ["{TargetFrameworkDirectory}"] @ - rawFileNamePath @ // Quick-resolve straight to filename first - explicitIncludeDirs @ // From -I, #I - [implicitIncludeDir] @ // Usually the project directory - [fsharpCoreExplicitDirOrFSharpBinariesDir] @ // Location of explicit reference to FSharp.Core, otherwise location of fsc.exe - [sprintf "{Registry:%s,%s,%s%s}" frameworkRegistryBase targetFrameworkVersion assemblyFoldersSuffix assemblyFoldersConditions] @ // Like {Registry:Software\Microsoft\.NETFramework,v2.0,AssemblyFoldersEx} - ["{AssemblyFolders}"] @ - [outputDirectory] @ - ["{GAC}"] @ - GetPathToDotNetFramework targetFrameworkVersion // use path to implementation assemblies as the last resort - - rar.SearchPaths <- searchPaths |> Array.ofList - - rar.AllowedAssemblyExtensions <- [| ".dll" ; ".exe" |] let succeeded = rar.Execute() - // Unroll any foregrounded messages - match !backgroundException with - | Some(backGroundException) -> - logwarning "" "Saw error on logger thread during resolution." - logwarning "" (sprintf "%A" backGroundException) - logwarning "" "Showing messages seen after exception." - - !foregrounded - |> List.iter(fun message-> - match message with - | ForegroundedMessage(message) -> logmessage message - | ForegroundedWarning(code,message) -> logwarning code message - | ForegroundedError(code,message) -> logerror code message ) - | None -> () - if not succeeded then raise ResolutionFailure - { - resolvedFiles = [| for p in rar.ResolvedFiles -> {itemSpec = p.ItemSpec; - resolvedFrom = DecodeResolvedFrom(p.GetMetadata("ResolvedFrom")); - fusionName = p.GetMetadata("FusionName"); - version = p.GetMetadata("Version"); - redist = p.GetMetadata("Redist"); - baggage = p.GetMetadata("Baggage") } |] - referenceDependencyPaths = [| for p in rar.ResolvedDependencyFiles -> p.ItemSpec |] - relatedPaths = [| for p in rar.RelatedFiles -> p.ItemSpec |] - referenceSatellitePaths = [| for p in rar.SatelliteFiles -> p.ItemSpec |] - referenceScatterPaths = [| for p in rar.ScatterFiles -> p.ItemSpec |] - referenceCopyLocalPaths = [| for p in rar.CopyLocalFiles -> p.ItemSpec |] - suggestedBindingRedirects = [| for p in rar.SuggestedRedirects -> p.ItemSpec |] - } + let resolvedFiles = + [| for p in rar.ResolvedFiles -> + { itemSpec = p.ItemSpec + resolvedFrom = DecodeResolvedFrom(p.GetMetadata("ResolvedFrom")) + fusionName = p.GetMetadata("FusionName") + version = p.GetMetadata("Version") + redist = p.GetMetadata("Redist") + baggage = p.GetMetadata("Baggage") } |] + + { resolvedFiles = resolvedFiles + referenceDependencyPaths = [| for p in rar.ResolvedDependencyFiles -> p.ItemSpec |] + relatedPaths = [| for p in rar.RelatedFiles -> p.ItemSpec |] + referenceSatellitePaths = [| for p in rar.SatelliteFiles -> p.ItemSpec |] + referenceScatterPaths = [| for p in rar.ScatterFiles -> p.ItemSpec |] + referenceCopyLocalPaths = [| for p in rar.CopyLocalFiles -> p.ItemSpec |] + suggestedBindingRedirects = [| for p in rar.SuggestedRedirects -> p.ItemSpec |] } + + + + /// Perform the resolution on rooted and unrooted paths, and then combine the results. + let Resolve(resolutionEnvironment, references, targetFrameworkVersion, targetFrameworkDirectories, targetProcessorArchitecture, + outputDirectory, fsharpCoreExplicitDirOrFSharpBinariesDir, explicitIncludeDirs, implicitIncludeDir, frameworkRegistryBase, + assemblyFoldersSuffix, assemblyFoldersConditions, logMessage, logWarning, logError) = - let Resolve( - resolutionEnvironment: ResolutionEnvironment, - references:(string*(*baggage*)string)[], - targetFrameworkVersion:string, - targetFrameworkDirectories:string list, - targetProcessorArchitecture:string, - outputDirectory:string, - fsharpCoreExplicitDirOrFSharpBinariesDir:string, - explicitIncludeDirs:string list, - implicitIncludeDir:string, - frameworkRegistryBase:string, - assemblyFoldersSuffix:string, - assemblyFoldersConditions:string, - logmessage:string->unit, - logwarning:ErrorWarningCallbackSig, - logerror:ErrorWarningCallbackSig ) = // The {RawFileName} target is 'dangerous', in the sense that is uses Directory.GetCurrentDirectory() to resolve unrooted file paths. // It is unreliable to use this mutable global state inside Visual Studio. As a result, we partition all references into a "rooted" set // (which contains e.g. C:\MyDir\MyAssem.dll) and "unrooted" (everything else). We only allow "rooted" to use {RawFileName}. Note that // unrooted may still find 'local' assemblies by virtue of the fact that "implicitIncludeDir" is one of the places searched during // assembly resolution. - let references = references |> Array.map (fun ((file,baggage) as data) -> - // However, MSBuild will not resolve 'relative' paths, even when e.g. implicitIncludeDir is part of the search. As a result, - // if we have an unrooted path+filename, we'll assume this is relative to the project directory and root it. - if FileSystem.IsPathRootedShim(file) then - data // fine, e.g. "C:\Dir\foo.dll" - elif not(file.Contains("\\") || file.Contains("/")) then - data // fine, e.g. "System.Transactions.dll" - else - // we have a 'relative path', e.g. "bin/Debug/foo.exe" or "..\Yadda\bar.dll" - // turn it into an absolute path based at implicitIncludeDir - (System.IO.Path.Combine(implicitIncludeDir, file), baggage) - ) - let rooted, unrooted = references |> Array.partition (fun (file,_baggage) -> FileSystem.IsPathRootedShim(file)) - - let CallResolveCore(references, allowRawFileName) = - if Array.isEmpty references then - { - resolvedFiles = [| |] - referenceDependencyPaths = [| |] - relatedPaths = [| |] - referenceSatellitePaths = [| |] - referenceScatterPaths = [| |] - referenceCopyLocalPaths = [| |] - suggestedBindingRedirects = [| |] - } - else - // all the params are the same... - ResolveCore( - resolutionEnvironment, - references, // ... except this - targetFrameworkVersion, - targetFrameworkDirectories, - targetProcessorArchitecture, - outputDirectory, - fsharpCoreExplicitDirOrFSharpBinariesDir, - explicitIncludeDirs, - implicitIncludeDir, - frameworkRegistryBase, - assemblyFoldersSuffix, - assemblyFoldersConditions, - allowRawFileName, // ... and this - logmessage, - logwarning, - logerror) - - let rootedResults = CallResolveCore(rooted, true) - let unrootedResults = CallResolveCore(unrooted, false) + let references = + [| for ((file,baggage) as data) in references -> + // However, MSBuild will not resolve 'relative' paths, even when e.g. implicitIncludeDir is part of the search. As a result, + // if we have an unrooted path+filename, we'll assume this is relative to the project directory and root it. + if FileSystem.IsPathRootedShim(file) then + data // fine, e.g. "C:\Dir\foo.dll" + elif not(file.Contains("\\") || file.Contains("/")) then + data // fine, e.g. "System.Transactions.dll" + else + // we have a 'relative path', e.g. "bin/Debug/foo.exe" or "..\Yadda\bar.dll" + // turn it into an absolute path based at implicitIncludeDir + (Path.Combine(implicitIncludeDir, file), baggage) |] + + let rooted, unrooted = references |> Array.partition (fst >> FileSystem.IsPathRootedShim) + + let rootedResults = ResolveCore(resolutionEnvironment, rooted, targetFrameworkVersion, targetFrameworkDirectories, targetProcessorArchitecture, outputDirectory, fsharpCoreExplicitDirOrFSharpBinariesDir, explicitIncludeDirs, implicitIncludeDir, frameworkRegistryBase, assemblyFoldersSuffix, assemblyFoldersConditions, true, logMessage, logWarning, logError) + + let unrootedResults = ResolveCore(resolutionEnvironment, unrooted, targetFrameworkVersion, targetFrameworkDirectories, targetProcessorArchitecture, outputDirectory, fsharpCoreExplicitDirOrFSharpBinariesDir, explicitIncludeDirs, implicitIncludeDir, frameworkRegistryBase, assemblyFoldersSuffix, assemblyFoldersConditions, false, logMessage, logWarning, logError) + // now unify the two sets of results { resolvedFiles = Array.concat [| rootedResults.resolvedFiles; unrootedResults.resolvedFiles |] diff --git a/src/fsharp/ReferenceResolution.fsi b/src/fsharp/ReferenceResolution.fsi index 003cfdbe5ed..0f83ab88a6a 100644 --- a/src/fsharp/ReferenceResolution.fsi +++ b/src/fsharp/ReferenceResolution.fsi @@ -1,15 +1,5 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -namespace Viz - -/// This type exists to have a concrete 'Target' type for a DebuggerVisualizerAttribute. -/// Ideally it would be out in its own assembly, but then the compiler would need to take a dependency on that assembly, so instead we -/// pragmatically just shove this into the compiler assembly itself. -type internal Visualizable = - new : obj -> Visualizable - member Data : obj - /// assuming this assembly is already in the debuggee process, then Viz.Visualiable.Make(foo) in the Watch window will make a visualizer for foo - static member Make : obj -> Visualizable namespace Microsoft.FSharp.Compiler @@ -18,6 +8,7 @@ module internal MSBuildResolver = exception ResolutionFailure val SupportedNetFrameworkVersions : Set + val HighestInstalledNetFrameworkVersionMajorMinor : unit -> int * string /// Describes the location where the reference was found. @@ -30,7 +21,7 @@ module internal MSBuildResolver = | Path of string | Unknown - /// Whether the resolve should follow compile-time rules or runtime rules. + /// Indicates whether the resolve should follow compile-time rules or runtime rules. type ResolutionEnvironment = | CompileTimeLike | RuntimeLike // Don't allow stubbed-out reference assemblies @@ -39,48 +30,45 @@ module internal MSBuildResolver = #if SILVERLIGHT #else - val DotNetFrameworkReferenceAssembliesRootDirectory : string + /// Get the Reference Assemblies directory for the .NET Framework on Window + val DotNetFrameworkReferenceAssembliesRootDirectoryOnWindows : string /// Information about a resolved file. - type ResolvedFile = { - /// Item specification - itemSpec:string - /// Location that the assembly was resolved from - resolvedFrom:ResolvedFrom - /// The long fusion name of the assembly - fusionName:string - /// The version of the assembly (like 4.0.0.0) - version:string - /// The name of the redist the assembly was found in - redist:string - /// Round-tripped baggage string - baggage:string + type ResolvedFile = + { /// Item specification + itemSpec:string + /// Location that the assembly was resolved from + resolvedFrom:ResolvedFrom + /// The long fusion name of the assembly + fusionName:string + /// The version of the assembly (like 4.0.0.0) + version:string + /// The name of the redist the assembly was found in + redist:string + /// Round-tripped baggage string + baggage:string } /// Reference resolution results. All paths are fully qualified. - type ResolutionResults = { - /// Paths to primary references - resolvedFiles:ResolvedFile array - /// Paths to dependencies - referenceDependencyPaths:string array - /// Paths to related files (like .xml and .pdb) - relatedPaths:string array - /// Paths to satellite assemblies used for localization. - referenceSatellitePaths:string array - /// Additional files required to support multi-file assemblies. - referenceScatterPaths:string array - /// Paths to files that reference resolution recommend be copied to the local directory - referenceCopyLocalPaths:string array - /// Binding redirects that reference resolution recommends for the app.config file. - suggestedBindingRedirects:string array - } + type ResolutionResults = + { /// Paths to primary references + resolvedFiles:ResolvedFile[] + /// Paths to dependencies + referenceDependencyPaths:string[] + /// Paths to related files (like .xml and .pdb) + relatedPaths:string[] + /// Paths to satellite assemblies used for localization. + referenceSatellitePaths:string[] + /// Additional files required to support multi-file assemblies. + referenceScatterPaths:string[] + /// Paths to files that reference resolution recommend be copied to the local directory + referenceCopyLocalPaths:string[] + /// Binding redirects that reference resolution recommends for the app.config file. + suggestedBindingRedirects:string[] } - /// Callback for errors and warnings. - type ErrorWarningCallbackSig = - ((*code:*)string->(*message*)string->unit) - - val Resolve : + /// Perform assembly resolution on the given references + val Resolve: resolutionEnvironment: ResolutionEnvironment * references:(string*(*baggage*)string)[] * targetFrameworkVersion:string * @@ -94,6 +82,7 @@ module internal MSBuildResolver = assemblyFoldersSuffix:string * assemblyFoldersConditions:string * logmessage:(string->unit) * - logwarning:ErrorWarningCallbackSig * - logerror:ErrorWarningCallbackSig -> ResolutionResults + logwarning:(string->string->unit) * + logerror:(string->string->unit) + -> ResolutionResults #endif diff --git a/src/fsharp/tastops.fs b/src/fsharp/TastOps.fs similarity index 95% rename from src/fsharp/tastops.fs rename to src/fsharp/TastOps.fs index 88b21b668c9..fdf8848f724 100644 --- a/src/fsharp/tastops.fs +++ b/src/fsharp/TastOps.fs @@ -1,8 +1,10 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -/// Derived expression manipulation and construction functions. +/// Defines derived expression manipulation and construction functions. module internal Microsoft.FSharp.Compiler.Tastops +#nowarn "44" // This construct is deprecated. please use List.item + open System.Collections.Generic open Internal.Utilities open Microsoft.FSharp.Compiler.AbstractIL @@ -12,12 +14,13 @@ open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.Range +open Microsoft.FSharp.Compiler.Rational open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.Lib -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Layout open Microsoft.FSharp.Compiler.PrettyNaming #if EXTENSIONTYPING @@ -63,7 +66,6 @@ type ValMap<'T>(imap: StampMap<'T>) = member m.IsEmpty = imap.IsEmpty static member OfList vs = (vs, ValMap<'T>.Empty) ||> List.foldBack (fun (x,y) acc -> acc.Add x y) - //-------------------------------------------------------------------------- // renamings //-------------------------------------------------------------------------- @@ -188,6 +190,7 @@ and remapMeasureAux tyenv unt = | Some tcr -> MeasureCon tcr | None -> unt | MeasureProd(u1,u2) -> MeasureProd(remapMeasureAux tyenv u1, remapMeasureAux tyenv u2) + | MeasureRationalPower(u,q) -> MeasureRationalPower(remapMeasureAux tyenv u, q) | MeasureInv u -> MeasureInv(remapMeasureAux tyenv u) | MeasureVar tp as unt -> match tp.Solution with @@ -386,31 +389,33 @@ let stripUnitEqnsFromMeasure m = stripUnitEqnsFromMeasureAux false m // Basic unit stuff //--------------------------------------------------------------------------- - /// What is the contribution of unit-of-measure constant ucref to unit-of-measure expression measure? let rec MeasureConExponent g abbrev ucref unt = match (if abbrev then stripUnitEqnsFromMeasure unt else stripUnitEqns unt) with - | MeasureCon ucref' -> if tyconRefEq g ucref' ucref then 1 else 0 - | MeasureInv unt' -> -(MeasureConExponent g abbrev ucref unt') - | MeasureProd(unt1,unt2) -> MeasureConExponent g abbrev ucref unt1 + MeasureConExponent g abbrev ucref unt2 - | _ -> 0 + | MeasureCon ucref' -> if tyconRefEq g ucref' ucref then OneRational else ZeroRational + | MeasureInv unt' -> NegRational(MeasureConExponent g abbrev ucref unt') + | MeasureProd(unt1,unt2) -> AddRational(MeasureConExponent g abbrev ucref unt1) (MeasureConExponent g abbrev ucref unt2) + | MeasureRationalPower(unt',q) -> MulRational (MeasureConExponent g abbrev ucref unt') q + | _ -> ZeroRational /// What is the contribution of unit-of-measure constant ucref to unit-of-measure expression measure /// after remapping tycons? let rec MeasureConExponentAfterRemapping g r ucref unt = match stripUnitEqnsFromMeasure unt with - | MeasureCon ucref' -> if tyconRefEq g (r ucref') ucref then 1 else 0 - | MeasureInv unt' -> -(MeasureConExponentAfterRemapping g r ucref unt') - | MeasureProd(unt1,unt2) -> MeasureConExponentAfterRemapping g r ucref unt1 + MeasureConExponentAfterRemapping g r ucref unt2 - | _ -> 0 + | MeasureCon ucref' -> if tyconRefEq g (r ucref') ucref then OneRational else ZeroRational + | MeasureInv unt' -> NegRational(MeasureConExponentAfterRemapping g r ucref unt') + | MeasureProd(unt1,unt2) -> AddRational(MeasureConExponentAfterRemapping g r ucref unt1) (MeasureConExponentAfterRemapping g r ucref unt2) + | MeasureRationalPower(unt',q) -> MulRational (MeasureConExponentAfterRemapping g r ucref unt') q + | _ -> ZeroRational /// What is the contribution of unit-of-measure variable tp to unit-of-measure expression unt? let rec MeasureVarExponent tp unt = match stripUnitEqnsFromMeasure unt with - | MeasureVar tp' -> if typarEq tp tp' then 1 else 0 - | MeasureInv unt' -> -(MeasureVarExponent tp unt') - | MeasureProd(unt1,unt2) -> MeasureVarExponent tp unt1 + MeasureVarExponent tp unt2 - | _ -> 0 + | MeasureVar tp' -> if typarEq tp tp' then OneRational else ZeroRational + | MeasureInv unt' -> NegRational(MeasureVarExponent tp unt') + | MeasureProd(unt1,unt2) -> AddRational(MeasureVarExponent tp unt1) (MeasureVarExponent tp unt2) + | MeasureRationalPower(unt',q) -> MulRational (MeasureVarExponent tp unt') q + | _ -> ZeroRational /// List the *literal* occurrences of unit variables in a unit expression, without repeats let ListMeasureVarOccs unt = @@ -418,6 +423,7 @@ let ListMeasureVarOccs unt = match stripUnitEqnsFromMeasure unt with MeasureVar tp -> if List.exists (typarEq tp) acc then acc else tp::acc | MeasureProd(unt1,unt2) -> gather (gather acc unt1) unt2 + | MeasureRationalPower(unt',_) -> gather acc unt' | MeasureInv unt' -> gather acc unt' | _ -> acc gather [] unt @@ -427,9 +433,10 @@ let ListMeasureVarOccsWithNonZeroExponents untexpr = let rec gather acc unt = match stripUnitEqnsFromMeasure unt with MeasureVar tp -> if List.exists (fun (tp', _) -> typarEq tp tp') acc then acc - else let e = MeasureVarExponent tp untexpr in if e=0 then acc else (tp,e)::acc + else let e = MeasureVarExponent tp untexpr in if e = ZeroRational then acc else (tp,e)::acc | MeasureProd(unt1,unt2) -> gather (gather acc unt1) unt2 | MeasureInv unt' -> gather acc unt' + | MeasureRationalPower(unt',_) -> gather acc unt' | _ -> acc gather [] untexpr @@ -438,9 +445,10 @@ let ListMeasureConOccsWithNonZeroExponents g eraseAbbrevs untexpr = let rec gather acc unt = match (if eraseAbbrevs then stripUnitEqnsFromMeasure unt else stripUnitEqns unt) with | MeasureCon c -> if List.exists (fun (c', _) -> tyconRefEq g c c') acc then acc - else let e = MeasureConExponent g eraseAbbrevs c untexpr in if e=0 then acc else (c,e)::acc + else let e = MeasureConExponent g eraseAbbrevs c untexpr in if e = ZeroRational then acc else (c,e)::acc | MeasureProd(unt1,unt2) -> gather (gather acc unt1) unt2 | MeasureInv unt' -> gather acc unt' + | MeasureRationalPower(unt',_) -> gather acc unt' | _ -> acc gather [] untexpr @@ -451,17 +459,17 @@ let ListMeasureConOccsAfterRemapping g r unt = match (stripUnitEqnsFromMeasure unt) with | MeasureCon c -> if List.exists (tyconRefEq g (r c)) acc then acc else r c::acc | MeasureProd(unt1,unt2) -> gather (gather acc unt1) unt2 + | MeasureRationalPower(unt',_) -> gather acc unt' | MeasureInv unt' -> gather acc unt' | _ -> acc gather [] unt /// Construct a measure expression representing the n'th power of a measure -let rec MeasurePower u n = +let MeasurePower u n = if n=0 then MeasureOne elif n=1 then u - elif n<0 then MeasureInv (MeasurePower u (-n)) - else MeasureProd (u, MeasurePower u (n-1)) + else MeasureRationalPower (u, intToRational n) let MeasureProdOpt m1 m2 = match m1, m2 with @@ -484,7 +492,7 @@ let destUnitParMeasure g unt = let vs = ListMeasureVarOccsWithNonZeroExponents unt let cs = ListMeasureConOccsWithNonZeroExponents g true unt match vs, cs with - | [(v,1)], [] -> v + | [(v,e)], [] when e = OneRational -> v | _, _ -> failwith "destUnitParMeasure: not a unit-of-measure parameter" let isUnitParMeasure g unt = @@ -492,7 +500,7 @@ let isUnitParMeasure g unt = let cs = ListMeasureConOccsWithNonZeroExponents g true unt match vs, cs with - | [(_,1)], [] -> true + | [(_,e)], [] when e = OneRational -> true | _, _ -> false let normalizeMeasure g ms = @@ -500,8 +508,8 @@ let normalizeMeasure g ms = let cs = ListMeasureConOccsWithNonZeroExponents g false ms match vs, cs with | [],[] -> MeasureOne - | [(v,1)], [] -> MeasureVar v - | vs, cs -> List.foldBack (fun (v,e) -> fun m -> MeasureProd (MeasurePower (MeasureVar v) e, m)) vs (List.foldBack (fun (c,e) -> fun m -> MeasureProd (MeasurePower (MeasureCon c) e, m)) cs MeasureOne) + | [(v,e)], [] when e = OneRational -> MeasureVar v + | vs, cs -> List.foldBack (fun (v,e) -> fun m -> MeasureProd (MeasureRationalPower (MeasureVar v, e), m)) vs (List.foldBack (fun (c,e) -> fun m -> MeasureProd (MeasureRationalPower (MeasureCon c, e), m)) cs MeasureOne) let tryNormalizeMeasureInType g ty = match ty with @@ -518,6 +526,7 @@ let rec sizeMeasure g ms = | MeasureVar _ -> 1 | MeasureCon _ -> 1 | MeasureProd (ms1,ms2) -> sizeMeasure g ms1 + sizeMeasure g ms2 + | MeasureRationalPower (ms,_) -> sizeMeasure g ms | MeasureInv ms -> sizeMeasure g ms | MeasureOne -> 1 @@ -1237,6 +1246,7 @@ type TyconRefMultiMap<'T>(contents: TyconRefMap<'T list>) = member m.Find v = if contents.ContainsKey v then contents.[v] else [] member m.Add (v, x) = TyconRefMultiMap<'T>(contents.Add v (x :: m.Find v)) static member Empty = TyconRefMultiMap<'T>(TyconRefMap<_>.Empty) + static member OfList vs = (vs, TyconRefMultiMap<'T>.Empty) ||> List.foldBack (fun (x,y) acc -> acc.Add (x, y)) //-------------------------------------------------------------------------- @@ -1552,6 +1562,7 @@ let isStructTy g ty = // - Any non-generic user-defined struct-type that contains fields of unmanaged-types only. // [Note: Constructed types and type-parameters are never unmanaged-types. end note] let rec isUnmanagedTy g ty = + let ty = stripTyEqnsAndMeasureEqns g ty if isAppTy g ty then let tcref = tcrefOfAppTy g ty let isEq tcref2 = tyconRefEq g tcref tcref2 @@ -2504,8 +2515,8 @@ let isILAttrib (tref:ILTypeRef) (attr: ILAttribute) = // results of attribute lookups in the TAST let HasILAttribute tref (attrs: ILAttributes) = List.exists (isILAttrib tref) attrs.AsList -let TryDecodeILAttribute g tref scope (attrs: ILAttributes) = - attrs.AsList |> List.tryPick(fun x -> if isILAttrib tref x then Some(decodeILAttribData g.ilg x scope) else None) +let TryDecodeILAttribute g tref (attrs: ILAttributes) = + attrs.AsList |> List.tryPick(fun x -> if isILAttrib tref x then Some(decodeILAttribData g.ilg x) else None) // This one is done by name to ensure the compiler doesn't take a dependency on dereferencing a type that only exists in .NET 3.5 let ILThingHasExtensionAttribute (attrs : ILAttributes) = @@ -2530,12 +2541,15 @@ let (|AttribInt16Arg|_|) = function AttribExpr(_,Expr.Const (Const.Int16(n),_,_) let (|AttribBoolArg|_|) = function AttribExpr(_,Expr.Const (Const.Bool(n),_,_)) -> Some(n) | _ -> None let (|AttribStringArg|_|) = function AttribExpr(_,Expr.Const (Const.String(n),_,_)) -> Some(n) | _ -> None -let TryFindFSharpBoolAttribute g nm attrs = +let TryFindFSharpBoolAttributeWithDefault dflt g nm attrs = match TryFindFSharpAttribute g nm attrs with - | Some(Attrib(_,_,[ ],_,_,_,_)) -> Some(true) + | Some(Attrib(_,_,[ ],_,_,_,_)) -> Some(dflt) | Some(Attrib(_,_,[ AttribBoolArg(b) ],_,_,_,_)) -> Some(b) | _ -> None +let TryFindFSharpBoolAttribute g nm attrs = TryFindFSharpBoolAttributeWithDefault true g nm attrs +let TryFindFSharpBoolAttributeAssumeFalse g nm attrs = TryFindFSharpBoolAttributeWithDefault false g nm attrs + let TryFindFSharpInt32Attribute g nm attrs = match TryFindFSharpAttribute g nm attrs with | Some(Attrib(_,_,[ AttribInt32Arg(b) ],_,_,_,_)) -> Some b @@ -2554,6 +2568,68 @@ let TryFindILAttributeOpt attr attrs = | Some (AttribInfo (atref,_)) -> HasILAttribute atref attrs | _ -> false +/// Analyze three cases for attributes declared on type definitions: IL-declared attributes, F#-declared attributes and +/// provided attributes. +// +// This is used for AttributeUsageAttribute, DefaultMemberAttribute and ConditionalAttribute (on attribute types) +let TryBindTyconRefAttribute g (m:range) (AttribInfo (atref,_) as args) (tcref:TyconRef) f1 f2 f3 = + ignore m; ignore f3 + match metadataOfTycon tcref.Deref with +#if EXTENSIONTYPING + | ProvidedTypeMetadata info -> + let provAttribs = info.ProvidedType.PApply((fun a -> (a :> IProvidedCustomAttributeProvider)),m) + match provAttribs.PUntaint((fun a -> a.GetAttributeConstructorArgs(provAttribs.TypeProvider.PUntaintNoFailure(id), atref.FullName)),m) with + | Some args -> f3 args + | None -> None +#endif + | ILTypeMetadata (_,tdef) -> + match TryDecodeILAttribute g atref tdef.CustomAttrs with + | Some attr -> f1 attr + | _ -> None + | FSharpOrArrayOrByrefOrTupleOrExnTypeMetadata -> + match TryFindFSharpAttribute g args tcref.Attribs with + | Some attr -> f2 attr + | _ -> None + +let TryFindTyconRefBoolAttribute g m attribSpec tcref = + TryBindTyconRefAttribute g m attribSpec tcref + (function + | ([ ],_) -> Some true + | ([ILAttribElem.Bool (v) ],_) -> Some v + | _ -> None) + (function + | (Attrib(_,_,[ ],_,_,_,_)) -> Some true + | (Attrib(_,_,[ AttribBoolArg v ],_,_,_,_)) -> Some v + | _ -> None) + (function + | ([ ],_) -> Some true + | ([ Some ((:? bool as v) : obj) ],_) -> Some v + | _ -> None) + +let TryFindAttributeUsageAttribute g m 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. +/// +/// This is used to detect the 'DefaultMemberAttribute' and 'ConditionalAttribute' attributes (on type definitions) +let TryFindTyconRefStringAttribute g m attribSpec tcref = + TryBindTyconRefAttribute g m attribSpec tcref + (function ([ILAttribElem.String (Some(msg)) ],_) -> Some msg | _ -> None) + (function (Attrib(_,_,[ AttribStringArg(msg) ],_,_,_,_)) -> Some msg | _ -> None) + (function ([ Some ((:? string as msg) : obj) ], _) -> Some msg | _ -> None) + +/// Check if a type definition has a specific attribute +let TyconRefHasAttribute g m attribSpec tcref = + TryBindTyconRefAttribute g m attribSpec tcref + (fun _ -> Some ()) + (fun _ -> Some ()) + (fun _ -> Some ()) + |> Option.isSome + //------------------------------------------------------------------------- // List and reference types... //------------------------------------------------------------------------- @@ -2741,9 +2817,6 @@ module DebugPrint = begin stat let stampL _n w = -#if DEBUG - if !verboseStamps then w ^^ sepL "#" ^^ int64L _n else -#endif w let layoutTyconRef (tc:TyconRef) = wordL tc.DisplayNameWithStaticParameters |> stampL tc.Stamp @@ -2786,16 +2859,18 @@ module DebugPrint = begin (match !global_g with | None -> wordL "" | Some g -> - let sortVars (vs:(Typar * int) list) = vs |> List.sortBy (fun (v,_) -> v.DisplayName) - let sortCons (cs:(TyconRef * int) list) = cs |> List.sortBy (fun (c,_) -> c.DisplayName) - let negvs,posvs = ListMeasureVarOccsWithNonZeroExponents unt |> sortVars |> List.partition (fun (_,e) -> e<0) - let negcs,poscs = ListMeasureConOccsWithNonZeroExponents g false unt |> sortCons |> List.partition (fun (_,e) -> e<0) + let sortVars (vs:(Typar * Rational) list) = vs |> List.sortBy (fun (v,_) -> v.DisplayName) + let sortCons (cs:(TyconRef * Rational) list) = cs |> List.sortBy (fun (c,_) -> c.DisplayName) + let negvs,posvs = ListMeasureVarOccsWithNonZeroExponents unt |> sortVars |> List.partition (fun (_,e) -> SignRational e < 0) + let negcs,poscs = ListMeasureConOccsWithNonZeroExponents g false unt |> sortCons |> List.partition (fun (_,e) -> SignRational e < 0) let unparL (uv:Typar) = wordL ("'" ^ uv.DisplayName) let unconL tc = layoutTyconRef tc - let prefix = spaceListL (List.map (fun (v,e) -> if e=1 then unparL v else unparL v -- wordL (sprintf "^ %d" e)) posvs @ - List.map (fun (c,e) -> if e=1 then unconL c else unconL c -- wordL (sprintf "^ %d" e)) poscs) - let postfix = spaceListL (List.map (fun (v,e) -> if e= -1 then unparL v else unparL v -- wordL (sprintf "^ %d" (-e))) negvs @ - List.map (fun (c,e) -> if e= -1 then unconL c else unconL c -- wordL (sprintf "^ %d" (-e))) negcs) + let rationalL e = wordL (RationalToString e) + let measureToPowerL x e = if e = OneRational then x else x -- wordL "^" -- rationalL e + let prefix = spaceListL (List.map (fun (v,e) -> measureToPowerL (unparL v) e) posvs @ + List.map (fun (c,e) -> measureToPowerL (unconL c) e) poscs) + let postfix = spaceListL (List.map (fun (v,e) -> measureToPowerL (unparL v) (NegRational e)) negvs @ + List.map (fun (c,e) -> measureToPowerL (unconL c) (NegRational e)) negcs) match (negvs,negcs) with | [],[] -> prefix | _ -> prefix ^^ sepL "/" ^^ postfix) ^^ @@ -2940,11 +3015,6 @@ module DebugPrint = begin let valL (vspec:Val) = let vsL = wordL (DecompileOpName vspec.LogicalName) |> stampL vspec.Stamp - let vsL = -#if DEBUG - if !verboseStamps then vsL ^^ rightL (if isSome(vspec.PublicPath) then "+" else "-") else -#endif - vsL let vsL = vsL -- layoutAttribs (vspec.Attribs) vsL @@ -3053,7 +3123,7 @@ module DebugPrint = begin let layoutUnionCaseArgTypes argtys = sepListL (wordL "*") (List.map typeL argtys) - let ucaseL prefixL ucase = + let ucaseL prefixL (ucase: UnionCase) = let nmL = wordL (DemangleOperatorName ucase.Id.idText) match ucase.RecdFields |> List.map (fun rfld -> rfld.FormalType) with | [] -> (prefixL ^^ nmL) @@ -3151,17 +3221,6 @@ module DebugPrint = begin | Expr.Val (v,flags,_) -> let xL = valL v.Deref let xL = -#if DEBUG - if !verboseStamps then - let tag = - match v with - | VRefLocal _ -> "" - | VRefNonLocal _ -> "!!" - xL ^^ rightL tag - else -#endif - xL - let xL = match flags with | PossibleConstrainedCall _ -> xL ^^ rightL "" | CtorValUsedAsSelfInit -> xL ^^ rightL "" @@ -3450,7 +3509,7 @@ let accEntityRemap (msigty:ModuleOrNamespaceType) (entity:Entity) (mrpi,mhi) = mhi | _ -> // The field is not in the signature. Hence it is regarded as hidden. - let rfref = mkNestedRecdFieldRef tcref rfield + let rfref = tcref.MakeNestedRecdFieldRef rfield { mhi with mhiRecdFields = Zset.add rfref mhi.mhiRecdFields }) entity.AllFieldsArray |> List.foldBack (fun (ucase:UnionCase) mhi -> @@ -3460,7 +3519,7 @@ let accEntityRemap (msigty:ModuleOrNamespaceType) (entity:Entity) (mrpi,mhi) = mhi | _ -> // The constructor is not in the signature. Hence it is regarded as hidden. - let ucref = mkNestedUnionCaseRef tcref ucase + let ucref = tcref.MakeNestedUnionCaseRef ucase { mhi with mhiUnionCases = Zset.add ucref mhi.mhiUnionCases }) (entity.UnionCasesAsList) (mrpi,mhi) @@ -3497,10 +3556,6 @@ let accValRemap g aenv (msigty:ModuleOrNamespaceType) (implVal:Val) (mrpi,mhi) = (mrpi,mhi) | Some (sigVal:Val) -> // The value is in the signature. Add the repackage entry. -#if DEBUG - if !verboseStamps then dprintf "accValRemap, remap value %s#%d --> %s#%d\n" implVal.LogicalName implVal.Stamp sigVal.LogicalName sigVal.Stamp; -#endif - let mrpi = { mrpi with mrpiVals = (vref,mkLocalValRef sigVal) :: mrpi.mrpiVals } (mrpi,mhi) @@ -3599,7 +3654,7 @@ let accTyconHidingInfoAtAssemblyBoundary (tycon:Tycon) mhi = (fun (rfield:RecdField) mhi -> if not (canAccessFromEverywhere rfield.Accessibility) then let tcref = mkLocalTyconRef tycon - let rfref = mkNestedRecdFieldRef tcref rfield + let rfref = tcref.MakeNestedRecdFieldRef rfield { mhi with mhiRecdFields = Zset.add rfref mhi.mhiRecdFields } else mhi) tycon.AllFieldsArray @@ -3607,7 +3662,7 @@ let accTyconHidingInfoAtAssemblyBoundary (tycon:Tycon) mhi = (fun (ucase:UnionCase) mhi -> if not (canAccessFromEverywhere ucase.Accessibility) then let tcref = mkLocalTyconRef tycon - let ucref = mkNestedUnionCaseRef tcref ucase + let ucref = tcref.MakeNestedUnionCaseRef ucase { mhi with mhiUnionCases = Zset.add ucref mhi.mhiUnionCases } else mhi) (tycon.UnionCasesAsList) @@ -3993,7 +4048,7 @@ and accFreeInExprNonLinear opts x acc = | Expr.Const _ -> acc | Expr.Val (lvr,flags,_) -> accFreeInValFlags opts flags (accFreeValRef opts lvr acc) - | Expr.Quote (ast,{contents=Some(argTypes,argExprs,_data)},_,_,ty) -> + | Expr.Quote (ast,{contents=Some(_,argTypes,argExprs,_data)},_,_,ty) -> accFreeInExpr opts ast (accFreeInExprs opts argExprs (accFreeVarsInTys opts argTypes @@ -4266,27 +4321,29 @@ let decideStaticOptimizationConstraint g c = // Both types must be nominal for a definite result let rec checkTypes a b = let a = normalizeEnumTy g (stripTyEqnsAndMeasureEqns g a) - let b = normalizeEnumTy g (stripTyEqnsAndMeasureEqns g b) - match a, b with - | AppTy g (tcref1, _), AppTy g (tcref2, _) -> + match a with + | AppTy g (tcref1, _) -> + let b = normalizeEnumTy g (stripTyEqnsAndMeasureEqns g b) + match b with + | AppTy g (tcref2, _) -> if tyconRefEq g tcref1 tcref2 then StaticOptimizationAnswer.Yes else StaticOptimizationAnswer.No - | FunTy g (dty1, rty1), FunTy g (dty2, rty2) -> - let dtyCheck = checkTypes dty1 dty2 - if dtyCheck = StaticOptimizationAnswer.Unknown then - StaticOptimizationAnswer.Unknown - else - let rtyCheck = checkTypes rty1 rty2 - if dtyCheck = rtyCheck then rtyCheck else StaticOptimizationAnswer.Unknown - | TupleTy g (t1::ts1), TupleTy g (t2::ts2) -> - let rec iter l1 l2 prev = - match l1, l2 with - | [], [] -> prev - | t1::ts1, t2::ts2 -> - let r = checkTypes t1 t2 - if r = StaticOptimizationAnswer.Unknown || r <> prev then StaticOptimizationAnswer.Unknown else iter ts1 ts2 r - | _ -> StaticOptimizationAnswer.Unknown - let r = checkTypes t1 t2 - if r = StaticOptimizationAnswer.Unknown then StaticOptimizationAnswer.Unknown else iter ts1 ts2 r + | TupleTy g _ | FunTy g _ -> StaticOptimizationAnswer.No + | _ -> StaticOptimizationAnswer.Unknown + + | FunTy g _ -> + let b = normalizeEnumTy g (stripTyEqnsAndMeasureEqns g b) + match b with + | FunTy g _ -> StaticOptimizationAnswer.Yes + | AppTy g _ | TupleTy g _ -> StaticOptimizationAnswer.No + | _ -> StaticOptimizationAnswer.Unknown + | TupleTy g ts1 -> + let b = normalizeEnumTy g (stripTyEqnsAndMeasureEqns g b) + match b with + | TupleTy g ts2 -> + if ts1.Length = ts2.Length then StaticOptimizationAnswer.Yes + else StaticOptimizationAnswer.No + | AppTy g _ | FunTy g _ -> StaticOptimizationAnswer.No + | _ -> StaticOptimizationAnswer.Unknown | _ -> StaticOptimizationAnswer.Unknown checkTypes a b | TTyconIsStruct a -> @@ -4376,9 +4433,6 @@ and remapValReprInfo g tmenv (ValReprInfo(tpNames,arginfosl,retInfo)) = ValReprInfo(tpNames,List.mapSquared (remapArgData g tmenv) arginfosl, remapArgData g tmenv retInfo) and remapValData g tmenv d = -#if DEBUG - if !verboseStamps then dprintf "remap val data #%d\n" d.val_stamp; -#endif let ty = d.val_type let topValInfo = d.val_repr_info let ty' = ty |> remapPossibleForallTy g tmenv @@ -4454,10 +4508,10 @@ and remapExpr g (compgen:ValCopyFlag) (tmenv:Remap) x = let vf' = remapValFlags tmenv vf if vr === vr' && vf === vf' then x else Expr.Val (vr',vf',m) - | Expr.Quote (a,{contents=Some(argTypes,argExprs,data)},isFromQueryExpression,m,ty) -> + | Expr.Quote (a,{contents=Some(typeDefs,argTypes,argExprs,data)},isFromQueryExpression,m,ty) -> // fix value of compgen for both original expression and pickled AST let compgen = fixValCopyFlagForQuotations compgen - Expr.Quote (remapExpr g compgen tmenv a,{contents=Some(remapTypesAux tmenv argTypes,remapExprs g compgen tmenv argExprs,data)},isFromQueryExpression,m,remapType tmenv ty) + Expr.Quote (remapExpr g compgen tmenv a,{contents=Some(typeDefs,remapTypesAux tmenv argTypes,remapExprs g compgen tmenv argExprs,data)},isFromQueryExpression,m,remapType tmenv ty) | Expr.Quote (a,{contents=None},isFromQueryExpression,m,ty) -> Expr.Quote (remapExpr g (fixValCopyFlagForQuotations compgen) tmenv a,{contents=None},isFromQueryExpression,m,remapType tmenv ty) | Expr.Obj (_,typ,basev,basecall,overrides,iimpls,m) -> @@ -4622,7 +4676,7 @@ and remapRecdField g tmenv x = rfield_fattribs = x.rfield_fattribs |> remapAttribs g tmenv; } and remapRecdFields g tmenv (x:TyconRecdFields) = x.AllFieldsAsList |> List.map (remapRecdField g tmenv) |> MakeRecdFieldsTable -and remapUnionCase g tmenv x = +and remapUnionCase g tmenv (x:UnionCase) = { x with FieldTable = x.FieldTable |> remapRecdFields g tmenv; ReturnType = x.ReturnType |> remapType tmenv; @@ -4729,13 +4783,6 @@ and copyAndRemapAndBindTyconsAndVals g compgen tmenv tycons vs = // Values need to be copied and renamed. let vs',tmenvinner = copyAndRemapAndBindVals g compgen tmenvinner vs -#if DEBUG - if !verboseStamps then - for tycon in tycons do - dprintf "copyAndRemapAndBindTyconsAndVals: tycon %s#%d\n" tycon.LogicalName tycon.Stamp; - for v in vs do - dprintf "copyAndRemapAndBindTyconsAndVals: val %s#%d\n" v.LogicalName v.Stamp; -#endif // "if a type constructor is hidden then all its inner values and inner type constructors must also be hidden" // Hence we can just lookup the inner tycon/value mappings in the tables. @@ -4744,10 +4791,6 @@ and copyAndRemapAndBindTyconsAndVals g compgen tmenv tycons vs = let vref = try let res = tmenvinner.valRemap.[v] -#if DEBUG - if !verboseStamps then - dprintf "remaped internal value %s#%d --> %s#%d\n" v.LogicalName v.Stamp res.LogicalName res.Stamp; -#endif res with :? KeyNotFoundException -> errorR(InternalError(sprintf "couldn't remap internal value '%s'" v.LogicalName,v.Range)); @@ -4758,10 +4801,6 @@ and copyAndRemapAndBindTyconsAndVals g compgen tmenv tycons vs = let tcref = try let res = tmenvinner.tyconRefRemap.[mkLocalTyconRef tycon] -#if DEBUG - if !verboseStamps then - dprintf "remaped internal tycon %s#%d --> %s#%d\n" tycon.LogicalName tycon.Stamp res.LogicalName res.Stamp; -#endif res with :? KeyNotFoundException -> errorR(InternalError("couldn't remap internal tycon "^showL(DebugPrint.tyconL tycon),tycon.Range)); @@ -4944,7 +4983,7 @@ and remarkBind m (TBind(v,repr,_)) = //-------------------------------------------------------------------------- let isRecdOrStructFieldAllocObservable (f:RecdField) = not f.IsStatic && f.IsMutable -let ucaseAllocObservable uc = uc.FieldTable.FieldsByIndex |> Array.exists isRecdOrStructFieldAllocObservable +let ucaseAllocObservable (uc:UnionCase) = uc.FieldTable.FieldsByIndex |> Array.exists isRecdOrStructFieldAllocObservable let isUnionCaseAllocObservable (uc:UnionCaseRef) = uc.UnionCase |> ucaseAllocObservable let isRecdOrUnionOrStructTyconAllocObservable (_g:TcGlobals) (tycon:Tycon) = @@ -4987,6 +5026,9 @@ let ComputeFieldName tycon f = // Helpers for building code contained in the initial environment //------------------------------------------------------------------------- +let isQuotedExprTy g ty = match ty with AppTy g (tcref,_) -> tyconRefEq g tcref g.expr_tcr | _ -> false +let destQuotedExprTy g ty = match ty with AppTy g (_,[ty]) -> ty | _ -> failwith "destQuotedExprTy" + let mkQuotedExprTy g ty = TType_app(g.expr_tcr,[ty]) let mkRawQuotedExprTy g = TType_app(g.raw_expr_tcr,[]) @@ -5408,6 +5450,8 @@ let mkRecdFieldSet g (e,fref:RecdFieldRef,tinst,e2,m) = let wrap,e' = mkExprAddrOfExpr g fref.Tycon.IsStructOrEnumTycon false DefinitelyMutates e None m wrap (mkRecdFieldSetViaExprAddr(e',fref,tinst,e2,m)) +let mkArray (argty, args, m) = Expr.Op(TOp.Array, [argty],args,m) + //--------------------------------------------------------------------------- // Compute fixups for letrec's. // @@ -5555,7 +5599,7 @@ let mkFolders (folders : _ ExprFolder) = let z = dtreeF z dtree let z = Array.fold targetF z targets z - | Expr.Quote(_e,{contents=Some(_argTypes,argExprs,_)},_,_,_) -> exprsF z argExprs + | Expr.Quote(_e,{contents=Some(_typeDefs,_argTypes,argExprs,_)},_,_,_) -> exprsF z argExprs | Expr.Quote(_e,{contents=None},_,_m,_) -> z | Expr.Obj (_n,_typ,_basev,basecall,overrides,iimpls,_m) -> let z = exprF z basecall @@ -5722,51 +5766,41 @@ let permute (sigma:int[]) (data:'T[]) = let rec existsR a b pred = if a<=b then pred a || existsR (a+1) b pred else false -let mapFoldListi f z xs = - let rec fmapi f i z l = - match l with - | [] -> z,[] - | x::xs -> let z,x = f i z x - let z,xs = fmapi f (i+1) z xs - z,x::xs - fmapi f 0 z xs - -/// Given expr = xi = [| x0; ... xN |] -/// Given sigma a permutation to apply to the xi. -/// Return (bindings',expr') such that: -/// (a) xi are permutated under sigma, xi -> position sigma(i). -///------ -/// Motivation: -/// opt.fs - put record field assignments in order under known effect information -/// ilxgen.fs - put record field assignments in order if necessary (no optimisations) -/// under unknown-effect information. -let permuteExpr (sigma:int[]) (expr: Expr[]) (typ: TType[]) (names:string[]) = +// Given a permutation for record fields, work out the highest entry that we must lift out +// of a record initialization. Lift out xi if xi goes to position that will be preceded by an expr with an effect +// that originally followed xi. If one entry gets lifted then everything before it also gets lifted. +let liftAllBefore sigma = let invSigma = inversePerm sigma - let liftPosition i = - // Lift out xi if - // LC2: xi goes to position that will be preceded by - // an expr with an effect that originally followed xi - let i' = sigma.[i] - existsR 0 (i' - 1) (fun j' -> invSigma.[j'] > i) - - let rewrite i rbinds (xi:Expr) = - if liftPosition i then - let tmpv,tmpe = mkCompGenLocal xi.Range names.[i] typ.[i] - let bind = mkCompGenBind tmpv xi - bind :: rbinds,tmpe + + let lifted = + [ for i in 0 .. sigma.Length - 1 do + let i' = sigma.[i] + if existsR 0 (i' - 1) (fun j' -> invSigma.[j'] > i) then + yield i ] + + if lifted.IsEmpty then 0 else List.max lifted + 1 + + +/// Put record field assignments in order. +// +let permuteExprList (sigma:int[]) (exprs: Expr list) (typ: TType list) (names:string list) = + let typ,names = (Array.ofList typ, Array.ofList names) + + let liftLim = liftAllBefore sigma + + let rewrite rbinds (i, expri:Expr) = + if i < liftLim then + let tmpvi,tmpei = mkCompGenLocal expri.Range names.[i] typ.[i] + let bindi = mkCompGenBind tmpvi expri + tmpei, bindi :: rbinds else - rbinds,xi + expri, rbinds - let xis = Array.toList expr - let rbinds,xis = mapFoldListi rewrite [] xis - let binds = List.rev rbinds - let expr = permute sigma (Array.ofList xis) - binds,expr + let newExprs, reversedBinds = List.mapFold rewrite [] (exprs |> List.mapi (fun i x -> (i,x))) + let binds = List.rev reversedBinds + let reorderedExprs = permute sigma (Array.ofList newExprs) + binds,Array.toList reorderedExprs -let permuteExprList (sigma:int array) (expr: Expr list) (typ: TType list) (names:string list) = - let binds,expr = permuteExpr sigma (Array.ofList expr) (Array.ofList typ) (Array.ofList names) - binds,Array.toList expr - //------------------------------------------------------------------------- // Build record expressions... //------------------------------------------------------------------------- @@ -5920,15 +5954,38 @@ let mkCallSeqSingleton g m ty1 arg1 = let mkCallSeqEmpty g m ty1 = mkApps g (typedExprForIntrinsic g m g.seq_empty_info, [[ty1]], [ ], m) -let mkCallUnpickleQuotation g m e1 e2 e3 e4 = +let mkCallDeserializeQuotationFSharp20Plus g m e1 e2 e3 e4 = let args = [ e1; e2; e3; e4 ] - mkApps g (typedExprForIntrinsic g m g.unpickle_quoted_info, [], [ mkTupledNoTypes g m args ], m) + mkApps g (typedExprForIntrinsic g m g.deserialize_quoted_FSharp_20_plus_info, [], [ mkTupledNoTypes g m args ], m) + +let mkCallDeserializeQuotationFSharp40Plus g m e1 e2 e3 e4 e5 = + let args = [ e1; e2; e3; e4; e5 ] + mkApps g (typedExprForIntrinsic g m g.deserialize_quoted_FSharp_40_plus_info, [], [ mkTupledNoTypes g m args ], m) let mkCallCastQuotation g m ty e1 = mkApps g (typedExprForIntrinsic g m g.cast_quotation_info, [[ty]], [ e1 ], m) -let mkCallLiftValue g m ty e1 = - mkApps g (typedExprForIntrinsic g m g.lift_value_info , [[ty]], [ e1], m) +let mkCallLiftValueWithName g m ty nm e1 = + let vref = ValRefForIntrinsic g.lift_value_with_name_info + // Use "Expr.ValueWithName" if it exists in FSharp.Core + match vref.TryDeref with + | Some _ -> + mkApps g (typedExprForIntrinsic g m g.lift_value_with_name_info , [[ty]], [mkTupledNoTypes g m [e1; mkString g m nm]], m) + | None -> + mkApps g (typedExprForIntrinsic g m g.lift_value_info , [[ty]], [e1], m) + +let mkCallLiftValueWithDefn g m qty e1 = + assert isQuotedExprTy g qty + let ty = destQuotedExprTy g qty + let vref = ValRefForIntrinsic g.lift_value_with_defn_info + // Use "Expr.WithValue" if it exists in FSharp.Core + match vref.TryDeref with + | Some _ -> + let copyOfExpr = copyExpr g ValCopyFlag.CloneAll e1 + let quoteOfCopyOfExpr = Expr.Quote(copyOfExpr, ref None, false, m, qty) + mkApps g (typedExprForIntrinsic g m g.lift_value_with_defn_info , [[ty]], [mkTupledNoTypes g m [e1; quoteOfCopyOfExpr]], m) + | None -> + Expr.Quote(e1, ref None, false, m, qty) let mkCallCheckThis g m ty e1 = mkApps g (typedExprForIntrinsic g m g.check_this_info, [[ty]], [e1], m) @@ -6021,6 +6078,12 @@ let mkCompilationSourceNameAttr g n = [ILAttribElem.String(Some n)], []) +let mkCompilationMappingAttrForQuotationResource g (nm, tys: ILTypeRef list) = + 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) ]) ], + []) + #if EXTENSIONTYPING //---------------------------------------------------------------------------- // Decode extensible typing attributes @@ -6031,8 +6094,7 @@ let isTypeProviderAssemblyAttr (cattr:ILAttribute) = let TryDecodeTypeProviderAssemblyAttr ilg (cattr:ILAttribute) = if isTypeProviderAssemblyAttr cattr then - // ok to use ecmaILGlobals here since we're querying metadata, not making it - let parms, _args = decodeILAttribData ilg cattr None + 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 @@ -6064,8 +6126,7 @@ let tref_AutoOpenAttr () = mkILTyRef(IlxSettings.ilxFsharpCoreLibScopeRef (), tn let IsSignatureDataVersionAttr cattr = isILAttrib (tref_SignatureDataVersionAttr ()) cattr let TryFindAutoOpenAttr (ilg : IL.ILGlobals) cattr = if isILAttrib (tref_AutoOpenAttr ()) cattr then - // ok to use ecmaILGlobals here since we're querying metadata, not making it - match decodeILAttribData ilg cattr None with + match decodeILAttribData ilg cattr with | [ILAttribElem.String s],_ -> s | [],_ -> None | _ -> @@ -6079,8 +6140,7 @@ let tref_InternalsVisibleToAttr (ilg : IL.ILGlobals) = let TryFindInternalsVisibleToAttr ilg cattr = if isILAttrib (tref_InternalsVisibleToAttr ilg) cattr then - // ok to use ecmaILGlobals here since we're querying metadata, not making it - match decodeILAttribData ilg cattr None with + match decodeILAttribData ilg cattr with | [ILAttribElem.String s],_ -> s | [],_ -> None | _ -> @@ -6091,8 +6151,7 @@ let TryFindInternalsVisibleToAttr ilg cattr = let IsMatchingSignatureDataVersionAttr ilg ((v1,v2,v3,_) : ILVersionInfo) cattr = IsSignatureDataVersionAttr cattr && - // ok to use ecmaILGlobals here since we're querying metadata, not making it - match decodeILAttribData ilg cattr None with + match decodeILAttribData ilg cattr with | [ILAttribElem.Int32 u1; ILAttribElem.Int32 u2;ILAttribElem.Int32 u3 ],_ -> (v1 = uint16 u1) && (v2 = uint16 u2) && (v3 = uint16 u3) | _ -> @@ -6839,28 +6898,34 @@ let TypeNullNever g ty = (isStructTy g underlyingTy) || (isByrefTy g underlyingTy) -let TypeNullIsExtraValue g ty = - isILReferenceTy g ty || - isDelegateTy g ty || - (not (TypeNullNever g ty) && - isAppTy g ty && - TryFindFSharpBoolAttribute g g.attrib_AllowNullLiteralAttribute (tyconOfAppTy g ty).Attribs = Some(true)) + + +/// Indicates if the type admits the use of 'null' as a value +let TypeNullIsExtraValue g m ty = + if isILReferenceTy g ty || isDelegateTy g ty then + // Putting AllowNullLiteralAttribute(false) on an IL or provided type means 'null' can't be used with that type + not (isAppTy g ty && TryFindTyconRefBoolAttribute g m g.attrib_AllowNullLiteralAttribute (tcrefOfAppTy g ty) = Some(false)) + elif TypeNullNever g ty then + false + else + // Putting AllowNullLiteralAttribute(true) on an F# type means 'null' can be used with that type + isAppTy g ty && TryFindTyconRefBoolAttribute g m g.attrib_AllowNullLiteralAttribute (tcrefOfAppTy g ty) = Some(true) let TypeNullIsTrueValue g ty = (isAppTy g ty && IsUnionTypeWithNullAsTrueValue g (tyconOfAppTy g ty)) || (isUnitTy g ty) -let TypeNullNotLiked g ty = - not (TypeNullIsExtraValue g ty) +let TypeNullNotLiked g m ty = + not (TypeNullIsExtraValue g m ty) && not (TypeNullIsTrueValue g ty) && not (TypeNullNever g ty) -let TypeSatisfiesNullConstraint g ty = - TypeNullIsExtraValue g ty +let TypeSatisfiesNullConstraint g m ty = + TypeNullIsExtraValue g m ty -let rec TypeHasDefaultValue g ty = +let rec TypeHasDefaultValue g m ty = let ty = stripTyEqnsAndMeasureEqns g ty - TypeSatisfiesNullConstraint g ty + TypeSatisfiesNullConstraint g m ty || (isStructTy g ty && // Is it an F# struct type? (if isFSharpStructTy g ty then @@ -6871,9 +6936,9 @@ let rec TypeHasDefaultValue g ty = // We can ignore fields with the DefaultValue(false) attribute |> List.filter (fun fld -> not (TryFindFSharpBoolAttribute g g.attrib_DefaultValueAttribute fld.FieldAttribs = Some(false))) - flds |> List.forall (actualTyOfRecdField (mkTyconRefInst tcref tinst) >> TypeHasDefaultValue g) + flds |> List.forall (actualTyOfRecdField (mkTyconRefInst tcref tinst) >> TypeHasDefaultValue g m) elif isTupleStructTy g ty then - destTupleTy g ty |> List.forall (TypeHasDefaultValue g) + destTupleTy g ty |> List.forall (TypeHasDefaultValue g m) else // All struct types defined in other .NET languages have a DefaultValue regardless of their // instantiation @@ -6907,9 +6972,9 @@ let canUseTypeTestFast g ty = not (TypeNullNever g ty) // Can we use the fast helper for the 'LanguagePrimitives.IntrinsicFunctions.UnboxGeneric'? -let canUseUnboxFast g ty = +let canUseUnboxFast g m ty = not (isTyparTy g ty) && - not (TypeNullNotLiked g ty) + not (TypeNullNotLiked g m ty) //-------------------------------------------------------------------------- @@ -6962,7 +7027,7 @@ let ModuleNameIsMangled g attrs = let CompileAsEvent g attrs = HasFSharpAttribute g g.attrib_CLIEventAttribute attrs -let MemberIsCompiledAsInstance g parent isExtensionMember membInfo attrs = +let MemberIsCompiledAsInstance g parent isExtensionMember (membInfo:ValMemberInfo) attrs = // All extension members are compiled as static members if isExtensionMember then false // Anything implementing a dispatch slot is compiled as an instance member @@ -7122,11 +7187,21 @@ let doesActivePatternHaveFreeTypars g (v:ValRef) = type ExprRewritingEnv = { PreIntercept: ((Expr -> Expr) -> Expr -> Expr option) option; PostTransform: Expr -> Expr option; + PreInterceptBinding: ((Expr -> Expr) -> Binding -> Binding option) option; IsUnderQuotations: bool } -let rec rewrite_bind env (TBind(v,e,letSeqPtOpt)) = TBind(v,RewriteExpr env e,letSeqPtOpt) +let rec rewriteBind env bind = + match env.PreInterceptBinding with + | Some f -> + match f (RewriteExpr env) bind with + | Some res -> res + | None -> rewriteBindStructure env bind + | None -> rewriteBindStructure env bind + +and rewriteBindStructure env (TBind(v,e,letSeqPtOpt)) = + TBind(v,RewriteExpr env e,letSeqPtOpt) -and rewrite_binds env binds = FlatList.map (rewrite_bind env) binds +and rewriteBinds env binds = FlatList.map (rewriteBind env) binds and RewriteExpr env expr = match expr with @@ -7160,8 +7235,8 @@ and rewriteExprStructure env expr = if f0 === f0' && args === args' then expr else Expr.App(f0',f0ty,tyargs,args',m) - | Expr.Quote(ast,{contents=Some(argTypes,argExprs,data)},isFromQueryExpression,m,ty) -> - Expr.Quote((if env.IsUnderQuotations then RewriteExpr env ast else ast),{contents=Some(argTypes,rewriteExprs env argExprs,data)},isFromQueryExpression,m,ty) + | Expr.Quote(ast,{contents=Some(typeDefs,argTypes,argExprs,data)},isFromQueryExpression,m,ty) -> + Expr.Quote((if env.IsUnderQuotations then RewriteExpr env ast else ast),{contents=Some(typeDefs,argTypes,rewriteExprs env argExprs,data)},isFromQueryExpression,m,ty) | Expr.Quote(ast,{contents=None},isFromQueryExpression,m,ty) -> Expr.Quote((if env.IsUnderQuotations then RewriteExpr env ast else ast),{contents=None},isFromQueryExpression,m,ty) @@ -7190,7 +7265,7 @@ and rewriteExprStructure env expr = mkAndSimplifyMatch spBind exprm m ty dtree' targets' | Expr.LetRec (binds,e,m,_) -> - let binds = rewrite_binds env binds + let binds = rewriteBinds env binds let e' = RewriteExpr env e Expr.LetRec(binds,e',m,NewFreeVarsCache()) @@ -7214,7 +7289,7 @@ and rewriteLinearExpr env expr contf = | None -> match expr with | Expr.Let (bind,body,m,_) -> - let bind = rewrite_bind env bind + let bind = rewriteBind env bind rewriteLinearExpr env body (contf << (fun body' -> mkLetBind m bind body')) | Expr.Sequential (e1,e2,dir,spSeq,m) -> @@ -7249,7 +7324,7 @@ and rewriteDecisionTree env x = TDSwitch (e',cases',dflt',m) | TDBind (bind,body) -> - let bind' = rewrite_bind env bind + let bind' = rewriteBind env bind let body = rewriteDecisionTree env body TDBind (bind',body) @@ -7272,8 +7347,8 @@ and rewriteModuleOrNamespaceDefs env x = List.map (rewriteModuleOrNamespaceDef e and rewriteModuleOrNamespaceDef env x = match x with - | TMDefRec(tycons,binds,mbinds,m) -> TMDefRec(tycons,rewrite_binds env binds,rewriteModuleOrNamespaceBindings env mbinds,m) - | TMDefLet(bind,m) -> TMDefLet(rewrite_bind env bind,m) + | TMDefRec(tycons,binds,mbinds,m) -> TMDefRec(tycons,rewriteBinds env binds,rewriteModuleOrNamespaceBindings env mbinds,m) + | TMDefLet(bind,m) -> TMDefLet(rewriteBind env bind,m) | TMDefDo(e,m) -> TMDefDo(RewriteExpr env e,m) | TMDefs defs -> TMDefs(rewriteModuleOrNamespaceDefs env defs) | TMAbstract mexpr -> TMAbstract(rewriteModuleOrNamespaceExpr env mexpr) @@ -7296,9 +7371,6 @@ let MakeExportRemapping viewedCcu (mspec:ModuleOrNamespace) = let accEntityRemap (entity:Entity) acc = match tryRescopeEntity viewedCcu entity with | Some eref -> -#if DEBUG - if !verboseStamps then dprintf "adding export remapping for entity %s#%d\n" entity.LogicalName entity.Stamp; -#endif addTyconRefRemap (mkLocalTyconRef entity) eref acc | None -> if entity.IsNamespace then @@ -7310,9 +7382,6 @@ let MakeExportRemapping viewedCcu (mspec:ModuleOrNamespace) = // The acc contains the entity remappings match tryRescopeVal viewedCcu acc vspec with | Some vref -> -#if DEBUG - if !verboseStamps then dprintf "adding export remapping for value %s#%d\n" vspec.LogicalName vspec.Stamp; -#endif {acc with valRemap=acc.valRemap.Add vspec vref } | None -> error(InternalError("Unexpected value without a pubpath when remapping assembly data",vspec.Range)) @@ -7481,7 +7550,7 @@ let EvalArithBinOp (opInt8, opInt16, opInt32, opInt64, opUInt8, opUInt16, opUInt | _ -> error (Error ( FSComp.SR.tastNotAConstantExpression(),m)) with :? System.OverflowException -> error (Error ( FSComp.SR.tastConstantExpressionOverflow(),m)) -// See also PostTypecheckSemanticChecks.CheckAttribArgExpr, which must match this precisely +// See also PostTypeCheckSemanticChecks.CheckAttribArgExpr, which must match this precisely let rec EvalAttribArgExpr g x = match x with diff --git a/src/fsharp/tastops.fsi b/src/fsharp/TastOps.fsi similarity index 93% rename from src/fsharp/tastops.fsi rename to src/fsharp/TastOps.fsi index c5591f84e1f..4ee803a49fc 100644 --- a/src/fsharp/tastops.fsi +++ b/src/fsharp/TastOps.fsi @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -/// Derived expression manipulation and construction functions. +/// Defines derived expression manipulation and construction functions. module internal Microsoft.FSharp.Compiler.Tastops open System.Text @@ -11,10 +11,11 @@ open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.Range +open Microsoft.FSharp.Compiler.Rational open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Layout open Microsoft.FSharp.Compiler.Lib @@ -278,6 +279,7 @@ type TyconRefMultiMap<'T> = member Find : TyconRef -> 'T list member Add : TyconRef * 'T -> TyconRefMultiMap<'T> static member Empty : TyconRefMultiMap<'T> + static member OfList : (TyconRef * 'T) list -> TyconRefMultiMap<'T> //------------------------------------------------------------------------- @@ -532,12 +534,15 @@ val getErasedTypes : TcGlobals -> TType -> TType list //------------------------------------------------------------------------- // Unit operations //------------------------------------------------------------------------- + val MeasurePower : MeasureExpr -> int -> MeasureExpr -val ListMeasureVarOccsWithNonZeroExponents : MeasureExpr -> (Typar * int) list -val ListMeasureConOccsWithNonZeroExponents : TcGlobals -> bool -> MeasureExpr -> (TyconRef * int) list +val ListMeasureVarOccsWithNonZeroExponents : MeasureExpr -> (Typar * Rational) list +val ListMeasureConOccsWithNonZeroExponents : TcGlobals -> bool -> MeasureExpr -> (TyconRef * Rational) list val ProdMeasures : MeasureExpr list -> MeasureExpr -val MeasureVarExponent : Typar -> MeasureExpr -> int -val MeasureConExponent : TcGlobals -> bool -> TyconRef -> MeasureExpr -> int +val MeasureVarExponent : Typar -> MeasureExpr -> Rational +val MeasureConExponent : TcGlobals -> bool -> TyconRef -> MeasureExpr -> Rational +val normalizeMeasure : TcGlobals -> MeasureExpr -> MeasureExpr + //------------------------------------------------------------------------- // Members @@ -1000,13 +1005,13 @@ val ModuleNameIsMangled : TcGlobals -> Attribs -> bool val CompileAsEvent : TcGlobals -> Attribs -> bool -val TypeNullIsExtraValue : TcGlobals -> TType -> bool +val TypeNullIsExtraValue : TcGlobals -> range -> TType -> bool val TypeNullIsTrueValue : TcGlobals -> TType -> bool -val TypeNullNotLiked : TcGlobals -> TType -> bool +val TypeNullNotLiked : TcGlobals -> range -> TType -> bool val TypeNullNever : TcGlobals -> TType -> bool -val TypeSatisfiesNullConstraint : TcGlobals -> TType -> bool -val TypeHasDefaultValue : TcGlobals -> TType -> bool +val TypeSatisfiesNullConstraint : TcGlobals -> range -> TType -> bool +val TypeHasDefaultValue : TcGlobals -> range -> TType -> bool val isAbstractTycon : Tycon -> bool @@ -1095,6 +1100,8 @@ val destInt32 : Expr -> int32 option // Primitives associated with quotations //------------------------------------------------------------------------- +val isQuotedExprTy : TcGlobals -> TType -> bool +val destQuotedExprTy : TcGlobals -> TType -> TType val mkQuotedExprTy : TcGlobals -> TType -> TType val mkRawQuotedExprTy : TcGlobals -> TType val mspec_Type_GetTypeFromHandle : ILGlobals -> ILMethodSpec @@ -1113,7 +1120,7 @@ val mkCallGetGenericEREqualityComparer : TcGlobals -> range -> Expr val mkCallGetGenericPEREqualityComparer : TcGlobals -> range -> Expr val mkCallUnboxFast : TcGlobals -> range -> TType -> Expr -> Expr -val canUseUnboxFast : TcGlobals -> TType -> bool +val canUseUnboxFast : TcGlobals -> range -> TType -> bool val mkCallDispose : TcGlobals -> range -> TType -> Expr -> Expr val mkCallSeq : TcGlobals -> range -> TType -> Expr -> Expr @@ -1140,9 +1147,11 @@ val mkCallSubtractionOperator : TcGlobals -> range -> TType -> Ex val mkCallGenericEqualityWithComparerOuter : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -> Expr val mkCallGenericHashWithComparerOuter : TcGlobals -> range -> TType -> Expr -> Expr -> Expr -val mkCallUnpickleQuotation : 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 mkCallCastQuotation : TcGlobals -> range -> TType -> Expr -> Expr -val mkCallLiftValue : TcGlobals -> range -> TType -> Expr -> Expr +val mkCallLiftValueWithName : TcGlobals -> range -> TType -> string -> Expr -> Expr +val mkCallLiftValueWithDefn : TcGlobals -> range -> TType -> Expr -> Expr val mkCallSeqCollect : TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr val mkCallSeqUsing : TcGlobals -> range -> TType -> TType -> Expr -> Expr -> Expr val mkCallSeqDelay : TcGlobals -> range -> TType -> Expr -> Expr @@ -1169,6 +1178,8 @@ val mkCallQuoteToLinqLambdaExpression : TcGlobals -> range -> TType -> Expr -> E val mkCallGetQuerySourceAsEnumerable : TcGlobals -> range -> TType -> TType -> Expr -> Expr val mkCallNewQuerySource : TcGlobals -> range -> TType -> TType -> Expr -> Expr +val mkArray : TType * Exprs * range -> Expr + //------------------------------------------------------------------------- // operations primarily associated with the optimization to fix // up loops to generate .NET code that does not include array bound checks @@ -1183,19 +1194,34 @@ val mkLdelem : TcGlobals -> range -> TType -> Expr -> Expr -> Expr // Analyze attribute sets //------------------------------------------------------------------------- -val TryDecodeILAttribute : TcGlobals -> ILTypeRef -> ILScopeRef option -> ILAttributes -> (ILAttribElem list * ILAttributeNamedArg list) option -val TryFindILAttribute : Env.BuiltinAttribInfo -> ILAttributes -> bool -val TryFindILAttributeOpt : Env.BuiltinAttribInfo option -> ILAttributes -> bool +val TryDecodeILAttribute : TcGlobals -> ILTypeRef -> ILAttributes -> (ILAttribElem list * ILAttributeNamedArg list) option +val TryFindILAttribute : BuiltinAttribInfo -> ILAttributes -> bool +val TryFindILAttributeOpt : BuiltinAttribInfo option -> ILAttributes -> bool + +val IsMatchingFSharpAttribute : TcGlobals -> BuiltinAttribInfo -> Attrib -> bool +val IsMatchingFSharpAttributeOpt : TcGlobals -> BuiltinAttribInfo option -> Attrib -> bool +val HasFSharpAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> bool +val HasFSharpAttributeOpt : TcGlobals -> BuiltinAttribInfo option -> Attribs -> bool +val TryFindFSharpAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> Attrib option +val TryFindFSharpAttributeOpt : TcGlobals -> BuiltinAttribInfo option -> Attribs -> Attrib option +val TryFindFSharpBoolAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> bool option +val TryFindFSharpBoolAttributeAssumeFalse : TcGlobals -> BuiltinAttribInfo -> Attribs -> bool option +val TryFindFSharpStringAttribute : TcGlobals -> BuiltinAttribInfo -> Attribs -> string 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 + +/// 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 + +/// Try to find a specific attribute on a type definition +val TyconRefHasAttribute : TcGlobals -> range -> BuiltinAttribInfo -> TyconRef -> bool -val IsMatchingFSharpAttribute : TcGlobals -> Env.BuiltinAttribInfo -> Attrib -> bool -val IsMatchingFSharpAttributeOpt : TcGlobals -> Env.BuiltinAttribInfo option -> Attrib -> bool -val HasFSharpAttribute : TcGlobals -> Env.BuiltinAttribInfo -> Attribs -> bool -val HasFSharpAttributeOpt : TcGlobals -> Env.BuiltinAttribInfo option -> Attribs -> bool -val TryFindFSharpAttribute : TcGlobals -> Env.BuiltinAttribInfo -> Attribs -> Attrib option -val TryFindFSharpAttributeOpt : TcGlobals -> Env.BuiltinAttribInfo option -> Attribs -> Attrib option -val TryFindFSharpBoolAttribute : TcGlobals -> Env.BuiltinAttribInfo -> Attribs -> bool option -val TryFindFSharpStringAttribute : TcGlobals -> Env.BuiltinAttribInfo -> Attribs -> string option -val TryFindFSharpInt32Attribute : TcGlobals -> Env.BuiltinAttribInfo -> Attribs -> int32 option +/// Try to find the AttributeUsage attribute, looking for the value of the AllowMultiple named parameter +val TryFindAttributeUsageAttribute : TcGlobals -> range -> TyconRef -> bool option #if EXTENSIONTYPING /// returns Some(assemblyName) for success @@ -1211,6 +1237,7 @@ val IsMatchingSignatureDataVersionAttr : IL.ILGlobals -> ILVersionInfo -> ILAttr val mkCompilationMappingAttr : TcGlobals -> int -> ILAttribute val mkCompilationMappingAttrWithSeqNum : TcGlobals -> int -> int -> ILAttribute val mkCompilationMappingAttrWithVariantNumAndSeqNum : TcGlobals -> int -> int -> int -> ILAttribute +val mkCompilationMappingAttrForQuotationResource : TcGlobals -> string * ILTypeRef list -> ILAttribute val mkCompilationArgumentCountsAttr : TcGlobals -> int list -> ILAttribute val mkCompilationSourceNameAttr : TcGlobals -> string -> ILAttribute val mkSignatureDataVersionAttr : TcGlobals -> ILVersionInfo -> ILAttribute @@ -1271,14 +1298,14 @@ type StaticOptimizationAnswer = | Yes = 1y | No = -1y | Unknown = 0y -val DecideStaticOptimizations : Env.TcGlobals -> StaticOptimization list -> StaticOptimizationAnswer -val mkStaticOptimizationExpr : Env.TcGlobals -> StaticOptimization list * Expr * Expr * range -> Expr +val DecideStaticOptimizations : TcGlobals -> StaticOptimization list -> StaticOptimizationAnswer +val mkStaticOptimizationExpr : TcGlobals -> StaticOptimization list * Expr * Expr * range -> Expr //--------------------------------------------------------------------------- // Build for loops //------------------------------------------------------------------------- -val mkFastForLoop : Env.TcGlobals -> SequencePointInfoForForLoop * range * Val * Expr * bool * Expr * Expr -> Expr +val mkFastForLoop : TcGlobals -> SequencePointInfoForForLoop * range * Val * Expr * bool * Expr * Expr -> Expr //--------------------------------------------------------------------------- // Active pattern helpers @@ -1288,16 +1315,16 @@ type ActivePatternElemRef with member Name : string val TryGetActivePatternInfo : ValRef -> PrettyNaming.ActivePatternInfo option -val mkChoiceCaseRef : Env.TcGlobals -> range -> int -> int -> UnionCaseRef +val mkChoiceCaseRef : TcGlobals -> range -> int -> int -> UnionCaseRef type PrettyNaming.ActivePatternInfo with member Names : string list member IsTotal: bool - member ResultType : Env.TcGlobals -> range -> TType list -> TType - member OverallType : Env.TcGlobals -> range -> TType -> TType list -> TType + member ResultType : TcGlobals -> range -> TType list -> TType + member OverallType : TcGlobals -> range -> TType -> TType list -> TType -val doesActivePatternHaveFreeTypars : Env.TcGlobals -> ValRef -> bool +val doesActivePatternHaveFreeTypars : TcGlobals -> ValRef -> bool //--------------------------------------------------------------------------- // Structural rewrites @@ -1307,6 +1334,7 @@ val doesActivePatternHaveFreeTypars : Env.TcGlobals -> ValRef -> bool type ExprRewritingEnv = {PreIntercept: ((Expr -> Expr) -> Expr -> Expr option) option; PostTransform: Expr -> Expr option; + PreInterceptBinding: ((Expr -> Expr) -> Binding -> Binding option) option; IsUnderQuotations: bool } val RewriteExpr : ExprRewritingEnv -> Expr -> Expr diff --git a/src/fsharp/pickle.fs b/src/fsharp/TastPickle.fs similarity index 95% rename from src/fsharp/pickle.fs rename to src/fsharp/TastPickle.fs index c80d4aab636..3d37b36b46b 100644 --- a/src/fsharp/pickle.fs +++ b/src/fsharp/TastPickle.fs @@ -1,6 +1,6 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -module internal Microsoft.FSharp.Compiler.Pickle +module internal Microsoft.FSharp.Compiler.TastPickle open System.Collections.Generic open System.Text @@ -16,8 +16,10 @@ open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Lib.Bits open Microsoft.FSharp.Compiler.Range +open Microsoft.FSharp.Compiler.Rational open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.ErrorLogger @@ -120,7 +122,7 @@ type WriterState = opubpaths: Table; onlerefs: Table; osimpletyps: Table; - oglobals : Env.TcGlobals; + oglobals : TcGlobals; ofile : string; } let pfailwith st str = ffailwith st.ofile str @@ -722,13 +724,12 @@ let pickleObjWithDanglingCcus file g scope p x = #endif -#if DEBUG let check (ilscope:ILScopeRef) (inMap : NodeInTable<_,_>) = for i = 0 to inMap.Count - 1 do let n = inMap.Get i if not (inMap.IsLinked n) then - System.Diagnostics.Debug.Assert(false, sprintf "*** unpickle: osgn %d in table %s with IL scope %s had no matching declaration (was not fixed up)\nPlease report this warning. (Note for compiler developers: to get information about which item this index relates to, enable the conditional in Pickle.p_osgn_ref to refer to the given index number and recompile an identical copy of the source for the DLL containing the data being unpickled. A message will then be printed indicating the name of the item.\n" i inMap.Name ilscope.QualifiedName) -#endif + warning(Error(FSComp.SR.pickleMissingDefinition (i, inMap.Name, ilscope.QualifiedName), range0)) + // Note for compiler developers: to get information about which item this index relates to, enable the conditional in Pickle.p_osgn_ref to refer to the given index number and recompile an identical copy of the source for the DLL containing the data being unpickled. A message will then be printed indicating the name of the item.\n" let unpickleObjWithDanglingCcus file ilscope (iILModule:ILModuleDef) u (phase2bytes:byte[]) = let st2 = @@ -775,13 +776,11 @@ let unpickleObjWithDanglingCcus file ilscope (iILModule:ILModuleDef) u (phase2by ifile=file iILModule = iILModule } let res = u st1 -#if DEBUG #if LAZY_UNPICKLE #else check ilscope st1.itycons; check ilscope st1.ivals; check ilscope st1.itypars; -#endif #endif res @@ -1064,6 +1063,10 @@ let [] itag_ldelem_any = 59 let [] itag_stelem_any = 60 let [] itag_unbox_any = 61 let [] itag_ldlen_multi = 62 +let [] itag_initobj = 63 // currently unused, added for forward compat, see https://visualfsharp.codeplex.com/SourceControl/network/forks/jackpappas/fsharpcontrib/contribution/7134 +let [] itag_initblk = 64 // currently unused, added for forward compat +let [] itag_cpobj = 65 // currently unused, added for forward compat +let [] itag_cpblk = 66 // currently unused, added for forward compat let simple_instrs = [ itag_add, AI_add; @@ -1098,7 +1101,11 @@ let simple_instrs = itag_localloc, I_localloc; itag_throw, I_throw; itag_ldlen, I_ldlen; - itag_rethrow, I_rethrow; ] + itag_rethrow, I_rethrow; + itag_rethrow, I_rethrow; + itag_initblk, I_initblk (Aligned,Nonvolatile); + itag_cpblk, I_cpblk (Aligned,Nonvolatile); + ] let encode_table = Dictionary<_,_>(300, HashIdentity.Structural) let _ = List.iter (fun (icode,i) -> encode_table.[i] <- icode) simple_instrs @@ -1134,7 +1141,11 @@ let decoders = itag_stobj, u_ILType >> (fun c -> I_stobj (Aligned,Nonvolatile,c)); itag_sizeof, u_ILType >> I_sizeof; itag_ldlen_multi, u_tup2 u_int32 u_int32 >> (fun (a,b) -> EI_ldlen_multi (a,b)); - itag_ilzero, u_ILType >> EI_ilzero; ] + itag_ilzero, u_ILType >> EI_ilzero; + itag_ilzero, u_ILType >> EI_ilzero; + itag_initobj, u_ILType >> I_initobj; + itag_cpobj, u_ILType >> I_cpobj; + ] let decode_tab = let tab = Array.init 256 (fun n -> (fun st -> ufailwith st ("no decoder for instruction "+string n))) @@ -1179,6 +1190,8 @@ let p_ILInstr x st = | I_sizeof ty -> p_byte itag_sizeof st; p_ILType ty st | EI_ldlen_multi (n,m) -> p_byte itag_ldlen_multi st; p_tup2 p_int32 p_int32 (n,m) st | EI_ilzero a -> p_byte itag_ilzero st; p_ILType a st + | I_initobj c -> p_byte itag_initobj st; p_ILType c st + | I_cpobj c -> p_byte itag_cpobj st; p_ILType c st | i -> pfailwith st (sprintf "the IL instruction '%+A' cannot be emitted" i) #endif @@ -1258,10 +1271,12 @@ let p_typs = (p_list p_typ) let fill_p_attribs,p_attribs = p_hole() -let p_nonlocal_val_ref {EnclosingEntity=a;ItemKey= key } st = +let p_nonlocal_val_ref (nlv:NonLocalValOrMemberRef) st = + let a = nlv.EnclosingEntity + let key = nlv.ItemKey let pkey = key.PartialKey - p_tcref "nlvref" a st; - p_option p_string pkey.MemberParentMangledName st; + p_tcref "nlvref" a st + p_option p_string pkey.MemberParentMangledName st p_bool pkey.MemberIsOverride st; p_string pkey.LogicalName st; p_int pkey.TotalArgCount st; @@ -1279,14 +1294,15 @@ let fill_u_typ,u_typ = u_hole() let u_typs = (u_list u_typ) let fill_u_attribs,u_attribs = u_hole() -let u_nonlocal_val_ref st = +let u_nonlocal_val_ref st : NonLocalValOrMemberRef = let a = u_tcref st let b1 = u_option u_string st let b2 = u_bool st let b3 = u_string st let c = u_int st let d = u_option u_typ st - {EnclosingEntity = a; ItemKey=ValLinkageFullKey({ MemberParentMangledName=b1; MemberIsOverride=b2;LogicalName=b3; TotalArgCount=c }, d) } + { EnclosingEntity = a + ItemKey=ValLinkageFullKey({ MemberParentMangledName=b1; MemberIsOverride=b2;LogicalName=b3; TotalArgCount=c }, d) } let u_vref st = let tag = u_byte st @@ -1394,16 +1410,65 @@ let u_trait st = TTrait (a,b,c,d,e,ref f) #if INCLUDE_METADATA_WRITER -let rec p_measure_expr unt st = - let unt = stripUnitEqnsAux false unt - match unt with - | MeasureCon tcref -> p_byte 0 st; p_tcref "measure" tcref st - | MeasureInv x -> p_byte 1 st; p_measure_expr x st - | MeasureProd(x1,x2) -> p_byte 2 st; p_measure_expr x1 st; p_measure_expr x2 st - | MeasureVar(v) -> p_byte 3 st; p_tpref v st - | MeasureOne -> p_byte 4 st + +let p_rational q st = p_int32 (GetNumerator q) st; p_int32 (GetDenominator q) st + +let p_measure_con tcref st = p_byte 0 st; p_tcref "measure" tcref st +let p_measure_var v st = p_byte 3 st; p_tpref v st +let p_measure_one = p_byte 4 + +// Pickle a unit-of-measure variable or constructor +let p_measure_varcon unt st = + match unt with + | MeasureCon tcref -> p_measure_con tcref st + | MeasureVar v -> p_measure_var v st + | _ -> pfailwith st ("p_measure_varcon: expected measure variable or constructor") + +// Pickle a positive integer power of a unit-of-measure variable or constructor +let rec p_measure_pospower unt n st = + if n = 1 + then p_measure_varcon unt st + else p_byte 2 st; p_measure_varcon unt st; p_measure_pospower unt (n-1) st + +// Pickle a non-zero integer power of a unit-of-measure variable or constructor +let p_measure_intpower unt n st = + if n < 0 + then p_byte 1 st; p_measure_pospower unt (-n) st + else p_measure_pospower unt n st + +// Pickle a rational power of a unit-of-measure variable or constructor +let rec p_measure_power unt q st = + if q = ZeroRational then p_measure_one st + elif GetDenominator q = 1 + then p_measure_intpower unt (GetNumerator q) st + else p_byte 5 st; p_measure_varcon unt st; p_rational q st + +// Pickle a normalized unit-of-measure expression +// Normalized means of the form cv1 ^ q1 * ... * cvn ^ qn +// where q1, ..., qn are non-zero, and cv1, ..., cvn are distinct unit-of-measure variables or constructors +let rec p_normalized_measure unt st = + let unt = stripUnitEqnsAux false unt + match unt with + | MeasureCon tcref -> p_measure_con tcref st + | MeasureInv x -> p_byte 1 st; p_normalized_measure x st + | MeasureProd(x1,x2) -> p_byte 2 st; p_normalized_measure x1 st; p_normalized_measure x2 st + | MeasureVar v -> p_measure_var v st + | MeasureOne -> p_measure_one st + | MeasureRationalPower(x,q) -> p_measure_power x q st + +// By normalizing the unit-of-measure and treating integer powers as a special case, +// we ensure that the pickle format for rational powers of units (byte 5 followed by +// numerator and denominator) is used only when absolutely necessary, maintaining +// compatibility of formats with versions prior to F# 4.0. +// +// See https://github.com/Microsoft/visualfsharp/issues/69 +let p_measure_expr unt st = p_normalized_measure (normalizeMeasure st.oglobals unt) st + #endif +let u_rational st = + let a,b = u_tup2 u_int32 u_int32 st in DivRational (intToRational a) (intToRational b) + let rec u_measure_expr st = let tag = u_byte st match tag with @@ -1412,6 +1477,7 @@ let rec u_measure_expr st = | 2 -> let a,b = u_tup2 u_measure_expr u_measure_expr st in MeasureProd (a,b) | 3 -> let a = u_tpref st in MeasureVar a | 4 -> MeasureOne + | 5 -> let a = u_measure_expr st in let b = u_rational st in MeasureRationalPower (a,b) | _ -> ufailwith st "u_measure_expr" #if INCLUDE_METADATA_WRITER @@ -1721,7 +1787,7 @@ and p_attrib_expr (AttribExpr(e1,e2)) st = and p_attrib_arg (AttribNamedArg(a,b,c,d)) st = p_tup4 p_string p_typ p_bool p_attrib_expr (a,b,c,d) st -and p_member_info x st = +and p_member_info (x:ValMemberInfo) st = p_tup4 (p_tcref "member_info") p_MemberFlags (p_list p_slotsig) p_bool (x.ApparentParent,x.MemberFlags,x.ImplementedSlotSigs,x.IsImplemented) st @@ -2002,7 +2068,7 @@ and u_attrib_arg st = let a,b,c,d = u_tup4 u_string u_typ u_bool u_attrib_expr st AttribNamedArg(a,b,c,d) -and u_member_info st = +and u_member_info st : ValMemberInfo = let x2,x3,x4,x5 = u_tup4 u_tcref u_MemberFlags (u_list u_slotsig) u_bool st { ApparentParent=x2; MemberFlags=x3; @@ -2462,12 +2528,12 @@ let _ = fill_u_FlatVals (u_FlatList u_Val) #if INCLUDE_METADATA_WRITER let pickleModuleOrNamespace mspec st = p_tycon_spec mspec st -let pickleModuleInfo minfo st = +let pickleCcuInfo minfo st = p_tup4 pickleModuleOrNamespace p_string p_bool (p_space 3) (minfo.mspec, minfo.compileTimeWorkingDir, minfo.usesQuotations,()) st #endif let unpickleModuleOrNamespace st = u_tycon_spec st -let unpickleModuleInfo st = +let unpickleCcuInfo st = let a,b,c,_space = u_tup4 unpickleModuleOrNamespace u_string u_bool (u_space 3) st { mspec=a; compileTimeWorkingDir=b; usesQuotations=c } diff --git a/src/fsharp/TastPickle.fsi b/src/fsharp/TastPickle.fsi new file mode 100644 index 00000000000..b70f2bd493b --- /dev/null +++ b/src/fsharp/TastPickle.fsi @@ -0,0 +1,151 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. 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 Microsoft.FSharp.Compiler.TastPickle + +open Internal.Utilities +open Microsoft.FSharp.Compiler +open Microsoft.FSharp.Compiler.AbstractIL +open Microsoft.FSharp.Compiler.AbstractIL.IL +open Microsoft.FSharp.Compiler.AbstractIL.Internal +open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library +open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.TcGlobals + +/// Represents desereialized data with a dangling set of CCU fixup thunks indexed by name +[] +type PickledDataWithReferences<'RawData> = + { /// The data that uses a collection of CcuThunks internally + RawData: 'RawData; + /// The assumptions that need to be fixed up + FixupThunks: list } + + 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 + +#if INCLUDE_METADATA_WRITER +/// The type of state written to by picklers +type WriterState + +/// A function to pickle a value into a given stateful writer +type pickler<'T> = 'T -> WriterState -> unit + +/// Serialize a byte +val internal p_byte : int -> WriterState -> unit + +/// Serialize a boolean value +val internal p_bool : bool -> WriterState -> unit + +/// Serialize an integer +val internal p_int : int -> WriterState -> unit + +/// Serialize a string +val internal p_string : string -> WriterState -> unit + +/// Serialize a lazy value (eagerly) +val internal p_lazy : pickler<'T> -> Lazy<'T> pickler + +/// Serialize a tuple of data +val inline internal p_tup2 : pickler<'T1> -> pickler<'T2> -> pickler<'T1 * 'T2> + +/// Serialize a tuple of data +val inline internal p_tup3 : pickler<'T1> -> pickler<'T2> -> pickler<'T3> -> pickler<'T1 * 'T2 * 'T3> + +/// Serialize a tuple of data +val inline internal p_tup4 : pickler<'T1> -> pickler<'T2> -> pickler<'T3> -> pickler<'T4> -> pickler<'T1 * 'T2 * 'T3 * 'T4> + +/// Serialize an array of data +val internal p_array : pickler<'T> -> pickler<'T[]> + +/// Serialize a namemap of data +val internal p_namemap : pickler<'T> -> pickler> + +/// Serialize a TAST constant +val internal p_const : pickler + +/// Serialize a TAST value reference +val internal p_vref : string -> pickler + +/// Serialize a TAST type or entity reference +val internal p_tcref : string -> pickler + +/// Serialize a TAST union case reference +val internal p_ucref : pickler + +/// Serialize a TAST expresion +val internal p_expr : pickler + +/// Serialize a TAST type +val internal p_typ : pickler + +/// Serialize a TAST description of a compilation unit +val internal pickleCcuInfo : pickler + +/// Serialize an arbitrary object using the given pickler +val pickleObjWithDanglingCcus : string -> TcGlobals -> scope:CcuThunk -> pickler<'T> -> 'T -> byte[] +#else +#endif + +/// The type of state unpicklers read from +type ReaderState + +/// A function to read a value from a given state +type unpickler<'T> = ReaderState -> 'T + +/// Deserialize a byte +val internal u_byte : ReaderState -> int + +/// Deserialize a bool +val internal u_bool : ReaderState -> bool + +/// Deserialize an integer +val internal u_int : ReaderState -> int + +/// Deserialize a string +val internal u_string : ReaderState -> string + +/// Deserialize a lazy value (eagerly) +val internal u_lazy : unpickler<'T> -> unpickler> + +/// Deserialize a tuple +val inline internal u_tup2 : unpickler<'T2> -> unpickler<'T3> -> unpickler<'T2 * 'T3> + +/// Deserialize a tuple +val inline internal u_tup3 : unpickler<'T2> -> unpickler<'T3> -> unpickler<'T4> -> unpickler<'T2 * 'T3 * 'T4> + +/// Deserialize a tuple +val inline internal u_tup4 : unpickler<'T2> -> unpickler<'T3> -> unpickler<'T4> -> unpickler<'T5> -> unpickler<'T2 * 'T3 * 'T4 * 'T5> + +/// Deserialize an array of values +val internal u_array : unpickler<'T> -> unpickler<'T[]> + +/// Deserialize a namemap +val internal u_namemap : unpickler<'T> -> unpickler> + +/// Deserialize a TAST constant +val internal u_const : unpickler + +/// Deserialize a TAST value reference +val internal u_vref : unpickler + +/// Deserialize a TAST type reference +val internal u_tcref : unpickler + +/// Deserialize a TAST union case reference +val internal u_ucref : unpickler + +/// Deserialize a TAST expression +val internal u_expr : unpickler + +/// Deserialize a TAST type +val internal u_typ : unpickler + +/// Deserialize a TAST description of a compilation unit +val internal unpickleCcuInfo : ReaderState -> PickledCcuInfo + +/// Deserialize an arbitrary object which may have holes referring to other compilation units +val internal unpickleObjWithDanglingCcus : string -> viewedScope:ILScopeRef -> ilModule:ILModuleDef -> ('T unpickler) -> byte[] -> PickledDataWithReferences<'T> + + + diff --git a/src/fsharp/env.fs b/src/fsharp/TcGlobals.fs similarity index 71% rename from src/fsharp/env.fs rename to src/fsharp/TcGlobals.fs index cb9fecc2794..6205c82efe6 100644 --- a/src/fsharp/env.fs +++ b/src/fsharp/TcGlobals.fs @@ -1,15 +1,14 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. -//------------------------------------------------------------------------- -// Define Initial Environment. A bunch of 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. The compiler generates the compiled code -// for these types and values when the the --compiling-fslib switch is -// provided when linking the FSharp.Core.dll assembly. -//------------------------------------------------------------------------- +/// Defines the global environment for all type checking. +/// +/// 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. +module internal Microsoft.FSharp.Compiler.TcGlobals -module internal Microsoft.FSharp.Compiler.Env +#nowarn "44" // This construct is deprecated. please use List.item open Internal.Utilities open Microsoft.FSharp.Compiler @@ -118,429 +117,432 @@ type public BuiltinAttribInfo = [] type public TcGlobals = - { ilg : ILGlobals; + { ilg : ILGlobals #if NO_COMPILER_BACKEND #else - ilxPubCloEnv : EraseIlxFuncs.cenv; + ilxPubCloEnv : EraseClosures.cenv #endif emitDebugInfoInQuotations : bool - compilingFslib: bool; - mlCompatibility : bool; - directoryToResolveRelativePaths : string; - fslibCcu: CcuThunk; - sysCcu: CcuThunk; - using40environment: bool; - indirectCallArrayMethods: bool; - better_tcref_map: TyconRef -> TypeInst -> TType option; - refcell_tcr_canon: TyconRef; - option_tcr_canon : TyconRef; - choice2_tcr : TyconRef; - choice3_tcr : TyconRef; - choice4_tcr : TyconRef; - choice5_tcr : TyconRef; - choice6_tcr : TyconRef; - choice7_tcr : TyconRef; - list_tcr_canon : TyconRef; - set_tcr_canon : TyconRef; - map_tcr_canon : TyconRef; - lazy_tcr_canon : TyconRef; + compilingFslib: bool + mlCompatibility : bool + directoryToResolveRelativePaths : string + fslibCcu: CcuThunk + sysCcu: CcuThunk + using40environment: bool + indirectCallArrayMethods: bool + better_tcref_map: TyconRef -> TypeInst -> TType option + refcell_tcr_canon: TyconRef + option_tcr_canon : TyconRef + choice2_tcr : TyconRef + choice3_tcr : TyconRef + choice4_tcr : TyconRef + choice5_tcr : TyconRef + choice6_tcr : TyconRef + choice7_tcr : TyconRef + list_tcr_canon : TyconRef + set_tcr_canon : TyconRef + map_tcr_canon : TyconRef + lazy_tcr_canon : TyconRef // These have a slightly different behaviour when compiling GetFSharpCoreLibraryName // hence they are 'methods' on the TcGlobals structure. - unionCaseRefEq : UnionCaseRef -> UnionCaseRef -> bool; - valRefEq : ValRef -> ValRef -> bool; - - refcell_tcr_nice: TyconRef; - option_tcr_nice : TyconRef; - list_tcr_nice : TyconRef; - lazy_tcr_nice : TyconRef; - - format_tcr : TyconRef; - expr_tcr : TyconRef; - raw_expr_tcr : TyconRef; - nativeint_tcr : TyconRef; - int32_tcr : TyconRef; - int16_tcr : TyconRef; - int64_tcr : TyconRef; - uint16_tcr : TyconRef; - uint32_tcr : TyconRef; - uint64_tcr : TyconRef; - sbyte_tcr : TyconRef; - decimal_tcr : TyconRef; - date_tcr : TyconRef; - pdecimal_tcr : TyconRef; - byte_tcr : TyconRef; - bool_tcr : TyconRef; - unit_tcr_canon : TyconRef; - unit_tcr_nice : TyconRef; - exn_tcr : TyconRef; - char_tcr : TyconRef; - float_tcr : TyconRef; - float32_tcr : TyconRef; - pfloat_tcr : TyconRef; - pfloat32_tcr : TyconRef; - pint_tcr : TyconRef; - pint8_tcr : TyconRef; - pint16_tcr : TyconRef; - pint64_tcr : TyconRef; - byref_tcr : TyconRef; - nativeptr_tcr : TyconRef; - ilsigptr_tcr : TyconRef; - fastFunc_tcr : TyconRef; - array_tcr_nice : TyconRef; - seq_tcr : TyconRef; - seq_base_tcr : TyconRef; + unionCaseRefEq : UnionCaseRef -> UnionCaseRef -> bool + valRefEq : ValRef -> ValRef -> bool + + refcell_tcr_nice: TyconRef + option_tcr_nice : TyconRef + list_tcr_nice : TyconRef + lazy_tcr_nice : TyconRef + + format_tcr : TyconRef + expr_tcr : TyconRef + raw_expr_tcr : TyconRef + nativeint_tcr : TyconRef + int32_tcr : TyconRef + int16_tcr : TyconRef + int64_tcr : TyconRef + uint16_tcr : TyconRef + uint32_tcr : TyconRef + uint64_tcr : TyconRef + sbyte_tcr : TyconRef + decimal_tcr : TyconRef + date_tcr : TyconRef + pdecimal_tcr : TyconRef + byte_tcr : TyconRef + bool_tcr : TyconRef + unit_tcr_canon : TyconRef + unit_tcr_nice : TyconRef + exn_tcr : TyconRef + char_tcr : TyconRef + float_tcr : TyconRef + float32_tcr : TyconRef + pfloat_tcr : TyconRef + pfloat32_tcr : TyconRef + pint_tcr : TyconRef + pint8_tcr : TyconRef + pint16_tcr : TyconRef + pint64_tcr : TyconRef + byref_tcr : TyconRef + nativeptr_tcr : TyconRef + ilsigptr_tcr : TyconRef + fastFunc_tcr : TyconRef + array_tcr_nice : TyconRef + seq_tcr : TyconRef + seq_base_tcr : TyconRef measureproduct_tcr : TyconRef measureinverse_tcr : TyconRef measureone_tcr : TyconRef - il_arr_tcr_map : TyconRef[]; - tuple1_tcr : TyconRef; - tuple2_tcr : TyconRef; - tuple3_tcr : TyconRef; - tuple4_tcr : TyconRef; - tuple5_tcr : TyconRef; - tuple6_tcr : TyconRef; - tuple7_tcr : TyconRef; - tuple8_tcr : TyconRef; - - tcref_IQueryable : TyconRef; - tcref_IObservable : TyconRef; - tcref_IObserver : TyconRef; - fslib_IEvent2_tcr : TyconRef; - fslib_IDelegateEvent_tcr: TyconRef; - system_Nullable_tcref : TyconRef; - system_GenericIComparable_tcref : TyconRef; - system_GenericIEquatable_tcref : TyconRef; - system_IndexOutOfRangeException_tcref : TyconRef; - int_ty : TType; - nativeint_ty : TType; - unativeint_ty : TType; - int32_ty : TType; - int16_ty : TType; - int64_ty : TType; - uint16_ty : TType; - uint32_ty : TType; - uint64_ty : TType; - sbyte_ty : TType; - byte_ty : TType; - bool_ty : TType; - string_ty : TType; - obj_ty : TType; - unit_ty : TType; - exn_ty : TType; - char_ty : TType; - decimal_ty : TType; - float_ty : TType; - float32_ty : TType; - system_Array_typ : TType; - system_Object_typ : TType; - system_IDisposable_typ : TType; - system_Value_typ : TType; - system_Delegate_typ : TType; - system_MulticastDelegate_typ : TType; - system_Enum_typ : TType; - system_Exception_typ : TType; - system_Int32_typ : TType; - system_String_typ : TType; - system_Type_typ : TType; - system_TypedReference_tcref : TyconRef option; - system_ArgIterator_tcref : TyconRef option; - system_Decimal_tcref : TyconRef; - system_SByte_tcref : TyconRef; - system_Int16_tcref : TyconRef; - system_Int32_tcref : TyconRef; - system_Int64_tcref : TyconRef; - system_IntPtr_tcref : TyconRef; - system_Bool_tcref : TyconRef; - system_Char_tcref : TyconRef; - system_Byte_tcref : TyconRef; - system_UInt16_tcref : TyconRef; - system_UInt32_tcref : TyconRef; - system_UInt64_tcref : TyconRef; - system_UIntPtr_tcref : TyconRef; - system_Single_tcref : TyconRef; - system_Double_tcref : TyconRef; - system_RuntimeArgumentHandle_tcref : TyconRef option; - system_RuntimeTypeHandle_typ : TType; - system_RuntimeMethodHandle_typ : TType; - system_MarshalByRefObject_tcref : TyconRef option; - system_MarshalByRefObject_typ : TType option; - system_Reflection_MethodInfo_typ : TType; - system_Array_tcref : TyconRef; - system_Object_tcref : TyconRef; - system_Void_tcref : TyconRef; - system_LinqExpression_tcref : TyconRef; - mk_IComparable_ty : TType; - mk_IStructuralComparable_ty : TType; - mk_IStructuralEquatable_ty : TType; - mk_IComparer_ty : TType; - mk_IEqualityComparer_ty : TType; - tcref_System_Collections_IComparer : TyconRef; - tcref_System_Collections_IEqualityComparer : TyconRef; - tcref_System_Collections_Generic_IEqualityComparer : TyconRef; - tcref_System_Collections_Generic_Dictionary : TyconRef; - tcref_System_IComparable : TyconRef; - tcref_System_IStructuralComparable : TyconRef; - tcref_System_IStructuralEquatable : TyconRef; - tcref_LanguagePrimitives : TyconRef; - attrib_CustomOperationAttribute : BuiltinAttribInfo; - attrib_ProjectionParameterAttribute : BuiltinAttribInfo; - attrib_AttributeUsageAttribute : BuiltinAttribInfo; - attrib_ParamArrayAttribute : BuiltinAttribInfo; - attrib_IDispatchConstantAttribute : BuiltinAttribInfo option; - attrib_IUnknownConstantAttribute : BuiltinAttribInfo option; - attrib_SystemObsolete : BuiltinAttribInfo; - attrib_DllImportAttribute : BuiltinAttribInfo option; - attrib_CompiledNameAttribute : BuiltinAttribInfo; - attrib_NonSerializedAttribute : BuiltinAttribInfo option; - attrib_AutoSerializableAttribute : BuiltinAttribInfo; - attrib_StructLayoutAttribute : BuiltinAttribInfo; - attrib_TypeForwardedToAttribute : BuiltinAttribInfo; - attrib_ComVisibleAttribute : BuiltinAttribInfo; - attrib_ComImportAttribute : BuiltinAttribInfo option; - attrib_FieldOffsetAttribute : BuiltinAttribInfo; - attrib_MarshalAsAttribute : BuiltinAttribInfo option; - attrib_InAttribute : BuiltinAttribInfo option; - attrib_OutAttribute : BuiltinAttribInfo; - attrib_OptionalAttribute : BuiltinAttribInfo option; - attrib_ThreadStaticAttribute : BuiltinAttribInfo option; - attrib_SpecialNameAttribute : BuiltinAttribInfo option; - attrib_VolatileFieldAttribute : BuiltinAttribInfo; - attrib_ContextStaticAttribute : BuiltinAttribInfo option; - attrib_FlagsAttribute : BuiltinAttribInfo; - attrib_DefaultMemberAttribute : BuiltinAttribInfo; - attrib_DebuggerDisplayAttribute : BuiltinAttribInfo; - attrib_DebuggerTypeProxyAttribute : BuiltinAttribInfo; - attrib_PreserveSigAttribute : BuiltinAttribInfo option; - attrib_MethodImplAttribute : BuiltinAttribInfo; - attrib_ExtensionAttribute : BuiltinAttribInfo; - tcref_System_Collections_Generic_IList : TyconRef; - tcref_System_Collections_Generic_IReadOnlyList : TyconRef; - tcref_System_Collections_Generic_ICollection : TyconRef; - tcref_System_Collections_Generic_IReadOnlyCollection : TyconRef; - tcref_System_Collections_Generic_IEnumerable : TyconRef; - tcref_System_Collections_IEnumerable : TyconRef; - tcref_System_Collections_Generic_IEnumerator : TyconRef; - tcref_System_Attribute : TyconRef; - - attrib_RequireQualifiedAccessAttribute : BuiltinAttribInfo; - attrib_EntryPointAttribute : BuiltinAttribInfo; - attrib_DefaultAugmentationAttribute : BuiltinAttribInfo; - attrib_CompilerMessageAttribute : BuiltinAttribInfo; - attrib_ExperimentalAttribute : BuiltinAttribInfo; - attrib_UnverifiableAttribute : BuiltinAttribInfo; - attrib_LiteralAttribute : BuiltinAttribInfo; - attrib_ConditionalAttribute : BuiltinAttribInfo; - attrib_OptionalArgumentAttribute : BuiltinAttribInfo; - attrib_RequiresExplicitTypeArgumentsAttribute : BuiltinAttribInfo; - attrib_DefaultValueAttribute : BuiltinAttribInfo; - attrib_ClassAttribute : BuiltinAttribInfo; - attrib_InterfaceAttribute : BuiltinAttribInfo; - attrib_StructAttribute : BuiltinAttribInfo; - attrib_ReflectedDefinitionAttribute : BuiltinAttribInfo; - attrib_AutoOpenAttribute : BuiltinAttribInfo; - attrib_CompilationRepresentationAttribute : BuiltinAttribInfo; - attrib_CompilationArgumentCountsAttribute : BuiltinAttribInfo; - attrib_CompilationMappingAttribute : BuiltinAttribInfo; - - attrib_CLIEventAttribute : BuiltinAttribInfo; - attrib_AllowNullLiteralAttribute : BuiltinAttribInfo; - attrib_CLIMutableAttribute : BuiltinAttribInfo; - attrib_NoComparisonAttribute : BuiltinAttribInfo; - attrib_NoEqualityAttribute : BuiltinAttribInfo; - attrib_CustomComparisonAttribute : BuiltinAttribInfo; - attrib_CustomEqualityAttribute : BuiltinAttribInfo; - attrib_EqualityConditionalOnAttribute : BuiltinAttribInfo; - attrib_ComparisonConditionalOnAttribute : BuiltinAttribInfo; - attrib_ReferenceEqualityAttribute : BuiltinAttribInfo; - attrib_StructuralEqualityAttribute : BuiltinAttribInfo; - attrib_StructuralComparisonAttribute : BuiltinAttribInfo; - attrib_SealedAttribute : BuiltinAttribInfo; - attrib_AbstractClassAttribute : BuiltinAttribInfo; - attrib_GeneralizableValueAttribute : BuiltinAttribInfo; - attrib_MeasureAttribute : BuiltinAttribInfo; - attrib_MeasureableAttribute : BuiltinAttribInfo; - attrib_NoDynamicInvocationAttribute : BuiltinAttribInfo; + il_arr_tcr_map : TyconRef[] + tuple1_tcr : TyconRef + tuple2_tcr : TyconRef + tuple3_tcr : TyconRef + tuple4_tcr : TyconRef + tuple5_tcr : TyconRef + tuple6_tcr : TyconRef + tuple7_tcr : TyconRef + tuple8_tcr : TyconRef + + tcref_IQueryable : TyconRef + tcref_IObservable : TyconRef + tcref_IObserver : TyconRef + fslib_IEvent2_tcr : TyconRef + fslib_IDelegateEvent_tcr: TyconRef + system_Nullable_tcref : TyconRef + system_GenericIComparable_tcref : TyconRef + system_GenericIEquatable_tcref : TyconRef + system_IndexOutOfRangeException_tcref : TyconRef + int_ty : TType + nativeint_ty : TType + unativeint_ty : TType + int32_ty : TType + int16_ty : TType + int64_ty : TType + uint16_ty : TType + uint32_ty : TType + uint64_ty : TType + sbyte_ty : TType + byte_ty : TType + bool_ty : TType + string_ty : TType + obj_ty : TType + unit_ty : TType + exn_ty : TType + char_ty : TType + decimal_ty : TType + float_ty : TType + float32_ty : TType + system_Array_typ : TType + system_Object_typ : TType + system_IDisposable_typ : TType + system_Value_typ : TType + system_Delegate_typ : TType + system_MulticastDelegate_typ : TType + system_Enum_typ : TType + system_Exception_typ : TType + system_Int32_typ : TType + system_String_typ : TType + system_Type_typ : TType + system_TypedReference_tcref : TyconRef option + system_ArgIterator_tcref : TyconRef option + system_Decimal_tcref : TyconRef + system_SByte_tcref : TyconRef + system_Int16_tcref : TyconRef + system_Int32_tcref : TyconRef + system_Int64_tcref : TyconRef + system_IntPtr_tcref : TyconRef + system_Bool_tcref : TyconRef + system_Char_tcref : TyconRef + system_Byte_tcref : TyconRef + system_UInt16_tcref : TyconRef + system_UInt32_tcref : TyconRef + system_UInt64_tcref : TyconRef + system_UIntPtr_tcref : TyconRef + system_Single_tcref : TyconRef + system_Double_tcref : TyconRef + system_RuntimeArgumentHandle_tcref : TyconRef option + system_RuntimeTypeHandle_typ : TType + system_RuntimeMethodHandle_typ : TType + system_MarshalByRefObject_tcref : TyconRef option + system_MarshalByRefObject_typ : TType option + system_Reflection_MethodInfo_typ : TType + system_Array_tcref : TyconRef + system_Object_tcref : TyconRef + system_Void_tcref : TyconRef + system_LinqExpression_tcref : TyconRef + mk_IComparable_ty : TType + mk_IStructuralComparable_ty : TType + mk_IStructuralEquatable_ty : TType + mk_IComparer_ty : TType + mk_IEqualityComparer_ty : TType + tcref_System_Collections_IComparer : TyconRef + tcref_System_Collections_IEqualityComparer : TyconRef + tcref_System_Collections_Generic_IEqualityComparer : TyconRef + tcref_System_Collections_Generic_Dictionary : TyconRef + tcref_System_IComparable : TyconRef + tcref_System_IStructuralComparable : TyconRef + tcref_System_IStructuralEquatable : TyconRef + tcref_LanguagePrimitives : TyconRef + attrib_CustomOperationAttribute : BuiltinAttribInfo + attrib_ProjectionParameterAttribute : BuiltinAttribInfo + attrib_AttributeUsageAttribute : BuiltinAttribInfo + attrib_ParamArrayAttribute : BuiltinAttribInfo + attrib_IDispatchConstantAttribute : BuiltinAttribInfo option + attrib_IUnknownConstantAttribute : BuiltinAttribInfo option + attrib_SystemObsolete : BuiltinAttribInfo + attrib_DllImportAttribute : BuiltinAttribInfo option + attrib_CompiledNameAttribute : BuiltinAttribInfo + attrib_NonSerializedAttribute : BuiltinAttribInfo option + attrib_AutoSerializableAttribute : BuiltinAttribInfo + attrib_StructLayoutAttribute : BuiltinAttribInfo + attrib_TypeForwardedToAttribute : BuiltinAttribInfo + attrib_ComVisibleAttribute : BuiltinAttribInfo + attrib_ComImportAttribute : BuiltinAttribInfo option + attrib_FieldOffsetAttribute : BuiltinAttribInfo + attrib_MarshalAsAttribute : BuiltinAttribInfo option + attrib_InAttribute : BuiltinAttribInfo option + attrib_OutAttribute : BuiltinAttribInfo + attrib_OptionalAttribute : BuiltinAttribInfo option + attrib_ThreadStaticAttribute : BuiltinAttribInfo option + attrib_SpecialNameAttribute : BuiltinAttribInfo option + attrib_VolatileFieldAttribute : BuiltinAttribInfo + attrib_ContextStaticAttribute : BuiltinAttribInfo option + attrib_FlagsAttribute : BuiltinAttribInfo + attrib_DefaultMemberAttribute : BuiltinAttribInfo + attrib_DebuggerDisplayAttribute : BuiltinAttribInfo + attrib_DebuggerTypeProxyAttribute : BuiltinAttribInfo + attrib_PreserveSigAttribute : BuiltinAttribInfo option + attrib_MethodImplAttribute : BuiltinAttribInfo + attrib_ExtensionAttribute : BuiltinAttribInfo + tcref_System_Collections_Generic_IList : TyconRef + tcref_System_Collections_Generic_IReadOnlyList : TyconRef + tcref_System_Collections_Generic_ICollection : TyconRef + tcref_System_Collections_Generic_IReadOnlyCollection : TyconRef + tcref_System_Collections_Generic_IEnumerable : TyconRef + tcref_System_Collections_IEnumerable : TyconRef + tcref_System_Collections_Generic_IEnumerator : TyconRef + tcref_System_Attribute : TyconRef + + attrib_RequireQualifiedAccessAttribute : BuiltinAttribInfo + attrib_EntryPointAttribute : BuiltinAttribInfo + attrib_DefaultAugmentationAttribute : BuiltinAttribInfo + attrib_CompilerMessageAttribute : BuiltinAttribInfo + attrib_ExperimentalAttribute : BuiltinAttribInfo + attrib_UnverifiableAttribute : BuiltinAttribInfo + attrib_LiteralAttribute : BuiltinAttribInfo + attrib_ConditionalAttribute : BuiltinAttribInfo + attrib_OptionalArgumentAttribute : BuiltinAttribInfo + attrib_RequiresExplicitTypeArgumentsAttribute : BuiltinAttribInfo + attrib_DefaultValueAttribute : BuiltinAttribInfo + attrib_ClassAttribute : BuiltinAttribInfo + attrib_InterfaceAttribute : BuiltinAttribInfo + attrib_StructAttribute : BuiltinAttribInfo + attrib_ReflectedDefinitionAttribute : BuiltinAttribInfo + attrib_AutoOpenAttribute : BuiltinAttribInfo + attrib_CompilationRepresentationAttribute : BuiltinAttribInfo + attrib_CompilationArgumentCountsAttribute : BuiltinAttribInfo + attrib_CompilationMappingAttribute : BuiltinAttribInfo + + attrib_CLIEventAttribute : BuiltinAttribInfo + attrib_AllowNullLiteralAttribute : BuiltinAttribInfo + attrib_CLIMutableAttribute : BuiltinAttribInfo + attrib_NoComparisonAttribute : BuiltinAttribInfo + attrib_NoEqualityAttribute : BuiltinAttribInfo + attrib_CustomComparisonAttribute : BuiltinAttribInfo + attrib_CustomEqualityAttribute : BuiltinAttribInfo + attrib_EqualityConditionalOnAttribute : BuiltinAttribInfo + attrib_ComparisonConditionalOnAttribute : BuiltinAttribInfo + attrib_ReferenceEqualityAttribute : BuiltinAttribInfo + attrib_StructuralEqualityAttribute : BuiltinAttribInfo + attrib_StructuralComparisonAttribute : BuiltinAttribInfo + attrib_SealedAttribute : BuiltinAttribInfo + attrib_AbstractClassAttribute : BuiltinAttribInfo + attrib_GeneralizableValueAttribute : BuiltinAttribInfo + attrib_MeasureAttribute : BuiltinAttribInfo + attrib_MeasureableAttribute : BuiltinAttribInfo + attrib_NoDynamicInvocationAttribute : BuiltinAttribInfo - attrib_SecurityAttribute : BuiltinAttribInfo option; - attrib_SecurityCriticalAttribute : BuiltinAttribInfo; - attrib_SecuritySafeCriticalAttribute : BuiltinAttribInfo; + attrib_SecurityAttribute : BuiltinAttribInfo option + attrib_SecurityCriticalAttribute : BuiltinAttribInfo + attrib_SecuritySafeCriticalAttribute : BuiltinAttribInfo - cons_ucref : UnionCaseRef; - nil_ucref : UnionCaseRef; + cons_ucref : UnionCaseRef + nil_ucref : UnionCaseRef (* These are the library values the compiler needs to know about *) - seq_vref : ValRef; - and_vref : ValRef; - and2_vref : ValRef; - addrof_vref : ValRef; - addrof2_vref : ValRef; - or_vref : ValRef; - or2_vref : ValRef; + seq_vref : ValRef + and_vref : ValRef + and2_vref : ValRef + addrof_vref : ValRef + addrof2_vref : ValRef + or_vref : ValRef + or2_vref : ValRef // 'inner' refers to "after optimization boils away inlined functions" - generic_equality_er_inner_vref : ValRef; - generic_equality_per_inner_vref : ValRef; - generic_equality_withc_inner_vref : ValRef; - generic_comparison_inner_vref : ValRef; - generic_comparison_withc_inner_vref : ValRef; - generic_hash_inner_vref : ValRef; - generic_hash_withc_inner_vref : ValRef; - reference_equality_inner_vref : ValRef; - - compare_operator_vref : ValRef; - equals_operator_vref : ValRef; - equals_nullable_operator_vref : ValRef; - nullable_equals_nullable_operator_vref : ValRef; - nullable_equals_operator_vref : ValRef; - not_equals_operator_vref : ValRef; - less_than_operator_vref : ValRef; - less_than_or_equals_operator_vref : ValRef; - greater_than_operator_vref : ValRef; - greater_than_or_equals_operator_vref : ValRef; + generic_equality_er_inner_vref : ValRef + generic_equality_per_inner_vref : ValRef + generic_equality_withc_inner_vref : ValRef + generic_comparison_inner_vref : ValRef + generic_comparison_withc_inner_vref : ValRef + generic_hash_inner_vref : ValRef + generic_hash_withc_inner_vref : ValRef + reference_equality_inner_vref : ValRef + + compare_operator_vref : ValRef + equals_operator_vref : ValRef + equals_nullable_operator_vref : ValRef + nullable_equals_nullable_operator_vref : ValRef + nullable_equals_operator_vref : ValRef + not_equals_operator_vref : ValRef + less_than_operator_vref : ValRef + less_than_or_equals_operator_vref : ValRef + greater_than_operator_vref : ValRef + greater_than_or_equals_operator_vref : ValRef - bitwise_or_vref : ValRef; - bitwise_and_vref : ValRef; - bitwise_xor_vref : ValRef; - bitwise_unary_not_vref : ValRef; - bitwise_shift_left_vref : ValRef; - bitwise_shift_right_vref : ValRef; - unchecked_addition_vref : ValRef; - unchecked_unary_plus_vref : ValRef; - unchecked_unary_minus_vref : ValRef; - unchecked_unary_not_vref : ValRef; - unchecked_subtraction_vref : ValRef; - unchecked_multiply_vref : ValRef; - unchecked_defaultof_vref : ValRef; + bitwise_or_vref : ValRef + bitwise_and_vref : ValRef + bitwise_xor_vref : ValRef + bitwise_unary_not_vref : ValRef + bitwise_shift_left_vref : ValRef + bitwise_shift_right_vref : ValRef + unchecked_addition_vref : ValRef + unchecked_unary_plus_vref : ValRef + unchecked_unary_minus_vref : ValRef + unchecked_unary_not_vref : ValRef + unchecked_subtraction_vref : ValRef + unchecked_multiply_vref : ValRef + unchecked_defaultof_vref : ValRef unchecked_subtraction_info : IntrinsicValRef - seq_info : IntrinsicValRef; - reraise_info : IntrinsicValRef; - reraise_vref : ValRef; - typeof_info : IntrinsicValRef; - typeof_vref : ValRef; - methodhandleof_info : IntrinsicValRef; - methodhandleof_vref : ValRef; - sizeof_vref : ValRef; - typedefof_info : IntrinsicValRef; - typedefof_vref : ValRef; - enum_vref : ValRef; + seq_info : IntrinsicValRef + reraise_info : IntrinsicValRef + reraise_vref : ValRef + typeof_info : IntrinsicValRef + typeof_vref : ValRef + methodhandleof_info : IntrinsicValRef + methodhandleof_vref : ValRef + sizeof_vref : ValRef + typedefof_info : IntrinsicValRef + typedefof_vref : ValRef + enum_vref : ValRef enumOfValue_vref : ValRef - new_decimal_info : IntrinsicValRef; + new_decimal_info : IntrinsicValRef // 'outer' refers to 'before optimization has boiled away inlined functions' // Augmentation generation generates calls to these functions // Optimization generates calls to these functions - generic_comparison_withc_outer_info : IntrinsicValRef; - generic_equality_er_outer_info : IntrinsicValRef; - generic_equality_withc_outer_info : IntrinsicValRef; - generic_hash_withc_outer_info : IntrinsicValRef; + generic_comparison_withc_outer_info : IntrinsicValRef + generic_equality_er_outer_info : IntrinsicValRef + generic_equality_withc_outer_info : IntrinsicValRef + generic_hash_withc_outer_info : IntrinsicValRef // Augmentation generation and pattern match compilation generates calls to this function - equals_operator_info : IntrinsicValRef; + equals_operator_info : IntrinsicValRef - query_source_vref : ValRef; - query_value_vref : ValRef; - query_run_value_vref : ValRef; - query_run_enumerable_vref : ValRef; - query_for_vref : ValRef; - query_yield_vref : ValRef; - query_yield_from_vref : ValRef; - query_select_vref : ValRef; - query_where_vref : ValRef; - query_zero_vref : ValRef; - query_builder_tcref : TyconRef; - generic_hash_withc_tuple2_vref : ValRef; - generic_hash_withc_tuple3_vref : ValRef; - generic_hash_withc_tuple4_vref : ValRef; - generic_hash_withc_tuple5_vref : ValRef; - generic_equals_withc_tuple2_vref : ValRef; - generic_equals_withc_tuple3_vref : ValRef; - generic_equals_withc_tuple4_vref : ValRef; - generic_equals_withc_tuple5_vref : ValRef; - generic_compare_withc_tuple2_vref : ValRef; - generic_compare_withc_tuple3_vref : ValRef; - generic_compare_withc_tuple4_vref : ValRef; - generic_compare_withc_tuple5_vref : ValRef; - generic_equality_withc_outer_vref : ValRef; - - create_instance_info : IntrinsicValRef; - create_event_info : IntrinsicValRef; - unbox_vref : ValRef; - unbox_fast_vref : ValRef; - istype_vref : ValRef; - istype_fast_vref : ValRef; - get_generic_comparer_info : IntrinsicValRef; - get_generic_er_equality_comparer_info : IntrinsicValRef; - get_generic_per_equality_comparer_info : IntrinsicValRef; - unbox_info : IntrinsicValRef; - unbox_fast_info : IntrinsicValRef; - istype_info : IntrinsicValRef; - istype_fast_info : IntrinsicValRef; - - dispose_info : IntrinsicValRef; - - range_op_vref : ValRef; - range_int32_op_vref : ValRef; - //range_step_op_vref : ValRef; - array_get_vref : ValRef; - array2D_get_vref : ValRef; - array3D_get_vref : ValRef; - array4D_get_vref : ValRef; - seq_collect_vref : ValRef; - seq_collect_info : IntrinsicValRef; - seq_using_info : IntrinsicValRef; - seq_using_vref : ValRef; - seq_delay_info : IntrinsicValRef; - seq_delay_vref : ValRef; - seq_append_info : IntrinsicValRef; - seq_append_vref : ValRef; - seq_generated_info : IntrinsicValRef; - seq_generated_vref : ValRef; - seq_finally_info : IntrinsicValRef; - seq_finally_vref : ValRef; - seq_of_functions_info : IntrinsicValRef; - seq_of_functions_vref : ValRef; - seq_to_array_info : IntrinsicValRef; - seq_to_list_info : IntrinsicValRef; - seq_map_info : IntrinsicValRef; - seq_map_vref : ValRef; - seq_singleton_info : IntrinsicValRef; - seq_singleton_vref : ValRef; - seq_empty_info : IntrinsicValRef; - seq_empty_vref : ValRef; - new_format_info : IntrinsicValRef; - raise_info : IntrinsicValRef; - lazy_force_info : IntrinsicValRef; - lazy_create_info : IntrinsicValRef; - - array_get_info : IntrinsicValRef; - array_length_info : IntrinsicValRef; - array2D_get_info : IntrinsicValRef; - array3D_get_info : IntrinsicValRef; - array4D_get_info : IntrinsicValRef; - unpickle_quoted_info : IntrinsicValRef; - cast_quotation_info : IntrinsicValRef; - lift_value_info : IntrinsicValRef; - query_source_as_enum_info : IntrinsicValRef; - new_query_source_info : IntrinsicValRef; - fail_init_info : IntrinsicValRef; - fail_static_init_info : IntrinsicValRef; - check_this_info : IntrinsicValRef; - quote_to_linq_lambda_info : IntrinsicValRef; - sprintf_vref : ValRef; - splice_expr_vref : ValRef; - splice_raw_expr_vref : ValRef; - new_format_vref : ValRef; - mkSysTyconRef : string list -> string -> TyconRef; + query_source_vref : ValRef + query_value_vref : ValRef + query_run_value_vref : ValRef + query_run_enumerable_vref : ValRef + query_for_vref : ValRef + query_yield_vref : ValRef + query_yield_from_vref : ValRef + query_select_vref : ValRef + query_where_vref : ValRef + query_zero_vref : ValRef + query_builder_tcref : TyconRef + generic_hash_withc_tuple2_vref : ValRef + generic_hash_withc_tuple3_vref : ValRef + generic_hash_withc_tuple4_vref : ValRef + generic_hash_withc_tuple5_vref : ValRef + generic_equals_withc_tuple2_vref : ValRef + generic_equals_withc_tuple3_vref : ValRef + generic_equals_withc_tuple4_vref : ValRef + generic_equals_withc_tuple5_vref : ValRef + generic_compare_withc_tuple2_vref : ValRef + generic_compare_withc_tuple3_vref : ValRef + generic_compare_withc_tuple4_vref : ValRef + generic_compare_withc_tuple5_vref : ValRef + generic_equality_withc_outer_vref : ValRef + + create_instance_info : IntrinsicValRef + create_event_info : IntrinsicValRef + unbox_vref : ValRef + unbox_fast_vref : ValRef + istype_vref : ValRef + istype_fast_vref : ValRef + get_generic_comparer_info : IntrinsicValRef + get_generic_er_equality_comparer_info : IntrinsicValRef + get_generic_per_equality_comparer_info : IntrinsicValRef + unbox_info : IntrinsicValRef + unbox_fast_info : IntrinsicValRef + istype_info : IntrinsicValRef + istype_fast_info : IntrinsicValRef + + dispose_info : IntrinsicValRef + + range_op_vref : ValRef + range_int32_op_vref : ValRef + //range_step_op_vref : ValRef + array_get_vref : ValRef + array2D_get_vref : ValRef + array3D_get_vref : ValRef + array4D_get_vref : ValRef + seq_collect_vref : ValRef + seq_collect_info : IntrinsicValRef + seq_using_info : IntrinsicValRef + seq_using_vref : ValRef + seq_delay_info : IntrinsicValRef + seq_delay_vref : ValRef + seq_append_info : IntrinsicValRef + seq_append_vref : ValRef + seq_generated_info : IntrinsicValRef + seq_generated_vref : ValRef + seq_finally_info : IntrinsicValRef + seq_finally_vref : ValRef + seq_of_functions_info : IntrinsicValRef + seq_of_functions_vref : ValRef + seq_to_array_info : IntrinsicValRef + seq_to_list_info : IntrinsicValRef + seq_map_info : IntrinsicValRef + seq_map_vref : ValRef + seq_singleton_info : IntrinsicValRef + seq_singleton_vref : ValRef + seq_empty_info : IntrinsicValRef + seq_empty_vref : ValRef + new_format_info : IntrinsicValRef + raise_info : IntrinsicValRef + lazy_force_info : IntrinsicValRef + lazy_create_info : IntrinsicValRef + + array_get_info : IntrinsicValRef + array_length_info : IntrinsicValRef + array2D_get_info : IntrinsicValRef + array3D_get_info : IntrinsicValRef + array4D_get_info : IntrinsicValRef + deserialize_quoted_FSharp_20_plus_info : IntrinsicValRef + deserialize_quoted_FSharp_40_plus_info : IntrinsicValRef + cast_quotation_info : IntrinsicValRef + lift_value_info : IntrinsicValRef + lift_value_with_name_info : IntrinsicValRef + lift_value_with_defn_info : IntrinsicValRef + query_source_as_enum_info : IntrinsicValRef + new_query_source_info : IntrinsicValRef + fail_init_info : IntrinsicValRef + fail_static_init_info : IntrinsicValRef + check_this_info : IntrinsicValRef + quote_to_linq_lambda_info : IntrinsicValRef + sprintf_vref : ValRef + splice_expr_vref : ValRef + splice_raw_expr_vref : ValRef + new_format_vref : ValRef + mkSysTyconRef : string list -> string -> TyconRef // 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 - suppressed_types : TyconRef list; + suppressed_types : TyconRef list /// Memoization table to help minimize the number of ILSourceDocument objects we create - memoize_file : int -> IL.ILSourceDocument; + memoize_file : int -> IL.ILSourceDocument // Are we assuming all code gen is for F# interactive, with no static linking isInteractive : bool // A table of all intrinsics that the compiler cares about @@ -677,13 +679,13 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa let system_RuntimeMethodHandle_typ = mkSysNonGenericTy sys "RuntimeMethodHandle" - let mk_unop_ty ty = [[ty]], ty - let mk_binop_ty ty = [[ty]; [ty]], ty - let mk_shiftop_ty ty = [[ty]; [int_ty]], ty - let mk_binop_ty3 ty1 ty2 ty3 = [[ty1]; [ty2]], ty3 - let mk_rel_sig ty = [[ty];[ty]],bool_ty - let mk_compare_sig ty = [[ty];[ty]],int_ty - let mk_hash_sig ty = [[ty]], int_ty + let mk_unop_ty ty = [[ty]], ty + let mk_binop_ty ty = [[ty]; [ty]], ty + let mk_shiftop_ty ty = [[ty]; [int_ty]], ty + let mk_binop_ty3 ty1 ty2 ty3 = [[ty1]; [ty2]], ty3 + let mk_rel_sig ty = [[ty];[ty]],bool_ty + let mk_compare_sig ty = [[ty];[ty]],int_ty + let mk_hash_sig ty = [[ty]], int_ty let mk_compare_withc_sig ty = [[mk_IComparer_ty];[ty]; [ty]], int_ty let mk_equality_withc_sig ty = [[mk_IEqualityComparer_ty];[ty];[ty]], bool_ty let mk_hash_withc_sig ty = [[mk_IEqualityComparer_ty]; [ty]], int_ty @@ -810,7 +812,7 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa let mk_MFCore_attrib nm : BuiltinAttribInfo = - AttribInfo(mkILTyRef(IlxSettings.ilxFsharpCoreLibScopeRef (), nm),mk_MFCore_tcref fslibCcu nm) + AttribInfo(mkILTyRef(IlxSettings.ilxFsharpCoreLibScopeRef (), FSharpLib.Core + "." + nm),mk_MFCore_tcref fslibCcu nm) let mkAttrib (nm:string) scopeRef : BuiltinAttribInfo = let path, typeName = splitILTypeName nm @@ -941,10 +943,13 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa let splice_raw_expr_info = makeIntrinsicValRef(fslib_MFExtraTopLevelOperators_nleref, "op_SpliceUntyped" ,None ,None ,[vara], ([[mkRawQuotedExprTy]], varaTy)) let new_decimal_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "MakeDecimal" ,None ,None ,[], ([[int_ty]; [int_ty]; [int_ty]; [bool_ty]; [byte_ty]], decimal_ty)) let array_get_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "GetArray" ,None ,None ,[vara], ([[mkArrayType 1 varaTy]; [int_ty]], varaTy)) - let array_length_info = makeIntrinsicValRef(fslib_MFArrayModule_nleref, "length" ,None ,Some "Length" ,[vara], ([[mkArrayType 1 varaTy]], varaTy)) - let unpickle_quoted_info = makeIntrinsicValRef(fslib_MFQuotations_nleref, "Deserialize" ,Some "Expr" ,None ,[], ([[system_Type_typ ;mkListTy system_Type_typ ;mkListTy mkRawQuotedExprTy ; mkArrayType 1 byte_ty]], mkRawQuotedExprTy )) + let array_length_info = makeIntrinsicValRef(fslib_MFArrayModule_nleref, "length" ,None ,Some "Length" ,[vara], ([[mkArrayType 1 varaTy]], int_ty)) + let deserialize_quoted_FSharp_20_plus_info = makeIntrinsicValRef(fslib_MFQuotations_nleref, "Deserialize" ,Some "Expr" ,None ,[], ([[system_Type_typ ;mkListTy system_Type_typ ;mkListTy mkRawQuotedExprTy ; mkArrayType 1 byte_ty]], mkRawQuotedExprTy )) + let deserialize_quoted_FSharp_40_plus_info = makeIntrinsicValRef(fslib_MFQuotations_nleref, "Deserialize40" ,Some "Expr" ,None ,[], ([[system_Type_typ ;mkArrayType 1 system_Type_typ; mkArrayType 1 system_Type_typ; mkArrayType 1 mkRawQuotedExprTy; mkArrayType 1 byte_ty]], mkRawQuotedExprTy )) let cast_quotation_info = makeIntrinsicValRef(fslib_MFQuotations_nleref, "Cast" ,Some "Expr" ,None ,[vara], ([[mkRawQuotedExprTy]], mkQuotedExprTy varaTy)) let lift_value_info = makeIntrinsicValRef(fslib_MFQuotations_nleref, "Value" ,Some "Expr" ,None ,[vara], ([[varaTy]], mkRawQuotedExprTy)) + let lift_value_with_name_info = makeIntrinsicValRef(fslib_MFQuotations_nleref, "ValueWithName" ,Some "Expr" ,None ,[vara], ([[varaTy; string_ty]], mkRawQuotedExprTy)) + let lift_value_with_defn_info = makeIntrinsicValRef(fslib_MFQuotations_nleref, "WithValue" ,Some "Expr" ,None ,[vara], ([[varaTy; mkQuotedExprTy varaTy]], mkQuotedExprTy varaTy)) let query_value_info = makeIntrinsicValRef(fslib_MFExtraTopLevelOperators_nleref, "query" ,None ,None ,[], ([], mkQueryBuilderTy) ) let query_run_value_info = makeIntrinsicValRef(fslib_MFQueryRunExtensionsLowPriority_nleref, "Run" ,Some "QueryBuilder" ,None ,[vara], ([[mkQueryBuilderTy];[mkQuotedExprTy varaTy]], varaTy) ) let query_run_enumerable_info = makeIntrinsicValRef(fslib_MFQueryRunExtensionsHighPriority_nleref, "Run" ,Some "QueryBuilder" ,None ,[vara], ([[mkQueryBuilderTy];[mkQuotedExprTy (mkQuerySourceTy varaTy (mkNonGenericTy tcref_System_Collections_IEnumerable)) ]], mkSeqTy varaTy) ) @@ -962,259 +967,259 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa let check_this_info = makeIntrinsicValRef(fslib_MFIntrinsicFunctions_nleref, "CheckThis" ,None ,None ,[vara], ([[varaTy]], varaTy)) let quote_to_linq_lambda_info = makeIntrinsicValRef(fslib_MFLinqRuntimeHelpersQuotationConverter_nleref, "QuotationToLambdaExpression" ,None ,None ,[vara], ([[mkQuotedExprTy varaTy]], mkLinqExpressionTy varaTy)) - { ilg=ilg; + { ilg=ilg #if NO_COMPILER_BACKEND #else - ilxPubCloEnv=EraseIlxFuncs.new_cenv(ilg) + ilxPubCloEnv=EraseClosures.new_cenv(ilg) #endif knownIntrinsics = knownIntrinsics knownFSharpCoreModules = knownFSharpCoreModules - compilingFslib = compilingFslib; - mlCompatibility = mlCompatibility; + compilingFslib = compilingFslib + mlCompatibility = mlCompatibility emitDebugInfoInQuotations = emitDebugInfoInQuotations - directoryToResolveRelativePaths= directoryToResolveRelativePaths; - unionCaseRefEq = unionCaseRefEq; - valRefEq = valRefEq; - fslibCcu = fslibCcu; - using40environment = using40environment; - indirectCallArrayMethods = indirectCallArrayMethods; - sysCcu = sysCcu; - refcell_tcr_canon = mk_MFCore_tcref fslibCcu "Ref`1"; - option_tcr_canon = mk_MFCore_tcref fslibCcu "Option`1"; - list_tcr_canon = mk_MFCollections_tcref fslibCcu "List`1"; - set_tcr_canon = mk_MFCollections_tcref fslibCcu "Set`1"; - map_tcr_canon = mk_MFCollections_tcref fslibCcu "Map`2"; - lazy_tcr_canon = lazy_tcr; - refcell_tcr_nice = mk_MFCore_tcref fslibCcu "ref`1"; - array_tcr_nice = il_arr_tcr_map.[0]; - option_tcr_nice = option_tcr_nice; - list_tcr_nice = list_tcr_nice; - lazy_tcr_nice = lazy_tcr_nice; - format_tcr = format_tcr; - expr_tcr = expr_tcr; - raw_expr_tcr = raw_expr_tcr; - nativeint_tcr = nativeint_tcr; - int32_tcr = int32_tcr; - int16_tcr = int16_tcr; - int64_tcr = int64_tcr; - uint16_tcr = uint16_tcr; - uint32_tcr = uint32_tcr; - uint64_tcr = uint64_tcr; - sbyte_tcr = sbyte_tcr; - decimal_tcr = decimal_tcr; - date_tcr = date_tcr; - pdecimal_tcr = pdecimal_tcr; - byte_tcr = byte_tcr; - bool_tcr = bool_tcr; - unit_tcr_canon = unit_tcr_canon; - unit_tcr_nice = unit_tcr_nice; - exn_tcr = exn_tcr; - char_tcr = char_tcr; - float_tcr = float_tcr; - float32_tcr = float32_tcr; - pfloat_tcr = pfloat_tcr; - pfloat32_tcr = pfloat32_tcr; - pint_tcr = pint_tcr; - pint8_tcr = pint8_tcr; - pint16_tcr = pint16_tcr; - pint64_tcr = pint64_tcr; - byref_tcr = byref_tcr; - nativeptr_tcr = nativeptr_tcr; - ilsigptr_tcr = ilsigptr_tcr; - fastFunc_tcr = fastFunc_tcr; + directoryToResolveRelativePaths= directoryToResolveRelativePaths + unionCaseRefEq = unionCaseRefEq + valRefEq = valRefEq + fslibCcu = fslibCcu + using40environment = using40environment + indirectCallArrayMethods = indirectCallArrayMethods + sysCcu = sysCcu + refcell_tcr_canon = mk_MFCore_tcref fslibCcu "Ref`1" + option_tcr_canon = mk_MFCore_tcref fslibCcu "Option`1" + list_tcr_canon = mk_MFCollections_tcref fslibCcu "List`1" + set_tcr_canon = mk_MFCollections_tcref fslibCcu "Set`1" + map_tcr_canon = mk_MFCollections_tcref fslibCcu "Map`2" + lazy_tcr_canon = lazy_tcr + refcell_tcr_nice = mk_MFCore_tcref fslibCcu "ref`1" + array_tcr_nice = il_arr_tcr_map.[0] + option_tcr_nice = option_tcr_nice + list_tcr_nice = list_tcr_nice + lazy_tcr_nice = lazy_tcr_nice + format_tcr = format_tcr + expr_tcr = expr_tcr + raw_expr_tcr = raw_expr_tcr + nativeint_tcr = nativeint_tcr + int32_tcr = int32_tcr + int16_tcr = int16_tcr + int64_tcr = int64_tcr + uint16_tcr = uint16_tcr + uint32_tcr = uint32_tcr + uint64_tcr = uint64_tcr + sbyte_tcr = sbyte_tcr + decimal_tcr = decimal_tcr + date_tcr = date_tcr + pdecimal_tcr = pdecimal_tcr + byte_tcr = byte_tcr + bool_tcr = bool_tcr + unit_tcr_canon = unit_tcr_canon + unit_tcr_nice = unit_tcr_nice + exn_tcr = exn_tcr + char_tcr = char_tcr + float_tcr = float_tcr + float32_tcr = float32_tcr + pfloat_tcr = pfloat_tcr + pfloat32_tcr = pfloat32_tcr + pint_tcr = pint_tcr + pint8_tcr = pint8_tcr + pint16_tcr = pint16_tcr + pint64_tcr = pint64_tcr + byref_tcr = byref_tcr + nativeptr_tcr = nativeptr_tcr + ilsigptr_tcr = ilsigptr_tcr + fastFunc_tcr = fastFunc_tcr tcref_IQueryable = tcref_IQueryable - tcref_IObservable = tcref_IObservable; - tcref_IObserver = tcref_IObserver; - fslib_IEvent2_tcr = fslib_IEvent2_tcr; - fslib_IDelegateEvent_tcr = fslib_IDelegateEvent_tcr; - seq_tcr = seq_tcr; - seq_base_tcr = mk_MFCompilerServices_tcref fslibCcu "GeneratedSequenceBase`1"; - measureproduct_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureProduct`2"; - measureinverse_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureInverse`1"; - measureone_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureOne"; - il_arr_tcr_map = il_arr_tcr_map; - tuple1_tcr = tuple1_tcr; - tuple2_tcr = tuple2_tcr; - tuple3_tcr = tuple3_tcr; - tuple4_tcr = tuple4_tcr; - tuple5_tcr = tuple5_tcr; - tuple6_tcr = tuple6_tcr; - tuple7_tcr = tuple7_tcr; - tuple8_tcr = tuple8_tcr; - choice2_tcr = choice2_tcr; - choice3_tcr = choice3_tcr; - choice4_tcr = choice4_tcr; - choice5_tcr = choice5_tcr; - choice6_tcr = choice6_tcr; - choice7_tcr = choice7_tcr; - nativeint_ty = mkNonGenericTy nativeint_tcr; - unativeint_ty = mkNonGenericTy unativeint_tcr; - int32_ty = mkNonGenericTy int32_tcr; - int16_ty = mkNonGenericTy int16_tcr; - int64_ty = mkNonGenericTy int64_tcr; - uint16_ty = mkNonGenericTy uint16_tcr; - uint32_ty = mkNonGenericTy uint32_tcr; - uint64_ty = mkNonGenericTy uint64_tcr; - sbyte_ty = mkNonGenericTy sbyte_tcr; - byte_ty = byte_ty; - bool_ty = bool_ty; - int_ty = int_ty; - string_ty = string_ty; - obj_ty = mkNonGenericTy obj_tcr; - unit_ty = unit_ty; - exn_ty = mkNonGenericTy exn_tcr; - char_ty = mkNonGenericTy char_tcr; - decimal_ty = mkNonGenericTy decimal_tcr; - float_ty = mkNonGenericTy float_tcr; - float32_ty = mkNonGenericTy float32_tcr; - memoize_file = memoize_file.Apply; - - system_Array_typ = mkSysNonGenericTy sys "Array"; - system_Object_typ = mkSysNonGenericTy sys "Object"; - system_IDisposable_typ = mkSysNonGenericTy sys "IDisposable"; - system_Value_typ = mkSysNonGenericTy sys "ValueType"; - system_Delegate_typ = mkSysNonGenericTy sys "Delegate"; - system_MulticastDelegate_typ = mkSysNonGenericTy sys "MulticastDelegate"; - system_Enum_typ = mkSysNonGenericTy sys "Enum"; - system_Exception_typ = mkSysNonGenericTy sys "Exception"; - system_String_typ = mkSysNonGenericTy sys "String"; - system_Int32_typ = mkSysNonGenericTy sys "Int32"; - system_Type_typ = system_Type_typ; + tcref_IObservable = tcref_IObservable + tcref_IObserver = tcref_IObserver + fslib_IEvent2_tcr = fslib_IEvent2_tcr + fslib_IDelegateEvent_tcr = fslib_IDelegateEvent_tcr + seq_tcr = seq_tcr + seq_base_tcr = mk_MFCompilerServices_tcref fslibCcu "GeneratedSequenceBase`1" + measureproduct_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureProduct`2" + measureinverse_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureInverse`1" + measureone_tcr = mk_MFCompilerServices_tcref fslibCcu "MeasureOne" + il_arr_tcr_map = il_arr_tcr_map + tuple1_tcr = tuple1_tcr + tuple2_tcr = tuple2_tcr + tuple3_tcr = tuple3_tcr + tuple4_tcr = tuple4_tcr + tuple5_tcr = tuple5_tcr + tuple6_tcr = tuple6_tcr + tuple7_tcr = tuple7_tcr + tuple8_tcr = tuple8_tcr + choice2_tcr = choice2_tcr + choice3_tcr = choice3_tcr + choice4_tcr = choice4_tcr + choice5_tcr = choice5_tcr + choice6_tcr = choice6_tcr + choice7_tcr = choice7_tcr + nativeint_ty = mkNonGenericTy nativeint_tcr + unativeint_ty = mkNonGenericTy unativeint_tcr + int32_ty = mkNonGenericTy int32_tcr + int16_ty = mkNonGenericTy int16_tcr + int64_ty = mkNonGenericTy int64_tcr + uint16_ty = mkNonGenericTy uint16_tcr + uint32_ty = mkNonGenericTy uint32_tcr + uint64_ty = mkNonGenericTy uint64_tcr + sbyte_ty = mkNonGenericTy sbyte_tcr + byte_ty = byte_ty + bool_ty = bool_ty + int_ty = int_ty + string_ty = string_ty + obj_ty = mkNonGenericTy obj_tcr + unit_ty = unit_ty + exn_ty = mkNonGenericTy exn_tcr + char_ty = mkNonGenericTy char_tcr + decimal_ty = mkNonGenericTy decimal_tcr + float_ty = mkNonGenericTy float_tcr + float32_ty = mkNonGenericTy float32_tcr + memoize_file = memoize_file.Apply + + system_Array_typ = mkSysNonGenericTy sys "Array" + system_Object_typ = mkSysNonGenericTy sys "Object" + system_IDisposable_typ = mkSysNonGenericTy sys "IDisposable" + system_Value_typ = mkSysNonGenericTy sys "ValueType" + system_Delegate_typ = mkSysNonGenericTy sys "Delegate" + system_MulticastDelegate_typ = mkSysNonGenericTy sys "MulticastDelegate" + system_Enum_typ = mkSysNonGenericTy sys "Enum" + system_Exception_typ = mkSysNonGenericTy sys "Exception" + system_String_typ = mkSysNonGenericTy sys "String" + system_Int32_typ = mkSysNonGenericTy sys "Int32" + system_Type_typ = system_Type_typ system_TypedReference_tcref = if ilg.traits.TypedReferenceTypeScopeRef.IsSome then Some(mkSysTyconRef sys "TypedReference") else None system_ArgIterator_tcref = if ilg.traits.ArgIteratorTypeScopeRef.IsSome then Some(mkSysTyconRef sys "ArgIterator") else None - system_RuntimeArgumentHandle_tcref = if ilg.traits.RuntimeArgumentHandleTypeScopeRef.IsSome then Some (mkSysTyconRef sys "RuntimeArgumentHandle") else None; - system_SByte_tcref = mkSysTyconRef sys "SByte"; - system_Decimal_tcref = mkSysTyconRef sys "Decimal"; - system_Int16_tcref = mkSysTyconRef sys "Int16"; - system_Int32_tcref = mkSysTyconRef sys "Int32"; - system_Int64_tcref = mkSysTyconRef sys "Int64"; - system_IntPtr_tcref = mkSysTyconRef sys "IntPtr"; - system_Bool_tcref = mkSysTyconRef sys "Boolean"; - system_Byte_tcref = mkSysTyconRef sys "Byte"; - system_UInt16_tcref = mkSysTyconRef sys "UInt16"; - system_Char_tcref = mkSysTyconRef sys "Char"; - system_UInt32_tcref = mkSysTyconRef sys "UInt32"; - system_UInt64_tcref = mkSysTyconRef sys "UInt64"; - system_UIntPtr_tcref = mkSysTyconRef sys "UIntPtr"; - system_Single_tcref = mkSysTyconRef sys "Single"; - system_Double_tcref = mkSysTyconRef sys "Double"; - system_RuntimeTypeHandle_typ = mkSysNonGenericTy sys "RuntimeTypeHandle"; - system_RuntimeMethodHandle_typ = system_RuntimeMethodHandle_typ; + system_RuntimeArgumentHandle_tcref = if ilg.traits.RuntimeArgumentHandleTypeScopeRef.IsSome then Some (mkSysTyconRef sys "RuntimeArgumentHandle") else None + system_SByte_tcref = mkSysTyconRef sys "SByte" + system_Decimal_tcref = mkSysTyconRef sys "Decimal" + system_Int16_tcref = mkSysTyconRef sys "Int16" + system_Int32_tcref = mkSysTyconRef sys "Int32" + system_Int64_tcref = mkSysTyconRef sys "Int64" + system_IntPtr_tcref = mkSysTyconRef sys "IntPtr" + system_Bool_tcref = mkSysTyconRef sys "Boolean" + system_Byte_tcref = mkSysTyconRef sys "Byte" + system_UInt16_tcref = mkSysTyconRef sys "UInt16" + system_Char_tcref = mkSysTyconRef sys "Char" + system_UInt32_tcref = mkSysTyconRef sys "UInt32" + system_UInt64_tcref = mkSysTyconRef sys "UInt64" + system_UIntPtr_tcref = mkSysTyconRef sys "UIntPtr" + system_Single_tcref = mkSysTyconRef sys "Single" + system_Double_tcref = mkSysTyconRef sys "Double" + system_RuntimeTypeHandle_typ = mkSysNonGenericTy sys "RuntimeTypeHandle" + system_RuntimeMethodHandle_typ = system_RuntimeMethodHandle_typ system_MarshalByRefObject_tcref = if ilg.traits.MarshalByRefObjectScopeRef.IsSome then Some(mkSysTyconRef sys "MarshalByRefObject") else None system_MarshalByRefObject_typ = if ilg.traits.MarshalByRefObjectScopeRef.IsSome then Some(mkSysNonGenericTy sys "MarshalByRefObject") else None - system_Reflection_MethodInfo_typ = system_Reflection_MethodInfo_typ; + system_Reflection_MethodInfo_typ = system_Reflection_MethodInfo_typ - system_Array_tcref = mkSysTyconRef sys "Array"; - system_Object_tcref = mkSysTyconRef sys "Object"; - system_Void_tcref = mkSysTyconRef sys "Void"; - system_IndexOutOfRangeException_tcref = mkSysTyconRef sys "IndexOutOfRangeException"; - system_Nullable_tcref = nullable_tcr; - system_GenericIComparable_tcref = mkSysTyconRef sys "IComparable`1"; - system_GenericIEquatable_tcref = mkSysTyconRef sys "IEquatable`1"; - mk_IComparable_ty = mkSysNonGenericTy sys "IComparable"; - system_LinqExpression_tcref = linqExpression_tcr; - - mk_IStructuralComparable_ty = mkSysNonGenericTy sysCollections "IStructuralComparable"; + system_Array_tcref = mkSysTyconRef sys "Array" + system_Object_tcref = mkSysTyconRef sys "Object" + system_Void_tcref = mkSysTyconRef sys "Void" + system_IndexOutOfRangeException_tcref = mkSysTyconRef sys "IndexOutOfRangeException" + system_Nullable_tcref = nullable_tcr + system_GenericIComparable_tcref = mkSysTyconRef sys "IComparable`1" + system_GenericIEquatable_tcref = mkSysTyconRef sys "IEquatable`1" + mk_IComparable_ty = mkSysNonGenericTy sys "IComparable" + system_LinqExpression_tcref = linqExpression_tcr + + mk_IStructuralComparable_ty = mkSysNonGenericTy sysCollections "IStructuralComparable" - mk_IStructuralEquatable_ty = mkSysNonGenericTy sysCollections "IStructuralEquatable"; - - mk_IComparer_ty = mk_IComparer_ty; - mk_IEqualityComparer_ty = mk_IEqualityComparer_ty; - tcref_System_Collections_IComparer = mkSysTyconRef sysCollections "IComparer"; - tcref_System_Collections_IEqualityComparer = mkSysTyconRef sysCollections "IEqualityComparer"; - tcref_System_Collections_Generic_IEqualityComparer = mkSysTyconRef sysGenerics "IEqualityComparer`1"; - tcref_System_Collections_Generic_Dictionary = mkSysTyconRef sysGenerics "Dictionary`2"; + mk_IStructuralEquatable_ty = mkSysNonGenericTy sysCollections "IStructuralEquatable" + + mk_IComparer_ty = mk_IComparer_ty + mk_IEqualityComparer_ty = mk_IEqualityComparer_ty + tcref_System_Collections_IComparer = mkSysTyconRef sysCollections "IComparer" + tcref_System_Collections_IEqualityComparer = mkSysTyconRef sysCollections "IEqualityComparer" + tcref_System_Collections_Generic_IEqualityComparer = mkSysTyconRef sysGenerics "IEqualityComparer`1" + tcref_System_Collections_Generic_Dictionary = mkSysTyconRef sysGenerics "Dictionary`2" tcref_System_IComparable = mkSysTyconRef sys "IComparable" tcref_System_IStructuralComparable = mkSysTyconRef sysCollections "IStructuralComparable" - tcref_System_IStructuralEquatable = mkSysTyconRef sysCollections "IStructuralEquatable"; + tcref_System_IStructuralEquatable = mkSysTyconRef sysCollections "IStructuralEquatable" - tcref_LanguagePrimitives = mk_MFCore_tcref fslibCcu "LanguagePrimitives"; + tcref_LanguagePrimitives = mk_MFCore_tcref fslibCcu "LanguagePrimitives" - tcref_System_Collections_Generic_IList = mkSysTyconRef sysGenerics "IList`1"; - tcref_System_Collections_Generic_IReadOnlyList = mkSysTyconRef sysGenerics "IReadOnlyList`1"; - tcref_System_Collections_Generic_ICollection = mkSysTyconRef sysGenerics "ICollection`1"; - tcref_System_Collections_Generic_IReadOnlyCollection = mkSysTyconRef sysGenerics "IReadOnlyCollection`1"; + tcref_System_Collections_Generic_IList = mkSysTyconRef sysGenerics "IList`1" + tcref_System_Collections_Generic_IReadOnlyList = mkSysTyconRef sysGenerics "IReadOnlyList`1" + tcref_System_Collections_Generic_ICollection = mkSysTyconRef sysGenerics "ICollection`1" + tcref_System_Collections_Generic_IReadOnlyCollection = mkSysTyconRef sysGenerics "IReadOnlyCollection`1" tcref_System_Collections_IEnumerable = tcref_System_Collections_IEnumerable - tcref_System_Collections_Generic_IEnumerable = IEnumerable_tcr; - tcref_System_Collections_Generic_IEnumerator = IEnumerator_tcr; + tcref_System_Collections_Generic_IEnumerable = IEnumerable_tcr + tcref_System_Collections_Generic_IEnumerator = IEnumerator_tcr - tcref_System_Attribute = System_Attribute_tcr; + tcref_System_Attribute = System_Attribute_tcr - attrib_AttributeUsageAttribute = mkSystemRuntimeAttrib "System.AttributeUsageAttribute"; - attrib_ParamArrayAttribute = mkSystemRuntimeAttrib "System.ParamArrayAttribute"; + attrib_AttributeUsageAttribute = mkSystemRuntimeAttrib "System.AttributeUsageAttribute" + attrib_ParamArrayAttribute = mkSystemRuntimeAttrib "System.ParamArrayAttribute" attrib_IDispatchConstantAttribute = if ilg.traits.IDispatchConstantAttributeScopeRef.IsSome then Some(mkSystemRuntimeAttrib "System.Runtime.CompilerServices.IDispatchConstantAttribute") else None attrib_IUnknownConstantAttribute = if ilg.traits.IUnknownConstantAttributeScopeRef.IsSome then Some (mkSystemRuntimeAttrib "System.Runtime.CompilerServices.IUnknownConstantAttribute") else None - attrib_SystemObsolete = mkSystemRuntimeAttrib "System.ObsoleteAttribute"; - attrib_DllImportAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.DllImportAttribute"; - attrib_StructLayoutAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.StructLayoutAttribute"; - attrib_TypeForwardedToAttribute = mkSystemRuntimeAttrib "System.Runtime.CompilerServices.TypeForwardedToAttribute"; - attrib_ComVisibleAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.ComVisibleAttribute"; - attrib_ComImportAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.ComImportAttribute"; - attrib_FieldOffsetAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.FieldOffsetAttribute" ; - attrib_MarshalAsAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.MarshalAsAttribute"; - attrib_InAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.InAttribute" ; - attrib_OutAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.OutAttribute" ; - attrib_OptionalAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.OptionalAttribute" ; + attrib_SystemObsolete = mkSystemRuntimeAttrib "System.ObsoleteAttribute" + attrib_DllImportAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.DllImportAttribute" + attrib_StructLayoutAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.StructLayoutAttribute" + attrib_TypeForwardedToAttribute = mkSystemRuntimeAttrib "System.Runtime.CompilerServices.TypeForwardedToAttribute" + attrib_ComVisibleAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.ComVisibleAttribute" + attrib_ComImportAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.ComImportAttribute" + attrib_FieldOffsetAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.FieldOffsetAttribute" + attrib_MarshalAsAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.MarshalAsAttribute" + attrib_InAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.InAttribute" + attrib_OutAttribute = mkSystemRuntimeAttrib "System.Runtime.InteropServices.OutAttribute" + attrib_OptionalAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.OptionalAttribute" attrib_ThreadStaticAttribute = if ilg.traits.ThreadStaticAttributeScopeRef.IsSome then Some(mkSystemRuntimeAttrib "System.ThreadStaticAttribute") else None attrib_SpecialNameAttribute = if ilg.traits.SpecialNameAttributeScopeRef.IsSome then Some(mkSystemRuntimeAttrib "System.Runtime.CompilerServices.SpecialNameAttribute") else None - attrib_VolatileFieldAttribute = mk_MFCore_attrib "VolatileFieldAttribute"; - attrib_ContextStaticAttribute = if ilg.traits.ContextStaticAttributeScopeRef.IsSome then Some (mkSystemRuntimeAttrib "System.ContextStaticAttribute") else None; - attrib_FlagsAttribute = mkSystemRuntimeAttrib "System.FlagsAttribute"; - attrib_DefaultMemberAttribute = mkSystemRuntimeAttrib "System.Reflection.DefaultMemberAttribute"; - attrib_DebuggerDisplayAttribute = mkSystemDiagnosticsDebugAttribute "System.Diagnostics.DebuggerDisplayAttribute"; - attrib_DebuggerTypeProxyAttribute = mkSystemDiagnosticsDebugAttribute "System.Diagnostics.DebuggerTypeProxyAttribute"; - attrib_PreserveSigAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.PreserveSigAttribute"; - attrib_MethodImplAttribute = mkSystemRuntimeAttrib "System.Runtime.CompilerServices.MethodImplAttribute"; - attrib_ExtensionAttribute = mkSystemRuntimeAttrib "System.Runtime.CompilerServices.ExtensionAttribute"; + attrib_VolatileFieldAttribute = mk_MFCore_attrib "VolatileFieldAttribute" + attrib_ContextStaticAttribute = if ilg.traits.ContextStaticAttributeScopeRef.IsSome then Some (mkSystemRuntimeAttrib "System.ContextStaticAttribute") else None + attrib_FlagsAttribute = mkSystemRuntimeAttrib "System.FlagsAttribute" + attrib_DefaultMemberAttribute = mkSystemRuntimeAttrib "System.Reflection.DefaultMemberAttribute" + attrib_DebuggerDisplayAttribute = mkSystemDiagnosticsDebugAttribute "System.Diagnostics.DebuggerDisplayAttribute" + attrib_DebuggerTypeProxyAttribute = mkSystemDiagnosticsDebugAttribute "System.Diagnostics.DebuggerTypeProxyAttribute" + attrib_PreserveSigAttribute = mkSystemRuntimeInteropServicesAttribute "System.Runtime.InteropServices.PreserveSigAttribute" + attrib_MethodImplAttribute = mkSystemRuntimeAttrib "System.Runtime.CompilerServices.MethodImplAttribute" + attrib_ExtensionAttribute = mkSystemRuntimeAttrib "System.Runtime.CompilerServices.ExtensionAttribute" - attrib_ProjectionParameterAttribute = mk_MFCore_attrib "ProjectionParameterAttribute"; - attrib_CustomOperationAttribute = mk_MFCore_attrib "CustomOperationAttribute"; - attrib_NonSerializedAttribute = if ilg.traits.NonSerializedAttributeScopeRef.IsSome then Some(mkSystemRuntimeAttrib "System.NonSerializedAttribute") else None; - attrib_AutoSerializableAttribute = mk_MFCore_attrib "AutoSerializableAttribute"; - attrib_RequireQualifiedAccessAttribute = mk_MFCore_attrib "RequireQualifiedAccessAttribute"; - attrib_EntryPointAttribute = mk_MFCore_attrib "EntryPointAttribute"; - attrib_DefaultAugmentationAttribute = mk_MFCore_attrib "DefaultAugmentationAttribute"; - attrib_CompilerMessageAttribute = mk_MFCore_attrib "CompilerMessageAttribute"; - attrib_ExperimentalAttribute = mk_MFCore_attrib "ExperimentalAttribute"; - attrib_UnverifiableAttribute = mk_MFCore_attrib "UnverifiableAttribute"; - attrib_LiteralAttribute = mk_MFCore_attrib "LiteralAttribute"; - attrib_ConditionalAttribute = mkSystemRuntimeAttrib "System.Diagnostics.ConditionalAttribute"; - attrib_OptionalArgumentAttribute = mk_MFCore_attrib "OptionalArgumentAttribute"; - attrib_RequiresExplicitTypeArgumentsAttribute = mk_MFCore_attrib "RequiresExplicitTypeArgumentsAttribute"; - attrib_DefaultValueAttribute = mk_MFCore_attrib "DefaultValueAttribute"; - attrib_ClassAttribute = mk_MFCore_attrib "ClassAttribute"; - attrib_InterfaceAttribute = mk_MFCore_attrib "InterfaceAttribute"; - attrib_StructAttribute = mk_MFCore_attrib "StructAttribute"; - attrib_ReflectedDefinitionAttribute = mk_MFCore_attrib "ReflectedDefinitionAttribute"; - attrib_CompiledNameAttribute = mk_MFCore_attrib "CompiledNameAttribute"; - attrib_AutoOpenAttribute = mk_MFCore_attrib "AutoOpenAttribute"; - attrib_CompilationRepresentationAttribute = mk_MFCore_attrib "CompilationRepresentationAttribute"; - attrib_CompilationArgumentCountsAttribute = mk_MFCore_attrib "CompilationArgumentCountsAttribute"; - attrib_CompilationMappingAttribute = mk_MFCore_attrib "CompilationMappingAttribute"; - attrib_CLIEventAttribute = mk_MFCore_attrib "CLIEventAttribute"; - attrib_CLIMutableAttribute = mk_MFCore_attrib "CLIMutableAttribute"; - attrib_AllowNullLiteralAttribute = mk_MFCore_attrib "AllowNullLiteralAttribute"; - attrib_NoEqualityAttribute = mk_MFCore_attrib "NoEqualityAttribute"; - attrib_NoComparisonAttribute = mk_MFCore_attrib "NoComparisonAttribute"; - attrib_CustomEqualityAttribute = mk_MFCore_attrib "CustomEqualityAttribute"; - attrib_CustomComparisonAttribute = mk_MFCore_attrib "CustomComparisonAttribute"; - attrib_EqualityConditionalOnAttribute = mk_MFCore_attrib "EqualityConditionalOnAttribute"; - attrib_ComparisonConditionalOnAttribute = mk_MFCore_attrib "ComparisonConditionalOnAttribute"; - attrib_ReferenceEqualityAttribute = mk_MFCore_attrib "ReferenceEqualityAttribute"; - attrib_StructuralEqualityAttribute = mk_MFCore_attrib "StructuralEqualityAttribute"; - attrib_StructuralComparisonAttribute = mk_MFCore_attrib "StructuralComparisonAttribute"; - attrib_SealedAttribute = mk_MFCore_attrib "SealedAttribute"; - attrib_AbstractClassAttribute = mk_MFCore_attrib "AbstractClassAttribute"; - attrib_GeneralizableValueAttribute = mk_MFCore_attrib "GeneralizableValueAttribute"; - attrib_MeasureAttribute = mk_MFCore_attrib "MeasureAttribute"; - attrib_MeasureableAttribute = mk_MFCore_attrib "MeasureAnnotatedAbbreviationAttribute"; - attrib_NoDynamicInvocationAttribute = mk_MFCore_attrib "NoDynamicInvocationAttribute"; + attrib_ProjectionParameterAttribute = mk_MFCore_attrib "ProjectionParameterAttribute" + attrib_CustomOperationAttribute = mk_MFCore_attrib "CustomOperationAttribute" + attrib_NonSerializedAttribute = if ilg.traits.NonSerializedAttributeScopeRef.IsSome then Some(mkSystemRuntimeAttrib "System.NonSerializedAttribute") else None + attrib_AutoSerializableAttribute = mk_MFCore_attrib "AutoSerializableAttribute" + attrib_RequireQualifiedAccessAttribute = mk_MFCore_attrib "RequireQualifiedAccessAttribute" + attrib_EntryPointAttribute = mk_MFCore_attrib "EntryPointAttribute" + attrib_DefaultAugmentationAttribute = mk_MFCore_attrib "DefaultAugmentationAttribute" + attrib_CompilerMessageAttribute = mk_MFCore_attrib "CompilerMessageAttribute" + attrib_ExperimentalAttribute = mk_MFCore_attrib "ExperimentalAttribute" + attrib_UnverifiableAttribute = mk_MFCore_attrib "UnverifiableAttribute" + attrib_LiteralAttribute = mk_MFCore_attrib "LiteralAttribute" + attrib_ConditionalAttribute = mkSystemRuntimeAttrib "System.Diagnostics.ConditionalAttribute" + attrib_OptionalArgumentAttribute = mk_MFCore_attrib "OptionalArgumentAttribute" + attrib_RequiresExplicitTypeArgumentsAttribute = mk_MFCore_attrib "RequiresExplicitTypeArgumentsAttribute" + attrib_DefaultValueAttribute = mk_MFCore_attrib "DefaultValueAttribute" + attrib_ClassAttribute = mk_MFCore_attrib "ClassAttribute" + attrib_InterfaceAttribute = mk_MFCore_attrib "InterfaceAttribute" + attrib_StructAttribute = mk_MFCore_attrib "StructAttribute" + attrib_ReflectedDefinitionAttribute = mk_MFCore_attrib "ReflectedDefinitionAttribute" + attrib_CompiledNameAttribute = mk_MFCore_attrib "CompiledNameAttribute" + attrib_AutoOpenAttribute = mk_MFCore_attrib "AutoOpenAttribute" + attrib_CompilationRepresentationAttribute = mk_MFCore_attrib "CompilationRepresentationAttribute" + attrib_CompilationArgumentCountsAttribute = mk_MFCore_attrib "CompilationArgumentCountsAttribute" + attrib_CompilationMappingAttribute = mk_MFCore_attrib "CompilationMappingAttribute" + attrib_CLIEventAttribute = mk_MFCore_attrib "CLIEventAttribute" + attrib_CLIMutableAttribute = mk_MFCore_attrib "CLIMutableAttribute" + attrib_AllowNullLiteralAttribute = mk_MFCore_attrib "AllowNullLiteralAttribute" + attrib_NoEqualityAttribute = mk_MFCore_attrib "NoEqualityAttribute" + attrib_NoComparisonAttribute = mk_MFCore_attrib "NoComparisonAttribute" + attrib_CustomEqualityAttribute = mk_MFCore_attrib "CustomEqualityAttribute" + attrib_CustomComparisonAttribute = mk_MFCore_attrib "CustomComparisonAttribute" + attrib_EqualityConditionalOnAttribute = mk_MFCore_attrib "EqualityConditionalOnAttribute" + attrib_ComparisonConditionalOnAttribute = mk_MFCore_attrib "ComparisonConditionalOnAttribute" + attrib_ReferenceEqualityAttribute = mk_MFCore_attrib "ReferenceEqualityAttribute" + attrib_StructuralEqualityAttribute = mk_MFCore_attrib "StructuralEqualityAttribute" + attrib_StructuralComparisonAttribute = mk_MFCore_attrib "StructuralComparisonAttribute" + attrib_SealedAttribute = mk_MFCore_attrib "SealedAttribute" + attrib_AbstractClassAttribute = mk_MFCore_attrib "AbstractClassAttribute" + attrib_GeneralizableValueAttribute = mk_MFCore_attrib "GeneralizableValueAttribute" + attrib_MeasureAttribute = mk_MFCore_attrib "MeasureAttribute" + attrib_MeasureableAttribute = mk_MFCore_attrib "MeasureAnnotatedAbbreviationAttribute" + attrib_NoDynamicInvocationAttribute = mk_MFCore_attrib "NoDynamicInvocationAttribute" attrib_SecurityAttribute = if ilg.traits.SecurityPermissionAttributeTypeScopeRef.IsSome then Some(mkSystemRuntimeAttrib"System.Security.Permissions.SecurityAttribute") else None attrib_SecurityCriticalAttribute = mkSystemRuntimeAttrib "System.Security.SecurityCriticalAttribute" attrib_SecuritySafeCriticalAttribute = mkSystemRuntimeAttrib "System.Security.SecuritySafeCriticalAttribute" @@ -1226,36 +1231,36 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa better_tcref_map = begin let entries1 = - [ "Int32", int_tcr; - "IntPtr", nativeint_tcr; - "UIntPtr", unativeint_tcr; - "Int16",int16_tcr; - "Int64",int64_tcr; - "UInt16",uint16_tcr; - "UInt32",uint32_tcr; - "UInt64",uint64_tcr; - "SByte",sbyte_tcr; - "Decimal",decimal_tcr; - "Byte",byte_tcr; - "Boolean",bool_tcr; - "String",string_tcr; - "Object",obj_tcr; - "Exception",exn_tcr; - "Char",char_tcr; - "Double",float_tcr; - "Single",float32_tcr;] + [ "Int32", int_tcr + "IntPtr", nativeint_tcr + "UIntPtr", unativeint_tcr + "Int16",int16_tcr + "Int64",int64_tcr + "UInt16",uint16_tcr + "UInt32",uint32_tcr + "UInt64",uint64_tcr + "SByte",sbyte_tcr + "Decimal",decimal_tcr + "Byte",byte_tcr + "Boolean",bool_tcr + "String",string_tcr + "Object",obj_tcr + "Exception",exn_tcr + "Char",char_tcr + "Double",float_tcr + "Single",float32_tcr] |> List.map (fun (nm,tcr) -> let ty = mkNonGenericTy tcr nm, mkSysTyconRef sys nm, (fun _ -> ty)) let entries2 = - [ "FSharpFunc`2", fastFunc_tcr, (fun tinst -> mkFunTy (List.nth tinst 0) (List.nth tinst 1)); - "Tuple`2", tuple2_tcr, decodeTupleTy; - "Tuple`3", tuple3_tcr, decodeTupleTy; - "Tuple`4", tuple4_tcr, decodeTupleTy; - "Tuple`5", tuple5_tcr, decodeTupleTy; - "Tuple`6", tuple6_tcr, decodeTupleTy; - "Tuple`7", tuple7_tcr, decodeTupleTy; - "Tuple`8", tuple8_tcr, decodeTupleTy;] + [ "FSharpFunc`2", fastFunc_tcr, (fun tinst -> mkFunTy (List.nth tinst 0) (List.nth tinst 1)) + "Tuple`2", tuple2_tcr, decodeTupleTy + "Tuple`3", tuple3_tcr, decodeTupleTy + "Tuple`4", tuple4_tcr, decodeTupleTy + "Tuple`5", tuple5_tcr, decodeTupleTy + "Tuple`6", tuple6_tcr, decodeTupleTy + "Tuple`7", tuple7_tcr, decodeTupleTy + "Tuple`8", tuple8_tcr, decodeTupleTy] let entries = (entries1 @ entries2) if compilingFslib then @@ -1282,172 +1287,175 @@ let mkTcGlobals (compilingFslib,sysCcu,ilg,fslibCcu,directoryToResolveRelativePa (fun tcref2 tinst -> if dict.ContainsKey tcref2.Stamp then Some(dict.[tcref2.Stamp] tinst) else None) - end; + end - new_decimal_info = new_decimal_info; - seq_info = seq_info; - seq_vref = (ValRefForIntrinsic seq_info) ; - and_vref = (ValRefForIntrinsic and_info) ; - and2_vref = (ValRefForIntrinsic and2_info); - addrof_vref = (ValRefForIntrinsic addrof_info); - addrof2_vref = (ValRefForIntrinsic addrof2_info); - or_vref = (ValRefForIntrinsic or_info); - //splice_vref = (ValRefForIntrinsic splice_info); - splice_expr_vref = (ValRefForIntrinsic splice_expr_info); - splice_raw_expr_vref = (ValRefForIntrinsic splice_raw_expr_info); - or2_vref = (ValRefForIntrinsic or2_info); - generic_equality_er_inner_vref = ValRefForIntrinsic generic_equality_er_inner_info; - generic_equality_per_inner_vref = ValRefForIntrinsic generic_equality_per_inner_info; - generic_equality_withc_inner_vref = ValRefForIntrinsic generic_equality_withc_inner_info; - generic_comparison_inner_vref = ValRefForIntrinsic generic_comparison_inner_info; - generic_comparison_withc_inner_vref = ValRefForIntrinsic generic_comparison_withc_inner_info; - generic_comparison_withc_outer_info = generic_comparison_withc_outer_info; - generic_equality_er_outer_info = generic_equality_er_outer_info; - generic_equality_withc_outer_info = generic_equality_withc_outer_info; - generic_hash_withc_outer_info = generic_hash_withc_outer_info; - generic_hash_inner_vref = ValRefForIntrinsic generic_hash_inner_info; - generic_hash_withc_inner_vref = ValRefForIntrinsic generic_hash_withc_inner_info; - - reference_equality_inner_vref = ValRefForIntrinsic reference_equality_inner_info; - - bitwise_or_vref = ValRefForIntrinsic bitwise_or_info; - bitwise_and_vref = ValRefForIntrinsic bitwise_and_info; - bitwise_xor_vref = ValRefForIntrinsic bitwise_xor_info; - bitwise_unary_not_vref = ValRefForIntrinsic bitwise_unary_not_info; - bitwise_shift_left_vref = ValRefForIntrinsic bitwise_shift_left_info; - bitwise_shift_right_vref = ValRefForIntrinsic bitwise_shift_right_info; - unchecked_addition_vref = ValRefForIntrinsic unchecked_addition_info; - unchecked_unary_plus_vref = ValRefForIntrinsic unchecked_unary_plus_info; - unchecked_unary_minus_vref = ValRefForIntrinsic unchecked_unary_minus_info; - unchecked_unary_not_vref = ValRefForIntrinsic unchecked_unary_not_info; - unchecked_subtraction_vref = ValRefForIntrinsic unchecked_subtraction_info; - unchecked_multiply_vref = ValRefForIntrinsic unchecked_multiply_info; - unchecked_defaultof_vref = ValRefForIntrinsic unchecked_defaultof_info; + new_decimal_info = new_decimal_info + seq_info = seq_info + seq_vref = (ValRefForIntrinsic seq_info) + and_vref = (ValRefForIntrinsic and_info) + and2_vref = (ValRefForIntrinsic and2_info) + addrof_vref = (ValRefForIntrinsic addrof_info) + addrof2_vref = (ValRefForIntrinsic addrof2_info) + or_vref = (ValRefForIntrinsic or_info) + //splice_vref = (ValRefForIntrinsic splice_info) + splice_expr_vref = (ValRefForIntrinsic splice_expr_info) + splice_raw_expr_vref = (ValRefForIntrinsic splice_raw_expr_info) + or2_vref = (ValRefForIntrinsic or2_info) + generic_equality_er_inner_vref = ValRefForIntrinsic generic_equality_er_inner_info + generic_equality_per_inner_vref = ValRefForIntrinsic generic_equality_per_inner_info + generic_equality_withc_inner_vref = ValRefForIntrinsic generic_equality_withc_inner_info + generic_comparison_inner_vref = ValRefForIntrinsic generic_comparison_inner_info + generic_comparison_withc_inner_vref = ValRefForIntrinsic generic_comparison_withc_inner_info + generic_comparison_withc_outer_info = generic_comparison_withc_outer_info + generic_equality_er_outer_info = generic_equality_er_outer_info + generic_equality_withc_outer_info = generic_equality_withc_outer_info + generic_hash_withc_outer_info = generic_hash_withc_outer_info + generic_hash_inner_vref = ValRefForIntrinsic generic_hash_inner_info + generic_hash_withc_inner_vref = ValRefForIntrinsic generic_hash_withc_inner_info + + reference_equality_inner_vref = ValRefForIntrinsic reference_equality_inner_info + + bitwise_or_vref = ValRefForIntrinsic bitwise_or_info + bitwise_and_vref = ValRefForIntrinsic bitwise_and_info + bitwise_xor_vref = ValRefForIntrinsic bitwise_xor_info + bitwise_unary_not_vref = ValRefForIntrinsic bitwise_unary_not_info + bitwise_shift_left_vref = ValRefForIntrinsic bitwise_shift_left_info + bitwise_shift_right_vref = ValRefForIntrinsic bitwise_shift_right_info + unchecked_addition_vref = ValRefForIntrinsic unchecked_addition_info + unchecked_unary_plus_vref = ValRefForIntrinsic unchecked_unary_plus_info + unchecked_unary_minus_vref = ValRefForIntrinsic unchecked_unary_minus_info + unchecked_unary_not_vref = ValRefForIntrinsic unchecked_unary_not_info + unchecked_subtraction_vref = ValRefForIntrinsic unchecked_subtraction_info + unchecked_multiply_vref = ValRefForIntrinsic unchecked_multiply_info + unchecked_defaultof_vref = ValRefForIntrinsic unchecked_defaultof_info unchecked_subtraction_info = unchecked_subtraction_info - compare_operator_vref = ValRefForIntrinsic compare_operator_info; - equals_operator_vref = ValRefForIntrinsic equals_operator_info; - equals_nullable_operator_vref = ValRefForIntrinsic equals_nullable_operator_info; - nullable_equals_nullable_operator_vref = ValRefForIntrinsic nullable_equals_nullable_operator_info; - nullable_equals_operator_vref = ValRefForIntrinsic nullable_equals_operator_info; - not_equals_operator_vref = ValRefForIntrinsic not_equals_operator_info; - less_than_operator_vref = ValRefForIntrinsic less_than_operator_info; - less_than_or_equals_operator_vref = ValRefForIntrinsic less_than_or_equals_operator_info; - greater_than_operator_vref = ValRefForIntrinsic greater_than_operator_info; - greater_than_or_equals_operator_vref = ValRefForIntrinsic greater_than_or_equals_operator_info; - - equals_operator_info = equals_operator_info; - - raise_info = raise_info; - reraise_info = reraise_info; - reraise_vref = ValRefForIntrinsic reraise_info; - methodhandleof_info = methodhandleof_info; - methodhandleof_vref = ValRefForIntrinsic methodhandleof_info; - typeof_info = typeof_info; - typeof_vref = ValRefForIntrinsic typeof_info; - sizeof_vref = ValRefForIntrinsic sizeof_info; - typedefof_info = typedefof_info; - typedefof_vref = ValRefForIntrinsic typedefof_info; - enum_vref = ValRefForIntrinsic enum_info; - enumOfValue_vref = ValRefForIntrinsic enumOfValue_info; - range_op_vref = ValRefForIntrinsic range_op_info; - range_int32_op_vref = ValRefForIntrinsic range_int32_op_info; - //range_step_op_vref = ValRefForIntrinsic range_step_op_info; + compare_operator_vref = ValRefForIntrinsic compare_operator_info + equals_operator_vref = ValRefForIntrinsic equals_operator_info + equals_nullable_operator_vref = ValRefForIntrinsic equals_nullable_operator_info + nullable_equals_nullable_operator_vref = ValRefForIntrinsic nullable_equals_nullable_operator_info + nullable_equals_operator_vref = ValRefForIntrinsic nullable_equals_operator_info + not_equals_operator_vref = ValRefForIntrinsic not_equals_operator_info + less_than_operator_vref = ValRefForIntrinsic less_than_operator_info + less_than_or_equals_operator_vref = ValRefForIntrinsic less_than_or_equals_operator_info + greater_than_operator_vref = ValRefForIntrinsic greater_than_operator_info + greater_than_or_equals_operator_vref = ValRefForIntrinsic greater_than_or_equals_operator_info + + equals_operator_info = equals_operator_info + + raise_info = raise_info + reraise_info = reraise_info + reraise_vref = ValRefForIntrinsic reraise_info + methodhandleof_info = methodhandleof_info + methodhandleof_vref = ValRefForIntrinsic methodhandleof_info + typeof_info = typeof_info + typeof_vref = ValRefForIntrinsic typeof_info + sizeof_vref = ValRefForIntrinsic sizeof_info + typedefof_info = typedefof_info + typedefof_vref = ValRefForIntrinsic typedefof_info + enum_vref = ValRefForIntrinsic enum_info + enumOfValue_vref = ValRefForIntrinsic enumOfValue_info + range_op_vref = ValRefForIntrinsic range_op_info + range_int32_op_vref = ValRefForIntrinsic range_int32_op_info + //range_step_op_vref = ValRefForIntrinsic range_step_op_info array_length_info = array_length_info - array_get_vref = ValRefForIntrinsic array_get_info; - array2D_get_vref = ValRefForIntrinsic array2D_get_info; - array3D_get_vref = ValRefForIntrinsic array3D_get_info; - array4D_get_vref = ValRefForIntrinsic array4D_get_info; - seq_singleton_vref = ValRefForIntrinsic seq_singleton_info; - seq_collect_vref = ValRefForIntrinsic seq_collect_info; - seq_collect_info = seq_collect_info; - seq_using_info = seq_using_info; - seq_using_vref = ValRefForIntrinsic seq_using_info; - seq_delay_info = seq_delay_info; - seq_delay_vref = ValRefForIntrinsic seq_delay_info; - seq_append_info = seq_append_info; - seq_append_vref = ValRefForIntrinsic seq_append_info; - seq_generated_info = seq_generated_info; - seq_generated_vref = ValRefForIntrinsic seq_generated_info; - seq_finally_info = seq_finally_info; - seq_finally_vref = ValRefForIntrinsic seq_finally_info; - seq_of_functions_info = seq_of_functions_info; - seq_of_functions_vref = ValRefForIntrinsic seq_of_functions_info; - seq_map_info = seq_map_info; - seq_map_vref = ValRefForIntrinsic seq_map_info; - seq_singleton_info = seq_singleton_info; - seq_empty_info = seq_empty_info; - seq_empty_vref = ValRefForIntrinsic seq_empty_info; - new_format_info = new_format_info; - new_format_vref = ValRefForIntrinsic new_format_info; - sprintf_vref = ValRefForIntrinsic sprintf_info; - unbox_vref = ValRefForIntrinsic unbox_info; - unbox_fast_vref = ValRefForIntrinsic unbox_fast_info; - istype_vref = ValRefForIntrinsic istype_info; - istype_fast_vref = ValRefForIntrinsic istype_fast_info; - unbox_info = unbox_info; - get_generic_comparer_info = get_generic_comparer_info; - get_generic_er_equality_comparer_info = get_generic_er_equality_comparer_info; - get_generic_per_equality_comparer_info = get_generic_per_equality_comparer_info; - dispose_info = dispose_info; - unbox_fast_info = unbox_fast_info; - istype_info = istype_info; - istype_fast_info = istype_fast_info; - lazy_force_info = lazy_force_info; - lazy_create_info = lazy_create_info; - create_instance_info = create_instance_info; - create_event_info = create_event_info; - seq_to_list_info = seq_to_list_info; - seq_to_array_info = seq_to_array_info; - array_get_info = array_get_info; - array2D_get_info = array2D_get_info; - array3D_get_info = array3D_get_info; - array4D_get_info = array4D_get_info; - unpickle_quoted_info = unpickle_quoted_info; - cast_quotation_info = cast_quotation_info; - lift_value_info = lift_value_info; - query_source_as_enum_info = query_source_as_enum_info; - new_query_source_info = new_query_source_info; - query_source_vref = ValRefForIntrinsic query_source_info; - query_value_vref = ValRefForIntrinsic query_value_info; - query_run_value_vref = ValRefForIntrinsic query_run_value_info; - query_run_enumerable_vref = ValRefForIntrinsic query_run_enumerable_info; - query_for_vref = ValRefForIntrinsic query_for_value_info; - query_yield_vref = ValRefForIntrinsic query_yield_value_info; - query_yield_from_vref = ValRefForIntrinsic query_yield_from_value_info; - query_select_vref = ValRefForIntrinsic query_select_value_info; - query_where_vref = ValRefForIntrinsic query_where_value_info; - query_zero_vref = ValRefForIntrinsic query_zero_value_info; - query_builder_tcref = query_builder_tcref; - fail_init_info = fail_init_info; - fail_static_init_info = fail_static_init_info; - check_this_info = check_this_info; - quote_to_linq_lambda_info = quote_to_linq_lambda_info; - - - generic_hash_withc_tuple2_vref = ValRefForIntrinsic generic_hash_withc_tuple2_info; - generic_hash_withc_tuple3_vref = ValRefForIntrinsic generic_hash_withc_tuple3_info; - generic_hash_withc_tuple4_vref = ValRefForIntrinsic generic_hash_withc_tuple4_info; - generic_hash_withc_tuple5_vref = ValRefForIntrinsic generic_hash_withc_tuple5_info; - generic_equals_withc_tuple2_vref = ValRefForIntrinsic generic_equals_withc_tuple2_info; - generic_equals_withc_tuple3_vref = ValRefForIntrinsic generic_equals_withc_tuple3_info; - generic_equals_withc_tuple4_vref = ValRefForIntrinsic generic_equals_withc_tuple4_info; - generic_equals_withc_tuple5_vref = ValRefForIntrinsic generic_equals_withc_tuple5_info; - generic_compare_withc_tuple2_vref = ValRefForIntrinsic generic_compare_withc_tuple2_info; - generic_compare_withc_tuple3_vref = ValRefForIntrinsic generic_compare_withc_tuple3_info; - generic_compare_withc_tuple4_vref = ValRefForIntrinsic generic_compare_withc_tuple4_info; - generic_compare_withc_tuple5_vref = ValRefForIntrinsic generic_compare_withc_tuple5_info; - generic_equality_withc_outer_vref = ValRefForIntrinsic generic_equality_withc_outer_info; - - - cons_ucref = cons_ucref; - nil_ucref = nil_ucref; + array_get_vref = ValRefForIntrinsic array_get_info + array2D_get_vref = ValRefForIntrinsic array2D_get_info + array3D_get_vref = ValRefForIntrinsic array3D_get_info + array4D_get_vref = ValRefForIntrinsic array4D_get_info + seq_singleton_vref = ValRefForIntrinsic seq_singleton_info + seq_collect_vref = ValRefForIntrinsic seq_collect_info + seq_collect_info = seq_collect_info + seq_using_info = seq_using_info + seq_using_vref = ValRefForIntrinsic seq_using_info + seq_delay_info = seq_delay_info + seq_delay_vref = ValRefForIntrinsic seq_delay_info + seq_append_info = seq_append_info + seq_append_vref = ValRefForIntrinsic seq_append_info + seq_generated_info = seq_generated_info + seq_generated_vref = ValRefForIntrinsic seq_generated_info + seq_finally_info = seq_finally_info + seq_finally_vref = ValRefForIntrinsic seq_finally_info + seq_of_functions_info = seq_of_functions_info + seq_of_functions_vref = ValRefForIntrinsic seq_of_functions_info + seq_map_info = seq_map_info + seq_map_vref = ValRefForIntrinsic seq_map_info + seq_singleton_info = seq_singleton_info + seq_empty_info = seq_empty_info + seq_empty_vref = ValRefForIntrinsic seq_empty_info + new_format_info = new_format_info + new_format_vref = ValRefForIntrinsic new_format_info + sprintf_vref = ValRefForIntrinsic sprintf_info + unbox_vref = ValRefForIntrinsic unbox_info + unbox_fast_vref = ValRefForIntrinsic unbox_fast_info + istype_vref = ValRefForIntrinsic istype_info + istype_fast_vref = ValRefForIntrinsic istype_fast_info + unbox_info = unbox_info + get_generic_comparer_info = get_generic_comparer_info + get_generic_er_equality_comparer_info = get_generic_er_equality_comparer_info + get_generic_per_equality_comparer_info = get_generic_per_equality_comparer_info + dispose_info = dispose_info + unbox_fast_info = unbox_fast_info + istype_info = istype_info + istype_fast_info = istype_fast_info + lazy_force_info = lazy_force_info + lazy_create_info = lazy_create_info + create_instance_info = create_instance_info + create_event_info = create_event_info + seq_to_list_info = seq_to_list_info + seq_to_array_info = seq_to_array_info + array_get_info = array_get_info + array2D_get_info = array2D_get_info + array3D_get_info = array3D_get_info + array4D_get_info = array4D_get_info + deserialize_quoted_FSharp_20_plus_info = deserialize_quoted_FSharp_20_plus_info + deserialize_quoted_FSharp_40_plus_info = deserialize_quoted_FSharp_40_plus_info + cast_quotation_info = cast_quotation_info + lift_value_info = lift_value_info + lift_value_with_name_info = lift_value_with_name_info + lift_value_with_defn_info = lift_value_with_defn_info + query_source_as_enum_info = query_source_as_enum_info + new_query_source_info = new_query_source_info + query_source_vref = ValRefForIntrinsic query_source_info + query_value_vref = ValRefForIntrinsic query_value_info + query_run_value_vref = ValRefForIntrinsic query_run_value_info + query_run_enumerable_vref = ValRefForIntrinsic query_run_enumerable_info + query_for_vref = ValRefForIntrinsic query_for_value_info + query_yield_vref = ValRefForIntrinsic query_yield_value_info + query_yield_from_vref = ValRefForIntrinsic query_yield_from_value_info + query_select_vref = ValRefForIntrinsic query_select_value_info + query_where_vref = ValRefForIntrinsic query_where_value_info + query_zero_vref = ValRefForIntrinsic query_zero_value_info + query_builder_tcref = query_builder_tcref + fail_init_info = fail_init_info + fail_static_init_info = fail_static_init_info + check_this_info = check_this_info + quote_to_linq_lambda_info = quote_to_linq_lambda_info + + + generic_hash_withc_tuple2_vref = ValRefForIntrinsic generic_hash_withc_tuple2_info + generic_hash_withc_tuple3_vref = ValRefForIntrinsic generic_hash_withc_tuple3_info + generic_hash_withc_tuple4_vref = ValRefForIntrinsic generic_hash_withc_tuple4_info + generic_hash_withc_tuple5_vref = ValRefForIntrinsic generic_hash_withc_tuple5_info + generic_equals_withc_tuple2_vref = ValRefForIntrinsic generic_equals_withc_tuple2_info + generic_equals_withc_tuple3_vref = ValRefForIntrinsic generic_equals_withc_tuple3_info + generic_equals_withc_tuple4_vref = ValRefForIntrinsic generic_equals_withc_tuple4_info + generic_equals_withc_tuple5_vref = ValRefForIntrinsic generic_equals_withc_tuple5_info + generic_compare_withc_tuple2_vref = ValRefForIntrinsic generic_compare_withc_tuple2_info + generic_compare_withc_tuple3_vref = ValRefForIntrinsic generic_compare_withc_tuple3_info + generic_compare_withc_tuple4_vref = ValRefForIntrinsic generic_compare_withc_tuple4_info + generic_compare_withc_tuple5_vref = ValRefForIntrinsic generic_compare_withc_tuple5_info + generic_equality_withc_outer_vref = ValRefForIntrinsic generic_equality_withc_outer_info + + + cons_ucref = cons_ucref + nil_ucref = nil_ucref - suppressed_types = suppressed_types; + suppressed_types = suppressed_types isInteractive=isInteractive mkSysTyconRef=mkSysTyconRef } -let public mkMscorlibAttrib g nm : BuiltinAttribInfo = +let public mkMscorlibAttrib g nm = let path, typeName = splitILTypeName nm AttribInfo(mkILTyRef (g.ilg.traits.ScopeRef,nm), g.mkSysTyconRef path typeName) diff --git a/src/fsharp/tc.fs b/src/fsharp/TypeChecker.fs similarity index 97% rename from src/fsharp/tc.fs rename to src/fsharp/TypeChecker.fs index befb478ecb2..4596a830f76 100644 --- a/src/fsharp/tc.fs +++ b/src/fsharp/TypeChecker.fs @@ -4,33 +4,36 @@ /// with generalization at appropriate points. module internal Microsoft.FSharp.Compiler.TypeChecker +#nowarn "44" // This construct is deprecated. please use List.item + open Internal.Utilities open Internal.Utilities.Collections open Microsoft.FSharp.Compiler.AbstractIL open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.AbstractIL.Internal open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library +open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library.ResultOrException open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.Range +open Microsoft.FSharp.Compiler.Rational open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Patcompile -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.PatternMatchCompilation +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Layout -open Microsoft.FSharp.Compiler.Outcome open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.Infos.AccessibilityLogic open Microsoft.FSharp.Compiler.Infos.AttributeChecking -open Microsoft.FSharp.Compiler.Typrelns +open Microsoft.FSharp.Compiler.TypeRelations open Microsoft.FSharp.Compiler.ConstraintSolver -open Microsoft.FSharp.Compiler.Nameres +open Microsoft.FSharp.Compiler.NameResolution open Microsoft.FSharp.Compiler.PrettyNaming open System open System.Collections.Generic @@ -118,7 +121,7 @@ let IsSecurityAttribute g amap (casmap : Dictionary) (Attrib(tcref,_ if casmap.ContainsKey(tcs) then casmap.[tcs] else - let exists = ExistsInEntireHierarchyOfType (fun t -> typeEquiv g t (mkAppTy attr.TyconRef [])) g amap m AllowMultiIntfInstantiations.No (mkAppTy tcref []) + let exists = ExistsInEntireHierarchyOfType (fun t -> typeEquiv g t (mkAppTy attr.TyconRef [])) g amap m AllowMultiIntfInstantiations.Yes (mkAppTy tcref []) casmap.[tcs] <- exists exists | _ -> false @@ -410,8 +413,8 @@ let AddLocalTyconsAndReport tcSink g amap scopem tycons env = // Open a structure or an IL namespace //------------------------------------------------------------------------- -let OpenModulesOrNamespaces tcSink g amap scopem env mvvs = - let env = ModifyNameResEnv (fun nenv -> AddModulesAndNamespacesContentsToNameEnv g amap env.eAccessRights scopem nenv mvvs) env +let OpenModulesOrNamespaces tcSink g amap scopem root env mvvs = + let env = ModifyNameResEnv (fun nenv -> AddModulesAndNamespacesContentsToNameEnv g amap env.eAccessRights scopem root nenv mvvs) env CallEnvSink tcSink (scopem,env.NameEnv,env.eAccessRights) env @@ -468,7 +471,7 @@ let AddDeclaredTypars check typars env = /// - the set of active fixups for "letrec" type inference [] type cenv = - { g: Env.TcGlobals + { 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 @@ -552,7 +555,7 @@ let MakeInnerEnv env nm modKind = let path = env.ePath @ [nm] (* Note: here we allocate a new module type accumulator *) let mtypeAcc = ref (NewEmptyModuleOrNamespaceType modKind) - let cpath = mkNestedCPath env.eCompPath nm.idText modKind + let cpath = env.eCompPath.NestedCompPath nm.idText modKind { env with ePath = path eCompPath = cpath eAccessPath = cpath @@ -569,7 +572,7 @@ let MakeInnerEnvForTyconRef _cenv env tcref isExtrinsicExtension = // Regular members get access to protected stuff let env = EnterFamilyRegion tcref env // Note: assumes no nesting - let eAccessPath = mkNestedCPath env.eCompPath tcref.LogicalName ModuleOrType + let eAccessPath = env.eCompPath.NestedCompPath tcref.LogicalName ModuleOrType { env with eAccessRights = computeAccessRights eAccessPath env.eInternalsVisibleCompPaths env.eFamilyType // update this computed field eAccessPath = eAccessPath } @@ -594,23 +597,37 @@ let LocateEnv ccu env enclosingNamespacePath = let env = List.fold (fun env id -> MakeInnerEnv env id Namespace |> fst) env enclosingNamespacePath env -let BuildRootModuleType enclosingNamespacePath cpath mtyp = +let BuildRootModuleType enclosingNamespacePath (cpath:CompilationPath) mtyp = (enclosingNamespacePath,(cpath, mtyp)) - ||> List.foldBack (fun id (cpath, mtyp) -> (parentCompPath cpath, wrapModuleOrNamespaceTypeInNamespace id (parentCompPath cpath) mtyp)) + ||> List.foldBack (fun id (cpath, mtyp) -> (cpath.ParentCompPath, wrapModuleOrNamespaceTypeInNamespace id cpath.ParentCompPath mtyp)) |> snd -let BuildRootModuleExpr enclosingNamespacePath cpath mexpr = +let BuildRootModuleExpr enclosingNamespacePath (cpath:CompilationPath) mexpr = (enclosingNamespacePath,(cpath, mexpr)) - ||> List.foldBack (fun id (cpath, mexpr) -> (parentCompPath cpath, wrapModuleOrNamespaceExprInNamespace id (parentCompPath cpath) mexpr)) + ||> List.foldBack (fun id (cpath, mexpr) -> (cpath.ParentCompPath, wrapModuleOrNamespaceExprInNamespace id cpath.ParentCompPath mexpr)) |> snd +let TryStripPrefixPath (g:TcGlobals) (enclosingNamespacePath: Ident list) = + match enclosingNamespacePath with + | p::rest when g.isInteractive && + p.idText.StartsWith(FsiDynamicModulePrefix,System.StringComparison.Ordinal) && + p.idText.[FsiDynamicModulePrefix.Length..] |> String.forall System.Char.IsDigit && + rest.Length > 0 -> Some(p,rest) + | _ -> None + let ImplicitlyOpenOwnNamespace tcSink g amap scopem enclosingNamespacePath env = if isNil enclosingNamespacePath then env else + // For F# interactive, skip "FSI_0002" prefixes when determining the path to open implicitly + let enclosingNamespacePathToOpen = + match TryStripPrefixPath g enclosingNamespacePath with + | Some(_,rest) -> rest + | None -> enclosingNamespacePath + let ad = env.eAccessRights - match ResolveLongIndentAsModuleOrNamespace amap scopem OpenQualified env.eNameResEnv ad enclosingNamespacePath with - | Result modrefs -> OpenModulesOrNamespaces tcSink g amap scopem env (List.map p23 modrefs) + match ResolveLongIndentAsModuleOrNamespace amap scopem OpenQualified env.eNameResEnv ad enclosingNamespacePathToOpen with + | Result modrefs -> OpenModulesOrNamespaces tcSink g amap scopem false env (List.map p23 modrefs) | Exception _ -> env @@ -753,6 +770,13 @@ type AfterTcOverloadResolution = | AfterTcOverloadResolution.ReplaceWithOverrideAndSendToSink(_,_,IfOverloadResolutionFails f) -> f() +/// Typecheck rational constant terms in units-of-measure exponents +let rec TcSynRationalConst c = + match c with + | SynRationalConst.Integer i -> intToRational i + | SynRationalConst.Negate c' -> NegRational (TcSynRationalConst c') + | SynRationalConst.Rational(p,q,_) -> DivRational (intToRational p) (intToRational q) + /// Typecheck constant terms in expressions and patterns let TcConst cenv ty m env c = let rec tcMeasure ms = @@ -765,7 +789,7 @@ let TcConst cenv ty m env c = | TyparKind.Type -> error(Error(FSComp.SR.tcExpectedUnitOfMeasureNotType(), m)) | TyparKind.Measure -> MeasureCon tcref - | SynMeasure.Power(ms, exponent, _) -> MeasurePower (tcMeasure ms) exponent + | SynMeasure.Power(ms, exponent, _) -> MeasureRationalPower (tcMeasure ms, TcSynRationalConst exponent) | SynMeasure.Product(ms1,ms2,_) -> MeasureProd(tcMeasure ms1, tcMeasure ms2) | SynMeasure.Divide(ms1, ((SynMeasure.Seq (_::(_::_), _)) as ms2), m) -> warning(Error(FSComp.SR.tcImplicitMeasureFollowingSlash(),m)) @@ -903,8 +927,8 @@ let ComputeLogicalName (id:Ident) memberFlags = | (".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 + | MemberKind.PropertyGet -> "get_" + id.idText + | MemberKind.PropertySet -> "set_" + id.idText /// ValMemberInfoTransient(memberInfo,logicalName,compiledName) type ValMemberInfoTransient = ValMemberInfoTransient of ValMemberInfo * string * string @@ -916,7 +940,7 @@ type ValMemberInfoTransient = ValMemberInfoTransient of ValMemberInfo * string * 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 = + let memberInfo : ValMemberInfo = { ApparentParent=tcref MemberFlags=memberFlags IsImplemented=false @@ -935,7 +959,7 @@ let MakeMemberDataAndMangledNameForMemberVal(g,tcref,isExtrinsic,attrs,optImplSl let compiledName = if isExtrinsic then let tname = tcref.LogicalName - let text = tname^"."^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.IsOverrideOrExplicitImpl then text^".Override" else text text @@ -1141,7 +1165,7 @@ type CheckedBindingInfo = bool * (* immutable? *) Tast.Attribs * XmlDoc * - (TcPatPhase2Input -> Patcompile.Pattern) * + (TcPatPhase2Input -> PatternMatchCompilation.Pattern) * ExplicitTyparInfo * NameMap * Expr * @@ -1809,7 +1833,7 @@ let BuildFieldMap cenv env isPartial ty flds m = let frefSet = ResolveField cenv.nameResolver env.eNameResEnv ad ty fld fld,frefSet, fldExpr) let relevantTypeSets = - frefSets |> List.map (fun (_,frefSet,_) -> frefSet |> List.choose (fun rfref -> Some rfref.TyconRef)) + frefSets |> List.map (fun (_,frefSet,_) -> frefSet |> List.choose (fun (FieldResolution(rfref,_)) -> Some rfref.TyconRef)) let tcref = match List.fold (ListSet.intersect (tyconRefEq cenv.g)) (List.head relevantTypeSets) (List.tail relevantTypeSets) with @@ -1821,13 +1845,13 @@ let BuildFieldMap cenv env isPartial ty flds m = // 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 fref1 = List.head frefSet1 + let (FieldResolution(fref1,_))= List.head frefSet1 fref1.TyconRef let fldsmap,rfldsList = ((Map.empty,[]), frefSets) ||> List.fold (fun (fs,rfldsList) (fld,frefs,fldExpr) -> - match frefs |> List.filter (fun fref2 -> tyconRefEq cenv.g tcref fref2.TyconRef) with - | [fref2] -> + match frefs |> List.filter (fun (FieldResolution(fref2,_)) -> tyconRefEq cenv.g tcref fref2.TyconRef) with + | [FieldResolution(fref2,showDeprecated)] -> // Record the precise resolution of the field for intellisense let item = FreshenRecdFieldRef cenv.nameResolver m fref2 @@ -1837,9 +1861,12 @@ let BuildFieldMap cenv env isPartial ty flds m = CheckFSharpAttributes cenv.g fref2.PropertyAttribs m |> CommitOperationResult 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 let (_,frefSet1,_) = List.head frefSets - let fref1 = List.head frefSet1 + let (FieldResolution(fref1,_)) = List.head frefSet1 errorR (FieldsFromDifferentTypes(env.DisplayEnv,fref1,fref2,m)) (fs,rfldsList) else (Map.add fref2.FieldName fldExpr fs, @@ -1857,7 +1884,10 @@ let rec ApplyUnionCaseOrExn (makerForUnionCase,makerForExnTag) m cenv env overal let mkf = makerForExnTag(ecref) mkf,recdFieldTysOfExnDefRef ecref, [ for f in (recdFieldsOfExnDefRef ecref) -> f.Name ] - | Item.UnionCase ucinfo -> + | Item.UnionCase(ucinfo,showDeprecated) -> + if showDeprecated then + warning(Deprecated(FSComp.SR.nrUnionTypeNeedsQualifiedAccess(ucinfo.Name,ucinfo.Tycon.DisplayName) |> snd,m)) + let ucref = ucinfo.UnionCaseRef CheckUnionCaseAttributes cenv.g ucref m |> CommitOperationResult CheckUnionCaseAccessible cenv.amap m ad ucref |> ignore @@ -2040,7 +2070,7 @@ module GeneralizationHelpers = TrimUngeneralizableTypars genConstrainedTyparFlag inlineFlag generalizedTypars freeInEnv /// Condense type variables in positive position - let CondenseTypars (cenv, denv:DisplayEnv, generalizedTypars: Typars, tauTy) = + let CondenseTypars (cenv, denv:DisplayEnv, generalizedTypars: Typars, tauTy, m) = // The type of the value is ty11 * ... * ty1N -> ... -> tyM1 * ... * tyMM -> retTy // This is computed REGARDLESS of the arity of the expression. @@ -2056,7 +2086,7 @@ module GeneralizationHelpers = match tp.Constraints |> List.partition (function (TyparConstraint.CoercesTo _) -> true | _ -> false) with | [TyparConstraint.CoercesTo(cxty,_)], others -> // Throw away null constraints if they are implied - match others |> List.filter (function (TyparConstraint.SupportsNull(_)) -> not (TypeSatisfiesNullConstraint cenv.g cxty) | _ -> true) with + match others |> List.filter (function (TyparConstraint.SupportsNull(_)) -> not (TypeSatisfiesNullConstraint cenv.g m cxty) | _ -> true) with | [] -> Some cxty | _ -> None | _ -> None @@ -2130,7 +2160,7 @@ module GeneralizationHelpers = let ty = mkTyparTy tp error(Error(FSComp.SR.tcNotSufficientlyGenericBecauseOfScope(NicePrint.prettyStringOfTy denv ty),m))) - let generalizedTypars = CondenseTypars(cenv,denv,generalizedTypars,tauTy) + let generalizedTypars = CondenseTypars(cenv, denv, generalizedTypars, tauTy, m) let generalizedTypars = if canInferTypars then generalizedTypars @@ -2894,7 +2924,7 @@ let BuildILFieldGet g amap m objExpr (finfo:ILFieldInfo) = | _ -> #endif let wrap,objExpr = 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 + // 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.EnclosingTypeRef []) @@ -2906,7 +2936,7 @@ let BuildILFieldSet g m objExpr (finfo:ILFieldInfo) argExpr = 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.gen_asm + // 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.EnclosingTypeRef []) @@ -2919,7 +2949,7 @@ let BuildILStaticFieldSet m (finfo:ILFieldInfo) argExpr = 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.gen_asm + // 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.EnclosingTypeRef []) @@ -2993,11 +3023,16 @@ let GetMethodArgs arg = | SynExpr.Const (SynConst.Unit,_) -> [] | SynExprParen(SynExpr.Tuple (args,_,_),_,_,_) | SynExpr.Tuple (args,_,_) -> args | SynExprParen(arg,_,_,_) | arg -> [arg] - let unnamedCallerArgs,namedCallerArgs = List.takeUntil IsNamedArg args + let unnamedCallerArgs,namedCallerArgs = + args |> List.takeUntil IsNamedArg let namedCallerArgs = namedCallerArgs |> List.choose (fun e -> - if not (IsNamedArg e) then - error(Error(FSComp.SR.tcNameArgumentsMustAppearLast(), e.Range)) + if not (IsNamedArg e) then + // 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 _ -> () + | _ -> error(Error(FSComp.SR.tcNameArgumentsMustAppearLast(), e.Range)) TryGetNamedArg e) unnamedCallerArgs, namedCallerArgs @@ -3672,6 +3707,9 @@ type DelayedItem = /// Represents the long identifiers in "item.Ident1", or "item.Ident1.Ident2" etc. | DelayedDotLookup of Ast.Ident list * range + /// Represents an incomplete "item." + | DelayedDot + /// Represents the valueExpr in "item <- valueExpr", also "item.[indexerArgs] <- valueExpr" etc. | DelayedSet of Ast.SynExpr * range @@ -4030,8 +4068,8 @@ and TcValSpec cenv env declKind newOk containerInfo memFlagsOpt thisTyOpt tpenv thisTy --> (delTy --> cenv.g.unit_ty) 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) ] + yield reallyGenerateOneMember(ident("add_" + id.idText,id.idRange),valSynInfo,ty,memberFlags) + yield reallyGenerateOneMember(ident("remove_" + id.idText,id.idRange),valSynInfo,ty,memberFlags) ] @@ -4227,7 +4265,7 @@ and TcTypeOrMeasure optKind cenv newOk checkCxs occ env (tpenv:SyntacticUnscoped NewErrorType (), tpenv | _ -> let ms,tpenv = TcMeasure cenv newOk checkCxs occ env tpenv typ m - TType_measure (Tastops.MeasurePower ms exponent), tpenv + TType_measure (MeasureRationalPower (ms, TcSynRationalConst exponent)), tpenv | SynType.MeasureDivide(typ1, typ2, m) -> match optKind with @@ -4318,12 +4356,12 @@ and TcTyparConstraints cenv newOk checkCxs occ env tpenv wcs = tpenv #if EXTENSIONTYPING -and TcStaticConstantParameter cenv (env:TcEnv) tpenv kind (v:SynType) idOpt (tcref:TyconRef) = +and TcStaticConstantParameter cenv (env:TcEnv) tpenv kind (v:SynType) idOpt container = let fail() = error(Error(FSComp.SR.etInvalidStaticArgument(NicePrint.minimalStringOfType env.DisplayEnv kind),v.Range)) let record(ttype) = match idOpt with | Some id -> - let item = Item.ArgName (id, ttype, Some(ArgumentContainer.Type(tcref))) + let item = Item.ArgName (id, ttype, Some(container)) CallNameResolutionSink cenv.tcSink (id.idRange,env.NameEnv,item,item,ItemOccurence.Use,env.DisplayEnv,env.eAccessRights) | _ -> () match v with @@ -4378,19 +4416,11 @@ and TcStaticConstantParameter cenv (env:TcEnv) tpenv kind (v:SynType) idOpt (tcr v, tpenv' | SynType.LongIdent(lidwd) -> let m = lidwd.Range - TcStaticConstantParameter cenv env tpenv kind (SynType.StaticConstantExpr(SynExpr.LongIdent(false,lidwd,None,m),m)) idOpt tcref + TcStaticConstantParameter cenv env tpenv kind (SynType.StaticConstantExpr(SynExpr.LongIdent(false,lidwd,None,m),m)) idOpt container | _ -> fail() -and TcProvidedTypeAppToStaticConstantArgs cenv env optGeneratedTypePath tpenv (tcref:TyconRef) (args: SynType list) m = - 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 = staticParameters.PApplyArray(id, "GetStaticParameters", m) - +and CrackStaticConstantArgs cenv env tpenv (staticParameters: Tainted[], args: SynType list, container, containerName, m) = let args = args |> List.map (function | SynType.StaticConstantNamed(SynType.LongIdent(LongIdentWithDots([id],_)),v,_) -> (Some id, v) @@ -4401,7 +4431,6 @@ and TcProvidedTypeAppToStaticConstantArgs cenv env optGeneratedTypePath tpenv (t let otherArgs = otherArgs |> Seq.skipWhile (fst >> isSome) |> Seq.toList if not otherArgs.IsEmpty then error (Error(FSComp.SR.etBadUnnamedStaticArgs(),m)) - for (n,_) in namedArgs do match staticParameters |> Array.toList |> List.mapi (fun j x -> (j,x)) |> List.filter (fun (j,sp) -> j >= unnamedArgs.Length && n.idText = sp.PUntaint((fun sp -> sp.Name), m)) with | [] -> @@ -4421,23 +4450,35 @@ and TcProvidedTypeAppToStaticConstantArgs cenv env optGeneratedTypePath tpenv (t let spName = sp.PUntaint((fun sp -> sp.Name), m) if i < unnamedArgs.Length then let v = unnamedArgs.[i] - let v, _tpenv = TcStaticConstantParameter cenv env tpenv spKind v None tcref + 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)] -> - let v, _tpenv = TcStaticConstantParameter cenv env tpenv spKind v (Some n) tcref + 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, tcref.DisplayName, tcref.DisplayName, spName) ,m)) + | null -> error (Error(FSComp.SR.etStaticParameterRequiresAValue (spName, containerName, containerName, spName) ,m)) | v -> v else - error (Error(FSComp.SR.etStaticParameterRequiresAValue (spName, tcref.DisplayName, tcref.DisplayName, spName),m)) + error (Error(FSComp.SR.etStaticParameterRequiresAValue (spName, containerName, containerName, spName),m)) | 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 + | TProvidedTypeExtensionPoint info -> info.ProvidedType + | _ -> failwith "unreachable" + + 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 = @@ -4448,6 +4489,29 @@ and TcProvidedTypeAppToStaticConstantArgs cenv env optGeneratedTypePath tpenv (t let hasNoArgs = (argsInStaticParameterOrderIncludingDefaults.Length = 0) 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) -> + let providedMethAfterStaticArguments = TcProvidedMethodAppToStaticConstantArgs cenv env tpenv (minfo, methBeforeArguments, staticParams, args, mExprAndArg) + let minfoAfterStaticArguments = ProvidedMeth(cenv.amap,providedMethAfterStaticArguments,minfo.ExtensionMemberPriorityOption,mItem) + Some minfoAfterStaticArguments + | _ -> None + | _ -> None + +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 + | None -> error(Error(FSComp.SR.etErrorApplyingStaticArgumentsToMethod(),m)) + | Some meth-> meth + + providedMethAfterStaticArguments + and TcProvidedTypeApp cenv env tpenv tcref args m = let hasNoArgs,providedTypeAfterStaticArguments,checkTypeName = TcProvidedTypeAppToStaticConstantArgs cenv env None tpenv tcref args m @@ -4502,7 +4566,14 @@ 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 - (if newOk <> NoNewTypars then NewErrorType () else cenv.g.obj_ty),tpenv + let rty = + match optKind, newOk with + | Some TyparKind.Measure, NoNewTypars -> TType_measure MeasureOne + | Some TyparKind.Measure, _ -> TType_measure (NewErrorMeasure ()) + | _, NoNewTypars -> cenv.g.obj_ty + | _ -> NewErrorType () + rty,tpenv + and TcTypeAndRecover cenv newOk checkCxs occ env tpenv ty = TcTypeOrMeasureAndRecover (Some TyparKind.Type) cenv newOk checkCxs occ env tpenv ty @@ -4592,7 +4663,7 @@ and TcSimplePats cenv optArgsOK checkCxs ty env (tpenv,names,takenNames:Set<_>) // This is a little awkward since it would be nice if this was // uniform with the process where we give names to other (more complex) // patterns used in argument position, e.g. "let f (D(x)) = ..." - let id = ident("unitVar"^string takenNames.Count,m) + let id = ident("unitVar" + string takenNames.Count,m) UnifyTypes cenv env m ty cenv.g.unit_ty 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) @@ -4820,7 +4891,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv,names,takenNames) ty pat | None -> let caseName = match item with - | Item.UnionCase uci -> uci.Name + | Item.UnionCase(uci,_) -> uci.Name | Item.ExnCase tcref -> tcref.DisplayName | _ -> failwith "impossible" error(Error(FSComp.SR.tcUnionCaseConstructorDoesNotHaveFieldWithGivenName(caseName, id.idText), id.idRange)) @@ -4829,7 +4900,7 @@ and TcPat warnOnUpper cenv env topValInfo vFlags (tpenv,names,takenNames) ty pat | null -> result.[idx] <- pat let argContainerOpt = match item with - | Item.UnionCase uci -> Some(ArgumentContainer.UnionCase(uci)) + | Item.UnionCase(uci,_) -> Some(ArgumentContainer.UnionCase(uci)) | Item.ExnCase tref -> Some(ArgumentContainer.Type(tref)) | _ -> None let argItem = Item.ArgName (id, (List.nth argtys idx), argContainerOpt) @@ -5036,6 +5107,20 @@ and TcExprNoRecover cenv ty (env: TcEnv) tpenv (expr: SynExpr) = tm,tpenv +// This recursive entry is only used from one callsite (DiscardAfterMissingQualificationAfterDot) +// and has been added relatively late in F# 4.0 to preserve the structure of previous code. It pushes a 'delayed' parameter +// through TcExprOfUnknownType, TcExpr and TcExprNoRecover +and TcExprOfUnknownTypeThen cenv env tpenv expr delayed = + let exprty = NewInferenceType () + let expr',tpenv = + try + TcExprThen cenv exprty env tpenv expr delayed + with e -> + let m = expr.Range + 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 and TcExprThatIsCtorBody safeInitInfo cenv overallTy env tpenv expr = @@ -5391,10 +5476,9 @@ and TcExprUndelayed cenv overallTy env tpenv (expr: SynExpr) = //solveTypAsError cenv env.DisplayEnv m overallTy mkDefault(m,overallTy), tpenv + // expr. (already reported as an error) | SynExpr.DiscardAfterMissingQualificationAfterDot (e1,m) -> - // For some reason we use "UnknownType" for this one, it's not clear we need to. - let _,_,tpenv = suppressErrorReporting (fun () -> TcExprOfUnknownType cenv env tpenv e1) - //solveTypAsError cenv env.DisplayEnv m overallTy + let _,_,tpenv = suppressErrorReporting (fun () -> TcExprOfUnknownTypeThen cenv env tpenv e1 [DelayedDot]) mkDefault(m,overallTy),tpenv | SynExpr.FromParseError (e1,m) -> @@ -5603,7 +5687,7 @@ and TcIndexerThen cenv env overallTy mWholeExpr mDot tpenv wholeExpr e1 indexArg cenv.g cenv.amap mWholeExpr - AllowMultiIntfInstantiations.No + AllowMultiIntfInstantiations.Yes e1ty None | _ -> Some "GetSlice" @@ -5711,10 +5795,10 @@ and TcNewExpr cenv env tpenv objTy mObjTyOpt superInit arg mWholeExprOrObjTy = if not (isAppTy 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 + TcCtorCall false cenv env tpenv objTy objTy mObjTyOpt item superInit [arg] mWholeExprOrObjTy [] None /// Check an 'inheritedTys declaration in an implicit or explicit class -and TcCtorCall isNaked cenv env tpenv overallTy objTy mObjTyOpt item superInit arg mWholeCall delayed afterTcOverloadResolutionOpt = +and TcCtorCall isNaked cenv env tpenv overallTy objTy mObjTyOpt item superInit args mWholeCall delayed afterTcOverloadResolutionOpt = let ad = env.eAccessRights let isSuperInit = (if superInit then CtorValUsedAsSuperInit else NormalValUse) let mItem = match mObjTyOpt with Some m -> m | None -> mWholeCall @@ -5722,8 +5806,8 @@ and TcCtorCall isNaked cenv env tpenv overallTy objTy mObjTyOpt item superInit a if isInterfaceTy cenv.g objTy then error(Error((if superInit then FSComp.SR.tcInheritCannotBeUsedOnInterfaceType() else FSComp.SR.tcNewCannotBeUsedOnInterfaceType()),mWholeCall)) - match item with - | Item.CtorGroup(methodName,minfos) -> + 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_typ NoCoerce objTy then warning(Error(FSComp.SR.tcIDisposableTypeShouldUseNew(),mWholeCall)) @@ -5739,9 +5823,9 @@ and TcCtorCall isNaked cenv env tpenv overallTy objTy mObjTyOpt item superInit a | Some mObjTy,None -> AfterTcOverloadResolution.ForNewConstructors cenv.tcSink env mObjTy methodName minfos | None, _ -> AfterTcOverloadResolution.DoNothing - TcMethodApplicationThen cenv env overallTy tpenv None [] mWholeCall mItem methodName ad PossiblyMutates false meths afterTcOverloadResolution isSuperInit [arg] ExprAtomicFlag.NonAtomic delayed + TcMethodApplicationThen cenv env overallTy (Some objTy) tpenv None [] mWholeCall mItem methodName ad PossiblyMutates false meths afterTcOverloadResolution isSuperInit args ExprAtomicFlag.NonAtomic delayed - | Item.DelegateCtor typ -> + | Item.DelegateCtor typ, [arg] -> // Re-record the name resolution since we now know it's a constructor call match mObjTyOpt with | Some mObjTy -> CallNameResolutionSink cenv.tcSink (mObjTy,env.NameEnv,item,item,ItemOccurence.Use,env.DisplayEnv,env.eAccessRights) @@ -5797,7 +5881,7 @@ and TcRecordConstruction cenv overallTy env tpenv optOrigExpr objTy fldsList m = fspecs |> List.filter (fun rfld -> rfld.Name |> fieldNameUnbound) |> List.filter (fun f -> not f.IsZeroInit) - |> List.map (fun fspec ->fspec.Name, mkRecdFieldGet cenv.g (oldve',mkNestedRecdFieldRef tcref fspec,tinst,m)) + |> List.map (fun fspec ->fspec.Name, mkRecdFieldGet cenv.g (oldve',tcref.MakeNestedRecdFieldRef fspec,tinst,m)) let fldsList = fldsList @ oldFldsList @@ -6101,7 +6185,7 @@ and TcObjectExpr cenv overallTy env tpenv (synObjTy,argopt,binds,extraImpls,mNew let afterTcOverloadResolution = AfterTcOverloadResolution.ForNewConstructors cenv.tcSink env synObjTy.Range methodName minfos let ad = env.eAccessRights - let expr,tpenv = TcMethodApplicationThen cenv env objTy tpenv None [] mWholeExpr mObjTy methodName ad PossiblyMutates false meths afterTcOverloadResolution CtorValUsedAsSuperInit [arg] ExprAtomicFlag.Atomic [] + let expr,tpenv = TcMethodApplicationThen cenv env objTy None tpenv None [] mWholeExpr mObjTy methodName ad PossiblyMutates false meths afterTcOverloadResolution 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 @@ -6186,7 +6270,7 @@ and TcConstStringExpr cenv overallTy env m tpenv s = let ty' = mkPrintfFormatTy cenv.g aty bty cty dty ety if (not (isObjTy cenv.g overallTy) && AddCxTypeMustSubsumeTypeUndoIfFailed env.DisplayEnv cenv.css m overallTy ty') then // Parse the format string to work out the phantom types - let aty',ety' = (try Formats.ParseFormatString m cenv.g s bty cty dty with Failure s -> error (Error(FSComp.SR.tcUnableToParseFormatString(s),m))) + let aty',ety' = (try CheckFormatStrings.ParseFormatString m cenv.g s bty cty dty with Failure s -> error (Error(FSComp.SR.tcUnableToParseFormatString(s),m))) UnifyTypes cenv env m aty aty' UnifyTypes cenv env m ety ety' mkCallNewFormat cenv.g m aty bty cty dty ety (mkString cenv.g m s),tpenv @@ -6212,7 +6296,7 @@ and TcConstExpr cenv overallTy env m tpenv c = | SynConst.UserNum (s,suffix) -> let expr = - let modName = ("NumericLiteral"^suffix) + let modName = ("NumericLiteral" + suffix) let ad = env.eAccessRights match ResolveLongIndentAsModuleOrNamespace cenv.amap m OpenQualified env.eNameResEnv ad [ident (modName,m)] with | Result [] @@ -6453,7 +6537,7 @@ and TcQuotationExpr cenv overallTy env tpenv (_oper,raw,ast,isFromQueryExpressio // 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 //------------------------------------------------------------------------- @@ -7669,6 +7753,7 @@ and PropagateThenTcDelayed cenv overallTy env tpenv mExpr expr exprty (atomicFla // Avoid unifying twice: we're about to unify in TcDelayed if nonNil delayed then UnifyTypes cenv env mExpr overallTy exprty + | DelayedDot :: _ | DelayedSet _ :: _ | DelayedDotLookup _ :: _ -> () | DelayedTypeApp (_, _mTypeArgs, mExprAndTypeArgs) :: delayedList' -> @@ -7703,7 +7788,9 @@ and TcDelayed cenv overallTy env tpenv mExpr expr exprty (atomicFlag:ExprAtomicF CallExprHasTypeSink cenv.tcSink (mExpr,env.NameEnv,exprty, env.DisplayEnv,env.eAccessRights) match delayed with - | [] -> UnifyTypes cenv env mExpr overallTy exprty; expr.Expr,tpenv + | [] + | 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 @@ -7781,13 +7868,13 @@ and TcLongIdentThen cenv overallTy env tpenv (LongIdentWithDots(longId,_)) delay // resolve type name lookup of 'MyOverloadedType' // Also determine if type names should resolve to Item.Types or Item.CtorGroup match delayed with - | DelayedTypeApp (tyargs, _, _) :: DelayedApp _ :: _ -> - TypeNameResolutionInfo(ResolveTypeNamesToCtors, TypeNameResolutionStaticArgsInfo.FromTyArgs tyargs.Length) + | DelayedTypeApp (tyargs, _, _) :: (DelayedDot | DelayedDotLookup _) :: _ -> + // cases like 'MyType.Sth' + TypeNameResolutionInfo(ResolveTypeNamesToTypeRefs, TypeNameResolutionStaticArgsInfo.FromTyArgs tyargs.Length) | DelayedTypeApp (tyargs, _, _) :: _ -> - // cases like 'MyType.Sth' but also only 'MyType.' - // (without LValue_get), which is needed for VS (when typing) - TypeNameResolutionInfo(ResolveTypeNamesToTypeRefs, TypeNameResolutionStaticArgsInfo.FromTyArgs tyargs.Length) + // 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 @@ -7819,7 +7906,7 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution let ucref = mkChoiceCaseRef cenv.g mItem aparity n let _,_,tinst,_ = infoOfTyconRef mItem ucref.TyconRef let ucinfo = UnionCaseInfo(tinst,ucref) - ApplyUnionCaseOrExnTypes mItem cenv env ucaseAppTy (Item.UnionCase ucinfo) + ApplyUnionCaseOrExnTypes mItem cenv env ucaseAppTy (Item.UnionCase(ucinfo,false)) | _ -> ApplyUnionCaseOrExnTypes mItem cenv env ucaseAppTy item let nargtys = List.length argtys @@ -7875,7 +7962,7 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution if box fittedArgs.[i] = null then fittedArgs.[i] <- arg let argContainerOpt = match item with - | Item.UnionCase uci -> Some(ArgumentContainer.UnionCase(uci)) + | Item.UnionCase(uci,_) -> Some(ArgumentContainer.UnionCase(uci)) | Item.ExnCase tref -> Some(ArgumentContainer.Type(tref)) | _ -> None let argItem = Item.ArgName (id, (List.nth argtys i), argContainerOpt) @@ -7904,7 +7991,7 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution else let caseName = match item with - | Item.UnionCase uci -> uci.Name + | Item.UnionCase(uci,_) -> uci.Name | Item.ExnCase tcref -> tcref.DisplayName | _ -> failwith "impossible" error(Error(FSComp.SR.tcUnionCaseConstructorDoesNotHaveFieldWithGivenName(caseName, id.idText), id.idRange)) @@ -7937,7 +8024,7 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution // This is where the constructor expects arguments but is not applied to arguments, hence build a lambda nargtys, (fun () -> - let vs,args = argtys |> List.mapi (fun i ty -> mkCompGenLocal mItem ("arg"^string i) ty) |> List.unzip + 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 cenv.g constrApp) lam) @@ -7982,18 +8069,30 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution let afterTcOverloadResolution = afterOverloadResolution |> AfterTcOverloadResolution.ForMethods match delayed with | (DelayedApp (atomicFlag, arg, mExprAndArg)::otherDelayed) -> - TcMethodApplicationThen cenv env overallTy tpenv None [] mExprAndArg mItem methodName ad NeverMutates false meths afterTcOverloadResolution NormalValUse [arg] atomicFlag otherDelayed + TcMethodApplicationThen cenv env overallTy None tpenv None [] mExprAndArg mItem methodName ad NeverMutates false meths afterTcOverloadResolution NormalValUse [arg] atomicFlag otherDelayed | (DelayedTypeApp(tys, mTypeArgs, mExprAndTypeArgs) :: DelayedApp(atomicFlag, arg, mExprAndArg) :: otherDelayed) -> + +#if EXTENSIONTYPING + match TryTcMethodAppToStaticConstantArgs cenv env tpenv (minfos, Some (tys, mTypeArgs), mExprAndArg, mItem) with + | Some minfoAfterStaticArguments -> + + // // NOTE: This doesn't take instantiation into account + // CallNameResolutionSink cenv.tcSink (mExprAndTypeArgs,env.NameEnv,item (* ! *), item, ItemOccurence.Use,env.DisplayEnv,env.eAccessRights) + TcMethodApplicationThen cenv env overallTy None tpenv None [] mExprAndArg mItem methodName ad NeverMutates false [(minfoAfterStaticArguments, None)] afterTcOverloadResolution NormalValUse [arg] atomicFlag otherDelayed + + | None -> +#endif + let tyargs,tpenv = TcTypesOrMeasures None cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tys mTypeArgs // NOTE: This doesn't take instantiation into account CallNameResolutionSink cenv.tcSink (mExprAndTypeArgs,env.NameEnv,item (* ! *), item, ItemOccurence.Use,env.DisplayEnv,env.eAccessRights) - TcMethodApplicationThen cenv env overallTy tpenv (Some tyargs) [] mExprAndArg mItem methodName ad NeverMutates false meths afterTcOverloadResolution NormalValUse [arg] atomicFlag otherDelayed + TcMethodApplicationThen cenv env overallTy None tpenv (Some tyargs) [] mExprAndArg mItem methodName ad NeverMutates false meths afterTcOverloadResolution NormalValUse [arg] atomicFlag otherDelayed | _ -> - TcMethodApplicationThen cenv env overallTy tpenv None [] mItem mItem methodName ad NeverMutates false meths afterTcOverloadResolution NormalValUse [] ExprAtomicFlag.Atomic delayed + TcMethodApplicationThen cenv env overallTy None tpenv None [] mItem mItem methodName ad NeverMutates false meths afterTcOverloadResolution NormalValUse [] ExprAtomicFlag.Atomic delayed - | Item.CtorGroup(_,minfos) -> + | Item.CtorGroup(nm,minfos) -> let objTy = match minfos with | (minfo :: _) -> minfo.EnclosingType @@ -8003,21 +8102,43 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution | ((DelayedApp (_, arg, mExprAndArg))::otherDelayed) -> CallExprHasTypeSink cenv.tcSink (mExprAndArg, env.NameEnv,objTy, env.DisplayEnv, env.eAccessRights) - TcCtorCall true cenv env tpenv overallTy objTy (Some mItem) item false arg mExprAndArg otherDelayed (Some afterTcOverloadResolution) + TcCtorCall true cenv env tpenv overallTy objTy (Some mItem) item false [arg] mExprAndArg otherDelayed (Some afterTcOverloadResolution) | ((DelayedTypeApp(tyargs, _mTypeArgs, mExprAndTypeArgs))::(DelayedApp (_, arg, mExprAndArg))::otherDelayed) -> + let objTyAfterTyArgs,tpenv = TcNestedTypeApplication cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv mExprAndTypeArgs objTy tyargs + CallExprHasTypeSink cenv.tcSink (mExprAndArg, env.NameEnv, objTyAfterTyArgs, env.DisplayEnv, env.eAccessRights) + let itemAfterTyArgs, minfosAfterTyArgs = +#if 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 + | AppTy cenv.g (tcref,_) when tcref.Deref.IsProvided -> + let newItem = ForceRaise (ResolveObjectConstructor cenv.nameResolver env.DisplayEnv mExprAndArg ad objTyAfterTyArgs) + match newItem with + | Item.CtorGroup(_,newMinfos) -> newItem, newMinfos + | _ -> item, minfos + | _ -> +#endif + item, minfos + + minfosAfterTyArgs |> List.iter (fun minfo -> UnifyTypes cenv env mExprAndTypeArgs minfo.EnclosingType objTyAfterTyArgs) + TcCtorCall true cenv env tpenv overallTy objTyAfterTyArgs (Some mExprAndTypeArgs) itemAfterTyArgs false [arg] mExprAndArg otherDelayed (Some afterTcOverloadResolution) + + | ((DelayedTypeApp(tyargs, _mTypeArgs, mExprAndTypeArgs))::otherDelayed) -> + let objTy,tpenv = TcNestedTypeApplication cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv mExprAndTypeArgs objTy tyargs - CallExprHasTypeSink cenv.tcSink (mExprAndArg, env.NameEnv, objTy, env.DisplayEnv, env.eAccessRights) + + // A case where we have an incomplete name e.g. 'Foo.' - we still want to report it to VS! + let resolvedItem = Item.Types(nm, [objTy]) + CallNameResolutionSink cenv.tcSink (mExprAndTypeArgs,env.NameEnv,resolvedItem,resolvedItem,ItemOccurence.Use,env.DisplayEnv,env.eAccessRights) + minfos |> List.iter (fun minfo -> UnifyTypes cenv env mExprAndTypeArgs minfo.EnclosingType objTy) - TcCtorCall true cenv env tpenv overallTy objTy (Some mExprAndTypeArgs) item false arg mExprAndArg otherDelayed (Some afterTcOverloadResolution) + TcCtorCall true cenv env tpenv overallTy objTy (Some mExprAndTypeArgs) item false [] mExprAndTypeArgs otherDelayed (Some afterTcOverloadResolution) - | _ -> - if minfos.Length = 1 then - let text = List.map (NicePrint.stringOfMethInfo cenv.amap mItem env.DisplayEnv) minfos - error(Error(FSComp.SR.tcInvalidUseOfTypeNameOrConstructorWithOverloads(String.concat "\n\r" text),mItem)) - else - error(Error(FSComp.SR.tcInvalidUseOfTypeNameOrConstructor(),mItem)) + | _ -> + + TcCtorCall true cenv env tpenv overallTy objTy (Some mItem) item false [] mItem delayed (Some afterTcOverloadResolution) | Item.FakeInterfaceCtor _ -> error(Error(FSComp.SR.tcInvalidUseOfInterfaceType(),mItem)) @@ -8043,7 +8164,7 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution 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 vs,ves = argTys |> List.mapi (fun i ty -> mkCompGenLocal mItem ("arg" + string i) ty) |> List.unzip let memberFlags = StaticMemberFlags MemberKind.Member let logicalCompiledName = ComputeLogicalName id memberFlags @@ -8076,6 +8197,9 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution | DelayedSet(e2,mStmt) :: otherDelayed -> if nonNil otherDelayed then error(Error(FSComp.SR.tcInvalidAssignment(),mStmt)) UnifyTypes cenv env mStmt overallTy cenv.g.unit_ty + vref.Deref.SetHasBeenReferenced() + CheckValAccessible mItem env.eAccessRights vref + CheckValAttributes cenv.g vref mItem |> CommitOperationResult let vty = vref.Type let vty2 = if isByrefTy cenv.g vty then @@ -8136,14 +8260,14 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution if isNil meths then error (Error (FSComp.SR.tcPropertyCannotBeSet1 nm,mItem)) let afterTcOverloadResolution = afterOverloadResolution |> AfterTcOverloadResolution.ForProperties nm SettersOfPropInfos // Note: static calls never mutate a struct object argument - TcMethodApplicationThen cenv env overallTy tpenv tyargsOpt [] mStmt mItem nm ad NeverMutates true meths afterTcOverloadResolution NormalValUse (args@[e2]) ExprAtomicFlag.NonAtomic otherDelayed + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt [] mStmt mItem nm ad NeverMutates true meths afterTcOverloadResolution NormalValUse (args@[e2]) ExprAtomicFlag.NonAtomic otherDelayed | _ -> // Static Property Get (possibly indexer) let meths = pinfos |> GettersOfPropInfos let afterTcOverloadResolution = afterOverloadResolution |> AfterTcOverloadResolution.ForProperties nm 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 tpenv tyargsOpt [] mItem mItem nm ad NeverMutates true meths afterTcOverloadResolution NormalValUse args ExprAtomicFlag.Atomic delayed + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt [] mItem mItem nm ad NeverMutates true meths afterTcOverloadResolution NormalValUse args ExprAtomicFlag.Atomic delayed | Item.ILField finfo -> @@ -8169,7 +8293,7 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution 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.gen_asm + // 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.EnclosingTypeRef []) @@ -8225,17 +8349,28 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution // Typecheck "expr.A.B.C ... " constructs //------------------------------------------------------------------------- -and GetMemberApplicationArgs delayed cenv env tpenv = +and GetSynMemberApplicationArgs delayed tpenv = match delayed with | DelayedApp (atomicFlag, arg, _) :: otherDelayed -> atomicFlag, None, [arg], otherDelayed, tpenv | DelayedTypeApp(tyargs, mTypeArgs, _) :: DelayedApp (atomicFlag, arg, _mExprAndArg) :: otherDelayed -> - let tyargs,tpenv = TcTypesOrMeasures None cenv NewTyparsOK CheckCxs ItemOccurence.UseInType env tpenv tyargs mTypeArgs - (atomicFlag, Some tyargs, [arg], otherDelayed, tpenv) + (atomicFlag, Some (tyargs,mTypeArgs), [arg], otherDelayed, tpenv) | otherDelayed -> (ExprAtomicFlag.NonAtomic, None, [], otherDelayed, tpenv) +and TcMemberTyArgsOpt cenv env tpenv tyargsOpt = + match tyargsOpt with + | None -> None, tpenv + | 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 tyArgsOptChecked, tpenv = TcMemberTyArgsOpt cenv env tpenv tyargsOpt + atomicFlag,tyArgsOptChecked,args,delayed,tpenv + and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId delayed mExprAndLongId = let objArgs = [objExpr] let ad = env.eAccessRights @@ -8255,13 +8390,23 @@ and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId dela match item with | Item.MethodGroup (methodName,minfos) -> - let atomicFlag,tyargsOpt,args,delayed,tpenv = GetMemberApplicationArgs delayed cenv env tpenv - let meths = List.map (fun minfo -> minfo,None) minfos + let atomicFlag,tyargsOpt,args,delayed,tpenv = GetSynMemberApplicationArgs delayed tpenv let afterTcOverloadResolution = afterOverloadResolution |> AfterTcOverloadResolution.ForMethods + // 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) - TcMethodApplicationThen cenv env overallTy tpenv tyargsOpt objArgs mExprAndItem mItem methodName ad mutates false meths afterTcOverloadResolution NormalValUse args atomicFlag delayed + +#if EXTENSIONTYPING + match TryTcMethodAppToStaticConstantArgs cenv env tpenv (minfos, tyargsOpt, mExprAndItem, mItem) with + | Some minfo -> TcMethodApplicationThen cenv env overallTy None tpenv None objArgs mExprAndItem mItem methodName ad mutates false [(minfo, None)] afterTcOverloadResolution NormalValUse args atomicFlag delayed + | None -> +#endif + + let tyargsOpt,tpenv = TcMemberTyArgsOpt cenv env tpenv tyargsOpt + let meths = minfos |> List.map (fun minfo -> minfo,None) + + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem methodName ad mutates false meths afterTcOverloadResolution NormalValUse args atomicFlag delayed | Item.Property (nm,pinfos) -> // Instance property @@ -8286,13 +8431,13 @@ and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId dela if isNil meths then error (Error (FSComp.SR.tcPropertyCannotBeSet1 nm,mItem)) let afterTcOverloadResolution = afterOverloadResolution |> AfterTcOverloadResolution.ForProperties nm SettersOfPropInfos let mut = (if isStructTy cenv.g (tyOfExpr cenv.g objExpr) then DefinitelyMutates else PossiblyMutates) - TcMethodApplicationThen cenv env overallTy tpenv tyargsOpt objArgs mStmt mItem nm ad mut true meths afterTcOverloadResolution NormalValUse (args @ [e2]) atomicFlag [] + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mStmt mItem nm ad mut true meths afterTcOverloadResolution NormalValUse (args @ [e2]) atomicFlag [] | _ -> // Instance property getter let meths = GettersOfPropInfos pinfos if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable(nm),mItem)) let afterTcOverloadResolution = afterOverloadResolution |> AfterTcOverloadResolution.ForProperties nm GettersOfPropInfos - TcMethodApplicationThen cenv env overallTy tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterTcOverloadResolution NormalValUse args atomicFlag delayed + TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterTcOverloadResolution NormalValUse args atomicFlag delayed | Item.RecdField rfinfo -> // Get or set instance F# field or literal @@ -8397,6 +8542,7 @@ and TcMethodApplicationThen 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. + 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 @@ -8423,7 +8569,7 @@ and TcMethodApplicationThen // Call the helper below to do the real checking let (expr,attributeAssignedNamedItems,delayed),tpenv = - TcMethodApplication false cenv env tpenv callerTyArgs objArgs mWholeExpr mItem methodName ad mut isProp meths afterTcOverloadResolution isSuperInit args exprTy delayed + TcMethodApplication false cenv env tpenv callerTyArgs objArgs mWholeExpr mItem methodName objTyOpt ad mut isProp meths afterTcOverloadResolution isSuperInit args exprTy delayed // Give errors if some things couldn't be assigned if nonNil attributeAssignedNamedItems then @@ -8436,11 +8582,15 @@ and TcMethodApplicationThen PropagateThenTcDelayed cenv overallTy env tpenv mWholeExpr (MakeApplicableExprNoFlex cenv expr) exprty atomicFlag delayed -and GetNewInferenceTypeForMethodArg cenv x = +/// 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 - | SynExprParen(a,_,_,_) -> GetNewInferenceTypeForMethodArg cenv a - | SynExpr.AddressOf(true,a,_,_) -> mkByrefTy cenv.g (GetNewInferenceTypeForMethodArg cenv a) - | SynExpr.Lambda(_,_,_,a,_) -> (NewInferenceType () --> GetNewInferenceTypeForMethodArg cenv a) + | SynExprParen(a,_,_,_) -> GetNewInferenceTypeForMethodArg cenv env tpenv a + | SynExpr.AddressOf(true,a,_,_) -> mkByrefTy cenv.g (GetNewInferenceTypeForMethodArg cenv env tpenv a) + | SynExpr.Lambda(_,_,_,a,_) -> mkFunTy (NewInferenceType ()) (GetNewInferenceTypeForMethodArg cenv env tpenv 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 @@ -8454,6 +8604,7 @@ and TcMethodApplication mMethExpr // range of the entire method expression mItem methodName + (objTyOpt : TType option) ad mut isProp @@ -8467,8 +8618,8 @@ and TcMethodApplication let denv = env.DisplayEnv - let isSimpleFormalArg (isParamArrayArg,isOutArg,optArgInfo: OptionalArgInfo) = - not isParamArrayArg && not isOutArg && not optArgInfo.IsOptional + let isSimpleFormalArg (isParamArrayArg, isOutArg, optArgInfo: OptionalArgInfo, _reflArgInfo: ReflectedArgInfo) = + not isParamArrayArg && not isOutArg && not optArgInfo.IsOptional let callerObjArgTys = objArgs |> List.map (tyOfExpr cenv.g) @@ -8517,7 +8668,7 @@ and TcMethodApplication else unnamedCurriedCallerArgs,namedCurriedCallerArgs - let MakeUnnamedCallerArgInfo x = (x, GetNewInferenceTypeForMethodArg cenv x, x.Range) + 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) @@ -8560,7 +8711,7 @@ and TcMethodApplication | _ -> let unnamedCurriedCallerArgs = unnamedCurriedCallerArgs |> List.mapSquared MakeUnnamedCallerArgInfo let namedCurriedCallerArgs = namedCurriedCallerArgs |> List.mapSquared (fun (isOpt,nm,x) -> - let ty = GetNewInferenceTypeForMethodArg cenv 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 let ty = if isOpt then mkOptionTy denv.g ty else ty @@ -8650,7 +8801,7 @@ and TcMethodApplication | Some tyargs -> minfo.AdjustUserTypeInstForFSharpStyleIndexedExtensionMembers(tyargs) | None -> minst let allArgs = List.zip unnamedCurriedCallerArgs namedCurriedCallerArgs - CalledMeth(cenv.infoReader,checkingAttributeCall, FreshenMethInfo, mMethExpr,ad,minfo,minst,callerTyArgs,pinfoOpt,callerObjArgTys,allArgs,usesParamArrayConversion,true) + CalledMeth(cenv.infoReader,Some(env.NameEnv),checkingAttributeCall, FreshenMethInfo, mMethExpr,ad,minfo,minst,callerTyArgs,pinfoOpt,callerObjArgTys,allArgs,usesParamArrayConversion,true,objTyOpt) let preArgumentTypeCheckingCalledMethGroup = [ for (minfo,pinfoOpt) in candidateMethsAndProps do @@ -8743,7 +8894,7 @@ and TcMethodApplication | Some tyargs -> minfo.AdjustUserTypeInstForFSharpStyleIndexedExtensionMembers(tyargs) | None -> minst let callerArgs = List.zip unnamedCurriedCallerArgs namedCurriedCallerArgs - CalledMeth(cenv.infoReader,checkingAttributeCall,FreshenMethInfo, mMethExpr,ad,minfo,minst,callerTyArgs,pinfoOpt,callerObjArgTys,callerArgs,usesParamArrayConversion,true)) + CalledMeth(cenv.infoReader,Some(env.NameEnv),checkingAttributeCall,FreshenMethInfo, mMethExpr,ad,minfo,minst,callerTyArgs,pinfoOpt,callerObjArgTys,callerArgs,usesParamArrayConversion,true,objTyOpt)) let callerArgCounts = (unnamedCurriedCallerArgs.Length, namedCurriedCallerArgs.Length) let csenv = MakeConstraintSolverEnv cenv.css mMethExpr denv @@ -8827,7 +8978,7 @@ and TcMethodApplication if HasHeadType cenv.g cenv.g.tcref_System_Collections_Generic_Dictionary finalCalledMethInfo.EnclosingType && finalCalledMethInfo.IsConstructor && not (finalCalledMethInfo.GetParamDatas(cenv.amap, mItem, finalCalledMeth.CallerTyArgs) - |> List.existsSquared (fun (ParamData(_,_,_,_,ty)) -> + |> List.existsSquared (fun (ParamData(_,_,_,_,_,ty)) -> HasHeadType cenv.g cenv.g.tcref_System_Collections_Generic_IEqualityComparer ty)) then match argsOfAppTy cenv.g finalCalledMethInfo.EnclosingType with @@ -8861,7 +9012,7 @@ and TcMethodApplication emptyPreBinder,objArgs // Handle adhoc argument conversions - let coerceExpr isOutArg calledArgTy callerArgTy m callerArgExpr = + let coerceExpr isOutArg calledArgTy (reflArgInfo: ReflectedArgInfo) callerArgTy m callerArgExpr = if isByrefTy cenv.g calledArgTy && isRefCellTy cenv.g callerArgTy then Expr.Op(TOp.RefAddrGet,[destRefCellTy cenv.g callerArgTy],[callerArgExpr],m) @@ -8874,16 +9025,19 @@ and TcMethodApplication let expr = CoerceFromFSharpFuncToDelegate cenv.g cenv.amap cenv.infoReader ad callerArgTy m callerArgExpr delegateTy mkCallQuoteToLinqLambdaExpression cenv.g m delegateTy (Expr.Quote(expr, ref None, false, m, mkQuotedExprTy cenv.g delegateTy)) -(* // useful code if we add auto conversions to quotations (to match auto conversions to LINQ expressions) - elif isQuoteExprTy cenv.g calledArgTy && not (isQuoteTy cenv.g callerArgTy) then - let delegateTy = destQuoteExprTy cenv.g calledArgTy - let expr = coerceFromFSharpFuncToDelegate callerArgTy m callerArgExpr delegateTy - Expr.Quote(expr, ref None, m, delegateTy) -*) + // auto conversions to quotations (to match auto conversions to LINQ expressions) + elif reflArgInfo.AutoQuote && isQuotedExprTy cenv.g calledArgTy && not (isQuotedExprTy cenv.g callerArgTy) then + match reflArgInfo with + | ReflectedArgInfo.Quote true -> + mkCallLiftValueWithDefn cenv.g m calledArgTy callerArgExpr + | ReflectedArgInfo.Quote false -> + Expr.Quote(callerArgExpr, ref None, false, m, calledArgTy) + | ReflectedArgInfo.None -> failwith "unreachable" // unreachable due to reflArgInfo.AutoQuote condition // Note: out args do not need to be coerced elif isOutArg then callerArgExpr + // Note: not all these casts are reported in quotations else mkCoerceIfNeeded cenv.g calledArgTy callerArgTy callerArgExpr @@ -8903,7 +9057,7 @@ and TcMethodApplication let es = finalParamArrayCallerArgs |> List.map (fun callerArg -> let (CallerArg(callerArgTy,m,isOutArg,callerArgExpr)) = callerArg - coerceExpr isOutArg paramArrayCalledArgElementType callerArgTy m callerArgExpr) + coerceExpr isOutArg paramArrayCalledArgElementType paramArrayCalledArg.ReflArgInfo callerArgTy m callerArgExpr) [ { NamedArgIdOpt = None; CalledArg=paramArrayCalledArg; CallerArg=CallerArg(paramArrayCalledArg.CalledArgumentType,mMethExpr,false,Expr.Op(TOp.Array,[paramArrayCalledArgElementType], es ,mMethExpr)) } ] @@ -9046,10 +9200,11 @@ and TcMethodApplication let coerce (assignedArg: AssignedCalledArg<_>) = let isOutArg = assignedArg.CalledArg.IsOutArg + let reflArgInfo = assignedArg.CalledArg.ReflArgInfo let calledArgTy = assignedArg.CalledArg.CalledArgumentType let (CallerArg(callerArgTy,m,_,e)) = assignedArg.CallerArg - coerceExpr isOutArg calledArgTy callerArgTy m e + coerceExpr isOutArg calledArgTy reflArgInfo callerArgTy m e // Record the resolution of the named argument for the Language Service allArgs |> List.iter (fun assignedArg -> @@ -9092,7 +9247,7 @@ and TcMethodApplication | 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 argExpr = coerceExpr false calledArgTy callerArgTy m argExpr + let argExpr = coerceExpr 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 action, Item.Property (pinfo.PropertyName, [pinfo]) @@ -9101,7 +9256,7 @@ and TcMethodApplication // Get or set instance IL field ILFieldInstanceChecks cenv.g cenv.amap ad m finfo let calledArgTy = finfo.FieldType (cenv.amap, m) - let argExpr = coerceExpr false calledArgTy callerArgTy m argExpr + let argExpr = coerceExpr false calledArgTy ReflectedArgInfo.None callerArgTy m argExpr let action = BuildILFieldSet cenv.g m objExpr finfo argExpr action, Item.ILField finfo @@ -9109,7 +9264,7 @@ and TcMethodApplication RecdFieldInstanceChecks cenv.g cenv.amap ad m rfinfo let calledArgTy = rfinfo.FieldType CheckRecdFieldMutation m denv rfinfo - let argExpr = coerceExpr false calledArgTy callerArgTy m argExpr + let argExpr = coerceExpr false calledArgTy ReflectedArgInfo.None callerArgTy m argExpr let action = BuildRecdFieldSet cenv.g m objExpr rfinfo argExpr action, Item.RecdField rfinfo @@ -9544,7 +9699,7 @@ and TcAttribute cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) = match ResolveTypeLongIdent cenv.tcSink cenv.nameResolver ItemOccurence.UseInAttribute OpenQualified env.eNameResEnv ad tycon TypeNameResolutionStaticArgsInfo.DefiniteEmpty PermitDirectReferenceToGeneratedType.No with | Exception err -> raze(err) | _ -> success(TcTypeAndRecover cenv NoNewTypars CheckCxs ItemOccurence.UseInAttribute env tpenv (SynType.App(SynType.LongIdent(LongIdentWithDots(tycon,[])),None,[],[],None,false,mAttr)) ) - ForceRaise ((try1 (tyid.idText + "Attribute")) |> Outcome.otherwise (fun () -> (try1 tyid.idText))) + ForceRaise ((try1 (tyid.idText + "Attribute")) |> ResultOrException.otherwise (fun () -> (try1 tyid.idText))) let ad = env.eAccessRights @@ -9567,7 +9722,7 @@ and TcAttribute cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) = let tdef = tcref.ILTyconRawMetadata let tref = cenv.g.attrib_AttributeUsageAttribute.TypeRef - match TryDecodeILAttribute cenv.g tref (Some(tref.Scope)) tdef.CustomAttrs 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 @@ -9622,7 +9777,7 @@ and TcAttribute cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) = let meths = minfos |> List.map (fun minfo -> minfo,None) let afterTcOverloadResolution = AfterTcOverloadResolution.ForNewConstructors cenv.tcSink env tyid.idRange methodName minfos let (expr,namedCallerArgs,_),_ = - TcMethodApplication true cenv env tpenv None [] mAttr mAttr methodName ad PossiblyMutates false meths afterTcOverloadResolution NormalValUse [arg] (NewInferenceType ()) [] + TcMethodApplication true cenv env tpenv None [] mAttr mAttr methodName None ad PossiblyMutates false meths afterTcOverloadResolution NormalValUse [arg] (NewInferenceType ()) [] UnifyTypes cenv env mAttr ty (tyOfExpr cenv.g expr) @@ -11047,7 +11202,27 @@ let TcOpenDecl tcSink g amap m scopem env (longId : Ident list) = match p with | [] -> [] | (h,_):: t -> if h.StartsWith(FsiDynamicModulePrefix,System.StringComparison.Ordinal) then t else p - modref.IsNamespace && p.Length >= longId.Length + + // See https://fslang.uservoice.com/forums/245727-f-language/suggestions/6107641-make-microsoft-prefix-optional-when-using-core-f + let isFSharpCoreSpecialCase = + match ccuOfTyconRef modref with + | None -> false + | Some ccu -> + ccuEq ccu g.fslibCcu && + // Check if we're using a reference one string shorter than what we expect. + // + // "p" is the fully qualified path _containing_ the thing we're opening, e.g. "Microsoft.FSharp" when opening "Microsoft.FSharp.Data" + // "longId" is the text being used, e.g. "FSharp.Data" + // Length of thing being opened = p.Length + 1 + // Length of reference = longId.Length + // So the reference is a "shortened" reference if (p.Length + 1) - 1 = longId.Length + (p.Length + 1) - 1 = longId.Length && + fst p.[0] = "Microsoft" + + modref.IsNamespace && + p.Length >= longId.Length && + not isFSharpCoreSpecialCase + // Allow "open Foo" for "Microsoft.Foo" from FSharp.Core modrefs |> List.iter (fun (_,modref,_) -> if modref.IsModule && HasFSharpAttribute g g.attrib_RequireQualifiedAccessAttribute modref.Attribs then @@ -11061,7 +11236,7 @@ let TcOpenDecl tcSink g amap m scopem env (longId : Ident list) = modrefs |> List.iter (fun (_,modref,_) -> CheckEntityAttributes g modref m |> CommitOperationResult) - let env = OpenModulesOrNamespaces tcSink g amap scopem env (List.map p23 modrefs) + let env = OpenModulesOrNamespaces tcSink g amap scopem false env (List.map p23 modrefs) env @@ -11506,6 +11681,7 @@ module IncrClassChecking = begin | _ -> None Tastops.RewriteExpr { PreIntercept=Some FixupExprNode PostTransform = (fun _ -> None) + PreInterceptBinding=None IsUnderQuotations=true } expr @@ -12567,6 +12743,14 @@ module TyconBindingChecking = begin // Post letrec env let envFinal = AddLocalTyconRefs false g cenv.amap scopem tcrefsWithCSharpExtensionMembers envInitial let envFinal = AddLocalVals cenv.tcSink scopem prelimRecValues envFinal + let envFinal = + let ctorVals = + [ for (TyconBindingsPassBGroup(_tcref, defnBs)) in defnsBs do + for defnB in defnBs do + match defnB with + | PassBIncrClassCtor (incrClassCtorLhs, _) -> yield incrClassCtorLhs.InstanceCtorVal + | _ -> () ] + AddLocalVals cenv.tcSink scopem ctorVals envFinal binds,envFinal,tpenv @@ -12685,7 +12869,7 @@ module AddAugmentationDeclarations = begin let AddGenericCompareDeclarations cenv (env: TcEnv) (scSet:Set) (tycon:Tycon) = - if Augment.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && scSet.Contains tycon.Stamp then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && scSet.Contains tycon.Stamp then let tcref = mkLocalTyconRef tycon let tcaug = tycon.TypeContents let _,typ = if tcref.Deref.IsExceptionDecl then [],cenv.g.exn_ty else generalizeTyconRef tcref @@ -12706,8 +12890,8 @@ module AddAugmentationDeclarations = begin errorR(Error(FSComp.SR.tcImplementsIStructuralComparableExplicitly(tycon.DisplayName),m)) else let hasExplicitGenericIComparable = tycon.HasInterface cenv.g genericIComparableTy - let cvspec1,cvspec2 = Augment.MakeValsForCompareAugmentation cenv.g tcref - let cvspec3 = Augment.MakeValsForCompareWithComparerAugmentation cenv.g tcref + let cvspec1,cvspec2 = AugmentWithHashCompare.MakeValsForCompareAugmentation cenv.g tcref + let cvspec3 = AugmentWithHashCompare.MakeValsForCompareWithComparerAugmentation cenv.g tcref PublishInterface cenv env.DisplayEnv tcref m true cenv.g.mk_IStructuralComparable_ty PublishInterface cenv env.DisplayEnv tcref m true cenv.g.mk_IComparable_ty @@ -12722,7 +12906,7 @@ module AddAugmentationDeclarations = begin let AddGenericEqualityWithComparerDeclarations cenv (env: TcEnv) (seSet:Set) (tycon:Tycon) = - if Augment.TyconIsCandidateForAugmentationWithEquals cenv.g tycon && seSet.Contains tycon.Stamp then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals cenv.g tycon && seSet.Contains tycon.Stamp then let tcref = mkLocalTyconRef tycon let tcaug = tycon.TypeContents let m = tycon.Range @@ -12732,7 +12916,7 @@ module AddAugmentationDeclarations = begin if hasExplicitIStructuralEquatable then errorR(Error(FSComp.SR.tcImplementsIStructuralEquatableExplicitly(tycon.DisplayName),m)) else - let evspec1,evspec2,evspec3 = Augment.MakeValsForEqualityWithComparerAugmentation cenv.g tcref + let evspec1,evspec2,evspec3 = AugmentWithHashCompare.MakeValsForEqualityWithComparerAugmentation cenv.g tcref PublishInterface cenv env.DisplayEnv tcref m true cenv.g.mk_IStructuralEquatable_ty tcaug.SetHashAndEqualsWith (mkLocalValRef evspec1, mkLocalValRef evspec2, mkLocalValRef evspec3) PublishValueDefn cenv env ModuleOrMemberBinding evspec1 @@ -12741,20 +12925,20 @@ module AddAugmentationDeclarations = begin let AddGenericCompareBindings cenv (tycon:Tycon) = - if (* Augment.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && *) isSome tycon.GeneratedCompareToValues then - Augment.MakeBindingsForCompareAugmentation cenv.g tycon + if (* AugmentWithHashCompare.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && *) isSome tycon.GeneratedCompareToValues then + AugmentWithHashCompare.MakeBindingsForCompareAugmentation cenv.g tycon else [] let AddGenericCompareWithComparerBindings cenv (tycon:Tycon) = - if (* Augment.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && *) isSome tycon.GeneratedCompareToWithComparerValues then - (Augment.MakeBindingsForCompareWithComparerAugmentation cenv.g tycon) + if (* AugmentWithHashCompare.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && *) isSome tycon.GeneratedCompareToWithComparerValues then + (AugmentWithHashCompare.MakeBindingsForCompareWithComparerAugmentation cenv.g tycon) else [] let AddGenericEqualityWithComparerBindings cenv (tycon:Tycon) = - if Augment.TyconIsCandidateForAugmentationWithEquals cenv.g tycon && isSome tycon.GeneratedHashAndEqualsWithComparerValues then - (Augment.MakeBindingsForEqualityWithComparerAugmentation cenv.g tycon) + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals cenv.g tycon && isSome tycon.GeneratedHashAndEqualsWithComparerValues then + (AugmentWithHashCompare.MakeBindingsForEqualityWithComparerAugmentation cenv.g tycon) else [] @@ -12770,7 +12954,7 @@ module AddAugmentationDeclarations = begin // We can only add the Equals override after we've done the augmentation becuase we have to wait until // tycon.HasOverride can give correct results let AddGenericEqualityBindings cenv (env: TcEnv) tycon = - if Augment.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then let tcref = mkLocalTyconRef tycon let tcaug = tycon.TypeContents let _,typ = if tcref.Deref.IsExceptionDecl then [],cenv.g.exn_ty else generalizeTyconRef tcref @@ -12788,13 +12972,13 @@ module AddAugmentationDeclarations = begin if not hasExplicitObjectEqualsOverride && isSome tycon.GeneratedHashAndEqualsWithComparerValues then - let vspec1,vspec2 = Augment.MakeValsForEqualsAugmentation cenv.g tcref + let vspec1,vspec2 = AugmentWithHashCompare.MakeValsForEqualsAugmentation cenv.g tcref tcaug.SetEquals (mkLocalValRef vspec1, mkLocalValRef vspec2) if not tycon.IsExceptionDecl then PublishInterface cenv env.DisplayEnv tcref m true (mkAppTy cenv.g.system_GenericIEquatable_tcref [typ]) PublishValueDefn cenv env ModuleOrMemberBinding vspec1 PublishValueDefn cenv env ModuleOrMemberBinding vspec2 - Augment.MakeBindingsForEqualsAugmentation cenv.g tycon + AugmentWithHashCompare.MakeBindingsForEqualsAugmentation cenv.g tycon else [] else [] @@ -12810,7 +12994,7 @@ module TyconConstraintInference = begin // Initially, assume the equality relation is available for all structural type definitions let initialAssumedTycons = set [ for tycon in tycons do - if Augment.TyconIsCandidateForAugmentationWithCompare cenv.g tycon then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithCompare cenv.g tycon then yield tycon.Stamp ] // Initially, don't assume that the equality relation is dependent on any type varaibles @@ -12875,7 +13059,7 @@ module TyconConstraintInference = begin let newSet = assumedTycons |> Set.filter (fun tyconStamp -> let (tycon,structuralTypes) = tab.[tyconStamp] - if cenv.g.compilingFslib && Augment.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && not (HasFSharpAttribute g g.attrib_StructuralComparisonAttribute tycon.Attribs) && not (HasFSharpAttribute g g.attrib_NoComparisonAttribute tycon.Attribs) then + if cenv.g.compilingFslib && AugmentWithHashCompare.TyconIsCandidateForAugmentationWithCompare cenv.g tycon && not (HasFSharpAttribute g g.attrib_StructuralComparisonAttribute tycon.Attribs) && not (HasFSharpAttribute g g.attrib_NoComparisonAttribute tycon.Attribs) then errorR(Error(FSComp.SR.tcFSharpCoreRequiresExplicit(),tycon.Range)) let res = (structuralTypes |> List.forall (fst >> checkIfFieldTypeSupportsComparison tycon)) @@ -12938,7 +13122,7 @@ module TyconConstraintInference = begin // Initially, assume the equality relation is available for all structural type definitions let initialAssumedTycons = set [ for tycon in tycons do - if Augment.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then yield tycon.Stamp ] // Initially, don't assume that the equality relation is dependent on any type varaibles @@ -12979,7 +13163,7 @@ module TyconConstraintInference = begin let tcref,tinst = destAppTy g ty (if initialAssumedTycons.Contains tcref.Stamp then assumedTycons.Contains tcref.Stamp - elif Augment.TyconIsCandidateForAugmentationWithEquals g tcref.Deref then + elif AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals g tcref.Deref then isSome tcref.GeneratedHashAndEqualsWithComparerValues else true) @@ -12999,7 +13183,7 @@ module TyconConstraintInference = begin let newSet = assumedTycons |> Set.filter (fun tyconStamp -> let (tycon,structuralTypes) = tab.[tyconStamp] - if cenv.g.compilingFslib && Augment.TyconIsCandidateForAugmentationWithEquals cenv.g tycon && not (HasFSharpAttribute g g.attrib_StructuralEqualityAttribute tycon.Attribs) && not (HasFSharpAttribute g g.attrib_NoEqualityAttribute tycon.Attribs) then + if cenv.g.compilingFslib && AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals cenv.g tycon && not (HasFSharpAttribute g g.attrib_StructuralEqualityAttribute tycon.Attribs) && not (HasFSharpAttribute g g.attrib_NoEqualityAttribute tycon.Attribs) then errorR(Error(FSComp.SR.tcFSharpCoreRequiresExplicit(),tycon.Range)) // Remove structural types with incomparable elements from the assumedTycons @@ -13009,7 +13193,7 @@ module TyconConstraintInference = begin if not res then match TryFindFSharpBoolAttribute g g.attrib_StructuralEqualityAttribute tycon.Attribs with | Some(true) -> - if Augment.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then match structuralTypes |> List.tryFind (fst >> checkIfFieldTypeSupportsEquality tycon >> not) with | None -> assert false @@ -13024,7 +13208,7 @@ module TyconConstraintInference = begin | Some(false) -> () | None -> - if Augment.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals cenv.g tycon then match structuralTypes |> List.tryFind (fst >> checkIfFieldTypeSupportsEquality tycon >> not) with | None -> assert false @@ -13089,7 +13273,7 @@ module TcExceptionDeclarations = begin let args = match args with (UnionCaseFields args) -> args | _ -> error(Error(FSComp.SR.tcExplicitTypeSpecificationCannotBeUsedForExceptionConstructors(),m)) let ad = env.eAccessRights - let args' = List.mapi (fun i fdef -> TcRecdUnionAndEnumDeclarations.TcAnonFieldDecl cenv env parent tpenv ("Data"^string i) fdef) args + let args' = List.mapi (fun i fdef -> TcRecdUnionAndEnumDeclarations.TcAnonFieldDecl cenv env parent tpenv ("Data" + string i) fdef) args TcRecdUnionAndEnumDeclarations.ValidateFieldNames(args, args') if not (String.isUpper id.idText) then errorR(NotUpperCaseConstructor(m)) let vis,cpath = ComputeAccessAndCompPath env None m vis parent @@ -13456,7 +13640,7 @@ module EstablishTypeDefinitionCores = begin | _ -> failwith "unreachable" if ExtensionTyping.IsGeneratedTypeDirectReference (typeBeforeArguments, m) then - let optGeneratedTypePath = Some (mangledPathOfCompPath tcref.CompilationPath @ [ tcref.LogicalName ]) + let optGeneratedTypePath = Some (tcref.CompilationPath.MangledPath @ [ tcref.LogicalName ]) let _hasNoArgs,providedTypeAfterStaticArguments,checkTypeName = TcProvidedTypeAppToStaticConstantArgs cenv envinner optGeneratedTypePath tpenv tcrefBeforeStaticArguments args m let isGenerated = providedTypeAfterStaticArguments.PUntaint((fun st -> not st.IsErased),m) if isGenerated then @@ -13547,7 +13731,7 @@ module EstablishTypeDefinitionCores = begin error(Error(FSComp.SR.etErasedTypeUsedInGeneration(desig,nm),m)) // Embed the type into the module we're compiling - let cpath = mkNestedCPath eref.CompilationPath eref.LogicalName ModuleOrNamespaceKind.ModuleOrType + let cpath = eref.CompilationPath.NestedCompPath eref.LogicalName ModuleOrNamespaceKind.ModuleOrType let access = combineAccess tycon.Accessibility (if st.PUntaint((fun st -> st.IsPublic || st.IsNestedPublic), m) then taccessPublic else taccessPrivate cpath) let nestedTycon = Construct.NewProvidedTycon(resolutionEnvironment, st, @@ -13556,7 +13740,7 @@ module EstablishTypeDefinitionCores = begin m=m, cpath=cpath, access = access) eref.ModuleOrNamespaceType.AddProvidedTypeEntity(nestedTycon) - let nestedTyRef = eref.MkNestedTyconRef nestedTycon + let nestedTyRef = eref.NestedTyconRef nestedTycon let ilOrigTypeRef = GetOriginalILTypeRefOfProvidedType (st, m) // Record the details so we can map System.Type --> TyconRef @@ -13806,7 +13990,7 @@ module EstablishTypeDefinitionCores = begin let hasCLIMutable = HasFSharpAttribute cenv.g cenv.g.attrib_CLIMutableAttribute attrs let hasStructLayoutAttr = HasFSharpAttribute cenv.g cenv.g.attrib_StructLayoutAttribute attrs - let hasAllowNullLiteralAttr = HasFSharpAttribute cenv.g cenv.g.attrib_AllowNullLiteralAttribute attrs + let hasAllowNullLiteralAttr = TryFindFSharpBoolAttribute cenv.g cenv.g.attrib_AllowNullLiteralAttribute attrs = Some(true) if hasAbstractAttr then tycon.TypeContents.tcaug_abstract <- true @@ -13821,8 +14005,8 @@ module EstablishTypeDefinitionCores = begin let allowNullLiteralAttributeCheck() = if hasAllowNullLiteralAttr then - tycon.TypeContents.tcaug_super |> Option.iter (fun ty -> if not (TypeNullIsExtraValue cenv.g ty) then errorR (Error(FSComp.SR.tcAllowNullTypesMayOnlyInheritFromAllowNullTypes(),m))) - tycon.ImmediateInterfaceTypesOfFSharpTycon |> List.iter (fun ty -> if not (TypeNullIsExtraValue cenv.g ty) then errorR (Error(FSComp.SR.tcAllowNullTypesMayOnlyInheritFromAllowNullTypes(),m))) + tycon.TypeContents.tcaug_super |> Option.iter (fun ty -> if not (TypeNullIsExtraValue cenv.g m ty) then errorR (Error(FSComp.SR.tcAllowNullTypesMayOnlyInheritFromAllowNullTypes(),m))) + tycon.ImmediateInterfaceTypesOfFSharpTycon |> List.iter (fun ty -> if not (TypeNullIsExtraValue cenv.g m ty) then errorR (Error(FSComp.SR.tcAllowNullTypesMayOnlyInheritFromAllowNullTypes(),m))) let structLayoutAttributeCheck(allowed) = @@ -13866,10 +14050,10 @@ module EstablishTypeDefinitionCores = begin let nenv = envinner.NameEnv // Record fields should be visible from IntelliSense, so add fake names for them (similarly to "let a = ..") for fspec in (fields |> List.filter (fun fspec -> not fspec.IsCompilerGenerated)) do - let info = RecdFieldInfo(thisTyInst, mkNestedRecdFieldRef thisTyconRef fspec) + let info = RecdFieldInfo(thisTyInst, thisTyconRef.MakeNestedRecdFieldRef fspec) let nenv' = AddFakeNameToNameEnv fspec.Name nenv (Item.RecdField info) // Name resolution gives better info for tooltips - let item = FreshenRecdFieldRef cenv.nameResolver m (mkNestedRecdFieldRef thisTyconRef fspec) + let item = FreshenRecdFieldRef cenv.nameResolver m (thisTyconRef.MakeNestedRecdFieldRef fspec) CallNameResolutionSink cenv.tcSink (fspec.Range,nenv,item,item,ItemOccurence.Binding,envinner.DisplayEnv,ad) // Environment is needed for completions CallEnvSink cenv.tcSink (fspec.Range, nenv', ad) @@ -13880,9 +14064,9 @@ module EstablishTypeDefinitionCores = begin // Constructors should be visible from IntelliSense, so add fake names for them for unionCase in unionCases do let info = UnionCaseInfo(thisTyInst,mkUnionCaseRef thisTyconRef unionCase.Id.idText) - let nenv' = AddFakeNameToNameEnv unionCase.Id.idText nenv (Item.UnionCase info) + let nenv' = AddFakeNameToNameEnv unionCase.Id.idText nenv (Item.UnionCase(info,false)) // Report to both - as in previous function - let item = Item.UnionCase info + let item = Item.UnionCase(info,false) CallNameResolutionSink cenv.tcSink (unionCase.Range,nenv,item,item,ItemOccurence.Binding,envinner.DisplayEnv,ad) CallEnvSink cenv.tcSink (unionCase.Id.idRange, nenv', ad) @@ -14111,7 +14295,7 @@ module EstablishTypeDefinitionCores = begin // validate ConditionalAttribute, should it be applied (it's only valid on a type if the type is an attribute type) match attrs |> List.tryFind (IsMatchingFSharpAttribute cenv.g cenv.g.attrib_ConditionalAttribute) with | Some _ -> - if not(ExistsInEntireHierarchyOfType (fun t -> typeEquiv cenv.g t (mkAppTy cenv.g.tcref_System_Attribute [])) cenv.g cenv.amap m AllowMultiIntfInstantiations.No thisTy) then + if not(ExistsInEntireHierarchyOfType (fun t -> typeEquiv cenv.g t (mkAppTy cenv.g.tcref_System_Attribute [])) cenv.g cenv.amap m AllowMultiIntfInstantiations.Yes thisTy) then errorR(Error(FSComp.SR.tcConditionalAttributeUsage(),m)) | _ -> () @@ -14890,12 +15074,14 @@ let rec TcSignatureElement cenv parent endm (env: TcEnv) e : Eventually = CheckNamespaceModuleOrTypeName cenv.g id let enclosingNamespacePath = if isModule then fst (List.frontAndBack longId) else longId + let defs = if isModule then [SynModuleSigDecl.NestedModule(ComponentInfo(attribs,[], [],[snd(List.frontAndBack longId)],xml,false,vis,m),defs,m)] else defs let envinner = LocateEnv cenv.topCcu env enclosingNamespacePath + let envinner = ImplicitlyOpenOwnNamespace cenv.tcSink cenv.g cenv.amap m enclosingNamespacePath envinner let! envAtEnd = TcSignatureElements cenv ParentNone m.EndRange envinner xml defs @@ -14906,8 +15092,15 @@ let rec TcSignatureElement cenv parent endm (env: TcEnv) e : Eventually = let modulTypeRoot = BuildRootModuleType enclosingNamespacePath envinner.eCompPath !(envinner.eModuleOrNamespaceTypeAccumulator) let env = AddLocalRootModuleOrNamespace cenv.tcSink cenv.g cenv.amap m env modulTypeRoot + + // If the namespace is an interactive fragment e.g. FSI_0002, then open FSI_0002 in the subsequent environment. + let env = + match TryStripPrefixPath cenv.g enclosingNamespacePath with + | Some(p,_) -> TcOpenDecl cenv.tcSink cenv.g cenv.amap m.EndRange m.EndRange env [p] + | None -> env + // Publish the combined module type - env.eModuleOrNamespaceTypeAccumulator := combineModuleOrNamespaceTypeList [] m [!(env.eModuleOrNamespaceTypeAccumulator); modulTypeRoot] + env.eModuleOrNamespaceTypeAccumulator := CombineCcuContentFragments m [!(env.eModuleOrNamespaceTypeAccumulator); modulTypeRoot] env return env @@ -15109,7 +15302,7 @@ let rec TcModuleOrNamespaceElement (cenv:cenv) parent scopem env e = // : ((Modu | SynModuleDecl.NamespaceFragment(SynModuleOrNamespace(longId,isModule,defs,xml,attribs,vis,m)) -> - if !progress then dprintn ("Typecheck implementation "^textOfLid longId) + if !progress then dprintn ("Typecheck implementation " + textOfLid longId) let endm = m.EndRange do for id in longId do @@ -15133,8 +15326,15 @@ let rec TcModuleOrNamespaceElement (cenv:cenv) parent scopem env e = // : ((Modu let modulTypeRoot = BuildRootModuleType enclosingNamespacePath envinner.eCompPath !(envinner.eModuleOrNamespaceTypeAccumulator) let env = AddLocalRootModuleOrNamespace cenv.tcSink cenv.g cenv.amap m env modulTypeRoot + + // If the namespace is an interactive fragment e.g. FSI_0002, then open FSI_0002 in the subsequent environment + let env = + match TryStripPrefixPath cenv.g enclosingNamespacePath with + | Some(p,_) -> TcOpenDecl cenv.tcSink cenv.g cenv.amap m.EndRange m.EndRange env [p] + | None -> env + // Publish the combined module type - env.eModuleOrNamespaceTypeAccumulator := combineModuleOrNamespaceTypeList [] m [!(env.eModuleOrNamespaceTypeAccumulator); modulTypeRoot] + env.eModuleOrNamespaceTypeAccumulator := CombineCcuContentFragments m [!(env.eModuleOrNamespaceTypeAccumulator); modulTypeRoot] env let mexprRoot = BuildRootModuleExpr enclosingNamespacePath envinner.eCompPath mexpr @@ -15208,28 +15408,39 @@ and TcModuleOrNamespace cenv env (id,isModule,defs,xml,modAttrs,vis,m:range) = //-------------------------------------------------------------------------- -// TypecheckOneImplFile - Typecheck all the namespace fragments in a file. +// TypeCheckOneImplFile - Typecheck all the namespace fragments in a file. //-------------------------------------------------------------------------- + +let ApplyAssemblyLevelAutoOpenAttributeToTcEnv g amap (ccu: CcuThunk) scopem env (p, root) = + let warn() = + warning(Error(FSComp.SR.tcAttributeAutoOpenWasIgnored(p, ccu.AssemblyName),scopem)) + env + let p = splitNamespace p + if isNil p then warn() else + let h,t = List.frontAndBack p + let modref = mkNonLocalTyconRef (mkNonLocalEntityRef ccu (Array.ofList h)) t + match modref.TryDeref with + | None -> warn() + | Some _ -> OpenModulesOrNamespaces TcResultsSink.NoSink g amap scopem root env [modref] + +// Add the CCU and apply the "AutoOpen" attributes let AddCcuToTcEnv(g,amap,scopem,env,ccu,autoOpens,internalsVisible) = let env = AddNonLocalCcu g amap scopem env (ccu,internalsVisible) -#if AUTO_OPEN_ATTRIBUTES_AS_OPEN - let env = List.fold (fun env p -> TcOpenDecl tcSink g amap scopem scopem env (pathToSynLid scopem (splitNamespace p))) env autoOpens -#else - let env = - (env,autoOpens) ||> List.fold (fun env p -> - let warn() = - warning(Error(FSComp.SR.tcAttributeAutoOpenWasIgnored(p, ccu.AssemblyName),scopem)) - env - let p = splitNamespace p - if isNil p then warn() else - let h,t = List.frontAndBack p - let modref = mkNonLocalTyconRef (mkNonLocalEntityRef ccu (Array.ofList h)) t - match modref.TryDeref with - | None -> warn() - | Some _ -> OpenModulesOrNamespaces TcResultsSink.NoSink g amap scopem env [modref]) -#endif + // See https://fslang.uservoice.com/forums/245727-f-language/suggestions/6107641-make-microsoft-prefix-optional-when-using-core-f + // "Microsoft" is opened by default in FSharp.Core + let autoOpens = + let autoOpens = autoOpens |> List.map (fun p -> (p,false)) + if ccuEq ccu g.fslibCcu then + // Auto open 'Microsoft' in FSharp.Core.dll. Even when using old versions of FSharp.Core.dll that do + // not have this attribute. The 'true' means 'treat all namespaces so revealed as "roots" accessible via + // global, e.g. global.FSharp.Collections' + ("Microsoft", true) :: autoOpens + else + autoOpens + + let env = (env,autoOpens) ||> List.fold (ApplyAssemblyLevelAutoOpenAttributeToTcEnv g amap ccu scopem) env let CreateInitialTcEnv(g,amap,scopem,ccus) = @@ -15363,7 +15574,7 @@ let CheckModuleSignature g cenv m denvAtEnd rootSigOpt implFileTypePriorToSig im /// Check an entire implementation file /// Typecheck, then close the inference scope and then check the file meets its signature (if any) -let TypecheckOneImplFile +let TypeCheckOneImplFile // checkForErrors: A function to help us stop reporting cascading errors (g, niceNameGen, amap, topCcu, checkForErrors, conditionalDefines, tcSink) env @@ -15428,14 +15639,14 @@ let TypecheckOneImplFile with e -> errorRecovery e m) - // We ALWAYS run the PostTypecheckSemanticChecks phase, though we if we have already encountered some + // We ALWAYS run the PostTypeCheckSemanticChecks phase, though we if we have already encountered some // errors we turn off error reporting. THis is because it performs various fixups over the TAST, e.g. // assigning nice names for inference variables. let hasExplicitEntryPoint = conditionallySuppressErrorReporting (checkForErrors()) (fun () -> try let reportErrors = not (checkForErrors()) - Microsoft.FSharp.Compiler.PostTypecheckSemanticChecks.CheckTopImpl (g,cenv.amap,reportErrors,cenv.infoReader,env.eInternalsVisibleCompPaths,cenv.topCcu,envAtEnd.DisplayEnv, implFileExprAfterSig,extraAttribs,isLastCompiland) + Microsoft.FSharp.Compiler.PostTypeCheckSemanticChecks.CheckTopImpl (g,cenv.amap,reportErrors,cenv.infoReader,env.eInternalsVisibleCompPaths,cenv.topCcu,envAtEnd.DisplayEnv, implFileExprAfterSig,extraAttribs,isLastCompiland) with e -> errorRecovery e m false) @@ -15448,7 +15659,7 @@ let TypecheckOneImplFile /// Check an entire sginature file -let TypecheckOneSigFile +let TypeCheckOneSigFile (g,niceNameGen,amap,topCcu,checkForErrors,conditionalDefines,tcSink) tcEnv (ParsedSigFileInput(_,qualNameOfFile,_, _,sigFileFrags)) = diff --git a/src/fsharp/TypeChecker.fsi b/src/fsharp/TypeChecker.fsi new file mode 100644 index 00000000000..3cb326ff735 --- /dev/null +++ b/src/fsharp/TypeChecker.fsi @@ -0,0 +1,110 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +module internal Microsoft.FSharp.Compiler.TypeChecker + +open Internal.Utilities +open Microsoft.FSharp.Compiler +open Microsoft.FSharp.Compiler.AbstractIL +open Microsoft.FSharp.Compiler.AbstractIL.IL +open Microsoft.FSharp.Compiler.AbstractIL.Internal +open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library +open Microsoft.FSharp.Compiler.Range +open Microsoft.FSharp.Compiler.Ast +open Microsoft.FSharp.Compiler.ErrorLogger +open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.Tastops +open Microsoft.FSharp.Compiler.Lib +open Microsoft.FSharp.Compiler.Infos +open Microsoft.FSharp.Compiler.Import +open Microsoft.FSharp.Compiler.TcGlobals + +open System.Collections.Generic + +[] +type TcEnv = + member DisplayEnv : DisplayEnv + member NameEnv : NameResolution.NameResolutionEnv + +val CreateInitialTcEnv : TcGlobals * ImportMap * range * (CcuThunk * string list * bool) list -> TcEnv +val AddCcuToTcEnv : TcGlobals * ImportMap * range * TcEnv * CcuThunk * autoOpens: string list * bool -> TcEnv +val AddLocalRootModuleOrNamespace : NameResolution.TcResultsSink -> TcGlobals -> ImportMap -> range -> TcEnv -> ModuleOrNamespaceType -> TcEnv +val TcOpenDecl : NameResolution.TcResultsSink -> TcGlobals -> ImportMap -> range -> range -> TcEnv -> Ast.LongIdent -> TcEnv + +type TopAttribs = + { mainMethodAttrs : Attribs; + netModuleAttrs : Attribs; + assemblyAttrs : Attribs } + +type ConditionalDefines = + string list + +val EmptyTopAttrs : TopAttribs +val CombineTopAttrs : TopAttribs -> TopAttribs -> TopAttribs + +val TypeCheckOneImplFile : + TcGlobals * NiceNameGenerator * ImportMap * CcuThunk * (unit -> bool) * ConditionalDefines * NameResolution.TcResultsSink + -> TcEnv + -> Tast.ModuleOrNamespaceType option + -> ParsedImplFileInput + -> Eventually + +val TypeCheckOneSigFile : + TcGlobals * NiceNameGenerator * ImportMap * CcuThunk * (unit -> bool) * ConditionalDefines * NameResolution.TcResultsSink + -> TcEnv + -> ParsedSigFileInput + -> Eventually + +//------------------------------------------------------------------------- +// Some of the exceptions arising from type checking. These should be moved to +// use ErrorLogger. +//------------------------------------------------------------------------- + +exception BakedInMemberConstraintName of string * range +exception FunctionExpected of DisplayEnv * TType * range +exception NotAFunction of DisplayEnv * TType * range * range +exception Recursion of DisplayEnv * Ast.Ident * TType * TType * range +exception RecursiveUseCheckedAtRuntime of DisplayEnv * ValRef * range +exception LetRecEvaluatedOutOfOrder of DisplayEnv * ValRef * ValRef * range +exception LetRecCheckedAtRuntime of range +exception LetRecUnsound of DisplayEnv * ValRef list * range +exception TyconBadArgs of DisplayEnv * TyconRef * int * range +exception UnionCaseWrongArguments of DisplayEnv * int * int * range +exception UnionCaseWrongNumberOfArgs of DisplayEnv * int * int * range +exception FieldsFromDifferentTypes of DisplayEnv * RecdFieldRef * RecdFieldRef * range +exception FieldGivenTwice of DisplayEnv * RecdFieldRef * range +exception MissingFields of string list * range +exception UnitTypeExpected of DisplayEnv * TType * bool * range +exception FunctionValueUnexpected of DisplayEnv * TType * range +exception UnionPatternsBindDifferentNames of range +exception VarBoundTwice of Ast.Ident +exception ValueRestriction of DisplayEnv * bool * Val * Typar * range +exception FieldNotMutable of DisplayEnv * RecdFieldRef * range +exception ValNotMutable of DisplayEnv * ValRef * range +exception ValNotLocal of DisplayEnv * ValRef * range +exception InvalidRuntimeCoercion of DisplayEnv * TType * TType * range +exception IndeterminateRuntimeCoercion of DisplayEnv * TType * TType * range +exception IndeterminateStaticCoercion of DisplayEnv * TType * TType * range +exception StaticCoercionShouldUseBox of DisplayEnv * TType * TType * range +exception RuntimeCoercionSourceSealed of DisplayEnv * TType * range +exception CoercionTargetSealed of DisplayEnv * TType * range +exception UpcastUnnecessary of range +exception TypeTestUnnecessary of range +exception SelfRefObjCtor of bool * range +exception VirtualAugmentationOnNullValuedType of range +exception NonVirtualAugmentationOnNullValuedType of range +exception UseOfAddressOfOperator of range +exception DeprecatedThreadStaticBindingWarning of range +exception NotUpperCaseConstructor of range +exception IntfImplInIntrinsicAugmentation of range +exception IntfImplInExtrinsicAugmentation of range +exception OverrideInIntrinsicAugmentation of range +exception OverrideInExtrinsicAugmentation of range +exception NonUniqueInferredAbstractSlot of TcGlobals * DisplayEnv * string * MethInfo * MethInfo * range +exception StandardOperatorRedefinitionWarning of string * range +exception ParameterlessStructCtor of range + +val TcFieldInit : range -> ILFieldInit -> Tast.Const + +val IsSecurityAttribute : TcGlobals -> ImportMap -> Dictionary -> Attrib -> range -> bool +val IsSecurityCriticalAttribute : TcGlobals -> Attrib -> bool +val LightweightTcValForUsingInBuildMethodCall : g : TcGlobals -> vref:ValRef -> vrefFlags : ValUseFlag -> vrefTypeInst : TTypes -> m : range -> Expr * TType \ No newline at end of file diff --git a/src/fsharp/typrelns.fs b/src/fsharp/TypeRelations.fs similarity index 97% rename from src/fsharp/typrelns.fs rename to src/fsharp/TypeRelations.fs index 9584dc2a5fb..3abc3980b3f 100644 --- a/src/fsharp/typrelns.fs +++ b/src/fsharp/TypeRelations.fs @@ -2,7 +2,7 @@ /// Primary relations on types and signatures, with the exception of /// constraint solving and method overload resolution. -module internal Microsoft.FSharp.Compiler.Typrelns +module internal Microsoft.FSharp.Compiler.TypeRelations open Internal.Utilities open System.Text @@ -19,12 +19,13 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.PrettyNaming open Microsoft.FSharp.Compiler.Infos.AccessibilityLogic +open Microsoft.FSharp.Compiler.NameResolution #if EXTENSIONTYPING open Microsoft.FSharp.Compiler.ExtensionTyping @@ -72,7 +73,7 @@ let rec TypeDefinitelySubsumesTypeNoCoercion ndeep g amap m ty1 ty2 = | Some ty -> TypeDefinitelySubsumesTypeNoCoercion (ndeep+1) g amap m ty1 ty) || (isInterfaceTy g ty1 && - ty2 |> GetImmediateInterfacesOfType g amap m + ty2 |> GetImmediateInterfacesOfType SkipUnrefInterfaces.Yes g amap m |> List.exists (TypeDefinitelySubsumesTypeNoCoercion (ndeep+1) g amap m ty1)))) @@ -128,7 +129,7 @@ let rec TypeFeasiblySubsumesType ndeep g amap m ty1 canCoerce ty2 = | None -> false | Some ty -> TypeFeasiblySubsumesType (ndeep+1) g amap m ty1 NoCoerce ty end || - ty2 |> GetImmediateInterfacesOfType g amap m + ty2 |> GetImmediateInterfacesOfType SkipUnrefInterfaces.Yes g amap m |> List.exists (TypeFeasiblySubsumesType (ndeep+1) g amap m ty1 NoCoerce)) @@ -236,7 +237,7 @@ let ChooseTyparSolutionsForFreeChoiceTypars g amap e = /// Break apart lambdas. Needs ChooseTyparSolutionsForFreeChoiceTypars because it's used in -/// PostTypecheckSemanticChecks before we've eliminated these nodes. +/// PostTypeCheckSemanticChecks before we've eliminated these nodes. let tryDestTopLambda g amap (ValReprInfo (tpNames,_,_) as tvd) (e,ty) = let rec stripLambdaUpto n (e,ty) = match e with @@ -461,8 +462,8 @@ module SignatureConformance = begin elif fNull && not aNull then errorR(err(FSComp.SR.DefinitionsInSigAndImplNotCompatibleSignatureSaysNull)) - let aNull2 = TypeNullIsExtraValue g (generalizedTyconRef (mkLocalTyconRef implTycon)) - let fNull2 = TypeNullIsExtraValue g (generalizedTyconRef (mkLocalTyconRef implTycon)) + let aNull2 = TypeNullIsExtraValue g m (generalizedTyconRef (mkLocalTyconRef implTycon)) + let fNull2 = TypeNullIsExtraValue g m (generalizedTyconRef (mkLocalTyconRef implTycon)) if aNull2 && not fNull2 then errorR(err(FSComp.SR.DefinitionsInSigAndImplNotCompatibleImplementationSaysNull2)) elif fNull2 && not aNull2 then @@ -715,7 +716,7 @@ module SignatureConformance = begin let ucases1 = r1.UnionCasesAsList let ucases2 = r2.UnionCasesAsList if ucases1.Length <> ucases2.Length then - let names l = List.map (fun c -> c.Id.idText) l + 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 | (TRecdRepr implFields), (TRecdRepr sigFields) -> @@ -1281,7 +1282,7 @@ module DispatchSlotChecking = // This contains the list of required members and the list of available members [ for (_,reqdTy,reqdTyRange,impliedTys) in reqdTyInfos do - // Build a table of the implied interface types, for quicker lookup + // Build a set of the implied interface types, for quicker lookup, by nominal type let isImpliedInterfaceTable = impliedTys |> List.filter (isInterfaceTy g) @@ -1498,11 +1499,18 @@ type CalledArg = IsParamArray : bool OptArgInfo : OptionalArgInfo IsOutArg: bool + ReflArgInfo: ReflectedArgInfo NameOpt: string option CalledArgumentType : TType } -let CalledArg(pos,isParamArray,optArgInfo,isOutArg,nameOpt,calledArgTy) = - { Position=pos; IsParamArray=isParamArray; OptArgInfo =optArgInfo; IsOutArg=isOutArg; NameOpt=nameOpt; CalledArgumentType = calledArgTy} +let CalledArg(pos,isParamArray,optArgInfo,isOutArg,nameOpt,reflArgInfo,calledArgTy) = + { Position=pos + IsParamArray=isParamArray + OptArgInfo =optArgInfo + IsOutArg=isOutArg + ReflArgInfo=reflArgInfo + NameOpt=nameOpt + CalledArgumentType = calledArgTy } /// Represents a match between a caller argument and a called argument, arising from either /// a named argument or an unnamed argument. @@ -1578,6 +1586,7 @@ let AdjustCalledArgType (infoReader:InfoReader) isConstraint (calledArg: CalledA if isDelegateTy g calledArgTy && isFunTy g callerArgTy then adjustDelegateTy calledArgTy + elif isLinqExpressionTy g calledArgTy && isFunTy g callerArgTy then let origArgTy = calledArgTy let calledArgTy = destLinqExpressionTy g calledArgTy @@ -1586,6 +1595,10 @@ let AdjustCalledArgType (infoReader:InfoReader) isConstraint (calledArg: CalledA else // BUG 435170: called arg is Expr<'t> where 't is not delegate - such conversion is not legal -> return original type origArgTy + + elif calledArg.ReflArgInfo.AutoQuote && isQuotedExprTy g calledArgTy && not (isQuotedExprTy g callerArgTy) then + destQuotedExprTy g calledArgTy + else calledArgTy // Adjust the called argument type to take into account whether the caller's argument is M(?arg=Some(3)) or M(arg=1) @@ -1621,8 +1634,14 @@ type CalledMethArgSet<'T> = let MakeCalledArgs amap m (minfo:MethInfo) minst = // Mark up the arguments with their position, so we can sort them back into order later let paramDatas = minfo.GetParamDatas(amap, m, minst) - paramDatas |> List.mapiSquared (fun i j (ParamData(isParamArrayArg,isOutArg,optArgInfo,nmOpt,typeOfCalledArg)) -> - { Position=(i,j); IsParamArray=isParamArrayArg; OptArgInfo=optArgInfo; IsOutArg=isOutArg; NameOpt=nmOpt; CalledArgumentType=typeOfCalledArg }) + paramDatas |> List.mapiSquared (fun i j (ParamData(isParamArrayArg,isOutArg,optArgInfo,nmOpt,reflArgInfo,typeOfCalledArg)) -> + { Position=(i,j) + IsParamArray=isParamArrayArg + OptArgInfo=optArgInfo + IsOutArg=isOutArg + ReflArgInfo=reflArgInfo + NameOpt=nmOpt + CalledArgumentType=typeOfCalledArg }) /// Represents the syntactic matching between a caller of a method and the called method. /// @@ -1630,6 +1649,7 @@ let MakeCalledArgs amap m (minfo:MethInfo) minst = /// and returns a CalledMeth object for further analysis. type CalledMeth<'T> (infoReader:InfoReader, + nameEnv: NameResolutionEnv option, isCheckingAttributeCall, freshenMethInfo,// a function to help generate fresh type variables the property setters methods in generic classes m, @@ -1641,7 +1661,8 @@ type CalledMeth<'T> callerObjArgTys: TType list, // the types of the actual object argument, if any curriedCallerArgs: (CallerArg<'T> list * CallerNamedArg<'T> list) list, // the data about any arguments supplied by the caller allowParamArgs:bool, // do we allow the use of a param args method in its "expanded" form? - allowOutAndOptArgs: bool) // do we allow the use of the transformation that converts out arguments as tuple returns? + allowOutAndOptArgs: bool, // do we allow the use of the transformation that converts out arguments as tuple returns? + tyargsOpt : TType option) // method parameters = let g = infoReader.g let methodRetTy = minfo.GetFSharpReturnTy(infoReader.amap, m, calledTyArgs) @@ -1718,7 +1739,7 @@ type CalledMeth<'T> let returnedObjTy = if minfo.IsConstructor then minfo.EnclosingType else methodRetTy unassignedNamedItem |> List.splitChoose (fun (CallerNamedArg(id,e) as arg) -> let nm = id.idText - let pinfos = GetIntrinsicPropInfoSetsOfType infoReader (Some(nm),ad,AllowMultiIntfInstantiations.No) IgnoreOverrides id.idRange returnedObjTy + let pinfos = GetIntrinsicPropInfoSetsOfType infoReader (Some(nm),ad,AllowMultiIntfInstantiations.Yes) IgnoreOverrides id.idRange returnedObjTy let pinfos = pinfos |> ExcludeHiddenOfPropInfos g infoReader.amap m match pinfos with | [pinfo] when pinfo.HasSetter && not pinfo.IsIndexer -> @@ -1726,15 +1747,31 @@ type CalledMeth<'T> let pminst = freshenMethInfo m pminfo Choice1Of2(AssignedItemSetter(id,AssignedPropSetter(pinfo,pminfo, pminst), e)) | _ -> - match infoReader.GetILFieldInfosOfType(Some(nm),ad,m,returnedObjTy) with - | finfo :: _ -> - Choice1Of2(AssignedItemSetter(id,AssignedILFieldSetter(finfo), e)) - | _ -> - match infoReader.TryFindRecdOrClassFieldInfoOfType(nm,m,returnedObjTy) with - | Some rfinfo -> - Choice1Of2(AssignedItemSetter(id,AssignedRecdFieldSetter(rfinfo), e)) - | None -> - Choice2Of2(arg)) + let epinfos = + match nameEnv with + | Some(ne) -> ExtensionPropInfosOfTypeInScope infoReader ne (Some(nm), ad) m returnedObjTy + | _ -> [] + match epinfos with + | [pinfo] when pinfo.HasSetter && not pinfo.IsIndexer -> + let pminfo = pinfo.SetterMethod + let pminst = match minfo with + | MethInfo.FSMeth(_,TType.TType_app(_,types),_,_) -> types + | _ -> freshenMethInfo m pminfo + + let pminst = match tyargsOpt with + | Some(TType.TType_app(_, types)) -> types + | _ -> pminst + Choice1Of2(AssignedItemSetter(id,AssignedPropSetter(pinfo,pminfo, pminst), e)) + | _ -> + match infoReader.GetILFieldInfosOfType(Some(nm),ad,m,returnedObjTy) with + | finfo :: _ -> + Choice1Of2(AssignedItemSetter(id,AssignedILFieldSetter(finfo), e)) + | _ -> + match infoReader.TryFindRecdOrClassFieldInfoOfType(nm,m,returnedObjTy) with + | Some rfinfo -> + Choice1Of2(AssignedItemSetter(id,AssignedRecdFieldSetter(rfinfo), e)) + | None -> + Choice2Of2(arg)) let names = namedCallerArgs |> List.map (fun (CallerNamedArg(nm,_)) -> nm.idText) @@ -1908,12 +1945,12 @@ let FinalTypeDefinitionChecksAtEndOfInferenceScope (infoReader:InfoReader) isImp not tycon.IsFSharpInterfaceTycon then (* Warn when we're doing this for class types *) - if Augment.TyconIsCandidateForAugmentationWithEquals g tycon then + if AugmentWithHashCompare.TyconIsCandidateForAugmentationWithEquals g tycon then warning(Error(FSComp.SR.typrelTypeImplementsIComparableShouldOverrideObjectEquals(tycon.DisplayName),tycon.Range)) else warning(Error(FSComp.SR.typrelTypeImplementsIComparableDefaultObjectEqualsProvided(tycon.DisplayName),tycon.Range)) - Augment.CheckAugmentationAttribs isImplementation g amap tycon + AugmentWithHashCompare.CheckAugmentationAttribs isImplementation g amap tycon // Check some conditions about generic comparison and hashing. We can only check this condition after we've done the augmentation if isImplementation #if EXTENSIONTYPING @@ -1956,7 +1993,7 @@ let FinalTypeDefinitionChecksAtEndOfInferenceScope (infoReader:InfoReader) isImp /// Look for the unique supertype of ty2 for which ty2 :> ty1 might feasibly hold let FindUniqueFeasibleSupertype g amap m ty1 ty2 = if not (isAppTy g ty2) then None else - let supertypes = Option.toList (GetSuperTypeOfType g amap m ty2) @ (GetImmediateInterfacesOfType g amap m ty2) + let supertypes = Option.toList (GetSuperTypeOfType g amap m ty2) @ (GetImmediateInterfacesOfType SkipUnrefInterfaces.Yes g amap m ty2) supertypes |> List.tryFind (TypeFeasiblySubsumesType 0 g amap m ty1 NoCoerce) @@ -2166,7 +2203,7 @@ let BuildMethodCall tcVal g amap isMutable m isProp minfo valUseFlags minst objA // Build a 'call' to a struct default constructor | DefaultStructCtor (g,typ) -> - if not (TypeHasDefaultValue g typ) then + if not (TypeHasDefaultValue g m typ) then errorR(Error(FSComp.SR.tcDefaultStructConstructorCall(),m)) mkDefault (m,typ), typ) diff --git a/src/fsharp/unilex.fs b/src/fsharp/UnicodeLexing.fs similarity index 100% rename from src/fsharp/unilex.fs rename to src/fsharp/UnicodeLexing.fs diff --git a/src/fsharp/unilex.fsi b/src/fsharp/UnicodeLexing.fsi similarity index 100% rename from src/fsharp/unilex.fsi rename to src/fsharp/UnicodeLexing.fsi diff --git a/src/fsharp/ast.fs b/src/fsharp/ast.fs index a4c884130cb..a07c40ec2a7 100644 --- a/src/fsharp/ast.fs +++ b/src/fsharp/ast.fs @@ -255,11 +255,20 @@ and | Product of SynMeasure * SynMeasure * range | Seq of SynMeasure list * range | Divide of SynMeasure * SynMeasure * range - | Power of SynMeasure * int * range + | Power of SynMeasure * SynRationalConst * range | One | Anon of range | Var of SynTypar * range +and + [] + /// The unchecked abstract syntax tree of F# unit of measure exponents. + SynRationalConst = + | Integer of int32 + | Rational of int32 * int32 * range + | Negate of SynRationalConst + + //------------------------------------------------------------------------ // AST: the grammar of types, expressions, declarations etc. //----------------------------------------------------------------------- @@ -423,8 +432,8 @@ and | HashConstraint of SynType * range /// F# syntax : for units of measure e.g. m / s | MeasureDivide of SynType * SynType * range - /// F# syntax : for units of measure e.g. m^3 - | MeasurePower of SynType * int * range + /// F# syntax : for units of measure e.g. m^3, kg^1/2 + | MeasurePower of SynType * SynRationalConst * 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 SynConst * range @@ -1697,7 +1706,6 @@ let ParseAssemblyCodeType s m = IL.EcmaILGlobals.typ_Object #endif - //------------------------------------------------------------------------ // AST constructors //------------------------------------------------------------------------ @@ -1733,7 +1741,7 @@ let mkSynDotBrackSeqSliceGet m mDot arr (argslist:list) = | SynIndexerArg.One x -> yield x | _ -> () ] if notsliced.Length = argslist.Length then - SynExpr.DotIndexedGet(arr,[SynIndexerArg.One (SynExpr.Tuple(notsliced,[],unionRanges (Seq.head notsliced).Range (Seq.last notsliced).Range))],mDot,m) + SynExpr.DotIndexedGet(arr,[SynIndexerArg.One (SynExpr.Tuple(notsliced,[],unionRanges (List.head notsliced).Range (List.last notsliced).Range))],mDot,m) else SynExpr.DotIndexedGet(arr,argslist,mDot,m) @@ -2007,7 +2015,19 @@ type LexerEndlineContinuation = match x with | LexerEndlineContinuation.Token(ifd) | LexerEndlineContinuation.Skip(ifd, _, _) -> ifd - + +type LexerIfdefExpression = + | IfdefAnd of LexerIfdefExpression*LexerIfdefExpression + | IfdefOr of LexerIfdefExpression*LexerIfdefExpression + | IfdefNot of LexerIfdefExpression + | IfdefId of string + +let rec LexerIfdefEval (lookup : string -> bool) = function + | IfdefAnd (l,r) -> (LexerIfdefEval lookup l) && (LexerIfdefEval lookup r) + | IfdefOr (l,r) -> (LexerIfdefEval lookup l) || (LexerIfdefEval lookup r) + | IfdefNot e -> not (LexerIfdefEval lookup e) + | IfdefId id -> lookup id + /// The parser defines a number of tokens for whitespace and /// comments eliminated by the lexer. These carry a specification of /// a continuation for the lexer for continued processing after we've dealt with @@ -2052,7 +2072,7 @@ and LexCont = LexerWhitespaceContinuation /// The error raised by the parse_error_rich function, which is called by the parser engine /// when a syntax error occurs. The first object is the ParseErrorContext which contains a dump of /// information about the grammar at the point where the error occured, e.g. what tokens -/// are valid to shift next at that point in the grammar. This information is processed in build.fs. +/// are valid to shift next at that point in the grammar. This information is processed in CompileOps.fs. [] exception SyntaxError of obj (* ParseErrorContext<_> *) * range diff --git a/src/fsharp/autobox.fs b/src/fsharp/autobox.fs new file mode 100644 index 00000000000..f576b61e5a8 --- /dev/null +++ b/src/fsharp/autobox.fs @@ -0,0 +1,193 @@ +// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +module internal Microsoft.FSharp.Compiler.AutoBox + +open Internal.Utilities +open Microsoft.FSharp.Compiler.AbstractIL.Internal +open Microsoft.FSharp.Compiler +open Microsoft.FSharp.Compiler.Range +open Microsoft.FSharp.Compiler.ErrorLogger +open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.Tastops +open Microsoft.FSharp.Compiler.Lib +open Microsoft.FSharp.Compiler.TcGlobals +open Microsoft.FSharp.Compiler.TypeRelations + +//---------------------------------------------------------------------------- +// Decide the set of mutable locals to promote to heap-allocated reference cells + +type cenv = + { g: TcGlobals; + amap: Import.ImportMap } + +/// Find all the mutable locals that escape a method, function or lambda expression +let DecideEscapes syntacticArgs body = + let cantBeFree v = + let passedIn = ListSet.contains valEq v syntacticArgs + not passedIn && (v.IsMutable && v.ValReprInfo.IsNone) + + let frees = freeInExpr CollectLocals body + 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 = + match expr with + | Expr.Lambda _ + | Expr.TyLambda _ -> + let _tps,ctorThisValOpt,baseValOpt,vsl,body,_bodyty = destTopLambda cenv.g cenv.amap topValInfo (expr, ety) + let snoc = fun x y -> y :: x + let args = List.concat vsl + let args = Option.fold snoc args baseValOpt + let syntacticArgs = Option.fold snoc args ctorThisValOpt + + let z = Zset.union z (DecideEscapes syntacticArgs body) + let z = match exprF with Some f -> f z body | None -> z + z + | _ -> z + +///Special cases where representation uses Lambda. +let DecideExprOp exprF z (op,tyargs,args) = + (* Special cases *) + match op,tyargs,args with + // Handle these as special cases since mutables are allowed inside their bodies + | TOp.While _,_,[Expr.Lambda(_,_,_,[_],e1,_,_);Expr.Lambda(_,_,_,[_],e2,_,_)] -> + Some (exprF (exprF z e1) e2) + + | TOp.TryFinally _,[_],[Expr.Lambda(_,_,_,[_],e1,_,_); Expr.Lambda(_,_,_,[_],e2,_,_)] -> + Some (exprF (exprF z e1) e2) + + | TOp.For(_),_,[Expr.Lambda(_,_,_,[_],e1,_,_);Expr.Lambda(_,_,_,[_],e2,_,_);Expr.Lambda(_,_,_,[_],e3,_,_)] -> + Some (exprF (exprF (exprF z e1) e2) e3) + + | TOp.TryCatch _,[_],[Expr.Lambda(_,_,_,[_],e1,_,_); Expr.Lambda(_,_,_,[_],_e2,_,_); Expr.Lambda(_,_,_,[_],e3,_,_)] -> + Some (exprF (exprF (exprF z e1) _e2) e3) + // In Check code it said + // e2; -- don't check filter body - duplicates logic in 'catch' body + // Is that true for this code too? + | _ -> None + + +/// Find all the mutable locals that escape a lambda expression or object expression +let DecideExpr cenv exprF z expr = + match expr with + | Expr.Lambda(_,_ctorThisValOpt,_baseValOpt,argvs,_,m,rty) -> + let topValInfo = ValReprInfo ([],[argvs |> List.map (fun _ -> ValReprInfo.unnamedTopArg1)],ValReprInfo.unnamedRetVal) + let ty = mkMultiLambdaTy m argvs rty + let z = DecideLambda (Some exprF) cenv topValInfo expr ty z + Some z + + | Expr.TyLambda(_,tps,_,_m,rty) -> + let topValInfo = ValReprInfo (ValReprInfo.InferTyparInfo tps,[],ValReprInfo.unnamedRetVal) + let ty = tryMkForallTy tps rty + let z = DecideLambda (Some exprF) cenv topValInfo expr ty z + Some z + + | Expr.Obj (_,_,baseValOpt,superInitCall,overrides,iimpls,_m) -> + let CheckMethod z (TObjExprMethod(_,_attribs,_tps,vs,body,_m)) = + let vs = List.concat vs + let syntacticArgs = (match baseValOpt with Some x -> x:: vs | None -> vs) + let z = Zset.union z (DecideEscapes syntacticArgs body) + exprF z body + + let CheckMethods z l = (z,l) ||> List.fold CheckMethod + + let CheckInterfaceImpl z (_ty,overrides) = CheckMethods z overrides + + let z = exprF z superInitCall + let z = CheckMethods z overrides + let z = (z,iimpls) ||> List.fold CheckInterfaceImpl + Some z + + | Expr.Op (c,tyargs,args,_m) -> + DecideExprOp exprF z (c,tyargs,args) + + | _ -> None + +/// Find all the mutable locals that escape a binding +let DecideBinding cenv z (TBind(v,expr,_m) as bind) = + let topValInfo = match bind.Var.ValReprInfo with Some info -> info | _ -> ValReprInfo.emptyValData + DecideLambda None cenv topValInfo expr v.Type z + +/// Find all the mutable locals that escape a set of bindings +let DecideBindings cenv z binds = (z,binds) ||> List.fold (DecideBinding cenv) + +/// Find all the mutable locals to promote to reference cells in an implementation file +let DecideImplFile g amap implFile = + + let cenv = { g = g; amap = amap } + + let folder = + {ExprFolder0 with + nonRecBindingsIntercept = DecideBinding cenv + recBindingsIntercept = DecideBindings cenv + exprIntercept = DecideExpr cenv + } + + let z = FoldImplFile folder emptyFreeLocals implFile + + z + + +//---------------------------------------------------------------------------- +// Apply the transform + +/// Rewrite fetches, stores and address-of expressions for mutable locals which we are transforming +let TransformExpr g (nvs: ValMap<_>) exprF expr = + + match expr with + // Rewrite uses of mutable values + | Expr.Val (ValDeref(v),_,m) when nvs.ContainsVal v -> + + let _nv,nve = nvs.[v] + Some (mkRefCellGet g m v.Type nve) + + // Rewrite assignments to mutable values + | Expr.Op(TOp.LValueOp (LSet, ValDeref(v)) ,[],[arg],m) when nvs.ContainsVal v -> + + let _nv,nve = nvs.[v] + let arg = exprF arg + Some (mkRefCellSet g m v.Type nve arg) + + // Rewrite taking the address of mutable values + | Expr.Op(TOp.LValueOp (LGetAddr,ValDeref(v)),[],[] ,m) when nvs.ContainsVal v -> + let _nv,nve = nvs.[v] + Some (mkRecdFieldGetAddrViaExprAddr (nve,mkRefCellContentsRef g,[v.Type],m)) + + | _ -> None + + +/// Rewrite bindings for mutable locals which we are transforming +let TransformBinding g (nvs: ValMap<_>) exprF (TBind(v,expr,m)) = + if nvs.ContainsVal v then + let nv,_nve = nvs.[v] + let exprRange = expr.Range + let expr = exprF expr + Some(TBind(nv, mkRefCell g exprRange v.Type expr,m)) + else + None + +/// Rewrite mutable locals to reference cells across an entire implementation file +let TransformImplFile g amap implFile = + let fvs = DecideImplFile g amap implFile + if Zset.isEmpty fvs then + implFile + else + for fv in fvs do + warning (Error(FSComp.SR.abImplicitHeapAllocation(fv.DisplayName),fv.Range)) + + let nvs = + [ for fv in fvs do + let nty = mkRefCellTy g fv.Type + let nv, nve = + if fv.IsCompilerGenerated then mkCompGenLocal fv.Range fv.LogicalName nty + else mkLocal fv.Range fv.LogicalName nty + yield (fv, (nv, nve)) ] + |> ValMap.OfList + + implFile |> + RewriteImplFile { PreIntercept = Some(TransformExpr g nvs) + PreInterceptBinding = Some(TransformBinding g nvs) + PostTransform= (fun _ -> None) + IsUnderQuotations=false } + + diff --git a/src/fsharp/check.fsi b/src/fsharp/check.fsi deleted file mode 100644 index b0c3ac8cf0d..00000000000 --- a/src/fsharp/check.fsi +++ /dev/null @@ -1,9 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -module internal Microsoft.FSharp.Compiler.PostTypecheckSemanticChecks - -open Internal.Utilities -open Microsoft.FSharp.Compiler - -val testFlagMemberBody : bool ref -val CheckTopImpl : Env.TcGlobals * Import.ImportMap * bool * Infos.InfoReader * Tast.CompilationPath list * Tast.CcuThunk * Tastops.DisplayEnv * Tast.ModuleOrNamespaceExprWithSig * Tast.Attribs * bool -> bool diff --git a/src/fsharp/creflect.fsi b/src/fsharp/creflect.fsi deleted file mode 100644 index 178c2e497a4..00000000000 --- a/src/fsharp/creflect.fsi +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -module internal Microsoft.FSharp.Compiler.QuotationTranslator -open Microsoft.FSharp.Compiler - -// Convert quoted TAST data structures to structures ready for pickling - -open Microsoft.FSharp.Compiler.Tast -open Microsoft.FSharp.Compiler.Tastops - -[] -type QuotationTranslationEnv = - static member Empty : QuotationTranslationEnv - member BindTypars : Typars -> QuotationTranslationEnv - -exception InvalidQuotedTerm of exn -exception IgnoringPartOfQuotedTermWarning of string * Range.range - -[] -type IsReflectedDefinition = -| Yes -| No -val ConvExprPublic : Env.TcGlobals * Import.ImportMap * CcuThunk * IsReflectedDefinition -> QuotationTranslationEnv -> Expr -> TType list * Expr list * QuotationPickler.ExprData -val ConvMethodBase : Env.TcGlobals * Import.ImportMap * CcuThunk -> QuotationTranslationEnv -> string * Val -> QuotationPickler.MethodBaseData - - diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index 7fc097a5249..5240c157a6a 100644 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -12,7 +12,11 @@ module internal Microsoft.FSharp.Compiler.Driver +open System +open System.Diagnostics +open System.Globalization open System.IO +open System.Threading open System.Reflection open System.Collections.Generic open System.Runtime.CompilerServices @@ -29,13 +33,10 @@ open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.AbstractIL.IL #if NO_COMPILER_BACKEND #else -open Microsoft.FSharp.Compiler.Ilxgen +open Microsoft.FSharp.Compiler.IlxGen #endif open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger -#if SQM_SUPPORT -open Microsoft.FSharp.Compiler.SqmLogger -#endif open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.TypeChecker open Microsoft.FSharp.Compiler.Infos @@ -43,143 +44,80 @@ open Microsoft.FSharp.Compiler.Infos.AccessibilityLogic open Microsoft.FSharp.Compiler.Infos.AttributeChecking open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops -open Microsoft.FSharp.Compiler.Opt -open Microsoft.FSharp.Compiler.Env -open Microsoft.FSharp.Compiler.Build +open Microsoft.FSharp.Compiler.Optimizer +open Microsoft.FSharp.Compiler.TcGlobals +open Microsoft.FSharp.Compiler.CompileOps open Microsoft.FSharp.Compiler.Lib -open Microsoft.FSharp.Compiler.Fscopts +open Microsoft.FSharp.Compiler.CompileOptions open Microsoft.FSharp.Compiler.DiagnosticMessage #if EXTENSIONTYPING open Microsoft.FSharp.Compiler.ExtensionTyping #endif -#nowarn "45" // This method will be made public in the underlying IL because it may implement an interface or override a method +//---------------------------------------------------------------------------- +// No SQM logging support +//---------------------------------------------------------------------------- -/////////////////////////////////////////////////////////////////////////////////////////////////////////////// -// This code has logic for a prefix of the compile that is also used by the project system to do the front-end -// logic that starts at command-line arguments and gets as far as importing all references (used for deciding -// to pop up the type provider security dialog). -/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +#if SQM_SUPPORT +open Microsoft.FSharp.Compiler.SqmLogger +#else +let SqmLoggerWithConfigBuilder _tcConfigB _errorNumbers _warningNumbers = () +let SqmLoggerWithConfig _tcConfig _errorNumbers _warningNumbers = () +#endif + +#nowarn "45" // This method will be made public in the underlying IL because it may implement an interface or override a method //---------------------------------------------------------------------------- // Reporting - warnings, errors //---------------------------------------------------------------------------- -type ErrorLoggerThatAccumulatesErrors private (implicitIncludeDir, showFullPaths, flatErrors, errorStyle, globalWarnLevel, specificWarnOn, specificWarnOff, specificWarnAsError, specificWarnAsWarn, globalWarnAsError) = - inherit ErrorLogger("ErrorLoggerThatAccumulatesErrors") - let messages = ResizeArray() - let mutable errorsCount = 0 - new(tcConfigB : TcConfigBuilder) = - ErrorLoggerThatAccumulatesErrors( - tcConfigB.implicitIncludeDir, - tcConfigB.showFullPaths, - tcConfigB.flatErrors, - tcConfigB.errorStyle, - tcConfigB.globalWarnLevel, - tcConfigB.specificWarnOn, - tcConfigB.specificWarnOff, - tcConfigB.specificWarnAsError, - tcConfigB.specificWarnAsWarn, - tcConfigB.globalWarnAsError - ) - new(tcConfig : TcConfig) = - ErrorLoggerThatAccumulatesErrors( - tcConfig.implicitIncludeDir, - tcConfig.showFullPaths, - tcConfig.flatErrors, - tcConfig.errorStyle, - tcConfig.globalWarnLevel, - tcConfig.specificWarnOn, - tcConfig.specificWarnOff, - tcConfig.specificWarnAsError, - tcConfig.specificWarnAsWarn, - tcConfig.globalWarnAsError - ) - member this.ProcessMessage(err, isError) = - let writer = new System.IO.StringWriter() - - let writeError err = - writeViaBufferWithEnvironmentNewLines writer (OutputErrorOrWarning (implicitIncludeDir, showFullPaths, flatErrors, errorStyle, false)) err - - let isError = - if isError then - writeError err - true - else - if (ReportWarningAsError globalWarnLevel specificWarnOff specificWarnOn specificWarnAsError specificWarnAsWarn globalWarnAsError err) then - writeError err - true - elif ReportWarning globalWarnLevel specificWarnOff specificWarnOn err then - writeViaBufferWithEnvironmentNewLines writer (OutputErrorOrWarning (implicitIncludeDir, showFullPaths, flatErrors, errorStyle, true)) err - false - else - false // will not be used - let text = writer.ToString() - if text.Length <> 0 then Some (isError, text) else None - - member this.GetMessages() = List.ofSeq messages - override this.ErrorSinkImpl(err) = - errorsCount <- errorsCount + 1 - messages.Add(this.ProcessMessage(err, true).Value) - override this.WarnSinkImpl(warn) = - match this.ProcessMessage (warn, false) with - | Some ((isError, _) as res) -> - if isError then errorsCount <- errorsCount + 1 - messages.Add(res) - | _ -> () - - override this.ErrorCount = errorsCount - [] -type ErrorLoggerThatQuitsAfterMaxErrors(tcConfigB:TcConfigBuilder, exiter : Exiter, caption) = +type ErrorLoggerThatQuitsAfterMaxErrors(tcConfigB: TcConfigBuilder, exiter: Exiter, caption) = inherit ErrorLogger(caption) - let errors = ref 0 - let errorNumbers = ref [] - let warningNumbers = ref [] + let mutable errors = 0 + let mutable errorNumbers = [] + let mutable warningNumbers = [] abstract HandleIssue : tcConfigB : TcConfigBuilder * error : PhasedError * isWarning : bool -> unit abstract HandleTooManyErrors : text : string -> unit - override x.ErrorCount = !errors + override x.ErrorCount = errors override x.ErrorSinkImpl(err) = - if !errors >= tcConfigB.maxErrors then - x.HandleTooManyErrors(FSComp.SR.fscTooManyErrors()) -#if SQM_SUPPORT - SqmLoggerWithConfigBuilder tcConfigB !errorNumbers !warningNumbers -#endif - exiter.Exit 1 + if errors >= tcConfigB.maxErrors then + x.HandleTooManyErrors(FSComp.SR.fscTooManyErrors()) + SqmLoggerWithConfigBuilder tcConfigB errorNumbers warningNumbers + exiter.Exit 1 - x.HandleIssue(tcConfigB, err, false) + x.HandleIssue(tcConfigB, err, false) - incr errors - errorNumbers := (GetErrorNumber err) :: !errorNumbers + errors <- errors + 1 + errorNumbers <- (GetErrorNumber err) :: errorNumbers - match err.Exception with - | InternalError _ - | Failure _ - | :? KeyNotFoundException -> - match tcConfigB.simulateException with - | Some _ -> () // Don't show an assert for simulateException case so that unittests can run without an assert dialog. - | None -> System.Diagnostics.Debug.Assert(false,sprintf "Bug seen in compiler: %s" (err.ToString())) - | _ -> - () + match err.Exception with + | InternalError _ + | Failure _ + | :? KeyNotFoundException -> + match tcConfigB.simulateException with + | Some _ -> () // Don't show an assert for simulateException case so that unittests can run without an assert dialog. + | None -> Debug.Assert(false,sprintf "Bug seen in compiler: %s" (err.ToString())) + | _ -> + () override x.WarnSinkImpl(err) = - if (ReportWarningAsError tcConfigB.globalWarnLevel tcConfigB.specificWarnOff tcConfigB.specificWarnOn tcConfigB.specificWarnAsError tcConfigB.specificWarnAsWarn tcConfigB.globalWarnAsError err) then + if ReportWarningAsError (tcConfigB.globalWarnLevel, tcConfigB.specificWarnOff, tcConfigB.specificWarnOn, tcConfigB.specificWarnAsError, tcConfigB.specificWarnAsWarn, tcConfigB.globalWarnAsError) err then x.ErrorSink(err) - elif ReportWarning tcConfigB.globalWarnLevel tcConfigB.specificWarnOff tcConfigB.specificWarnOn err then + elif ReportWarning (tcConfigB.globalWarnLevel, tcConfigB.specificWarnOff, tcConfigB.specificWarnOn) err then x.HandleIssue(tcConfigB, err, true) - warningNumbers := (GetErrorNumber err) :: !warningNumbers + warningNumbers <- (GetErrorNumber err) :: warningNumbers - override x.WarningNumbers = !warningNumbers - override x.ErrorNumbers = !errorNumbers + override x.WarningNumbers = warningNumbers + override x.ErrorNumbers = errorNumbers /// Create an error logger that counts and prints errors let ConsoleErrorLoggerThatQuitsAfterMaxErrors (tcConfigB:TcConfigBuilder, exiter : Exiter) : ErrorLogger = - upcast { - new ErrorLoggerThatQuitsAfterMaxErrors(tcConfigB, exiter, "ConsoleErrorLoggerThatQuitsAfterMaxErrors") with + { new ErrorLoggerThatQuitsAfterMaxErrors(tcConfigB, exiter, "ConsoleErrorLoggerThatQuitsAfterMaxErrors") with member this.HandleTooManyErrors(text : string) = DoWithErrorColor true (fun () -> Printf.eprintfn "%s" text) @@ -188,37 +126,25 @@ let ConsoleErrorLoggerThatQuitsAfterMaxErrors (tcConfigB:TcConfigBuilder, exiter DoWithErrorColor isWarning (fun () -> (writeViaBufferWithEnvironmentNewLines stderr (OutputErrorOrWarning (tcConfigB.implicitIncludeDir,tcConfigB.showFullPaths,tcConfigB.flatErrors,tcConfigB.errorStyle,isWarning)) err; stderr.WriteLine()) - ); - } - -// val TypeCheck : TcConfig * TcImports * TcGlobals * ErrorLogger * string * NiceNameGenerator * TypeChecker.TcEnv * Input list * Exiter -> -// TcState * TypeChecker.TopAttribs * Tast.TypedAssembly * TypeChecker.TcEnv -let TypeCheck (tcConfig,tcImports,tcGlobals,errorLogger:ErrorLogger,assemblyName,niceNameGen,tcEnv0,inputs, exiter : Exiter) = - try - if isNil inputs then error(Error(FSComp.SR.fscNoImplementationFiles(),Range.rangeStartup)) - let ccuName = assemblyName - let tcInitialState = TypecheckInitialState (rangeStartup,ccuName,tcConfig,tcGlobals,tcImports,niceNameGen,tcEnv0) - TypecheckClosedInputSet ((fun () -> errorLogger.ErrorCount > 0),tcConfig,tcImports,tcGlobals,None,tcInitialState,inputs) - with e -> - errorRecovery e rangeStartup -#if SQM_SUPPORT - SqmLoggerWithConfig tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers -#endif - exiter.Exit 1 + ) + } :> _ /// This error logger delays the messages it recieves. At the end, call ForwardDelayedErrorsAndWarnings /// to send the held messages. -type DelayAndForwardErrorLogger(exiter : Exiter, errorLoggerProvider : ErrorLoggerProvider) = +type DelayAndForwardErrorLogger(exiter: Exiter, errorLoggerProvider: ErrorLoggerProvider) = inherit ErrorLogger("DelayAndForwardErrorLogger") - let mapToErrorNumber items = - items |> Seq.map (fun (err,_) -> GetErrorNumber err) |> Seq.toList + let delayed = new ResizeArray<_>() - let errors = ref 0 + let mutable errors = 0 + override x.ErrorSinkImpl(e) = - errors := !errors + 1 + errors <- errors + 1 delayed.Add (e,true) + override x.ErrorCount = delayed |> Seq.filter snd |> Seq.length + override x.WarnSinkImpl(e) = delayed.Add(e,false) + member x.ForwardDelayedErrorsAndWarnings(errorLogger:ErrorLogger) = // Eagerly grab all the errors and warnings from the mutable collection let errors = delayed |> Seq.toList @@ -227,18 +153,60 @@ type DelayAndForwardErrorLogger(exiter : Exiter, errorLoggerProvider : ErrorLogg if isError then errorLogger.ErrorSink(e) else errorLogger.WarnSink(e) // Clear errors just reported. Keep errors count. delayed.Clear() + member x.ForwardDelayedErrorsAndWarnings(tcConfigB:TcConfigBuilder) = let errorLogger = errorLoggerProvider.CreateErrorLoggerThatQuitsAfterMaxErrors(tcConfigB, exiter) x.ForwardDelayedErrorsAndWarnings(errorLogger) - member x.FullErrorCount = !errors - override x.WarningNumbers = delayed |> Seq.filter(fun (_, flag) -> flag = false) |> mapToErrorNumber - override x.ErrorNumbers = delayed |> Seq.filter(fun (_, flag) -> flag = true) |> mapToErrorNumber + + member x.FullErrorCount = errors + + override x.WarningNumbers = delayed |> Seq.filter (snd >> not) |> Seq.map (fst >> GetErrorNumber) |> Seq.toList + override x.ErrorNumbers = delayed |> Seq.filter snd |> Seq.map (fst >> GetErrorNumber) |> Seq.toList and [] ErrorLoggerProvider() = member this.CreateDelayAndForwardLogger(exiter) = DelayAndForwardErrorLogger(exiter, this) abstract CreateErrorLoggerThatQuitsAfterMaxErrors : tcConfigBuilder : TcConfigBuilder * exiter : Exiter -> ErrorLogger +let AbortOnError (errorLogger:ErrorLogger, _tcConfig:TcConfig, exiter : Exiter) = + if errorLogger.ErrorCount > 0 then + SqmLoggerWithConfig _tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers + exiter.Exit 1 + +type DefaultLoggerProvider() = + inherit ErrorLoggerProvider() + override this.CreateErrorLoggerThatQuitsAfterMaxErrors(tcConfigBuilder, exiter) = ConsoleErrorLoggerThatQuitsAfterMaxErrors(tcConfigBuilder, exiter) + +//---------------------------------------------------------------------------- +// Cleaning up + +/// Track a set of resources to cleanup +type DisposablesTracker() = + let items = Stack() + member this.Register(i) = items.Push i + interface IDisposable with + member this.Dispose() = + let l = List.ofSeq items + items.Clear() + for i in l do + try i.Dispose() with _ -> () + + +//---------------------------------------------------------------------------- + +/// Type checking a set of inputs +let TypeCheck (tcConfig, tcImports, tcGlobals, errorLogger:ErrorLogger, assemblyName, niceNameGen, tcEnv0, inputs, exiter: Exiter) = + 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 ((fun () -> errorLogger.ErrorCount > 0),tcConfig,tcImports,tcGlobals,None,tcInitialState,inputs) + with e -> + errorRecovery e rangeStartup + SqmLoggerWithConfig tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers + exiter.Exit 1 + + /// Check for .fsx and, if present, compute the load closure for of #loaded files. let AdjustForScriptCompile(tcConfigB:TcConfigBuilder,commandLineSourceFiles,lexResourceManager) = @@ -278,54 +246,39 @@ let AdjustForScriptCompile(tcConfigB:TcConfigBuilder,commandLineSourceFiles,lexR List.rev !allSources -let abortOnError (errorLogger:ErrorLogger, _tcConfig:TcConfig, exiter : Exiter) = - if errorLogger.ErrorCount > 0 then -#if SQM_SUPPORT - SqmLoggerWithConfig _tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers -#endif - exiter.Exit 1 -type DelayedDisposables() = - let items = Stack() - member this.Register(i) = items.Push i - interface System.IDisposable with - member this.Dispose() = - let l = List.ofSeq items - items.Clear() - for i in l do - try i.Dispose() with _ -> () - -type DefaultLoggerProvider() = - inherit ErrorLoggerProvider() - override this.CreateErrorLoggerThatQuitsAfterMaxErrors(tcConfigBuilder, exiter) = ConsoleErrorLoggerThatQuitsAfterMaxErrors(tcConfigBuilder, exiter) +/////////////////////////////////////////////////////////////////////////////////////////////////////////////// +// This code has logic for a prefix of the compile that is also used by the project system to do the front-end +// logic that starts at command-line arguments and gets as far as importing all references (used for deciding +// to pop up the type provider security dialog). +// // The project system needs to be able to somehow crack open assemblies to look for type providers in order to pop up the security dialog when necessary when a user does 'Build'. // Rather than have the PS re-code that logic, it re-uses the existing code in the very front end of the compiler that parses the command-line and imports the referenced assemblies. // This code used to be in fsc.exe. The PS only references FSharp.LanguageService.Compiler, so this code moved from fsc.exe to FS.C.S.dll so that the PS can re-use it. // A great deal of the logic of this function is repeated in fsi.fs, so maybe should refactor fsi.fs to call into this as well. -let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : (string->unit) option, - argv : string[], - defaultFSharpBinariesDir : string, - directoryBuildingFrom : string, - lcidFromCodePage : int option, - setProcessThreadLocals : TcConfigBuilder -> unit, - displayBannerIfNeeded : TcConfigBuilder -> unit, - optimizeForMemory : bool, - exiter : Exiter, - errorLoggerProvider : ErrorLoggerProvider, - disposables : DelayedDisposables) - : TcGlobals * TcImports * TcImports * Tast.CcuThunk * Tast.TypedAssembly * TypeChecker.TopAttribs * TcConfig * string * string option * string * ErrorLogger - = +let GetTcImportsFromCommandLine + (displayPSTypeProviderSecurityDialogBlockingUI : (string->unit) option, + argv : string[], + defaultFSharpBinariesDir : string, + directoryBuildingFrom : string, + lcidFromCodePage : int option, + setProcessThreadLocals : TcConfigBuilder -> unit, + displayBannerIfNeeded : TcConfigBuilder -> unit, + optimizeForMemory : bool, + exiter : Exiter, + errorLoggerProvider : ErrorLoggerProvider, + disposables : DisposablesTracker) = - let tcConfigB = Build.TcConfigBuilder.CreateNew(defaultFSharpBinariesDir, optimizeForMemory, directoryBuildingFrom, isInteractive=false, isInvalidationSupported=false) + let tcConfigB = TcConfigBuilder.CreateNew(defaultFSharpBinariesDir, optimizeForMemory, directoryBuildingFrom, isInteractive=false, isInvalidationSupported=false) // Preset: --optimize+ -g --tailcalls+ (see 4505) - SetOptimizeSwitch tcConfigB On - SetDebugSwitch tcConfigB None Off - SetTailcallSwitch tcConfigB On + SetOptimizeSwitch tcConfigB OptionSwitch.On + SetDebugSwitch tcConfigB None OptionSwitch.Off + 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)// DelayAndForwardErrorLogger(exiter) + let delayForFlagsLogger = errorLoggerProvider.CreateDelayAndForwardLogger(exiter) let _unwindEL_1 = PushErrorLoggerPhaseUntilUnwind (fun _ -> delayForFlagsLogger) // Share intern'd strings across all lexing/parsing @@ -345,10 +298,10 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : tcConfigB.AddEmbeddedResource name else inputFilesRef := name :: !inputFilesRef - let abbrevArgs = abbrevFlagSet tcConfigB true + let abbrevArgs = GetAbbrevFlagSet tcConfigB true // This is where flags are interpreted by the command line fsc.exe. - ParseCompilerOptions collect (GetCoreFscCompilerOptions tcConfigB) (List.tail (PostProcessCompilerArgs abbrevArgs argv)) + ParseCompilerOptions (collect, GetCoreFscCompilerOptions tcConfigB, List.tail (PostProcessCompilerArgs abbrevArgs argv)) let inputFiles = List.rev !inputFilesRef // Check if we have a codepage from the console @@ -358,7 +311,7 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : setProcessThreadLocals(tcConfigB) - (* step - get dll references *) + // Get DLL references let dllFiles,sourceFiles = List.partition Filename.isDll inputFiles match dllFiles with | [] -> () @@ -369,12 +322,9 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : let sourceFiles = AdjustForScriptCompile(tcConfigB,sourceFiles,lexResourceManager) sourceFiles - with - e -> + with e -> errorRecovery e rangeStartup -#if SQM_SUPPORT SqmLoggerWithConfigBuilder tcConfigB delayForFlagsLogger.ErrorNumbers delayForFlagsLogger.WarningNumbers -#endif delayForFlagsLogger.ForwardDelayedErrorsAndWarnings(tcConfigB) exiter.Exit 1 @@ -388,17 +338,13 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : tcConfigB.DecideNames sourceFiles with e -> errorRecovery e rangeStartup -#if SQM_SUPPORT SqmLoggerWithConfigBuilder tcConfigB delayForFlagsLogger.ErrorNumbers delayForFlagsLogger.WarningNumbers -#endif delayForFlagsLogger.ForwardDelayedErrorsAndWarnings(tcConfigB) exiter.Exit 1 // DecideNames may give "no inputs" error. Abort on error at this point. bug://3911 if not tcConfigB.continueAfterParseFailure && delayForFlagsLogger.FullErrorCount > 0 then -#if SQM_SUPPORT SqmLoggerWithConfigBuilder tcConfigB delayForFlagsLogger.ErrorNumbers delayForFlagsLogger.WarningNumbers -#endif delayForFlagsLogger.ForwardDelayedErrorsAndWarnings(tcConfigB) exiter.Exit 1 @@ -407,9 +353,7 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : try TcConfig.Create(tcConfigB,validate=false) with e -> -#if SQM_SUPPORT SqmLoggerWithConfigBuilder tcConfigB delayForFlagsLogger.ErrorNumbers delayForFlagsLogger.WarningNumbers -#endif delayForFlagsLogger.ForwardDelayedErrorsAndWarnings(tcConfigB) exiter.Exit 1 @@ -423,7 +367,7 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : // step - decideNames if not tcConfigB.continueAfterParseFailure then - abortOnError(errorLogger, tcConfig, exiter) + AbortOnError(errorLogger, tcConfig, exiter) let tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig = @@ -441,7 +385,6 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : else ReportTime tcConfig "Import mscorlib and FSharp.Core.dll" - ReportTime tcConfig "Import system references" let foundationalTcConfigP = TcConfigProvider.Constant(tcConfig) let sysRes,otherRes,knownUnresolved = TcAssemblyResolutions.SplitNonFoundationalResolutions(tcConfig) let tcGlobals,frameworkTcImports = TcImports.BuildFrameworkTcImports (foundationalTcConfigP, sysRes, otherRes) @@ -452,7 +395,7 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : // step - parse sourceFiles ReportTime tcConfig "Parse inputs" use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Parse) - let inputs : (ParsedInput * string) list = + let inputs = try sourceFiles |> tcConfig.ComputeCanContainEntryPoint @@ -466,14 +409,12 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : ) with e -> errorRecoveryNoRange e -#if SQM_SUPPORT SqmLoggerWithConfig tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers -#endif exiter.Exit 1 if tcConfig.parseOnly then exiter.Exit 0 if not tcConfig.continueAfterParseFailure then - abortOnError(errorLogger, tcConfig, exiter) + AbortOnError(errorLogger, tcConfig, exiter) if tcConfig.printAst then inputs |> List.iter (fun (input,_filename) -> printf "AST:\n"; printfn "%+A" input; printf "\n") @@ -490,13 +431,13 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : disposables.Register tcImports if not tcConfig.continueAfterParseFailure then - abortOnError(errorLogger, tcConfig, exiter) + AbortOnError(errorLogger, tcConfig, exiter) if tcConfig.importAllReferencesOnly then exiter.Exit 0 ReportTime tcConfig "Typecheck" use unwindParsePhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.TypeCheck) - let tcEnv0 = GetInitialTypecheckerEnv (Some assemblyName) rangeStartup tcConfig tcImports tcGlobals + let tcEnv0 = GetInitialTcEnv (Some assemblyName, rangeStartup, tcConfig, tcImports, tcGlobals) // typecheck let inputs : ParsedInput list = inputs |> List.map fst @@ -504,7 +445,7 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : TypeCheck(tcConfig,tcImports,tcGlobals,errorLogger,assemblyName,NiceNameGenerator(),tcEnv0,inputs,exiter) let generatedCcu = tcState.Ccu - abortOnError(errorLogger, tcConfig, exiter) + AbortOnError(errorLogger, tcConfig, exiter) ReportTime tcConfig "Typechecked" (tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig) @@ -512,33 +453,37 @@ let getTcImportsFromCommandLine(displayPSTypeProviderSecurityDialogBlockingUI : tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger // only called from the project system, as a way to run the front end of the compiler far enough to determine if we need to pop up the dialog (and do so if necessary) -let runFromCommandLineToImportingAssemblies(displayPSTypeProviderSecurityDialogBlockingUI : (string -> unit), - argv : string[], - defaultFSharpBinariesDir : string, - directoryBuildingFrom : string, - exiter : Exiter) = - - use d = new DelayedDisposables() // ensure that any resources that can be allocated in getTcImportsFromCommandLine will be correctly disposed - - let tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger = - getTcImportsFromCommandLine(Some displayPSTypeProviderSecurityDialogBlockingUI, argv, defaultFSharpBinariesDir, directoryBuildingFrom, None, (fun _ -> ()), - (fun tcConfigB -> - // (kind of abusing this lambda for an unintended purpose, but this is a convenient and correctly-timed place to poke the tcConfigB) - tcConfigB.importAllReferencesOnly <- true // stop after importing assemblies (do not typecheck, we don't need typechecking) - // for flags below, see IncrementalBuilder.fs:CreateBackgroundBuilderForProjectOptions, as there are many similarities, as these are the two places that we create this from VS code-paths - tcConfigB.openBinariesInMemory <- true // uses more memory but means we don't take read-exclusions on the DLLs we reference (important for VS code path) - tcConfigB.openDebugInformationForLaterStaticLinking <- false // Never open PDB files for the PS, even if --standalone is specified - if tcConfigB.framework then - System.Diagnostics.Debug.Assert(false, "Project system requires --noframework flag") - tcConfigB.framework<-false - ), - true, // optimizeForMemory - want small memory footprint in VS - exiter, - DefaultLoggerProvider(), // this function always use default set of loggers - d) - - // we don't care about the result, we just called 'getTcImportsFromCommandLine' to have the effect of popping up the dialog if the TP is unknown - ignore(tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger) +let ProcessCommandLineArgsAndImportAssemblies + (displayPSTypeProviderSecurityDialogBlockingUI : (string -> unit), + argv : string[], + defaultFSharpBinariesDir : string, + directoryBuildingFrom : string, + exiter : Exiter) = + + use disposables = new DisposablesTracker() // ensure that any resources that can be allocated in GetTcImportsFromCommandLine will be correctly disposed + + // We don't care about the result, we just called 'GetTcImportsFromCommandLine' to have the effect of popping up the dialog if the TP is unknown + GetTcImportsFromCommandLine + (Some displayPSTypeProviderSecurityDialogBlockingUI, + argv, + defaultFSharpBinariesDir, + directoryBuildingFrom, + None, + (fun _ -> ()), // setProcessThreadLocals + (fun tcConfigB -> + // (kind of abusing this lambda for an unintended purpose, but this is a convenient and correctly-timed place to poke the tcConfigB) + tcConfigB.importAllReferencesOnly <- true // stop after importing assemblies (do not typecheck, we don't need typechecking) + // for flags below, see IncrementalBuilder.fs:CreateBackgroundBuilderForProjectOptions, as there are many similarities, as these are the two places that we create this from VS code-paths + tcConfigB.openBinariesInMemory <- true // uses more memory but means we don't take read-exclusions on the DLLs we reference (important for VS code path) + tcConfigB.openDebugInformationForLaterStaticLinking <- false // Never open PDB files for the PS, even if --standalone is specified + if tcConfigB.framework then + Debug.Assert(false, "Project system requires --noframework flag") + tcConfigB.framework<-false), + true, // optimizeForMemory - want small memory footprint in VS + exiter, + DefaultLoggerProvider(), // this function always use default set of loggers + disposables) + |> ignore #if NO_COMPILER_BACKEND @@ -548,33 +493,33 @@ let runFromCommandLineToImportingAssemblies(displayPSTypeProviderSecurityDialogB // Code from here on down is just used by fsc.exe /////////////////////////////////////////////////////////////////////////////////////////////////////////////// -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); ] +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) ] -module InterfaceFileWriter = let WriteInterfaceFile (tcGlobals, tcConfig:TcConfig, infoReader, typedAssembly) = let (TAssembly declaredImpls) = typedAssembly /// Use a UTF-8 Encoding with no Byte Order Mark let os = - if tcConfig.printSignatureFile="" then System.Console.Out + if tcConfig.printSignatureFile="" then Console.Out else (File.CreateText tcConfig.printSignatureFile :> TextWriter) - if tcConfig.printSignatureFile <> "" && not (List.exists (Filename.checkSuffix tcConfig.printSignatureFile) lightSyntaxDefaultExtensions) then + if tcConfig.printSignatureFile <> "" && not (List.exists (Filename.checkSuffix tcConfig.printSignatureFile) FSharpLightSyntaxFileSuffixes) then fprintfn os "#light" fprintfn os "" @@ -591,7 +536,7 @@ module XmlDocWriter = let getDoc xmlDoc = match XmlDoc.Process xmlDoc with | XmlDoc [| |] -> "" - | XmlDoc strs -> strs |> Array.toList |> String.concat System.Environment.NewLine + | XmlDoc strs -> strs |> Array.toList |> String.concat Environment.NewLine let hasDoc xmlDoc = // No need to process the xml doc - just need to know if there's anything there @@ -648,8 +593,9 @@ module XmlDocWriter = (* the xmlDocSigOf* functions encode type into string to be used in "id" *) let members = ref [] let addMember id xmlDoc = - let doc = getDoc xmlDoc - members := (id,doc) :: !members + if hasDoc xmlDoc then + let doc = getDoc xmlDoc + 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 @@ -698,18 +644,13 @@ module XmlDocWriter = // cmd line - option state //---------------------------------------------------------------------------- -let getModuleFileName() = - Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, - System.AppDomain.CurrentDomain.FriendlyName) - -let defaultFSharpBinariesDir = Filename.directoryName (getModuleFileName()) - +let defaultFSharpBinariesDir = + let exeName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, AppDomain.CurrentDomain.FriendlyName) + Filename.directoryName exeName let outpath outfile extn = String.concat "." (["out"; Filename.chopExtension (Filename.fileNameOfPath outfile); extn]) - - let GenerateInterfaceData(tcConfig:TcConfig) = (* (tcConfig.target = Dll || tcConfig.target = Module) && *) not tcConfig.standalone && not tcConfig.noSignatureData @@ -743,9 +684,7 @@ let EncodeInterfaceData(tcConfig:TcConfig,tcGlobals,exportRemapping,_errorLogger [],[] with e -> errorRecoveryNoRange e -#if SQM_SUPPORT SqmLoggerWithConfig tcConfig _errorLogger.ErrorNumbers _errorLogger.WarningNumbers -#endif exiter.Exit 1 @@ -759,14 +698,14 @@ let GenerateOptimizationData(tcConfig) = let EncodeOptimizationData(tcGlobals,tcConfig,outfile,exportRemapping,data) = if GenerateOptimizationData tcConfig then - let data = map2Of2 (Opt.RemapLazyModulInfo tcGlobals exportRemapping) data + let data = map2Of2 (Optimizer.RemapOptimizationInfo tcGlobals exportRemapping) data if verbose then dprintn "Generating optimization data attribute..."; // REVIEW: need a better test for this let outFileNoExtension = Filename.chopExtension outfile let isCompilerServiceDll = outFileNoExtension.Contains("FSharp.LanguageService.Compiler") if tcConfig.useOptimizationDataFile || tcGlobals.compilingFslib || isCompilerServiceDll then let ccu,modulInfo = data - let bytes = Pickle.pickleObjWithDanglingCcus outfile tcGlobals ccu Opt.p_LazyModuleInfo modulInfo + let bytes = TastPickle.pickleObjWithDanglingCcus outfile tcGlobals ccu Optimizer.p_CcuOptimizationInfo modulInfo let optDataFileName = (Filename.chopExtension outfile)+".optdata" File.WriteAllBytes(optDataFileName,bytes); // As with the sigdata file, the optdata gets written to a file for FSharp.Core, FSharp.Compiler.Silverlight and FSharp.LanguageService.Compiler @@ -775,7 +714,7 @@ let EncodeOptimizationData(tcGlobals,tcConfig,outfile,exportRemapping,data) = else let (ccu, optData) = if tcConfig.onlyEssentialOptimizationData || tcConfig.useOptimizationDataFile - then map2Of2 Opt.AbstractLazyModulInfoToEssentials data + then map2Of2 Optimizer.AbstractOptimizationInfoToEssentials data else data [ WriteOptimizationData (tcGlobals, outfile, ccu, optData) ] else @@ -1006,23 +945,19 @@ module AttributeHelpers = | _ -> None -let injectedCompatTypes = set [ "System.Tuple`1"; - "System.Tuple`2" ; - "System.Tuple`3" ; - "System.Tuple`4"; - "System.Tuple`5"; - "System.Tuple`6"; - "System.Tuple`7"; - "System.Tuple`8"; - "System.ITuple"; - "System.Tuple"; - //"System.System_LazyDebugView`1"; - //"System.Threading.LazyExecutionMode"; - //"System.Threading.LazyInternalExceptionHolder"; - //"System.Threading.LazyBlock`1"; - "System.Collections.IStructuralComparable"; - "System.Collections.IStructuralEquatable"; - ] +let injectedCompatTypes = + set [ "System.Tuple`1" + "System.Tuple`2" + "System.Tuple`3" + "System.Tuple`4" + "System.Tuple`5" + "System.Tuple`6" + "System.Tuple`7" + "System.Tuple`8" + "System.ITuple" + "System.Tuple" + "System.Collections.IStructuralComparable" + "System.Collections.IStructuralEquatable" ] let typesForwardedToMscorlib = set [ "System.AggregateException"; @@ -1089,11 +1024,27 @@ module MainModuleBuilder = // Add the type forwarders to any .NET DLL post-.NET-2.0, to give binary compatibility let exportedTypesList = if (tcConfig.compilingFslib && tcConfig.compilingFslib40) then (List.append (createMscorlibExportList tcGlobals) (createSystemNumericsExportList tcGlobals)) else [] - mkILSimpleModule assemblyName (fsharpModuleName tcConfig.target assemblyName) (tcConfig.target = Dll || tcConfig.target = Module) tcConfig.subsystemVersion tcConfig.useHighEntropyVA ilTypeDefs hashAlg locale flags (mkILExportedTypes exportedTypesList) metadataVersion + mkILSimpleModule assemblyName (GetGeneratedILModuleName tcConfig.target assemblyName) (tcConfig.target = Dll || tcConfig.target = Module) tcConfig.subsystemVersion tcConfig.useHighEntropyVA ilTypeDefs hashAlg locale flags (mkILExportedTypes exportedTypesList) metadataVersion let disableJitOptimizations = not (tcConfig.optSettings.jitOpt()) + + let tcVersion = tcConfig.version.GetVersionInfo(tcConfig.implicitIncludeDir) + + let reflectedDefinitionAttrs, reflectedDefinitionResources = + codegenResults.quotationResourceInfo + |> List.map (fun (referencedTypeDefs, reflectedDefinitionBytes) -> + let reflectedDefinitionResourceName = QuotationPickler.SerializedReflectedDefinitionsResourceNameBase+"-"+assemblyName+"-"+string(newUnique())+"-"+string(hash reflectedDefinitionBytes) + let reflectedDefinitionAttr = mkCompilationMappingAttrForQuotationResource tcGlobals (reflectedDefinitionResourceName, referencedTypeDefs) + let reflectedDefinitionResource = + { Name=reflectedDefinitionResourceName; + Location = ILResourceLocation.Local (fun () -> reflectedDefinitionBytes); + Access= ILResourceAccess.Public; + CustomAttrs = emptyILCustomAttrs } + reflectedDefinitionAttr, reflectedDefinitionResource) + |> List.unzip + let manifestAttrs = - mkILCustomAttrs + mkILCustomAttrs [ if not tcConfig.internConstantStrings then yield mkILCustomAttribute tcGlobals.ilg (mkILTyRef (tcGlobals.ilg.traits.ScopeRef, "System.Runtime.CompilerServices.CompilationRelaxationsAttribute"), @@ -1101,9 +1052,10 @@ module MainModuleBuilder = yield! iattrs yield! codegenResults.ilAssemAttrs if Option.isSome pdbfile then - yield (tcGlobals.ilg.mkDebuggableAttributeV2 (tcConfig.jitTracking, tcConfig.ignoreSymbolStoreSequencePoints, disableJitOptimizations, false (* enableEnC *) )) ] - - let tcVersion = tcConfig.version.GetVersionInfo(tcConfig.implicitIncludeDir) + yield (tcGlobals.ilg.mkDebuggableAttributeV2 (tcConfig.jitTracking, tcConfig.ignoreSymbolStoreSequencePoints, disableJitOptimizations, false (* enableEnC *) )) + yield! reflectedDefinitionAttrs ] + + // Make the manifest of the assembly let manifest = if tcConfig.target = Module then None else let man = mainModule.ManifestOfAssembly @@ -1111,18 +1063,11 @@ module MainModuleBuilder = match assemVerFromAttrib with | None -> tcVersion | Some v -> v - Some { man with Version= Some(ver); + Some { man with Version= Some ver; CustomAttrs = manifestAttrs; DisableJitOptimizations=disableJitOptimizations; JitTracking= tcConfig.jitTracking; SecurityDecls=secDecls } - - let quotDataResources = - codegenResults.quotationResourceBytes |> List.map (fun bytes -> - { Name=QuotationPickler.pickledDefinitionsResourceNameBase+string(newUnique()); - Location = ILResourceLocation.Local (fun () -> bytes); - Access= ILResourceAccess.Public; - CustomAttrs = emptyILCustomAttrs }) let resources = mkILResources @@ -1159,7 +1104,7 @@ module MainModuleBuilder = Access=pub; CustomAttrs=emptyILCustomAttrs } - yield! quotDataResources + yield! reflectedDefinitionResources yield! intfDataResources yield! optDataResources for ri in tcConfig.linkResources do @@ -1170,7 +1115,7 @@ module MainModuleBuilder = CustomAttrs=emptyILCustomAttrs } ] //NOTE: the culture string can be turned into a number using this: - // sprintf "%04x" (System.Globalization.CultureInfo.GetCultureInfo("en").KeyboardLayoutId ) + // sprintf "%04x" (CultureInfo.GetCultureInfo("en").KeyboardLayoutId ) let assemblyVersionResources = let assemblyVersion = match tcConfig.version with @@ -1295,7 +1240,11 @@ module MainModuleBuilder = Is32Bit=(match tcConfig.platform with Some X86 -> true | _ -> false); Is64Bit=(match tcConfig.platform with Some AMD64 | Some IA64 -> true | _ -> false); Is32BitPreferred = if tcConfig.prefer32Bit && not tcConfig.target.IsExe then (error(Error(FSComp.SR.invalidPlatformTarget(),rangeCmdArgs))) else tcConfig.prefer32Bit; - CustomAttrs= mkILCustomAttrs ((if tcConfig.target = Module then iattrs else []) @ codegenResults.ilNetModuleAttrs); + CustomAttrs= + mkILCustomAttrs + [ if tcConfig.target = Module then + yield! iattrs + yield! codegenResults.ilNetModuleAttrs ]; NativeResources=nativeResources; Manifest = manifest } @@ -1310,11 +1259,11 @@ module StaticLinker = ilxMainModule,(fun x -> x) else - // Check no dependent assemblies use quotations - let dependentCcuUsingQuotations = dependentILModules |> List.tryPick (function (Some ccu,_) when ccu.UsesQuotations -> 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 @@ -1335,6 +1284,15 @@ module StaticLinker = 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 -> + for ca in m.CustomAttrs.AsList do + if ca.Method.MethodRef.EnclosingTypeRef.FullName = typeof.FullName then + yield ca + | _ -> () ] + 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. @@ -1355,18 +1313,16 @@ module StaticLinker = [ for (ccu,r) in intfDataResources do if GenerateInterfaceData tcConfig && not (isProvided ccu) then yield r ] + let optDataResources,others = others |> List.partition (snd >> IsOptimizationDataResource) let optDataResources = [ for (ccu,r) in optDataResources do if GenerateOptimizationData tcConfig && not (isProvided ccu) then yield r ] - let reflectedDefinitionResources,others = others |> List.partition (snd >> IsReflectedDefinitionsResource) - let reflectedDefinitionResources = reflectedDefinitionResources |> List.mapi (fun i (_,r) -> {r with Name = QuotationPickler.pickledDefinitionsResourceNameBase+string (i+1)}) - let otherResources = others |> List.map snd - if verbose then dprintf "#intfDataResources = %d, #optDataResources = %d, #reflectedDefinitionResources = %d\n" intfDataResources.Length optDataResources.Length reflectedDefinitionResources.Length; + let otherResources = others |> List.map snd - let result = intfDataResources@optDataResources@reflectedDefinitionResources@otherResources + let result = intfDataResources@optDataResources@otherResources result let moduls = ilxMainModule :: (List.map snd dependentILModules) @@ -1381,6 +1337,7 @@ module StaticLinker = moduls |> List.map (fun m -> m.TypeDefs.AsList |> List.partition (fun td -> isTypeNameForGlobalFunctions td.Name)) |> List.unzip + let topTypeDef = let topTypeDefs = List.concat topTypeDefs mkILTypeDefForGlobalFunctions ilGlobals @@ -1389,7 +1346,7 @@ module StaticLinker = let ilxMainModule = { ilxMainModule with - Manifest = (let m = ilxMainModule.ManifestOfAssembly in Some {m with CustomAttrs = mkILCustomAttrs m.CustomAttrs.AsList }); + Manifest = (let m = ilxMainModule.ManifestOfAssembly in Some {m with CustomAttrs = mkILCustomAttrs (m.CustomAttrs.AsList @ savedManifestAttrs) }); CustomAttrs = mkILCustomAttrs [ for m in moduls do yield! m.CustomAttrs.AsList ]; TypeDefs = mkILTypeDefs (topTypeDef :: List.concat normalTypeDefs); Resources = mkILResources (savedResources @ ilxMainModule.Resources.AsList); @@ -1398,16 +1355,12 @@ module StaticLinker = ilxMainModule, rewriteExternalRefsToLocalRefs - #if DEBUG - let PrintModule outfile x = - use os = File.CreateText(outfile) :> TextWriter - ILAsciiWriter.output_module os x - #endif - - + // LEGACY: This is only used when compiling an FSharp.Core for .NET 2.0 (FSharp.Core 2.3.0.0). We no longer + // build new FSharp.Core for that configuration. + // // Find all IL modules that are to be statically linked given the static linking roots. - let FindAndAddMscorlibTypesForStaticLinkingIntoFSharpCoreLibrary (tcConfig:TcConfig, ilGlobals:ILGlobals, ilxMainModule) = - let mscorlib40 = tcConfig.compilingFslib20.Value // + @"\..\.NET Framework 4.0 Pre Beta\mscorlib.dll" + let LegacyFindAndAddMscorlibTypesForStaticLinkingIntoFSharpCoreLibraryForNet20 (tcConfig:TcConfig, ilGlobals:ILGlobals, ilxMainModule) = + let mscorlib40 = tcConfig.compilingFslib20.Value let ilBinaryReader = let ilGlobals = mkILGlobals (IL.mkMscorlibBasedTraits ILScopeRef.Local) (Some ilGlobals.primaryAssemblyName) tcConfig.noDebugData @@ -1586,16 +1539,16 @@ module StaticLinker = | Some provAssemStaticLinkInfo -> yield (importedBinary,provAssemStaticLinkInfo) ] #endif if tcConfig.compilingFslib && tcConfig.compilingFslib20.IsSome then - (fun (ilxMainModule,_) -> FindAndAddMscorlibTypesForStaticLinkingIntoFSharpCoreLibrary (tcConfig, ilGlobals, ilxMainModule)) + (fun ilxMainModule -> LegacyFindAndAddMscorlibTypesForStaticLinkingIntoFSharpCoreLibraryForNet20 (tcConfig, ilGlobals, ilxMainModule)) elif not tcConfig.standalone && tcConfig.extraStaticLinkRoots.IsEmpty #if EXTENSIONTYPING && providerGeneratedAssemblies.IsEmpty #endif then - (fun (ilxMainModule,_outfile) -> ilxMainModule) + (fun ilxMainModule -> ilxMainModule) else - (fun (ilxMainModule,outfile) -> + (fun ilxMainModule -> ReportTime tcConfig "Find assembly references"; let dependentILModules = FindDependentILModulesForStaticLinking (tcConfig, tcImports,ilxMainModule) @@ -1745,13 +1698,6 @@ module StaticLinker = let rewriteAssemblyRefsToMatchLibraries = NormalizeAssemblyRefs tcImports Morphs.morphILTypeRefsInILModuleMemoized ilGlobals (Morphs.morphILScopeRefsInILTypeRef (validateTargetPlatform >> rewriteExternalRefsToLocalRefs >> rewriteAssemblyRefsToMatchLibraries)) ilxMainModule - #if DEBUG - // Print it out if requested - if tcConfig.writeGeneratedILFiles then (let _ = PrintModule (outpath outfile "ilx.main") ilxMainModule in ()); - #else - ignore outfile - #endif - ilxMainModule) //---------------------------------------------------------------------------- @@ -1761,65 +1707,46 @@ module StaticLinker = type SigningInfo = SigningInfo of (* delaysign:*) bool * (*signer:*) string option * (*container:*) string option module FileWriter = - let EmitIL (tcConfig:TcConfig,ilGlobals,_errorLogger:ErrorLogger,outfile,pdbfile,ilxMainModule,signingInfo:SigningInfo,exiter:Exiter) = - let (SigningInfo(delaysign,signer,container)) = signingInfo + let EmitIL (tcConfig:TcConfig, ilGlobals, _errorLogger:ErrorLogger, outfile, pdbfile, ilxMainModule, signingInfo:SigningInfo, exiter:Exiter) = + let (SigningInfo(delaysign, signerOpt, container)) = signingInfo try - #if DEBUG - if tcConfig.writeGeneratedILFiles then dprintn "Printing module..."; - if tcConfig.writeGeneratedILFiles then StaticLinker.PrintModule (outpath outfile "il.txt") ilxMainModule; - #endif if !progress then dprintn "Writing assembly..."; try - ILBinaryWriter.WriteILBinary - outfile - { ilg = ilGlobals - pdbfile=pdbfile; - emitTailcalls= tcConfig.emitTailcalls; - showTimes=tcConfig.showTimes; - - signer = - begin - // REVIEW: favor the container over the key file - C# appears to do this - if isSome container then - Some(ILBinaryWriter.ILStrongNameSigner.OpenKeyContainer container.Value) - else - match signer with - | None -> None - | Some(s) -> - try + let signer = + // Favor the container over the key file - C# appears to do this + if isSome container then + Some(ILBinaryWriter.ILStrongNameSigner.OpenKeyContainer container.Value) + else + match signerOpt with + | None -> None + | Some s -> + try if delaysign then - Some (ILBinaryWriter.ILStrongNameSigner.OpenPublicKeyFile s) + Some (ILBinaryWriter.ILStrongNameSigner.OpenPublicKeyFile s) else - Some (ILBinaryWriter.ILStrongNameSigner.OpenKeyPairFile s) - with e -> - // Note:: don't use errorR here since we really want to fail and not produce a binary - error(Error(FSComp.SR.fscKeyFileCouldNotBeOpened(s),rangeCmdArgs)) - end; - fixupOverlappingSequencePoints = false; - dumpDebugInfo =tcConfig.dumpDebugInfo } - ilxMainModule - tcConfig.noDebugData + Some (ILBinaryWriter.ILStrongNameSigner.OpenKeyPairFile s) + with e -> + // Note:: don't use errorR here since we really want to fail and not produce a binary + error(Error(FSComp.SR.fscKeyFileCouldNotBeOpened(s),rangeCmdArgs)) + let options : ILBinaryWriter.options = + { ilg = ilGlobals + pdbfile = pdbfile + emitTailcalls = tcConfig.emitTailcalls + showTimes = tcConfig.showTimes + signer = signer + fixupOverlappingSequencePoints = false + dumpDebugInfo = tcConfig.dumpDebugInfo } + ILBinaryWriter.WriteILBinary (outfile, options, ilxMainModule, tcConfig.noDebugData) + with Failure msg -> error(Error(FSComp.SR.fscProblemWritingBinary(outfile,msg), rangeCmdArgs)) with e -> errorRecoveryNoRange e -#if SQM_SUPPORT SqmLoggerWithConfig tcConfig _errorLogger.ErrorNumbers _errorLogger.WarningNumbers -#endif exiter.Exit 1 - let WriteStatsFile (tcConfig:TcConfig,outfile) = - if tcConfig.stats then - try - use oc = new StreamWriter((outpath outfile "stats.txt"),append=false,encoding=Encoding.UTF8) :> TextWriter -#if STATISTICS - Ilread.report oc; -#endif - Ilxgen.ReportStatistics oc; - with _ -> () - -let ValidateKeySigningAttributes (tcConfig : TcConfig) tcGlobals topAttrs = +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 @@ -1864,12 +1791,6 @@ let ValidateKeySigningAttributes (tcConfig : TcConfig) tcGlobals topAttrs = SigningInfo (delaysign,signer,container) -/// Checks if specified file name is absolute path. If yes - returns the name as is, otherwise makes full path using tcConfig.implicitIncludeDir as base. -let expandFileNameIfNeeded (tcConfig : TcConfig) name = - if System.IO.Path.IsPathRooted name then name - else - System.IO.Path.Combine(tcConfig.implicitIncludeDir, name) - //---------------------------------------------------------------------------- // main - split up to make sure that we can GC the // dead data at the end of each phase. We explicitly communicate arguments @@ -1877,54 +1798,53 @@ let expandFileNameIfNeeded (tcConfig : TcConfig) name = //----------------------------------------------------------------------------- [] -type Args<'a> = Args of 'a +type Args<'T> = Args of 'T -let main0(argv,bannerAlreadyPrinted,exiter:Exiter, errorLoggerProvider : ErrorLoggerProvider, disposables : DelayedDisposables) = +let main0(argv,bannerAlreadyPrinted,exiter:Exiter, errorLoggerProvider : ErrorLoggerProvider, disposables : DisposablesTracker) = // See Bug 735819 let lcidFromCodePage = - if (System.Console.OutputEncoding.CodePage <> 65001) && - (System.Console.OutputEncoding.CodePage <> System.Threading.Thread.CurrentThread.CurrentUICulture.TextInfo.OEMCodePage) && - (System.Console.OutputEncoding.CodePage <> System.Threading.Thread.CurrentThread.CurrentUICulture.TextInfo.ANSICodePage) then - System.Threading.Thread.CurrentThread.CurrentUICulture <- new System.Globalization.CultureInfo("en-US") + if (Console.OutputEncoding.CodePage <> 65001) && + (Console.OutputEncoding.CodePage <> Thread.CurrentThread.CurrentUICulture.TextInfo.OEMCodePage) && + (Console.OutputEncoding.CodePage <> Thread.CurrentThread.CurrentUICulture.TextInfo.ANSICodePage) then + Thread.CurrentThread.CurrentUICulture <- new CultureInfo("en-US") Some(1033) else None let tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger = - getTcImportsFromCommandLine(None, argv, defaultFSharpBinariesDir, Directory.GetCurrentDirectory(), lcidFromCodePage, (fun tcConfigB -> - match tcConfigB.lcid with - | Some(n) -> System.Threading.Thread.CurrentThread.CurrentUICulture <- new System.Globalization.CultureInfo(n) - | None -> () + GetTcImportsFromCommandLine + (None, argv, defaultFSharpBinariesDir, Directory.GetCurrentDirectory(), + lcidFromCodePage, + // setProcessThreadLocals + (fun tcConfigB -> + match tcConfigB.lcid with + | Some(n) -> Thread.CurrentThread.CurrentUICulture <- new CultureInfo(n) + | None -> () - if tcConfigB.utf8output then - let prev = System.Console.OutputEncoding - System.Console.OutputEncoding <- Encoding.UTF8 - System.AppDomain.CurrentDomain.ProcessExit.Add(fun _ -> System.Console.OutputEncoding <- prev) - ), (fun tcConfigB -> - // display the banner text, if necessary - if not bannerAlreadyPrinted then - Microsoft.FSharp.Compiler.Fscopts.DisplayBannerText tcConfigB - ), - false, // optimizeForMemory - fsc.exe can use as much memory as it likes to try to compile as fast as possible - exiter, - errorLoggerProvider, - disposables - - ) - - tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger, exiter - -// TcGlobals * TcImports * TcImports * CcuThunk * TypedAssembly * TopAttribs * TcConfig * string * string * string* ErrorLogger* Exiter -let main1(tcGlobals,tcImports : TcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig : TcConfig, outfile,pdbfile,assemblyName,errorLogger, exiter : Exiter) = - + if tcConfigB.utf8output then + let prev = Console.OutputEncoding + Console.OutputEncoding <- Encoding.UTF8 + System.AppDomain.CurrentDomain.ProcessExit.Add(fun _ -> Console.OutputEncoding <- prev)), + (fun tcConfigB -> + // display the banner text, if necessary + if not bannerAlreadyPrinted then + DisplayBannerText tcConfigB), + false, // optimizeForMemory - fsc.exe can use as much memory as it likes to try to compile as fast as possible + exiter, + errorLoggerProvider, + disposables) + + tcGlobals,tcImports,frameworkTcImports,generatedCcu,typedAssembly,topAttrs,tcConfig,outfile,pdbfile,assemblyName,errorLogger,exiter + +let main1(tcGlobals, tcImports: TcImports, frameworkTcImports, generatedCcu, typedAssembly, topAttrs, tcConfig: TcConfig, outfile, pdbfile, assemblyName, errorLogger, exiter: Exiter) = if tcConfig.typeCheckOnly then exiter.Exit 0 use unwindPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.CodeGen) - let signingInfo = ValidateKeySigningAttributes tcConfig tcGlobals topAttrs + let signingInfo = ValidateKeySigningAttributes (tcConfig, tcGlobals, topAttrs) - abortOnError(errorLogger,tcConfig,exiter) + AbortOnError(errorLogger,tcConfig,exiter) // Build an updated errorLogger that filters according to the scopedPragmas. Then install // it as the updated global error logger and never remove it @@ -1956,7 +1876,7 @@ let main1(tcGlobals,tcImports : TcImports,frameworkTcImports,generatedCcu,typedA XmlDocWriter.computeXmlDocSigs (tcGlobals,generatedCcu) ReportTime tcConfig ("Write XML docs"); tcConfig.xmlDocOutputFile |> Option.iter ( fun xmlFile -> - let xmlFile = expandFileNameIfNeeded tcConfig xmlFile + let xmlFile = tcConfig.MakePathAbsolute xmlFile XmlDocWriter.writeXmlDoc (assemblyName,generatedCcu,xmlFile) ) ReportTime tcConfig ("Write HTML docs"); @@ -1966,31 +1886,23 @@ let main1(tcGlobals,tcImports : TcImports,frameworkTcImports,generatedCcu,typedA // Pass on only the minimimum information required for the next phase to ensure GC kicks in. // In principle the JIT should be able to do good liveness analysis to clean things up, but the // data structures involved here are so large we can't take the risk. - Args(tcConfig,tcImports,frameworkTcImports,tcGlobals,errorLogger,generatedCcu,outfile,typedAssembly,topAttrs,pdbfile,assemblyName,assemVerFromAttrib,signingInfo,exiter) + Args(tcConfig, tcImports, frameworkTcImports, tcGlobals, errorLogger, generatedCcu, outfile, typedAssembly, topAttrs, pdbfile, assemblyName, assemVerFromAttrib, signingInfo, exiter) -let main2(Args(tcConfig,tcImports,frameworkTcImports : TcImports,tcGlobals,errorLogger,generatedCcu:CcuThunk,outfile,typedAssembly,topAttrs,pdbfile,assemblyName,assemVerFromAttrib,signingInfo,exiter:Exiter)) = +let main2(Args(tcConfig, tcImports, frameworkTcImports: TcImports, tcGlobals, errorLogger, generatedCcu: CcuThunk, outfile, typedAssembly, topAttrs, pdbfile, assemblyName, assemVerFromAttrib, signingInfo, exiter: Exiter)) = ReportTime tcConfig ("Encode Interface Data"); -#if DEBUG - if !verboseStamps then - dprintf "---------------------- START MAKE EXPORT REMAPPING ------------\n"; -#endif let exportRemapping = MakeExportRemapping generatedCcu generatedCcu.Contents -#if DEBUG - if !verboseStamps then - dprintf "---------------------- END MAKE EXPORT REMAPPING ------------\n"; -#endif let sigDataAttributes,sigDataResources = - EncodeInterfaceData(tcConfig,tcGlobals,exportRemapping,errorLogger,generatedCcu,outfile,exiter) + EncodeInterfaceData(tcConfig, tcGlobals, exportRemapping, errorLogger, generatedCcu, outfile, exiter) if !progress && tcConfig.optSettings.jitOptUser = Some false then dprintf "Note, optimizations are off.\n"; (* optimize *) use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Optimize) - let optEnv0 = InitialOptimizationEnv tcImports tcGlobals + let optEnv0 = GetInitialOptimizationEnv (tcImports, tcGlobals) let importMap = tcImports.GetImportMap() let metadataVersion = @@ -1999,16 +1911,16 @@ let main2(Args(tcConfig,tcImports,frameworkTcImports : TcImports,tcGlobals,error | _ -> match (frameworkTcImports.DllTable.TryFind tcConfig.primaryAssembly.Name) with | Some(ib) -> ib.RawMetadata.MetadataVersion | _ -> "" let optimizedImpls,optimizationData,_ = ApplyAllOptimizations (tcConfig, tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), outfile, importMap, false, optEnv0, generatedCcu, typedAssembly) - abortOnError(errorLogger,tcConfig,exiter) + AbortOnError(errorLogger,tcConfig,exiter) ReportTime tcConfig ("Encoding OptData"); - let generatedOptData = EncodeOptimizationData(tcGlobals,tcConfig,outfile,exportRemapping,(generatedCcu,optimizationData)) + let optDataResources = EncodeOptimizationData(tcGlobals,tcConfig,outfile,exportRemapping,(generatedCcu,optimizationData)) let sigDataResources, _optimizationData = if tcConfig.useSignatureDataFile then let bytes = [| yield! BinaryGenerationUtilities.i32 0x7846ce27 - yield! BinaryGenerationUtilities.i32 (sigDataResources.Length + generatedOptData.Length) - for r in (sigDataResources @ generatedOptData) do + yield! BinaryGenerationUtilities.i32 (sigDataResources.Length + optDataResources.Length) + for r in (sigDataResources @ optDataResources) do match r.Location with | ILResourceLocation.Local f -> let bytes = f() @@ -2020,19 +1932,19 @@ let main2(Args(tcConfig,tcImports,frameworkTcImports : TcImports,tcGlobals,error File.WriteAllBytes(sigDataFileName,bytes) [], [] else - sigDataResources, generatedOptData + sigDataResources, optDataResources // Pass on only the minimimum information required for the next phase to ensure GC kicks in. // In principle the JIT should be able to do good liveness analysis to clean things up, but the // data structures involved here are so large we can't take the risk. - Args(tcConfig,tcImports,tcGlobals,errorLogger,generatedCcu,outfile,optimizedImpls,topAttrs,pdbfile,assemblyName, (sigDataAttributes, sigDataResources), generatedOptData,assemVerFromAttrib,signingInfo,metadataVersion,exiter) + Args(tcConfig,tcImports,tcGlobals,errorLogger,generatedCcu,outfile,optimizedImpls,topAttrs,pdbfile,assemblyName, (sigDataAttributes, sigDataResources), optDataResources,assemVerFromAttrib,signingInfo,metadataVersion,exiter) -let main2b(Args(tcConfig:TcConfig,tcImports,tcGlobals,errorLogger,generatedCcu:CcuThunk,outfile,optimizedImpls,topAttrs,pdbfile,assemblyName,idata,generatedOptData,assemVerFromAttrib,signingInfo,metadataVersion,exiter:Exiter)) = +let main2b(Args(tcConfig: TcConfig, tcImports, tcGlobals, errorLogger, generatedCcu: CcuThunk, outfile, optimizedImpls, topAttrs, pdbfile, assemblyName, idata, optDataResources, assemVerFromAttrib, signingInfo, metadataVersion, exiter: Exiter)) = // Compute a static linker. let ilGlobals = tcGlobals.ilg - if tcConfig.standalone && generatedCcu.UsesQuotations then - error(Error(FSComp.SR.fscQuotationLiteralsStaticLinking0(),rangeStartup)); + if tcConfig.standalone && generatedCcu.UsesFSharp20PlusQuotations then + error(Error(FSComp.SR.fscQuotationLiteralsStaticLinking0(),rangeStartup)); let staticLinker = StaticLinker.StaticLink (tcConfig,tcImports,ilGlobals) ReportTime tcConfig "TAST -> ILX"; @@ -2052,72 +1964,58 @@ let main2b(Args(tcConfig:TcConfig,tcImports,tcGlobals,errorLogger,generatedCcu:C let secDecls = if securityAttrs.Length > 0 then mkILSecurityDecls permissionSets else emptyILSecurityDecls - let ilxMainModule = MainModuleBuilder.CreateMainModule (tcConfig,tcGlobals,pdbfile,assemblyName,outfile,topAttrs,idata,generatedOptData,codegenResults,assemVerFromAttrib,metadataVersion,secDecls) -#if DEBUG - // Print code before bailing out from the compiler due to errors - // in the backend of the compiler. The partially-generated - // ILX code often contains useful information. - if tcConfig.writeGeneratedILFiles then StaticLinker.PrintModule (outpath outfile "ilx.txt") ilxMainModule; -#endif + let ilxMainModule = MainModuleBuilder.CreateMainModule (tcConfig,tcGlobals,pdbfile,assemblyName,outfile,topAttrs,idata,optDataResources,codegenResults,assemVerFromAttrib,metadataVersion,secDecls) - abortOnError(errorLogger,tcConfig,exiter) + AbortOnError(errorLogger,tcConfig,exiter) Args (tcConfig,errorLogger,staticLinker,ilGlobals,outfile,pdbfile,ilxMainModule,signingInfo,exiter) -let main2c(Args(tcConfig,errorLogger,staticLinker,ilGlobals,outfile,pdbfile,ilxMainModule,signingInfo,exiter:Exiter)) = +let main2c(Args(tcConfig, errorLogger, staticLinker, ilGlobals, outfile, pdbfile, ilxMainModule, signingInfo, exiter: Exiter)) = use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.IlGen) ReportTime tcConfig "ILX -> IL (Unions)"; - let ilxMainModule = EraseIlxUnions.ConvModule ilGlobals ilxMainModule + let ilxMainModule = EraseUnions.ConvModule ilGlobals ilxMainModule ReportTime tcConfig "ILX -> IL (Funcs)"; - let ilxMainModule = EraseIlxFuncs.ConvModule ilGlobals ilxMainModule + let ilxMainModule = EraseClosures.ConvModule ilGlobals ilxMainModule - abortOnError(errorLogger,tcConfig,exiter) + AbortOnError(errorLogger,tcConfig,exiter) Args(tcConfig,errorLogger,staticLinker,ilGlobals,ilxMainModule,outfile,pdbfile,signingInfo,exiter) -let main3(Args(tcConfig,errorLogger:ErrorLogger,staticLinker,ilGlobals,ilxMainModule,outfile,pdbfile,signingInfo,exiter:Exiter)) = +let main3(Args(tcConfig, errorLogger: ErrorLogger, staticLinker, ilGlobals, ilxMainModule, outfile, pdbfile, signingInfo, exiter:Exiter)) = let ilxMainModule = - try staticLinker (ilxMainModule,outfile) + try staticLinker ilxMainModule with e -> errorRecoveryNoRange e -#if SQM_SUPPORT SqmLoggerWithConfig tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers -#endif exiter.Exit 1 - abortOnError(errorLogger,tcConfig,exiter) + AbortOnError(errorLogger,tcConfig,exiter) Args (tcConfig,errorLogger,ilGlobals,ilxMainModule,outfile,pdbfile,signingInfo,exiter) -let main4(Args(tcConfig,errorLogger:ErrorLogger,ilGlobals,ilxMainModule,outfile,pdbfile,signingInfo,exiter)) = +let main4 (Args (tcConfig, errorLogger: ErrorLogger, ilGlobals, ilxMainModule, outfile, pdbfile, signingInfo, exiter)) = ReportTime tcConfig "Write .NET Binary" use unwindBuildPhase = PushThreadBuildPhaseUntilUnwind (BuildPhase.Output) - let outfile = expandFileNameIfNeeded tcConfig outfile - - let pdbfile = pdbfile |> Option.map ((expandFileNameIfNeeded tcConfig) >> Path.GetFullPath) - FileWriter.EmitIL (tcConfig,ilGlobals,errorLogger,outfile,pdbfile,ilxMainModule,signingInfo,exiter) + let outfile = tcConfig.MakePathAbsolute outfile - ReportTime tcConfig "Write Stats File" - FileWriter.WriteStatsFile (tcConfig,outfile) + let pdbfile = pdbfile |> Option.map (tcConfig.MakePathAbsolute >> Path.GetFullPath) + FileWriter.EmitIL (tcConfig, ilGlobals, errorLogger, outfile, pdbfile, ilxMainModule, signingInfo, exiter) - abortOnError(errorLogger,tcConfig,exiter) + AbortOnError(errorLogger, tcConfig, exiter) if tcConfig.showLoadedAssemblies then for a in System.AppDomain.CurrentDomain.GetAssemblies() do dprintfn "%s" a.FullName -#if SQM_SUPPORT SqmLoggerWithConfig tcConfig errorLogger.ErrorNumbers errorLogger.WarningNumbers -#endif ReportTime tcConfig "Exiting" let typecheckAndCompile(argv,bannerAlreadyPrinted,exiter:Exiter, errorLoggerProvider) = - // Don's note: "GC of intermediate data is really, really important here" - use d = new DelayedDisposables() - main0(argv,bannerAlreadyPrinted,exiter, errorLoggerProvider, d) + use disposables = new DisposablesTracker() + main0(argv,bannerAlreadyPrinted,exiter, errorLoggerProvider, disposables) |> main1 |> main2 |> main2b @@ -2125,15 +2023,16 @@ let typecheckAndCompile(argv,bannerAlreadyPrinted,exiter:Exiter, errorLoggerProv |> main3 |> main4 -let mainCompile (argv,bannerAlreadyPrinted,exiter:Exiter) = +let mainCompile (argv, bannerAlreadyPrinted, exiter:Exiter) = + // Enabling batch latency mode currently overrides app config . + // If batch mode is ever removed or changed, revisit use of . System.Runtime.GCSettings.LatencyMode <- System.Runtime.GCLatencyMode.Batch typecheckAndCompile(argv, bannerAlreadyPrinted, exiter, DefaultLoggerProvider()) +[] type CompilationOutput = - { - Errors : seq - Warnings : seq - } + { Errors : ErrorOrWarning[] + Warnings : ErrorOrWarning[] } type InProcCompiler() = member this.Compile(argv) = @@ -2141,23 +2040,21 @@ type InProcCompiler() = let errors = ResizeArray() let warnings = ResizeArray() - let rec loggerProvider = { - new ErrorLoggerProvider() with + let loggerProvider = + { new ErrorLoggerProvider() with member log.CreateErrorLoggerThatQuitsAfterMaxErrors(tcConfigBuilder, exiter) = - upcast { - new ErrorLoggerThatQuitsAfterMaxErrors(tcConfigBuilder, exiter, "InProcCompilerErrorLoggerThatQuitsAfterMaxErrors") with + { new ErrorLoggerThatQuitsAfterMaxErrors(tcConfigBuilder, exiter, "InProcCompilerErrorLoggerThatQuitsAfterMaxErrors") with member this.HandleTooManyErrors(text) = warnings.Add(ErrorOrWarning.Short(false, text)) member this.HandleIssue(tcConfigBuilder, err, isWarning) = let errs = CollectErrorOrWarning(tcConfigBuilder.implicitIncludeDir, tcConfigBuilder.showFullPaths, tcConfigBuilder.flatErrors, tcConfigBuilder.errorStyle, isWarning, err) let container = if isWarning then warnings else errors - container.AddRange(errs) - } - } - let exitCode = ref 0 - let exiter = { - new Exiter with - member this.Exit n = exitCode := n; raise StopProcessing + container.AddRange(errs) } + :> ErrorLogger } + let exitCode = ref 0 + let exiter = + { new Exiter with + member this.Exit n = exitCode := n; raise StopProcessing } try typecheckAndCompile(argv, false, exiter, loggerProvider) with @@ -2166,267 +2063,8 @@ type InProcCompiler() = exitCode := 1 () - let output = { Warnings = warnings; Errors = errors} + let output : CompilationOutput = { Warnings = warnings.ToArray(); Errors = errors.ToArray()} !exitCode = 0, output -/// Collect the output from the stdout and stderr streams, character by character, -/// recording the console color used along the way. -type private OutputCollector() = - let output = ResizeArray() - let outWriter isOut = - { new TextWriter() with - member x.Write(c:char) = lock output (fun () -> output.Add (isOut, (try Some System.Console.ForegroundColor with _ -> None) ,c)) - member x.Encoding = Encoding.UTF8 } - do System.Console.SetOut (outWriter true) - do System.Console.SetError (outWriter false) - member x.GetTextAndClear() = lock output (fun () -> let res = output.ToArray() in output.Clear(); res) - -/// Implement the optional resident compilation service -module FSharpResidentCompiler = - - open System - open System.Diagnostics - open System.Runtime.Remoting.Channels - open System.Runtime.Remoting - open System.Runtime.Remoting.Lifetime - - /// The compilation server, which runs in the server process. Accessed by clients using .NET remoting. - type FSharpCompilationServer(exiter:Exiter) = - inherit MarshalByRefObject() - - static let onWindows = - match System.Environment.OSVersion.Platform with - | PlatformID.Win32NT | PlatformID.Win32S | PlatformID.Win32Windows | PlatformID.WinCE -> true - | _ -> false - - // The channel/socket name is qualified by the user name (and domain on windows) - static let domainName = if onWindows then Environment.GetEnvironmentVariable "USERDOMAIN" else "" - static let userName = Environment.GetEnvironmentVariable (if onWindows then "USERNAME" else "USER") - // Use different base channel names on mono and CLR as a CLR remoting process can't talk - // to a mono server - static let baseChannelName = if runningOnMono then "FSCChannelMono" else "FSCChannel" - static let channelName = baseChannelName + "_" + domainName + "_" + userName - static let serverName = if runningOnMono then "FSCServerMono" else "FSCSever" - static let mutable serverExists = true - - let outputCollector = new OutputCollector() - - // This background agent ensures all compilation requests sent to the server are serialized - let agent = MailboxProcessor<_>.Start(fun inbox -> - async { - while true do - let! (pwd,argv, reply: AsyncReplyChannel<_>) = inbox.Receive() - if !progress then printfn "server agent: got compilation request, argv = %A" argv - let exitCode = - try - Environment.CurrentDirectory <- pwd - mainCompile (argv, true, exiter); - if !progress then printfn "server: finished compilation request, argv = %A" argv - 0 - with e -> - if !progress then printfn "server: finished compilation request with errors, argv = %A" argv - errorRecoveryNoRange e - 1 - let output = outputCollector.GetTextAndClear() - reply.Reply(output, exitCode) - GC.Collect(3) - // Exit the server if there are no outstanding requests and the - // current memory usage after collection is over 200MB - if inbox.CurrentQueueLength = 0 && GC.GetTotalMemory(true) > 200L * 1024L * 1024L then - Environment.Exit 0 - }) - - member x.Run() = - while serverExists do - if !progress then printfn "server: startup thread sleeping..." - System.Threading.Thread.Sleep 1000 - - abstract Ping : unit -> string - abstract Compile : string * string[] -> (bool * System.ConsoleColor option * char) [] * int - default x.Ping() = "ping" - default x.Compile (pwd,argv) = - if !progress then printfn "server: got compilation request, (pwd, argv) = %A" (pwd, argv) - agent.PostAndReply(fun reply -> (pwd,argv,reply)) - - override x.Finalize() = - serverExists <- false - - // This is called on the server object by .NET remoting to initialize the lifetime characteristics - // of the server object. - override x.InitializeLifetimeService() = - let lease = (base.InitializeLifetimeService() :?> ILease) - if (lease.CurrentState = LeaseState.Initial) then - lease.InitialLeaseTime <- TimeSpan.FromDays(1.0); - lease.SponsorshipTimeout <- TimeSpan.FromMinutes(2.0); - lease.RenewOnCallTime <- TimeSpan.FromDays(1.0); - box lease - - static member RunServer(exiter:Exiter) = - progress := condition "FSHARP_SERVER_PROGRESS" - if !progress then printfn "server: initializing server object" - let server = new FSharpCompilationServer(exiter) - let chan = new Ipc.IpcChannel(channelName) - ChannelServices.RegisterChannel(chan,false); - RemotingServices.Marshal(server,serverName) |> ignore - - // On Unix, the file permissions of the implicit socket need to be set correctly to make this - // private to the user. - if runningOnMono then - try - let monoPosix = System.Reflection.Assembly.Load("Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756") - let monoUnixFileInfo = monoPosix.GetType("Mono.Unix.UnixFileSystemInfo") - let socketName = Path.Combine(FileSystem.GetTempPathShim(), channelName) - let fileEntry = monoUnixFileInfo.InvokeMember("GetFileSystemEntry", (BindingFlags.InvokeMethod ||| BindingFlags.Static ||| BindingFlags.Public), null, null, [| box socketName |],System.Globalization.CultureInfo.InvariantCulture) - // Add 0x00000180 (UserReadWriteExecute) to the access permissions on Unix - monoUnixFileInfo.InvokeMember("set_FileAccessPermissions", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, fileEntry, [| box 0x00000180 |],System.Globalization.CultureInfo.InvariantCulture) |> ignore -#if DEBUG - printfn "server: good, set permissions on socket name '%s'" socketName - let fileEntry = monoUnixFileInfo.InvokeMember("GetFileSystemEntry", (BindingFlags.InvokeMethod ||| BindingFlags.Static ||| BindingFlags.Public), null, null, [| box socketName |],System.Globalization.CultureInfo.InvariantCulture) - let currPermissions = monoUnixFileInfo.InvokeMember("get_FileAccessPermissions", (BindingFlags.InvokeMethod ||| BindingFlags.Instance ||| BindingFlags.Public), null, fileEntry, [| |],System.Globalization.CultureInfo.InvariantCulture) |> unbox - if !progress then printfn "server: currPermissions = '%o' (octal)" currPermissions -#endif - with e -> -#if DEBUG - printfn "server: failed to set permissions on socket, perhaps on windows? Is is not needed there." -#endif - () - // Fail silently - server.Run() - - static member private ConnectToServer() = - Activator.GetObject(typeof,"ipc://" + channelName + "/" + serverName) - :?> FSharpCompilationServer - - static member TryCompileUsingServer(argv) = - let pwd = System.Environment.CurrentDirectory - let clientOpt = - // Detect the absence of the channel via the exception. Probably not the best way. - // Different exceptions get thrown here on Mono and Windows. - let client = FSharpCompilationServer.ConnectToServer() - try - if !progress then printfn "client: attempting to connect to existing service (1)" - client.Ping() |> ignore - if !progress then printfn "client: connected to existing service" - Some client - with _ -> - let procInfo = - if runningOnMono then - let shellName, useShellExecute = - match System.Environment.GetEnvironmentVariable("FSC_MONO") with - | null -> - if onWindows then - Path.Combine(Path.GetDirectoryName (typeof.Assembly.Location), @"..\..\..\bin\mono.exe"), false - else - "mono", true - | path -> path, false - - // e.g. "C:\Program Files\Mono-2.6.1\lib\mono\2.0\mscorlib.dll" --> "C:\Program Files\Mono-2.6.1\bin\mono.exe" - ProcessStartInfo(FileName = shellName, - Arguments = typeof.Assembly.Location + " /server", - CreateNoWindow = true, - UseShellExecute = useShellExecute) - else - ProcessStartInfo(FileName=typeof.Assembly.Location, - Arguments = "/server", - CreateNoWindow = true, - UseShellExecute = false) - - let cmdProcess = new Process(StartInfo=procInfo) - - //let exitE = cmdProcess.Exited |> Observable.map (fun x -> x) - - cmdProcess.Start() |> ignore - //exitE.Add(fun _ -> if !progress then eprintfn "client: the server has exited") - cmdProcess.EnableRaisingEvents <- true; - - // Create the client proxy and attempt to connect to the server - let rec tryAcccesServer nRemaining = - if nRemaining = 0 then - // Failed to connect to server, give up - None - else - try - if !progress then printfn "client: attempting to connect to existing service (2)" - client.Ping() |> ignore - if !progress then printfn "client: connected to existing service" - Some client - // Detect the absence of the channel via the exception. Probably not the best way. - // Different exceptions get thrown here on Mono and Windows. - with _ (* System.Runtime.Remoting.RemotingException *) -> - // Sleep a bit - System.Threading.Thread.Sleep 50 - tryAcccesServer (nRemaining - 1) - - tryAcccesServer 20 - - match clientOpt with - | Some client -> - if !progress then printfn "client: calling client.Compile(%A)" argv - // Install the global error logger and never remove it. This logger does have all command-line flags considered. - try - let (output, exitCode) = - try client.Compile (pwd, argv) - with e -> - printfn "server error: %s" (e.ToString()) - raise (Error (FSComp.SR.fscRemotingError(), rangeStartup)) - - if !progress then printfn "client: returned from client.Compile(%A), res = %d" argv exitCode - use holder = - try let originalConsoleColor = Console.ForegroundColor - { new System.IDisposable with member x.Dispose() = Console.ForegroundColor <- originalConsoleColor } - with _ -> null - let mutable prevConsoleColor = try Console.ForegroundColor with _ -> ConsoleColor.Black - for (isOut, consoleColorOpt, c:char) in output do - try match consoleColorOpt with - | Some consoleColor -> - if prevConsoleColor <> consoleColor then - Console.ForegroundColor <- consoleColor; - | None -> () - with _ -> () - c |> (if isOut then System.Console.Out.Write else System.Console.Error.Write) - Some exitCode - with err -> - let sb = System.Text.StringBuilder() - OutputErrorOrWarning (pwd,true,false,ErrorStyle.DefaultErrors,true) sb (PhasedError.Create(err,BuildPhase.Compile)) - eprintfn "%s" (sb.ToString()) - // We continue on and compile in-process - the server appears to have died half way through. - None - | None -> - None - -let main argv = - let inline hasArgument name args = - args |> Array.exists (fun x -> x = ("--" + name) || x = ("/" + name)) - let inline stripArgument name args = - args |> Array.filter (fun x -> x <> ("--" + name) && x <> ("/" + name)) - - // Check for --pause as the very first step so that a compiler can be attached here. - if hasArgument "pause" argv then - System.Console.WriteLine("Press any key to continue...") - System.Console.ReadKey() |> ignore - - if runningOnMono && hasArgument "resident" argv then - let argv = stripArgument "resident" argv - - if not (hasArgument "nologo" argv) then - printfn "%s" (FSComp.SR.buildProductName(FSharpEnvironment.FSharpTeamVersionNumber)) - printfn "%s" (FSComp.SR.optsCopyright()) - - let exitCodeOpt = FSharpResidentCompiler.FSharpCompilationServer.TryCompileUsingServer argv - match exitCodeOpt with - | Some exitCode -> exitCode - | None -> - mainCompile (argv, true, QuitProcessExiter) - 0 - - elif runningOnMono && hasArgument "server" argv then - // Install the right exiter so we can catch "StopProcessing" without exiting the server - let exiter = { new Exiter with member x.Exit n = raise StopProcessing } - FSharpResidentCompiler.FSharpCompilationServer.RunServer(exiter) - 0 - - else - mainCompile (argv, false, QuitProcessExiter) - 0 #endif diff --git a/src/fsharp/fsc.fsi b/src/fsharp/fsc.fsi index 7529828a05c..129a97a1d6e 100644 --- a/src/fsharp/fsc.fsi +++ b/src/fsharp/fsc.fsi @@ -3,34 +3,24 @@ module internal Microsoft.FSharp.Compiler.Driver open Microsoft.FSharp.Compiler.ErrorLogger -open Microsoft.FSharp.Compiler.Build +open Microsoft.FSharp.Compiler.CompileOps open Microsoft.FSharp.Compiler.Env open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.TypeChecker /// the F# project system calls this to pop up type provider security dialog if needed -val internal runFromCommandLineToImportingAssemblies : (string -> unit) * string[] * string * string * Exiter -> unit +val internal ProcessCommandLineArgsAndImportAssemblies : (string -> unit) * string[] * string * string * Exiter -> unit #if NO_COMPILER_BACKEND #else -[] -type ErrorLoggerThatAccumulatesErrors = - inherit ErrorLogger - new : TcConfigBuilder -> ErrorLoggerThatAccumulatesErrors - new : TcConfig -> ErrorLoggerThatAccumulatesErrors - member GetMessages : unit -> (bool * string) list - member ProcessMessage : PhasedError * bool -> (bool * string) option - - /// fsc.exe calls this val mainCompile : argv : string[] * bannerAlreadyPrinted : bool * exiter : Exiter -> unit +[] type CompilationOutput = - { - Errors : seq - Warnings : seq - } + { Errors : ErrorOrWarning[] + Warnings : ErrorOrWarning[] } type InProcCompiler = new : unit -> InProcCompiler diff --git a/src/fsharp/fscmain.fs b/src/fsharp/fscmain.fs index 4f047b9db27..73ef2adec3d 100644 --- a/src/fsharp/fscmain.fs +++ b/src/fsharp/fscmain.fs @@ -2,6 +2,11 @@ module internal Microsoft.FSharp.Compiler.CommandLineMain +open System +open System.Diagnostics +open System.IO +open System.Reflection +open System.Runtime.CompilerServices open Microsoft.FSharp.Compiler open Microsoft.FSharp.Compiler.AbstractIL.IL // runningOnMono open Microsoft.FSharp.Compiler.ErrorLogger @@ -9,16 +14,11 @@ open Microsoft.FSharp.Compiler.Driver open Internal.Utilities open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Compiler.Range -open Microsoft.FSharp.Compiler.Build -open System.Runtime.CompilerServices +open Microsoft.FSharp.Compiler.CompileOps /// Implement the optional resident compilation service module FSharpResidentCompiler = - open System - open System.Diagnostics - open System.IO - open System.Reflection open System.Runtime.Remoting.Channels open System.Runtime.Remoting open System.Runtime.Remoting.Lifetime @@ -30,10 +30,10 @@ module FSharpResidentCompiler = let output = ResizeArray() let outWriter isOut = { new TextWriter() with - member x.Write(c:char) = lock output (fun () -> output.Add (isOut, (try Some System.Console.ForegroundColor with _ -> None) ,c)) + member x.Write(c:char) = lock output (fun () -> output.Add (isOut, (try Some Console.ForegroundColor with _ -> None) ,c)) member x.Encoding = Encoding.UTF8 } - do System.Console.SetOut (outWriter true) - do System.Console.SetError (outWriter false) + do Console.SetOut (outWriter true) + do Console.SetError (outWriter false) member x.GetTextAndClear() = lock output (fun () -> let res = output.ToArray() in output.Clear(); res) /// The compilation server, which runs in the server process. Accessed by clients using .NET remoting. @@ -229,7 +229,7 @@ module FSharpResidentCompiler = Console.ForegroundColor <- consoleColor; | None -> () with _ -> () - c |> (if isOut then System.Console.Out.Write else System.Console.Error.Write) + c |> (if isOut then Console.Out.Write else Console.Error.Write) Some exitCode with err -> let sb = System.Text.StringBuilder() @@ -244,8 +244,8 @@ module Driver = let main argv = // Check for --pause as the very first step so that a compiler can be attached here. if argv |> Array.exists (fun x -> x = "/pause" || x = "--pause") then - System.Console.WriteLine("Press any key to continue...") - System.Console.ReadKey() |> ignore + Console.WriteLine("Press any key to continue...") + Console.ReadKey() |> ignore if runningOnMono && argv |> Array.exists (fun x -> x = "/resident" || x = "--resident") then let argv = argv |> Array.filter (fun x -> x <> "/resident" && x <> "--resident") diff --git a/src/fsharp/fscopts.fsi b/src/fsharp/fscopts.fsi deleted file mode 100644 index 676a129756f..00000000000 --- a/src/fsharp/fscopts.fsi +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -module internal Microsoft.FSharp.Compiler.Fscopts - -open Internal.Utilities -open Microsoft.FSharp.Compiler.AbstractIL -open Microsoft.FSharp.Compiler.AbstractIL.IL -open Microsoft.FSharp.Compiler.AbstractIL.Internal -open Microsoft.FSharp.Compiler -open Microsoft.FSharp.Compiler.Build -open Microsoft.FSharp.Compiler.ErrorLogger -open Microsoft.FSharp.Compiler.Ast -open Microsoft.FSharp.Compiler.Tast -#if NO_COMPILER_BACKEND -#else -open Microsoft.FSharp.Compiler.Ilxgen -#endif -open Microsoft.FSharp.Compiler.Import -open Microsoft.FSharp.Compiler.Opt -open Microsoft.FSharp.Compiler.Env - -val DisplayBannerText : TcConfigBuilder -> unit - -//val GetCompilerOptions : TcConfigBuilder -> CompilerOption list -> CompilerOption list -val GetCoreFscCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list -val GetCoreFsiCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list -val GetCoreServiceCompilerOptions : TcConfigBuilder -> CompilerOptionBlock list - -// Expose the "setters" for some user switches, to enable setting of defaults -val SetOptimizeSwitch : TcConfigBuilder -> OptionSwitch -> unit -val SetTailcallSwitch : TcConfigBuilder -> OptionSwitch -> unit -val SetDebugSwitch : TcConfigBuilder -> string option -> OptionSwitch -> unit -val PrintOptionInfo : TcConfigBuilder -> unit - -val fsharpModuleName : CompilerTarget -> string -> string - -#if NO_COMPILER_BACKEND -#else -val InitialOptimizationEnv : TcImports -> TcGlobals -> IncrementalOptimizationEnv -val AddExternalCcuToOpimizationEnv : TcGlobals -> IncrementalOptimizationEnv -> ImportedAssembly -> IncrementalOptimizationEnv -val ApplyAllOptimizations : TcConfig * TcGlobals * ConstraintSolver.TcValF * string * ImportMap * bool * IncrementalOptimizationEnv * CcuThunk * TypedAssembly -> TypedAssembly * Opt.LazyModuleInfo * IncrementalOptimizationEnv - -val CreateIlxAssemblyGenerator : TcConfig * TcImports * TcGlobals * ConstraintSolver.TcValF * CcuThunk -> IlxAssemblyGenerator - -val GenerateIlxCode : IlxGenBackend * bool * bool * TcConfig * TypeChecker.TopAttribs * TypedAssembly * string * bool * IlxAssemblyGenerator -> IlxGenResults -#endif - -// Used during static linking -val NormalizeAssemblyRefs : TcImports -> (AbstractIL.IL.ILScopeRef -> AbstractIL.IL.ILScopeRef) - -// Miscellany -val ignoreFailureOnMono1_1_16 : (unit -> unit) -> unit -val mutable enableConsoleColoring : bool -val DoWithErrorColor : bool -> (unit -> 'a) -> 'a -val ReportTime : TcConfig -> string -> unit -val abbrevFlagSet : TcConfigBuilder -> bool -> Set -val PostProcessCompilerArgs : string Set -> string [] -> string list diff --git a/src/fsharp/fsi/Fsi.fsproj b/src/fsharp/fsi/Fsi.fsproj index abf45c3c7ab..f274f221182 100644 --- a/src/fsharp/fsi/Fsi.fsproj +++ b/src/fsharp/fsi/Fsi.fsproj @@ -21,6 +21,7 @@ v3.5 true $(OtherFlags) --warnon:1182 + fsi.res diff --git a/src/fsharp/fsi/console.fs b/src/fsharp/fsi/console.fs index 54bcec08512..378249c855d 100644 --- a/src/fsharp/fsi/console.fs +++ b/src/fsharp/fsi/console.fs @@ -11,7 +11,7 @@ open Internal.Utilities /// When this fix flag is true, this byte is converted to a char using the System.Console.InputEncoding. /// This is a code-around for bug://1345. /// Fixes to System.Console.ReadKey may break this code around, hence the option here. -module ConsoleOptions = +module internal ConsoleOptions = // Bug 4254 was fixed in Dev11 (Net4.5), so this flag tracks making this fix up version specific. let fixupRequired = not FSharpEnvironment.IsRunningOnNetFx45OrAbove @@ -34,10 +34,10 @@ module ConsoleOptions = else c -type Style = Prompt | Out | Error +type internal Style = Prompt | Out | Error /// Class managing the command History. -type History() = +type internal History() = let list = new List() let mutable current = 0 @@ -72,14 +72,14 @@ type History() = /// List of available optionsCache -type Options() = +type internal Options() = inherit History() let mutable root = "" member x.Root with get() = root and set(v) = (root <- v) /// Cursor position management -module Utils = +module internal Utils = open System open System.Reflection @@ -128,7 +128,7 @@ module Utils = [] -type Cursor = +type internal Cursor = static member ResetTo(top,left) = Utils.guard(fun () -> Console.CursorTop <- min top (Console.BufferHeight - 1); @@ -139,7 +139,7 @@ type Cursor = let left = inset + position % (Console.BufferWidth - inset) Cursor.ResetTo(top,left) -type Anchor = +type internal Anchor = {top:int; left:int} static member Current(inset) = {top=Console.CursorTop;left= max inset Console.CursorLeft} @@ -149,7 +149,7 @@ type Anchor = let top = p.top + ( (p.left - inset) + index) / (Console.BufferWidth - inset) Cursor.ResetTo(top,left) -type ReadLineConsole() = +type internal ReadLineConsole() = let history = new History() let mutable complete : (string option * string -> seq) = fun (_s1,_s2) -> Seq.empty member x.SetCompletionFunction f = complete <- f diff --git a/src/fsharp/fsi/fsi.exe.config b/src/fsharp/fsi/fsi.exe.config index c74c885ae32..e058547d32d 100644 --- a/src/fsharp/fsi/fsi.exe.config +++ b/src/fsharp/fsi/fsi.exe.config @@ -9,8 +9,8 @@ publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> + oldVersion="2.0.0.0-4.4.0.0" + newVersion="4.4.0.9055"/> diff --git a/src/fsharp/fsi/fsi.fs b/src/fsharp/fsi/fsi.fs index 7b9ad81364a..9a9b7e3477a 100644 --- a/src/fsharp/fsi/fsi.fs +++ b/src/fsharp/fsi/fsi.fs @@ -34,10 +34,10 @@ open Microsoft.FSharp.Compiler.AbstractIL.ILRuntimeWriter open Microsoft.FSharp.Compiler.Interactive.Settings open Microsoft.FSharp.Compiler.Interactive.RuntimeHelpers open Microsoft.FSharp.Compiler.Lib -open Microsoft.FSharp.Compiler.Fscopts +open Microsoft.FSharp.Compiler.CompileOptions open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics open Microsoft.FSharp.Compiler.AbstractIL.IL -open Microsoft.FSharp.Compiler.Ilxgen +open Microsoft.FSharp.Compiler.IlxGen open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger @@ -45,12 +45,12 @@ open Microsoft.FSharp.Compiler.TypeChecker open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Infos open Microsoft.FSharp.Compiler.Tastops -open Microsoft.FSharp.Compiler.Opt -open Microsoft.FSharp.Compiler.Env -open Microsoft.FSharp.Compiler.Build +open Microsoft.FSharp.Compiler.Optimizer +open Microsoft.FSharp.Compiler.TcGlobals +open Microsoft.FSharp.Compiler.CompileOps open Microsoft.FSharp.Compiler.Lexhelp open Microsoft.FSharp.Compiler.Layout -open Microsoft.FSharp.Compiler.PostTypecheckSemanticChecks +open Microsoft.FSharp.Compiler.PostTypeCheckSemanticChecks open Internal.Utilities.Collections open Internal.Utilities.StructuredFormat @@ -65,7 +65,7 @@ open System.Runtime.CompilerServices [] do () -module Utilities = +module internal Utilities = type IAnyToLayoutCall = abstract AnyToLayout : FormatOptions * obj -> Internal.Utilities.StructuredFormat.Layout abstract FsiAnyToLayout : FormatOptions * obj -> Internal.Utilities.StructuredFormat.Layout @@ -91,7 +91,7 @@ let referencedAssemblies = Dictionary() //---------------------------------------------------------------------------- [] -type FsiTimeReporter(outWriter: TextWriter) = +type internal FsiTimeReporter(outWriter: TextWriter) = let stopwatch = new System.Diagnostics.Stopwatch() let ptime = System.Diagnostics.Process.GetCurrentProcess() let numGC = System.GC.MaxGeneration @@ -111,13 +111,13 @@ type FsiTimeReporter(outWriter: TextWriter) = member tr.TimeOpIf flag f = if flag then tr.TimeOp f else f () -type FsiValuePrinterMode = +type internal FsiValuePrinterMode = | PrintExpr | PrintDecl /// 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 FsiValuePrinter(ilGlobals, generateDebugInfo, resolvePath, outWriter) = +type internal FsiValuePrinter(ilGlobals, generateDebugInfo, resolvePath, outWriter) = /// This printer is used by F# Interactive if no other printers apply. let DefaultPrintingIntercept (ienv: Internal.Utilities.StructuredFormat.IEnvironment) (obj:obj) = @@ -189,10 +189,11 @@ type FsiValuePrinter(ilGlobals, generateDebugInfo, resolvePath, outWriter) = /// Get the evaluation context used when inverting the storage mapping of the ILRuntimeWriter. member __.GetEvaluationContext emEnv = + let cenv = { ilg = ilGlobals ; generatePdb = generateDebugInfo; resolvePath=resolvePath } { LookupFieldRef = ILRuntimeWriter.LookupFieldRef emEnv >> Option.get LookupMethodRef = ILRuntimeWriter.LookupMethodRef emEnv >> Option.get - LookupTypeRef = ILRuntimeWriter.LookupTypeRef emEnv >> Option.get - LookupType = ILRuntimeWriter.LookupType { ilg = ilGlobals ; generatePdb = generateDebugInfo; resolvePath=resolvePath } 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) = @@ -228,13 +229,13 @@ type FsiValuePrinter(ilGlobals, generateDebugInfo, resolvePath, outWriter) = Layout.wordL "" /// Display the signature of an F# value declaration, along with its actual value. - member valuePrinter.InvokeDeclLayout (emEnv, ilxGenerator: Ilxgen.IlxAssemblyGenerator, v:Val) = + member valuePrinter.InvokeDeclLayout (emEnv, ilxGenerator: IlxAssemblyGenerator, v:Val) = // Implemented via a lookup from v to a concrete (System.Object,System.Type). // This (obj,objTy) pair can then be fed to the fsi value printer. // Note: The value may be (null:Object). // Note: A System.Type allows the value printer guide printing of nulls, e.g. as None or []. //------- - // Ilxgen knows what the v:Val was converted to w.r.t. AbsIL datastructures. + // IlxGen knows what the v:Val was converted to w.r.t. AbsIL datastructures. // 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. @@ -284,7 +285,7 @@ type FsiValuePrinter(ilGlobals, generateDebugInfo, resolvePath, outWriter) = /// Used to make a copy of input in order to include the input when displaying the error text. -type FsiStdinSyphon(errorWriter: TextWriter) = +type internal FsiStdinSyphon(errorWriter: TextWriter) = let syphonText = new StringBuilder() /// Clears the syphon text @@ -330,7 +331,7 @@ type FsiStdinSyphon(errorWriter: TextWriter) = /// Encapsulates functions used to write to outWriter and errorWriter -type 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 @@ -347,7 +348,7 @@ type FsiConsoleOutput(tcConfigB, outWriter:TextWriter, errorWriter:TextWriter) = /// This ErrorLogger reports all warnings, but raises StopProcessing on first error or early exit -type ErrorLoggerThatStopsOnFirstError(tcConfigB:TcConfigBuilder, fsiStdinSyphon:FsiStdinSyphon, fsiConsoleOutput: FsiConsoleOutput) = +type internal ErrorLoggerThatStopsOnFirstError(tcConfigB:TcConfigBuilder, fsiStdinSyphon:FsiStdinSyphon, fsiConsoleOutput: FsiConsoleOutput) = inherit ErrorLogger("ErrorLoggerThatStopsOnFirstError") let mutable errors = 0 member x.SetError() = @@ -364,9 +365,9 @@ type ErrorLoggerThatStopsOnFirstError(tcConfigB:TcConfigBuilder, fsiStdinSyphon: override x.WarnSinkImpl(err) = DoWithErrorColor true (fun () -> - if ReportWarningAsError tcConfigB.globalWarnLevel tcConfigB.specificWarnOff tcConfigB.specificWarnOn tcConfigB.specificWarnAsError tcConfigB.specificWarnAsWarn tcConfigB.globalWarnAsError err then + if ReportWarningAsError (tcConfigB.globalWarnLevel, tcConfigB.specificWarnOff, tcConfigB.specificWarnOn, tcConfigB.specificWarnAsError, tcConfigB.specificWarnAsWarn, tcConfigB.globalWarnAsError) err then x.ErrorSinkHelper err - elif ReportWarning tcConfigB.globalWarnLevel tcConfigB.specificWarnOff tcConfigB.specificWarnOn err then + elif ReportWarning (tcConfigB.globalWarnLevel, tcConfigB.specificWarnOff, tcConfigB.specificWarnOn) err then fsiConsoleOutput.Error.WriteLine() writeViaBufferWithEnvironmentNewLines fsiConsoleOutput.Error (OutputErrorOrWarningContext " " fsiStdinSyphon.GetLine) err writeViaBufferWithEnvironmentNewLines fsiConsoleOutput.Error (OutputErrorOrWarning (tcConfigB.implicitIncludeDir,tcConfigB.showFullPaths,tcConfigB.flatErrors,tcConfigB.errorStyle,true)) err @@ -383,7 +384,7 @@ type ErrorLoggerThatStopsOnFirstError(tcConfigB:TcConfigBuilder, fsiStdinSyphon: raise StopProcessing /// Get the directory name from a string, with some defaults if it doesn't have one -let directoryName (s:string) = +let internal directoryName (s:string) = if s = "" then "." else match Path.GetDirectoryName s with @@ -398,7 +399,7 @@ let directoryName (s:string) = //---------------------------------------------------------------------------- /// Process the command line options -type FsiCommandLineOptions(argv: string[], tcConfigB, fsiConsoleOutput: FsiConsoleOutput) = +type internal FsiCommandLineOptions(argv: string[], tcConfigB, fsiConsoleOutput: FsiConsoleOutput) = let mutable enableConsoleKeyProcessing = // Mono on Win32 doesn't implement correct console processing not (runningOnMono && System.Environment.OSVersion.Platform = System.PlatformID.Win32NT) @@ -437,7 +438,7 @@ type FsiCommandLineOptions(argv: string[], tcConfigB, fsiConsoleOutput: FsiConso DisplayBannerText tcConfigB; fprintfn fsiConsoleOutput.Out "" fprintfn fsiConsoleOutput.Out "%s" (FSIstrings.SR.fsiUsage(executableFileName.Value)) - printCompilerOptionBlocks blocks + PrintCompilerOptionBlocks blocks exit 0 // option tags @@ -481,8 +482,8 @@ type FsiCommandLineOptions(argv: string[], tcConfigB, fsiConsoleOutput: FsiConso PrivateOptions( [ // Private options, related to diagnostics around console probing - CompilerOption("probeconsole","", OptionSwitch (fun flag -> probeToSeeIfConsoleWorks <- flag=On), None, None); // "Probe to see if Console looks functional"); - CompilerOption("peekahead","", OptionSwitch (fun flag -> peekAheadOnConsoleToPermitTyping <- flag=On), None, None); // "Probe to see if Console looks functional"); + 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"); ]) ] @@ -504,12 +505,12 @@ type FsiCommandLineOptions(argv: string[], tcConfigB, fsiConsoleOutput: FsiConso ]); PublicOptions(FSComp.SR.optsHelpBannerAdvanced(), [CompilerOption("exec", "", OptionUnit (fun () -> interact <- false), None, Some (FSIstrings.SR.fsiExec())); - CompilerOption("gui", tagNone, OptionSwitch(fun flag -> gui <- (flag = On)),None,Some (FSIstrings.SR.fsiGui())); + 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())); (* Renamed --readline and --no-readline to --tabcompletion:+|- *) - CompilerOption("readline", tagNone, OptionSwitch(fun flag -> enableConsoleKeyProcessing <- (flag = On)), None, Some(FSIstrings.SR.fsiReadline())); - CompilerOption("quotations-debug", tagNone, OptionSwitch(fun switch -> tcConfigB.emitDebugInfoInQuotations <- switch = On),None, Some(FSIstrings.SR.fsiEmitDebugInfoInQuotations())); - CompilerOption("shadowcopyreferences", tagNone, OptionSwitch(fun flag -> tcConfigB.shadowCopyReferences <- flag = On), None, Some(FSIstrings.SR.shadowCopyReferences())); + 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())); + CompilerOption("shadowcopyreferences", tagNone, OptionSwitch(fun flag -> tcConfigB.shadowCopyReferences <- flag = OptionSwitch.On), None, Some(FSIstrings.SR.shadowCopyReferences())); ]); ] @@ -519,12 +520,12 @@ type FsiCommandLineOptions(argv: string[], tcConfigB, fsiConsoleOutput: FsiConso /// Rather than start processing, just collect names, then process them. let sourceFiles = let collect name = - let fsx = Build.IsScript name + let fsx = CompileOps.IsScript name inputFilesAcc <- inputFilesAcc @ [(name,fsx)] // O(n^2), but n small... try let fsiCompilerOptions = fsiUsagePrefix tcConfigB @ GetCoreFsiCompilerOptions tcConfigB @ fsiUsageSuffix tcConfigB - let abbrevArgs = abbrevFlagSet tcConfigB false - ParseCompilerOptions collect fsiCompilerOptions (List.tail (PostProcessCompilerArgs abbrevArgs argv)) + let abbrevArgs = GetAbbrevFlagSet tcConfigB false + ParseCompilerOptions (collect, fsiCompilerOptions, List.tail (PostProcessCompilerArgs abbrevArgs argv)) with e -> stopProcessingRecovery e range0; exit 1; inputFilesAcc @@ -588,7 +589,7 @@ type FsiCommandLineOptions(argv: string[], tcConfigB, fsiConsoleOutput: FsiConso member __.Gui = gui /// Set the current ui culture for the current thread. -let SetCurrentUICultureForThread (lcid : int option) = +let internal SetCurrentUICultureForThread (lcid : int option) = match lcid with | Some n -> Thread.CurrentThread.CurrentUICulture <- new CultureInfo(n) | None -> () @@ -598,14 +599,14 @@ let SetCurrentUICultureForThread (lcid : int option) = // Reporting - warnings, errors //---------------------------------------------------------------------------- -let InstallErrorLoggingOnThisThread errorLogger = +let internal InstallErrorLoggingOnThisThread errorLogger = if !progress then dprintfn "Installing logger on id=%d name=%s" Thread.CurrentThread.ManagedThreadId Thread.CurrentThread.Name SetThreadErrorLoggerNoUnwind(errorLogger) SetThreadBuildPhaseNoUnwind(BuildPhase.Interactive) /// 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 SetServerCodePages(fsiOptions: FsiCommandLineOptions) = +let internal SetServerCodePages(fsiOptions: FsiCommandLineOptions) = match fsiOptions.FsiServerInputCodePage, fsiOptions.FsiServerOutputCodePage with | None,None -> () | inputCodePageOpt,outputCodePageOpt -> @@ -637,7 +638,7 @@ let SetServerCodePages(fsiOptions: FsiCommandLineOptions) = // Prompt printing //---------------------------------------------------------------------------- -type FsiConsolePrompt(fsiOptions: FsiCommandLineOptions, fsiConsoleOutput: FsiConsoleOutput) = +type internal FsiConsolePrompt(fsiOptions: FsiCommandLineOptions, fsiConsoleOutput: FsiConsoleOutput) = // 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. @@ -656,7 +657,7 @@ type FsiConsolePrompt(fsiOptions: FsiCommandLineOptions, fsiConsoleOutput: FsiCo //---------------------------------------------------------------------------- // Startup processing //---------------------------------------------------------------------------- -type FsiConsoleInput(fsiOptions: FsiCommandLineOptions, inReader: TextReader, outWriter: TextWriter) = +type internal FsiConsoleInput(fsiOptions: FsiCommandLineOptions, inReader: TextReader, outWriter: TextWriter) = let consoleLooksOperational() = if fsiOptions.ProbeToSeeIfConsoleWorks then @@ -725,16 +726,17 @@ type FsiConsoleInput(fsiOptions: FsiCommandLineOptions, inReader: TextReader, ou [] [] -type FsiDynamicCompilerState = - { optEnv : Opt.IncrementalOptimizationEnv +type internal FsiDynamicCompilerState = + { optEnv : Optimizer.IncrementalOptimizationEnv emEnv : ILRuntimeWriter.emEnv - tcGlobals : Env.TcGlobals - tcState : Build.TcState - ilxGenerator : Ilxgen.IlxAssemblyGenerator + tcGlobals : TcGlobals + tcState : TcState + ilxGenerator : IlxGen.IlxAssemblyGenerator // Why is this not in FsiOptions? - timing : bool } + timing : bool + debugBreak : bool } -let WithImplicitHome (tcConfigB, dir) f = +let internal WithImplicitHome (tcConfigB, dir) f = let old = tcConfigB.implicitIncludeDir tcConfigB.implicitIncludeDir <- dir; try f() @@ -746,7 +748,8 @@ let WithImplicitHome (tcConfigB, dir) f = /// components of the F# compiler for interactively executed fragments of code. /// /// A single instance of this object is created per interactive session. -type FsiDynamicCompiler(timeReporter : FsiTimeReporter, +type internal FsiDynamicCompiler + (timeReporter : FsiTimeReporter, tcConfigB, tcLockObject : obj, errorLogger: ErrorLoggerThatStopsOnFirstError, @@ -780,7 +783,7 @@ type FsiDynamicCompiler(timeReporter : FsiTimeReporter, /// Add attributes let CreateModuleFragment (tcConfigB, assemblyName, codegenResults) = if !progress then fprintfn fsiConsoleOutput.Out "Creating main module..."; - let mainModule = mkILSimpleModule assemblyName (fsharpModuleName tcConfigB.target assemblyName) (tcConfigB.target = Dll) tcConfigB.subsystemVersion tcConfigB.useHighEntropyVA (mkILTypeDefs codegenResults.ilTypeDefs) None None 0x0 (mkILExportedTypes []) "" + let mainModule = mkILSimpleModule assemblyName (GetGeneratedILModuleName tcConfigB.target assemblyName) (tcConfigB.target = Dll) tcConfigB.subsystemVersion tcConfigB.useHighEntropyVA (mkILTypeDefs codegenResults.ilTypeDefs) None None 0x0 (mkILExportedTypes []) "" { mainModule with Manifest = (let man = mainModule.ManifestOfAssembly @@ -796,7 +799,7 @@ type FsiDynamicCompiler(timeReporter : FsiTimeReporter, // 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 = - lock tcLockObject (fun _ -> TypecheckClosedInputSet(errorLogger.CheckForErrors,tcConfig,tcImports,tcGlobals, Some prefixPath,tcState,inputs)) + lock tcLockObject (fun _ -> TypeCheckClosedInputSet(errorLogger.CheckForErrors,tcConfig,tcImports,tcGlobals, Some prefixPath,tcState,inputs)) #if DEBUG // Logging/debugging @@ -834,9 +837,9 @@ type FsiDynamicCompiler(timeReporter : FsiTimeReporter, errorLogger.AbortOnError(); ReportTime tcConfig "ILX -> IL (Unions)"; - let ilxMainModule = EraseIlxUnions.ConvModule ilGlobals ilxMainModule + let ilxMainModule = EraseUnions.ConvModule ilGlobals ilxMainModule ReportTime tcConfig "ILX -> IL (Funcs)"; - let ilxMainModule = EraseIlxFuncs.ConvModule ilGlobals ilxMainModule + let ilxMainModule = EraseClosures.ConvModule ilGlobals ilxMainModule errorLogger.AbortOnError(); @@ -861,8 +864,12 @@ type FsiDynamicCompiler(timeReporter : FsiTimeReporter, // 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 - for bytes in codegenResults.quotationResourceBytes do - Microsoft.FSharp.Quotations.Expr.RegisterReflectedDefinitions (assemblyBuilder, fragName, bytes); + let cenv = { ilg = ilGlobals ; generatePdb = generateDebugInfo; resolvePath=resolvePath } + 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"; @@ -937,7 +944,7 @@ type FsiDynamicCompiler(timeReporter : FsiTimeReporter, let prefix = mkFragmentPath i let prefixPath = pathOfLid prefix let impl = SynModuleOrNamespace(prefix,(* isModule: *) true,defs,PreXmlDoc.Empty,[],None,rangeStdin) - let input = ParsedInput.ImplFile(ParsedImplFileInput(filename,true, QualFileNameOfUniquePath (rangeStdin,prefixPath),[],[],[impl],true (* isLastCompiland *) )) + let input = ParsedInput.ImplFile(ParsedImplFileInput(filename,true, ComputeQualifiedNameOfFileFromUniquePath (rangeStdin,prefixPath),[],[],[impl],true (* isLastCompiland *) )) let istate,tcEnvAtEndOfLastInput = ProcessInputs (istate, [input], showTypes, true, isInteractiveItExpr, prefix) let tcState = istate.tcState { istate with tcState = tcState.NextStateAfterIncrementalFragment(tcEnvAtEndOfLastInput) } @@ -955,7 +962,7 @@ type FsiDynamicCompiler(timeReporter : FsiTimeReporter, let istate = fsiDynamicCompiler.EvalParsedDefinitions (istate, false, true, defs) // Snarf the type for 'it' via the binding match istate.tcState.TcEnvFromImpls.NameEnv.FindUnqualifiedItem itName with - | Nameres.Item.Value vref -> + | NameResolution.Item.Value vref -> if not tcConfig.noFeedback then valuePrinter.InvokeExprPrinter (istate.tcState.TcEnvFromImpls.DisplayEnv, vref.Deref) @@ -980,13 +987,22 @@ type FsiDynamicCompiler(timeReporter : FsiTimeReporter, let mkBind pat expr = Binding (None, DoBinding, false, (*mutable*)false, [], PreXmlDoc.Empty, SynInfo.emptySynValData, pat, None, expr, m, NoSequencePointAtInvisibleBinding) 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) rangeStdin - let bindingB = mkBind (SynPat.Wild m) (SynExpr.App(ExprAtomicFlag.NonAtomic, false, SynExpr.LongIdent(false, LongIdentWithDots(List.map (mkSynId rangeStdin) saverPath,dots),None,m), itExp,m)) (* let _ = saverPath it *) + 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) = + 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(SequencePointInfoForBinding.NoSequencePointAtDoBinding, breakStatement, m) + member __.EvalRequireReference istate m path = if Path.IsInvalidPath(path) then error(Error(FSIstrings.SR.fsiInvalidAssembly(path),m)) @@ -1060,24 +1076,25 @@ type FsiDynamicCompiler(timeReporter : FsiTimeReporter, member __.GetInitialInteractiveState () = let tcConfig = TcConfig.Create(tcConfigB,validate=false) - let optEnv0 = InitialOptimizationEnv tcImports tcGlobals + let optEnv0 = GetInitialOptimizationEnv (tcImports, tcGlobals) let emEnv = ILRuntimeWriter.emEnv0 - let tcEnv = GetInitialTypecheckerEnv None rangeStdin tcConfig tcImports tcGlobals + let tcEnv = GetInitialTcEnv (None, rangeStdin, tcConfig, tcImports, tcGlobals) let ccuName = assemblyName - let tcState = TypecheckInitialState (rangeStdin,ccuName,tcConfig,tcGlobals,tcImports,niceNameGen,tcEnv) + let tcState = GetInitialTcState (rangeStdin, ccuName, tcConfig, tcGlobals, tcImports, niceNameGen, tcEnv) let ilxGenerator = CreateIlxAssemblyGenerator(tcConfig,tcImports,tcGlobals, (LightweightTcValForUsingInBuildMethodCall tcGlobals), tcState.Ccu ) - {optEnv = optEnv0; - emEnv = emEnv; - tcGlobals = tcGlobals; - tcState = tcState; - ilxGenerator = ilxGenerator; - timing = false; + {optEnv = optEnv0 + emEnv = emEnv + tcGlobals = tcGlobals + tcState = tcState + ilxGenerator = ilxGenerator + timing = false + debugBreak = false } -type FsiIntellisenseProvider(tcGlobals, tcImports: TcImports) = +type internal FsiIntellisenseProvider(tcGlobals, tcImports: TcImports) = let rangeStdin = rangeN Lexhelp.stdinMockFilename 0 @@ -1097,10 +1114,10 @@ type FsiIntellisenseProvider(tcGlobals, tcImports: TcImports) = let amap = tcImports.GetImportMap() let infoReader = new Infos.InfoReader(tcGlobals,amap) - let ncenv = new Nameres.NameResolver(tcGlobals,amap,infoReader,Nameres.FakeInstantiationGenerator) + let ncenv = new NameResolution.NameResolver(tcGlobals,amap,infoReader,NameResolution.FakeInstantiationGenerator) // Note: for the accessor domain we should use (AccessRightsOfEnv tcState.TcEnvFromImpls) let ad = Infos.AccessibleFromSomeFSharpCode - let nItems = Nameres.ResolvePartialLongIdent ncenv tcState.TcEnvFromImpls.NameEnv (ConstraintSolver.IsApplicableMethApprox tcGlobals amap rangeStdin) rangeStdin ad lid false + let nItems = NameResolution.ResolvePartialLongIdent ncenv tcState.TcEnvFromImpls.NameEnv (ConstraintSolver.IsApplicableMethApprox tcGlobals amap rangeStdin) rangeStdin ad lid false let names = nItems |> List.map (fun d -> d.DisplayName tcGlobals) let names = names |> List.filter (fun (name:string) -> name.StartsWith(stem,StringComparison.Ordinal)) names @@ -1122,7 +1139,7 @@ type FsiIntellisenseProvider(tcGlobals, tcImports: TcImports) = names with e -> - System.Windows.Forms.MessageBox.Show("FsiGetDeclarations: throws:\n" ^ e.ToString()) |> ignore; + System.Windows.Forms.MessageBox.Show("FsiGetDeclarations: throws:\n" ^ e.ToString()) |> ignore [| |] #endif @@ -1142,22 +1159,22 @@ module internal NativeMethods = // 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 FsiInterruptStdinState = +type internal FsiInterruptStdinState = | StdinEOFPermittedBecauseCtrlCRecentlyPressed | StdinNormal -type FsiInterruptControllerState = +type internal FsiInterruptControllerState = | InterruptCanRaiseException | InterruptIgnored -type FsiInterruptControllerKillerThreadRequest = +type internal FsiInterruptControllerKillerThreadRequest = | ThreadAbortRequest | NoRequest | ExitRequest | PrintInterruptRequest -type FsiInterruptController(fsiOptions : FsiCommandLineOptions, - fsiConsoleOutput: FsiConsoleOutput) = +type internal FsiInterruptController(fsiOptions : FsiCommandLineOptions, + fsiConsoleOutput: FsiConsoleOutput) = let mutable stdinInterruptState = StdinNormal let CTRL_C = 0 @@ -1180,33 +1197,33 @@ type FsiInterruptController(fsiOptions : FsiCommandLineOptions, // REVIEW: streamline all this code to use the same code on Windows and Posix. member controller.InstallKillThread(threadToKill:Thread, pauseMilliseconds:int) = - if !progress then fprintfn fsiConsoleOutput.Out "installing CtrlC handler"; + if !progress then fprintfn fsiConsoleOutput.Out "installing CtrlC handler" // 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. try let raiseCtrlC() = SetCurrentUICultureForThread fsiOptions.FsiLCID - fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()); - stdinInterruptState <- StdinEOFPermittedBecauseCtrlCRecentlyPressed; + fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()) + stdinInterruptState <- StdinEOFPermittedBecauseCtrlCRecentlyPressed if (interruptAllowed = InterruptCanRaiseException) then - killThreadRequest <- ThreadAbortRequest; + killThreadRequest <- ThreadAbortRequest let killerThread = new Thread(new ThreadStart(fun () -> 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 - Thread.Sleep(pauseMilliseconds); + Thread.Sleep(pauseMilliseconds) if (killThreadRequest = ThreadAbortRequest) then - if !progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()); - killThreadRequest <- NoRequest; - threadToKill.Abort(); + if !progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()) + killThreadRequest <- NoRequest + threadToKill.Abort() ()),Name="ControlCAbortThread") - killerThread.IsBackground <- true; + killerThread.IsBackground <- true killerThread.Start() let ctrlEventHandler = new NativeMethods.ControlEventHandler(fun i -> if i = CTRL_C then (raiseCtrlC(); true) else false ) - ctrlEventHandlers <- ctrlEventHandler :: ctrlEventHandlers; - ctrlEventActions <- raiseCtrlC :: ctrlEventActions; + ctrlEventHandlers <- ctrlEventHandler :: ctrlEventHandlers + ctrlEventActions <- raiseCtrlC :: ctrlEventActions let _resultOK = NativeMethods.SetConsoleCtrlHandler(ctrlEventHandler,true) false // don't exit via kill thread with e -> @@ -1218,32 +1235,32 @@ type FsiInterruptController(fsiOptions : FsiCommandLineOptions, match (try Choice1Of2(Assembly.Load("Mono.Posix, Version=2.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756")) with e -> Choice2Of2 e) with | Choice1Of2(monoPosix) -> try - if !progress then fprintfn fsiConsoleOutput.Error "loading type Mono.Unix.Native.Stdlib..."; + if !progress then fprintfn fsiConsoleOutput.Error "loading type Mono.Unix.Native.Stdlib..." let monoUnixStdlib = monoPosix.GetType("Mono.Unix.Native.Stdlib") - if !progress then fprintfn fsiConsoleOutput.Error "loading type Mono.Unix.Native.SignalHandler..."; + if !progress then fprintfn fsiConsoleOutput.Error "loading type Mono.Unix.Native.SignalHandler..." let monoUnixSignalHandler = monoPosix.GetType("Mono.Unix.Native.SignalHandler") - if !progress then fprintfn fsiConsoleOutput.Error "creating delegate..."; - controller.PosixInvoke(-1); + if !progress then fprintfn fsiConsoleOutput.Error "creating delegate..." + controller.PosixInvoke(-1) let monoHandler = System.Delegate.CreateDelegate(monoUnixSignalHandler,controller,"PosixInvoke") - if !progress then fprintfn fsiConsoleOutput.Error "registering signal handler..."; + if !progress then fprintfn fsiConsoleOutput.Error "registering signal handler..." let monoSignalNumber = System.Enum.Parse(monoPosix.GetType("Mono.Unix.Native.Signum"),"SIGINT") let register () = Utilities.callStaticMethod monoUnixStdlib "signal" [ monoSignalNumber; box monoHandler ] |> ignore - posixReinstate <- register; - register(); + posixReinstate <- register + register() let killerThread = new Thread(new ThreadStart(fun () -> SetCurrentUICultureForThread fsiOptions.FsiLCID while true do //fprintf fsiConsoleOutput.Error "\n- kill thread loop...\n"; errorWriter.Flush(); - Thread.Sleep(pauseMilliseconds*2); + Thread.Sleep(pauseMilliseconds*2) match killThreadRequest with | PrintInterruptRequest -> - fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()); fsiConsoleOutput.Error.Flush(); - killThreadRequest <- NoRequest; + fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()); fsiConsoleOutput.Error.Flush() + killThreadRequest <- NoRequest | ThreadAbortRequest -> - fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()); fsiConsoleOutput.Error.Flush(); - if !progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()); - killThreadRequest <- NoRequest; + fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiInterrupt()); fsiConsoleOutput.Error.Flush() + if !progress then fsiConsoleOutput.uprintnfn "%s" (FSIstrings.SR.fsiAbortingMainThread()) + killThreadRequest <- NoRequest threadToKill.Abort() | ExitRequest -> // Mono has some wierd behaviour where it blocks on exit @@ -1254,12 +1271,12 @@ type FsiInterruptController(fsiOptions : FsiCommandLineOptions, // // Anyway, we make "#q" work this case by setting ExitRequest and brutally calling // the process-wide 'exit' - fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiExit()); fsiConsoleOutput.Error.Flush(); + fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiExit()); fsiConsoleOutput.Error.Flush() Utilities.callStaticMethod monoUnixStdlib "exit" [ box 0 ] |> ignore | _ -> () done),Name="ControlCAbortAlternativeThread") - killerThread.IsBackground <- true; - killerThread.Start(); + killerThread.IsBackground <- true + killerThread.Start() true // exit via kill thread to workaround block-on-exit bugs with Mono once a CtrlC has been pressed with e -> fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiCouldNotInstallCtrlCHandler(e.Message)) @@ -1274,8 +1291,8 @@ type FsiInterruptController(fsiOptions : FsiCommandLineOptions, // 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 - posixReinstate(); - stdinInterruptState <- StdinEOFPermittedBecauseCtrlCRecentlyPressed; + posixReinstate() + stdinInterruptState <- StdinEOFPermittedBecauseCtrlCRecentlyPressed killThreadRequest <- if (interruptAllowed = InterruptCanRaiseException) then ThreadAbortRequest else PrintInterruptRequest @@ -1323,7 +1340,7 @@ type FsiInterruptController(fsiOptions : FsiCommandLineOptions, // // For information about contexts, see the Assembly.LoadFrom(String) method overload. -module MagicAssemblyResolution = +module internal MagicAssemblyResolution = // FxCop identifies Assembly.LoadFrom. [] let private assemblyLoadFrom (path:string) = @@ -1345,7 +1362,7 @@ module MagicAssemblyResolution = let tcConfig = TcConfig.Create(tcConfigB,validate=false) let fullAssemName = args.Name 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. @@ -1377,12 +1394,12 @@ module MagicAssemblyResolution = | OkResult (warns, [r]) -> OkResult (warns, Choice1Of2 r.resolvedPath) | _ -> - if !progress then fsiConsoleOutput.uprintfn "ATTEMPT LOAD, assemblyReferenceTextDll = %s" assemblyReferenceTextDll; + 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 -> - if !progress then fsiConsoleOutput.uprintfn "ATTEMPT MAGIC LOAD ON FILE, referencedDLL = %s" assemblyReference.Text; + 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 Some(tcImports.TryResolveAssemblyReference(assemblyReference,ResolveAssemblyReferenceMode.Speculative)) @@ -1410,20 +1427,21 @@ module MagicAssemblyResolution = let res = CommitOperationResult overallSearchResult match res with | Choice1Of2 assemblyName -> - if simpleAssemName <> "Mono.Posix" then fsiConsoleOutput.uprintfn "%s" (FSIstrings.SR.fsiBindingSessionTo(assemblyName)); + if simpleAssemName <> "Mono.Posix" then fsiConsoleOutput.uprintfn "%s" (FSIstrings.SR.fsiBindingSessionTo(assemblyName)) assemblyLoadFrom assemblyName | Choice2Of2 assembly -> assembly with e -> - stopProcessingRecovery e range0; - null)); + stopProcessingRecovery e range0 + null)) //---------------------------------------------------------------------------- // Reading stdin //---------------------------------------------------------------------------- -type FsiStdinLexerProvider(tcConfigB, fsiStdinSyphon, +type internal FsiStdinLexerProvider + (tcConfigB, fsiStdinSyphon, fsiConsoleInput : FsiConsoleInput, fsiConsoleOutput : FsiConsoleOutput, fsiOptions : FsiCommandLineOptions, @@ -1438,17 +1456,17 @@ type FsiStdinLexerProvider(tcConfigB, fsiStdinSyphon, let LexbufFromLineReader (fsiStdinSyphon: FsiStdinSyphon) readf = UnicodeLexing.FunctionAsLexbuf (fun (buf: char[], start, len) -> - //fprintf fsiConsoleOutput.Out "Calling ReadLine\n"; + //fprintf fsiConsoleOutput.Out "Calling ReadLine\n" let inputOption = try Some(readf()) with :? EndOfStreamException -> None - inputOption |> Option.iter (fun t -> fsiStdinSyphon.Add (t + "\n")); + inputOption |> Option.iter (fun t -> fsiStdinSyphon.Add (t + "\n")) match inputOption with | Some(null) | None -> - if !progress then fprintfn fsiConsoleOutput.Out "End of file from TextReader.ReadLine"; + if !progress then fprintfn fsiConsoleOutput.Out "End of file from TextReader.ReadLine" 0 | Some (input:string) -> let input = input + "\n" let ninput = input.Length - if ninput > len then fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiLineTooLong()); + if ninput > len then fprintf fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiLineTooLong()) let ntrimmed = min len ninput for i = 0 to ntrimmed-1 do buf.[i+start] <- input.[i] @@ -1467,11 +1485,11 @@ type FsiStdinLexerProvider(tcConfigB, fsiStdinSyphon, let CreateLexerForLexBuffer (sourceFileName, lexbuf) = - Lexhelp.resetLexbufPos sourceFileName lexbuf; + Lexhelp.resetLexbufPos sourceFileName lexbuf let skip = true // don't report whitespace from lexer let defines = "INTERACTIVE"::tcConfigB.conditionalCompilationDefines let lexargs = mkLexargs (sourceFileName,defines, interactiveInputLightSyntaxStatus, lexResourceManager, ref [], errorLogger) - let tokenizer = Lexfilter.LexFilter(interactiveInputLightSyntaxStatus, tcConfigB.compilingFslib, Lexer.token lexargs skip, lexbuf) + let tokenizer = LexFilter.LexFilter(interactiveInputLightSyntaxStatus, tcConfigB.compilingFslib, Lexer.token lexargs skip, lexbuf) tokenizer @@ -1487,7 +1505,7 @@ type FsiStdinLexerProvider(tcConfigB, fsiStdinSyphon, | _ -> LexbufFromLineReader fsiStdinSyphon (fun () -> fsiConsoleInput.In.ReadLine() |> removeZeroCharsFromString) - fsiStdinSyphon.Reset(); + fsiStdinSyphon.Reset() CreateLexerForLexBuffer (Lexhelp.stdinMockFilename, lexbuf) // Create a new lexer to read an "included" script file @@ -1500,14 +1518,15 @@ type FsiStdinLexerProvider(tcConfigB, fsiStdinSyphon, // It might be simpler if it ran on the parser thread. //---------------------------------------------------------------------------- -type FsiInteractionStepStatus = +type internal FsiInteractionStepStatus = | CtrlC | EndOfFile | Completed | CompletedWithReportedError -type FsiInteractionProcessor(tcConfigB, +type internal FsiInteractionProcessor + (tcConfigB, errorLogger : ErrorLoggerThatStopsOnFirstError, fsiOptions: FsiCommandLineOptions, fsiDynamicCompiler: FsiDynamicCompiler, @@ -1520,10 +1539,10 @@ type FsiInteractionProcessor(tcConfigB, let InteractiveCatch f istate = try // reset error count - errorLogger.ResetErrorCount(); + errorLogger.ResetErrorCount() f istate with e -> - stopProcessingRecovery e range0; + stopProcessingRecovery e range0 istate,CompletedWithReportedError @@ -1539,10 +1558,10 @@ type FsiInteractionProcessor(tcConfigB, /// Parse one interaction. Called on the parser thread. - let ParseInteraction (tokenizer:Lexfilter.LexFilter) = + let ParseInteraction (tokenizer:LexFilter.LexFilter) = let lastToken = ref Parser.ELSE // Any token besides SEMICOLON_SEMICOLON will do for initial value try - if !progress then fprintfn fsiConsoleOutput.Out "In ParseInteraction..."; + if !progress then fprintfn fsiConsoleOutput.Out "In ParseInteraction..." let input = Lexhelp.reusingLexbufForParsing tokenizer.LexBuffer (fun () -> @@ -1562,7 +1581,7 @@ type FsiInteractionProcessor(tcConfigB, && not tokenizer.LexBuffer.IsPastEndOfStream do tok <- tokenizer.Lexer tokenizer.LexBuffer - stopProcessingRecovery e range0; + stopProcessingRecovery e range0 None /// Execute a single parsed interaction. Called on the GUI/execute/main thread. @@ -1601,17 +1620,20 @@ type FsiInteractionProcessor(tcConfigB, | IHash (ParsedHashDirective("I",[path],m),_) -> tcConfigB.AddIncludePath (m,path, tcConfig.implicitIncludeDir) - fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiDidAHashI(tcConfig.MakePathAbsolute path)); + fsiConsoleOutput.uprintnfnn "%s" (FSIstrings.SR.fsiDidAHashI(tcConfig.MakePathAbsolute path)) istate,Completed | IHash (ParsedHashDirective("cd",[path],m),_) -> - ChangeDirectory path m; + ChangeDirectory path m istate,Completed | IHash (ParsedHashDirective("silentCd",[path],m),_) -> - ChangeDirectory path m; - fsiConsolePrompt.SkipNext(); (* "silent" directive *) - istate,Completed + ChangeDirectory path m + fsiConsolePrompt.SkipNext() (* "silent" directive *) + istate,Completed + + | IHash (ParsedHashDirective("dbgbreak",[],_),_) -> + {istate with debugBreak = true},Completed | IHash (ParsedHashDirective("time",[],_),_) -> if istate.timing then @@ -1628,20 +1650,20 @@ type FsiInteractionProcessor(tcConfigB, {istate with timing = (v = "on")},Completed | IHash (ParsedHashDirective("nowarn",numbers,m),_) -> - List.iter (fun (d:string) -> tcConfigB.TurnWarningOff(m,d)) numbers; + List.iter (fun (d:string) -> tcConfigB.TurnWarningOff(m,d)) numbers istate,Completed | IHash (ParsedHashDirective("terms",[],_),_) -> - tcConfigB.showTerms <- not tcConfig.showTerms; + tcConfigB.showTerms <- not tcConfig.showTerms istate,Completed | IHash (ParsedHashDirective("types",[],_),_) -> - fsiOptions.ShowTypes <- not fsiOptions.ShowTypes; + fsiOptions.ShowTypes <- not fsiOptions.ShowTypes istate,Completed #if DEBUG | IHash (ParsedHashDirective("ilcode",[],_m),_) -> - fsiOptions.ShowILCode <- not fsiOptions.ShowILCode; + fsiOptions.ShowILCode <- not fsiOptions.ShowILCode istate,Completed | IHash (ParsedHashDirective("info",[],_m),_) -> @@ -1651,16 +1673,16 @@ type FsiInteractionProcessor(tcConfigB, | IHash (ParsedHashDirective(("q" | "quit"),[],_),_) -> if exitViaKillThread then - fsiInterruptController.InterruptRequest <- ExitRequest; + fsiInterruptController.InterruptRequest <- ExitRequest Thread.Sleep(1000) - exit 0; + exit 0 | IHash (ParsedHashDirective("help",[],_),_) -> - fsiOptions.ShowHelp(); + fsiOptions.ShowHelp() istate,Completed | IHash (ParsedHashDirective(c,arg,_),_) -> - fsiConsoleOutput.uprintfn "%s" (FSIstrings.SR.fsiInvalidDirective(c, String.concat " " arg)); // REVIEW: uprintnfnn - like other directives above + fsiConsoleOutput.uprintfn "%s" (FSIstrings.SR.fsiInvalidDirective(c, String.concat " " arg)) // REVIEW: uprintnfnn - like other directives above istate,Completed (* REVIEW: cont = CompletedWithReportedError *) ) @@ -1670,19 +1692,37 @@ type FsiInteractionProcessor(tcConfigB, /// #directive comes through with other definitions as a SynModuleDecl.HashDirective. /// We split these out for individual processing. let rec ExecInteractions (exitViaKillThread, tcConfig, istate, action:ParsedFsiInteraction option) = - let action,nextAction = + let action,nextAction,istate = match action with - | None -> None ,None - | Some (IHash _) -> action,None - | Some (IDefns ([],_)) -> None ,None + | 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)) + Some (IHash(hash,mh)),Some (IDefns(defs,m)),istate | Some (IDefns (defs,m)) -> let isDefHash = function SynModuleDecl.HashDirective(_,_) -> true | _ -> false + let isBreakable def = + // only add automatic debugger breaks before 'let' or 'do' expressions with sequence points + match def with + | SynModuleDecl.DoExpr (SequencePointInfoForBinding.SequencePointAtBinding _, _, _) + | SynModuleDecl.Let (_, SynBinding.Binding(_, _, _, _, _, _, _, _ ,_ ,_ ,_ , SequencePointInfoForBinding.SequencePointAtBinding _) :: _, _) -> true + | _ -> false let defsA = Seq.takeWhile (isDefHash >> not) defs |> Seq.toList let defsB = Seq.skipWhile (isDefHash >> not) defs |> Seq.toList + // If user is debugging their script interactively, inject call + // to Debugger.Break() at the first "breakable" line. + // Update istate so that more Break() calls aren't injected when recursing + let defsA,istate = + if istate.debugBreak then + let preBreak = Seq.takeWhile (isBreakable >> not) defsA |> Seq.toList + let postBreak = Seq.skipWhile (isBreakable >> not) defsA |> Seq.toList + match postBreak with + | h :: _ -> preBreak @ (fsiDynamicCompiler.CreateDebuggerBreak(h.Range) :: postBreak), { istate with debugBreak = false } + | _ -> defsA, istate + else defsA,istate + // 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 = if defsA.Length <= 1 || defsB.Length > 0 then defsA else @@ -1690,7 +1730,7 @@ type FsiInteractionProcessor(tcConfigB, | SynModuleDecl.DoExpr(_,exp,_), rest -> (rest |> List.rev) @ (fsiDynamicCompiler.BuildItBinding exp) | _ -> defsA - Some (IDefns(defsA,m)),Some (IDefns(defsB,m)) + Some (IDefns(defsA,m)),Some (IDefns(defsB,m)),istate match action with | None -> assert(nextAction.IsNone); istate,Completed @@ -1734,7 +1774,7 @@ type FsiInteractionProcessor(tcConfigB, /// /// During processing of startup scripts, this runs on the main thread. - member __.ParseAndProcessAndEvalOneInteractionFromLexbuf (exitViaKillThread, runCodeOnMainThread, istate:FsiDynamicCompilerState, tokenizer:Lexfilter.LexFilter) = + member __.ParseAndProcessAndEvalOneInteractionFromLexbuf (exitViaKillThread, runCodeOnMainThread, istate:FsiDynamicCompilerState, tokenizer:LexFilter.LexFilter) = if tokenizer.LexBuffer.IsPastEndOfStream then let stepStatus = @@ -1838,12 +1878,12 @@ type FsiInteractionProcessor(tcConfigB, //type InteractionStateConverter = delegate of FsiDynamicCompilerState -> FsiDynamicCompilerState * stepStatus ///Use a dummy to access protected member -type DummyForm() = +type internal DummyForm() = inherit Form() member x.DoCreateHandle() = x.CreateHandle() /// This is the event loop implementation for winforms -type WinFormsEventLoop(fsiConsoleOutput: FsiConsoleOutput, lcid : int option) = +type internal WinFormsEventLoop(fsiConsoleOutput: FsiConsoleOutput, lcid : int option) = let mainForm = new DummyForm() do mainForm.DoCreateHandle(); // Set the default thread exception handler @@ -1892,7 +1932,7 @@ type WinFormsEventLoop(fsiConsoleOutput: FsiConsoleOutput, lcid : int option) = member x.ScheduleRestart() = restart := true; Application.Exit() -let TrySetUnhandledExceptionMode() = +let internal TrySetUnhandledExceptionMode() = let i = ref 0 // stop inlining try Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException) @@ -1905,12 +1945,13 @@ let TrySetUnhandledExceptionMode() = // Server mode: //---------------------------------------------------------------------------- -let SpawnThread name f = +let internal SpawnThread name f = let th = new Thread(new ThreadStart(f),Name=name) th.IsBackground <- true; th.Start() -let SpawnInteractiveServer (fsiOptions : FsiCommandLineOptions, +let internal SpawnInteractiveServer + (fsiOptions : FsiCommandLineOptions, fsiConsoleOutput: FsiConsoleOutput, fsiInterruptController : FsiInterruptController) = //printf "Spawning fsi server on channel '%s'" !fsiServerName; @@ -1953,7 +1994,8 @@ let SpawnInteractiveServer (fsiOptions : FsiCommandLineOptions, fprintfn fsiConsoleOutput.Error "%s" (FSIstrings.SR.fsiExceptionRaisedStartingServer(e.ToString()))) -let StartStdinReadAndProcessThread(lcid, istateRef, errorLogger, +let internal StartStdinReadAndProcessThread + (lcid, istateRef, errorLogger, fsiConsoleInput: FsiConsoleInput, fsiConsoleOutput: FsiConsoleOutput, fsiStdinLexerProvider: FsiStdinLexerProvider, @@ -2036,7 +2078,7 @@ let StartStdinReadAndProcessThread(lcid, istateRef, errorLogger, stdinReaderThread.Start(); -let DriveFsiEventLoop (fsiConsoleOutput: FsiConsoleOutput) = +let internal DriveFsiEventLoop (fsiConsoleOutput: FsiConsoleOutput) = let rec runLoop() = if !progress then fprintfn fsiConsoleOutput.Out "GUI thread runLoop"; let restart = @@ -2094,18 +2136,19 @@ type internal FsiEvaluationSession (argv:string[], inReader:TextReader, outWrite let defaultFSharpBinariesDir = System.AppDomain.CurrentDomain.BaseDirectory - let tcConfigB = Build.TcConfigBuilder.CreateNew(defaultFSharpBinariesDir, - true, // long running: optimizeForMemory - Directory.GetCurrentDirectory(),isInteractive=true, - isInvalidationSupported=false) + let tcConfigB = + TcConfigBuilder.CreateNew(defaultFSharpBinariesDir, + true, // long running: optimizeForMemory + Directory.GetCurrentDirectory(),isInteractive=true, + isInvalidationSupported=false) let tcConfigP = TcConfigProvider.BasedOnMutableBuilder(tcConfigB) do tcConfigB.resolutionEnvironment <- MSBuildResolver.RuntimeLike // See Bug 3608 do tcConfigB.useFsiAuxLib <- true // Preset: --optimize+ -g --tailcalls+ (see 4505) - do SetOptimizeSwitch tcConfigB On - do SetDebugSwitch tcConfigB (Some "pdbonly") On - do SetTailcallSwitch tcConfigB On + do SetOptimizeSwitch tcConfigB OptionSwitch.On + do SetDebugSwitch tcConfigB (Some "pdbonly") OptionSwitch.On + do SetTailcallSwitch tcConfigB OptionSwitch.On // set platform depending on whether the current process is a 64-bit process. // BUG 429882 : FsiAnyCPU.exe issues warnings (x64 v MSIL) when referencing 64-bit assemblies @@ -2119,7 +2162,6 @@ type internal FsiEvaluationSession (argv:string[], inReader:TextReader, outWrite do InstallErrorLoggingOnThisThread errorLogger // FSI error logging on main thread. let updateBannerText() = - // See bug 6071 for product banner spec tcConfigB.productNameForBannerText <- FSIstrings.SR.fsiProductName(FSharpEnvironment.DotNetBuildString) do updateBannerText() // setting the correct banner so that 'fsi -?' display the right thing @@ -2191,7 +2233,8 @@ type internal FsiEvaluationSession (argv:string[], inReader:TextReader, outWrite do MagicAssemblyResolution.Install(tcConfigB, tcImports, fsiDynamicCompiler, fsiConsoleOutput) /// This reference cell holds the most recent interactive state - let istateRef = ref (fsiDynamicCompiler.GetInitialInteractiveState ()) + let initialInteractiveState = fsiDynamicCompiler.GetInitialInteractiveState () + let istateRef = ref initialInteractiveState let fsiStdinLexerProvider = FsiStdinLexerProvider(tcConfigB, fsiStdinSyphon, fsiConsoleInput, fsiConsoleOutput, fsiOptions, lexResourceManager, errorLogger) diff --git a/src/fsharp/fsi/fsi.ico b/src/fsharp/fsi/fsi.ico new file mode 100644 index 00000000000..236615e8764 Binary files /dev/null and b/src/fsharp/fsi/fsi.ico differ diff --git a/src/fsharp/fsi/fsi.rc b/src/fsharp/fsi/fsi.rc new file mode 100644 index 00000000000..8bb21ca2758 --- /dev/null +++ b/src/fsharp/fsi/fsi.rc @@ -0,0 +1,5 @@ +// compile fsi.res by running Windows SDK tool rc.exe like so +// > rc.exe /i "C:\Program Files (x86)\MSBuild\12.0\Bin" /r fsi.rc +// (can replace msbuild path with any path containing default.win32manifest) +1 ICON "fsi.ico" +1 24 "default.win32manifest" \ No newline at end of file diff --git a/src/fsharp/fsi/fsi.res b/src/fsharp/fsi/fsi.res new file mode 100644 index 00000000000..e651be6745c Binary files /dev/null and b/src/fsharp/fsi/fsi.res differ diff --git a/src/fsharp/fsi/fsiAnyCPU.exe.config b/src/fsharp/fsi/fsiAnyCPU.exe.config index c74c885ae32..e058547d32d 100644 --- a/src/fsharp/fsi/fsiAnyCPU.exe.config +++ b/src/fsharp/fsi/fsiAnyCPU.exe.config @@ -9,8 +9,8 @@ publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> + oldVersion="2.0.0.0-4.4.0.0" + newVersion="4.4.0.9055"/> diff --git a/src/fsharp/fsiAnyCpu/FsiAnyCPU.fsproj b/src/fsharp/fsiAnyCpu/FsiAnyCPU.fsproj index 989161ee48e..20717e5716a 100644 --- a/src/fsharp/fsiAnyCpu/FsiAnyCPU.fsproj +++ b/src/fsharp/fsiAnyCpu/FsiAnyCPU.fsproj @@ -7,20 +7,17 @@ Debug - - anycpu + AnyCPU {8b3e283d-b5fe-4055-9d80-7e3a32f3967b} Exe $(NoWarn);62 - fsiAnyCpu + FsiAnyCPU 0x0A000000 EXTENSIONTYPING;COMPILER;$(DefineConstants) v3.5 true $(OtherFlags) --warnon:1182 + ..\fsi\fsi.res diff --git a/src/fsharp/import.fs b/src/fsharp/import.fs index 1f42cdb7d1d..3dea89d0779 100644 --- a/src/fsharp/import.fs +++ b/src/fsharp/import.fs @@ -1,19 +1,22 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +/// Functions to import .NET binary metadata as TAST objects module internal Microsoft.FSharp.Compiler.Import +#nowarn "44" // This construct is deprecated. please use List.item + open System.Reflection open System.Collections.Generic open Internal.Utilities + open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library open Microsoft.FSharp.Compiler - open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.AbstractIL.IL -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Ast open Microsoft.FSharp.Compiler.ErrorLogger #if EXTENSIONTYPING @@ -50,7 +53,7 @@ type AssemblyLoader = /// /// There is normally only one ImportMap for any assembly compilation, though additional instances can be created /// using tcImports.GetImportMap() if needed, and it is not harmful if multiple instances are used. The object -/// serves as an interface through to the tables stored in the primary TcImports structures defined in build.fs. +/// serves as an interface through to the tables stored in the primary TcImports structures defined in CompileOps.fs. [] type ImportMap(g:TcGlobals,assemblyLoader:AssemblyLoader) = let typeRefToTyconRefCache = new System.Collections.Generic.Dictionary() @@ -58,6 +61,16 @@ type ImportMap(g:TcGlobals,assemblyLoader:AssemblyLoader) = member this.assemblyLoader = assemblyLoader member this.ILTypeRefToTyconRefCache = typeRefToTyconRefCache +let CanImportILScopeRef (env:ImportMap) m scoref = + match scoref with + | ILScopeRef.Local -> true + | ILScopeRef.Module _ -> true + | ILScopeRef.Assembly assref -> + match env.assemblyLoader.LoadAssembly (m,assref) with + | UnresolvedCcu _ -> false + | ResolvedCcu _ -> true + + /// Import a reference to a type definition, given the AbstractIL data for the type reference let ImportTypeRefData (env:ImportMap) m (scoref,path,typeName) = let ccu = @@ -89,7 +102,7 @@ let ImportTypeRefData (env:ImportMap) m (scoref,path,typeName) = () #endif match tryRescopeEntity ccu tycon with - | None -> error (Error(FSComp.SR.impImportedAssemblyUsesNotPublicType(String.concat "." (Array.toList path@[typeName])),m)); + | None -> error (Error(FSComp.SR.impImportedAssemblyUsesNotPublicType(String.concat "." (Array.toList path@[typeName])),m)) | Some tcref -> tcref @@ -121,6 +134,10 @@ let ImportILTypeRef (env:ImportMap) m (tref:ILTypeRef) = env.ILTypeRefToTyconRefCache.[tref] <- tcref tcref +/// Import a reference to a type definition, given an AbstractIL ILTypeRef, with caching +let CanImportILTypeRef (env:ImportMap) m (tref:ILTypeRef) = + env.ILTypeRefToTyconRefCache.ContainsKey(tref) || CanImportILScopeRef env m tref.Scope + /// Import a type, given an AbstractIL ILTypeRef and an F# type instantiation. /// /// Prefer the F# abbreviation for some built-in types, e.g. 'string' rather than @@ -157,6 +174,19 @@ let rec ImportILType (env:ImportMap) m tinst typ = with _ -> error(Error(FSComp.SR.impNotEnoughTypeParamsInScopeWhileImporting(),m)) +let rec CanImportILType (env:ImportMap) m typ = + match typ with + | ILType.Void -> true + | ILType.Array(_bounds,ty) -> CanImportILType env m ty + | ILType.Boxed tspec | ILType.Value tspec -> + CanImportILTypeRef env m tspec.TypeRef + && tspec.GenericArgs |> ILList.toList |> List.forall (CanImportILType env m) + | ILType.Byref ty -> CanImportILType env m ty + | ILType.Ptr ty -> CanImportILType env m ty + | ILType.FunctionPointer _ -> true + | ILType.Modified(_,_,ty) -> CanImportILType env m ty + | ILType.TypeVar _u16 -> true + #if EXTENSIONTYPING /// Import a provided type reference as an F# type TyconRef @@ -363,7 +393,7 @@ let ImportILGenericParameters amap m scoref tinst (gps: ILGenericParameterDefs) let constraints = if gp.HasReferenceTypeConstraint then (TyparConstraint.IsReferenceType(m)::constraints) else constraints let constraints = if gp.HasNotNullableValueTypeConstraint then (TyparConstraint.IsNonNullableStruct(m)::constraints) else constraints let constraints = if gp.HasDefaultConstructorConstraint then (TyparConstraint.RequiresDefaultConstructor(m)::constraints) else constraints - tp.FixupConstraints constraints); + tp.FixupConstraints constraints) tps @@ -387,7 +417,7 @@ let multisetDiscriminateAndMap nodef tipf (items: ('Key list * 'Value) list) = match keylist with | [] -> () | key::rest -> - buckets.[key] <- (rest,v) :: (if buckets.ContainsKey key then buckets.[key] else []); + buckets.[key] <- (rest,v) :: (if buckets.ContainsKey key then buckets.[key] else []) [ for (KeyValue(key,items)) in buckets -> nodef key items ] @@ -395,10 +425,10 @@ let multisetDiscriminateAndMap nodef tipf (items: ('Key list * 'Value) list) = /// Import an IL type definition as a new F# TAST Entity node. -let rec ImportILTypeDef amap m scoref cpath enc nm (tdef:ILTypeDef) = +let rec ImportILTypeDef amap m scoref (cpath:CompilationPath) enc nm (tdef:ILTypeDef) = let lazyModuleOrNamespaceTypeForNestedTypes = lazy - let cpath = mkNestedCPath cpath nm ModuleOrType + let cpath = cpath.NestedCompPath nm ModuleOrType ImportILTypeDefs amap m scoref cpath (enc@[tdef]) tdef.NestedTypes // Add the type itself. NewILTycon @@ -413,7 +443,7 @@ let rec ImportILTypeDef amap m scoref cpath enc nm (tdef:ILTypeDef) = /// Import a list of (possibly nested) IL types as a new ModuleOrNamespaceType node /// containing new entities, bucketing by namespace along the way. -and ImportILTypeDefList amap m cpath enc items = +and ImportILTypeDefList amap m (cpath:CompilationPath) enc items = // Split into the ones with namespaces and without. Add the ones with namespaces in buckets. // That is, discriminate based in the first element of the namespace list (e.g. "System") // and, for each bag, fold-in a lazy computation to add the types under that bag . @@ -426,7 +456,7 @@ and ImportILTypeDefList amap m cpath enc items = items |> multisetDiscriminateAndMap (fun n tgs -> - let modty = lazy (ImportILTypeDefList amap m (mkNestedCPath cpath n Namespace) enc tgs) + let modty = lazy (ImportILTypeDefList amap m (cpath.NestedCompPath n Namespace) enc tgs) NewModuleOrNamespace (Some cpath) taccessPublic (mkSynId m n) XmlDoc.Empty [] modty) (fun (n,info:Lazy<_>) -> let (scoref2,_,lazyTypeDef:Lazy) = info.Force() @@ -483,7 +513,7 @@ let ImportILAssemblyTypeDefs (amap, m, auxModLoader, aref, mainmod:ILModuleDef) let scoref = ILScopeRef.Assembly aref let mtypsForExportedTypes = ImportILAssemblyExportedTypes amap m auxModLoader scoref mainmod.ManifestOfAssembly.ExportedTypes let mainmod = ImportILAssemblyMainTypeDefs amap m scoref mainmod - combineModuleOrNamespaceTypeList [] m (mainmod :: mtypsForExportedTypes) + CombineCcuContentFragments m (mainmod :: mtypsForExportedTypes) /// Import the type forwarder table for an IL assembly let ImportILAssemblyTypeForwarders (amap, m, exportedTypes:ILExportedTypesAndForwarders) = @@ -515,19 +545,19 @@ let ImportILAssembly(amap:(unit -> ImportMap),m,auxModuleLoader,sref,sourceDir,f | _ -> error(InternalError("ImportILAssembly: cannot reference .NET netmodules directly, reference the containing assembly instead",m)) let nm = aref.Name let mty = ImportILAssemblyTypeDefs(amap,m,auxModuleLoader,aref,ilModule) - let ccuData = - { IsFSharp=false; - UsesQuotations=false; + let ccuData : CcuData = + { IsFSharp=false + UsesFSharp20PlusQuotations=false #if EXTENSIONTYPING - InvalidateEvent=invalidateCcu; - IsProviderGenerated = false; + InvalidateEvent=invalidateCcu + IsProviderGenerated = false ImportProvidedType = (fun ty -> ImportProvidedType (amap()) m ty) #endif - QualifiedName= Some sref.QualifiedName; - Contents = NewCcuContents sref m nm mty ; - ILScopeRef = sref; - Stamp = newStamp(); - SourceCodeDirectory = sourceDir; // note: not an accurate value, but IL assemblies don't give us this information in any attributes. + QualifiedName= Some sref.QualifiedName + Contents = NewCcuContents sref m nm mty + ILScopeRef = sref + Stamp = newStamp() + SourceCodeDirectory = sourceDir // note: not an accurate value, but IL assemblies don't give us this information in any attributes. FileName = filename MemberSignatureEquality= (fun ty1 ty2 -> Tastops.typeEquivAux EraseAll (amap()).g ty1 ty2) TypeForwarders = diff --git a/src/fsharp/import.fsi b/src/fsharp/import.fsi index ebb62d2c1ed..cb98038cd80 100644 --- a/src/fsharp/import.fsi +++ b/src/fsharp/import.fsi @@ -1,8 +1,10 @@ // Copyright (c) Microsoft Open Technologies, Inc. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. +/// Functions to import .NET binary metadata as TAST objects module internal Microsoft.FSharp.Compiler.Import open Microsoft.FSharp.Compiler.Tast +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.Range open Microsoft.FSharp.Compiler.AbstractIL.IL #if EXTENSIONTYPING @@ -34,23 +36,29 @@ type AssemblyLoader = /// /// There is normally only one ImportMap for any assembly compilation, though additional instances can be created /// using tcImports.GetImportMap() if needed, and it is not harmful if multiple instances are used. The object -/// serves as an interface through to the tables stored in the primary TcImports structures defined in build.fs. +/// serves as an interface through to the tables stored in the primary TcImports structures defined in CompileOps.fs. [] type ImportMap = - new : g:Env.TcGlobals * assemblyLoader:AssemblyLoader -> ImportMap + new : g:TcGlobals * assemblyLoader:AssemblyLoader -> ImportMap /// The AssemblyLoader for the import context member assemblyLoader : AssemblyLoader /// The TcGlobals for the import context - member g : Env.TcGlobals + member g : TcGlobals /// Import a reference to a type definition, given an AbstractIL ILTypeRef, with caching val internal ImportILTypeRef : ImportMap -> range -> ILTypeRef -> TyconRef +/// Pre-check for ability to import a reference to a type definition, given an AbstractIL ILTypeRef, with caching +val internal CanImportILTypeRef : ImportMap -> range -> ILTypeRef -> bool + /// Import an IL type as an F# type. val internal ImportILType : ImportMap -> range -> TType list -> ILType -> TType +/// Pre-check for ability to import an IL type as an F# type. +val internal CanImportILType : ImportMap -> range -> ILType -> bool + #if EXTENSIONTYPING /// Import a provided type as an F# type. diff --git a/src/fsharp/infos.fs b/src/fsharp/infos.fs index 78581bfdf0b..31ebb9b6a1f 100644 --- a/src/fsharp/infos.fs +++ b/src/fsharp/infos.fs @@ -19,7 +19,7 @@ open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Tast open Microsoft.FSharp.Compiler.Tastops open Microsoft.FSharp.Compiler.Tastops.DebugPrint -open Microsoft.FSharp.Compiler.Env +open Microsoft.FSharp.Compiler.TcGlobals open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.Lib open Microsoft.FSharp.Core.Printf @@ -36,6 +36,9 @@ open Microsoft.FSharp.Core.CompilerServices let ImportType scoref amap m importInst ilty = ilty |> rescopeILType scoref |> Import.ImportILType amap m importInst +let CanImportType scoref amap m ilty = + ilty |> rescopeILType scoref |> Import.CanImportILType amap m + //------------------------------------------------------------------------- // Fold the hierarchy. // REVIEW: this code generalizes the iteration used below for member lookup. @@ -86,17 +89,21 @@ let GetSuperTypeOfType g amap m typ = /// Make a type for System.Collections.Generic.IList let mkSystemCollectionsGenericIListTy g ty = TType_app(g.tcref_System_Collections_Generic_IList,[ty]) +[] +/// Indicates whether we can skip interface types that lie outside the reference set +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 g amap m typ = +let rec GetImmediateInterfacesOfType skipUnref g amap m typ = let itys = if isAppTy g typ then let tcref,tinst = destAppTy g typ if tcref.IsMeasureableReprTycon then [ match tcref.TypeReprInfo with | TMeasureableRepr reprTy -> - for ity in GetImmediateInterfacesOfType g amap m reprTy do + for ity in GetImmediateInterfacesOfType skipUnref g amap m reprTy do if isAppTy g ity then let itcref = tcrefOfAppTy g ity if not (tyconRefEq g itcref g.system_GenericIComparable_tcref) && @@ -113,7 +120,18 @@ let rec GetImmediateInterfacesOfType g amap m typ = yield Import.ImportProvidedType amap m ity ] #endif | ILTypeMetadata (scoref,tdef) -> - tdef.Implements |> ILList.toList |> List.map (ImportType scoref amap m tinst) + + // ImportType 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. + [ for ity in tdef.Implements |> ILList.toList do + if skipUnref = SkipUnrefInterfaces.No || CanImportType scoref amap m ity then + yield ImportType scoref amap m tinst ity ] + | FSharpOrArrayOrByrefOrTupleOrExnTypeMetadata -> tcref.ImmediateInterfaceTypesOfFSharpTycon |> List.map (instType (mkInstForAppTy g typ)) else @@ -133,7 +151,7 @@ type AllowMultiIntfInstantiations = Yes | No /// Traverse the type hierarchy, e.g. f D (f C (f System.Object acc)). /// Visit base types and interfaces first. -let private FoldHierarchyOfTypeAux followInterfaces allowMultiIntfInst visitor g amap m typ acc = +let private FoldHierarchyOfTypeAux followInterfaces allowMultiIntfInst skipUnref visitor g amap m typ acc = let rec loop ndeep typ ((visitedTycon,visited:TyconRefMultiMap<_>,acc) as state) = let seenThisTycon = isAppTy g typ && Set.contains (tcrefOfAppTy g typ).Stamp visitedTycon @@ -157,7 +175,7 @@ let private FoldHierarchyOfTypeAux followInterfaces allowMultiIntfInst visitor g if isInterfaceTy g typ then List.foldBack (loop (ndeep+1)) - (GetImmediateInterfacesOfType g amap m typ) + (GetImmediateInterfacesOfType skipUnref g amap m typ) (loop ndeep g.obj_ty state) elif isTyparTy g typ then let tp = destTyparTy g typ @@ -186,7 +204,7 @@ let private FoldHierarchyOfTypeAux followInterfaces allowMultiIntfInst visitor g if followInterfaces then List.foldBack (loop (ndeep+1)) - (GetImmediateInterfacesOfType g amap m typ) + (GetImmediateInterfacesOfType skipUnref g amap m typ) state else state @@ -200,22 +218,25 @@ let private FoldHierarchyOfTypeAux followInterfaces allowMultiIntfInst visitor g (visitedTycon,visited,acc) loop 0 typ (Set.empty,TyconRefMultiMap<_>.Empty,acc) |> p33 -/// Fold, do not follow interfaces -let FoldPrimaryHierarchyOfType f g amap m allowMultiIntfInst typ acc = FoldHierarchyOfTypeAux false allowMultiIntfInst f g amap m typ acc +/// Fold, do not follow interfaces (unless the type is itself an interface) +let FoldPrimaryHierarchyOfType f g amap m allowMultiIntfInst typ acc = + FoldHierarchyOfTypeAux false allowMultiIntfInst SkipUnrefInterfaces.No f g amap m typ acc -/// Fold, following interfaces -let FoldEntireHierarchyOfType f g amap m allowMultiIntfInst typ acc = FoldHierarchyOfTypeAux true allowMultiIntfInst f g amap m typ acc +/// Fold, following interfaces. Skipping interfaces that lie outside the referenced assembly set is allowed. +let FoldEntireHierarchyOfType f g amap m allowMultiIntfInst typ acc = + FoldHierarchyOfTypeAux true allowMultiIntfInst SkipUnrefInterfaces.Yes f g amap m typ acc -/// Iterate, following interfaces -let IterateEntireHierarchyOfType f g amap m allowMultiIntfInst typ = FoldHierarchyOfTypeAux true allowMultiIntfInst (fun ty () -> f ty) g amap m typ () +/// Iterate, following interfaces. Skipping interfaces that lie outside the referenced assembly set is allowed. +let IterateEntireHierarchyOfType f g amap m allowMultiIntfInst typ = + FoldHierarchyOfTypeAux true allowMultiIntfInst SkipUnrefInterfaces.Yes (fun ty () -> f ty) g amap m typ () /// Search for one element satisfying a predicate, following interfaces let ExistsInEntireHierarchyOfType f g amap m allowMultiIntfInst typ = - FoldHierarchyOfTypeAux true allowMultiIntfInst (fun ty acc -> acc || f ty ) g amap m typ false + FoldHierarchyOfTypeAux true allowMultiIntfInst SkipUnrefInterfaces.Yes (fun ty acc -> acc || f ty ) g amap m typ false /// Search for one element where a function returns a 'Some' result, following interfaces let SearchEntireHierarchyOfType f g amap m typ = - FoldHierarchyOfTypeAux true AllowMultiIntfInstantiations.No + FoldHierarchyOfTypeAux true AllowMultiIntfInstantiations.Yes SkipUnrefInterfaces.Yes (fun ty acc -> match acc with | None -> if f ty then Some(ty) else None @@ -224,7 +245,7 @@ let SearchEntireHierarchyOfType f g amap m typ = /// Get all super types of the type, including the type itself let AllSuperTypesOfType g amap m allowMultiIntfInst ty = - FoldHierarchyOfTypeAux true allowMultiIntfInst (ListSet.insert (typeEquiv g)) g amap m ty [] + FoldHierarchyOfTypeAux true allowMultiIntfInst SkipUnrefInterfaces.No (ListSet.insert (typeEquiv g)) g amap m ty [] /// Get all interfaces of a type, including the type itself if it is an interface let AllInterfacesOfType g amap m allowMultiIntfInst ty = @@ -243,11 +264,11 @@ let HasHeadType g tcref ty2 = /// Check if a type exists somewhere in the hierarchy which has the same head type as the given type (note, the given type need not have a head type at all) let ExistsSameHeadTypeInHierarchy g amap m typeToSearchFrom typeToLookFor = - ExistsInEntireHierarchyOfType (HaveSameHeadType g typeToLookFor) g amap m AllowMultiIntfInstantiations.No typeToSearchFrom + ExistsInEntireHierarchyOfType (HaveSameHeadType g typeToLookFor) g amap m AllowMultiIntfInstantiations.Yes typeToSearchFrom /// Check if a type exists somewhere in the hierarchy which has the given head type. let ExistsHeadTypeInEntireHierarchy g amap m typeToSearchFrom tcrefToLookFor = - ExistsInEntireHierarchyOfType (HasHeadType g tcrefToLookFor) g amap m AllowMultiIntfInstantiations.No typeToSearchFrom + ExistsInEntireHierarchyOfType (HasHeadType g tcrefToLookFor) g amap m AllowMultiIntfInstantiations.Yes typeToSearchFrom /// Read an Abstract IL type from metadata and convert to an F# type. @@ -474,6 +495,12 @@ type OptionalArgInfo = else NotOptional +[] +type ReflectedArgInfo = + | None + | Quote of bool + member x.AutoQuote = match x with None -> false | Quote _ -> true + //------------------------------------------------------------------------- // ParamNameAndType, ParamData @@ -490,8 +517,8 @@ type ParamNameAndType = [] /// Full information about a parameter returned for use by the type checker and language service. type ParamData = - /// ParamData(isParamArray, isOut, optArgInfo, nameOpt, ttype) - ParamData of bool * bool * OptionalArgInfo * string option * TType + /// ParamData(isParamArray, isOut, optArgInfo, nameOpt, reflArgInfo, ttype) + ParamData of bool * bool * OptionalArgInfo * string option * ReflectedArgInfo * TType //------------------------------------------------------------------------- @@ -726,7 +753,7 @@ type ILMethInfo = member x.IsDllImport g = match g.attrib_DllImportAttribute with | None -> false - | Some (AttribInfo(tref,_)) ->x.RawMetadata.CustomAttrs |> TryDecodeILAttribute g tref (Some tref.Scope) |> isSome + | Some (AttribInfo(tref,_)) ->x.RawMetadata.CustomAttrs |> TryDecodeILAttribute g tref |> isSome /// Get the (zero or one) 'self'/'this'/'object' arguments associated with an IL method. /// An instance extension method returns one object argument. @@ -800,6 +827,22 @@ type MethInfo = | FSMeth(_,_,vref,_) when x.IsExtensionMember -> vref.TopValActualParent | _ -> tcrefOfAppTy x.TcGlobals x.EnclosingType + /// Get the information about provided static parameters, if any + member x.ProvidedStaticParameterInfo = + match x with + | ILMeth _ -> None + | FSMeth _ -> None +#if EXTENSIONTYPING + | ProvidedMeth (_, mb, _, m) -> + let staticParams = mb.PApplyWithProvider((fun (mb,provider) -> mb.GetStaticParametersForMethod(provider)), range=m) + let staticParams = staticParams.PApplyArray(id, "GetStaticParameters", m) + match staticParams with + | [| |] -> None + | _ -> Some (mb,staticParams) +#endif + | DefaultStructCtor _ -> None + + /// Get the extension method priority of the method, if it has one. member x.ExtensionMemberPriorityOption = match x with @@ -1189,20 +1232,29 @@ type MethInfo = | ILMeth(g,ilMethInfo,_) -> [ [ 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 + | Some ([ILAttribElem.Bool b ],_) -> ReflectedArgInfo.Quote b + | Some _ -> ReflectedArgInfo.Quote false + | _ -> ReflectedArgInfo.None let isOutArg = (p.IsOut && not p.IsIn) // Note: we get default argument values from VB and other .NET language metadata let optArgInfo = OptionalArgInfo.FromILParameter g amap m ilMethInfo.MetadataScope ilMethInfo.DeclaringTypeInst p - yield (isParamArrayArg, isOutArg, optArgInfo) ] ] + yield (isParamArrayArg, isOutArg, optArgInfo, reflArgInfo) ] ] | FSMeth(g,_,vref,_) -> GetArgInfosOfMember x.IsCSharpStyleExtensionMember g vref |> List.mapSquared (fun (ty,argInfo) -> let isParamArrayArg = HasFSharpAttribute g g.attrib_ParamArrayAttribute argInfo.Attribs + let reflArgInfo = + match TryFindFSharpBoolAttributeAssumeFalse g g.attrib_ReflectedDefinitionAttribute argInfo.Attribs with + | Some b -> ReflectedArgInfo.Quote b + | None -> ReflectedArgInfo.None let isOutArg = HasFSharpAttribute g g.attrib_OutAttribute argInfo.Attribs && isByrefTy g ty let isOptArg = HasFSharpAttribute g g.attrib_OptionalArgumentAttribute argInfo.Attribs // Note: can't specify caller-side default arguments in F#, by design (default is specified on the callee-side) let optArgInfo = if isOptArg then CalleeSide else NotOptional - (isParamArrayArg,isOutArg,optArgInfo)) + (isParamArrayArg, isOutArg, optArgInfo, reflArgInfo)) | DefaultStructCtor _ -> [[]] @@ -1213,7 +1265,12 @@ type MethInfo = [ [for p in mi.PApplyArray((fun mi -> mi.GetParameters()), "GetParameters", m) do let isParamArrayArg = p.PUntaint((fun px -> (px :> IProvidedCustomAttributeProvider).GetAttributeConstructorArgs(p.TypeProvider.PUntaintNoFailure(id), typeof.FullName).IsSome),m) let optArgInfo = OptionalArgInfoOfProvidedParameter amap m p - yield (isParamArrayArg, p.PUntaint((fun p -> p.IsOut), m), optArgInfo)] ] + let reflArgInfo = + match p.PUntaint((fun px -> (px :> IProvidedCustomAttributeProvider).GetAttributeConstructorArgs(p.TypeProvider.PUntaintNoFailure(id), typeof.FullName)),m) with + | Some ([ Some (:? bool as b) ], _) -> ReflectedArgInfo.Quote b + | Some _ -> ReflectedArgInfo.Quote false + | None -> ReflectedArgInfo.None + yield (isParamArrayArg, p.PUntaint((fun p -> p.IsOut), m), optArgInfo, reflArgInfo)] ] #endif @@ -1312,8 +1369,8 @@ type MethInfo = #endif let paramAttribs = x.GetParamAttribs(amap, m) - (paramAttribs,paramNamesAndTypes) ||> List.map2 (List.map2 (fun (isParamArrayArg,isOutArg,optArgInfo) (ParamNameAndType(nmOpt,pty)) -> - ParamData(isParamArrayArg,isOutArg,optArgInfo,nmOpt,pty))) + (paramAttribs,paramNamesAndTypes) ||> List.map2 (List.map2 (fun (isParamArrayArg,isOutArg,optArgInfo,reflArgInfo) (ParamNameAndType(nmOpt,pty)) -> + ParamData(isParamArrayArg,isOutArg,optArgInfo,nmOpt,reflArgInfo,pty))) /// Select all the type parameters of the declaring type of a method. @@ -1821,7 +1878,7 @@ type PropInfo = /// Get the details of the indexer parameters associated with the property member x.GetParamDatas(amap,m) = x.GetParamNamesAndTypes(amap,m) - |> List.map (fun (ParamNameAndType(nm,pty)) -> ParamData(false,false,NotOptional,nm, pty)) + |> List.map (fun (ParamNameAndType(nmOpt,pty)) -> ParamData(false, false, NotOptional, nmOpt, ReflectedArgInfo.None, pty)) /// Get the types of the indexer parameters associated with the property member x.GetParamTypes(amap,m) = @@ -2480,29 +2537,6 @@ exception ObsoleteError of string * range /// formats. module AttributeChecking = - /// Analyze three cases for attributes declared on type definitions: IL-declared attributes, F#-declared attributes and - /// provided attributes. - // - // This is used for AttributeUsageAttribute, DefaultMemberAttribute and ConditionalAttribute (on attribute types) - let TryBindTyconRefAttribute g m (AttribInfo (atref,_) as args) (tcref:TyconRef) f1 f2 f3 = - ignore m; ignore f3 - match metadataOfTycon tcref.Deref with -#if EXTENSIONTYPING - | ProvidedTypeMetadata info -> - let provAttribs = info.ProvidedType.PApply((fun a -> (a :> IProvidedCustomAttributeProvider)),m) - match provAttribs.PUntaint((fun a -> a.GetAttributeConstructorArgs(provAttribs.TypeProvider.PUntaintNoFailure(id), atref.FullName)),m) with - | Some args -> f3 args - | None -> None -#endif - | ILTypeMetadata (_,tdef) -> - match TryDecodeILAttribute g atref (Some(atref.Scope)) tdef.CustomAttrs with - | Some attr -> f1 attr - | _ -> None - | FSharpOrArrayOrByrefOrTupleOrExnTypeMetadata -> - match TryFindFSharpAttribute g args tcref.Attribs with - | Some attr -> f2 attr - | _ -> None - /// Analyze three cases for attributes declared on methods: IL-declared attributes, F#-declared attributes and /// provided attributes. let BindMethInfoAttributes m minfo f1 f2 f3 = @@ -2524,7 +2558,7 @@ module AttributeChecking = ignore f3 #endif BindMethInfoAttributes m minfo - (fun ilAttribs -> TryDecodeILAttribute g atref (Some(atref.Scope)) ilAttribs |> Option.bind f1) + (fun ilAttribs -> TryDecodeILAttribute g atref ilAttribs |> Option.bind f1) (fun fsAttribs -> TryFindFSharpAttribute g attribSpec fsAttribs |> Option.bind f2) #if EXTENSIONTYPING (fun provAttribs -> @@ -2542,7 +2576,7 @@ module AttributeChecking = TryBindMethInfoAttribute g m attribSpec minfo (function ([ILAttribElem.String (Some msg) ],_) -> Some msg | _ -> None) (function (Attrib(_,_,[ AttribStringArg msg ],_,_,_,_)) -> Some msg | _ -> None) - (function [ Some ((:? string as msg) : obj) ] -> Some msg | _ -> None) + (function ([ Some ((:? string as msg) : obj) ],_) -> Some msg | _ -> None) /// Check if a method has a specific attribute. let MethInfoHasAttribute g m attribSpec minfo = @@ -2552,28 +2586,12 @@ module AttributeChecking = (fun _ -> Some ()) |> Option.isSome - /// 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) - let TryFindTyconRefStringAttribute g m attribSpec tcref = - TryBindTyconRefAttribute g m attribSpec tcref - (function ([ILAttribElem.String (Some(msg)) ],_) -> Some msg | _ -> None) - (function (Attrib(_,_,[ AttribStringArg(msg) ],_,_,_,_)) -> Some msg | _ -> None) - (function [ Some ((:? string as msg) : obj) ] -> Some msg | _ -> None) - - /// Check if a type definition has a specific attribute - let TyconRefHasAttribute g m attribSpec tcref = - TryBindTyconRefAttribute g m attribSpec tcref - (fun _ -> Some ()) - (fun _ -> Some ()) - (fun _ -> Some ()) - |> Option.isSome /// Check IL attributes for 'ObsoleteAttribute', returning errors and warnings as data let private CheckILAttributes g cattrs m = let (AttribInfo(tref,_)) = g.attrib_SystemObsolete - match TryDecodeILAttribute g tref (Some(tref.Scope)) cattrs with + match TryDecodeILAttribute g tref cattrs with | Some ([ILAttribElem.String (Some msg) ],_) -> WarnD(ObsoleteWarning(msg,m)) | Some ([ILAttribElem.String (Some msg); ILAttribElem.Bool isError ],_) -> @@ -2641,13 +2659,13 @@ module AttributeChecking = let private CheckProvidedAttributes g m (provAttribs: Tainted) = let (AttribInfo(tref,_)) = g.attrib_SystemObsolete match provAttribs.PUntaint((fun a -> a.GetAttributeConstructorArgs(provAttribs.TypeProvider.PUntaintNoFailure(id), tref.FullName)),m) with - | Some [ Some (:? string as msg) ] -> WarnD(ObsoleteWarning(msg,m)) - | Some [ Some (:? string as msg); Some (:?bool as isError) ] -> + | Some ([ Some (:? string as msg) ], _) -> WarnD(ObsoleteWarning(msg,m)) + | Some ([ Some (:? string as msg); Some (:?bool as isError) ], _) -> if isError then ErrorD (ObsoleteError(msg,m)) else WarnD (ObsoleteWarning(msg,m)) - | Some [ None ] -> + | Some ([ None ], _) -> WarnD(ObsoleteWarning("",m)) | Some _ -> WarnD(ObsoleteWarning("",m)) @@ -2658,7 +2676,7 @@ module AttributeChecking = /// Indicate if a list of IL attributes contains 'ObsoleteAttribute'. Used to suppress the item in intellisense. let CheckILAttributesForUnseen g cattrs _m = let (AttribInfo(tref,_)) = g.attrib_SystemObsolete - isSome (TryDecodeILAttribute g tref (Some(tref.Scope)) cattrs) + isSome (TryDecodeILAttribute g tref cattrs) /// Checks the attributes for CompilerMessageAttribute, which has an IsHidden argument that allows /// items to be suppressed from intellisense. @@ -2999,7 +3017,7 @@ type PropertyCollector(g,amap,m,typ,optFilter,ad) = else props.[pinfo] <- pinfo - member x.Collect(membInfo,vref:ValRef) = + member x.Collect(membInfo:ValMemberInfo,vref:ValRef) = match membInfo.MemberFlags.MemberKind with | MemberKind.PropertyGet -> let pinfo = FSProp(g,typ,Some vref,None) @@ -3127,8 +3145,8 @@ type InfoReader(g:TcGlobals, amap:Import.ImportMap) = infos /// Make a reference to a record or class field - let MakeRecdFieldInfo g typ tcref fspec = - RecdFieldInfo(argsOfAppTy g typ,mkNestedRecdFieldRef tcref fspec) + let MakeRecdFieldInfo g typ (tcref:TyconRef) fspec = + RecdFieldInfo(argsOfAppTy g typ,tcref.MakeNestedRecdFieldRef fspec) /// Get the F#-declared record fields or class 'val' fields of a type let GetImmediateIntrinsicRecdOrClassFieldsOfType (optFilter,_ad) _m typ = @@ -3157,13 +3175,13 @@ type InfoReader(g:TcGlobals, amap:Import.ImportMap) = FoldPrimaryHierarchyOfType (fun typ acc -> GetImmediateIntrinsicPropInfosOfType (optFilter,ad) g amap m typ :: acc) g amap m allowMultiIntfInst typ [] let GetIntrinsicILFieldInfosUncached ((optFilter,ad),m,typ) = - FoldPrimaryHierarchyOfType (fun typ acc -> GetImmediateIntrinsicILFieldsOfType (optFilter,ad) m typ @ acc) g amap m AllowMultiIntfInstantiations.No typ [] + FoldPrimaryHierarchyOfType (fun typ acc -> GetImmediateIntrinsicILFieldsOfType (optFilter,ad) m typ @ acc) g amap m AllowMultiIntfInstantiations.Yes typ [] let GetIntrinsicEventInfosUncached ((optFilter,ad),m,typ) = - FoldPrimaryHierarchyOfType (fun typ acc -> GetImmediateIntrinsicEventsOfType (optFilter,ad) m typ @ acc) g amap m AllowMultiIntfInstantiations.No typ [] + FoldPrimaryHierarchyOfType (fun typ acc -> GetImmediateIntrinsicEventsOfType (optFilter,ad) m typ @ acc) g amap m AllowMultiIntfInstantiations.Yes typ [] let GetIntrinsicRecdOrClassFieldInfosUncached ((optFilter,ad),m,typ) = - FoldPrimaryHierarchyOfType (fun typ acc -> GetImmediateIntrinsicRecdOrClassFieldsOfType (optFilter,ad) m typ @ acc) g amap m AllowMultiIntfInstantiations.No typ [] + FoldPrimaryHierarchyOfType (fun typ acc -> GetImmediateIntrinsicRecdOrClassFieldsOfType (optFilter,ad) m typ @ acc) g amap m AllowMultiIntfInstantiations.Yes typ [] let GetEntireTypeHierachyUncached (allowMultiIntfInst,m,typ) = FoldEntireHierarchyOfType (fun typ acc -> typ :: acc) g amap m allowMultiIntfInst typ [] @@ -3194,7 +3212,7 @@ type InfoReader(g:TcGlobals, amap:Import.ImportMap) = | _ -> failwith "Unexpected multiple fields with the same name" // Because an explicit name (i.e., nm) was supplied, there will be only one element at most. | _ -> acc) g amap m - AllowMultiIntfInstantiations.No + AllowMultiIntfInstantiations.Yes typ None @@ -3536,12 +3554,12 @@ let TryFindIntrinsicNamedItemOfType (infoReader:InfoReader) (nm,ad) findFlag m t /// -- getting the Dispose method when resolving the 'use' construct /// -- getting the various methods used to desugar the computation expression syntax let TryFindIntrinsicMethInfo infoReader m ad nm ty = - GetIntrinsicMethInfosOfType infoReader (Some nm,ad,AllowMultiIntfInstantiations.No) IgnoreOverrides m ty + GetIntrinsicMethInfosOfType infoReader (Some nm,ad,AllowMultiIntfInstantiations.Yes) IgnoreOverrides m ty /// Try to find a particular named property on a type. Only used to ensure that local 'let' definitions and property names /// are distinct, a somewhat adhoc check in tc.fs. let TryFindPropInfo infoReader m ad nm ty = - GetIntrinsicPropInfosOfType infoReader (Some nm,ad,AllowMultiIntfInstantiations.No) IgnoreOverrides m ty + GetIntrinsicPropInfosOfType infoReader (Some nm,ad,AllowMultiIntfInstantiations.Yes) IgnoreOverrides m ty //------------------------------------------------------------------------- // Helpers related to delegates and events @@ -3558,7 +3576,7 @@ let GetSigOfFunctionForDelegate (infoReader:InfoReader) delty m ad = let g = infoReader.g let amap = infoReader.amap let invokeMethInfo = - match GetIntrinsicMethInfosOfType infoReader (Some "Invoke",ad,AllowMultiIntfInstantiations.No) IgnoreOverrides m delty with + match GetIntrinsicMethInfosOfType infoReader (Some "Invoke",ad,AllowMultiIntfInstantiations.Yes) IgnoreOverrides m delty with | [h] -> h | [] -> error(Error(FSComp.SR.noInvokeMethodsFound (),m)) | h :: _ -> warning(InternalError(FSComp.SR.moreThanOneInvokeMethodFound (),m)); h diff --git a/src/fsharp/layout.fs b/src/fsharp/layout.fs index 48ee99d9c2d..d3614f31c43 100644 --- a/src/fsharp/layout.fs +++ b/src/fsharp/layout.fs @@ -18,28 +18,25 @@ let spaces n = new String(' ',n) //-------------------------------------------------------------------------- let rec juxtLeft = function - Leaf (jl,_text,_jr) -> jl + | Leaf (jl,_text,_jr) -> jl | Node (jl,_l,_jm,_r,_jr,_joint) -> jl | Attr (_tag,_attrs,l) -> juxtLeft l let rec juxtRight = function - Leaf (_jl,_text,jr) -> jr + | Leaf (_jl,_text,jr) -> jr | Node (_jl,_l,_jm,_r,jr,_joint) -> jr | Attr (_tag,_attrs,l) -> juxtRight l -(* NOTE: - * emptyL might be better represented as a constructor, - * so then (Sep"") would have true meaning - *) +// NOTE: emptyL might be better represented as a constructor, so then (Sep"") would have true meaning let emptyL = Leaf (true,box "",true) let isEmptyL = function Leaf(true,tag,true) when unbox tag = "" -> true | _ -> false let mkNode l r joint = if isEmptyL l then r else if isEmptyL r then l else - let jl = juxtLeft l in - let jm = juxtRight l || juxtLeft r in - let jr = juxtRight r in + let jl = juxtLeft l + let jm = juxtRight l || juxtLeft r + let jr = juxtRight r Node(jl,l,jm,r,jr,joint) @@ -53,14 +50,8 @@ let rightL (str:string) = Leaf (true ,box str,false) let leftL (str:string) = Leaf (false,box str,true) let aboveL l r = mkNode l r (Broken 0) -let joinN i l r = mkNode l r (Breakable i) -let join = joinN 0 -let join1 = joinN 1 -let join2 = joinN 2 -let join3 = joinN 3 let tagAttrL str attrs ly = Attr (str,attrs,ly) -let linkL str ly = tagAttrL "html:a" [("href",str)] ly //-------------------------------------------------------------------------- //INDEX: constructors derived @@ -96,12 +87,12 @@ let sepListL x y = tagListL (fun prefixL -> prefixL ^^ x) y let bracketL l = leftL "(" ^^ l ^^ rightL ")" let tupleL xs = bracketL (sepListL (sepL ",") xs) let aboveListL = function - [] -> emptyL + | [] -> emptyL | [x] -> x | x::ys -> List.fold (fun pre y -> pre @@ y) x ys let optionL xL = function - None -> wordL "None" + | None -> wordL "None" | Some x -> wordL "Some" -- (xL x) let listL xL xs = leftL "[" ^^ sepListL (sepL ";") (List.map xL xs) ^^ rightL "]" @@ -219,20 +210,17 @@ let squashTo maxWidth layout = layout //-------------------------------------------------------------------------- -//INDEX: render +//INDEX: LayoutRenderer //-------------------------------------------------------------------------- -type render<'a,'b> = - (* exists 'b. - -- could use object type to get "exists 'b" on private state, - *) - abstract Start : unit -> 'b; - abstract AddText : 'b -> string -> 'b; - abstract AddBreak : 'b -> int -> 'b; - abstract AddTag : 'b -> string * (string * string) list * bool -> 'b; +type LayoutRenderer<'a,'b> = + abstract Start : unit -> 'b + abstract AddText : 'b -> string -> 'b + abstract AddBreak : 'b -> int -> 'b + abstract AddTag : 'b -> string * (string * string) list * bool -> 'b abstract Finish : 'b -> 'a -let renderL (rr: render<_,_>) layout = +let renderL (rr: LayoutRenderer<_,_>) layout = let rec addL z pos i layout k = match layout with (* pos is tab level *) @@ -262,7 +250,7 @@ let renderL (rr: render<_,_>) layout = /// string render let stringR = - { new render with + { new LayoutRenderer with member x.Start () = [] member x.AddText rstrs text = text::rstrs member x.AddBreak rstrs n = (spaces n) :: "\n" :: rstrs @@ -272,9 +260,9 @@ let stringR = type NoState = NoState type NoResult = NoResult -/// channel render +/// channel LayoutRenderer let channelR (chan:TextWriter) = - { new render with + { new LayoutRenderer with member r.Start () = NoState member r.AddText z s = chan.Write s; z member r.AddBreak z n = chan.WriteLine(); chan.Write (spaces n); z @@ -283,40 +271,13 @@ let channelR (chan:TextWriter) = /// buffer render let bufferR os = - { new render with + { new LayoutRenderer with member r.Start () = NoState member r.AddText z s = bprintf os "%s" s; 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 } -/// html render - wraps HTML encoding (REVIEW) and hyperlinks -let htmlR (baseR : render<'Res,'State>) = - { new render<'Res,'State> with - member r.Start () = baseR.Start() - member r.AddText z s = baseR.AddText z s; (* REVIEW: escape HTML chars *) - member r.AddBreak z n = baseR.AddBreak z n - member r.AddTag z (tag,attrs,start) = - match tag,attrs with - | "html:a",[("href",link)] -> - if start - then baseR.AddText z (sprintf "" link) - else baseR.AddText z (sprintf "") - | _ -> z - member r.Finish z = baseR.Finish z } - -/// indent render - wraps fixed indentation -let indentR indent (baseR : render<'Res,'State>) = - { new render<'Res,'State> with - member r.Start () = - let z = baseR.Start() - let z = baseR.AddText z (spaces indent) - z - member r.AddText z s = baseR.AddText z s; (* REVIEW: escape HTML chars *) - member r.AddBreak z n = baseR.AddBreak z (n+indent); - member r.AddTag z (tag,attrs,start) = baseR.AddTag z (tag,attrs,start) - member r.Finish z = baseR.Finish z } - //-------------------------------------------------------------------------- //INDEX: showL, outL are most common //-------------------------------------------------------------------------- diff --git a/src/fsharp/layout.fsi b/src/fsharp/layout.fsi index e5070926a99..b3671ab1039 100644 --- a/src/fsharp/layout.fsi +++ b/src/fsharp/layout.fsi @@ -39,32 +39,28 @@ val aboveListL : Layout list -> Layout val optionL : ('a -> Layout) -> 'a option -> Layout val listL : ('a -> Layout) -> 'a list -> Layout -val linkL : string -> Layout -> Layout - val squashTo : int -> Layout -> Layout val showL : Layout -> string val outL : TextWriter -> Layout -> unit val bufferL : StringBuilder -> Layout -> unit -(* render a Layout yielding an 'a using a 'b (hidden state) type *) -type ('a,'b) render = - abstract Start : unit -> 'b; - abstract AddText : 'b -> string -> 'b; - abstract AddBreak : 'b -> int -> 'b; - abstract AddTag : 'b -> string * (string * string) list * bool -> 'b; +/// render a Layout yielding an 'a using a 'b (hidden state) type +type LayoutRenderer<'a,'b> = + abstract Start : unit -> 'b + abstract AddText : 'b -> string -> 'b + abstract AddBreak : 'b -> int -> 'b + abstract AddTag : 'b -> string * (string * string) list * bool -> 'b abstract Finish : 'b -> 'a -(* Run a render on a Layout *) -val renderL : ('b,'a) render -> Layout -> 'b - -(* Primitive renders *) -val stringR : (string,string list) render type NoState = NoState type NoResult = NoResult -val channelR : TextWriter -> (NoResult,NoState) render -val bufferR : StringBuilder -> (NoResult,NoState) render -(* Combinator renders *) -val htmlR : ('a,'b) render -> ('a,'b) render (* assumes in
 context *)
-val indentR  : int -> ('a,'b) render -> ('a,'b) render
+/// Run a render on a Layout       
+val renderL  : LayoutRenderer<'b,'a> -> Layout -> 'b
+
+/// Primitive renders 
+val stringR  : LayoutRenderer
+val channelR : TextWriter -> LayoutRenderer
+val bufferR  : StringBuilder -> LayoutRenderer
+
diff --git a/src/fsharp/lex.fsl b/src/fsharp/lex.fsl
index 36234663702..de4dfc84c25 100644
--- a/src/fsharp/lex.fsl
+++ b/src/fsharp/lex.fsl
@@ -124,7 +124,7 @@ let startString args (lexbuf: UnicodeLexing.Lexbuf) =
                             BYTEARRAY (Lexhelp.stringBufferAsBytes buf)
                         )
                      else
-                        STRING (System.Text.Encoding.Unicode.GetString(s,0,s.Length)))  
+                        STRING (Lexhelp.stringBufferAsString s))  
     buf,fin,m
              
 // Utility functions for processing XML documentation 
@@ -149,15 +149,17 @@ let shouldStartFile args lexbuf (m:range) err tok =
     if (m.StartColumn <> 0 || m.StartLine <> 1) then fail args lexbuf err tok
     else tok
     
-let extractIdentFromHashIf (lexed:string) =
-    // Skip the '#if' token, then trim whitespace, then find the end of the identifier
-    let lexed = lexed.Trim()      
-    let trimIf = lexed.Substring(3).Trim() 
-    let identEnd = trimIf.IndexOfAny([| ' '; '\t'; '/' |]) 
-    let identEnd = (if identEnd = -1 then trimIf.Length else identEnd)
-    trimIf.Substring(0, identEnd)
-} 
+let evalIfDefExpression startPos args (lookup:string->bool) (lexed:string) =
+    let lexbuf          = LexBuffer.FromChars (lexed.ToCharArray ())
+    lexbuf.StartPos     <- startPos
+    lexbuf.EndPos       <- startPos
+    let tokenStream     = Microsoft.FSharp.Compiler.PPLexer.tokenstream args
 
+    let expr            = Microsoft.FSharp.Compiler.PPParser.start tokenStream lexbuf
+
+    LexerIfdefEval lookup expr
+
+}
 let letter = '\Lu' | '\Ll' | '\Lt' | '\Lm' | '\Lo' | '\Nl'
 let surrogateChar = '\Cs'
 let digit = '\Nd'
@@ -165,6 +167,8 @@ let hex = ['0'-'9'] | ['A'-'F'] | ['a'-'f']
 let truewhite = [' ']
 let offwhite = ['\t']
 let anywhite = truewhite | offwhite
+let anychar = [^'\n''\r']
+let anystring = anychar*
 let op_char = '!'|'$'|'%'|'&'|'*'|'+'|'-'|'.'|'/'|'<'|'='|'>'|'?'|'@'|'^'|'|'|'~'|':'
 let ignored_op_char = '.' | '$' | '?'
 let xinteger = 
@@ -406,10 +410,9 @@ rule token args skip = parse
  | '\'' hexGraphShort '\'' { CHAR (char (int32 (hexGraphShort (lexemeTrimBoth lexbuf 3 1)))) }
  | '\'' unicodeGraphShort '\'' { CHAR (char (int32 (unicodeGraphShort (lexemeTrimBoth lexbuf 3 1)))) }
  | '\'' unicodeGraphLong '\''  
-     { let hi,lo = unicodeGraphLong (lexemeTrimBoth lexbuf 3 1) 
-       match hi with 
-       | None -> CHAR (char lo)
-       | Some _ -> fail args lexbuf  (FSComp.SR.lexThisUnicodeOnlyInStringLiterals()) (CHAR (char lo)) }
+     { match unicodeGraphLong (lexemeTrimBoth lexbuf 3 1) with
+       | SingleChar(c) -> CHAR (char c)
+       | _ -> fail args lexbuf  (FSComp.SR.lexThisUnicodeOnlyInStringLiterals()) (CHAR (char 0)) }
  | "(*IF-FSHARP"    
      { if not skip then (COMMENT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf }
  | "(*F#"            
@@ -597,15 +600,16 @@ rule token args skip = parse
      mlCompatWarning (FSComp.SR.lexIndentOffForML()) lexbuf.LexemeRange;
      if not skip then (HASH_LIGHT (LexCont.Token !args.ifdefStack)) else token args skip lexbuf } 
    
- | anywhite* "#if" anywhite+ ident anywhite* ("//" [^'\n''\r']*)?
+ | anywhite* "#if" anywhite+ anystring
    { let m = lexbuf.LexemeRange   
+     let lookup id = List.mem id args.defines
      let lexed = lexeme lexbuf
-     let id = extractIdentFromHashIf lexed
+     let isTrue = evalIfDefExpression lexbuf.StartPos args lookup lexed
      args.ifdefStack := (IfDefIf,m) :: !(args.ifdefStack);
      
      // Get the token; make sure it starts at zero position & return
      let cont, f = 
-       ( if List.mem id args.defines then (LexCont.EndLine(LexerEndlineContinuation.Token(!args.ifdefStack)), endline (LexerEndlineContinuation.Token !args.ifdefStack) args skip)
+       ( if isTrue then (LexCont.EndLine(LexerEndlineContinuation.Token(!args.ifdefStack)), endline (LexerEndlineContinuation.Token !args.ifdefStack) args skip)
          else (LexCont.EndLine(LexerEndlineContinuation.Skip(!args.ifdefStack,0,m)), endline (LexerEndlineContinuation.Skip(!args.ifdefStack,0,m)) args skip) )         
      let tok = shouldStartLine args lexbuf m (FSComp.SR.lexHashIfMustBeFirst()) (HASH_IF(m,lexed,cont))
      if not skip then tok else f lexbuf }
@@ -646,9 +650,8 @@ rule token args skip = parse
 // Skips INACTIVE code until if finds #else / #endif matching with the #if or #else 
 
 and ifdefSkip n m args skip = parse               
- | anywhite* "#if" anywhite+ ident anywhite* ("//" [^'\n''\r']*)?
+ | anywhite* "#if" anywhite+ anystring
    { let m = lexbuf.LexemeRange    
-     let _id = extractIdentFromHashIf (lexeme lexbuf) 
      
      // 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
@@ -721,7 +724,7 @@ and endline cont args skip = parse
    }
  | [^'\r' '\n']+
  | _
-   { let tok = fail args lexbuf (FSComp.SR.lexExpectedSingleLineComment()) (WHITESPACE (LexCont.Token !args.ifdefStack))
+   { let tok = fail args lexbuf (FSComp.SR.pplexExpectedSingleLineComment()) (WHITESPACE (LexCont.Token !args.ifdefStack))
      if not skip then tok else token args skip lexbuf }     
 
 and string sargs skip = parse
@@ -752,11 +755,19 @@ and string sargs skip = parse
       if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m)))  else string sargs skip lexbuf  }
      
  | unicodeGraphLong
-    { let (buf,_fin,m,args) = sargs 
-      let hi,lo = unicodeGraphLong (lexemeTrimLeft lexbuf 2) 
-      (match hi with | None -> () | Some c -> addUnicodeChar buf (int c));
-      addUnicodeChar buf (int lo);
-      if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf  }
+    { let (buf,_fin,m,args) = sargs
+      let hexChars = lexemeTrimLeft lexbuf 2
+      let result () = if not skip then (STRING_TEXT (LexCont.String(!args.ifdefStack,m))) else string sargs skip lexbuf
+      match unicodeGraphLong hexChars with
+      | Invalid ->
+          fail args lexbuf (FSComp.SR.lexInvalidUnicodeLiteral hexChars) (result ())
+      | SingleChar(c) ->
+          addUnicodeChar buf (int c)
+          result ()
+      | SurrogatePair(hi, lo) -> 
+          addUnicodeChar buf (int hi)
+          addUnicodeChar buf (int lo)
+          result () }
      
  |  '"' 
     { let (buf,fin,_m,_args) = sargs 
diff --git a/src/fsharp/lexhelp.fs b/src/fsharp/lexhelp.fs
index 21d7a63f121..08db08e8e7d 100644
--- a/src/fsharp/lexhelp.fs
+++ b/src/fsharp/lexhelp.fs
@@ -56,6 +56,12 @@ type lexargs =
       lightSyntaxStatus : LightSyntaxStatus;
       errorLogger: ErrorLogger }
 
+/// possible results of lexing a long unicode escape sequence in a string literal, e.g. "\UDEADBEEF"
+type LongUnicodeLexResult =
+    | SurrogatePair of uint16 * uint16
+    | SingleChar of uint16
+    | Invalid
+
 let mkLexargs (_filename,defines,lightSyntaxStatus,resourceManager,ifdefStack,errorLogger) =
     { defines = defines;
       ifdefStack= ifdefStack;
@@ -97,6 +103,16 @@ let addIntChar (buf: ByteBuffer) c =
 let addUnicodeChar buf c = addIntChar buf (int c)
 let addByteChar buf (c:char) = addIntChar buf (int32 c % 256)
 
+let stringBufferAsString (buf: byte[]) =
+    if buf.Length % 2 <> 0 then failwith "Expected even number of bytes";
+    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 c = char (((int hi) * 256) + (int lo))
+        chars.[i] <- c
+    System.String(chars)
+
 /// When lexing bytearrays we don't expect to see any unicode stuff. 
 /// Likewise when lexing string constants we shouldn't see any trigraphs > 127 
 /// So to turn the bytes collected in the string buffer back into a bytearray 
@@ -143,11 +159,16 @@ let unicodeGraphLong (s:string) =
     if s.Length <> 8 then failwith "unicodeGraphLong";
     let high = hexdigit s.[0] * 4096 + hexdigit s.[1] * 256 + hexdigit s.[2] * 16 + hexdigit s.[3] in 
     let low = hexdigit s.[4] * 4096 + hexdigit s.[5] * 256 + hexdigit s.[6] * 16 + hexdigit s.[7] in 
-    if high = 0 then None, uint16 low 
-    else 
-      (* A surrogate pair - see http://www.unicode.org/unicode/uni2book/ch03.pdf, section 3.7 *)
-      Some (uint16 (0xD800 + ((high * 0x10000 + low - 0x10000) / 0x400))),
-      uint16 (0xDC00 + ((high * 0x10000 + low - 0x10000) % 0x400))
+    // not a surrogate pair
+    if high = 0 then SingleChar(uint16 low)
+    // invalid encoding
+    elif high > 0x10 then Invalid
+    // valid surrogate pair - see http://www.unicode.org/unicode/uni2book/ch03.pdf, section 3.7 *)
+    else
+      let codepoint = high * 0x10000 + low
+      let hiSurr = uint16 (0xD800 + ((codepoint - 0x10000) / 0x400))
+      let loSurr = uint16 (0xDC00 + ((codepoint - 0x10000) % 0x400))
+      SurrogatePair(hiSurr, loSurr)
 
 let escape c = 
     match c with
diff --git a/src/fsharp/lexhelp.fsi b/src/fsharp/lexhelp.fsi
index 69a4671b056..8202c3da675 100644
--- a/src/fsharp/lexhelp.fsi
+++ b/src/fsharp/lexhelp.fsi
@@ -33,6 +33,11 @@ type lexargs =
     lightSyntaxStatus: LightSyntaxStatus;
     errorLogger: ErrorLogger}
 
+type LongUnicodeLexResult =
+    | SurrogatePair of uint16 * uint16
+    | SingleChar of uint16
+    | Invalid
+
 val resetLexbufPos : string -> UnicodeLexing.Lexbuf -> unit
 val mkLexargs : 'a * string list * LightSyntaxStatus * LexResourceManager * LexerIfdefStack * ErrorLogger -> lexargs
 val reusingLexbufForParsing : UnicodeLexing.Lexbuf -> (unit -> 'a) -> 'a 
@@ -43,6 +48,7 @@ val internal callStringFinisher : ('a -> 'b -> byte[] -> 'c) -> AbstractIL.Inter
 val internal addUnicodeString : AbstractIL.Internal.ByteBuffer -> string -> unit
 val internal addUnicodeChar : AbstractIL.Internal.ByteBuffer -> int -> unit
 val internal addByteChar : AbstractIL.Internal.ByteBuffer -> char -> unit
+val internal stringBufferAsString : byte[] -> string
 val internal stringBufferAsBytes : AbstractIL.Internal.ByteBuffer -> byte[]
 val internal stringBufferIsBytes : AbstractIL.Internal.ByteBuffer -> bool
 val internal newline : Lexing.LexBuffer<'a> -> unit
@@ -51,7 +57,7 @@ val internal digit : char -> int32
 val internal hexdigit : char -> int32
 val internal unicodeGraphShort : string -> uint16
 val internal hexGraphShort : string -> uint16
-val internal unicodeGraphLong : string -> uint16 option * uint16
+val internal unicodeGraphLong : string -> LongUnicodeLexResult
 val internal escape : char -> char
 
 exception internal ReservedKeyword of string * Range.range
diff --git a/src/fsharp/lib.fs b/src/fsharp/lib.fs
index ee5d2818c69..60c705d1b92 100644
--- a/src/fsharp/lib.fs
+++ b/src/fsharp/lib.fs
@@ -88,48 +88,6 @@ module NameMap =
     let domainL m = Zset.elements (domain m)
 
 
-(*
-
-//-------------------------------------------------------------------------
-// Library: Atoms
-//------------------------------------------------------------------------
-
-type AtomTable = 
-    { LookupTable : Dictionary
-      EncodeTable : Dictionary }
-    member at.Encode(name:string) = 
-        let mutable res = 0 
-        let idx = 
-            if at.EncodeTable.TryGetValue(name, &res) then 
-                res
-            else
-                let idx = at.EncodeTable.Count
-                at.LookupTable.[idx] <- name
-                at.EncodeTable.[name] <- idx
-                idx
-        Atom(res
-#if DEBUG
-             ,at
-#endif
-            )
-
-
-and Atom internal (idx:int32
-#if DEBUG
-                   ,_provider:AtomTable
-#endif
-                   ) =
-    member __.Index = idx
-    member __.Deref(provider: AtomTable) = 
-       
-#if DEBUG
-        assert (provider = _provider)
-        assert (provider.LookupTable.ContainsKey idx)
-#endif
-        provider.LookupTable.[idx]
-*)            
-
-    
 
 //---------------------------------------------------------------------------
 // Library: Pre\Post checks
@@ -383,53 +341,6 @@ type Graph<'Data, 'Id when 'Id : comparison and 'Id : equality>
             else List.iter (trace (node.nodeData::path)) node.nodeNeighbours
         List.iter (fun node -> trace [] node) nodes 
 
-#if OLDCODE
-
-    member g.DepthFirstSearch() = 
-        let grey = ref Set.empty 
-        let time = ref 0
-        let forest = ref []
-        let backEdges = ref []
-        let discoveryTimes = ref Map.empty 
-        let finishingTimes = ref Map.empty 
-        nodes |> List.iter (fun n ->  
-            // build a dfsTree for each node in turn 
-            let treeEdges = ref []
-            let rec visit n1 = 
-                incr time;
-                grey := Set.add n1.nodeId !grey;
-                discoveryTimes := Map.add n1.nodeId !time !discoveryTimes;
-                for n2 in n1.nodeNeighbours do
-                    if not ((!grey).Contains n2.nodeId) then 
-                        treeEdges := (n1.nodeId,n2.nodeId) :: !treeEdges;
-                        visit(n2)
-                    else 
-                        backEdges := (n1.nodeId,n2.nodeId) :: !backEdges
-                incr time;
-                finishingTimes := Map.add n1.nodeId !time !finishingTimes;
-                ()
-            if not ((!grey).Contains n.nodeId) then 
-                visit(n);
-                forest := (n.nodeId,!treeEdges) :: !forest);
-
-        !forest, !backEdges,  (fun n -> (!discoveryTimes).[n]), (fun n -> (!finishingTimes).[n])
- 
-
-    // Present strongly connected components, in dependency order 
-    // Each node is assumed to have a self-edge 
-    member g.GetTopologicalSortStronglyConnectedComponents() = 
-        let forest, backEdges, discoveryTimes, finishingTimes = g.DepthFirstSearch()
-        let nodeIds = List.map (fun n -> n.nodeId) nodes
-        let nodesInDecreasingFinishingOrder = 
-          List.sortWith (fun n1 n2 -> -(compare (finishingTimes n1) (finishingTimes n2))) nodeIds
-        let gT = Graph (nodeIdentity, List.map g.GetNodeData nodesInDecreasingFinishingOrder, List.map (fun (x,y) -> (g.GetNodeData y, g.GetNodeData x)) edges)
-        let forest, backEdges, discoveryTimes, finishingTimes = gT.DepthFirstSearch()
-        let scc (root,tree) = Set.add root (List.foldBack (fun (n1,n2) acc -> Set.add n1 (Set.add n2 acc)) tree Set.empty)
-        let sccs = List.rev (List.map scc forest)
-        List.map (Set.toList >> List.map g.GetNodeData) sccs
-#endif
-
-
 //---------------------------------------------------------------------------
 // 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.
@@ -481,7 +392,7 @@ let inline cacheOptRef cache f =
 // and goes depending on whether components are NGEN'd or not, e.g. 'ngen install FSharp.COmpiler.dll'
 // One workaround for the bug is to break NGEN loading and fixups into smaller fragments. Roughly speaking, the NGEN
 // loading process works by doing delayed fixups of references in NGEN code. This happens on a per-method
-// basis. For example, one manifestation is that a "print" before calling a method like Lexfilter.create gets
+// basis. For example, one manifestation is that a "print" before calling a method like LexFilter.create gets
 // displayed but the corresponding "print" in the body of that function doesn't get displayed. In between, the NGEN
 // image loader is performing a whole bunch of fixups of the NGEN code for the body of that method, and also for
 // bodies of methods referred to by that method. That second bit is very important: the fixup causing the crash may
diff --git a/src/fsharp/outcome.fs b/src/fsharp/outcome.fs
deleted file mode 100644
index d2a348d455f..00000000000
--- a/src/fsharp/outcome.fs
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-// --------------------------------------------------------------------	
-// Outcomes.  These are used to describe steps of a machine that
-// may raise errors.  The errors can be trapped.
-// --------------------------------------------------------------------	
-
-module internal Microsoft.FSharp.Compiler.Outcome
-
-open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
-
-let success a = Result a
-let raze (b:exn) = Exception b
-
-// map
-let (|?>) res f = 
-  match res with 
-  | Result x -> Result(f x )
-  | Exception err -> Exception err
-  
-let ForceRaise = function
-  | Result x -> x
-  | Exception err -> raise err
-
-let otherwise f x =
-  match x with 
-  | Result x -> success x
-  | Exception _err -> f()
-
-    
diff --git a/src/fsharp/outcome.fsi b/src/fsharp/outcome.fsi
deleted file mode 100644
index 64cd9f4968d..00000000000
--- a/src/fsharp/outcome.fsi
+++ /dev/null
@@ -1,11 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-module internal Microsoft.FSharp.Compiler.Outcome
-
-open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
-
-val success : 'T -> ResultOrException<'T>
-val raze : exn -> ResultOrException<'T>
-val ( |?> ) : ResultOrException<'T> -> ('T -> 'U) -> ResultOrException<'U>
-val ForceRaise : ResultOrException<'T> -> 'T
-val otherwise : (unit -> ResultOrException<'T>) -> ResultOrException<'T> -> ResultOrException<'T>
diff --git a/src/fsharp/pars.fsy b/src/fsharp/pars.fsy
index 0ffdee03baf..390653be97d 100644
--- a/src/fsharp/pars.fsy
+++ b/src/fsharp/pars.fsy
@@ -2650,6 +2650,38 @@ rawConstant:
   | stringOrKeywordString { SynConst.String ($1,lhs parseState) } 
   | BYTEARRAY { SynConst.Bytes ($1,lhs parseState) }
 
+rationalConstant:
+  | INT32 INFIX_STAR_DIV_MOD_OP INT32
+    { if $2 <> "/" then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnexpectedOperatorForUnitOfMeasure());
+      if fst $3 = 0 then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsIllegalDenominatorForMeasureExponent());
+      if (snd $1) || (snd $3) then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState));
+      SynRationalConst.Rational(fst $1, fst $3, lhs parseState) }
+
+  | MINUS INT32 INFIX_STAR_DIV_MOD_OP INT32 
+    { if $3 <> "/" then reportParseErrorAt (rhs parseState 3) (FSComp.SR.parsUnexpectedOperatorForUnitOfMeasure());
+      if fst $4 = 0 then reportParseErrorAt (rhs parseState 4) (FSComp.SR.parsIllegalDenominatorForMeasureExponent());
+      if (snd $2) || (snd $4) then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState));
+      SynRationalConst.Negate(SynRationalConst.Rational(fst $2, fst $4, lhs parseState)) }
+
+  | INT32 { if snd $1 then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState));
+            SynRationalConst.Integer(fst $1) }
+
+  | MINUS INT32 { if snd $2 then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState));
+                  SynRationalConst.Negate(SynRationalConst.Integer(fst $2)) }
+
+atomicUnsignedRationalConstant:
+  | INT32 { if snd $1 then errorR(Error(FSComp.SR.lexOutsideThirtyTwoBitSigned(), lhs parseState));
+            SynRationalConst.Integer(fst $1) }
+
+  | LPAREN rationalConstant rparen
+    { $2 }
+
+atomicRationalConstant:
+  | atomicUnsignedRationalConstant { $1 }
+
+  | MINUS atomicUnsignedRationalConstant
+    { SynRationalConst.Negate($2) }
+
 constant: 
   | rawConstant { $1 }
   | rawConstant HIGH_PRECEDENCE_TYAPP measureTypeArg { SynConst.Measure($1, $3) }
@@ -4228,10 +4260,10 @@ appTypeCon:
     { SynType.Var($1, lhs parseState) }
 
 appTypeConPower:
-  | appTypeCon INFIX_AT_HAT_OP INT32
+  | appTypeCon INFIX_AT_HAT_OP atomicRationalConstant
     { if $2 <> "^" && $2 <> "^-" then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnexpectedInfixOperator());
-      if $2 = "^-" then SynType.MeasurePower($1, -(fst $3), lhs parseState)
-      else SynType.MeasurePower($1, fst $3, lhs parseState)  }
+      if $2 = "^-" then SynType.MeasurePower($1, SynRationalConst.Negate($3), lhs parseState)
+      else SynType.MeasurePower($1, $3, lhs parseState)  }
 
   | appTypeCon 
     { $1 }
@@ -4296,14 +4328,10 @@ powerType:
   | atomType
     { $1 }
 
-  | atomType INFIX_AT_HAT_OP INT32
+  | atomType INFIX_AT_HAT_OP atomicRationalConstant
      { if $2 <> "^" && $2 <> "^-" then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnexpectedInfixOperator());
-       if $2 = "^-" then SynType.MeasurePower($1, - (fst $3), lhs parseState)
-       else SynType.MeasurePower($1, fst $3, lhs parseState) }
-
-  | atomType INFIX_AT_HAT_OP MINUS INT32
-     { if $2 <> "^" then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnexpectedInfixOperator());
-       SynType.MeasurePower($1, - (fst $4), lhs parseState) }
+       if $2 = "^-" then SynType.MeasurePower($1, SynRationalConst.Negate($3), lhs parseState)
+       else SynType.MeasurePower($1, $3, lhs parseState) }
 
 /* Like appType but gives a deprecation error when a non-atomic type is used */
 appTypeNonAtomicDeprecated:
@@ -4343,16 +4371,11 @@ powerTypeNonAtomicDeprecated:
   | atomType
     { $1 }
 
-  | atomType INFIX_AT_HAT_OP INT32
+  | atomType INFIX_AT_HAT_OP atomicRationalConstant
      { if $2 <> "^" && $2 <> "^-" then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnexpectedInfixOperator());
        deprecatedWithError (FSComp.SR.parsNonAtomicType()) (lhs parseState);
-       if $2 = "^-" then SynType.MeasurePower($1, - (fst $3), lhs parseState)
-       else SynType.MeasurePower($1, fst $3, lhs parseState) }
-
-  | atomType INFIX_AT_HAT_OP MINUS INT32
-     { if $2 <> "^" then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnexpectedInfixOperator());
-       deprecatedWithError (FSComp.SR.parsNonAtomicType()) (lhs parseState);
-       SynType.MeasurePower($1, - (fst $4), lhs parseState) }
+       if $2 = "^-" then SynType.MeasurePower($1, SynRationalConst.Negate($3), lhs parseState)
+       else SynType.MeasurePower($1, $3, lhs parseState) }
 
 
 /* Any tokens in this grammar must be added to the lex filter rule 'peekAdjacentTypars' */
@@ -4514,14 +4537,10 @@ measureTypePower:
   | measureTypeAtom 
       { $1 }
 
-  | measureTypeAtom INFIX_AT_HAT_OP INT32
+  | measureTypeAtom INFIX_AT_HAT_OP atomicRationalConstant
      { if $2 <> "^" && $2 <> "^-" then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnexpectedOperatorForUnitOfMeasure());
-       if $2 = "^-" then SynMeasure.Power($1, - (fst $3), lhs parseState)
-       else SynMeasure.Power($1, fst $3, lhs parseState) }
-
-  | measureTypeAtom INFIX_AT_HAT_OP MINUS INT32
-     { if $2 <> "^" then reportParseErrorAt (rhs parseState 2) (FSComp.SR.parsUnexpectedOperatorForUnitOfMeasure());
-       SynMeasure.Power($1, - (fst $4), lhs parseState) }
+       if $2 = "^-" then SynMeasure.Power($1, SynRationalConst.Negate($3), lhs parseState)
+       else SynMeasure.Power($1, $3, lhs parseState) }
 
   | INT32
      { if fst $1 <> 1 then reportParseErrorAt (rhs parseState 1) (FSComp.SR.parsUnexpectedIntegerLiteralForUnitOfMeasure());
diff --git a/src/fsharp/pickle.fsi b/src/fsharp/pickle.fsi
deleted file mode 100644
index deba917e2bf..00000000000
--- a/src/fsharp/pickle.fsi
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-module internal Microsoft.FSharp.Compiler.Pickle 
-
-open Internal.Utilities
-open Microsoft.FSharp.Compiler 
-open Microsoft.FSharp.Compiler.AbstractIL 
-open Microsoft.FSharp.Compiler.AbstractIL.IL
-open Microsoft.FSharp.Compiler.AbstractIL.Internal 
-open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
-open Microsoft.FSharp.Compiler.Tast
-
-// Fixup pickled data w.r.t. a set of CCU thunks indexed by name
-[]
-type PickledDataWithReferences<'RawData> = 
-    { /// The data that uses a collection of CcuThunks internally
-      RawData: 'RawData; 
-      /// The assumptions that need to be fixed up
-      FixupThunks: list } 
-
-    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
-    
-#if INCLUDE_METADATA_WRITER
-type WriterState 
-
-type pickler<'T> = 'T -> WriterState -> unit
-val internal p_byte : int -> WriterState -> unit
-val internal p_bool : bool -> WriterState -> unit
-val internal p_int : int -> WriterState -> unit
-val internal p_string : string -> WriterState -> unit
-val internal p_lazy : 'T pickler -> Lazy<'T> pickler
-val inline  internal p_tup2 : ('T1 pickler) -> ('T2 pickler) -> ('T1 * 'T2) pickler
-val inline  internal p_tup3 : ('T1 pickler) -> ('T2 pickler) -> ('T3 pickler) -> ('T1 * 'T2 * 'T3) pickler
-val inline  internal p_tup4 : ('T1 pickler) -> ('T2 pickler) -> ('T3 pickler) -> ('T4 pickler) -> ('T1 * 'T2 * 'T3 * 'T4) pickler
-val internal p_array : 'T pickler -> 'T[] pickler
-val internal p_namemap : 'T pickler -> NameMap<'T> pickler
-val internal p_const : Const pickler
-val internal p_vref : string -> ValRef pickler
-val internal p_tcref : string -> TyconRef pickler
-val internal p_ucref : UnionCaseRef pickler
-val internal p_expr : Expr pickler
-val internal p_typ : TType pickler
-val internal pickleModuleOrNamespace : pickler
-val internal pickleModuleInfo : pickler
-val pickleObjWithDanglingCcus : string -> Env.TcGlobals -> scope:CcuThunk -> ('T pickler) -> 'T -> byte[]
-#else
-#endif
-
-type ReaderState 
-
-type unpickler<'T> = ReaderState -> 'T
-val internal u_byte : ReaderState -> int
-val internal u_bool : ReaderState -> bool
-val internal u_int : ReaderState -> int
-val internal u_string : ReaderState -> string
-val internal u_lazy : 'T unpickler -> Lazy<'T> unpickler
-val inline  internal u_tup2 : ('T2 unpickler) -> ('T3 unpickler ) -> ('T2 * 'T3) unpickler
-val inline  internal u_tup3 : ('T2 unpickler) -> ('T3 unpickler ) -> ('T4 unpickler ) -> ('T2 * 'T3 * 'T4) unpickler
-val inline  internal u_tup4 : ('T2 unpickler) -> ('T3 unpickler ) -> ('T4 unpickler ) -> ('T5 unpickler) -> ('T2 * 'T3 * 'T4 * 'T5) unpickler
-val internal u_array : 'T unpickler -> 'T[] unpickler
-val internal u_namemap : 'T unpickler -> NameMap<'T> unpickler
-val internal u_const : Const unpickler
-val internal u_vref : ValRef unpickler
-val internal u_tcref : TyconRef unpickler
-val internal u_ucref : UnionCaseRef unpickler
-val internal u_expr : Expr unpickler
-val internal u_typ : TType unpickler
-val internal unpickleModuleOrNamespace : ReaderState -> ModuleOrNamespace
-val internal unpickleModuleInfo : ReaderState -> PickledModuleInfo
-val internal unpickleObjWithDanglingCcus : string -> viewedScope:ILScopeRef -> ilModule:ILModuleDef -> ('T  unpickler) -> byte[] ->  PickledDataWithReferences<'T>
-
-
-
diff --git a/src/fsharp/pplex.fsl b/src/fsharp/pplex.fsl
new file mode 100644
index 00000000000..8fe85ee7dea
--- /dev/null
+++ b/src/fsharp/pplex.fsl
@@ -0,0 +1,70 @@
+// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+
+{
+
+module internal Microsoft.FSharp.Compiler.PPLexer
+
+open System
+
+open Microsoft.FSharp.Compiler.Ast
+open Microsoft.FSharp.Compiler.ErrorLogger
+open Microsoft.FSharp.Compiler.Lexhelp
+
+open Internal.Utilities.Text.Lexing
+
+let lexeme (lexbuf : UnicodeLexing.Lexbuf) = UnicodeLexing.Lexbuf.LexemeString lexbuf
+
+let fail (args : lexargs) (lexbuf:UnicodeLexing.Lexbuf) e =
+     let m = lexbuf.LexemeRange
+     args.errorLogger.ErrorR(Error(e,m))
+     PPParser.EOF
+}
+
+let letter              = '\Lu' | '\Ll' | '\Lt' | '\Lm' | '\Lo' | '\Nl'
+let digit               = '\Nd'
+let connecting_char     = '\Pc'
+let combining_char      = '\Mn' | '\Mc'
+let formatting_char     = '\Cf'
+
+let ident_start_char    =
+    letter | '_'
+
+let ident_char =
+    letter
+  | connecting_char
+  | combining_char
+  | formatting_char
+  | digit
+  | ['\'']
+
+let ident       = ident_start_char ident_char*
+let comment     = "//" _*
+let mcomment    = "(*" _*
+let whitespace  = [' ' '\t']
+
+rule tokenstream args = parse
+// --------------------------
+| "#if"         { PPParser.PRELUDE                                              }
+| "#elif"       { PPParser.PRELUDE                                              }
+| ident         { PPParser.ID(lexeme lexbuf)                                    }
+// --------------------------
+| "!"           { PPParser.OP_NOT                                               }
+| "&&"          { PPParser.OP_AND                                               }
+| "||"          { PPParser.OP_OR                                                }
+| "("           { PPParser.LPAREN                                               }
+| ")"           { PPParser.RPAREN                                               }
+// --------------------------
+| whitespace    { tokenstream args lexbuf                                       }
+// --------------------------
+| comment       { PPParser.EOF                                                  }
+| mcomment      { fail args lexbuf (FSComp.SR.pplexExpectedSingleLineComment()) }
+| _             {
+                    let lex = lexeme lexbuf
+                    let _   = rest lexbuf
+                    fail args lexbuf (FSComp.SR.pplexUnexpectedChar(lex))
+                }
+| eof           { PPParser.EOF                                                  }
+// --------------------------
+and rest = parse
+| _             { rest lexbuf   }
+| eof           { ()            }
diff --git a/src/fsharp/pppars.fsy b/src/fsharp/pppars.fsy
new file mode 100644
index 00000000000..0f76836c366
--- /dev/null
+++ b/src/fsharp/pppars.fsy
@@ -0,0 +1,61 @@
+// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+
+%{
+open Microsoft.FSharp.Compiler.Ast
+open Microsoft.FSharp.Compiler.ErrorLogger
+
+let dummy       = IfdefId("DUMMY")
+
+let doNothing _ dflt=
+    dflt
+
+let fail (ps : Internal.Utilities.Text.Parsing.IParseState) i e =
+    let f,t = ps.InputRange i
+    let m   = mkSynRange f t
+    errorR(Error(e,m))
+    dummy
+%}
+
+
+%start start
+
+%token  ID
+%token OP_NOT OP_AND OP_OR LPAREN RPAREN PRELUDE EOF
+
+%nonassoc RPAREN
+%nonassoc PRELUDE
+%left OP_OR
+%left OP_AND
+%left OP_NOT
+%nonassoc LPAREN
+%nonassoc ID
+
+%type < LexerIfdefExpression > start
+
+%%
+
+start: Full { $1 }
+
+Recover:
+   | error                  { doNothing parseState ()                                         }
+
+Full:
+    | PRELUDE Expr EOF      { $2                                                            }
+    | Recover               { fail parseState 1 (FSComp.SR.ppparsMissingToken("#if/#elif")) }
+
+Expr:
+    | LPAREN Expr RPAREN    { $2                                                            }
+    | ID                    { IfdefId($1)                                                   }
+    | OP_NOT Expr           { IfdefNot($2)                                                  }
+    | Expr OP_AND Expr      { IfdefAnd($1,$3)                                               }
+    | Expr OP_OR Expr       { IfdefOr($1,$3)                                                }
+
+    | OP_AND Recover        { fail parseState 1 (FSComp.SR.ppparsUnexpectedToken("&&"))     }
+    | OP_OR Recover         { fail parseState 1 (FSComp.SR.ppparsUnexpectedToken("||"))     }
+    | OP_NOT Recover        { fail parseState 1 (FSComp.SR.ppparsUnexpectedToken("!"))      }
+    | LPAREN error RPAREN   { doNothing parseState dummy                                    }
+    | LPAREN Expr Recover   { fail parseState 3 (FSComp.SR.ppparsMissingToken(")"))         }
+    | LPAREN Recover        { fail parseState 2 (FSComp.SR.ppparsIncompleteExpression())    }
+    | RPAREN Recover        { fail parseState 1 (FSComp.SR.ppparsUnexpectedToken(")"))      }
+    | Expr Recover          { fail parseState 2 (FSComp.SR.ppparsIncompleteExpression())    }
+    | EOF                   { fail parseState 1 (FSComp.SR.ppparsIncompleteExpression())    }
diff --git a/src/fsharp/rational.fs b/src/fsharp/rational.fs
new file mode 100644
index 00000000000..f41f0d1c366
--- /dev/null
+++ b/src/fsharp/rational.fs
@@ -0,0 +1,66 @@
+// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+
+/// Rational arithmetic, used for exponents on units-of-measure
+module internal Microsoft.FSharp.Compiler.Rational
+
+open System.Numerics
+
+type Rational = { 
+  numerator: BigInteger;
+  denominator: BigInteger
+}
+
+let rec gcd a (b: BigInteger) =
+  if b = BigInteger.Zero then a else
+    gcd b (a % b)
+let lcm a b = 
+  (a * b) / (gcd a b)
+
+let mkRational p q =
+  let p, q =
+    if q = BigInteger.Zero then raise(System.DivideByZeroException())
+    let g = gcd q p in
+    p/g, q/g
+
+  let p, q =
+    if q > BigInteger.Zero then p, q else -p, -q
+    
+  in
+    { numerator = p;
+      denominator = q 
+    }
+
+let intToRational (p:int) = mkRational (BigInteger(p)) BigInteger.One
+let ZeroRational = mkRational BigInteger.Zero BigInteger.One
+let OneRational = mkRational BigInteger.One BigInteger.One
+
+let AddRational m n =
+  let d = gcd m.denominator n.denominator 
+  let m' = m.denominator / d
+  let n' = n.denominator / d
+  mkRational (m.numerator * n' + n.numerator * m') (m.denominator * n')
+
+let NegRational m = 
+  mkRational (-m.numerator) m.denominator
+
+let MulRational m n =
+  mkRational (m.numerator * n.numerator) (m.denominator * n.denominator)
+
+let DivRational m n =
+  mkRational (m.numerator * n.denominator) (m.denominator * n.numerator)
+
+let AbsRational m = 
+  mkRational (abs m.numerator) m.denominator
+
+let RationalToString m =
+  if m.denominator = BigInteger.One then m.numerator.ToString() else sprintf "(%A/%A)" m.numerator m.denominator
+
+let GcdRational m n = mkRational (gcd m.numerator n.numerator) (lcm m.denominator n.denominator)
+
+let GetNumerator p = int p.numerator
+let GetDenominator p = int p.denominator
+
+let SignRational p = 
+  if p.numerator < BigInteger.Zero then -1 else
+  if p.numerator > BigInteger.Zero then 1 else 0
+
diff --git a/src/fsharp/rational.fsi b/src/fsharp/rational.fsi
new file mode 100644
index 00000000000..866826a9662
--- /dev/null
+++ b/src/fsharp/rational.fsi
@@ -0,0 +1,27 @@
+// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
+
+/// Rational arithmetic, used for exponents on units-of-measure
+module internal Microsoft.FSharp.Compiler.Rational
+
+type Rational
+
+val intToRational : int -> Rational
+val AbsRational : Rational -> Rational
+val AddRational : Rational -> Rational -> Rational
+val MulRational : Rational -> Rational -> Rational
+val DivRational : Rational -> Rational -> Rational
+val NegRational : Rational -> Rational
+val SignRational : Rational -> int
+val ZeroRational : Rational
+val OneRational : Rational
+
+// Can be negative
+val GetNumerator : Rational -> int
+
+// Always positive
+val GetDenominator : Rational -> int
+
+// Greatest rational that divides both exactly
+val GcdRational : Rational -> Rational -> Rational
+val RationalToString : Rational -> string
+
diff --git a/src/fsharp/tainted.fs b/src/fsharp/tainted.fs
index edbaf11da50..7917902e828 100644
--- a/src/fsharp/tainted.fs
+++ b/src/fsharp/tainted.fs
@@ -1,6 +1,9 @@
 // Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.FSharp.Compiler
+
+#if EXTENSIONTYPING
+
 open System
 open Microsoft.FSharp.Compiler.Range
 open Microsoft.FSharp.Core.CompilerServices
@@ -162,4 +165,7 @@ module internal Tainted =
     let EqTainted (t1:Tainted<'T>) (t2:Tainted<'T>) = 
         t1.PUntaintNoFailure(fun t1 -> t1 === t2.AccessObjectDirectly)
 
-    let GetHashCodeTainted (t:Tainted<'T>) = t.PUntaintNoFailure(fun t -> hash t)
\ No newline at end of file
+    let GetHashCodeTainted (t:Tainted<'T>) = t.PUntaintNoFailure(fun t -> hash t)
+    
+#endif
+    
diff --git a/src/fsharp/tainted.fsi b/src/fsharp/tainted.fsi
index 8043e9a6362..da19dbab06d 100644
--- a/src/fsharp/tainted.fsi
+++ b/src/fsharp/tainted.fsi
@@ -1,6 +1,10 @@
 // Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 namespace Microsoft.FSharp.Compiler
+
+#if EXTENSIONTYPING
+
+
 open System
 open System.Reflection
 open Microsoft.FSharp.Core.CompilerServices
@@ -93,3 +97,5 @@ module internal Tainted =
     val EqTainted : Tainted<'T> -> Tainted<'T> -> bool when 'T : equality and 'T : not struct
     /// Compute the hash value for the tainted value
     val GetHashCodeTainted : Tainted<'T> -> int when 'T : equality
+
+#endif
diff --git a/src/fsharp/tast.fs b/src/fsharp/tast.fs
index 42f12ae058e..17496380228 100644
--- a/src/fsharp/tast.fs
+++ b/src/fsharp/tast.fs
@@ -1,5 +1,9 @@
 // Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
   
+//-------------------------------------------------------------------------
+// Defines the typed abstract syntax trees used throughout the F# compiler.
+//------------------------------------------------------------------------- 
+
 module internal Microsoft.FSharp.Compiler.Tast 
 
 open System
@@ -21,17 +25,13 @@ open Microsoft.FSharp.Compiler.Lib
 open Microsoft.FSharp.Compiler.PrettyNaming
 open Microsoft.FSharp.Compiler.QuotationPickler
 open Microsoft.FSharp.Core.Printf
+open Microsoft.FSharp.Compiler.Rational
 
 #if EXTENSIONTYPING
 open Microsoft.FSharp.Compiler.ExtensionTyping
 open Microsoft.FSharp.Core.CompilerServices
 #endif
 
-#if DEBUG
-///verboseStamps: print #stamp on each id -- very verbose - but sometimes useful. Turn on using '--stamps'
-let verboseStamps = ref false
-#endif
-
 /// Unique name generator for stamps attached to lambdas and object expressions
 type Unique = int64
 //++GLOBAL MUTABLE STATE
@@ -238,6 +238,7 @@ type ValFlags(flags:int64) =
         // Clear the IsGeneratedEventVal, since there's no use in propagating specialname information for generated add/remove event vals
                                                       (flags       &&&    ~~~0b011001100000000000L) 
 
+/// Represents the kind of a type parameter
 []
 type TyparKind = 
     | Type 
@@ -406,11 +407,6 @@ type ModuleOrNamespaceKind =
     | Namespace
 
 
-/// The information ILXGEN needs about the location of an item
-type CompilationPath = 
-    | CompPath of ILScopeRef * (string * ModuleOrNamespaceKind) list
-    member x.ILScopeRef = (let (CompPath(scoref,_)) = x in scoref)
-    member x.AccessPath = (let (CompPath(_,p)) = x in p)
 
 
 /// A public path records where a construct lives within the global namespace
@@ -423,19 +419,25 @@ type PublicPath      =
         pp.[0..pp.Length-2]
 
 
+/// The information ILXGEN needs about the location of an item
+type CompilationPath = 
+    | CompPath of ILScopeRef * (string * ModuleOrNamespaceKind) list
+    member x.ILScopeRef = (let (CompPath(scoref,_)) = x in scoref)
+    member x.AccessPath = (let (CompPath(_,p)) = x in p)
+    member x.MangledPath = List.map fst x.AccessPath
+    member x.NestedPublicPath (id:Ident) = PubPath(Array.append (Array.ofList x.MangledPath) [| id.idText |])
+    member x.ParentCompPath = 
+        let a,_ = List.frontAndBack x.AccessPath
+        CompPath(x.ILScopeRef,a)
+    member x.NestedCompPath n modKind = CompPath(x.ILScopeRef,x.AccessPath@[(n,modKind)])
+
+
 let getNameOfScopeRef sref = 
     match sref with 
     | ILScopeRef.Local -> ""
     | ILScopeRef.Module mref -> mref.Name
     | ILScopeRef.Assembly aref -> aref.Name
-let mangledTextOfCompPath (CompPath(scoref,path)) = getNameOfScopeRef scoref + "/" + textOfPath (List.map fst path)
-  
-let mangledPathOfCompPath (CompPath(_,path))  = List.map fst path
-let publicPathOfCompPath (id:Ident) cpath = PubPath(Array.append (Array.ofList (mangledPathOfCompPath cpath)) [| id.idText |])
-let parentCompPath (CompPath(scoref,cpath)) = 
-    let a,_ = List.frontAndBack cpath 
-    CompPath(scoref,a)
-let mkNestedCPath (CompPath(scoref,p)) n modKind = CompPath(scoref,p@[(n,modKind)])
+
 
 #if EXTENSIONTYPING
 let definitionLocationOfProvidedItem (p : Tainted<#IProvidedCustomAttributeProvider>) =
@@ -450,18 +452,19 @@ let definitionLocationOfProvidedItem (p : Tainted<#IProvidedCustomAttributeProvi
     
 #endif
 
-// Type definitions, exception definitions, module definitions and
-// namespace definitions are all 'entities'. These have too much in common to make it 
-// worth factoring them out as separate types.
+/// Represents a type definition, exception definition, module definition or namespace definition.
 [] 
 type Entity = 
     { mutable Data: EntityData }
     /// The name of the namespace, module or type, possibly with mangling, e.g. List`1, List or FailureException 
     member x.LogicalName = x.Data.entity_logical_name
+
     /// The compiled name of the namespace, module or type, e.g. FSharpList`1, ListModule or FailureException 
     member x.CompiledName = match x.Data.entity_compiled_name with None -> x.LogicalName | Some s -> s
+
     /// The display name of the namespace, module or type, e.g. List instead of List`1, and no static parameters
     member x.DisplayName = x.GetDisplayName(false, false)
+
     /// The display name of the namespace, module or type with <_,_,_> added for generic types, plus static parameters if any
     member x.DisplayNameWithStaticParametersAndUnderscoreTypars = x.GetDisplayName(true, true)
 
@@ -668,7 +671,6 @@ type Entity =
 
     /// Get a list of all instance fields for F#-defined record, struct and class fields in this type definition.
     /// including hidden fields from the compilation of implicit class constructions.
-
     // NOTE: This method doesn't perform particularly well, and is over-used, but doesn't seem to appear on performance traces
     member x.AllInstanceFieldsAsList = x.AllFieldsAsList |> List.filter (fun f -> not f.IsStatic)
 
@@ -711,20 +713,16 @@ type Entity =
         | None -> None
 
     
-    // OSGN support
     /// Create a new entity with empty, unlinked data. Only used during unpickling of F# metadata.
     static member NewUnlinked() : Entity = { Data = nullableSlotEmpty() }
+
     /// Create a new entity with the given backing data. Only used during unpickling of F# metadata.
-    static member New reason (data: EntityData) : Entity  = 
-#if DEBUG
-        if !verboseStamps then 
-            dprintf "entity %s#%d (%s)\n" data.entity_logical_name data.entity_stamp reason
-#else
-        ignore(reason)
-#endif
+    static member New _reason (data: EntityData) : Entity  = 
         { Data = data }
+
     /// Link an entity based on empty, unlinked data to the given data. Only used during unpickling of F# metadata.
     member x.Link tg = x.Data <- nullableSlotFull(tg)
+
     /// Indicates if the entity is linked to backing data. Only used during unpickling of F# metadata.
     member x.IsLinked = match box x.Data with null -> false | _ -> true 
 
@@ -836,12 +834,16 @@ type Entity =
 
     /// Gets any implicit hash/equals (with comparer argument) methods added to an F# record, union or struct type definition.
     member x.GeneratedHashAndEqualsWithComparerValues = x.TypeContents.tcaug_hash_and_equals_withc 
+
     /// Gets any implicit CompareTo (with comparer argument) methods added to an F# record, union or struct type definition.
     member x.GeneratedCompareToWithComparerValues = x.TypeContents.tcaug_compare_withc
+
     /// Gets any implicit CompareTo methods added to an F# record, union or struct type definition.
     member x.GeneratedCompareToValues = x.TypeContents.tcaug_compare
+
     /// Gets any implicit hash/equals methods added to an F# record, union or struct type definition.
     member x.GeneratedHashAndEqualsValues = x.TypeContents.tcaug_equals
+
     /// Gets all implicit hash/equals/compare methods added to an F# record, union or struct type definition.
     member x.AllGeneratedValues = 
         [ match x.GeneratedCompareToValues with 
@@ -1127,36 +1129,47 @@ and
 
 #if EXTENSIONTYPING
 and 
-   [< RequireQualifiedAccess; NoComparison; NoEquality>]
+   []
    
    /// The information kept about a provided type
    TProvidedTypeInfo = 
    { /// The parameters given to the provider that provided to this type.
      ResolutionEnvironment : ExtensionTyping.ResolutionEnvironment
+
      /// The underlying System.Type (wrapped as a ProvidedType to make sure we don't call random things on
      /// System.Type, and wrapped as Tainted to make sure we track which provider this came from, for reporting
      /// error messages)
      ProvidedType:  Tainted
+
      /// The base type of the type. We use it to compute the compiled representation of the type for erased types.
      /// Reading is delayed, since it does an import on the underlying type
      LazyBaseType: LazyWithContext 
+
      /// A flag read eagerly from the provided type and used to compute basic properties of the type definition.
      IsClass:  bool 
+
      /// A flag read eagerly from the provided type and used to compute basic properties of the type definition.
      IsSealed:  bool 
+
      /// A flag read eagerly from the provided type and used to compute basic properties of the type definition.
      IsInterface:  bool 
      /// A flag read eagerly from the provided type and used to compute basic properties of the type definition.
      IsStructOrEnum: bool 
+
      /// A flag read eagerly from the provided type and used to compute basic properties of the type definition.
      IsEnum: bool 
+
      /// A type read from the provided type and used to compute basic properties of the type definition.
      /// Reading is delayed, since it does an import on the underlying type
      UnderlyingTypeOfEnum: (unit -> TType) 
+
      /// A flag read from the provided type and used to compute basic properties of the type definition.
      /// Reading is delayed, since it looks at the .BaseType
      IsDelegate: (unit -> bool) 
+
+     /// Indicates the type is erased
      IsErased: bool 
+
      /// Indicates the type is generated, but type-relocation is suppressed
      IsSuppressRelocate : bool }
 
@@ -1171,12 +1184,16 @@ and
   TyconObjModelKind = 
     /// Indicates the type is a class (also used for units-of-measure)
     | TTyconClass 
+
     /// Indicates the type is an interface 
     | TTyconInterface 
+
     /// Indicates the type is a struct 
     | TTyconStruct 
+
     /// Indicates the type is a delegate with the given Invoke signature 
     | TTyconDelegate of SlotSig 
+
     /// Indicates the type is an enumeration 
     | TTyconEnum
     
@@ -1189,17 +1206,19 @@ and
     []
     TyconObjModelData = 
     { /// Indicates whether the type declaration is a class, interface, enum, delegate or struct 
-      fsobjmodel_kind: TyconObjModelKind;
+      fsobjmodel_kind: TyconObjModelKind
+
       /// The declared abstract slots of the class, interface or struct 
-      fsobjmodel_vslots: ValRef list; 
+      fsobjmodel_vslots: ValRef list
+
       /// The fields of the class, struct or enum 
       fsobjmodel_rfields: TyconRecdFields }
 
 and 
-    []
+    []
     TyconRecdFields = 
     { /// The fields of the record, in declaration order. 
-      FieldsByIndex: RecdField[];
+      FieldsByIndex: RecdField[]
       
       /// The fields of the record, indexed by name. 
       FieldsByName : NameMap }
@@ -1214,10 +1233,10 @@ and
     member x.TrueInstanceFieldsAsList = x.AllFieldsAsList |> List.filter (fun f -> not f.IsStatic && not f.IsCompilerGenerated)   
 
 and 
-    []
+    []
     TyconUnionCases = 
     { /// The cases of the discriminated union, in declaration order. 
-      CasesByIndex: UnionCase[];
+      CasesByIndex: UnionCase[]
       /// The cases of the discriminated union, indexed by name. 
       CasesByName : NameMap
     }
@@ -1228,36 +1247,43 @@ and
     member x.UnionCasesAsList = x.CasesByIndex |> Array.toList
 
 and 
-    []
+    []
     TyconUnionData =
     { /// The cases contained in the discriminated union. 
-      CasesTable: TyconUnionCases;
+      CasesTable: TyconUnionCases
       /// The ILX data structure representing the discriminated union. 
-      CompiledRepresentation: IlxUnionRef cache; 
+      CompiledRepresentation: IlxUnionRef cache 
     }
     member x.UnionCasesAsList = x.CasesTable.CasesByIndex |> Array.toList
 
 and 
-    []
+    []
     []
     UnionCase =
     { /// Data carried by the case. 
-      FieldTable: TyconRecdFields;
+      FieldTable: TyconRecdFields
+
       /// Return type constructed by the case. Normally exactly the type of the enclosing type, sometimes an abbreviation of it 
-      ReturnType: TType;
+      ReturnType: TType
+
       /// Name of the case in generated IL code 
-      CompiledName: string;
+      CompiledName: string
+
       /// Documentation for the case 
-      XmlDoc : XmlDoc;
+      XmlDoc : XmlDoc
+
       /// XML documentation signature for the case
-      mutable XmlDocSig : string;
+      mutable XmlDocSig : string
+
       /// Name/range of the case 
-      Id: Ident; 
+      Id: Ident 
+
       ///  Indicates the declared visibility of the union constructor, not taking signatures into account 
-      Accessibility: Accessibility; 
+      Accessibility: Accessibility 
+
       /// Attributes, attached to the generated static method to make instances of the case 
       // MUTABILITY: used when propagating signature attributes into the implementation.
-      mutable Attribs: Attribs; }
+      mutable Attribs: Attribs }
 
     member uc.Range = uc.Id.idRange
     member uc.DisplayName = uc.Id.idText
@@ -1272,53 +1298,92 @@ and
     []
     RecdField =
     { /// Is the field declared mutable in F#? 
-      rfield_mutable: bool;
+      rfield_mutable: bool
+
       /// Documentation for the field 
-      rfield_xmldoc : XmlDoc;
+      rfield_xmldoc : XmlDoc
+
       /// XML Documentation signature for the field
-      mutable rfield_xmldocsig : string;
+      mutable rfield_xmldocsig : string
+
       /// The type of the field, w.r.t. the generic parameters of the enclosing type constructor 
-      rfield_type: TType;
+      rfield_type: TType
+
       /// Indicates a static field 
-      rfield_static: bool;
+      rfield_static: bool
+
       /// Indicates a volatile field 
-      rfield_volatile: bool;
+      rfield_volatile: bool
+
       /// Indicates a compiler generated field, not visible to Intellisense or name resolution 
-      rfield_secret: bool;
+      rfield_secret: bool
+
       /// The default initialization info, for static literals 
-      rfield_const: Const option; 
+      rfield_const: Const option 
+
       ///  Indicates the declared visibility of the field, not taking signatures into account 
-      rfield_access: Accessibility; 
+      rfield_access: Accessibility 
+
       /// Attributes attached to generated property 
       // MUTABILITY: used when propagating signature attributes into the implementation.
-      mutable rfield_pattribs: Attribs; 
+      mutable rfield_pattribs: Attribs 
+
       /// Attributes attached to generated field 
       // MUTABILITY: used when propagating signature attributes into the implementation.
-      mutable rfield_fattribs: Attribs; 
+      mutable rfield_fattribs: Attribs 
+
       /// Name/declaration-location of the field 
       rfield_id: Ident }
+
+    ///  Indicates the declared visibility of the field, not taking signatures into account 
     member v.Accessibility = v.rfield_access
+
+    /// Attributes attached to generated property 
     member v.PropertyAttribs = v.rfield_pattribs
+
+    /// Attributes attached to generated field 
     member v.FieldAttribs = v.rfield_fattribs
+
+    /// Declaration-location of the field 
     member v.Range = v.rfield_id.idRange
+
+    /// Name/declaration-location of the field 
     member v.Id = v.rfield_id
+
+    /// Name of the field 
     member v.Name = v.rfield_id.idText
+
+      /// Indicates a compiler generated field, not visible to Intellisense or name resolution 
     member v.IsCompilerGenerated = v.rfield_secret
+
+    /// Is the field declared mutable in F#? 
     member v.IsMutable = v.rfield_mutable
+
+    /// Indicates a static field 
     member v.IsStatic = v.rfield_static
+
+    /// Indicates a volatile field 
     member v.IsVolatile = v.rfield_volatile
+
+    /// The type of the field, w.r.t. the generic parameters of the enclosing type constructor 
     member v.FormalType = v.rfield_type
+
+    /// XML Documentation signature for the field
     member v.XmlDoc = v.rfield_xmldoc
+
+    /// Get or set the XML documentation signature for the field
     member v.XmlDocSig
         with get() = v.rfield_xmldocsig
         and set(x) = v.rfield_xmldocsig <- x
 
+    /// The default initialization info, for static literals 
     member v.LiteralValue = 
         match v.rfield_const  with 
         | None -> None
         | Some Const.Zero -> None
         | Some k -> Some k
 
+    /// Indicates if the field is zero-initialized
     member v.IsZeroInit = 
         match v.rfield_const  with 
         | None -> false 
@@ -1328,10 +1393,13 @@ and
 and ExceptionInfo =
     /// Indicates that an exception is an abbreviation for the given exception 
     | TExnAbbrevRepr of TyconRef 
+
     /// Indicates that an exception is shorthand for the given .NET exception type 
     | TExnAsmRepr of ILTypeRef
+
     /// Indicates that an exception carries the given record of values 
     | TExnFresh of TyconRecdFields
+
     /// Indicates that an exception is abstract, i.e. is in a signature file, and we do not know the representation 
     | TExnNone
 
@@ -1468,7 +1536,7 @@ and
       /// Get a table of values indexed by logical name
       member mtyp.AllValsByLogicalName = 
           let addValByName (x:Val) tab = 
-             // Note: names may occur twice prior to raising errors about this in PostTypecheckSemanticChecks
+             // Note: names may occur twice prior to raising errors about this in PostTypeCheckSemanticChecks
              // Earlier ones take precedence sice we report errors about the later ones
              if not x.IsMember && not x.IsCompilerGenerated then 
                  NameMap.add x.LogicalName x tab 
@@ -1508,8 +1576,11 @@ and Tycon = Entity
 /// A set of static methods for constructing types.
 and Construct = 
       
-    static member NewModuleOrNamespaceType mkind tycons vals = ModuleOrNamespaceType(mkind, QueueList.ofList vals, QueueList.ofList tycons)
-    static member NewEmptyModuleOrNamespaceType mkind = Construct.NewModuleOrNamespaceType mkind [] []
+    static member NewModuleOrNamespaceType mkind tycons vals = 
+        ModuleOrNamespaceType(mkind, QueueList.ofList vals, QueueList.ofList tycons)
+
+    static member NewEmptyModuleOrNamespaceType mkind = 
+        Construct.NewModuleOrNamespaceType mkind [] []
 
 #if EXTENSIONTYPING
 
@@ -1575,32 +1646,32 @@ and Construct =
                 let enclosingName = ExtensionTyping.GetFSharpPathToProvidedType(st,m)
                 CompPath(ilScopeRef,enclosingName |> List.map(fun id->id,ModuleOrNamespaceKind.Namespace))
             | Some p -> p
-        let pubpath = publicPathOfCompPath id cpath
+        let pubpath = cpath.NestedPublicPath id
 
         let repr = Construct.NewProvidedTyconRepr(resolutionEnvironment, st, importProvidedType, isSuppressRelocate, m)
 
         Tycon.New "tycon"
-          { entity_stamp=stamp;
+          { entity_stamp=stamp
             entity_logical_name=name
-            entity_compiled_name=None;
-            entity_kind=kind;
-            entity_range=m;
-            entity_flags=EntityFlags(usesPrefixDisplay=false, isModuleOrNamespace=false,preEstablishedHasDefaultCtor=false, hasSelfReferentialCtor=false);
-            entity_attribs=[]; // fetched on demand via est.fs API
-            entity_typars= LazyWithContext.NotLazy [];
-            entity_tycon_abbrev = None;
-            entity_tycon_repr = repr;
-            entity_tycon_repr_accessibility = TAccess([]);
-            entity_exn_info=TExnNone;
-            entity_tycon_tcaug=TyconAugmentation.Create();
-            entity_modul_contents = lazy new ModuleOrNamespaceType(Namespace, QueueList.ofList [], QueueList.ofList []);
+            entity_compiled_name=None
+            entity_kind=kind
+            entity_range=m
+            entity_flags=EntityFlags(usesPrefixDisplay=false, isModuleOrNamespace=false,preEstablishedHasDefaultCtor=false, hasSelfReferentialCtor=false)
+            entity_attribs=[] // fetched on demand via est.fs API
+            entity_typars= LazyWithContext.NotLazy []
+            entity_tycon_abbrev = None
+            entity_tycon_repr = repr
+            entity_tycon_repr_accessibility = TAccess([])
+            entity_exn_info=TExnNone
+            entity_tycon_tcaug=TyconAugmentation.Create()
+            entity_modul_contents = lazy new ModuleOrNamespaceType(Namespace, QueueList.ofList [], QueueList.ofList [])
             // Generated types get internal accessibility
-            entity_accessiblity= access;
-            entity_xmldoc =  XmlDoc [||]; // fetched on demand via est.fs API
-            entity_xmldocsig="";        
-            entity_pubpath = Some pubpath;
-            entity_cpath = Some cpath;
-            entity_il_repr_cache = newCache(); } 
+            entity_accessiblity= access
+            entity_xmldoc =  XmlDoc [||] // fetched on demand via est.fs API
+            entity_xmldocsig=""        
+            entity_pubpath = Some pubpath
+            entity_cpath = Some cpath
+            entity_il_repr_cache = newCache() } 
 #endif
 
     static member NewModuleOrNamespace cpath access (id:Ident) xml attribs mtype = 
@@ -1620,13 +1691,14 @@ and Construct =
             entity_tycon_repr_accessibility = access
             entity_exn_info=TExnNone
             entity_tycon_tcaug=TyconAugmentation.Create()
-            entity_pubpath=cpath |> Option.map (publicPathOfCompPath id)
+            entity_pubpath=cpath |> Option.map (fun (cp:CompilationPath) -> cp.NestedPublicPath id)
             entity_cpath=cpath
             entity_accessiblity=access
             entity_attribs=attribs
             entity_xmldoc=xml
             entity_xmldocsig=""        
             entity_il_repr_cache = newCache() } 
+
 and 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
@@ -1680,36 +1752,56 @@ and
     { mutable Data: TyparData
       /// A cached TAST type used when this type variable is used as type.
       mutable AsType: TType }
+
+    /// The name of the type parameter 
     member x.Name                = x.Data.typar_id.idText
+
+    /// The range of the identifier for the type parameter definition
     member x.Range               = x.Data.typar_id.idRange
+
+    /// The identifier for a type parameter definition
     member x.Id                  = x.Data.typar_id
-    /// The unique stamp of the typar definition
+
+    /// The unique stamp of the type parameter
     member x.Stamp               = x.Data.typar_stamp
+
     /// The inferred equivalence for the type inference variable, if any.
     member x.Solution            = x.Data.typar_solution
+
     /// The inferred constraints for the type inference variable, if any
     member x.Constraints         = x.Data.typar_constraints
+
     /// Indicates if the type variable is compiler generated, i.e. is an implicit type inference variable 
     member x.IsCompilerGenerated = x.Data.typar_flags.IsCompilerGenerated
+
     /// Indicates if the type variable can be sovled or given new constraints. The status of a type variable
     /// generally always evolves towards being either rigid or solved. 
     member x.Rigidity            = x.Data.typar_flags.Rigidity
+
     /// Indicates if a type parameter is needed at runtime and may not be eliminated
     member x.DynamicReq          = x.Data.typar_flags.DynamicReq
+
     /// Indicates that whether or not a generic type definition satisfies the equality constraint is dependent on whether this type variable satisfies the equality constraint.
     member x.EqualityConditionalOn = x.Data.typar_flags.EqualityConditionalOn
+
     /// Indicates that whether or not a generic type definition satisfies the comparison constraint is dependent on whether this type variable satisfies the comparison constraint.
     member x.ComparisonConditionalOn = x.Data.typar_flags.ComparisonConditionalOn
+
     /// 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           = x.Data.typar_flags.StaticReq
+
     /// Indicates if the type inference variable was generated after an error when type checking expressions or patterns
     member x.IsFromError         = x.Data.typar_flags.IsFromError
+
     /// Indicates whether a type variable can be instantiated by types or units-of-measure.
     member x.Kind                = x.Data.typar_flags.Kind
+
     /// Indicates whether a type variable is erased in compiled .NET IL code, i.e. whether it is a unit-of-measure variable
     member x.IsErased            = match x.Kind with TyparKind.Type -> false | _ -> true
+
     /// The declared attributes of the type parameter. Empty for type inference variables and parameters from .NET 
     member x.Attribs             = x.Data.typar_attribs
+
     /// Indicates the display name of a type variable
     member x.DisplayName = if x.Name = "?" then "?"+string x.Stamp else x.Name
 
@@ -1828,6 +1920,7 @@ and
     []
     /// Indicates the solution of a member constraint during inference.
     TraitConstraintSln = 
+
     /// FSMethSln(typ, vref, minst)
     ///
     /// Indicates a trait is solved by an F# method.
@@ -1886,10 +1979,13 @@ and
     []
     Val = 
     { mutable Data: ValData }
+
     /// The place where the value was defined. 
     member x.Range = x.Data.val_range
+
     /// A unique stamp within the context of this invocation of the compiler process 
     member x.Stamp = x.Data.val_stamp
+
     /// The type of the value. 
     /// May be a TType_forall for a generic value. 
     /// May be a type variable or type containing type variables during type inference. 
@@ -1966,10 +2062,7 @@ and
     /// a true body. These cases are often causes of bugs in the compiler.
     member x.MemberInfo                 = x.Data.val_member_info
 
-    /// Indicates if this is a member, and if so, gives some more data about the member.
-    ///
-    /// Note, the value may still be (a) an extension member or (b) and abtract slot without
-    /// a true body. These cases are often causes of bugs in the compiler.
+    /// Indicates if this is a member
     member x.IsMember                   = x.MemberInfo.IsSome
 
     /// Indicates if this is a member, excluding extension members
@@ -2017,7 +2110,7 @@ and
     /// Indicates if the backing field for a static value is suppressed.
     member x.IsCompiledAsStaticPropertyWithoutField = x.Data.val_flags.IsCompiledAsStaticPropertyWithoutField
 
-    /// Indicates if this is allows the use of an explicit type instantiation (i.e. does it itself have explciti type arguments,
+    /// Indicates if this value allows the use of an explicit type instantiation (i.e. does it itself have explicit type arguments,
     /// or does it have a signature?)
     member x.PermitsExplicitTypeInstantiation = x.Data.val_flags.PermitsExplicitTypeInstantiation
 
@@ -2229,7 +2322,7 @@ and
     
     
 and 
-    []
+    []
     []
     ValData =
 
@@ -2287,7 +2380,7 @@ and
       mutable val_xmldocsig : string } 
 
 and 
-    []
+    []
     ValMemberInfo = 
     { /// The parent type. For an extension member this is the type being extended 
       ApparentParent: TyconRef  
@@ -2302,7 +2395,7 @@ and
 
 
 and 
-    []
+    []
     NonLocalValOrMemberRef = 
     { /// A reference to the entity containing the value or member. THis will always be a non-local reference
       EnclosingEntity : EntityRef 
@@ -2392,14 +2485,14 @@ and NonLocalEntityRef    =
                 | [(_,st)] ->
                     // 'entity' is at position i in the dereference chain. We resolved to position 'j'.
                     // Inject namespaces until we're an position j, and then inject the type.
-                    // Note: this is similar to code in build.fs
+                    // Note: this is similar to code in CompileOps.fs
                     let rec injectNamespacesFromIToJ (entity: Entity) k = 
                         if k = j  then 
                             let newEntity = Construct.NewProvidedTycon(resolutionEnvironment, st, ccu.ImportProvidedType, false, m)
                             entity.ModuleOrNamespaceType.AddProvidedTypeEntity(newEntity)
                             newEntity
                         else
-                            let cpath = mkNestedCPath entity.CompilationPath entity.LogicalName ModuleOrNamespaceKind.Namespace
+                            let cpath = entity.CompilationPath.NestedCompPath entity.LogicalName ModuleOrNamespaceKind.Namespace
                             let newEntity = 
                                 Construct.NewModuleOrNamespace 
                                     (Some cpath) 
@@ -2477,7 +2570,7 @@ and NonLocalEntityRef    =
         match nleref.TryDeref with 
         | Some res -> res
         | None -> 
-              errorR (InternalUndefinedItemRef (FSComp.SR.tastUndefinedItemRefModuleNamespace, nleref.DisplayName, nleref.AssemblyName, "")); 
+              errorR (InternalUndefinedItemRef (FSComp.SR.tastUndefinedItemRefModuleNamespace, nleref.DisplayName, nleref.AssemblyName, "")) 
               raise (KeyNotFoundException())
         
     /// Try to get the details of the module or namespace fragment referred to by this non-local reference.
@@ -2511,8 +2604,8 @@ and
         | None -> 
              ()
 
-    // Dereference the TyconRef to a Tycon. Amortize the cost of doing this.
-    // This path should not allocate in the amortized case
+    /// Dereference the TyconRef to a Tycon. Amortize the cost of doing this.
+    /// This path should not allocate in the amortized case
     member tcr.Deref = 
         match box tcr.binding with 
         | null ->
@@ -2523,7 +2616,7 @@ and
         | _ -> 
             tcr.binding
 
-    // Dereference the TyconRef to a Tycon option.
+    /// Dereference the TyconRef to a Tycon option.
     member tcr.TryDeref = 
         match box tcr.binding with 
         | null -> 
@@ -2546,35 +2639,47 @@ and
 
     /// Gets the data indicating the compiled representation of a type or module in terms of Abstract IL data structures.
     member x.CompiledRepresentation = x.Deref.CompiledRepresentation
+
     /// Gets the data indicating the compiled representation of a named type or module in terms of Abstract IL data structures.
     member x.CompiledRepresentationForNamedType = x.Deref.CompiledRepresentationForNamedType
+
     /// The name of the namespace, module or type, possibly with mangling, e.g. List`1, List or FailureException 
     member x.LogicalName = x.Deref.LogicalName
+
     /// The compiled name of the namespace, module or type, e.g. FSharpList`1, ListModule or FailureException 
     member x.CompiledName = x.Deref.CompiledName
+
     /// The display name of the namespace, module or type, e.g. List instead of List`1, not including static parameters
     member x.DisplayName = x.Deref.DisplayName
+
     /// The display name of the namespace, module or type with <_,_,_> added for generic types,  including static parameters
     member x.DisplayNameWithStaticParametersAndUnderscoreTypars = x.Deref.DisplayNameWithStaticParametersAndUnderscoreTypars
+
     /// The display name of the namespace, module or type, e.g. List instead of List`1, including static parameters
     member x.DisplayNameWithStaticParameters = x.Deref.DisplayNameWithStaticParameters
+
     /// The code location where the module, namespace or type is defined.
     member x.Range = x.Deref.Range
+
     /// A unique stamp for this module, namespace or type definition within the context of this compilation. 
     /// Note that because of signatures, there are situations where in a single compilation the "same" 
     /// module, namespace or type may have two distinct Entity objects that have distinct stamps.
     member x.Stamp = x.Deref.Stamp
+
     /// The F#-defined custom attributes of the entity, if any. If the entity is backed by Abstract IL or provided metadata
     /// then this does not include any attributes from those sources.
     member x.Attribs = x.Deref.Attribs
+
     /// The XML documentation of the entity, if any. If the entity is backed by provided metadata
     /// then this _does_ include this documentation. If the entity is backed by Abstract IL metadata
     /// or comes from another F# assembly then it does not (because the documentation will get read from 
     /// an XML file).
     member x.XmlDoc = x.Deref.XmlDoc
+
     /// The XML documentation sig-string of the entity, if any, to use to lookup an .xml doc file. This also acts
     /// as a cache for this sig-string computation.
     member x.XmlDocSig = x.Deref.XmlDocSig
+
     /// The logical contents of the entity when it is a module or namespace fragment.
     member x.ModuleOrNamespaceType = x.Deref.ModuleOrNamespaceType
     
@@ -2583,14 +2688,19 @@ and
 
     /// The logical contents of the entity when it is a type definition.
     member x.TypeContents = x.Deref.TypeContents
+
     /// The kind of the type definition - is it a measure definition or a type definition?
     member x.TypeOrMeasureKind = x.Deref.TypeOrMeasureKind
+
     /// The identifier at the point of declaration of the type definition.
     member x.Id = x.Deref.Id
+
     /// The information about the r.h.s. of a type definition, if any. For example, the r.h.s. of a union or record type.
     member x.TypeReprInfo = x.Deref.TypeReprInfo
+
     /// The information about the r.h.s. of an F# exception definition, if any. 
     member x.ExceptionInfo        = x.Deref.ExceptionInfo
+
     /// Indicates if the entity represents an F# exception declaration.
     member x.IsExceptionDecl      = x.Deref.IsExceptionDecl
     
@@ -2598,128 +2708,181 @@ and
     /// 
     /// Lazy because it may read metadata, must provide a context "range" in case error occurs reading metadata.
     member x.Typars m             = x.Deref.Typars m
+
     /// Get the type parameters for an entity that is a type declaration, otherwise return the empty list.
     member x.TyparsNoRange        = x.Deref.TyparsNoRange
+
     /// Indicates if this entity is an F# type abbreviation definition
     member x.TypeAbbrev           = x.Deref.TypeAbbrev
+
+    /// Indicates if this entity is an F# type abbreviation definition
     member x.IsTypeAbbrev         = x.Deref.IsTypeAbbrev
+
     /// Get the value representing the accessiblity of the r.h.s. of an F# type definition.
     member x.TypeReprAccessibility = x.Deref.TypeReprAccessibility
+
     /// Get the cache of the compiled ILTypeRef representation of this module or type.
     member x.CompiledReprCache    = x.Deref.CompiledReprCache
+
     /// Get a blob of data indicating how this type is nested in other namespaces, modules or types.
     member x.PublicPath : PublicPath option = x.Deref.PublicPath
+
     /// Get the value representing the accessiblity of an F# type definition or module.
     member x.Accessibility        = x.Deref.Accessibility
+
     /// Indicates the type prefers the "tycon" syntax for display etc. 
     member x.IsPrefixDisplay      = x.Deref.IsPrefixDisplay
+
     /// Indicates the "tycon blob" is actually a module 
     member x.IsModuleOrNamespace  = x.Deref.IsModuleOrNamespace
+
     /// Indicates if the entity is a namespace
     member x.IsNamespace          = x.Deref.IsNamespace
+
     /// Indicates if the entity is an F# module definition
     member x.IsModule             = x.Deref.IsModule
+
+    /// Get a blob of data indicating how this type is nested inside other namespaces, modules and types.
     member x.CompilationPathOpt   = x.Deref.CompilationPathOpt
+
 #if EXTENSIONTYPING
     /// Indicates if the entity is a provided namespace fragment
     member x.IsProvided               = x.Deref.IsProvided
+
     /// Indicates if the entity is a provided namespace fragment
     member x.IsProvidedNamespace      = x.Deref.IsProvidedNamespace
+
     /// Indicates if the entity is an erased provided type definition
     member x.IsProvidedErasedTycon    = x.Deref.IsProvidedErasedTycon
+
     /// Indicates if the entity is a generated provided type definition, i.e. not erased.
     member x.IsProvidedGeneratedTycon = x.Deref.IsProvidedGeneratedTycon
 #endif
+
     /// Get a blob of data indicating how this type is nested inside other namespaces, modules and types.
     member x.CompilationPath      = x.Deref.CompilationPath
+
     /// Get a table of fields for all the F#-defined record, struct and class fields in this type definition, including
     /// static fields, 'val' declarations and hidden fields from the compilation of implicit class constructions.
     member x.AllFieldTable        = x.Deref.AllFieldTable
+
     /// Get an array of fields for all the F#-defined record, struct and class fields in this type definition, including
     /// static fields, 'val' declarations and hidden fields from the compilation of implicit class constructions.
     member x.AllFieldsArray       = x.Deref.AllFieldsArray
+
     /// Get a list of fields for all the F#-defined record, struct and class fields in this type definition, including
     /// static fields, 'val' declarations and hidden fields from the compilation of implicit class constructions.
     member x.AllFieldsAsList = x.Deref.AllFieldsAsList
+
     /// Get a list of all fields for F#-defined record, struct and class fields in this type definition,
     /// including static fields, but excluding compiler-generate fields.
     member x.TrueFieldsAsList = x.Deref.TrueFieldsAsList
+
     /// Get a list of all instance fields for F#-defined record, struct and class fields in this type definition,
     /// excluding compiler-generate fields.
     member x.TrueInstanceFieldsAsList = x.Deref.TrueInstanceFieldsAsList
+
     /// Get a list of all instance fields for F#-defined record, struct and class fields in this type definition.
     /// including hidden fields from the compilation of implicit class constructions.
     // NOTE: This method doesn't perform particularly well, and is over-used, but doesn't seem to appear on performance traces
     member x.AllInstanceFieldsAsList = x.Deref.AllInstanceFieldsAsList
+
     /// Get a field by index in definition order
     member x.GetFieldByIndex  n        = x.Deref.GetFieldByIndex n
+
     /// Get a field by name.
     member x.GetFieldByName n          = x.Deref.GetFieldByName n
+
     /// Get the union cases and other union-type information for a type, if any
     member x.UnionTypeInfo             = x.Deref.UnionTypeInfo
+
     /// Get the union cases for a type, if any
     member x.UnionCasesArray           = x.Deref.UnionCasesArray
+
     /// Get the union cases for a type, if any, as a list
     member x.UnionCasesAsList          = x.Deref.UnionCasesAsList
+
     /// Get a union case of a type by name
     member x.GetUnionCaseByName n      = x.Deref.GetUnionCaseByName n
+
     /// Get the blob of information associated with an F# object-model type definition, i.e. class, interface, struct etc.
     member x.FSharpObjectModelTypeInfo = x.Deref.FSharpObjectModelTypeInfo
+
     /// Gets the immediate interface definitions of an F# type definition. Further interfaces may be supported through class and interface inheritance.
     member x.ImmediateInterfacesOfFSharpTycon   = x.Deref.ImmediateInterfacesOfFSharpTycon
+
     /// Gets the immediate interface types of an F# type definition. Further interfaces may be supported through class and interface inheritance.
     member x.ImmediateInterfaceTypesOfFSharpTycon = x.Deref.ImmediateInterfaceTypesOfFSharpTycon
+
     /// Gets the immediate members of an F# type definition, excluding compiler-generated ones.
     /// Note: result is alphabetically sorted, then for each name the results are in declaration order
     member x.MembersOfFSharpTyconSorted = x.Deref.MembersOfFSharpTyconSorted
+
     /// Gets all immediate members of an F# type definition keyed by name, including compiler-generated ones.
     /// Note: result is a indexed table, and for each name the results are in reverse declaration order
     member x.MembersOfFSharpTyconByName = x.Deref.MembersOfFSharpTyconByName
+
     /// Indicates if this is a struct or enum type definition , i.e. a value type definition
     member x.IsStructOrEnumTycon       = x.Deref.IsStructOrEnumTycon
+
     /// Indicates if this is an F# type definition which is one of the special types in FSharp.Core.dll which uses 
     /// an assembly-code representation for the type, e.g. the primitive array type constructor.
     member x.IsAsmReprTycon            = x.Deref.IsAsmReprTycon
+
     /// Indicates if this is an F# type definition which is one of the special types in FSharp.Core.dll like 'float<_>' which
     /// defines a measure type with a relation to an existing non-measure type as a representation.
     member x.IsMeasureableReprTycon    = x.Deref.IsMeasureableReprTycon
+
     /// Indicates if the entity is erased, either a measure definition, or an erased provided type definition
     member x.IsErased                  = x.Deref.IsErased
     
     /// Gets any implicit hash/equals (with comparer argument) methods added to an F# record, union or struct type definition.
     member x.GeneratedHashAndEqualsWithComparerValues = x.Deref.GeneratedHashAndEqualsWithComparerValues
+
     /// Gets any implicit CompareTo (with comparer argument) methods added to an F# record, union or struct type definition.
     member x.GeneratedCompareToWithComparerValues = x.Deref.GeneratedCompareToWithComparerValues
+
     /// Gets any implicit CompareTo methods added to an F# record, union or struct type definition.
     member x.GeneratedCompareToValues = x.Deref.GeneratedCompareToValues
+
     /// Gets any implicit hash/equals methods added to an F# record, union or struct type definition.
     member x.GeneratedHashAndEqualsValues = x.Deref.GeneratedHashAndEqualsValues
     
     /// Indicate if this is a type definition backed by Abstract IL metadata.
     member x.IsILTycon                = x.Deref.IsILTycon
+
     /// Get the Abstract IL scope, nesting and metadata for this 
     /// type definition, assuming it is backed by Abstract IL metadata.
     member x.ILTyconInfo              = x.Deref.ILTyconInfo
+
     /// Get the Abstract IL metadata for this type definition, assuming it is backed by Abstract IL metadata.
     member x.ILTyconRawMetadata       = x.Deref.ILTyconRawMetadata
+
     /// Indicate if this is a type whose r.h.s. is known to be a union type definition.
     member x.IsUnionTycon             = x.Deref.IsUnionTycon
+
     /// Indicates if this is an F# type definition whose r.h.s. is known to be a record type definition.
     member x.IsRecordTycon            = x.Deref.IsRecordTycon
+
     /// Indicates if this is an F# type definition whose r.h.s. is known to be some kind of F# object model definition
     member x.IsFSharpObjectModelTycon = x.Deref.IsFSharpObjectModelTycon
+
     /// Indicates if this is an F# type definition whose r.h.s. definition is unknown (i.e. a traditional ML 'abstract' type in a signature,
     /// which in F# is called a 'unknown representation' type).
     member x.IsHiddenReprTycon        = x.Deref.IsHiddenReprTycon
 
     /// Indicates if this is an F#-defined interface type definition 
     member x.IsFSharpInterfaceTycon   = x.Deref.IsFSharpInterfaceTycon
+
     /// Indicates if this is an F#-defined delegate type definition 
     member x.IsFSharpDelegateTycon    = x.Deref.IsFSharpDelegateTycon
+
     /// Indicates if this is an F#-defined enum type definition 
     member x.IsFSharpEnumTycon        = x.Deref.IsFSharpEnumTycon
+
     /// Indicates if this is a .NET-defined enum type definition 
     member x.IsILEnumTycon            = x.Deref.IsILEnumTycon
+
     /// Indicates if this is an enum type definition 
     member x.IsEnumTycon              = x.Deref.IsEnumTycon
 
@@ -2728,14 +2891,17 @@ and
 
     /// Indicates if this is a .NET-defined struct or enum type definition , i.e. a value type definition
     member x.IsILStructOrEnumTycon          = x.Deref.IsILStructOrEnumTycon
+
     /// Indicates if we have pre-determined that a type definition has a default constructor.
     member x.PreEstablishedHasDefaultConstructor = x.Deref.PreEstablishedHasDefaultConstructor
+
     /// Indicates if we have pre-determined that a type definition has a self-referential constructor using 'as x'
     member x.HasSelfReferentialConstructor = x.Deref.HasSelfReferentialConstructor
 
 
 /// note: ModuleOrNamespaceRef and TyconRef are type equivalent 
 and ModuleOrNamespaceRef       = EntityRef
+
 and TyconRef       = EntityRef
 
 /// References are either local or nonlocal
@@ -2752,6 +2918,7 @@ and
     member x.PrivateTarget = x.binding
     member x.ResolvedTarget = x.binding
 
+    /// Dereference the ValRef to a Val.
     member vr.Deref = 
         match box vr.binding with 
         | null ->
@@ -2766,6 +2933,7 @@ and
             res 
         | _ -> vr.binding
 
+    /// Dereference the ValRef to a Val option.
     member vr.TryDeref = 
         match box vr.binding with 
         | null -> 
@@ -2780,55 +2948,153 @@ and
         | _ -> 
             Some vr.binding
 
+    /// The type of the value. May be a TType_forall for a generic value. 
+    /// May be a type variable or type containing type variables during type inference. 
     member x.Type                       = x.Deref.Type
+
+    /// Get the type of the value including any generic type parameters
     member x.TypeScheme                 = x.Deref.TypeScheme
+
+    /// Get the type of the value after removing any generic type parameters
     member x.TauType                    = x.Deref.TauType
+
     member x.Typars                     = x.Deref.Typars
     member x.LogicalName                = x.Deref.LogicalName
     member x.DisplayName                = x.Deref.DisplayName
     member x.CoreDisplayName            = x.Deref.CoreDisplayName
     member x.Range                      = x.Deref.Range
 
+    /// Get the value representing the accessiblity of an F# type definition or module.
     member x.Accessibility              = x.Deref.Accessibility
+
+    /// The parent type or module, if any (None for expression bindings and parameters)
     member x.ActualParent               = x.Deref.ActualParent
+
+    /// Get the apparent parent entity for the value, i.e. the entity under with which the
+    /// value is associated. For extension members this is the nominal type the member extends.
+    /// For other values it is just the actual parent.
     member x.ApparentParent             = x.Deref.ApparentParent
+
+    /// Range of the definition (implementation) of the value, used by Visual Studio 
+    /// Updated by mutation when the implementation is matched against the signature. 
     member x.DefinitionRange            = x.Deref.DefinitionRange
+
+    /// The value of a value or member marked with [] 
     member x.LiteralValue               = x.Deref.LiteralValue
+
     member x.Id                         = x.Deref.Id
+
+    /// Get the name of the value, assuming it is compiled as a property.
+    ///   - If this is a property then this is 'Foo' 
+    ///   - If this is an implementation of an abstract slot then this is the name of the property implemented by the abstract slot
     member x.PropertyName               = x.Deref.PropertyName
+
+    /// A unique stamp within the context of this invocation of the compiler process 
     member x.Stamp                      = x.Deref.Stamp
+
+    /// Is this represented as a "top level" static binding (i.e. a static field, static member,
+    /// instance member), rather than an "inner" binding that may result in a closure.
     member x.IsCompiledAsTopLevel       = x.Deref.IsCompiledAsTopLevel
+
+    /// Indicates if this member is an F#-defined dispatch slot.
     member x.IsDispatchSlot             = x.Deref.IsDispatchSlot
+
+    /// The name of the method in compiled code (with some exceptions where ilxgen.fs decides not to use a method impl)
     member x.CompiledName         = x.Deref.CompiledName
 
+    /// Get the public path to the value, if any? Should be set if and only if
+    /// IsMemberOrModuleBinding is set.
     member x.PublicPath                 = x.Deref.PublicPath
+
+    /// The quotation expression associated with a value given the [] tag
     member x.ReflectedDefinition        = x.Deref.ReflectedDefinition
+
+    /// Indicates if this is an F#-defined 'new' constructor member
     member x.IsConstructor              = x.Deref.IsConstructor
+
+    /// Indicates if this value was a member declared 'override' or an implementation of an interface slot
     member x.IsOverrideOrExplicitImpl   = x.Deref.IsOverrideOrExplicitImpl
+
+    /// Is this a member, if so some more data about the member.
     member x.MemberInfo                 = x.Deref.MemberInfo
+
+    /// Indicates if this is a member
     member x.IsMember                   = x.Deref.IsMember
+
+    /// Indicates if this is an F#-defined value in a module, or an extension member, but excluding compiler generated bindings from optimizations
     member x.IsModuleBinding            = x.Deref.IsModuleBinding
+
+    /// Indicates if this is an F#-defined instance member. 
+    ///
+    /// Note, the value may still be (a) an extension member or (b) and abtract slot without
+    /// a true body. These cases are often causes of bugs in the compiler.
     member x.IsInstanceMember           = x.Deref.IsInstanceMember
 
+    /// Indicates if this value is declared 'mutable'
     member x.IsMutable                  = x.Deref.IsMutable
+
+    /// Indicates if this value allows the use of an explicit type instantiation (i.e. does it itself have explicit type arguments,
+    /// or does it have a signature?)
     member x.PermitsExplicitTypeInstantiation  = x.Deref.PermitsExplicitTypeInstantiation
+
+    /// Indicates if this is inferred to be a method or function that definitely makes no critical tailcalls?
     member x.MakesNoCriticalTailcalls  = x.Deref.MakesNoCriticalTailcalls
+
+    /// Is this a member definition or module definition?
     member x.IsMemberOrModuleBinding    = x.Deref.IsMemberOrModuleBinding
+
+    /// Indicates if this is an F#-defined extension member
     member x.IsExtensionMember          = x.Deref.IsExtensionMember
+
+    /// Indicates if this is a constructor member generated from the de-sugaring of implicit constructor for a class type?
     member x.IsIncrClassConstructor = x.Deref.IsIncrClassConstructor
+
+    /// Indicates if this is a member generated from the de-sugaring of 'let' function bindings in the implicit class syntax?
     member x.IsIncrClassGeneratedMember = x.Deref.IsIncrClassGeneratedMember
+
+    /// Get the information about a recursive value used during type inference
     member x.RecursiveValInfo           = x.Deref.RecursiveValInfo
+
+    /// 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>"
     member x.IsTypeFunction             = x.Deref.IsTypeFunction
+
+    /// Records the "extra information" for a value compiled as a method.
+    ///
+    /// This indicates the number of arguments in each position for a curried function.
     member x.ValReprInfo                 = x.Deref.ValReprInfo
+
+    /// Get the inline declaration on the value
     member x.InlineInfo                 = x.Deref.InlineInfo
+
+    /// Indicates whether the inline declaration for the value indicate that the value must be inlined?
     member x.MustInline                 = x.Deref.MustInline
+
+    /// Indicates whether this value was generated by the compiler.
+    ///
+    /// Note: this is true for the overrides generated by hash/compare augmentations
     member x.IsCompilerGenerated        = x.Deref.IsCompilerGenerated
+
+    /// Get the declared attributes for the value
     member x.Attribs                    = x.Deref.Attribs
+
+    /// Get the declared documentation for the value
     member x.XmlDoc                     = x.Deref.XmlDoc
+
+    /// Get or set the signature for the value's XML documentation
     member x.XmlDocSig                  = x.Deref.XmlDocSig
+
+    /// Get the actual parent entity for the value (a module or a type), i.e. the entity under which the
+    /// value will appear in compiled code. For extension members this is the module where the extension member
+    /// is declared.
     member x.TopValActualParent         = x.Deref.TopValActualParent
+
+    /// Get the apparent parent entity for a member
     member x.MemberApparentParent       = x.Deref.MemberApparentParent
+
+    /// Get the number of 'this'/'self' object arguments for the member. Instance extension members return '1'.
     member x.NumObjArgs                 = x.Deref.NumObjArgs
 
     override x.ToString() = 
@@ -2840,23 +3106,46 @@ and UnionCaseRef =
     member x.TyconRef = let (UCRef(tcref,_)) = x in tcref
     member x.CaseName = let (UCRef(_,nm)) = x in nm
     member x.Tycon = x.TyconRef.Deref
+    member x.UnionCase = 
+        match x.TyconRef.GetUnionCaseByName x.CaseName with 
+        | Some res -> res
+        | None -> error(InternalError(sprintf "union case %s not found in type %s" x.CaseName x.TyconRef.LogicalName, x.TyconRef.Range))
+    member x.Attribs = x.UnionCase.Attribs
+    member x.Range = x.UnionCase.Range
+    member x.Index = 
+        try 
+           // REVIEW: this could be faster, e.g. by storing the index in the NameMap 
+            x.TyconRef.UnionCasesArray |> Array.findIndex (fun ucspec -> ucspec.DisplayName = x.CaseName) 
+        with :? KeyNotFoundException -> 
+            error(InternalError(sprintf "union case %s not found in type %s" x.CaseName x.TyconRef.LogicalName, x.TyconRef.Range))
+    member x.AllFieldsAsList = x.UnionCase.FieldTable.AllFieldsAsList
+    member x.ReturnType = x.UnionCase.ReturnType
+    member x.FieldByIndex n = x.UnionCase.FieldTable.FieldByIndex n
 
 and RecdFieldRef = 
     | RFRef of TyconRef * string
     member x.TyconRef = let (RFRef(tcref,_)) = x in tcref
     member x.FieldName = let (RFRef(_,id)) = x in id
     member x.Tycon = x.TyconRef.Deref
+    member x.RecdField = 
+        let (RFRef(tcref,id)) = x
+        match tcref.GetFieldByName id with 
+        | Some res -> res
+        | None -> error(InternalError(sprintf "field %s not found in type %s" id tcref.LogicalName, tcref.Range))
+    member x.PropertyAttribs = x.RecdField.PropertyAttribs
+    member x.Range = x.RecdField.Range
+
+    member x.Index =
+        let (RFRef(tcref,id)) = x
+        try 
+            // REVIEW: this could be faster, e.g. by storing the index in the NameMap 
+            tcref.AllFieldsArray |> Array.findIndex (fun rfspec -> rfspec.Name = id)  
+        with :? KeyNotFoundException -> 
+            error(InternalError(sprintf "field %s not found in type %s" id tcref.LogicalName, tcref.Range))
 
 and 
   /// The algebra of types
     []
-// REMOVING because of possible stack overflow 
-
-#if EXTENSIBLE_DUMPER
-#if DEBUG
-    [)>]
-#endif  
-#endif  
     TType =
 
     /// TType_forall(typars, bodyTy).
@@ -2891,6 +3180,7 @@ and
 
     /// Indicates the type is a unit-of-measure expression being used as an argument to a type or member
     | TType_measure of MeasureExpr
+
     override x.ToString() =  
         match x with 
         | TType_forall (_tps,ty) -> "forall _. " + ty.ToString()
@@ -2920,8 +3210,11 @@ and MeasureExpr =
     /// The unit of measure '1', e.g. float = float<1>
     | MeasureOne
 
+    /// Raising a measure to a rational power 
+    | MeasureRationalPower of MeasureExpr * Rational
+
 and 
-    []
+    []
     CcuData = 
     { /// Holds the filename for the DLL, if any 
       FileName: string option 
@@ -2953,8 +3246,8 @@ and
       ImportProvidedType : Tainted -> TType 
       
 #endif
-      /// Indicates that this DLL uses quotation literals somewhere. This is used to implement a restriction on static linking
-      mutable UsesQuotations : bool
+      /// Indicates that this DLL uses pre-F#-4.0 quotation literals somewhere. This is used to implement a restriction on static linking
+      mutable UsesFSharp20PlusQuotations : bool
       
       /// A handle to the full specification of the contents of the module contained in this ccu
       // NOTE: may contain transient state during typechecking 
@@ -3014,10 +3307,10 @@ and CcuThunk =
             let path = System.String.Join(".", requiringPath)
             raise(UnresolvedPathReferenceNoRange(ccu.name,path))
             
-    /// Indicates that this DLL uses quotation literals somewhere. This is used to implement a restriction on static linking
-    member ccu.UsesQuotations 
-        with get() = ccu.Deref.UsesQuotations 
-        and set v = ccu.Deref.UsesQuotations <- v
+    /// Indicates that this DLL uses F# 2.0+ quotation literals somewhere. This is used to implement a restriction on static linking.
+    member ccu.UsesFSharp20PlusQuotations 
+        with get() = ccu.Deref.UsesFSharp20PlusQuotations 
+        and set v = ccu.Deref.UsesFSharp20PlusQuotations <- v
     member ccu.AssemblyName        = ccu.name
     /// Holds the data indicating how this assembly/module is referenced from the code being compiled. 
     member ccu.ILScopeRef          = ccu.Deref.ILScopeRef
@@ -3105,7 +3398,7 @@ and CcuResolutionResult =
     | UnresolvedCcu of string
 
 /// Represents the information saved in the assembly signature data resource for an F# assembly
-and PickledModuleInfo =
+and PickledCcuInfo =
   { mspec: ModuleOrNamespace
     compileTimeWorkingDir: string
     usesQuotations : bool }
@@ -3117,22 +3410,23 @@ and PickledModuleInfo =
 and Attribs = Attrib list 
 
 and AttribKind = 
-  /// Indicates an attribute refers to a type defined in an imported .NET assembly 
-  | ILAttrib of ILMethodRef 
-  /// Indicates an attribute refers to a type defined in an imported F# assembly 
-  | FSAttrib of ValRef
+    /// Indicates an attribute refers to a type defined in an imported .NET assembly 
+    | ILAttrib of ILMethodRef 
+    /// Indicates an attribute refers to a type defined in an imported F# assembly 
+    | FSAttrib of ValRef
 
 /// Attrib(kind,unnamedArgs,propVal,appliedToAGetterOrSetter,targetsOpt,range)
 and Attrib = 
-  | Attrib of TyconRef * AttribKind * AttribExpr list * AttribNamedArg list * bool * AttributeTargets option * range
+    | Attrib of TyconRef * AttribKind * AttribExpr list * AttribNamedArg list * bool * AttributeTargets option * range
 
 /// We keep both source expression and evaluated expression around to help intellisense and signature printing
 and AttribExpr = 
     /// AttribExpr(source, evaluated)
-    AttribExpr of Expr * Expr 
+    | AttribExpr of Expr * Expr 
 
 /// AttribNamedArg(name,type,isField,value)
-and AttribNamedArg = AttribNamedArg of (string*TType*bool*AttribExpr)
+and AttribNamedArg = 
+    | AttribNamedArg of (string*TType*bool*AttribExpr)
 
 /// Constants in expressions
 and []
@@ -3277,9 +3571,9 @@ and
     []
     ArgReprInfo = 
     { 
-      // MUTABILITY; used when propagating signature attributes into the implementation.
+      // MUTABILITY: used when propagating signature attributes into the implementation.
       mutable Attribs : Attribs 
-      // MUTABILITY; used when propagating names of parameters from signature into the implementation.
+      // MUTABILITY: used when propagating names of parameters from signature into the implementation.
       mutable Name : Ident option  }
 
 /// Records the extra metadata stored about typars for type parameters
@@ -3361,10 +3655,10 @@ and
     /// A few of intrinsics (TOp_try, TOp.While, TOp.For) expect arguments kept in a normal form involving lambdas 
     | Op of TOp * TypeInst * Exprs * range
 
-    // Expr.Quote(quotedExpr, savedPickledAstInfoOption, isFromQueryExpression, fullRange, quotedType)
+    // Expr.Quote(quotedExpr, (referencedTypes, spliceTypes, spliceExprs, data) option ref, isFromQueryExpression, fullRange, quotedType)
     //
     // Indicates the expression is a quoted expression tree. 
-    | Quote of Expr * (TTypes * Exprs * ExprData) option ref * bool * range * TType  
+    | Quote of Expr * (ILTypeRef list * TTypes * Exprs * ExprData) option ref * bool * range * TType  
     
     /// Typechecking residue: Indicates a free choice of typars that arises due to 
     /// minimization of polymorphism at let-rec bindings.  These are 
@@ -3747,47 +4041,6 @@ let ccuEq (mv1: CcuThunk) (mv2: CcuThunk) =
 /// For derefencing in the middle of a pattern
 let (|ValDeref|) (vr :ValRef) = vr.Deref
 
-//---------------------------------------------------------------------------
-// Get information from refs
-//---------------------------------------------------------------------------
-
-exception InternalUndefinedTyconItem of (string * string -> int * string) * TyconRef * string
-
-type UnionCaseRef with 
-    member x.UnionCase = 
-        let (UCRef(tcref,nm)) = x
-        match tcref.GetUnionCaseByName nm with 
-        | Some res -> res
-        | None -> error (InternalUndefinedTyconItem (FSComp.SR.tastUndefinedTyconItemUnionCase, tcref, nm))
-    member x.Attribs = x.UnionCase.Attribs
-    member x.Range = x.UnionCase.Range
-    member x.Index = 
-        let (UCRef(tcref,id)) = x
-        try 
-           // REVIEW: this could be faster, e.g. by storing the index in the NameMap 
-            tcref.UnionCasesArray |> Array.findIndex (fun ucspec -> ucspec.DisplayName = id) 
-        with :? KeyNotFoundException -> 
-            error(InternalError(sprintf "union case %s not found in type %s" id tcref.LogicalName, tcref.Range))
-    member x.AllFieldsAsList = x.UnionCase.FieldTable.AllFieldsAsList
-    member x.ReturnType = x.UnionCase.ReturnType
-    member x.FieldByIndex n = x.UnionCase.FieldTable.FieldByIndex n
-
-type RecdFieldRef with 
-    member x.RecdField = 
-        let (RFRef(tcref,id)) = x
-        match tcref.GetFieldByName id with 
-        | Some res -> res
-        | None -> error (InternalUndefinedTyconItem (FSComp.SR.tastUndefinedTyconItemField, tcref, id))
-    member x.PropertyAttribs = x.RecdField.PropertyAttribs
-    member x.Range = x.RecdField.Range
-
-    member x.Index =
-        let (RFRef(tcref,id)) = x
-        try 
-            // REVIEW: this could be faster, e.g. by storing the index in the NameMap 
-            tcref.AllFieldsArray |> Array.findIndex (fun rfspec -> rfspec.Name = id)  
-        with :? KeyNotFoundException -> 
-            error(InternalError(sprintf "field %s not found in type %s" id tcref.LogicalName, tcref.Range))
 
 //--------------------------------------------------------------------------
 // Make references to TAST items
@@ -3816,25 +4069,24 @@ let mkNestedNonLocalEntityRef (nleref:NonLocalEntityRef) id = mkNonLocalEntityRe
 let mkNonLocalTyconRef nleref id = ERefNonLocal (mkNestedNonLocalEntityRef nleref id)
 let mkNonLocalTyconRefPreResolved x nleref id = ERefNonLocalPreResolved x (mkNestedNonLocalEntityRef nleref id)
 
-let mkNestedUnionCaseRef tcref (uc: UnionCase) = mkUnionCaseRef tcref uc.Id.idText
-let mkNestedRecdFieldRef tcref (rf: RecdField) = mkRecdFieldRef tcref rf.Name
-
 type EntityRef with 
     
-    member tcref.UnionCasesAsRefList         = tcref.UnionCasesAsList         |> List.map (mkNestedUnionCaseRef tcref)
-    member tcref.TrueInstanceFieldsAsRefList = tcref.TrueInstanceFieldsAsList |> List.map (mkNestedRecdFieldRef tcref)
-    member tcref.AllFieldAsRefList           = tcref.AllFieldsAsList          |> List.map (mkNestedRecdFieldRef tcref)
+    member tcref.UnionCasesAsRefList         = tcref.UnionCasesAsList         |> List.map tcref.MakeNestedUnionCaseRef
+    member tcref.TrueInstanceFieldsAsRefList = tcref.TrueInstanceFieldsAsList |> List.map tcref.MakeNestedRecdFieldRef
+    member tcref.AllFieldAsRefList           = tcref.AllFieldsAsList          |> List.map tcref.MakeNestedRecdFieldRef
 
-    member tcref.MkNestedTyconRef (x:Entity) : TyconRef  = 
+    member tcref.NestedTyconRef (x:Entity) = 
         match tcref with 
         | ERefLocal _ -> mkLocalTyconRef x
         | ERefNonLocal nlr -> mkNonLocalTyconRefPreResolved x nlr x.LogicalName
 
-    member tcref.MkNestedRecdFieldRef tycon (rf:Ident) = mkRecdFieldRef (tcref.MkNestedTyconRef tycon) rf.idText 
+    member tcref.RecdFieldRefInNestedTycon tycon (id:Ident) = mkRecdFieldRef (tcref.NestedTyconRef tycon) id.idText 
+    member tcref.MakeNestedRecdFieldRef  (rf: RecdField) = mkRecdFieldRef tcref rf.Name
+    member tcref.MakeNestedUnionCaseRef  (uc: UnionCase) = mkUnionCaseRef tcref uc.Id.idText
 
 /// Make a reference to a union case for type in a module or namespace
 let mkModuleUnionCaseRef (modref:ModuleOrNamespaceRef) tycon uc = 
-    mkNestedUnionCaseRef (modref.MkNestedTyconRef tycon) uc
+    (modref.NestedTyconRef tycon).MakeNestedUnionCaseRef uc
 
 let VRefLocal    x : ValRef = { binding=x; nlr=Unchecked.defaultof<_> }      
 let VRefNonLocal x : ValRef = { binding=Unchecked.defaultof<_>; nlr=x }      
@@ -3875,7 +4127,7 @@ let copyTypars tps = List.map copyTypar tps
 //-------------------------------------------------------------------------- 
     
 let tryShortcutSolvedUnitPar canShortcut (r:Typar) = 
-    if r.Kind = TyparKind.Type then failwith "tryShortcutSolvedUnitPar: kind=type";
+    if r.Kind = TyparKind.Type then failwith "tryShortcutSolvedUnitPar: kind=type"
     match r.Solution with
     | Some (TType_measure unt) -> 
         if canShortcut then 
@@ -4093,7 +4345,9 @@ let primValRefEq compilingFslib fslibCcu (x : ValRef) (y : ValRef) =
 // pubpath/cpath mess
 //---------------------------------------------------------------------------
 
-let stringOfAccess (TAccess paths) = String.concat ";" (List.map mangledTextOfCompPath paths)
+let stringOfAccess (TAccess paths) = 
+    let mangledTextOfCompPath (CompPath(scoref,path)) = getNameOfScopeRef scoref + "/" + textOfPath (List.map fst path)  
+    String.concat ";" (List.map mangledTextOfCompPath paths)
 
 let demangledPathOfCompPath (CompPath(_,path)) = 
     path |> List.map (fun (nm,k) -> Entity.DemangleEntityName nm k)
@@ -4141,16 +4395,16 @@ let combineAccess (TAccess a1) (TAccess a2) = TAccess(a1@a2)
 
 let NewFreeVarsCache() = newCache ()
 
-let MakeUnionCasesTable ucs = 
+let MakeUnionCasesTable ucs : TyconUnionCases = 
     { CasesByIndex = Array.ofList ucs 
       CasesByName = NameMap.ofKeyedList (fun uc -> uc.DisplayName) ucs }
                                                                   
-let MakeRecdFieldsTable ucs = 
+let MakeRecdFieldsTable ucs : TyconRecdFields = 
     { FieldsByIndex = Array.ofList ucs 
       FieldsByName = ucs  |> NameMap.ofKeyedList (fun rfld -> rfld.Name) }
                                                                   
 
-let MakeUnionCases ucs = 
+let MakeUnionCases ucs : TyconUnionData = 
     { CasesTable=MakeUnionCasesTable ucs 
       CompiledRepresentation=newCache() }
 
@@ -4169,7 +4423,7 @@ let NewTypar (kind,rigid,Typar(id,staticReq,isCompGen),isFromError,dynamicReq,at
 
 let NewRigidTypar nm m = NewTypar (TyparKind.Type,TyparRigidity.Rigid,Typar(mkSynId m nm,NoStaticReq,true),false,TyparDynamicReq.Yes,[],false,false)
 
-let NewUnionCase id nm tys rty attribs docOption access = 
+let NewUnionCase id nm tys rty attribs docOption access : UnionCase = 
     { Id=id
       CompiledName=nm
       XmlDoc=docOption
@@ -4196,7 +4450,7 @@ let NewExn cpath (id:Ident) access repr attribs doc =
         entity_tycon_tcaug=TyconAugmentation.Create()
         entity_xmldoc=doc
         entity_xmldocsig=""
-        entity_pubpath=cpath |> Option.map (publicPathOfCompPath id)
+        entity_pubpath=cpath |> Option.map (fun (cp:CompilationPath) -> cp.NestedPublicPath id)
         entity_accessiblity=access
         entity_tycon_repr_accessibility=access
         entity_modul_contents = notlazy (NewEmptyModuleOrNamespaceType ModuleOrType)
@@ -4242,7 +4496,7 @@ let NewTycon (cpath, nm, m, access, reprAccess, kind, typars, docOption, usesPre
         entity_accessiblity=access
         entity_xmldoc = docOption
         entity_xmldocsig=""        
-        entity_pubpath=cpath |> Option.map (publicPathOfCompPath (mkSynId m nm))
+        entity_pubpath=cpath |> Option.map (fun (cp:CompilationPath) -> cp.NestedPublicPath (mkSynId m nm))
         entity_cpath = cpath
         entity_il_repr_cache = newCache() } 
 
@@ -4265,9 +4519,6 @@ let NewModuleOrNamespace cpath access (id:Ident) xml attribs mtype = Construct.N
 
 let NewVal (logicalName:string,m:range,compiledName,ty,isMutable,isCompGen,arity,access,recValInfo,specialRepr,baseOrThis,attribs,inlineInfo,doc,isModuleOrMemberBinding,isExtensionMember,isIncrClassSpecialMember,isTyFunc,allowTypeInst,isGeneratedEventVal,konst,actualParent) : Val = 
     let stamp = newStamp() 
-#if DEBUG
-    if !verboseStamps then dprintf "NewVal, %s#%d\n" logicalName stamp
-#endif
     Val.New
         { val_stamp = stamp
           val_logical_name=logicalName
@@ -4302,10 +4553,7 @@ let NewCcuContents sref m nm mty =
 let NewModifiedTycon f (orig:Tycon) = 
     let stamp = newStamp() 
     let data = orig.Data 
-#if DEBUG
-    if !verboseStamps then dprintf "NewModifiedTycon, %s#%d, based on %s#%d\n" orig.LogicalName stamp orig.LogicalName data.entity_stamp
-#endif
-    Tycon.New "NewModifiedTycon" (f { data with entity_stamp=stamp; }) 
+    Tycon.New "NewModifiedTycon" (f { data with entity_stamp=stamp }) 
     
 /// Create a module Tycon based on an existing one using the function 'f'. 
 /// We require that we be given the parent for the new module. 
@@ -4320,9 +4568,6 @@ let NewModifiedModuleOrNamespace f orig =
 let NewModifiedVal f (orig:Val) = 
     let data = orig.Data
     let stamp = newStamp() 
-#if DEBUG
-    if !verboseStamps then dprintf "NewModifiedVal, stamp #%d, based on stamp #%d\n" stamp data.val_stamp
-#endif
     let data' = f { data with val_stamp=stamp }
     Val.New data'
 
@@ -4331,60 +4576,59 @@ let NewClonedTycon orig =  NewModifiedTycon (fun d -> d) orig
 
 //------------------------------------------------------------------------------
 
-/// Combine two maps where the given function reconciles entries that have the same key
-let private combineMaps f m1 m2 = 
-    Map.foldBack (fun k v acc -> Map.add k (if Map.containsKey k m2 then f [v;Map.find k m2] else f [v]) acc) m1 
-      (Map.foldBack (fun k v acc -> if Map.containsKey k m1 then acc else Map.add k (f [v]) acc) m2 Map.empty)
-
-let private combineMultiMaps f (m1: MultiMap<_,_>) (m2: MultiMap<_,_>) = 
-    Map.foldBack (fun k v acc -> List.foldBack (MultiMap.add k) (if Map.containsKey k m2 then f [v;Map.find k m2] else f [v]) acc) m1 
-      (Map.foldBack (fun k v acc -> if Map.containsKey k m1 then acc else List.foldBack (MultiMap.add k) (f [v]) acc) m2 MultiMap.empty)
-
-
-/// Combine module types when multiple namespace fragments contribute to the
-/// same namespace, making new module specs as we go.
-let rec private combineModuleOrNamespaceTypes path m (mty1:ModuleOrNamespaceType)  (mty2:ModuleOrNamespaceType)  = 
-    match mty1.ModuleOrNamespaceKind,mty2.ModuleOrNamespaceKind  with 
-    | Namespace,Namespace -> 
-        let kind = mty1.ModuleOrNamespaceKind
-        // REVIEW: this is not preserving order as we merge namespace declaration groups
-        let entities = 
-            (mty1.AllEntitiesByLogicalMangledName,mty2.AllEntitiesByLogicalMangledName) 
-            ||>  combineMaps (combineEntityList path) 
-
-        let vals = QueueList.append mty1.AllValsAndMembers mty2.AllValsAndMembers
-
-        new ModuleOrNamespaceType(kind, vals, QueueList.ofList (NameMap.range entities))
-
-    | Namespace, _ | _,Namespace -> 
-        error(Error(FSComp.SR.tastNamespaceAndModuleWithSameNameInAssembly(textOfPath path),m))
-
-    | _-> 
-        error(Error(FSComp.SR.tastTwoModulesWithSameNameInAssembly(textOfPath path),m))
-
-and private combineEntityList path l = 
-    match l with
-    | h :: t -> List.fold (combineEntites path) h t
-    | _ -> failwith "combineEntityList"
-
-and private combineEntites path (entity1:Entity) (entity2:Entity) = 
-
-    match entity1.IsModuleOrNamespace, entity2.IsModuleOrNamespace with
-    | true,true -> 
-        entity1 |> NewModifiedTycon (fun data1 -> 
-                    { data1 with 
-                         entity_xmldoc = XmlDoc.Merge entity1.XmlDoc entity2.XmlDoc
-                         entity_attribs = entity1.Attribs @ entity2.Attribs
-                         entity_modul_contents=lazy (combineModuleOrNamespaceTypes (path@[entity2.DemangledModuleOrNamespaceName]) entity2.Range entity1.ModuleOrNamespaceType entity2.ModuleOrNamespaceType); }) 
-    | false,false -> 
-        error(Error(FSComp.SR.tastDuplicateTypeDefinitionInAssembly(entity2.LogicalName, textOfPath path),entity2.Range))
-    | _,_ -> 
-        error(Error(FSComp.SR.tastConflictingModuleAndTypeDefinitionInAssembly(entity2.LogicalName, textOfPath path),entity2.Range))
+/// Combine a list of ModuleOrNamespaceType's making up the description of a CCU. checking there are now
+/// duplicate modules etc.
+let CombineCcuContentFragments m l = 
+
+    let CombineMaps f m1 m2 = 
+        Map.foldBack (fun k v acc -> Map.add k (if Map.containsKey k m2 then f [v;Map.find k m2] else f [v]) acc) m1 
+          (Map.foldBack (fun k v acc -> if Map.containsKey k m1 then acc else Map.add k (f [v]) acc) m2 Map.empty)
+
+    /// Combine module types when multiple namespace fragments contribute to the
+    /// same namespace, making new module specs as we go.
+    let rec CombineModuleOrNamespaceTypes path m (mty1:ModuleOrNamespaceType)  (mty2:ModuleOrNamespaceType)  = 
+        match mty1.ModuleOrNamespaceKind,mty2.ModuleOrNamespaceKind  with 
+        | Namespace,Namespace -> 
+            let kind = mty1.ModuleOrNamespaceKind
+            let entities = 
+                (mty1.AllEntitiesByLogicalMangledName,mty2.AllEntitiesByLogicalMangledName) 
+                ||>  CombineMaps (CombineEntityList path) 
+
+            let vals = QueueList.append mty1.AllValsAndMembers mty2.AllValsAndMembers
+
+            ModuleOrNamespaceType(kind, vals, QueueList.ofList (NameMap.range entities))
+
+        | Namespace, _ | _,Namespace -> 
+            error(Error(FSComp.SR.tastNamespaceAndModuleWithSameNameInAssembly(textOfPath path),m))
+
+        | _-> 
+            error(Error(FSComp.SR.tastTwoModulesWithSameNameInAssembly(textOfPath path),m))
+
+    and CombineEntityList path l = 
+        match l with
+        | h :: t -> List.fold (CombineEntites path) h t
+        | _ -> failwith "CombineEntityList"
+
+    and CombineEntites path (entity1:Entity) (entity2:Entity) = 
+
+        match entity1.IsModuleOrNamespace, entity2.IsModuleOrNamespace with
+        | true,true -> 
+            entity1 |> NewModifiedTycon (fun data1 -> 
+                        { data1 with 
+                             entity_xmldoc = XmlDoc.Merge entity1.XmlDoc entity2.XmlDoc
+                             entity_attribs = entity1.Attribs @ entity2.Attribs
+                             entity_modul_contents=lazy (CombineModuleOrNamespaceTypes (path@[entity2.DemangledModuleOrNamespaceName]) entity2.Range entity1.ModuleOrNamespaceType entity2.ModuleOrNamespaceType) }) 
+        | false,false -> 
+            error(Error(FSComp.SR.tastDuplicateTypeDefinitionInAssembly(entity2.LogicalName, textOfPath path),entity2.Range))
+        | _,_ -> 
+            error(Error(FSComp.SR.tastConflictingModuleAndTypeDefinitionInAssembly(entity2.LogicalName, textOfPath path),entity2.Range))
     
-and combineModuleOrNamespaceTypeList path m l = 
-    match l with
-    | h :: t -> List.fold (combineModuleOrNamespaceTypes path m) h t
-    | _ -> failwith "combineModuleOrNamespaceTypeList"
+    and CombineModuleOrNamespaceTypeList path m l = 
+        match l with
+        | h :: t -> List.fold (CombineModuleOrNamespaceTypes path m) h t
+        | _ -> failwith "CombineModuleOrNamespaceTypeList"
+
+    CombineModuleOrNamespaceTypeList [] m l
 
 //--------------------------------------------------------------------------
 // Resource format for pickled data
diff --git a/src/fsharp/tc.fsi b/src/fsharp/tc.fsi
deleted file mode 100644
index ce46550bcb2..00000000000
--- a/src/fsharp/tc.fsi
+++ /dev/null
@@ -1,111 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-module internal Microsoft.FSharp.Compiler.TypeChecker
-
-open Internal.Utilities
-open Microsoft.FSharp.Compiler.AbstractIL 
-open Microsoft.FSharp.Compiler.AbstractIL.IL
-open Microsoft.FSharp.Compiler.AbstractIL.Internal 
-open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
-open Microsoft.FSharp.Compiler 
-
-open Microsoft.FSharp.Compiler.Range
-open Microsoft.FSharp.Compiler.Ast
-open Microsoft.FSharp.Compiler.ErrorLogger
-open Microsoft.FSharp.Compiler.Tast
-open Microsoft.FSharp.Compiler.Tastops
-open Microsoft.FSharp.Compiler.Lib
-open Microsoft.FSharp.Compiler.Infos
-open Microsoft.FSharp.Compiler.Import
-open Microsoft.FSharp.Compiler.Env
-
-open System.Collections.Generic
-
-[]
-type TcEnv =
-    member DisplayEnv : DisplayEnv
-    member NameEnv : Nameres.NameResolutionEnv
-
-(* Incremental construction of environments, e.g. for F# Interactive *)
-val internal CreateInitialTcEnv : TcGlobals * ImportMap * range * (CcuThunk * string list * bool) list -> TcEnv 
-val internal AddCcuToTcEnv      : TcGlobals * ImportMap * range * TcEnv * CcuThunk * autoOpens: string list * bool -> TcEnv 
-val internal AddLocalRootModuleOrNamespace : Nameres.TcResultsSink -> TcGlobals -> ImportMap -> range -> TcEnv -> ModuleOrNamespaceType -> TcEnv
-val internal TcOpenDecl         : Nameres.TcResultsSink  -> TcGlobals -> ImportMap -> range -> range -> TcEnv -> Ast.LongIdent -> TcEnv 
-
-type TopAttribs =
-    { mainMethodAttrs : Attribs;
-      netModuleAttrs  : Attribs;
-      assemblyAttrs   : Attribs  }
-
-type ConditionalDefines = 
-    string list
-
-val internal EmptyTopAttrs : TopAttribs
-val internal CombineTopAttrs : TopAttribs -> TopAttribs -> TopAttribs
-
-val internal TypecheckOneImplFile : 
-      TcGlobals * NiceNameGenerator * ImportMap * CcuThunk * (unit -> bool) * ConditionalDefines * Nameres.TcResultsSink
-      -> TcEnv 
-      -> Tast.ModuleOrNamespaceType option
-      -> ParsedImplFileInput
-      -> Eventually
-
-val internal TypecheckOneSigFile : 
-      TcGlobals * NiceNameGenerator * ImportMap * CcuThunk  * (unit -> bool) * ConditionalDefines * Nameres.TcResultsSink 
-      -> TcEnv                             
-      -> ParsedSigFileInput
-      -> Eventually
-
-//-------------------------------------------------------------------------
-// exceptions arising from type checking 
-//------------------------------------------------------------------------- 
-
-exception internal BakedInMemberConstraintName of string * range
-exception internal FunctionExpected of DisplayEnv * TType * range
-exception internal NotAFunction of DisplayEnv * TType * range * range
-exception internal Recursion of DisplayEnv * Ast.Ident * TType * TType * range
-exception internal RecursiveUseCheckedAtRuntime of DisplayEnv * ValRef * range
-exception internal LetRecEvaluatedOutOfOrder of DisplayEnv * ValRef * ValRef * range
-exception internal LetRecCheckedAtRuntime of range
-exception internal LetRecUnsound of DisplayEnv * ValRef list * range
-exception internal TyconBadArgs of DisplayEnv * TyconRef * int * range
-exception internal UnionCaseWrongArguments of DisplayEnv * int * int * range
-exception internal UnionCaseWrongNumberOfArgs of DisplayEnv * int * int * range
-exception internal FieldsFromDifferentTypes of DisplayEnv * RecdFieldRef * RecdFieldRef * range
-exception internal FieldGivenTwice of DisplayEnv * RecdFieldRef * range
-exception internal MissingFields of string list * range
-exception internal UnitTypeExpected of DisplayEnv * TType * bool * range
-exception internal FunctionValueUnexpected of DisplayEnv * TType * range
-exception internal UnionPatternsBindDifferentNames of range
-exception internal VarBoundTwice of Ast.Ident
-exception internal ValueRestriction of DisplayEnv * bool * Val * Typar * range
-exception internal FieldNotMutable of DisplayEnv * RecdFieldRef * range
-exception internal ValNotMutable of DisplayEnv * ValRef * range
-exception internal ValNotLocal of DisplayEnv * ValRef * range
-exception internal InvalidRuntimeCoercion of DisplayEnv * TType * TType * range
-exception internal IndeterminateRuntimeCoercion of DisplayEnv * TType * TType * range
-exception internal IndeterminateStaticCoercion of DisplayEnv * TType * TType * range
-exception internal StaticCoercionShouldUseBox of DisplayEnv * TType * TType * range
-exception internal RuntimeCoercionSourceSealed of DisplayEnv * TType * range
-exception internal CoercionTargetSealed of DisplayEnv * TType * range
-exception internal UpcastUnnecessary of range
-exception internal TypeTestUnnecessary of range
-exception internal SelfRefObjCtor of bool * range
-exception internal VirtualAugmentationOnNullValuedType of range
-exception internal NonVirtualAugmentationOnNullValuedType of range
-exception internal UseOfAddressOfOperator of range
-exception internal DeprecatedThreadStaticBindingWarning of range
-exception internal NotUpperCaseConstructor of range
-exception internal IntfImplInIntrinsicAugmentation of range
-exception internal IntfImplInExtrinsicAugmentation of range
-exception internal OverrideInIntrinsicAugmentation of range
-exception internal OverrideInExtrinsicAugmentation of range
-exception internal NonUniqueInferredAbstractSlot of TcGlobals * DisplayEnv * string * MethInfo * MethInfo * range
-exception internal StandardOperatorRedefinitionWarning of string * range
-exception internal ParameterlessStructCtor of range
-
-val internal TcFieldInit : range -> ILFieldInit -> Tast.Const
-
-val IsSecurityAttribute : TcGlobals -> ImportMap -> Dictionary -> Attrib -> range -> bool
-val IsSecurityCriticalAttribute : TcGlobals -> Attrib -> bool
-val LightweightTcValForUsingInBuildMethodCall : g : TcGlobals -> vref:ValRef -> vrefFlags : ValUseFlag -> vrefTypeInst : TTypes -> m : range -> Expr * TType
\ No newline at end of file
diff --git a/src/fsharp/vs/IncrementalBuild.fs b/src/fsharp/vs/IncrementalBuild.fs
index 59ca37f8b57..dfabec5f5ce 100644
--- a/src/fsharp/vs/IncrementalBuild.fs
+++ b/src/fsharp/vs/IncrementalBuild.fs
@@ -13,8 +13,10 @@ open System
 
 open Microsoft.FSharp.Compiler
 open Microsoft.FSharp.Compiler.Range
-open Microsoft.FSharp.Compiler.Build
+open Microsoft.FSharp.Compiler.CompileOps
+open Microsoft.FSharp.Compiler.CompileOptions
 open Microsoft.FSharp.Compiler.Tastops
+open Microsoft.FSharp.Compiler.TcGlobals
 open Microsoft.FSharp.Compiler.ErrorLogger
 open Microsoft.FSharp.Compiler.Lib
 open Microsoft.FSharp.Compiler.AbstractIL
@@ -1014,7 +1016,7 @@ type ErrorInfo = {
 
     /// Decompose a warning or error into parts: position, severity, message
     static member internal CreateFromException(exn,warn,trim:bool,fallbackRange:range) = 
-        let m = match RangeOfError exn with Some m -> m | None -> fallbackRange 
+        let m = match GetRangeOfError exn with Some m -> m | None -> fallbackRange 
         let (s1:int),(s2:int) = Pos.toVS m.Start
         let (s3:int),(s4:int) = Pos.toVS (if trim then m.Start else m.End)
         let msg = bufs (fun buf -> OutputPhasedError buf exn false)
@@ -1081,11 +1083,11 @@ module internal IncrementalFSharpBuild =
     open Internal.Utilities.Collections
 
     open IncrementalBuild
-    open Microsoft.FSharp.Compiler.Build
-    open Microsoft.FSharp.Compiler.Fscopts
+    open Microsoft.FSharp.Compiler.CompileOps
+    open Microsoft.FSharp.Compiler.CompileOptions
     open Microsoft.FSharp.Compiler.Ast
     open Microsoft.FSharp.Compiler.ErrorLogger
-    open Microsoft.FSharp.Compiler.Env
+    open Microsoft.FSharp.Compiler.TcGlobals
     open Microsoft.FSharp.Compiler.TypeChecker
     open Microsoft.FSharp.Compiler.Tast 
     open Microsoft.FSharp.Compiler.Range
@@ -1209,11 +1211,11 @@ module internal IncrementalFSharpBuild =
         let errorsSeenInScope = new ResizeArray<_>()
             
         let warningOrError warn exn = 
-            let warn = warn && not (ReportWarningAsError tcConfig.globalWarnLevel tcConfig.specificWarnOff tcConfig.specificWarnOn tcConfig.specificWarnAsError tcConfig.specificWarnAsWarn tcConfig.globalWarnAsError exn)                
+            let warn = warn && not (ReportWarningAsError (tcConfig.globalWarnLevel, tcConfig.specificWarnOff, tcConfig.specificWarnOn, tcConfig.specificWarnAsError, tcConfig.specificWarnAsWarn, tcConfig.globalWarnAsError) exn)                
             if not warn then
                 errorsSeenInScope.Add(exn)
                 errorLogger.ErrorSink(exn)                
-            else if ReportWarning tcConfig.globalWarnLevel tcConfig.specificWarnOff tcConfig.specificWarnOn exn then 
+            else if ReportWarning (tcConfig.globalWarnLevel, tcConfig.specificWarnOff, tcConfig.specificWarnOn) exn then 
                 warningsSeenInScope.Add(exn)
                 errorLogger.WarnSink(exn)                    
 
@@ -1427,8 +1429,8 @@ module internal IncrementalFSharpBuild =
                     errorLogger.Warning(e)
                     frameworkTcImports           
 
-            let tcEnv0 = GetInitialTypecheckerEnv (Some assemblyName) rangeStartup tcConfig tcImports tcGlobals
-            let tcState0 = TypecheckInitialState (rangeStartup,assemblyName,tcConfig,tcGlobals,tcImports,niceNameGen,tcEnv0)
+            let tcEnv0 = GetInitialTcEnv (Some assemblyName, rangeStartup, tcConfig, tcImports, tcGlobals)
+            let tcState0 = GetInitialTcState (rangeStartup, assemblyName, tcConfig, tcGlobals, tcImports, niceNameGen, tcEnv0)
             let tcAcc = 
                 { tcGlobals=tcGlobals
                   tcImports=tcImports
@@ -1456,11 +1458,11 @@ module internal IncrementalFSharpBuild =
                         Trace.PrintLine("FSharpBackgroundBuild", fun _ -> sprintf "Typechecking %s..." filename)                
                         beforeTypeCheckFile.Trigger filename
                         let! (tcEnv,topAttribs,typedImplFiles),tcState = 
-                            TypecheckOneInputEventually ((fun () -> errorLogger.ErrorCount > 0),
+                            TypeCheckOneInputEventually ((fun () -> errorLogger.ErrorCount > 0),
                                                          tcConfig,tcAcc.tcImports,
                                                          tcAcc.tcGlobals,
                                                          None,
-                                                         Nameres.TcResultsSink.NoSink,
+                                                         NameResolution.TcResultsSink.NoSink,
                                                          tcAcc.tcState,input)
                         
                         /// Only keep the typed interface files when doing a "full" build for fsc.exe, otherwise just throw them away
@@ -1505,8 +1507,8 @@ module internal IncrementalFSharpBuild =
             Trace.PrintLine("FSharpBackgroundBuildVerbose", fun _ -> sprintf "Finalizing Type Check" )
             let finalAcc = tcStates.[tcStates.Length-1]
             let results = tcStates |> List.ofArray |> List.map (fun acc-> acc.tcEnv, (Option.get acc.topAttribs), acc.typedImplFiles)
-            let (tcEnvAtEndOfLastFile,topAttrs,mimpls),tcState = TypecheckMultipleInputsFinish (results,finalAcc.tcState)
-            let tcState,tassembly = TypecheckClosedInputSetFinish (mimpls,tcState)
+            let (tcEnvAtEndOfLastFile,topAttrs,mimpls),tcState = TypeCheckMultipleInputsFinish (results,finalAcc.tcState)
+            let tcState,tassembly = TypeCheckClosedInputSetFinish (mimpls,tcState)
             tcState, topAttrs, tassembly, tcEnvAtEndOfLastFile, finalAcc.tcImports, finalAcc.tcGlobals, finalAcc.tcConfig
 
         // END OF BUILD TASK FUNCTIONS
@@ -1542,7 +1544,7 @@ module internal IncrementalFSharpBuild =
         let fileDependencies = 
             let unresolvedFileDependencies = 
                 unresolvedReferences
-                |> List.map (function Microsoft.FSharp.Compiler.Build.UnresolvedAssemblyReference(referenceText, _) -> referenceText)
+                |> List.map (function Microsoft.FSharp.Compiler.CompileOps.UnresolvedAssemblyReference(referenceText, _) -> referenceText)
                 |> List.filter(fun referenceText->not(Path.IsInvalidPath(referenceText))) // Exclude things that are definitely not a file name
                 |> List.map(fun referenceText -> if FileSystem.IsPathRootedShim(referenceText) then referenceText else System.IO.Path.Combine(projectDirectory,referenceText))
                 |> List.map (fun file->{Filename =  file; ExistenceDependency = true; IncrementalBuildDependency = true })
@@ -1618,7 +1620,7 @@ module internal IncrementalFSharpBuild =
         member __.TypeCheck() = 
             let newPartialBuild = IncrementalBuild.Eval "FinalizeTypeCheck" partialBuild
             partialBuild <- newPartialBuild
-            match GetScalarResult("FinalizeTypeCheck",partialBuild) with
+            match GetScalarResult("FinalizeTypeCheck",partialBuild) with
             | Some((tcState,topAttribs,typedAssembly,tcEnv,tcImports,tcGlobals,tcConfig),_) -> tcState,topAttribs,typedAssembly,tcEnv,tcImports,tcGlobals,tcConfig
             | None -> failwith "Build was not evaluated."
         
@@ -1668,7 +1670,7 @@ module internal IncrementalFSharpBuild =
             let tcConfigB = 
                 let defaultFSharpBinariesDir = Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler.Value
                     
-                // see also fsc.fs:runFromCommandLineToImportingAssemblies(), as there are many similarities to where the PS creates a tcConfigB
+                // see also fsc.fs:ProcessCommandLineArgsAndImportAssemblies(), as there are many similarities to where the PS creates a tcConfigB
                 let tcConfigB = 
                     TcConfigBuilder.CreateNew(defaultFSharpBinariesDir, implicitIncludeDir=projectDirectory, 
                                               optimizeForMemory=true, isInteractive=false, isInvalidationSupported=true) 
@@ -1686,10 +1688,7 @@ module internal IncrementalFSharpBuild =
 
                 // Apply command-line arguments.
                 try
-                    ParseCompilerOptions
-                        (fun _sourceOrDll -> () )
-                        (Fscopts.GetCoreServiceCompilerOptions tcConfigB)
-                        commandLineArgs             
+                    ParseCompilerOptions ((fun _sourceOrDll -> () ), CompileOptions.GetCoreServiceCompilerOptions tcConfigB, commandLineArgs)
                 with e -> errorRecovery e range0
 
 
diff --git a/src/fsharp/vs/IncrementalBuild.fsi b/src/fsharp/vs/IncrementalBuild.fsi
index 104072bbcb8..fd5e807f54a 100644
--- a/src/fsharp/vs/IncrementalBuild.fsi
+++ b/src/fsharp/vs/IncrementalBuild.fsi
@@ -6,7 +6,8 @@ open Microsoft.FSharp.Compiler
 open Microsoft.FSharp.Compiler.Range
 open Microsoft.FSharp.Compiler.ErrorLogger
 open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library
-open Microsoft.FSharp.Compiler.Build
+open Microsoft.FSharp.Compiler.TcGlobals
+open Microsoft.FSharp.Compiler.CompileOps
 
 
 []
@@ -124,7 +125,7 @@ module internal IncrementalFSharpBuild =
       }    
     
   type IncrementalBuilder = 
-      new : tcConfig : Build.TcConfig * projectDirectory : string * assemblyName : string * niceNameGen : Microsoft.FSharp.Compiler.Ast.NiceNameGenerator *
+      new : tcConfig : TcConfig * projectDirectory : string * assemblyName : string * niceNameGen : Microsoft.FSharp.Compiler.Ast.NiceNameGenerator *
             lexResourceManager : Microsoft.FSharp.Compiler.Lexhelp.LexResourceManager * sourceFiles : string list * ensureReactive : bool *
             errorLogger : ErrorLogger * keepGeneratedTypedAssembly:bool
         -> IncrementalBuilder
@@ -137,7 +138,7 @@ module internal IncrementalFSharpBuild =
       member IsAlive : bool
 
       /// The TcConfig passed in to the builder creation.
-      member TcConfig : Build.TcConfig
+      member TcConfig : TcConfig
 
       /// Raised just before a file is type-checked, to invalidate the state of the file in VS and force VS to request a new direct typecheck of the file.
       /// The incremental builder also typechecks the file (error and intellisense results from the backgroud builder are not
@@ -159,10 +160,10 @@ module internal IncrementalFSharpBuild =
       /// Ensure that the given file has been typechecked.
       /// Get the preceding typecheck state of a slot, allow stale results.
       member GetAntecedentTypeCheckResultsBySlot :
-        int -> (Build.TcState * Build.TcImports * Microsoft.FSharp.Compiler.Env.TcGlobals * Build.TcConfig * (PhasedError * bool) list * System.DateTime) option
+        int -> (TcState * TcImports * Microsoft.FSharp.Compiler.TcGlobals.TcGlobals * TcConfig * (PhasedError * bool) list * System.DateTime) option
 
       /// Get the final typecheck result. Only allowed when 'generateTypedImplFiles' was set on Create, otherwise the TypedAssembly will have not implementations.
-      member TypeCheck : unit -> Build.TcState * TypeChecker.TopAttribs * Tast.TypedAssembly * TypeChecker.TcEnv * Build.TcImports * Env.TcGlobals * Build.TcConfig
+      member TypeCheck : unit -> TcState * TypeChecker.TopAttribs * Tast.TypedAssembly * TypeChecker.TcEnv * TcImports * TcGlobals * TcConfig
 
       /// Attempts to find the slot of the given input file name. Throws an exception if it couldn't find it.    
       member GetSlotOfFileName : string -> int
diff --git a/src/fsharp/vs/ServiceDeclarations.fs b/src/fsharp/vs/ServiceDeclarations.fs
index 9b735734c88..8cae7b7814d 100644
--- a/src/fsharp/vs/ServiceDeclarations.fs
+++ b/src/fsharp/vs/ServiceDeclarations.fs
@@ -20,18 +20,18 @@ open Microsoft.FSharp.Compiler
 open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics 
 open Microsoft.FSharp.Compiler.PrettyNaming
 
-open Microsoft.FSharp.Compiler.Env 
+open Microsoft.FSharp.Compiler.TcGlobals 
 open Microsoft.FSharp.Compiler.Parser
 open Microsoft.FSharp.Compiler.Range
 open Microsoft.FSharp.Compiler.Ast
 open Microsoft.FSharp.Compiler.ErrorLogger
-open Microsoft.FSharp.Compiler.Build
+open Microsoft.FSharp.Compiler.CompileOps
 open Microsoft.FSharp.Compiler.Tast
 open Microsoft.FSharp.Compiler.Tastops
 open Microsoft.FSharp.Compiler.Lib
 open Microsoft.FSharp.Compiler.Layout
 open Microsoft.FSharp.Compiler.Infos
-open Microsoft.FSharp.Compiler.Nameres
+open Microsoft.FSharp.Compiler.NameResolution
 open ItemDescriptionIcons 
 
 module EnvMisc2 =
@@ -107,35 +107,6 @@ module internal ItemDescriptionsImpl =
           
     // Format the supertypes and other useful information about a type to a buffer
     let OutputUsefulTypeInfo _isDeclInfo (_infoReader:InfoReader) _m _denv _os _ty = ()
-#if DISABLED
-        if false then 
-          ErrorScope.ProtectAndDiscard m (fun () -> 
-            let g = infoReader.g
-            let amap = infoReader.amap
-            let supertypes = 
-                let supertypes = AllSuperTypesOfType g amap m AllowMultiIntfInstantiations.Yes ty
-                let supertypes = supertypes |> List.filter (AccessibilityLogic.IsTypeAccessible g AccessibleFromSomewhere) 
-                let supertypes = supertypes |> List.filter (typeEquiv g g.obj_ty >> not) 
-                let selfs,supertypes = supertypes |> List.partition (typeEquiv g ty) 
-                let supertypesC,supertypesI = supertypes |> List.partition (isInterfaceTy g)
-                let supertypes = selfs @ supertypesC @ supertypesI
-                supertypes
-            let supertypeLs,_ = NicePrint.layoutPrettifiedTypes denv supertypes 
-            // Suppress printing supertypes for enums, delegates, exceptions and attributes
-            if supertypes.Length > 1 // more then self
-                && not (isEnumTy g ty) 
-                && not (isUnionTy g ty) 
-                && not (isRecdTy g ty) 
-                && not (isDelegateTy g ty) 
-                && not (ExistsHeadTypeInEntireHierarchy g amap m ty g.exn_tcr) 
-                && not (ExistsHeadTypeInEntireHierarchy g amap m ty g.tcref_System_Attribute) then 
-                bprintf os "\n\n";
-                List.zip supertypes supertypeLs |> List.iter (fun (superty,supertyL) -> 
-                    if typeEquiv g superty ty then bprintf os "  %s: %a\n" (FSComp.SR.typeInfoType()) bufferL supertyL
-                    elif isClassTy g superty || isInterfaceTy g ty then bprintf os "  %s: %a\n" (FSComp.SR.typeInfoInherits()) bufferL supertyL
-                    else bprintf os "  %s: %a\n" (FSComp.SR.typeInfoImplements()) bufferL supertyL))
-#endif
-           
     
     let rangeOfPropInfo (pinfo:PropInfo) =
         match pinfo with
@@ -162,7 +133,7 @@ module internal ItemDescriptionsImpl =
     let rec rangeOfItem (g:TcGlobals) isDeclInfo d = 
         match d with
         | Item.Value vref  | Item.CustomBuilder (_,vref) -> Some (if isDeclInfo then vref.Range else vref.DefinitionRange)
-        | Item.UnionCase ucinfo        -> Some ucinfo.UnionCase.Range
+        | Item.UnionCase(ucinfo,_)     -> Some ucinfo.UnionCase.Range
         | Item.ActivePatternCase apref -> Some apref.ActivePatternVal.Range
         | Item.ExnCase tcref           -> Some tcref.Range
         | Item.RecdField rfinfo        -> Some rfinfo.RecdFieldRef.Range
@@ -192,7 +163,7 @@ module internal ItemDescriptionsImpl =
     let rec ccuOfItem g d = 
         match d with
         | Item.Value vref | Item.CustomBuilder (_,vref) -> ccuOfValRef vref 
-        | Item.UnionCase ucinfo                -> computeCcuOfTyconRef ucinfo.TyconRef
+        | Item.UnionCase(ucinfo,_)             -> computeCcuOfTyconRef ucinfo.TyconRef
         | Item.ActivePatternCase apref         -> ccuOfValRef apref.ActivePatternVal
         | Item.ExnCase tcref                   -> computeCcuOfTyconRef tcref
         | Item.RecdField rfinfo                -> computeCcuOfTyconRef rfinfo.RecdFieldRef.TyconRef
@@ -347,7 +318,7 @@ module internal ItemDescriptionsImpl =
                 | None -> XmlCommentNone
             else 
                 XmlCommentNone
-        | Item.UnionCase  ucinfo -> GetXmlDocSigOfUnionCaseInfo ucinfo
+        | Item.UnionCase (ucinfo,_) -> GetXmlDocSigOfUnionCaseInfo ucinfo
         | Item.ExnCase tcref -> GetXmlDocSigOfEntityRef infoReader m tcref 
         | Item.RecdField rfinfo -> GetXmlDocSigOfRecdFieldInfo rfinfo
         | Item.NewDef _ -> XmlCommentNone
@@ -511,7 +482,7 @@ module internal ItemDescriptionsImpl =
               | Wrap(Item.Value vref1 | Item.CustomBuilder (_,vref1)), Wrap(Item.Value vref2 | Item.CustomBuilder (_,vref2)) -> valRefEq g vref1 vref2
               | Wrap(Item.ActivePatternCase(APElemRef(_apinfo1, vref1, idx1))), Wrap(Item.ActivePatternCase(APElemRef(_apinfo2, vref2, idx2))) ->
                   idx1 = idx2 && valRefEq g vref1 vref2
-              | Wrap(Item.UnionCase(UnionCaseInfo(_, ur1))), Wrap(Item.UnionCase(UnionCaseInfo(_, ur2))) -> g.unionCaseRefEq ur1 ur2
+              | Wrap(Item.UnionCase(UnionCaseInfo(_, ur1),_)), Wrap(Item.UnionCase(UnionCaseInfo(_, ur2),_)) -> g.unionCaseRefEq ur1 ur2
               | Wrap(Item.RecdField(RecdFieldInfo(_, RFRef(tcref1, n1)))), Wrap(Item.RecdField(RecdFieldInfo(_, RFRef(tcref2, n2)))) -> 
                   (tyconRefEq g tcref1 tcref2) && (n1 = n2) // there is no direct function as in the previous case
               | Wrap(Item.Property(_, pi1s)), Wrap(Item.Property(_, pi2s)) -> 
@@ -542,7 +513,7 @@ module internal ItemDescriptionsImpl =
               | Wrap(Item.Value vref | Item.CustomBuilder (_,vref)) -> hash vref.LogicalName
               | Wrap(Item.ActivePatternCase(APElemRef(_apinfo, vref, idx))) -> hash (vref.LogicalName, idx)
               | Wrap(Item.ExnCase(tcref)) -> hash tcref.Stamp
-              | Wrap(Item.UnionCase(UnionCaseInfo(_, UCRef(tcref, n)))) -> hash(tcref.Stamp, n)
+              | Wrap(Item.UnionCase(UnionCaseInfo(_, UCRef(tcref, n)),_)) -> hash(tcref.Stamp, n)
               | Wrap(Item.RecdField(RecdFieldInfo(_, RFRef(tcref, n)))) -> hash(tcref.Stamp, n)
               | Wrap(Item.Event evt) -> evt.ComputeHashCode()
               | Wrap(Item.Property(_name, pis)) -> hash (pis |> List.map (fun pi -> pi.ComputeHashCode()))
@@ -611,7 +582,7 @@ module internal ItemDescriptionsImpl =
             DataTipElement(text, xml)
 
         // Union tags (constructors)
-        | Item.UnionCase ucinfo -> 
+        | Item.UnionCase(ucinfo,_) -> 
             let uc = ucinfo.UnionCase 
             let rty = generalizedTyconRef ucinfo.TyconRef
             let recd = uc.RecdFields 
@@ -633,7 +604,7 @@ module internal ItemDescriptionsImpl =
         // Active pattern tag inside the declaration (result)             
         | Item.ActivePatternResult(APInfo(_, items), ty, idx, _) ->
             let text = bufs (fun os -> 
-                bprintf os "%s %s: " (FSComp.SR.typeInfoActivePatternResult()) (List.nth items idx) 
+                bprintf os "%s %s: " (FSComp.SR.typeInfoActivePatternResult()) (List.item idx items) 
                 NicePrint.outputTy denv os ty)
             let xml = GetXmlComment (XmlDoc [||]) infoReader m d
             DataTipElement(text, xml)
@@ -886,7 +857,7 @@ module internal ItemDescriptionsImpl =
               bufferL os tpcsL
             else
               bufferL os (NicePrint.layoutPrettifiedTypeAndConstraints denv [] tau) 
-        | Item.UnionCase ucinfo -> 
+        | Item.UnionCase(ucinfo,_) -> 
             let rty = generalizedTyconRef ucinfo.TyconRef
             NicePrint.outputTy denv os rty
         | Item.ActivePatternCase(apref) -> 
@@ -897,7 +868,7 @@ module internal ItemDescriptionsImpl =
             let apnames = apinfo.Names
             let aparity = apnames.Length
             
-            let rty = if aparity <= 1 then res else List.nth (argsOfAppTy g res) apref.CaseIndex
+            let rty = if aparity <= 1 then res else List.item apref.CaseIndex (argsOfAppTy g res)
             NicePrint.outputTy denv os rty
         | Item.ExnCase _ -> 
             bufferL os (NicePrint.layoutPrettifiedTypeAndConstraints denv [] g.exn_ty) 
@@ -970,7 +941,7 @@ module internal ItemDescriptionsImpl =
         | Item.Value vref | Item.CustomBuilder (_,vref) -> getKeywordForValRef vref
         | Item.ActivePatternCase apref -> apref.ActivePatternVal |> getKeywordForValRef
 
-        | Item.UnionCase ucinfo -> 
+        | Item.UnionCase(ucinfo,_) -> 
             (ucinfo.TyconRef |> ticksAndArgCountTextOfTyconRef)+"."+ucinfo.Name |> Some
 
         | Item.RecdField rfi -> 
diff --git a/src/fsharp/vs/ServiceDeclarations.fsi b/src/fsharp/vs/ServiceDeclarations.fsi
index cc011e3cd45..ead479606d8 100644
--- a/src/fsharp/vs/ServiceDeclarations.fsi
+++ b/src/fsharp/vs/ServiceDeclarations.fsi
@@ -10,9 +10,9 @@ namespace Microsoft.FSharp.Compiler.SourceCodeServices
 open Microsoft.FSharp.Compiler 
 open Microsoft.FSharp.Compiler.Range
 open System.Collections.Generic
-open Microsoft.FSharp.Compiler.Env 
+open Microsoft.FSharp.Compiler.TcGlobals 
 open Microsoft.FSharp.Compiler.Infos
-open Microsoft.FSharp.Compiler.Nameres
+open Microsoft.FSharp.Compiler.NameResolution
 open Microsoft.FSharp.Compiler.Tast
 open Microsoft.FSharp.Compiler.Tastops
 
diff --git a/src/fsharp/vs/ServiceLexing.fs b/src/fsharp/vs/ServiceLexing.fs
index 65a7198ec19..b3305812385 100644
--- a/src/fsharp/vs/ServiceLexing.fs
+++ b/src/fsharp/vs/ServiceLexing.fs
@@ -535,7 +535,7 @@ type internal LineTokenizer(text:string,
     let lexbuf = UnicodeLexing.StringAsLexbuf text
     
     let mutable singleLineTokenState = SingleLineTokenState.BeforeHash
-    let fsx = Build.IsScript(filename)
+    let fsx = CompileOps.IsScript(filename)
 
     // ----------------------------------------------------------------------------------
     // This implements post-processing of #directive tokens - not very elegant, but it works...
@@ -646,7 +646,7 @@ type internal LineTokenizer(text:string,
                   | RQUOTE_DOT (s,raw) -> 
                       delayToken(DOT, rightc, rightc)
                       false, (RQUOTE (s,raw), leftc, rightc - 1)
-                  | INFIX_COMPARE_OP (Lexfilter.TyparsCloseOp(greaters,afterOp) as opstr) -> 
+                  | INFIX_COMPARE_OP (LexFilter.TyparsCloseOp(greaters,afterOp) as opstr) -> 
                       match afterOp with
                       | None -> ()
                       | Some tok -> delayToken(tok, leftc + greaters.Length, rightc)
@@ -733,6 +733,7 @@ type internal LineTokenizer(text:string,
                     | true,"I" 
                     | true,"load" 
                     | true,"time" 
+                    | true,"dbgbreak" 
                     | true,"cd" 
 #if DEBUG
                     | true,"terms" 
diff --git a/src/fsharp/vs/ServiceUntypedParse.fs b/src/fsharp/vs/ServiceUntypedParse.fs
index 6d669f2c055..0c259558d76 100644
--- a/src/fsharp/vs/ServiceUntypedParse.fs
+++ b/src/fsharp/vs/ServiceUntypedParse.fs
@@ -17,15 +17,15 @@ open Internal.Utilities.Debug
 open Microsoft.FSharp.Compiler.Range
 open Microsoft.FSharp.Compiler.Ast
 open Microsoft.FSharp.Compiler.ErrorLogger
-open Microsoft.FSharp.Compiler.Build
+open Microsoft.FSharp.Compiler.CompileOps
 open Microsoft.FSharp.Compiler.Lib
 
 /// Methods for dealing with F# sources files.
 module internal SourceFile =
     /// Source file extensions
-    let private compilableExtensions = Build.sigSuffixes @ Build.implSuffixes @ Build.scriptSuffixes
+    let private compilableExtensions = CompileOps.FSharpSigFileSuffixes @ CompileOps.FSharpImplFileSuffixes @ CompileOps.FSharpScriptFileSuffixes
     /// Single file projects extensions
-    let private singleFileProjectExtensions = Build.scriptSuffixes
+    let private singleFileProjectExtensions = CompileOps.FSharpScriptFileSuffixes
     /// Whether or not this file is compilable
     let IsCompilable file =
         let ext = Path.GetExtension(file)
@@ -42,7 +42,7 @@ module internal SourceFileImpl =
 
     /// Additonal #defines that should be in place when editing a file in a file editor such as VS.
     let AdditionalDefinesForUseInEditor(filename) =
-        if Build.IsScript(filename) then ["INTERACTIVE";"EDITING"] // This is still used by the foreground parse
+        if CompileOps.IsScript(filename) then ["INTERACTIVE";"EDITING"] // This is still used by the foreground parse
         else ["COMPILED";"EDITING"]
            
 type CompletionPath = string list * string option // plid * residue
@@ -70,6 +70,9 @@ type internal CompletionContext =
     // 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
 
 //----------------------------------------------------------------------------
 // Untyped scope
@@ -387,6 +390,9 @@ type internal UntypedParseInfo(parsed:UntypedParseResults) =
         scope.ValidateBreakpointLocationImpl(pos)
 
 module internal UntypedParseInfoImpl =
+    
+    let emptyStringSet = HashSet()
+
     let GetUntypedParseResults (upi : UntypedParseInfo) = upi.Results
 
     let GetRangeOfExprLeftOfDot(line,col,parseTreeOpt) =
@@ -571,8 +577,8 @@ module internal UntypedParseInfoImpl =
                                 | Some e -> Some(e.Range.End, posGeq lidwd.Range.Start pos)
                             match dots |> List.mapi (fun i x -> i,x) |> List.rev |> List.tryFind (fun (_,m) -> posGt pos m.Start) with
                             | None -> resultIfLeftOfLongId
-                            | Some(n,_) -> Some((List.nth lid n).idRange.End, (List.length lid = n+1)    // foo.$
-                                                                              || (posGeq (List.nth lid (n+1)).idRange.Start pos))  // foo.$bar
+                            | Some(n,_) -> Some((List.item n lid).idRange.End, (List.length lid = n+1)    // foo.$
+                                                                              || (posGeq (List.item (n+1) lid).idRange.Start pos))  // foo.$bar
                         match expr with
                         | SynExpr.LongIdent(_isOptional, lidwd, _altNameRefCell, _m) ->
                             traverseLidOrElse None lidwd
@@ -726,13 +732,99 @@ module internal UntypedParseInfoImpl =
                     Some CompletionContext.Invalid
             | _ -> None
 
+        let (|Operator|_|) name e = 
+            match e with
+            | SynExpr.App(ExprAtomicFlag.NonAtomic, false, SynExpr.App(ExprAtomicFlag.NonAtomic, true, SynExpr.Ident(ident), lhs, _), rhs, _) 
+                when ident.idText = name -> Some(lhs, rhs)
+            | _ -> None
+
         // checks if we are in rhs of the range operator
         let isInRhsOfRangeOp (p : AstTraversal.TraversePath) = 
             match p with
-            | TS.Expr(SynExpr.App(ExprAtomicFlag.NonAtomic, false, SynExpr.App(ExprAtomicFlag.NonAtomic, true, SynExpr.Ident(ident), _, _), _, _))::_  
-                when ident.idText = "op_Range"-> true
+            | TS.Expr(Operator "op_Range" _)::_ -> true
             | _ -> false
 
+        let (|Setter|_|) e =
+            match e with
+            | Operator "op_Equality" (SynExpr.Ident id, _) -> Some id
+            | _ -> None
+
+        let findSetters argList =
+            match argList with
+            | SynExpr.Paren(SynExpr.Tuple(parameters, _, _), _, _, _) -> 
+                let setters = HashSet()
+                for p in parameters do
+                    match p with
+                    | Setter id -> ignore(setters.Add id.idText)
+                    | _ -> ()
+                setters
+            | _ -> emptyStringSet
+
+        let endOfLastIdent (lid: LongIdentWithDots) = 
+            let last = List.last lid.Lid
+            last.idRange.End
+
+        let endOfClosingTokenOrLastIdent (mClosing: range option) (lid : LongIdentWithDots) =
+            match mClosing with
+            | Some m -> m.End
+            | None -> endOfLastIdent lid
+
+        let endOfClosingTokenOrIdent (mClosing: range option) (id : Ident) =
+            match mClosing with
+            | Some m -> m.End
+            | None -> id.idRange.End
+
+        let (|NewObjectOrMethodCall|_|) e =
+            match e with
+            | (SynExpr.New (_, SynType.LongIdent typeName, arg, _)) -> 
+                // new A()
+                Some (endOfLastIdent typeName, findSetters arg)
+            | (SynExpr.New (_, SynType.App(SynType.LongIdent typeName, _, _, _, mGreaterThan, _, _), arg, _)) -> 
+                // new A<_>()
+                Some (endOfClosingTokenOrLastIdent mGreaterThan typeName, findSetters arg)
+            | (SynExpr.App (ExprAtomicFlag.Atomic, false, SynExpr.Ident id, arg, _)) -> 
+                // A()
+                Some (id.idRange.End, findSetters arg)
+            | (SynExpr.App (ExprAtomicFlag.Atomic, false, SynExpr.TypeApp(SynExpr.Ident id, _, _, _, mGreaterThan, _, _), arg, _)) -> 
+                // A<_>()
+                Some (endOfClosingTokenOrIdent mGreaterThan id , findSetters arg)
+            | (SynExpr.App (ExprAtomicFlag.Atomic, false, SynExpr.LongIdent(_, lid, _, _), arg, _)) -> 
+                // A.B()
+                Some (endOfLastIdent lid, findSetters arg)
+            | (SynExpr.App (ExprAtomicFlag.Atomic, false, SynExpr.TypeApp(SynExpr.LongIdent(_, lid, _, _), _, _, _, mGreaterThan, _, _), arg, _)) -> 
+                // A.B<_>()
+                Some (endOfClosingTokenOrLastIdent mGreaterThan lid, findSetters arg)
+            | _ -> None
+        
+        let isOnTheRightOfComma (elements: SynExpr list) (commas: range list) current = 
+            let rec loop elements (commas: range list) = 
+                match elements with
+                | x::xs ->
+                    match commas with
+                    | c::cs -> 
+                        if x === current then posLt c.End pos || posEq c.End pos 
+                        else loop xs cs
+                    | _ -> false
+                | _ -> false
+            loop elements commas
+
+        let (|PartOfParameterList|_|) precedingArgument path =
+            match path with
+            | TS.Expr(SynExpr.Paren _)::TS.Expr(NewObjectOrMethodCall(args))::_ -> 
+                if Option.isSome precedingArgument then None else Some args
+            | TS.Expr(SynExpr.Tuple (elements, commas, _))::TS.Expr(SynExpr.Paren _)::TS.Expr(NewObjectOrMethodCall(args))::_ -> 
+                match precedingArgument with
+                | None -> Some args
+                | Some e ->
+                    // if expression is passed then
+                    // 1. find it in among elements of the tuple
+                    // 2. find corresponding comma
+                    // 3. check that current position is past the comma
+                    // this is used for cases like (a = something-here.) if the cursor is after .
+                    // in this case this is not object initializer completion context
+                    if isOnTheRightOfComma elements commas e then Some args else None
+            | _ -> None
+
         let walker = 
             { 
                 new AstTraversal.AstVisitorBase<_>() with
@@ -741,7 +833,32 @@ module internal UntypedParseInfoImpl =
                             match defaultTraverse expr with
                             | None -> Some (CompletionContext.RangeOperator) // nothing was found - report that we were in the context of range operator
                             | x -> x // ok, we found something - return it
-                        else defaultTraverse expr
+                        else
+                        match expr with
+                        // new A($)
+                        | SynExpr.Const(SynConst.Unit, m) when rangeContainsPos m pos ->
+                            match path with
+                            | TS.Expr(NewObjectOrMethodCall args)::_ -> 
+                                Some (CompletionContext.ParameterList args)
+                            | _ -> 
+                                defaultTraverse expr
+                        // new (... A$)
+                        | SynExpr.Ident id when id.idRange.End = pos ->
+                            match path with
+                            | PartOfParameterList None args -> 
+                                Some (CompletionContext.ParameterList args)
+                            | _ -> 
+                                defaultTraverse expr
+                        // new (A$ = 1)
+                        // new (A = 1,$)
+                        | Setter id when id.idRange.End = pos || rangeBeforePos expr.Range pos ->
+                            let precedingArgument = if id.idRange.End = pos then None else Some expr
+                            match path with
+                            | PartOfParameterList precedingArgument args-> 
+                                Some (CompletionContext.ParameterList args)
+                            | _ -> 
+                                defaultTraverse expr
+                        | _ -> defaultTraverse expr
 
                     member this.VisitRecordField(path, copyOpt, field) = 
                         let contextFromTreePath completionPath = 
diff --git a/src/fsharp/vs/ServiceUntypedParse.fsi b/src/fsharp/vs/ServiceUntypedParse.fsi
index c3b11e8a21e..8466d7927cc 100644
--- a/src/fsharp/vs/ServiceUntypedParse.fsi
+++ b/src/fsharp/vs/ServiceUntypedParse.fsi
@@ -67,7 +67,9 @@ type internal CompletionContext =
     // 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
 
 // implementation details used by other code in the compiler    
 module internal UntypedParseInfoImpl =
diff --git a/src/fsharp/vs/service.fs b/src/fsharp/vs/service.fs
index e6f662dcc43..5184b9b80a3 100644
--- a/src/fsharp/vs/service.fs
+++ b/src/fsharp/vs/service.fs
@@ -13,10 +13,10 @@ open System.Threading
 open System.Collections.Generic
  
 open Microsoft.FSharp.Core.Printf
+open Microsoft.FSharp.Compiler 
 open Microsoft.FSharp.Compiler.AbstractIL
 open Microsoft.FSharp.Compiler.AbstractIL.Internal  
 open Microsoft.FSharp.Compiler.AbstractIL.Internal.Library  
-open Microsoft.FSharp.Compiler 
 open Microsoft.FSharp.Compiler.MSBuildResolver
 open Microsoft.FSharp.Compiler.AbstractIL.Diagnostics 
 open Microsoft.FSharp.Compiler.PrettyNaming
@@ -24,13 +24,13 @@ open Internal.Utilities.Collections
 open Internal.Utilities.Debug
 open System.Security.Permissions
 
-open Microsoft.FSharp.Compiler.Env 
+open Microsoft.FSharp.Compiler.TcGlobals 
 open Microsoft.FSharp.Compiler.Parser
 open Microsoft.FSharp.Compiler.Range
 open Microsoft.FSharp.Compiler.Ast
 open Microsoft.FSharp.Compiler.ErrorLogger
 open Microsoft.FSharp.Compiler.Lexhelp
-open Microsoft.FSharp.Compiler.Build
+open Microsoft.FSharp.Compiler.CompileOps
 open Microsoft.FSharp.Compiler.Tast
 open Microsoft.FSharp.Compiler.Tastops
 open Microsoft.FSharp.Compiler.Tastops.DebugPrint
@@ -39,7 +39,7 @@ open Microsoft.FSharp.Compiler.AbstractIL.IL
 open Microsoft.FSharp.Compiler.Layout
 open Microsoft.FSharp.Compiler.TypeChecker
 open Microsoft.FSharp.Compiler.Infos
-open Microsoft.FSharp.Compiler.Nameres
+open Microsoft.FSharp.Compiler.NameResolution
 open Internal.Utilities.StructuredFormat
 open ItemDescriptionIcons 
 open ItemDescriptionsImpl 
@@ -85,9 +85,9 @@ module internal Params =
         let initial = ParamOfRecdField g denv f
         if isGenerated i f then initial
         else
-        { initial with Display = NicePrint.stringOfParamData denv (ParamData(false, false, NotOptional, (Some initial.Name), f.rfield_type)) }
+        { initial with Display = NicePrint.stringOfParamData denv (ParamData(false, false, NotOptional, Some initial.Name, ReflectedArgInfo.None, f.rfield_type)) }
 
-    let ParamOfParamData g denv (ParamData(_isParamArrayArg,_isOutArg,_optArgInfo,nmOpt,pty) as paramData) =
+    let ParamOfParamData g denv (ParamData(_isParamArrayArg, _isOutArg, _optArgInfo, nmOpt, _reflArgInfo, pty) as paramData) =
         { Name = match nmOpt with None -> "" | Some pn -> pn
           CanonicalTypeTextForSorting = printCanonicalizedTypeName g denv pty
           Display = NicePrint.stringOfParamData denv paramData
@@ -97,7 +97,7 @@ module internal Params =
     let ParamsOfParamDatas g denv (paramDatas:ParamData list) rty = 
         let paramNames,paramPrefixes,paramTypes = 
             paramDatas 
-            |> List.map (fun (ParamData(isParamArrayArg,_,optArgInfo,nmOpt,pty)) -> 
+            |> List.map (fun (ParamData(isParamArrayArg, _isOutArg, optArgInfo, nmOpt, _reflArgInfo, pty)) -> 
                 let isOptArg = optArgInfo.IsOptional
                 match nmOpt, isOptArg, tryDestOptionTy denv.g pty with 
                 // Layout an optional argument 
@@ -110,7 +110,11 @@ module internal Params =
                     "", "", pty
                 // Layout a named argument 
                 | Some nm,_,_ -> 
-                    let prefix = if isParamArrayArg then sprintf "params %s: " nm else sprintf "%s: " nm
+                    let prefix = 
+                        if isParamArrayArg then 
+                            sprintf "%s %s: " (NicePrint.PrintUtilities.layoutBuiltinAttribute denv denv.g.attrib_ParamArrayAttribute |> showL) nm 
+                        else 
+                            sprintf "%s: " nm
                     nm, prefix,pty)
             |> List.unzip3 
         let paramTypeAndRetLs,_ = NicePrint.layoutPrettifiedTypes denv (paramTypes@[rty])
@@ -178,9 +182,9 @@ module internal Params =
                     let paramDatas = 
                         argInfo
                         |> List.map ParamNameAndType.FromArgInfo
-                        |> List.map (fun (ParamNameAndType(nm,pty)) -> ParamData(false, false, NotOptional, nm, pty))
+                        |> List.map (fun (ParamNameAndType(nmOpt, pty)) -> ParamData(false, false, NotOptional, nmOpt, ReflectedArgInfo.None, pty))
                     ParamsOfParamDatas g denv paramDatas returnTy
-        | Item.UnionCase(ucr)   -> 
+        | Item.UnionCase(ucr,_)   -> 
             match ucr.UnionCase.RecdFields with
             | [f] -> [ParamOfUnionCaseField g denv NicePrint.isGeneratedUnionCaseField -1 f]
             | fs -> fs |> List.mapi (ParamOfUnionCaseField g denv NicePrint.isGeneratedUnionCaseField)
@@ -208,7 +212,7 @@ module internal Params =
             | None -> 
                 let argNamesAndTys = ItemDescriptionsImpl.ParamNameAndTypesOfUnaryCustomOperation g minfo 
                 let _, argTys, _ = PrettyTypes.PrettifyTypesN g (argNamesAndTys |> List.map (fun (ParamNameAndType(_,ty)) -> ty))
-                let paramDatas = (argNamesAndTys, argTys) ||> List.map2 (fun (ParamNameAndType(nm,_)) argTy -> ParamData(false,false,NotOptional,nm,argTy))
+                let paramDatas = (argNamesAndTys, argTys) ||> List.map2 (fun (ParamNameAndType(nmOpt, _)) argTy -> ParamData(false, false, NotOptional, nmOpt, ReflectedArgInfo.None,argTy))
                 let rty = minfo.GetFSharpReturnTy(amap, m, minfo.FormalMethodInst)
                 ParamsOfParamDatas g denv paramDatas rty
             | Some _ -> 
@@ -217,7 +221,7 @@ module internal Params =
         | Item.FakeInterfaceCtor _ -> []
         | Item.DelegateCtor delty -> 
             let (SigOfFunctionForDelegate(_, _, _, fty)) = GetSigOfFunctionForDelegate infoReader delty m AccessibleFromSomeFSharpCode
-            ParamsOfParamDatas g denv [ParamData(false,false,NotOptional,None, fty)] delty
+            ParamsOfParamDatas g denv [ParamData(false, false, NotOptional, None, ReflectedArgInfo.None, fty)] delty
 #if EXTENSIONTYPING
         | ItemIsTypeWithStaticArguments g tyconRef ->
             // similar code to TcProvidedTypeAppToStaticConstantArgs 
@@ -294,7 +298,7 @@ type MethodOverloads( name: string, unsortedMethods: Method[] ) =
                         if isFunction g rfinfo.FieldType then [item] else []
                     | Item.Value v -> 
                         if isFunction g v.Type then [item] else []
-                    | Item.UnionCase(ucr) -> 
+                    | Item.UnionCase(ucr,_) -> 
                         if not ucr.UnionCase.IsNullary then [item] else []
                     | Item.ExnCase(ecr) -> 
                         if recdFieldsOfExnDefRef ecr |> nonNil then [item] else []
@@ -372,7 +376,7 @@ type Names = string list
 type NamesWithResidue = Names * string 
 
 []
-type CapturedNameResolution(p:pos, i:Item, io:ItemOccurence, de:DisplayEnv, nre:Nameres.NameResolutionEnv, ad:AccessorDomain, m:range) =
+type CapturedNameResolution(p:pos, i:Item, io:ItemOccurence, de:DisplayEnv, nre:NameResolution.NameResolutionEnv, ad:AccessorDomain, m:range) =
     member this.Pos = p
     member this.Item = i
     member this.ItemOccurence = io
@@ -390,8 +394,8 @@ type CapturedNameResolution(p:pos, i:Item, io:ItemOccurence, de:DisplayEnv, nre:
 []
 type TypeCheckInfo
           (/// Information corresponding to miscellaneous command-line options (--define, etc).
-           _sTcConfig: Build.TcConfig,
-           g: Env.TcGlobals,
+           _sTcConfig: TcConfig,
+           g: TcGlobals,
            /// AssemblyName -> IL-Module 
            amap: Import.ImportMap,
            /// project directory, or directory containing the file that generated this scope if no project directory given 
@@ -399,9 +403,9 @@ type TypeCheckInfo
            sFile:string,
            /// Name resolution environments for every interesting region in the file. These regions may
            /// overlap, in which case the smallest region applicable should be used.
-           sEnvs: ResizeArray,
+           sEnvs: ResizeArray,
            /// This is a name resolution environment to use if no better match can be found.
-           sFallback:Nameres.NameResolutionEnv,
+           sFallback:NameResolution.NameResolutionEnv,
            /// Information of exact types found for expressions, that can be to the left of a dot.
            /// Also for exact name resolutions
            /// pos -- line and column
@@ -410,9 +414,9 @@ type TypeCheckInfo
            /// DisplayEnv -- information about printing. For example, should redundant keywords be hidden?
            /// NameResolutionEnv -- naming environment--for example, currently open namespaces.
            /// range -- the starting and ending position      
-           capturedExprTypings: ResizeArray<(pos * TType * DisplayEnv * Nameres.NameResolutionEnv * AccessorDomain * range)>,
-           capturedNameResolutions: ResizeArray<(pos * Item * ItemOccurence * DisplayEnv * Nameres.NameResolutionEnv * AccessorDomain * range)>,
-           capturedResolutionsWithMethodGroups: ResizeArray<(pos * Item * ItemOccurence * DisplayEnv * Nameres.NameResolutionEnv * AccessorDomain * range)>,
+           capturedExprTypings: ResizeArray<(pos * TType * DisplayEnv * NameResolution.NameResolutionEnv * AccessorDomain * range)>,
+           capturedNameResolutions: ResizeArray<(pos * Item * ItemOccurence * DisplayEnv * NameResolution.NameResolutionEnv * AccessorDomain * range)>,
+           capturedResolutionsWithMethodGroups: ResizeArray<(pos * Item * ItemOccurence * DisplayEnv * NameResolution.NameResolutionEnv * AccessorDomain * range)>,
            loadClosure : LoadClosure option,
            syncop:(unit->unit)->unit,
            checkAlive : (unit -> bool),
@@ -432,7 +436,7 @@ type TypeCheckInfo
     let getDataTipTextCache = AgedLookup(recentForgroundTypeCheckLookupSize,areSame=(fun (x,y) -> x = y))
     
     let infoReader = new InfoReader(g,amap)
-    let ncenv = new NameResolver(g,amap,infoReader,Nameres.FakeInstantiationGenerator)
+    let ncenv = new NameResolver(g,amap,infoReader,NameResolution.FakeInstantiationGenerator)
     
     /// Find the most precise naming environment for the given line and column
     let GetBestEnvForPos cursorPos  =
@@ -504,13 +508,25 @@ type TypeCheckInfo
     let FilterItemsForCtors filterCtors items = 
         let items = items |> List.filter (function (Item.CtorGroup _) when filterCtors = ResolveTypeNamesToTypeRefs -> false | _ -> true) 
         items
-        
-    /// Looks at the exact name resolutions that occurred during type checking
-    /// 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, hasTextChangedSinceLastTypecheck) = 
-        let endOfNamesPos = Pos.fromVS line colAtEndOfNames
-        Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseItemsFromNameResolution: line = %d, colAtEndOfNames = %d, endOfNamesPos = %s\n" line colAtEndOfNames (stringOfPos endOfNamesPos))
+    
+    // Filter items to show only valid & return Some if there are any
+    let ReturnItemsOfType items g denv (m:range) filterCtors hasTextChangedSinceLastTypecheck f =
+        let items = 
+            items 
+            |> RemoveDuplicateItems g
+            |> RemoveExplicitlySuppressed g
+            |> FilterItemsForCtors filterCtors
+
+        if nonNil items then
+            Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseItemsFromNameResolution: Results in %d items!\n" items.Length)
+            if hasTextChangedSinceLastTypecheck(textSnapshotInfo, Range.toVS m) then
+                NameResResult.TypecheckStaleAndTextChanged // typecheck is stale, wait for second-chance IntelliSense to bring up right result
+            else
+                f(items, denv, m) 
+        else NameResResult.Empty
+
+    let GetCapturedNameResolutions endOfNamesPos resolveOverloads =
+        Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseItemsFromNameResolution: endOfNamesPos = %s\n" (stringOfPos endOfNamesPos))
 
         let quals = 
             (match resolveOverloads with ResolveOverloads.Yes ->  capturedNameResolutions | ResolveOverloads.No -> capturedResolutionsWithMethodGroups)
@@ -519,28 +535,23 @@ type TypeCheckInfo
                 posEq cnr.Pos endOfNamesPos)
         Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseItemsFromNameResolution: Found %d relevant quals\n" quals.Count)
         
-        let items = quals |> ResizeArray.toList |> List.rev  // Logic below expects the list to be in reverse order of resolution
-        
-        // Filter items to show only valid & return Some if there are any
-        let returnItemsOfType items g denv (m:range) f =
-            let items = items |> RemoveDuplicateItems g
-            let items = items |> RemoveExplicitlySuppressed g
-            let items = items |> FilterItemsForCtors filterCtors
-            if nonNil items then
-                Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseItemsFromNameResolution: Results in %d items!\n" items.Length)
-                if hasTextChangedSinceLastTypecheck(textSnapshotInfo, Range.toVS m) then
-                    NameResResult.TypecheckStaleAndTextChanged // typecheck is stale, wait for second-chance IntelliSense to bring up right result
-                else
-                    f(items, denv, m) 
-            else NameResResult.Empty        
+        quals
+
+    /// Looks at the exact name resolutions that occurred during type checking
+    /// 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(endOfNamesPos, membersByResidue, filterCtors, resolveOverloads, hasTextChangedSinceLastTypecheck) = 
+        Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseItemsFromNameResolution: endOfNamesPos = %s\n" (stringOfPos endOfNamesPos))
+        // Logic below expects the list to be in reverse order of resolution
+        let items = GetCapturedNameResolutions endOfNamesPos resolveOverloads |> ResizeArray.toList |> List.rev
 
         match items, 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(_,(typ::_)),_,denv,nenv,ad,m)::_, Some _ -> 
-            let items = ResolveCompletionsInType ncenv nenv (ConstraintSolver.IsApplicableMethApprox g amap m) m ad true typ 
-            returnItemsOfType items g denv m NameResResult.Members
+            let items = ResolveCompletionsInType ncenv nenv (ResolveCompletionTargets.All(ConstraintSolver.IsApplicableMethApprox g amap m)) m ad true typ 
+            ReturnItemsOfType items g denv m filterCtors hasTextChangedSinceLastTypecheck NameResResult.Members 
         
         // Value reference from the name resolution. Primarilly to disallow "let x.$ = 1"
         // In most of the cases, value references can be obtained from expression typings or from environment,
@@ -565,14 +576,14 @@ type TypeCheckInfo
                     // check that type of value is the same or subtype of tcref
                     // yes - allow access to protected members
                     // no - strip ability to access protected members
-                    if Microsoft.FSharp.Compiler.Typrelns.TypeFeasiblySubsumesType 0 g amap m tcref Microsoft.FSharp.Compiler.Typrelns.CanCoerce ty then
+                    if Microsoft.FSharp.Compiler.TypeRelations.TypeFeasiblySubsumesType 0 g amap m tcref Microsoft.FSharp.Compiler.TypeRelations.CanCoerce ty then
                         ad
                     else
                         AccessibleFrom(paths, None)
                 | _ -> ad
 
-              let items = ResolveCompletionsInType ncenv nenv (ConstraintSolver.IsApplicableMethApprox g amap m) m ad false ty
-              returnItemsOfType items g denv m NameResResult.Members
+              let items = ResolveCompletionsInType ncenv nenv (ResolveCompletionTargets.All(ConstraintSolver.IsApplicableMethApprox g amap m)) m ad false ty
+              ReturnItemsOfType items g denv m filterCtors hasTextChangedSinceLastTypecheck NameResResult.Members
         
         // No residue, so the items are the full resolution of the name
         | CNR(_,_,_,denv,_,_,m) :: _, None -> 
@@ -581,9 +592,49 @@ type TypeCheckInfo
                               // "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 (function Item.CustomOperation(CustomOperations.Into,_,_) -> false | _ -> true) 
-            returnItemsOfType items g denv m NameResResult.Members
+            ReturnItemsOfType items g denv m filterCtors hasTextChangedSinceLastTypecheck NameResResult.Members
         | _ , _ -> NameResResult.Empty
+    
+    let GetPreciseItemsFromNameResolutionVS(line,colAtEndOfNames,membersByResidue,filterCtors, resolveOverloads, hasTextChangedSinceLastTypecheck) = 
+        GetPreciseItemsFromNameResolution(Pos.fromVS line colAtEndOfNames, membersByResidue, filterCtors, resolveOverloads, hasTextChangedSinceLastTypecheck)
+
+    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, _isOut, _optArgInfo, name, _, ty)) -> 
+                match name with
+                | Some n -> Some (Item.ArgName(Ident(n, m), ty, Some (ArgumentContainer.Method meth)))
+                | None -> None
+                )
+            | _ -> []
+        )
 
+    let GetNamedParametersAndSettableFields endOfExprPos hasTextChangedSinceLastTypecheck =
+        let cnrs = GetCapturedNameResolutions endOfExprPos ResolveOverloads.No |> ResizeArray.toList |> List.rev
+        let result =
+            match cnrs with
+            | CNR(_, Item.CtorGroup(_, ((ctor::_) as ctors)), _, denv, nenv, ad, m)::_ ->
+                let props = ResolveCompletionsInType ncenv nenv ResolveCompletionTargets.SettablePropertiesAndFields m ad false ctor.EnclosingType
+                let parameters = CollectParameters ctors amap m
+                Some (denv, m, props @ parameters)
+            | CNR(_, Item.MethodGroup(_, methods), _, denv, nenv, ad, m)::_ ->
+                let props = 
+                    methods
+                    |> List.collect (fun meth ->
+                        let retTy = meth.GetFSharpReturnTy(amap, m, meth.FormalMethodInst)
+                        ResolveCompletionsInType ncenv nenv ResolveCompletionTargets.SettablePropertiesAndFields m ad false retTy
+                    )
+                let parameters = CollectParameters methods amap m
+                Some (denv, m, props @ parameters)
+            | _ -> 
+                None
+        match result with
+        | None -> 
+            NameResResult.Empty
+        | Some (denv, m, result) -> 
+            ReturnItemsOfType result g denv m TypeNameResolutionFlag.ResolveTypeNamesToTypeRefs hasTextChangedSinceLastTypecheck NameResResult.Members
+    
     /// finds captured typing for the given position
     let GetExprTypingForPosition(endOfExprPos) = 
         let quals = 
@@ -619,11 +670,10 @@ type TypeCheckInfo
                                             posEq r.Start rq.Start)
         match bestQual with
         | Some (_,typ,denv,_nenv,ad,m) when isRecdTy denv.g typ ->
-            let items = Nameres.ResolveRecordOrClassFieldsOfType ncenv m ad typ false
+            let items = NameResolution.ResolveRecordOrClassFieldsOfType ncenv m ad typ false
             Some (items, denv, m)
         | _ -> None
 
-
     /// Looks at the exact expression types at the position to the left of the 
     /// residue then the source when it was typechecked.
     let GetPreciseCompletionListFromExprTypings(untypedParseInfo:UntypedParseInfo, line, colAtEndOfNames, filterCtors, hasTextChangedSinceLastTypecheck: (obj * Range -> bool)) = 
@@ -666,7 +716,7 @@ type TypeCheckInfo
             match bestQual with
             | Some bestQual ->
                 let (_,typ,denv,nenv,ad,m) = bestQual 
-                let items = ResolveCompletionsInType ncenv nenv (ConstraintSolver.IsApplicableMethApprox g amap m) m ad false typ 
+                let items = ResolveCompletionsInType ncenv nenv (ResolveCompletionTargets.All(ConstraintSolver.IsApplicableMethApprox g amap m)) m ad false typ 
                 Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetPreciseCompletionListFromExprTypings: Results in %d items!\n" items.Length)
                 let items = items |> RemoveDuplicateItems g
                 let items = items |> RemoveExplicitlySuppressed g
@@ -681,7 +731,7 @@ type TypeCheckInfo
         Trace.PrintLine("CompilerServicesVerbose", fun () -> sprintf "GetEnvironmentLookupResolutions: line = %d, colAtEndOfNamesAndResidue = %d, plid = %+A, showObsolete = %b\n" line colAtEndOfNamesAndResidue plid showObsolete)
         let cursorPos = Pos.fromVS line colAtEndOfNamesAndResidue
         let (nenv,ad),m = GetBestEnvForPos cursorPos
-        let items = Nameres.ResolvePartialLongIdent ncenv nenv (ConstraintSolver.IsApplicableMethApprox g amap m) m ad plid showObsolete
+        let items = NameResolution.ResolvePartialLongIdent ncenv nenv (ConstraintSolver.IsApplicableMethApprox g amap m) m ad plid showObsolete
         let items = items |> RemoveDuplicateItems g 
         let items = items |> RemoveExplicitlySuppressed g
         let items = items |> FilterItemsForCtors filterCtors 
@@ -693,7 +743,7 @@ type TypeCheckInfo
     let GetClassOrRecordFieldsEnvironmentLookupResolutions(line,colAtEndOfNamesAndResidue, plid, (_residue : string option)) = 
         let cursorPos = Pos.fromVS line colAtEndOfNamesAndResidue
         let (nenv, ad),m = GetBestEnvForPos cursorPos
-        let items = Nameres.ResolvePartialLongIdentToClassOrRecdFields ncenv nenv m ad plid false
+        let items = NameResolution.ResolvePartialLongIdentToClassOrRecdFields ncenv nenv m ad plid false
         let items = items |> RemoveDuplicateItems g 
         let items = items |> RemoveExplicitlySuppressed g
         items, nenv.DisplayEnv,m 
@@ -760,8 +810,149 @@ type TypeCheckInfo
 
         let FindRecordFieldsInEnv(plid, residue) = GetClassOrRecordFieldsEnvironmentLookupResolutions(line, loc, plid, residue)
 
+        let getDeclaredItems isInRangeOperator =
+            let findFirstNonWsPos 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
+        
+            // are last two chars (except whitespaces) = ".."
+            let isLikeRangeOp = 
+                match findFirstNonWsPos (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 
+                | None -> GetPreciseItemsFromNameResolutionVS(line, colAtEndOfNamesAndResidue, None, filterCtors,resolveOverloads, hasTextChangedSinceLastTypecheck)
+                | Some residue ->
+                    // deals with cases when we have spaces between dot and\or identifier, like A  . $
+                    // if this is our case - then wen need to locate end position of the name skipping whitespaces
+                    // this allows us to handle cases like: let x . $ = 1 
+
+                    // colAtEndOfNamesAndResidue is 1-based so at first we need to convert it to 0-based 
+                    match findFirstNonWsPos (colAtEndOfNamesAndResidue - 1) with
+                    | Some p when lineStr.[p] = '.' ->
+                        match findFirstNonWsPos (p - 1) with
+                        | Some colAtEndOfNames ->                 
+                            let colAtEndOfNames = colAtEndOfNames + 1 // convert 0-based to 1-based
+                            GetPreciseItemsFromNameResolutionVS(line, colAtEndOfNames, Some(residue), filterCtors,resolveOverloads, hasTextChangedSinceLastTypecheck)
+                        | None -> 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 = 
+                match origLongIdentOpt, residueOpt with
+                | None, _ -> [], None
+                | Some(origLongIdent), Some _ -> origLongIdent, None
+                | Some(origLongIdent), None ->
+                    assert (nonNil origLongIdent)
+                    // note: as above, this happens when we are called for "precise" resolution - (F1 keyword, data tip etc..)
+                    let plid, residue = List.frontAndBack origLongIdent
+                    plid, Some residue
+                
+            /// Post-filter items to make sure they have precisely the right name
+            /// This also checks that there are some remaining results 
+            let (|FilterRelevantItems|_|) orig =
+                FilterRelevantItemsBy exactMatchResidueOpt (fun _ _ -> true) orig
+
+            match nameResItems with            
+            | NameResResult.TypecheckStaleAndTextChanged -> None // second-chance intellisense will try again
+            | NameResResult.Cancel(denv,m) -> Some([], denv, m)
+            | NameResResult.Members(FilterRelevantItems(items)) -> 
+                Trace.PrintLine("CompilerServices", fun _ -> sprintf "GetDeclItemsForNamesAtPosition: lookup based on name resolution results successful, #items = %d, exists ctor = %b\n" (p13 items).Length (items |> p13 |> List.exists (function Item.CtorGroup _ -> true | _ -> false)))       
+                Some items
+            | _ ->
+        
+            match origLongIdentOpt with
+            | None -> None
+            | Some _ -> 
+                Trace.PrintLine("CompilerServices", fun _ -> sprintf "GetDeclItemsForNamesAtPosition: plid = %+A, residue = %+A, colAtEndOfNamesAndResidue = %+A\n" plid exactMatchResidueOpt colAtEndOfNamesAndResidue)       
+
+                // Try to use the type of the expression on the left to help generate a completion list
+                let mutable thereIsADotInvolved = false
+                let qualItems = 
+                    match untypedParseInfoOpt with
+                    | 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, 
+                        // you won't won't get a tip until the typechecking catches back up.
+                        GetPreciseCompletionListFromExprTypingsResult.None
+                    | Some(upi) -> 
+
+    // See ServiceUntypedParse - GetRangeOfExprLeftOfDot and TryFindExpressionASTLeftOfDotLeftOfCursor are similar, but different, can we refactor commonality?
+    //                match UntypedParseInfoImpl.GetRangeOfExprLeftOfDot(line,colAtEndOfNamesAndResidue,upi.ParseTree) with
+    //                | Some((_,_),(el,ec)) ->
+    //                    thereIsADotInvolved <- true
+    //                    GetPreciseCompletionListFromExprTypings(upi, el-1, ec, filterCtors)
+                    match UntypedParseInfoImpl.TryFindExpressionASTLeftOfDotLeftOfCursor(line,colAtEndOfNamesAndResidue,upi.ParseTree) with
+                    | Some(pos,_) ->
+                        thereIsADotInvolved <- true
+                        GetPreciseCompletionListFromExprTypings(upi, pos.Line-1, pos.Column, filterCtors, hasTextChangedSinceLastTypecheck)
+                    | 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
+
+                match qualItems,thereIsADotInvolved with            
+                | GetPreciseCompletionListFromExprTypingsResult.Some(FilterRelevantItems(items)), _
+                        // 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
+                        // and then return to the qualItems. This is because the expression typings are a little inaccurate, primarily because
+                        // it appears we're getting some typings recorded for non-atomic expressions like "f x"
+                        when (match plid with [] -> true | _ -> false)  -> 
+                    Trace.PrintLine("CompilerServices", fun _ -> sprintf "GetDeclItemsForNamesAtPosition: lookup based on expression typings successful\n")       
+                    Some items
+                | GetPreciseCompletionListFromExprTypingsResult.NoneBecauseThereWereTypeErrors, _ ->
+                    // 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, _ ->         
+                    // we want to report no result and let second-chance intellisense kick in
+                    None
+                | _, true when (match plid with [] -> true | _ -> false)  -> 
+                    // If the user just pressed '.' after an _expression_ (not a plid), it is never right to show environment-lookup top-level completions.
+                    // 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 =  FindInEnv(plid, residueOpt.IsSome)
+                match nameResItems, envItems, qualItems with            
+            
+                // First, use unfiltered name resolution items, if they're not empty
+                | NameResResult.Members(items, denv, m), _, _ when nonNil items -> 
+                    Trace.PrintLine("CompilerServices", fun _ -> sprintf "GetDeclItemsForNamesAtPosition: lookup based on name resolution results successful, #items = %d, exists ctor = %b\n" (items).Length (items |> List.exists (function Item.CtorGroup _ -> true | _ -> false)))       
+                    Some(items, denv, m)                
+            
+                // If we have nonempty items from environment that were resolved from a type, then use them... 
+                // (that's better than the next case - here we'd return 'int' as a type)
+                | _, FilterRelevantItems(items, denv, m), _ when nonNil items ->
+                    Trace.PrintLine("CompilerServices", fun _ -> sprintf "GetDeclItemsForNamesAtPosition: lookup based on name and environment successful\n")       
+                    Some(items, denv, m)
+
+                // Try again with the qualItems
+                | _, _, GetPreciseCompletionListFromExprTypingsResult.Some(FilterRelevantItems(items)) ->
+                    Some(items)
+                
+                | _ -> None
+
         match UntypedParseInfoImpl.TryGetCompletionContext(line, colAtEndOfNamesAndResidue, untypedParseInfoOpt) with
-        | Some Invalid -> None
+        | Some CompletionContext.Invalid -> None
         | Some (CompletionContext.Inherit(InheritanceContext.Class, (plid, _))) ->
             FindInEnv(plid, false) 
             |> FilterRelevantItemsBy None GetBaseClassCandidates
@@ -783,148 +974,24 @@ type TypeCheckInfo
         | Some(CompletionContext.RecordField(RecordContext.Constructor(typeName))) ->
             FindRecordFieldsInEnv([typeName], None)
             |> Some
+        | Some(CompletionContext.ParameterList (endPos, fields)) ->
+            let results = GetNamedParametersAndSettableFields endPos hasTextChangedSinceLastTypecheck
+
+            let declaredItems = getDeclaredItems false
+
+            match results with
+            | NameResResult.Members(items, denv, m) -> 
+                let filtered = 
+                    items 
+                    |> RemoveDuplicateItems g
+                    |> RemoveExplicitlySuppressed g
+                    |> List.filter (fun m -> not (fields.Contains (m.DisplayName g)))
+                match declaredItems with
+                | None -> Some (items, denv, m)
+                | Some (declItems, declaredDisplayEnv, declaredRange) -> Some (filtered @ declItems, declaredDisplayEnv, declaredRange)
+            | _ -> declaredItems
         | cc ->
-
-        let findFirstNonWsPos 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
-        
-        // are last two chars (except whitespaces) = ".."
-        let isLikeRangeOp = 
-            match findFirstNonWsPos (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 (cc = Some (CompletionContext.RangeOperator)) 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 
-            | None -> GetPreciseItemsFromNameResolution(line, colAtEndOfNamesAndResidue, None, filterCtors,resolveOverloads, hasTextChangedSinceLastTypecheck)
-            | Some residue ->
-                // deals with cases when we have spaces between dot and\or identifier, like A  . $
-                // if this is our case - then wen need to locate end position of the name skipping whitespaces
-                // this allows us to handle cases like: let x . $ = 1 
-
-                // colAtEndOfNamesAndResidue is 1-based so at first we need to convert it to 0-based 
-                match findFirstNonWsPos (colAtEndOfNamesAndResidue - 1) with
-                | Some p when lineStr.[p] = '.' ->
-                    match findFirstNonWsPos (p - 1) with
-                    | Some colAtEndOfNames ->                 
-                        let colAtEndOfNames = colAtEndOfNames + 1 // convert 0-based to 1-based
-                        GetPreciseItemsFromNameResolution(line, colAtEndOfNames, Some(residue), filterCtors,resolveOverloads, hasTextChangedSinceLastTypecheck)
-                    | None -> 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 = 
-            match origLongIdentOpt, residueOpt with
-            | None, _ -> [], None
-            | Some(origLongIdent), Some _ -> origLongIdent, None
-            | Some(origLongIdent), None ->
-                assert (nonNil origLongIdent)
-                // note: as above, this happens when we are called for "precise" resolution - (F1 keyword, data tip etc..)
-                let plid, residue = List.frontAndBack origLongIdent
-                plid, Some residue
-                
-        /// Post-filter items to make sure they have precisely the right name
-        /// This also checks that there are some remaining results 
-        let (|FilterRelevantItems|_|) orig =
-            FilterRelevantItemsBy exactMatchResidueOpt (fun _ _ -> true) orig
-
-        match nameResItems with            
-        | NameResResult.TypecheckStaleAndTextChanged -> None // second-chance intellisense will try again
-        | NameResResult.Cancel(denv,m) -> Some([], denv, m)
-        | NameResResult.Members(FilterRelevantItems(items)) -> 
-            Trace.PrintLine("CompilerServices", fun _ -> sprintf "GetDeclItemsForNamesAtPosition: lookup based on name resolution results successful, #items = %d, exists ctor = %b\n" (p13 items).Length (items |> p13 |> List.exists (function Item.CtorGroup _ -> true | _ -> false)))       
-            Some items
-        | _ ->
-        
-        match origLongIdentOpt with
-        | None -> None
-        | Some _ -> 
-            Trace.PrintLine("CompilerServices", fun _ -> sprintf "GetDeclItemsForNamesAtPosition: plid = %+A, residue = %+A, colAtEndOfNamesAndResidue = %+A\n" plid exactMatchResidueOpt colAtEndOfNamesAndResidue)       
-
-            // Try to use the type of the expression on the left to help generate a completion list
-            let mutable thereIsADotInvolved = false
-            let qualItems = 
-                match untypedParseInfoOpt with
-                | 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, 
-                    // you won't won't get a tip until the typechecking catches back up.
-                    GetPreciseCompletionListFromExprTypingsResult.None
-                | Some(upi) -> 
-
-// See ServiceUntypedParse - GetRangeOfExprLeftOfDot and TryFindExpressionASTLeftOfDotLeftOfCursor are similar, but different, can we refactor commonality?
-//                match UntypedParseInfoImpl.GetRangeOfExprLeftOfDot(line,colAtEndOfNamesAndResidue,upi.ParseTree) with
-//                | Some((_,_),(el,ec)) ->
-//                    thereIsADotInvolved <- true
-//                    GetPreciseCompletionListFromExprTypings(upi, el-1, ec, filterCtors)
-                match UntypedParseInfoImpl.TryFindExpressionASTLeftOfDotLeftOfCursor(line,colAtEndOfNamesAndResidue,upi.ParseTree) with
-                | Some(pos,_) ->
-                    thereIsADotInvolved <- true
-                    GetPreciseCompletionListFromExprTypings(upi, pos.Line-1, pos.Column, filterCtors, hasTextChangedSinceLastTypecheck)
-                | 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
-
-            match qualItems,thereIsADotInvolved with            
-            | GetPreciseCompletionListFromExprTypingsResult.Some(FilterRelevantItems(items)), _
-                    // 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
-                    // and then return to the qualItems. This is because the expression typings are a little inaccurate, primarily because
-                    // it appears we're getting some typings recorded for non-atomic expressions like "f x"
-                    when (match plid with [] -> true | _ -> false)  -> 
-                Trace.PrintLine("CompilerServices", fun _ -> sprintf "GetDeclItemsForNamesAtPosition: lookup based on expression typings successful\n")       
-                Some items
-            | GetPreciseCompletionListFromExprTypingsResult.NoneBecauseThereWereTypeErrors, _ ->
-                // 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, _ ->         
-                // we want to report no result and let second-chance intellisense kick in
-                None
-            | _, true when (match plid with [] -> true | _ -> false)  -> 
-                // If the user just pressed '.' after an _expression_ (not a plid), it is never right to show environment-lookup top-level completions.
-                // 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 =  FindInEnv(plid, residueOpt.IsSome)
-            match nameResItems, envItems, qualItems with            
-            
-            // First, use unfiltered name resolution items, if they're not empty
-            | NameResResult.Members(items, denv, m), _, _ when nonNil items -> 
-                Trace.PrintLine("CompilerServices", fun _ -> sprintf "GetDeclItemsForNamesAtPosition: lookup based on name resolution results successful, #items = %d, exists ctor = %b\n" (items).Length (items |> List.exists (function Item.CtorGroup _ -> true | _ -> false)))       
-                Some(items, denv, m)                
-            
-            // If we have nonempty items from environment that were resolved from a type, then use them... 
-            // (that's better than the next case - here we'd return 'int' as a type)
-            | _, FilterRelevantItems(items, denv, m), _ when nonNil items ->
-                Trace.PrintLine("CompilerServices", fun _ -> sprintf "GetDeclItemsForNamesAtPosition: lookup based on name and environment successful\n")       
-                Some(items, denv, m)
-
-            // Try again with the qualItems
-            | _, _, GetPreciseCompletionListFromExprTypingsResult.Some(FilterRelevantItems(items)) ->
-                Some(items)
-                
-            | _ -> None
-
+            getDeclaredItems (match cc with Some (CompletionContext.RangeOperator) -> true | _ -> false)
 
     // Return 'false' if this is not a completion item valid in an interface file.
     let IsValidSignatureFileItem item =
@@ -1194,20 +1261,20 @@ module internal Parser =
                 else exn
             if reportErrors then 
                 let report exn = 
-                    let warn = warn && not (ReportWarningAsError tcConfig.globalWarnLevel tcConfig.specificWarnOff tcConfig.specificWarnOn tcConfig.specificWarnAsError tcConfig.specificWarnAsWarn tcConfig.globalWarnAsError exn)                
-                    if (not warn || ReportWarning tcConfig.globalWarnLevel tcConfig.specificWarnOff tcConfig.specificWarnOn exn) then 
+                    let warn = warn && not (ReportWarningAsError (tcConfig.globalWarnLevel, tcConfig.specificWarnOff, tcConfig.specificWarnOn, tcConfig.specificWarnAsError, tcConfig.specificWarnAsWarn, tcConfig.globalWarnAsError) exn)                
+                    if (not warn || ReportWarning (tcConfig.globalWarnLevel, tcConfig.specificWarnOff, tcConfig.specificWarnOn) exn) then 
                         let oneError trim 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 = ErrorInfo.CreateFromExceptionAndAdjustEof(exn,warn,trim,fallbackRange,fileInfo)
-                            if (ei.FileName=mainInputFileName) || (ei.FileName=Microsoft.FSharp.Compiler.Env.DummyFileNameForRangesWithoutASpecificLocation) then
+                            if (ei.FileName=mainInputFileName) || (ei.FileName=Microsoft.FSharp.Compiler.TcGlobals.DummyFileNameForRangesWithoutASpecificLocation) then
                                 Trace.PrintLine("UntypedParseAux", fun _ -> sprintf "Reporting one error: %s\n" (ei.ToString()))
                                 errorsAndWarningsCollector.Add ei
                                 if not warn then 
                                     errorCount <- errorCount + 1
                       
-                        let mainError,relatedErrors = Build.SplitRelatedErrors exn 
+                        let mainError,relatedErrors = CompileOps.SplitRelatedErrors exn 
                         oneError false mainError
                         List.iter (oneError true) relatedErrors
                 match exn with
@@ -1290,7 +1357,7 @@ module internal Parser =
               Lexhelp.usingLexbufForParsing (lexbuf, mainInputFileName) (fun lexbuf -> 
                   try 
                     let skip = true
-                    let tokenizer = Lexfilter.LexFilter (lightSyntaxStatus, tcConfig.compilingFslib, Lexer.token lexargs skip, lexbuf)
+                    let tokenizer = LexFilter.LexFilter (lightSyntaxStatus, tcConfig.compilingFslib, Lexer.token lexargs skip, lexbuf)
                     let lexfun = tokenizer.Lexer
                     if matchBracesOnly then 
                         // Quick bracket matching parse  
@@ -1325,7 +1392,7 @@ module internal Parser =
                             tcConfig.target.IsExe && 
                             projectSourceFiles.Length >= 1 && 
                             System.String.Compare(List.last projectSourceFiles,mainInputFileName,StringComparison.CurrentCultureIgnoreCase)=0
-                        let isLastCompiland = isLastCompiland || Build.IsScript(mainInputFileName)  
+                        let isLastCompiland = isLastCompiland || CompileOps.IsScript(mainInputFileName)  
 
                         let parseResult = ParseInput(lexfun,errHandler.ErrorLogger,lexbuf,None,mainInputFileName,isLastCompiland)
                         Some parseResult
@@ -1355,7 +1422,7 @@ module internal Parser =
                                             member __.Equals((p1,i1),(p2,i2)) = posEq p1 p2 && i1 =  i2 } )
         let capturedMethodGroupResolutions = new ResizeArray<_>(100)
         let allowedRange (m:range) = not m.IsSynthetic
-        interface Nameres.ITypecheckResultsSink with
+        interface NameResolution.ITypecheckResultsSink with
             member sink.NotifyEnvWithScope(m,nenv,ad) = 
                 if allowedRange m then 
                     capturedEnvs.Add((m,nenv,ad)) 
@@ -1449,7 +1516,7 @@ module internal Parser =
                 loadClosure.RootWarnings |> List.iter warnSink
                 
 
-                let fileOfBackgroundError err = (match RangeOfError (fst err) with Some m-> m.FileName | None -> null)
+                let fileOfBackgroundError err = (match GetRangeOfError (fst err) with Some m-> m.FileName | None -> null)
                 let sameFile file hashLoadInFile = 
                     (0 = String.Compare(fst hashLoadInFile, file, StringComparison.OrdinalIgnoreCase))
 
@@ -1510,7 +1577,7 @@ module internal Parser =
                     let checkForErrors() = (parseHadErrors || errHandler.ErrorCount > 0)
                     // 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 computation = TypecheckSingleInputAndFinishEventually(checkForErrors,tcConfig, tcImports, tcGlobals, None, TcResultsSink.WithSink sink, tcState, parsedMainInput)
+                    let computation = TypeCheckSingleInputAndFinishEventually(checkForErrors,tcConfig, tcImports, tcGlobals, None, TcResultsSink.WithSink sink, tcState, parsedMainInput)
                     match computation |> Eventually.forceWhile (fun () -> not (isResultObsolete())) with
                     | Some((tcEnvAtEnd,_,_),_) -> Some tcEnvAtEnd
                     | None -> None // Means 'aborted'
@@ -1542,7 +1609,7 @@ module internal Parser =
         reraise()
 
 type internal UnresolvedReferencesSet = 
-    val private set : System.Collections.Generic.HashSet
+    val private set : System.Collections.Generic.HashSet
     new(unresolved) = {set = System.Collections.Generic.HashSet(unresolved, HashIdentity.Structural)}
 
     override this.Equals(o) = 
@@ -2148,7 +2215,7 @@ module internal PrettyNaming =
 #if DEBUG
 
 namespace Internal.Utilities.Diagnostic
-open Microsoft.FSharp.Compiler.Env
+open Microsoft.FSharp.Compiler.TcGlobals
 open Microsoft.FSharp.Compiler.Tastops 
 open Microsoft.FSharp.Compiler.Infos
 open Microsoft.FSharp.Compiler
diff --git a/src/fsharp/vs/service.fsi b/src/fsharp/vs/service.fsi
index f678689cdc6..acf32204bd6 100644
--- a/src/fsharp/vs/service.fsi
+++ b/src/fsharp/vs/service.fsi
@@ -215,7 +215,7 @@ type internal InteractiveChecker =
 #if FSI_SERVER_INTELLISENSE
 // These functions determine all declarations, called by fsi.fs for fsi-server requests.
 module internal FsiIntelisense =
-    val getDeclarations : Build.TcConfig * Env.TcGlobals * Build.TcImports * Build.TcState -> string -> string[] -> (string * string * string * int)[]
+    val getDeclarations : Build.TcConfig * TcGlobals * Build.TcImports * Build.TcState -> string -> string[] -> (string * string * string * int)[]
 #endif
 
 module internal PrettyNaming =
diff --git a/src/ilx/pubclo.fs b/src/ilx/EraseClosures.fs
similarity index 99%
rename from src/ilx/pubclo.fs
rename to src/ilx/EraseClosures.fs
index d5824038aa5..fcb1ef56731 100644
--- a/src/ilx/pubclo.fs
+++ b/src/ilx/EraseClosures.fs
@@ -1,6 +1,6 @@
 // Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseIlxFuncs
+module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseClosures
 
 open Internal.Utilities
 
@@ -226,7 +226,7 @@ let rec convInstr cenv (tmps: ILLocalsAllocator, thisGenParams: ILGenericParamet
                 | Apps_app (arg,rest) -> 
                     let storers, loaders = unwind rest
                     let argStorers,argLoaders = 
-                          let locn = tmps.AllocLocal (mkILLocal arg)
+                          let locn = tmps.AllocLocal (mkILLocal arg None)
                           [mkStloc locn], [mkLdloc locn]
                     argStorers :: storers, argLoaders :: loaders  
                 | Apps_done _ -> 
@@ -348,7 +348,7 @@ let mkILFreeVarForParam (p : ILParameter) =
     let nm = (match p.Name with Some x -> x | None -> failwith "closure parameters must be given names")
     mkILFreeVar(nm, false,p.Type)
 
-let mkILLocalForFreeVar (p: IlxClosureFreeVar) = mkILLocal p.fvType
+let mkILLocalForFreeVar (p: IlxClosureFreeVar) = mkILLocal p.fvType None
 
 let mkILCloFldSpecs _cenv flds = 
     flds |> Array.map (fun fv -> (fv.fvName,fv.fvType)) |> Array.toList
diff --git a/src/ilx/pubclo.fsi b/src/ilx/EraseClosures.fsi
similarity index 97%
rename from src/ilx/pubclo.fsi
rename to src/ilx/EraseClosures.fsi
index 9c0fa3850c8..f112953846c 100644
--- a/src/ilx/pubclo.fsi
+++ b/src/ilx/EraseClosures.fsi
@@ -1,7 +1,7 @@
 // Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
 /// Compiler use only.  Erase closures
-module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseIlxFuncs
+module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseClosures
 
 open Microsoft.FSharp.Compiler.AbstractIL
 open Microsoft.FSharp.Compiler.AbstractIL.IL 
diff --git a/src/ilx/cu_erase.fs b/src/ilx/EraseUnions.fs
similarity index 99%
rename from src/ilx/cu_erase.fs
rename to src/ilx/EraseUnions.fs
index 84877a9c897..831dbf92a7c 100644
--- a/src/ilx/cu_erase.fs
+++ b/src/ilx/EraseUnions.fs
@@ -5,7 +5,7 @@
 // -------------------------------------------------------------------- 
 
 
-module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseIlxUnions
+module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseUnions
 
 open Internal.Utilities
 open Microsoft.FSharp.Compiler.AbstractIL 
@@ -377,7 +377,7 @@ let rec convInstr cenv (tmps: ILLocalsAllocator) inplab outlab instr =
                         InstrMorph [ AI_pop; (AI_ldc (DT_I4, ILConst.I4 0)) ] 
                 | RuntimeTypes -> 
                         let baseTy = baseTyOfUnionSpec cuspec
-                        let locn = tmps.AllocLocal (mkILLocal baseTy)
+                        let locn = tmps.AllocLocal (mkILLocal baseTy None)
 
                         let mkCase last inplab cidx failLab = 
                             let alt = altOfUnionSpec cuspec cidx
@@ -495,7 +495,7 @@ let rec convInstr cenv (tmps: ILLocalsAllocator) inplab outlab instr =
         
             match cuspecRepr.DiscriminationTechnique cuspec with 
             | RuntimeTypes ->  
-                let locn = tmps.AllocLocal (mkILLocal baseTy)
+                let locn = tmps.AllocLocal (mkILLocal baseTy None)
                 let mkCase _last inplab (cidx,tg) failLab = 
                     let alt = altOfUnionSpec cuspec cidx
                     let altTy = tyForAlt cuspec alt
@@ -1037,13 +1037,6 @@ let rec convClassUnionDef cenv enc td cud =
     // The class can be abstract if each alternative is represented by a derived type
     let isAbstract = (altTypeDefs.Length = cud.cudAlternatives.Length)        
 
-    // If the class is abstract make the constructor used for the subclasses protected
-    let ctorMeths = 
-        if isAbstract then 
-            ctorMeths |> List.map (fun mdef -> {mdef with Access=ILMemberAccess.Assembly })
-        else   
-            ctorMeths
-
     let existingMeths = 
         td.Methods.AsList 
             // Filter out the F#-compiler supplied implementation of the get_Empty method. This is because we will replace
@@ -1059,9 +1052,6 @@ let rec convClassUnionDef cenv enc td cud =
             |> List.filter (fun pd -> not (cud.cudHasHelpers = SpecialFSharpListHelpers && (pd.Name = "Empty"  || pd.Name = "IsEmpty"  )) &&
                                       not (cud.cudHasHelpers = SpecialFSharpOptionHelpers && (pd.Name = "Value" || pd.Name = "None")))
     
-    let casesTypeDef = 
-           None
-
     let enumTypeDef = 
         // The nested Tags type is elided if there is only one tag
         // The Tag property is NOT elided if there is only one tag
@@ -1095,15 +1085,14 @@ let rec convClassUnionDef cenv enc td cud =
 
     let baseTypeDef = 
         { Name = td.Name;
-          NestedTypes = mkILTypeDefs (Option.toList casesTypeDef @ 
-                               Option.toList enumTypeDef @ 
+          NestedTypes = mkILTypeDefs (Option.toList enumTypeDef @ 
                                altTypeDefs @ 
                                altDebugTypeDefs @
                                (convTypeDefs cenv (enc@[td]) td.NestedTypes).AsList);
           GenericParams= td.GenericParams;
           Access = td.Access;
           IsAbstract = isAbstract;
-          IsSealed = false;
+          IsSealed = altTypeDefs.IsEmpty;
           IsSerializable=td.IsSerializable;
           IsComInterop=false;
           Layout=td.Layout; 
diff --git a/src/ilx/cu_erase.fsi b/src/ilx/EraseUnions.fsi
similarity index 97%
rename from src/ilx/cu_erase.fsi
rename to src/ilx/EraseUnions.fsi
index ef7c3d0a88c..4889c7b2576 100644
--- a/src/ilx/cu_erase.fsi
+++ b/src/ilx/EraseUnions.fsi
@@ -4,7 +4,7 @@
 // Compiler use only.  Erase discriminated unions.
 // -------------------------------------------------------------------- 
 
-module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseIlxUnions
+module internal Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.EraseUnions
 
 open Microsoft.FSharp.Compiler.AbstractIL.IL
 open Microsoft.FSharp.Compiler.AbstractIL.Extensions.ILX.Types
diff --git a/src/update.cmd b/src/update.cmd
index 43fd1873d4b..bcf825bb36a 100644
--- a/src/update.cmd
+++ b/src/update.cmd
@@ -8,11 +8,15 @@ setlocal
 
 if /i "%1" == "debug" goto :ok
 if /i "%1" == "release" goto :ok
+if /i "%1" == "vsdebug" goto :ok
+if /i "%1" == "vsrelease" goto :ok
 
 echo GACs built binaries, adds required strong name verification skipping, and optionally NGens built binaries
 echo Usage:
-echo    update.cmd debug [-ngen]
+echo    update.cmd debug   [-ngen]
 echo    update.cmd release [-ngen]
+echo    update.cmd vsdebug [-ngen]
+echo    update.cmd vsrelease [-ngen]
 exit /b 1
 
 :ok
diff --git a/src/utils/CompilerLocationUtils.fs b/src/utils/CompilerLocationUtils.fs
index 2996df86046..e382e333b8e 100644
--- a/src/utils/CompilerLocationUtils.fs
+++ b/src/utils/CompilerLocationUtils.fs
@@ -215,7 +215,7 @@ module internal FSharpEnvironment =
 
                 let key20 = @"Software\Microsoft\.NETFramework\AssemblyFolders\Microsoft.FSharp-" + FSharpTeamVersionNumber 
 #if FX_ATLEAST_45
-                let key40 = @"Software\Microsoft\FSharp\3.1\Runtime\v4.0"
+                let key40 = @"Software\Microsoft\FSharp\4.0\Runtime\v4.0"
 #else
                 let key40 = @"Software\Microsoft\FSharp\2.0\Runtime\v4.0"
 #endif
diff --git a/src/utils/resizearray.fs b/src/utils/ResizeArray.fs
similarity index 100%
rename from src/utils/resizearray.fs
rename to src/utils/ResizeArray.fs
diff --git a/src/utils/resizearray.fsi b/src/utils/ResizeArray.fsi
similarity index 100%
rename from src/utils/resizearray.fsi
rename to src/utils/ResizeArray.fsi
diff --git a/src/utils/sformat.fs b/src/utils/sformat.fs
index e9e1686f315..18905583bd7 100644
--- a/src/utils/sformat.fs
+++ b/src/utils/sformat.fs
@@ -145,12 +145,6 @@ namespace Microsoft.FSharp.Text.StructuredFormat
 
         let aboveL  l r = mkNode l r (Broken 0)
 
-        let joinN i l r = mkNode l r (Breakable i)                                      
-        let join  = joinN 0
-        let join1 = joinN 1
-        let join2 = joinN 2
-        let join3 = joinN 3
-
         let tagAttrL tag attrs l = Attr(tag,attrs,l)
 
         let apply2 f l r = if isEmptyL l then r else
@@ -168,9 +162,9 @@ namespace Microsoft.FSharp.Text.StructuredFormat
             | [x]   -> x
             | x::xs ->
                 let rec process' prefixL = function
-                    []    -> prefixL
+                  | []    -> prefixL
                   | y::ys -> process' ((tagger prefixL) ++ y) ys
-                in  process' x xs
+                process' x xs
             
         let commaListL x = tagListL (fun prefixL -> prefixL ^^ rightL ",") x
         let semiListL x  = tagListL (fun prefixL -> prefixL ^^ rightL ";") x
@@ -184,7 +178,7 @@ namespace Microsoft.FSharp.Text.StructuredFormat
           | x::ys -> List.fold (fun pre y -> pre @@ y) x ys
 
         let optionL xL = function
-            None   -> wordL "None"
+          | None   -> wordL "None"
           | Some x -> wordL "Some" -- (xL x)
 
         let listL xL xs = leftL "[" ^^ sepListL (sepL ";") (List.map xL xs) ^^ rightL "]"
@@ -865,37 +859,90 @@ namespace Microsoft.FSharp.Text.StructuredFormat
                                if txt = null || txt.Length <= 1 then  
                                    None
                                else
-                                  let p1 = txt.IndexOf ("{", StringComparison.Ordinal)
-                                  let p2 = txt.LastIndexOf ("}", StringComparison.Ordinal)
-                                  if p1 < 0 || p2 < 0 || p1+1 >= p2 then 
-                                      None 
-                                  else
-                                      let preText = if p1 <= 0 then "" else txt.[0..p1-1]
-                                      let postText = if p2+1 >= txt.Length then "" else txt.[p2+1..]
-                                      let prop = txt.[p1+1..p2-1]
-                                      match catchExn (fun () -> getProperty x prop) with
-                                        | Choice2Of2 e -> Some (wordL (""))
-                                        | Choice1Of2 alternativeObj ->
-                                            try 
-                                                let alternativeObjL = 
-                                                  match alternativeObj with 
-                                                      // A particular rule is that if the alternative property
-                                                      // returns a string, we turn off auto-quoting and esaping of
-                                                      // the string, i.e. just treat the string as display text.
-                                                      // This allows simple implementations of 
-                                                      // such as
-                                                      //
-                                                      //    []
-                                                      //    type BigInt(signInt:int, v : BigNat) =
-                                                      //        member x.StructuredDisplayString = x.ToString()
-                                                      //
-                                                      | :? string as s -> sepL s
-                                                      | _ -> sameObjL (depthLim-1) Precedence.BracketIfTuple alternativeObj
-                                                countNodes 0 // 0 means we do not count the preText and postText 
-                                                Some (leftL preText ^^ alternativeObjL ^^ rightL postText)
-                                            with _ -> 
-                                              None
-
+                                  let messageRegexPattern = @"^(?
.*?)(?.*?)(?.*)$"
+                                  let illFormedBracketPattern = @"(?  
+                                        // there isn't a match on the regex looking for a property, so now let's make sure we don't have an ill-formed format string (i.e. mismatched/stray brackets)
+                                        let illFormedMatch = System.Text.RegularExpressions.Regex.IsMatch(txt, illFormedBracketPattern)
+                                        match illFormedMatch with
+                                        | true -> None // there are mismatched brackets, bail out
+                                        | false when layouts.Length > 1 -> Some (spaceListL (List.rev ((wordL (replaceEscapedBrackets(txt))::layouts))))
+                                        | false -> Some (wordL (replaceEscapedBrackets(txt)))
+                                      | true ->
+                                        // we have a hit on a property reference
+                                        let preText = replaceEscapedBrackets(m.Groups.["pre"].Value) // everything before the first opening bracket
+                                        let postText = m.Groups.["post"].Value // Everything after the closing bracket
+                                        let prop = replaceEscapedBrackets(m.Groups.["prop"].Value) // Unescape everything between the opening and closing brackets
+
+                                        match catchExn (fun () -> getProperty x prop) with
+                                          | Choice2Of2 e -> Some (wordL (""))
+                                          | Choice1Of2 alternativeObj ->
+                                              try 
+                                                  let alternativeObjL = 
+                                                    match alternativeObj with 
+                                                        // A particular rule is that if the alternative property
+                                                        // returns a string, we turn off auto-quoting and esaping of
+                                                        // the string, i.e. just treat the string as display text.
+                                                        // This allows simple implementations of 
+                                                        // such as
+                                                        //
+                                                        //    []
+                                                        //    type BigInt(signInt:int, v : BigNat) =
+                                                        //        member x.StructuredDisplayString = x.ToString()
+                                                        //
+                                                        | :? string as s -> sepL s
+                                                        | _ -> 
+                                                          // recursing like this can be expensive, so let's throttle it severely
+                                                          sameObjL (depthLim/10) Precedence.BracketIfTuple alternativeObj
+                                                  countNodes 0 // 0 means we do not count the preText and postText 
+
+                                                  let postTextMatch = System.Text.RegularExpressions.Regex.Match(postText, messageRegexPattern)
+                                                  // the postText for this node will be everything up to the next occurrence of an opening brace, if one exists
+                                                  let currentPostText =
+                                                    match postTextMatch.Success with
+                                                      | false -> postText 
+                                                      | true -> postTextMatch.Groups.["pre"].Value
+
+                                                  let newLayouts = (sepL preText ^^ alternativeObjL ^^ sepL currentPostText)::layouts
+                                                  match postText with
+                                                    | "" ->
+                                                      //We are done, build a space-delimited layout from the collection of layouts we've accumulated
+                                                      Some (spaceListL (List.rev newLayouts))
+                                                    | remainingPropertyText when postTextMatch.Success ->
+                                                      
+                                                      // look for stray brackets in the text before the next opening bracket
+                                                      let strayClosingMatch = System.Text.RegularExpressions.Regex.IsMatch(postTextMatch.Groups.["pre"].Value, illFormedBracketPattern)
+                                                      match strayClosingMatch with
+                                                      | true -> None
+                                                      | false -> 
+                                                        // More to process, keep going, using the postText starting at the next instance of a '{'
+                                                        let openingBracketIndex = postTextMatch.Groups.["prop"].Index-1
+                                                        buildObjMessageL remainingPropertyText.[openingBracketIndex..] newLayouts
+                                                    | remaingPropertyText ->
+                                                      // make sure we don't have any stray brackets
+                                                      let strayClosingMatch = System.Text.RegularExpressions.Regex.IsMatch(remaingPropertyText, illFormedBracketPattern)
+                                                      match strayClosingMatch with
+                                                      | true -> None
+                                                      | false ->
+                                                        // We are done, there's more text but it doesn't contain any more properties, we need to remove escaped brackets now though
+                                                        // since that wasn't done when creating currentPostText
+                                                        Some (spaceListL (List.rev ((sepL preText ^^ alternativeObjL ^^ sepL (replaceEscapedBrackets(remaingPropertyText)))::layouts)))
+                                              with _ -> 
+                                                None
+                                  // Seed with an empty layout with a space to the left for formatting purposes
+                                  buildObjMessageL txt [leftL ""] 
 #if RUNTIME
 #else
 #if COMPILER    // FSharp.Compiler.dll: This is the PrintIntercepts extensibility point currently revealed by fsi.exe's AddPrinter
@@ -1112,31 +1159,6 @@ namespace Microsoft.FSharp.Text.StructuredFormat
         // pprinter: leafFormatter
         // --------------------------------------------------------------------
 
-#if Suggestion4299
-        // See bug 4299. Suppress FSI_dddd+ from fsi printer.
-        let fixupForInteractiveFSharpClassesWithNoToString obj (text:string) =
-              // Given obj:T.
-              // If T is a nested type inside a parent type called FSI_dddd, then it looks like an F# Interactive type.
-              // Further, if the .ToString() text starts with "FSI_dddd+T" then it looks like it's the default ToString.
-              // A better test: it is default ToString if the MethodInfo.DeclaringType is System.Object.
-              // In this case, replace "FSI_dddd+T" by "T".
-              // assert(obj <> null)
-              let fullName = obj.GetType().FullName // e.g. "FSI_0123+Name"
-              let name     = obj.GetType().Name     // e.g. "Name"
-              let T = obj.GetType()      
-              if text.StartsWith(fullName) then
-                  // text could be a default .ToString() since it starts with the FullName of the type. More checks...
-                  if T.IsNested &&
-                     T.DeclaringType.Name.StartsWith("FSI_") &&                             // Name has "FSI_" which is 
-                     T.DeclaringType.Name.Substring(4) |> Seq.forall System.Char.IsDigit    // followed by digits?
-                  then
-                      name ^ text.Substring(fullName.Length)    // replace fullName by name at start of text
-                  else
-                      text
-              else
-                text
-#endif
-
         let leafFormatter (opts:FormatOptions) (obj :obj) =
             match obj with 
             | null -> "null"
@@ -1172,10 +1194,6 @@ namespace Microsoft.FSharp.Text.StructuredFormat
             | :? bool   as b -> (if b then "true" else "false")
             | :? char   as c -> "\'" + formatChar true c + "\'"
             | _ -> try  let text = obj.ToString()
-//Suggestion4299. Not yet fixed.
-//#if COMPILER
-//                      let text = fixupForInteractiveFSharpClassesWithNoToString obj text
-//#endif  
                         text
                    with e ->
                      // If a .ToString() call throws an exception, catch it and use the message as the result.
diff --git a/tests/BuildTestTools.cmd b/tests/BuildTestTools.cmd
index db1f877f3a7..4735edc9abd 100644
--- a/tests/BuildTestTools.cmd
+++ b/tests/BuildTestTools.cmd
@@ -2,25 +2,54 @@
 
 if /i "%1" == "debug" goto :ok
 if /i "%1" == "release" goto :ok
+if /i "%1" == "vsdebug" goto :ok
+if /i "%1" == "vsrelease" goto :ok
 
 echo Builds a few test tools using latest compiler and runtime
 echo Usage:
 echo    BuildTestTools.cmd debug
 echo    BuildTestTools.cmd release
+echo    BuildTestTools.cmd vsdebug
+echo    BuildTestTools.cmd vsrelease
 exit /b 1
 
 :ok
 
+:: Check prerequisites
+if not '%VisualStudioVersion%' == '' goto vsversionset
+if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 14.0\common7\ide\devenv.exe" set VisualStudioVersion=14.0
+if exist "%ProgramFiles%\Microsoft Visual Studio 14.0\common7\ide\devenv.exe" set VisualStudioVersion=14.0
+if exist "%VS140COMNTOOLS%" set VisualStudioVersion=14.0
+if not '%VisualStudioVersion%' == '' goto vsversionset
+if exist "%ProgramFiles(x86)%\Microsoft Visual Studio 12.0\common7\ide\devenv.exe" set VisualStudioVersion=12.0
+if exist "%ProgramFiles%\Microsoft Visual Studio 12.0\common7\ide\devenv.exe" set VisualStudioVersion=12.0
+if exist "%VS120COMNTOOLS%" set VisualStudioVersion=12.0
+
+
+
+:vsversionset
+if '%VisualStudioVersion%' == '' echo Error: Could not find an installation of Visual Studio && goto :eof
+
+if exist "%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe" set _msbuildexe="%ProgramFiles(x86)%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe"
+if exist "%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe"      set _msbuildexe="%ProgramFiles%\MSBuild\%VisualStudioVersion%\Bin\MSBuild.exe"
+if not exist %_msbuildexe% echo Error: Could not find MSBuild.exe. && goto :eof
+
 if not exist "%~dp0\fsharpqa\testenv\bin" mkdir "%~dp0\fsharpqa\testenv\bin"  || goto :error
-msbuild %~dp0\fsharpqa\testenv\src\ILComparer\ILComparer.fsproj /p:Configuration=%1 /t:Build  || goto :error
+%_msbuildexe% %~dp0\fsharpqa\testenv\src\ILComparer\ILComparer.fsproj /p:Configuration=%1 /t:Build  || goto :error
 xcopy /Y %~dp0\fsharpqa\testenv\src\ILComparer\bin\%1\* %~dp0\fsharpqa\testenv\bin  || goto :error
 
-msbuild %~dp0\fsharpqa\testenv\src\diff\diff.fsproj /p:Configuration=%1 /t:Build  || goto :error
+%_msbuildexe% %~dp0\fsharpqa\testenv\src\diff\diff.fsproj /p:Configuration=%1 /t:Build  || goto :error
 xcopy /Y %~dp0\fsharpqa\testenv\src\diff\bin\%1\* %~dp0\fsharpqa\testenv\bin  || goto :error
 
-msbuild %~dp0\fsharpqa\testenv\src\HostedCompilerServer\HostedCompilerServer.fsproj /p:Configuration=%1 /t:Build  || goto :error
+%_msbuildexe% %~dp0\fsharpqa\testenv\src\HostedCompilerServer\HostedCompilerServer.fsproj /p:Configuration=%1 /t:Build  || goto :error
 xcopy /Y %~dp0\fsharpqa\testenv\src\HostedCompilerServer\bin\%1\* %~dp0\fsharpqa\testenv\bin  || goto :error
 
+%_msbuildexe% %~dp0\fsharpqa\testenv\src\ExecAssembly\ExecAssembly.fsproj /p:Configuration=%1 /t:Build /p:Platform=x86  || goto :error
+xcopy /IY %~dp0\fsharpqa\testenv\src\ExecAssembly\bin\%1\* %~dp0\fsharpqa\testenv\bin\x86  || goto :error
+
+%_msbuildexe% %~dp0\fsharpqa\testenv\src\ExecAssembly\ExecAssembly.fsproj /p:Configuration=%1 /t:Build /p:Platform=x64  || goto :error
+xcopy /IY %~dp0\fsharpqa\testenv\src\ExecAssembly\bin\%1\* %~dp0\fsharpqa\testenv\bin\AMD64  || goto :error
+
 if exist %~dp0\..\%1\net40\bin (
     xcopy /Y %~dp0\..\%1\net40\bin\FSharp.Core.sigdata %~dp0\fsharpqa\testenv\bin  || goto :error
     xcopy /Y %~dp0\..\%1\net40\bin\FSharp.Core.optdata %~dp0\fsharpqa\testenv\bin  || goto :error
@@ -31,4 +60,3 @@ goto :EOF
 :error
 echo Failed with error %errorlevel%.
 exit /b %errorlevel%
-
diff --git a/tests/RunTests.cmd b/tests/RunTests.cmd
index 2c2ebfde63f..e15f9619a7f 100644
--- a/tests/RunTests.cmd
+++ b/tests/RunTests.cmd
@@ -2,8 +2,10 @@
 setlocal
 
 set FLAVOR=%1
-if /I "%FLAVOR%" == "debug" (goto :FLAVOR_OK)
-if /I "%FLAVOR%" == "release" (goto :FLAVOR_OK)
+if /I "%FLAVOR%" == "debug"     (goto :FLAVOR_OK)
+if /I "%FLAVOR%" == "release"   (goto :FLAVOR_OK)
+if /I "%FLAVOR%" == "vsdebug"   (goto :FLAVOR_OK)
+if /I "%FLAVOR%" == "vsrelease" (goto :FLAVOR_OK)
 goto :USAGE
 
 :flavor_ok
@@ -21,9 +23,11 @@ set _tmp=%3
 if not '%_tmp%' == '' set TTAGS_ARG=-ttags:%_tmp:"=%
 
 rem "nottags" indicates which test areas/test cases will NOT be run, based on the tags in the test.lst and env.lst files
-set NO_TTAGS_ARG=-nottags:ReqPP
+set NO_TTAGS_ARG=-nottags:ReqPP,NOOPEN
 set _tmp=%4
-if not '%_tmp%' == '' set NO_TTAGS_ARG=-nottags:ReqPP,%_tmp:"=%
+if not '%_tmp%' == '' set NO_TTAGS_ARG=-nottags:ReqPP,NOOPEN,%_tmp:"=%
+
+if /I "%APPVEYOR_CI%" == "1" (set NO_TTAGS_ARG=%NO_TTAGS_ARG%,NO_CI)
 
 set PARALLEL_ARG=-procs:%NUMBER_OF_PROCESSORS%
 
@@ -45,6 +49,12 @@ if not exist "%RESULTSDIR%" (mkdir "%RESULTSDIR%")
 
 if /I "%2" == "fsharp" (goto :FSHARP)
 if /I "%2" == "fsharpqa" (goto :FSHARPQA)
+if /I "%2" == "fsharpqadowntarget" (goto :FSHARPQA)
+if /I "%2" == "fsharpqaredirect" (goto :FSHARPQA)
+if /I "%2" == "compilerunit" (
+   set compilerunitsuffix=net40
+   goto :COMPILERUNIT
+)
 if /I "%2" == "coreunit" (
    set coreunitsuffix=net40
    goto :COREUNIT
@@ -71,7 +81,7 @@ if /I "%2" == "ideunit" (goto :IDEUNIT)
 
 echo Usage:
 echo.
-echo RunTests.cmd ^ ^ [TagToRun^|"Tags,To,Run"] [TagNotToRun^|"Tags,Not,To,Run"]
+echo RunTests.cmd ^ ^ [TagToRun^|"Tags,To,Run"] [TagNotToRun^|"Tags,Not,To,Run"]
 echo.
 exit /b 1
 
@@ -120,14 +130,18 @@ IF NOT DEFINED GACUTILEXE64 IF EXIST "%WINSDKNETFXTOOLS%x64\gacutil.exe" set GAC
 set FSC=%FSCBINPATH%\fsc.exe
 set PATH=%FSCBINPATH%;%PATH%
 
+set FSCVPREVBINPATH=%X86_PROGRAMFILES%\Microsoft SDKs\F#\3.1\Framework\v4.0
+set FSCVPREV=%FSCVPREVBINPATH%\fsc.exe
+
 REM == VS-installed paths to FSharp.Core.dll
-set FSCOREDLLPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.1.0
+set FSCOREDLLPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.0
 set FSCOREDLL20PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v2.0\2.3.0.0
-set FSCOREDLLPORTABLEPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETPortable\2.3.5.1
-set FSCOREDLLNETCOREPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.3.1.0
-set FSCOREDLLNETCORE78PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.3.1
-set FSCOREDLLNETCORE259PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.3.1
+set FSCOREDLLPORTABLEPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETPortable\3.47.4.0
+set FSCOREDLLNETCOREPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.7.4.0
+set FSCOREDLLNETCORE78PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.4.0
+set FSCOREDLLNETCORE259PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.4.0
 set FSDATATPPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\Type Providers
+set FSCOREDLLVPREVPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.1.0
 
 REM == open source logic        
 if exist "%FSCBinPath%\FSharp.Core.dll" set FSCOREDLLPATH=%FSCBinPath%
@@ -145,6 +159,7 @@ set FSCOREDLLNETCOREPATH=%FSCOREDLLNETCOREPATH%\FSharp.Core.dll
 set FSCOREDLLNETCORE78PATH=%FSCOREDLLNETCORE78PATH%\FSharp.Core.dll
 set FSCOREDLLNETCORE259PATH=%FSCOREDLLNETCORE259PATH%\FSharp.Core.dll
 set FSDATATPPATH=%FSDATATPPATH%\FSharp.Data.TypeProviders.dll
+set FSCOREDLLVPREVPATH=%FSCOREDLLVPREVPATH%\FSharp.Core.dll
 
 for /d %%i in (%WINDIR%\Microsoft.NET\Framework\v4.0.?????) do set CORDIR=%%i
 set PATH=%PATH%;%CORDIR%
@@ -155,6 +170,24 @@ set RESULTFILE=FSharpQA_Results.log
 set FAILFILE=FSharpQA_Failures.log
 set FAILENV=FSharpQA_Failures
 
+if /I "%2" == "fsharpqadowntarget" (
+   set ISCFLAGS=--noframework -r "%FSCOREDLLVPREVPATH%" -r "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll" -r System.dll -r System.Runtime.dll -r System.Xml.dll -r System.Data.dll -r System.Web.dll -r System.Core.dll -r System.Numerics.dll
+   set NO_TTAGS_ARG=%NO_TTAGS_ARG%,NoCrossVer,FSI
+   set RESULTFILE=FSharpQADownTarget_Results.log
+   set FAILFILE=FSharpQADownTarget_Failures.log
+   set FAILENV=FSharpQADownTarget_Failures
+)
+
+if /I "%2" == "fsharpqaredirect" (
+   set ISCFLAGS=--noframework -r "%FSCOREDLLVPREVPATH%" -r "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll" -r System.dll -r System.Runtime.dll -r System.Xml.dll -r System.Data.dll -r System.Web.dll -r System.Core.dll -r System.Numerics.dll
+   set PLATFORM=%OSARCH%
+   set SIMULATOR_PIPE="%~dp0\fsharpqa\testenv\bin\$PLATFORM\ExecAssembly.exe"
+   set NO_TTAGS_ARG=%NO_TTAGS_ARG%,NoCrossVer,FSI
+   set RESULTFILE=FSharpQARedirect_Results.log
+   set FAILFILE=FSharpQARedirect_Failures.log
+   set FAILENV=FSharpQARedirect_Failures
+)
+
 where.exe perl > NUL 2> NUL 
 if errorlevel 1 (
   echo Error: perl is not in the PATH
@@ -179,6 +212,17 @@ echo "%NUNITPATH%\nunit-console.exe" /nologo /result=%XMLFILE% /output=%OUTPUTFI
 
 goto :EOF
 
+:COMPILERUNIT
+
+set XMLFILE=ComplierUnit_%compilerunitsuffix%_Xml.xml
+set OUTPUTFILE=ComplierUnit_%compilerunitsuffix%_Output.log
+set ERRORFILE=ComplierUnit_%compilerunitsuffix%_Error.log
+
+echo "%NUNITPATH%\nunit-console.exe" /nologo /result=%XMLFILE% /output=%OUTPUTFILE% /err=%ERRORFILE% /work=%RESULTSDIR% %FSCBINPATH%\..\..\%compilerunitsuffix%\bin\FSharp.Compiler.Unittests.dll 
+     "%NUNITPATH%\nunit-console.exe" /nologo /result=%XMLFILE% /output=%OUTPUTFILE% /err=%ERRORFILE% /work=%RESULTSDIR% %FSCBINPATH%\..\..\%compilerunitsuffix%\bin\FSharp.Compiler.Unittests.dll 
+
+goto :EOF
+
 :IDEUNIT
 
 set XMLFILE=IDEUnit_Xml.xml
diff --git a/tests/config.bat b/tests/config.bat
index 434585bc036..90843e8583f 100644
--- a/tests/config.bat
+++ b/tests/config.bat
@@ -168,7 +168,7 @@ IF NOT DEFINED PSH_FLAGS SET PSH_FLAGS=-nologo -noprofile -executionpolicy bypas
 if DEFINED _UNATTENDEDLOG exit /b 0
 
 rem first see if we have got msbuild installed
-if exist "%X86_PROGRAMFILES%\MSBuild\12.0\Bin\MSBuild.exe" SET MSBuildToolsPath=%X86_PROGRAMFILES%\MSBuild\12.0\Bin\
+if exist "%X86_PROGRAMFILES%\MSBuild\14.0\Bin\MSBuild.exe" SET MSBuildToolsPath=%X86_PROGRAMFILES%\MSBuild\14.0\Bin\
 if not "%MSBuildToolsPath%" == "" goto done_MsBuildToolsPath
 
                         IF NOT "%CORDIR%"=="" IF EXIST "%CORDIR%\msbuild.exe"         SET MSBuildToolsPath=%CORDIR%
@@ -177,17 +177,17 @@ IF     "%CORDIR40%"=="" IF NOT "%CORDIR%"=="" IF EXIST "%CORDIR%\..\V3.5\msbuild
 IF NOT "%CORDIR%"=="" FOR /f %%j IN ("%MSBuildToolsPath%") do SET MSBuildToolsPath=%%~fj
 :done_MsBuildToolsPath
 
-reg query "%REG_SOFTWARE%\Microsoft\VisualStudio\12.0\Setup" | findstr /r /c:"Express .* for Windows Desktop" > NUL
+reg query "%REG_SOFTWARE%\Microsoft\VisualStudio\14.0\Setup" | findstr /r /c:"Express .* for Windows Desktop" > NUL
 if NOT ERRORLEVEL 1 (
     set INSTALL_SKU=DESKTOP_EXPRESS
     goto :done_SKU
 )
-reg query "%REG_SOFTWARE%\Microsoft\VisualStudio\12.0\Setup" | findstr /r /c:"Express .* for Web" > NUL
+reg query "%REG_SOFTWARE%\Microsoft\VisualStudio\14.0\Setup" | findstr /r /c:"Express .* for Web" > NUL
 if NOT ERRORLEVEL 1 (
     set INSTALL_SKU=WEB_EXPRESS
     goto :done_SKU
 )
-reg query "%REG_SOFTWARE%\Microsoft\VisualStudio\12.0\Setup" | findstr /r /c:"Ultimate" > NUL
+reg query "%REG_SOFTWARE%\Microsoft\VisualStudio\14.0\Setup" | findstr /r /c:"Ultimate" > NUL
 if NOT ERRORLEVEL 1 (
     set INSTALL_SKU=ULTIMATE
     goto :done_SKU
@@ -236,9 +236,9 @@ REM === Works on 32bit and 64 bit, no matter what cmd prompt it is invoked from
 REM === 
 :SetFSCBinPath45
 
-FOR /F "tokens=1-2*" %%a IN ('reg query "%REG_SOFTWARE%\Microsoft\FSharp\3.1\Runtime\v4.0" /ve') DO set FSCBinPath=%%c
+FOR /F "tokens=1-2*" %%a IN ('reg query "%REG_SOFTWARE%\Microsoft\FSharp\4.0\Runtime\v4.0" /ve') DO set FSCBinPath=%%c
 IF EXIST "%FSCBinPath%" goto :EOF
-FOR /F "tokens=1-3*" %%a IN ('reg query "%REG_SOFTWARE%\Microsoft\FSharp\3.1\Runtime\v4.0" /ve') DO set FSCBinPath=%%d
+FOR /F "tokens=1-3*" %%a IN ('reg query "%REG_SOFTWARE%\Microsoft\FSharp\4.0\Runtime\v4.0" /ve') DO set FSCBinPath=%%d
 goto :EOF
 
 REM ===
@@ -258,12 +258,12 @@ IF /I "%OSARCH%"=="IA64"  set X86_PROGRAMFILES=%ProgramFiles(x86)%
 IF /I "%OSARCH%"=="AMD64" set X86_PROGRAMFILES=%ProgramFiles(x86)%
 
 REM == Default VS install locations
-set FSCOREDLLPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.1.0
+set FSCOREDLLPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.0
 set FSCOREDLL20PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v2.0\2.3.0.0
-set FSCOREDLLPORTABLEPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETPortable\2.3.5.1
-set FSCOREDLLNETCOREPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.3.1.0
-set FSCOREDLLNETCORE78PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.3.1
-set FSCOREDLLNETCORE259PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.3.1
+set FSCOREDLLPORTABLEPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETPortable\3.47.4.0
+set FSCOREDLLNETCOREPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.7.4.0
+set FSCOREDLLNETCORE78PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.4.0
+set FSCOREDLLNETCORE259PATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.4.0
 set FSDATATPPATH=%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.3.0.0\Type Providers
 
 REM == Check if using open build instead
diff --git a/tests/fsharp/core/apporder/test.fsx b/tests/fsharp/core/apporder/test.fsx
index 90c641e0f84..d1876072321 100644
--- a/tests/fsharp/core/apporder/test.fsx
+++ b/tests/fsharp/core/apporder/test.fsx
@@ -6,7 +6,7 @@ module Core_apporder
 #light
 let failures = ref false
 let report_failure (s) = 
-  stderr.WriteLine ("NO: " + s); failures := true; failwith ""
+  stderr.WriteLine ("NO: " + s); failures := true
 let test s b = if b then () else report_failure(s) 
 
 (* TEST SUITE FOR Int32 *)
@@ -15,7 +15,7 @@ let out r (s:string) = r := !r @ [s]
 
 let check s v1 v2 = 
     if v1 = v2 then printfn "%s: OK" s
-    else printfn "%s: FAILED, expected %A, got %A" s v2 v1
+    else report_failure (sprintf "%s: FAILED, expected %A, got %A" s v2 v1)
 
 module CheckMutationOfArgumentValuesInOtherArguments = 
     let test1232() = 
@@ -930,6 +930,192 @@ module MemberAppOrder =
     check "cwkneccewi" state [3;2;5;4]
     check "nvroirv" (sprintf "%d %d %d %d %d" foo.A foo.B foo.X foo.Y foo.Z) "4 5 3 2 99"
 
+type RecordWithInts = 
+    { A : int
+      B : int
+      C : int }
+
+module OrderOfRecordInitialisation = 
+
+    let expected =  
+        { A = 1
+          B = 2
+          C = 3 }
+
+    let ShouldInitialzeInGivenOrder1 = 
+        let order = ref ""
+        let actual =
+          { A = let _ = order := !order + "1" in 1
+            B = let _ = order := !order + "2" in 2
+            C = let _ = order := !order + "3" in 3 }
+
+        check "cnclewlecp2" expected actual
+        check "ceiewoi" "123" !order
+
+    let ShouldInitialzeInGivenOrder2 = 
+        let order = ref ""
+        let actual =
+          { A = let _ = order := !order + "1" in 1
+            C = let _ = order := !order + "2" in 3
+            B = let _ = order := !order + "3" in 2 }
+
+        check "cd33289e0ewn1" expected actual
+        check "ewlknewv90we2" "123" !order
+
+    let ShouldInitialzeInGivenOrder3 = 
+        let order = ref ""
+        let actual =
+          { B = let _ = order := !order + "1" in 2
+            A = let _ = order := !order + "2" in 1
+            C = let _ = order := !order + "3" in 3 }
+
+        check "cewekcjnwe3" expected actual
+        check "cewekcjnwe4" "123" !order
+
+
+    let ShouldInitialzeInGivenOrder4 = 
+        let order = ref ""
+        let actual =
+          { B = let _ = order := !order + "1" in 2
+            C = let _ = order := !order + "2" in 3
+            A = let _ = order := !order + "3" in 1 }
+
+        check "cewekcjnwe5" expected actual
+        check "cewekcjnwe6" "123" !order
+
+
+    let ShouldInitialzeInGivenOrder5 = 
+        let order = ref ""
+        let actual =
+          { C = let _ = order := !order + "1" in 3
+            A = let _ = order := !order + "2" in 1
+            B = let _ = order := !order + "3" in 2 }
+
+        check "cewekcjnwe7" expected actual
+        check "cewekcjnwe8" "123" !order
+
+
+    let ShouldInitialzeInGivenOrder6 = 
+        let order = ref ""
+        let actual =
+          { C = let _ = order := !order + "1" in 3
+            B = let _ = order := !order + "2" in 2
+            A = let _ = order := !order + "3" in 1 }
+
+        check "cewekcjnwe9" expected actual
+        check "cewekcjnwe10" "123" !order
+
+
+type RecordWithDifferentTypes = 
+    { A : int
+      B : string
+      C : float
+      D : RecordWithInts }
+
+
+module RecordInitialisationWithDifferentTxpes = 
+
+    let expected =  
+        { A = 1
+          B = "2"
+          C = 3.0
+          D = 
+            { A = 4
+              B = 5
+              C = 6 }}
+
+
+    let ShouldInitialzeInGivenOrder1 = 
+        let order = ref ""
+        let actual =
+          { A = let _ = order := !order + "1" in 1
+            B = let _ = order := !order + "2" in "2"
+            C = let _ = order := !order + "3" in 3.0
+            D = let _ = order := !order + "4" in 
+                              { A = let _ = order := !order + "5" in 4
+                                B = let _ = order := !order + "6" in 5
+                                C = let _ = order := !order + "7" in 6 } }
+
+        check "cewekcjnwe11" expected actual
+        check "cewekcjnwe12" "1234567" !order
+
+
+    let ShouldInitialzeInGivenOrder2 = 
+        let order = ref ""
+        let actual =
+          { A = let _ = order := !order + "1" in 1            
+            C = let _ = order := !order + "2" in 3.0
+            D = let _ = order := !order + "3" in 
+                              { A = let _ = order := !order + "4" in 4
+                                B = let _ = order := !order + "5" in 5
+                                C = let _ = order := !order + "6" in 6 }
+                                
+            B = let _ = order := !order + "7" in "2" }
+
+        check "cewekcjnwe13" expected actual
+        check "cewekcjnwe14" "1234567" !order
+
+
+    let ShouldInitialzeInGivenOrder3 = 
+        let order = ref ""
+        let actual =
+          { A = let _ = order := !order + "1" in 1            
+            C = let _ = order := !order + "2" in 3.0
+            B = let _ = order := !order + "3" in "2"
+            D = let _ = order := !order + "4" in 
+                              { A = let _ = order := !order + "5" in 4
+                                B = let _ = order := !order + "6" in 5
+                                C = let _ = order := !order + "7" in 6 } }
+
+        check "cewekcjnwe15" expected actual
+        check "cewekcjnwe16" "1234567" !order
+
+
+
+    let ShouldInitialzeInGivenOrder4 = 
+        let order = ref ""
+        let actual =
+          { B = let _ = order := !order + "1" in "2"
+            A = let _ = order := !order + "2" in 1            
+            C = let _ = order := !order + "3" in 3.0            
+            D = let _ = order := !order + "4" in 
+                              { A = let _ = order := !order + "5" in 4
+                                B = let _ = order := !order + "6" in 5
+                                C = let _ = order := !order + "7" in 6 } }
+
+        check "cewekcjnwe17" expected actual
+        check "cewekcjnwe18" "1234567" !order
+
+
+    let ShouldInitialzeInGivenOrder5 = 
+        let order = ref ""
+        let actual =
+          { D = let _ = order := !order + "1" in 
+                              { A = let _ = order := !order + "2" in 4
+                                B = let _ = order := !order + "3" in 5
+                                C = let _ = order := !order + "4" in 6 } 
+            B = let _ = order := !order + "5" in "2"
+            C = let _ = order := !order + "6" in 3.0
+            A = let _ = order := !order + "7" in 1 }
+
+        check "cewekcjnwe19" expected actual
+        check "cewekcjnwe20" "1234567" !order
+
+
+    let ShouldInitialzeInGivenOrder6 = 
+        let order = ref ""
+        let actual =
+          { D = let _ = order := !order + "1" in 
+                              { A = let _ = order := !order + "2" in 4
+                                B = let _ = order := !order + "3" in 5
+                                C = let _ = order := !order + "4" in 6 } 
+            A = let _ = order := !order + "5" in 1
+            B = let _ = order := !order + "6" in "2"
+            C = let _ = order := !order + "7" in 3.0 }
+
+        check "cewekcjnwe21" expected actual
+        check "cewekcjnwe22" "1234567" !order
+
 let aa =
   if !failures then (stdout.WriteLine "Test Failed"; exit 1) 
   else (stdout.WriteLine "Test Passed"; 
diff --git a/tests/fsharp/core/array/test.fsx b/tests/fsharp/core/array/test.fsx
index 794ce8eaa16..ae2d795284e 100644
--- a/tests/fsharp/core/array/test.fsx
+++ b/tests/fsharp/core/array/test.fsx
@@ -594,14 +594,65 @@ module Array2Tests = begin
     //test "a2_sub"
     //    (Array2D.sub a 1 1 2 2 = b)
 
+
     Array2D.blit b 0 0 a 0 0 2 2
     //test "a2_blit"
     //      (Array2D.sub a 0 0 2 2 = b)
 
   let _ = test_make_get_set_length ()
 
+
 end
 
+#if !Portable
+module ArrayNonZeroBasedTestsSlice = 
+  let runTest () = 
+    let arr = (Array2D.initBased 5 4 3 2 (fun i j -> (i,j)))
+    test "fewoih1" (arr.[6,*] = [|(6, 4); (6, 5)|])
+    test "fewoih2" (arr.[*,*].[1,*] = [|(6, 4); (6, 5)|])
+    test "fewoih3" (arr.[*,5] =  [|(5, 5); (6, 5); (7, 5)|])
+    test "fewoih4" (arr.[*,*].[*,1] =  [|(5, 5); (6, 5); (7, 5)|])
+    test "fewoih5" (arr.GetLowerBound(0) = 5)
+    test "fewoih6" (arr.GetLowerBound(1) = 4)
+    test "fewoih7" (arr.[*,*].GetLowerBound(0) = 0)
+    test "fewoih8" (arr.[*,*].GetLowerBound(1) = 0)
+    test "fewoih9" (arr.[*,*].[0..,1] =  [|(5, 5); (6, 5); (7, 5)|])
+    test "fewoih10" (arr.[*,*].[1..,1] =  [|(6, 5); (7, 5)|])
+    let arr2d = 
+        let arr = Array2D.zeroCreateBased 5 4 3 2 
+        for i in 5..7 do for j in 4..5 do arr.[i,j] <- (i,j)
+        arr
+    let arr2d2 = 
+        let arr = Array2D.zeroCreate 3 2 
+        for i in 0..2 do for j in 0..1 do arr.[i,j] <- (j,i)
+        arr
+    test "fewoih11" (arr2d.[6..6,5] =  [|(6, 5)|])
+    test "fewoih11" (arr2d.[..6,5] =  [|(5, 5); (6, 5)|])
+    test "fewoih11" (arr2d.[6..,5] =  [|(6, 5); (7, 5)|])
+    test "fewoih12" (arr2d.[*,*].[1..,1] =  [|(6, 5); (7, 5)|])
+    arr2d.[*,*] <- arr2d2
+    test "fewoih13" (arr2d.[*,*].[0..0,1] =  [|(1, 0)|])
+    test "fewoih13" (arr2d.[*,*].[1..,1] =  [|(1, 1); (1, 2)|])
+    test "fewoih13" (arr2d.[*,*].[1,1..] =  [|(1, 1)|])
+    test "fewoih13" (arr2d.[*,*].[1,0..0] =  [|(0, 1)|])
+    let arr3d = 
+        let arr = System.Array.CreateInstance(typeof, [| 3;2;1 |], [|5;4;3|]) :?> (int*int*int)[,,]
+        for i in 5..7 do for j in 4..5 do for k in 3..3 do arr.[i,j,k] <- (i,j,k)
+        arr
+    let arr3d2 = 
+        let arr = System.Array.CreateInstance(typeof, [| 3;2;1 |]) :?> (int*int*int)[,,]
+        for i in 0..2 do for j in 0..1 do for k in 0..0 do arr.[i,j,k] <- (k,j,i)
+        arr
+
+    test "fewoih14" (arr3d.[5,4,3] = (5,4,3))
+    test "fewoih15" (arr3d.[*,*,*].[0,0,0] =  (5,4,3))
+    arr3d.[*,*,*] <- arr3d2
+    test "fewoih16" (arr3d.[5,4,3] =  (0,0,0))
+    test "fewoih16" (arr3d.[5,5,3] =  (0,1,0))
+    test "fewoih16" (arr3d.[6,5,3] =  (0,1,1))
+  let _ = runTest()
+#endif
+
 module Array3Tests = begin
 
   let test_make_get_set_length () = 
@@ -715,7 +766,7 @@ module SeqCacheAllTest =
 
 module StringSlicingTest = 
     let s1 = "abcdef"
-    test "slice1923" (s1.[*] = s1)
+    test "slice1922" (s1.[*] = s1)
     test "slice1923" (s1.[0..] = s1)
     test "slice1924" (s1.[1..] = "bcdef")
     test "slice1925" (s1.[2..] = "cdef")
@@ -731,6 +782,7 @@ module StringSlicingTest =
     test "slice1915" (s1.[..5] = "abcdef")
     test "slice1918" (try s1.[..6] |> ignore; false with _ -> true)
     test "slice1919" (try s1.[.. -1] |> ignore; false with _ -> true)
+    test "slice1816" (s1.[1..-1] = "")
     test "slice1817" (s1.[1..0] = "")
     test "slice1811" (s1.[1..1] = "b")
     test "slice1812" (s1.[1..2] = "bc")
@@ -738,16 +790,28 @@ module StringSlicingTest =
     test "slice1814" (s1.[1..4] = "bcde")
     test "slice1815" (s1.[1 ..5] = "bcdef")
     test "slice1818" (try s1.[1..6] |> ignore; false with _ -> true)
+    test "slice1819" (try s1.[-1..1] |> ignore; false with _ -> true)
     test "slice1940" (s1.[0..1] = "ab")
     test "slice1941" (s1.[1..1] = "b")
     test "slice1942" (s1.[2..1] = "")
     test "slice1943" (s1.[3..1] = "")
     test "slice1944" (s1.[4..1] = "")
-
+    test "slice1950" (s1.[-3..-4] = "")
+    test "slice1951" (try s1.[-4..-3] |> ignore; false with _ -> true)
+    
+    let empty = ""
+    test "slice1961" (empty.[*] = "")
+    test "slice1962" (empty.[5..3] = "")
+    test "slice1963" (empty.[0..] = "")
+    test "slice1964" (try empty.[..0] |> ignore; false with _ -> true)
+    test "slice1965" (try empty.[0..0] |> ignore; false with _ -> true)
+    test "slice1966" (try empty.[0..1] |> ignore; false with _ -> true)
+    test "slice1967" (try empty.[3..5] |> ignore; false with _ -> true)
 
 module ArraySlicingTestBytes = 
 
     let s1 = "abcdef"B
+    test "bslice1922" (s1.[*] = s1)
     test "bslice1923" (s1.[0..] = s1)
     test "bslice1924" (s1.[1..] = "bcdef"B)
     test "bslice1925" (s1.[2..] = "cdef"B)
@@ -763,6 +827,7 @@ module ArraySlicingTestBytes =
     test "bslice1915" (s1.[..5] = "abcdef"B)
     test "bslice1918" (try s1.[..6] |> ignore; false with _ -> true)
     test "bslice1919" (try s1.[.. -1] |> ignore; false with _ -> true)
+    test "bslice1816" (s1.[1..-1] = ""B)
     test "bslice1817" (s1.[1..0] = ""B)
     test "bslice1811" (s1.[1..1] = "b"B)
     test "bslice1812" (s1.[1..2] = "bc"B)
@@ -770,17 +835,28 @@ module ArraySlicingTestBytes =
     test "bslice1814" (s1.[1..4] = "bcde"B)
     test "bslice1815" (s1.[1 ..5] = "bcdef"B)
     test "bslice1818" (try s1.[1..6] |> ignore; false with _ -> true)
+    test "bslice1819" (try s1.[-1..1] |> ignore; false with _ -> true)
     test "bslice1940" (s1.[0..1] = "ab"B)
     test "bslice1941" (s1.[1..1] = "b"B)
     test "bslice1942" (s1.[2..1] = ""B)
     test "bslice1943" (s1.[3..1] = ""B)
     test "bslice1944" (s1.[4..1] = ""B)
-
-
+    test "bslice1950" (s1.[-3..-4] = ""B)
+    test "bslice1951" (try s1.[-4..-3] |> ignore; false with _ -> true)
+
+    let empty = ""B
+    test "bslice1961" (empty.[*] = ""B)
+    test "bslice1962" (empty.[5..3] = ""B)
+    test "bslice1963" (empty.[0..] = ""B)
+    test "bslice1964" (try empty.[..0] |> ignore; false with _ -> true)
+    test "bslice1965" (try empty.[0..0] |> ignore; false with _ -> true)
+    test "bslice1966" (try empty.[0..1] |> ignore; false with _ -> true)
+    test "bslice1967" (try empty.[3..5] |> ignore; false with _ -> true)
 
 module ArraySlicingTestInts = 
 
     let s1 = [| 1;2;3;4;5;6 |]
+    test "aslice1922" (s1.[*] = s1)
     test "aslice1923" (s1.[0..] = s1)
     test "aslice1924" (s1.[1..] = [| 2;3;4;5;6 |])
     test "aslice1925" (s1.[2..] = [| 3;4;5;6 |])
@@ -796,6 +872,7 @@ module ArraySlicingTestInts =
     test "aslice1915" (s1.[..5] = [| 1;2;3;4;5;6 |])
     test "aslice1918" (try s1.[..6] |> ignore; false with _ -> true)
     test "aslice1919" (try s1.[.. -1] |> ignore; false with _ -> true)
+    test "aslice1816" (s1.[1..-1] = [| |])
     test "aslice1817" (s1.[1..0] = [|  |])
     test "aslice1811" (s1.[1..1] = [| 2 |])
     test "aslice1812" (s1.[1..2] = [| 2;3 |])
@@ -803,11 +880,23 @@ module ArraySlicingTestInts =
     test "aslice1814" (s1.[1..4] = [| 2;3;4;5|])
     test "aslice1815" (s1.[1 ..5] = [| 2;3;4;5;6|])
     test "aslice1818" (try s1.[1..6] |> ignore; false with _ -> true)
+    test "aslice1819" (try s1.[-1..1] |> ignore; false with _ -> true)
     test "aslice1940" (s1.[0..1] = [| 1;2|])
     test "aslice1941" (s1.[1..1] = [| 2 |])
     test "aslice1942" (s1.[2..1] = [| |])
     test "aslice1943" (s1.[3..1] = [| |])
     test "aslice1944" (s1.[4..1] = [| |])
+    test "aslice1950" (s1.[-3..-4] = [| |])
+    test "aslice1951" (try s1.[-4..-3] |> ignore; false with _ -> true)
+
+    let empty : int array = [| |]
+    test "aslice1961" (empty.[*] = [| |])
+    test "aslice1962" (empty.[5..3] = [| |])
+    test "aslice1963" (empty.[0..] = [| |])
+    test "aslice1964" (try empty.[..0] |> ignore; false with _ -> true)
+    test "aslice1965" (try empty.[0..0] |> ignore; false with _ -> true)
+    test "aslice1966" (try empty.[0..1] |> ignore; false with _ -> true)
+    test "aslice1967" (try empty.[3..5] |> ignore; false with _ -> true)
 
 
 module Array2DSlicingTests = 
@@ -1330,6 +1419,37 @@ module bug872632 =
 
     do check "bug872632" Foo.x.Length 8
 
+module CheckUnionTypesAreSealed =
+    open System
+#if NetCore
+    open System.Reflection
+    type System.Type with
+        member this.IsSealed
+            with get () = this.GetTypeInfo().IsSealed
+#endif
+
+    do check "vwllfewlkefw1" (typedefof>.IsSealed) true
+    do check "vwllfewlkefw2" (typedefof>.IsSealed) true
+    type X1 = A | B
+    do check "vwllfewlkefw3" (typedefof.IsSealed) true
+    type X2 = A | B of string
+    do check "vwllfewlkefw4" (typedefof.IsSealed) false
+    type X3 = A | B | C
+    do check "vwllfewlkefw5" (typedefof.IsSealed) true
+    type X4 = A | B | C | D | E | F | G | H | I
+    do check "vwllfewlkefw5" (typedefof.IsSealed) true
+
+    []
+    type SetTree<'T> = 
+        | SetEmpty                                          
+        | SetNode of 'T * SetTree<'T> *  SetTree<'T> 
+    do check "vwllfewlkefw6" (typedefof>.IsSealed) true
+
+    type SetTree2<'T> = 
+        | SetEmpty                                          
+        | SetNode of 'T * SetTree2<'T> *  SetTree2<'T> 
+    do check "vwllfewlkefw6" (typedefof>.IsSealed) false
+
 module manyIndexes =
     open System
     
diff --git a/tests/fsharp/core/attributes/test.fsx b/tests/fsharp/core/attributes/test.fsx
index 655e51cd2e3..e8590730e97 100644
--- a/tests/fsharp/core/attributes/test.fsx
+++ b/tests/fsharp/core/attributes/test.fsx
@@ -1299,6 +1299,28 @@ module AttributeTestsOnExtensionProperties =
     check "vwlnwer-0wreknj4" (test3()) "Equals: [||], GetHashCode: [||], GetType: [||], Object.get_ExtensionMethod: [|Inline|], Object.get_Item: [|Inline|], Object.set_Item: [|Inline|], ToString: [||]"
 
 
+module ParamArrayNullAttribute = 
+    open System
+
+    type Attr([] pms: obj[]) =
+      inherit Attribute()
+      override x.ToString() = sprintf "Attr(%A)" pms
+
+    []
+    let f () = ()
+
+    let test3() = 
+        match <@ f() @> with
+        | Quotations.Patterns.Call(_, m, _) ->
+            m.GetCustomAttributes(typeof, false)
+            |> Seq.map (fun x -> x.ToString())
+            |> String.concat ", "
+        | _ -> failwith "unreachable 3"
+
+    check "vwcewecioj9" (test3()) "Attr()"
+ 
+
+
 (*-------------------------------------------------------------------------
 !* Test passed?
  *------------------------------------------------------------------------- *)
diff --git a/tests/fsharp/core/comprehensions/test-hw.fsx b/tests/fsharp/core/comprehensions/test-hw.fsx
index fea86aee592..138639d91b9 100644
--- a/tests/fsharp/core/comprehensions/test-hw.fsx
+++ b/tests/fsharp/core/comprehensions/test-hw.fsx
@@ -7,9 +7,9 @@ open System.Text.RegularExpressions
 open System.IO
 open System.Xml
 
-let failures = ref false
+let mutable failures = false
 let report_failure () = 
-  stderr.WriteLine " NO"; failures := true
+  stderr.WriteLine " NO"; failures <- true
 let test s b = stderr.Write(s:string);  if b then stderr.WriteLine " OK" else report_failure() 
 
 
@@ -92,10 +92,10 @@ let test3198b =
 
 let test3198x = 
     let mutable count = 0 in 
-    let ie = ref {1 .. 3} 
+    let mutable ie = {1 .. 3} 
     
-    for i in !ie do 
-        ie := {1 .. 2}
+    for i in ie do 
+        ie <- {1 .. 2}
         count <- count + 1;
         printf "i = %d\n" i 
     done;
@@ -502,7 +502,7 @@ let rec allFiles dir =
           for subdir in Directory.GetDirectories dir do yield! (allFiles subdir) }
 
 let _ = 
-  if !failures then (stdout.WriteLine "Test Failed"; exit 1) 
+  if failures then (stdout.WriteLine "Test Failed"; exit 1) 
   else (stdout.WriteLine "Test Passed"; 
         System.IO.File.WriteAllText("test.ok","ok"); 
         exit 0)
@@ -533,10 +533,10 @@ module Attempt =
 module RandomWalk = 
     let rnd = new System.Random() 
     let dice p = (rnd.NextDouble() < p )
-    let walk initial upP = [| let state = ref initial 
+    let walk initial upP = [| let mutable state = initial 
                               for i in 0 .. 100 do
-                                 do if dice upP then incr state else decr state
-                                 yield float !state |]
+                                 do if dice upP then state <- (state + 1) else (state <- state - 1)
+                                 yield float state |]
 
 
 module StringExtensionTest = 
@@ -1026,9 +1026,9 @@ module TryFinallySequenceExpressionTests =
        use never3 = new RunNeverPoint("3zlknnew55")
        try 
             seq { point1.Run()
-                  let x = ref 0
-                  while !x = 0 do
-                      incr x 
+                  let mutable x = 0
+                  while x = 0 do
+                      x <- x + 1 
                       try 
                           try 
                               point2.Run()
diff --git a/tests/fsharp/core/control/test.fsx b/tests/fsharp/core/control/test.fsx
index 2386fcbd742..ff976ff3981 100644
--- a/tests/fsharp/core/control/test.fsx
+++ b/tests/fsharp/core/control/test.fsx
@@ -144,42 +144,42 @@ module BasicTests =
                     })) 
         2
 
-    check "32o8f43kt" (let x = ref 0 
+    check "32o8f43kt" (let mutable x = 0 
                        Async.RunSynchronously 
                            (async {  try 
                                         return ()
                                      finally 
-                                        x := 10
+                                        x <- 10
                                   });
-                       !x) 10
+                       x) 10
 
-    check "32o8f43kt" (let x = ref 0 
+    check "32o8f43kt" (let mutable x = 0 
                        (try 
                            Async.RunSynchronously 
                                (async {  try 
                                             do failwith ""
                                          finally 
-                                            x := 10
+                                            x <- 10
                                       })
                         with Failure _ -> ());
-                       !x) 10
+                       x) 10
 
 
-    check "32o8f43kt" (let x = ref 0 
+    check "32o8f43kt" (let mutable x = 0 
                        (try 
                            Async.RunSynchronously 
                                (async {  try 
                                            try 
                                               do failwith ""
                                            finally 
-                                              x := !x + 1
+                                              x <- x + 1
                                          finally 
-                                            x := !x + 1
+                                            x <- x + 1
                                       })
                         with Failure _ -> ());
-                       !x) 2
+                       x) 2
 
-    check "32o8f43kt" (let x = ref 0 
+    check "32o8f43kt" (let mutable x = 0 
                        (try 
                            Async.RunSynchronously 
                                (async {  try 
@@ -187,12 +187,12 @@ module BasicTests =
                                               return ()
                                            finally 
                                               do failwith ""
-                                              x := !x + 1
+                                              x <- x + 1
                                          finally 
-                                            x := !x + 1
+                                            x <- x + 1
                                       })
                         with Failure _ -> ());
-                       !x) 1
+                       x) 1
 
     check "32o8f43ky" (try Async.RunSynchronously
                              (async {  try 
@@ -319,10 +319,10 @@ module StartChildTrampoliningCheck =
                                 return 27 
                             })
                 let! result = a
-                let x = ref result
+                let mutable x = result
                 for i in 1..biggerThanTrampoliningLimit do
-                    x := !x + 1
-                return !x
+                    x <- x + 1
+                return x
             }
     check "ft6we56sgfw"
         (a |> Async.RunSynchronously)
@@ -360,18 +360,18 @@ module StartChildOutsideOfAsync =
    
 
 check "32o8f43kaI: Spawn" 
-    (let result = ref 0
+    (let mutable result = 0
      Async.Start(async { do printfn "hello 1"
                          do! Async.Sleep(30) 
-                         do result := 1 });
-     while !result = 0 do 
+                         do result <- 1 });
+     while result = 0 do 
          printf "."
 #if NetCore
          Task.Delay(10).Wait()
 #else
          System.Threading.Thread.Sleep(10)
 #endif
-     !result) 1
+     result) 1
 
 
 module FromBeginEndTests = 
@@ -388,20 +388,20 @@ module FromBeginEndTests =
                      name
                      (try 
                          Async.RunSynchronously 
-                             (async { let completed = ref completeSynchronously
-                                      let result = ref 0
+                             (async { let mutable completed = completeSynchronously
+                                      let mutable result = 0
                                       let ev = new System.Threading.ManualResetEvent(completeSynchronously)
                                       let iar = 
                                           { new System.IAsyncResult with
-                                                member x.IsCompleted = !completed
+                                                member x.IsCompleted = completed
                                                 member x.CompletedSynchronously = completeSynchronously
                                                 member x.AsyncWaitHandle = ev :> System.Threading.WaitHandle
                                                 member x.AsyncState = null }
                                       let savedCallback = ref (None : System.AsyncCallback option)
                                       let complete(r) = 
-                                          result := r
+                                          result <- r
                                           if completeSynchronously then 
-                                              completed := true 
+                                              completed <- true 
                                               if (!savedCallback).IsNone then failwith "expected a callback (loc cwowen903)"
                                               (!savedCallback).Value.Invoke iar
                                           else 
@@ -412,7 +412,7 @@ module FromBeginEndTests =
                                               System.Threading.ThreadPool.QueueUserWorkItem(fun _ -> 
                                                    System.Threading.Thread.Sleep sleep
 #endif
-                                                   completed := true 
+                                                   completed <- true 
                                                    ev.Set() |> ignore
                                                    if (!savedCallback).IsNone then failwith "expected a callback (loc cwowen903)"
                                                    (!savedCallback).Value.Invoke iar) |> ignore
@@ -432,7 +432,7 @@ module FromBeginEndTests =
                                           savedCallback := Some callback
                                           complete(expectedResult+x1+x2+x3)
                                           iar
-                                      let endAction(iar:System.IAsyncResult) = !result
+                                      let endAction(iar:System.IAsyncResult) = result
                                       let cancelAction = 
                                           if useCancelAction then 
                                               Some(fun () ->  complete(expectedResult))
@@ -490,7 +490,7 @@ module AwaitEventTests =
                      (try 
                          Async.RunSynchronously 
                              (async { let ev = new Event<_>()
-                                      let over = ref false
+                                      let mutable over = false
                                       let complete(r) = 
                                           if completeSynchronously then 
                                               ev.Trigger(r)
@@ -516,7 +516,7 @@ module AwaitEventTests =
                                            |> Async.StartChild
                                       let! res = Async.AwaitEvent(ev.Publish)
                                       for i in 1..biggerThanTrampoliningLimit do ()
-                                      over := true 
+                                      over <- true 
                                       return res })
                       with e -> 
                          printfn "ERROR: %A" e
@@ -686,22 +686,22 @@ module AsBeginEndTests =
         check
            (sprintf "cvew0-9rn8")
            (let req = AsyncRequest( async { return 2087 } ) 
-            let called = ref 0
-            let iar = req.BeginAsync(System.AsyncCallback(fun _ -> called := 10),null)
+            let mutable called = 0
+            let iar = req.BeginAsync(System.AsyncCallback(fun _ -> called <- 10),null)
             iar.AsyncWaitHandle.WaitOne(100,true) |> ignore
             let v = req.EndAsync(iar)
-            v + !called)
+            v + called)
            2097
 
         check
            (sprintf "cvew0-9rn9")
            (let req = AsyncRequest( async { return 2087 } ) 
-            let called = ref 0
-            let iar = req.BeginAsync(System.AsyncCallback(fun iar -> called := req.EndAsync(iar)),null)
+            let mutable called = 0
+            let iar = req.BeginAsync(System.AsyncCallback(fun iar -> called <- req.EndAsync(iar)),null)
             while not iar.IsCompleted do
                  iar.AsyncWaitHandle.WaitOne(100,true) |> ignore
             
-            !called)
+            called)
            2087
 
 
@@ -772,13 +772,13 @@ check "32o8f43ka2: Cancel a For loop"
 
 module OnCancelTests = 
     check "32o8f43ka1: No cancellation" 
-        (let count = ref 0
-         let res = ref 0
+        (let mutable count = 0
+         let mutable res = 0
          let asyncGroup = new System.Threading.CancellationTokenSource ()
-         Async.Start(async { use! holder = Async.OnCancel (fun msg -> printfn "got cancellation...."; incr res) 
-                             do incr count
+         Async.Start(async { use! holder = Async.OnCancel (fun msg -> printfn "got cancellation...."; res <- (res + 1)) 
+                             do count <- (count + 1)
                              return () }, asyncGroup.Token);
-         while !count = 0 do 
+         while count = 0 do 
              do printfn "waiting to enter cancellation section"
 #if NetCore
              Task.Delay(10).Wait()
@@ -786,7 +786,7 @@ module OnCancelTests =
              System.Threading.Thread.Sleep(10)
 #endif
         
-         !res) 0
+         res) 0
 
 
 #if Portable
@@ -915,26 +915,26 @@ module SyncContextReturnTests =
                     // THIS IS ONE CHECK
                     checkOn name fakeCtxt
                     
-                    let completed = ref completeSynchronously
-                    let result = ref 0
+                    let mutable completed = completeSynchronously
+                    let mutable result = 0
                     let ev = new System.Threading.ManualResetEvent(completeSynchronously)
                     let iar = 
                         { new System.IAsyncResult with
-                              member x.IsCompleted = !completed
+                              member x.IsCompleted = completed
                               member x.CompletedSynchronously = completeSynchronously
                               member x.AsyncWaitHandle = ev :> System.Threading.WaitHandle
                               member x.AsyncState = null }
                     let savedCallback = ref (None : System.AsyncCallback option)
                     let complete(r) = 
-                        result := r
+                        result <- r
                         if completeSynchronously then 
-                            completed := true 
+                            completed <- true 
                             if (!savedCallback).IsNone then failwith "expected a callback (loc cwowen903)"
                             (!savedCallback).Value.Invoke iar
                         else 
                             System.Threading.ThreadPool.QueueUserWorkItem(fun _ -> 
                                  System.Threading.Thread.Sleep sleep
-                                 completed := true 
+                                 completed <- true 
                                  ev.Set() |> ignore
                                  if (!savedCallback).IsNone then failwith "expected a callback (loc cwowen903)"
                                  (!savedCallback).Value.Invoke iar) |> ignore
@@ -954,7 +954,7 @@ module SyncContextReturnTests =
                         savedCallback := Some callback
                         complete(expectedResult+x1+x2+x3)
                         iar
-                    let endAction(iar:System.IAsyncResult) = !result
+                    let endAction(iar:System.IAsyncResult) = result
                     let cancelAction = 
                         if useCancelAction then 
                             Some(fun () ->  complete(expectedResult))
@@ -2003,7 +2003,49 @@ module ExceptionInAsyncParallelOrHowToInvokeContinuationTwice =
 
     check "ExceptionInAsyncParallelOrHowToInvokeContinuationTwice" (Seq.init 30 (ignore >> test) |> Seq.forall id) true
     
+#if FX_NO_EXCEPTIONDISPATCHINFO
+#else
+
+// [Asyncs] Better stack traces for Async
+module BetterStacksTest1 = 
+
+    let FunctionRaisingException() = 
+       async { do failwith "" }
+
+    let f2() = 
+       async { for i in 0 .. 10 do 
+                 do! FunctionRaisingException() }
+
+
+    let v = 
+        try 
+            f2() |> Async.StartImmediate 
+            ""
+        with e -> e.StackTrace
+
+    //printfn "STACK 1\n------------------------------------\n%s\n----------------------------------" v
+
+    test "BetterStacks1" (v.Contains("FunctionRaisingException"))
 
+module BetterStacksTest2 = 
+
+    let FunctionRaisingException() = 
+       async { do failwith "" }
+
+    let f2() = 
+       Async.FromContinuations(fun (cont, econt, ccont) -> Async.StartWithContinuations(FunctionRaisingException(), cont, econt, ccont))
+
+    let v = 
+        try 
+            f2() |> Async.StartImmediate 
+            ""
+        with e -> e.StackTrace
+
+    //printfn "STACK #2\n------------------------------------\n%s\n----------------------------------" v
+
+    test "BetterStacks2" (v.Contains("FunctionRaisingException"))
+
+#endif
 
 // [Asyncs] Cancellation inside Async.AwaitWaitHandle may release source WaitHandle
 module Bug391710 =
diff --git a/tests/fsharp/core/controlWebExt/test.fsx b/tests/fsharp/core/controlWebExt/test.fsx
index d23f910ac8f..f12450314ac 100644
--- a/tests/fsharp/core/controlWebExt/test.fsx
+++ b/tests/fsharp/core/controlWebExt/test.fsx
@@ -111,7 +111,7 @@ module WebClientTests =
     //and one bad URL, so we know we work under both conditions. The aim of the tests is to get coverage 
     //for cancellation logic paths � we count the number of request routines that have successfully entered 
     //a try/finally that increments/decrements a counter. We check that the counter is zero at the end.  
-    let repeatedFetchAndCancelTest() = 
+    let repeatedFetchStringAndCancelTest() = 
         printfn "starting requests and cancellation routines..." 
         let active = ref 0
         for i = 0 to 100 do 
@@ -143,9 +143,91 @@ module WebClientTests =
             System.Threading.Thread.Sleep(!wait * 3)
 
         printfn "final: active = %d" !active
-        check "WebClient cancellation test final result" !active 0
+        check "WebClient.AsyncDownloadString cancellation test final result" !active 0
 
-    repeatedFetchAndCancelTest()
+    //This test starts ~600 web requests plus routines to cancel them. The tests are robust 
+    //to whether there is a web connection or not � we  just catch all exceptions, and use one good URL 
+    //and one bad URL, so we know we work under both conditions. The aim of the tests is to get coverage 
+    //for cancellation logic paths � we count the number of request routines that have successfully entered 
+    //a try/finally that increments/decrements a counter. We check that the counter is zero at the end.  
+    let repeatedFetchDataAndCancelTest() = 
+        printfn "starting requests and cancellation routines..." 
+        let active = ref 0
+        for i = 0 to 100 do 
+          for sleep in [0;2;10] do 
+           for url in ["http://www.live.com"; "http://www.badnonexistenturl-da-da-da-da-da.com"] do 
+             let cts = new CancellationTokenSource()
+             let result = ref 0
+             
+             Async.Start (async { let incremented = ref false
+                               try 
+                                 try 
+                                   lock active (fun () -> incr active; incremented := true)
+                                   let c = new System.Net.WebClient()
+                                   let! p1 = c.AsyncDownloadData(System.Uri(url))
+                                   let! p2 = c.AsyncDownloadData(System.Uri(url))
+                                   result := p1.Length + p2.Length
+                                 finally
+                                   lock active (fun () -> if !incremented then decr active) 
+                               with _ -> 
+                                   return ()}, cancellationToken=cts.Token)
+
+             System.Threading.Thread.Sleep(sleep)
+             Async.Start ( async {  do! Async.Sleep(100)
+                                    cts.Cancel() })
+        let wait = ref 0 
+        while !active <> 0 && !wait < 500 do
+            incr wait
+            printfn "final: active = %d, waiting %d" !active (!wait * 3)
+            System.Threading.Thread.Sleep(!wait * 3)
+
+        printfn "final: active = %d" !active
+        check "WebClient.AsyncDownloadData cancellation test final result" !active 0
+
+    //This test starts ~600 web requests plus routines to cancel them. The tests are robust 
+    //to whether there is a web connection or not � we  just catch all exceptions, and use one good URL 
+    //and one bad URL, so we know we work under both conditions. The aim of the tests is to get coverage 
+    //for cancellation logic paths � we count the number of request routines that have successfully entered 
+    //a try/finally that increments/decrements a counter. We check that the counter is zero at the end.  
+    let repeatedFetchFileAndCancelTest() = 
+        printfn "starting requests and cancellation routines..." 
+        let active = ref 0
+        for i = 0 to 100 do 
+          for sleep in [0;2;10] do 
+           for url in ["http://www.live.com"; "http://www.badnonexistenturl-da-da-da-da-da.com"] do 
+             let cts = new CancellationTokenSource()
+
+             Async.Start (async { let incremented = ref false
+                               try
+                                 let p1 = sprintf "%i_%i_p1.data" i sleep
+                                 let p2 = sprintf "%i_%i_p2.data" i sleep
+                                 try 
+                                   lock active (fun () -> incr active; incremented := true)
+                                   let c = new System.Net.WebClient()
+                                   do! c.AsyncDownloadFile(System.Uri(url), p1)
+                                   do! c.AsyncDownloadFile(System.Uri(url), p2)
+                                 finally
+                                   lock active (fun () -> if !incremented then decr active)
+                                   System.IO.File.Delete(p1)
+                                   System.IO.File.Delete(p2)
+                               with _ -> 
+                                   return ()}, cancellationToken=cts.Token)
+
+             System.Threading.Thread.Sleep(sleep)
+             Async.Start ( async {  do! Async.Sleep(100)
+                                    cts.Cancel() })
+        let wait = ref 0 
+        while !active <> 0 && !wait < 500 do
+            incr wait
+            printfn "final: active = %d, waiting %d" !active (!wait * 3)
+            System.Threading.Thread.Sleep(!wait * 3)
+
+        printfn "final: active = %d" !active
+        check "WebClient.AsyncDownloadFile cancellation test final result" !active 0
+
+    repeatedFetchStringAndCancelTest()
+    repeatedFetchDataAndCancelTest()
+    repeatedFetchFileAndCancelTest()
 
 
 let _ = 
diff --git a/tests/fsharp/core/fsfromfsviacs/test.fsx b/tests/fsharp/core/fsfromfsviacs/test.fsx
index 58cc4869668..742b0f284a5 100644
--- a/tests/fsharp/core/fsfromfsviacs/test.fsx
+++ b/tests/fsharp/core/fsfromfsviacs/test.fsx
@@ -1,9 +1,9 @@
 // #Conformance #Interop #Unions 
 open Lib
 
-let failures = ref false
+let mutable failures = false
 let report_failure () = 
-  stderr.WriteLine " NO"; failures := true
+  stderr.WriteLine " NO"; failures <- true
 let test s b = stderr.Write(s:string);  if b then stderr.WriteLine " OK" else report_failure() 
 
 let r1 = Lib2.r1
@@ -48,7 +48,7 @@ let _ = test "fejio2dw" (Lib2.rr1 = ref r1)
 *)
 
 let _ = 
-  if !failures then (stdout.WriteLine "Test Failed"; exit 1) 
+  if failures then (stdout.WriteLine "Test Failed"; exit 1) 
   else (stdout.WriteLine "Test Passed"; 
         System.IO.File.WriteAllText("test.ok","ok"); 
         exit 0)
diff --git a/tests/fsharp/core/fsi-reload/a1.fs b/tests/fsharp/core/fsi-reload/a1.fs
new file mode 100644
index 00000000000..a9494f7e451
--- /dev/null
+++ b/tests/fsharp/core/fsi-reload/a1.fs
@@ -0,0 +1,13 @@
+namespace Project
+
+type DU = A | B
+
+// See https://github.com/Microsoft/visualfsharp/issues/237
+namespace Foo
+
+type Name = Name of string
+
+namespace Bar
+
+open Foo
+type Person = Person of Name
diff --git a/tests/fsharp/core/fsi-reload/a2.fs b/tests/fsharp/core/fsi-reload/a2.fs
new file mode 100644
index 00000000000..6294e780555
--- /dev/null
+++ b/tests/fsharp/core/fsi-reload/a2.fs
@@ -0,0 +1,3 @@
+namespace Project
+
+type B = { Prop : DU }
diff --git a/tests/fsharp/core/fsi-reload/b1.fs b/tests/fsharp/core/fsi-reload/b1.fs
new file mode 100644
index 00000000000..205beca0856
--- /dev/null
+++ b/tests/fsharp/core/fsi-reload/b1.fs
@@ -0,0 +1,3 @@
+namespace Project
+
+type DU = A | B
diff --git a/tests/fsharp/core/fsi-reload/b2.fs b/tests/fsharp/core/fsi-reload/b2.fs
new file mode 100644
index 00000000000..1b56aa8216f
--- /dev/null
+++ b/tests/fsharp/core/fsi-reload/b2.fs
@@ -0,0 +1,13 @@
+namespace Project
+
+type B = { Prop : DU }
+
+// See https://github.com/Microsoft/visualfsharp/issues/237
+namespace Foo2
+
+type Name = Name of string
+
+namespace Bar2
+
+open Foo2
+type Person = Person of Name
diff --git a/tests/fsharp/core/fsi-reload/b2.fsi b/tests/fsharp/core/fsi-reload/b2.fsi
new file mode 100644
index 00000000000..1b56aa8216f
--- /dev/null
+++ b/tests/fsharp/core/fsi-reload/b2.fsi
@@ -0,0 +1,13 @@
+namespace Project
+
+type B = { Prop : DU }
+
+// See https://github.com/Microsoft/visualfsharp/issues/237
+namespace Foo2
+
+type Name = Name of string
+
+namespace Bar2
+
+open Foo2
+type Person = Person of Name
diff --git a/tests/fsharp/core/fsi-reload/load1.fsx b/tests/fsharp/core/fsi-reload/load1.fsx
new file mode 100644
index 00000000000..0f7fba67329
--- /dev/null
+++ b/tests/fsharp/core/fsi-reload/load1.fsx
@@ -0,0 +1,5 @@
+// Test the case where a2.fs is in the same namespace as a1.fs, and so the namespace is implicitly opened
+#load "a1.fs"
+#load "a2.fs"
+
+let os = System.IO.File.CreateText "test.ok" in os.Close() 
diff --git a/tests/fsharp/core/fsi-reload/load2.fsx b/tests/fsharp/core/fsi-reload/load2.fsx
new file mode 100644
index 00000000000..a30cad3826f
--- /dev/null
+++ b/tests/fsharp/core/fsi-reload/load2.fsx
@@ -0,0 +1,5 @@
+// Test the case where b2.fsi/fs is in the same namespace as b1.fs, and so the namespace is implicitly opened
+#load "b1.fs"
+#load "b2.fsi" "b2.fs" 
+
+let os = System.IO.File.CreateText "test.ok" in os.Close() 
diff --git a/tests/fsharp/core/fsi-reload/run.bat b/tests/fsharp/core/fsi-reload/run.bat
index 85ac27f6924..52d0c122b9a 100644
--- a/tests/fsharp/core/fsi-reload/run.bat
+++ b/tests/fsharp/core/fsi-reload/run.bat
@@ -9,6 +9,23 @@ call %~d0%~p0..\..\..\config.bat
   "%FSI%" %fsi_flags%  --maxerrors:1 < test1.ml
   if NOT EXIST test.ok goto SetError
 
+  if exist test.ok (del /f /q test.ok)
+  "%FSI%" %fsi_flags%  --maxerrors:1 load1.fsx
+  if NOT EXIST test.ok goto SetError
+
+  if exist test.ok (del /f /q test.ok)
+  "%FSI%" %fsi_flags%  --maxerrors:1 load2.fsx
+  if NOT EXIST test.ok goto SetError
+
+  REM Check we can also compile, for sanity's sake
+  "%FSC%" load1.fsx
+  @if ERRORLEVEL 1 goto Error
+
+  REM Check we can also compile, for sanity's sake
+  "%FSC%" load2.fsx
+  @if ERRORLEVEL 1 goto Error
+
+
 :Ok
 echo Ran fsharp %~f0 ok.
 endlocal
diff --git a/tests/fsharp/core/fsiAndModifiers/test.fsx b/tests/fsharp/core/fsiAndModifiers/test.fsx
index a00999593ed..e68a32f703a 100644
--- a/tests/fsharp/core/fsiAndModifiers/test.fsx
+++ b/tests/fsharp/core/fsiAndModifiers/test.fsx
@@ -1,4 +1,100 @@
 #r "TestLibrary.dll"
 
-let x = TestType.Get(100)
-if x = 100 then System.IO.File.WriteAllText("test.ok", "")
\ No newline at end of file
+let mutable errors : string list = []
+let fail msg = 
+    printfn "FAILURE: %s" msg
+    errors <- errors @ [msg]
+
+module Test1 = 
+    let x = TestType.Get(100)
+    if x <> 100 then fail "Test 1 failed, expected 100"
+
+
+
+module TestPack1 = 
+    open System.Runtime.InteropServices
+    []
+    type LayoutType =
+        struct
+            val a: int
+        end
+    if (sizeof) <> 4 then fail "TestPack1, expected size 4"
+
+module TestPack2 = 
+    open System.Runtime.InteropServices
+    []
+    type LayoutType =
+        struct
+            val mutable b: byte
+            val mutable a: int
+        end
+    let sz = (sizeof)
+    let mutable n = LayoutType() 
+    let a1 = NativeInterop.NativePtr.toNativeInt &&n.a - NativeInterop.NativePtr.toNativeInt &&n
+    let b1 = NativeInterop.NativePtr.toNativeInt &&n.b - NativeInterop.NativePtr.toNativeInt &&n
+    let got = (sz, a1, b1)
+    printfn "got %A" got
+    let expected = (6, 2n, 0n)
+    if got <> expected then fail (sprintf "TestPack2: got %A, expected %A" got expected)
+
+// From http://bytes.com/topic/c-sharp/answers/654343-what-does-structlayoutattribute-pack-do
+module TestPack3 = 
+    open System.Runtime.InteropServices
+    []
+    type LayoutType =
+        struct
+            val mutable b1: byte
+            val mutable b2: byte
+            val mutable l1: int64
+            val mutable i1: int
+        end
+    let sz = (sizeof)
+    let mutable n = LayoutType() 
+    let b1off = NativeInterop.NativePtr.toNativeInt &&n.b1 - NativeInterop.NativePtr.toNativeInt &&n
+    let b2off = NativeInterop.NativePtr.toNativeInt &&n.b2 - NativeInterop.NativePtr.toNativeInt &&n
+    let l1off = NativeInterop.NativePtr.toNativeInt &&n.l1 - NativeInterop.NativePtr.toNativeInt &&n
+    let i1off = NativeInterop.NativePtr.toNativeInt &&n.i1 - NativeInterop.NativePtr.toNativeInt &&n
+    let got = (sz, b1off, b2off, l1off, i1off)
+    let expected = (128, 0n, 1n, 8n, 16n)
+    printfn "got %A" got
+    if got <> expected then fail (sprintf "TestPack3: got %A, expected %A" got expected)
+
+
+// Test explicit layout
+module TestPack4 = 
+    open System.Runtime.InteropServices
+    []
+    type LayoutType =
+        struct
+            [] 
+            val mutable b1: byte
+            [] 
+            val mutable b2: byte
+            [] 
+            val mutable l1: int64
+            [] 
+            val mutable i1: int
+        end
+    let sz = (sizeof)
+    let mutable n = LayoutType() 
+    let b1off = NativeInterop.NativePtr.toNativeInt &&n.b1 - NativeInterop.NativePtr.toNativeInt &&n
+    let b2off = NativeInterop.NativePtr.toNativeInt &&n.b2 - NativeInterop.NativePtr.toNativeInt &&n
+    let l1off = NativeInterop.NativePtr.toNativeInt &&n.l1 - NativeInterop.NativePtr.toNativeInt &&n
+    let i1off = NativeInterop.NativePtr.toNativeInt &&n.i1 - NativeInterop.NativePtr.toNativeInt &&n
+    let got = (sz, b1off, b2off, l1off, i1off)
+    let expected =  (128, 0n, 4n, 8n, 12n)
+    printfn "got %A" got
+    if got <> expected then fail (sprintf "TestPack4: got %A, expected %A" got expected)
+
+
+if errors.IsEmpty then 
+    System.IO.File.WriteAllText("test.ok", "")
+else 
+    for error in errors do 
+        printfn "ERROR: %s" error
+
+if errors.IsEmpty then System.IO.File.WriteAllText("test.ok", "")
+else 
+    for error in errors do 
+        printfn "ERROR: %s" error
+    
\ No newline at end of file
diff --git a/tests/fsharp/core/innerpoly/test.fsx b/tests/fsharp/core/innerpoly/test.fsx
index d0c220af564..2dcac69dd3b 100644
--- a/tests/fsharp/core/innerpoly/test.fsx
+++ b/tests/fsharp/core/innerpoly/test.fsx
@@ -3,8 +3,8 @@
 module Core_innerpoly
 #endif
 
-let failures = ref false
-let report_failure () = stderr.WriteLine " NO"; failures := true
+let mutable failures = false
+let report_failure () = stderr.WriteLine " NO"; failures <- true
 let test s b = stderr.Write(s:string);  if b then stderr.WriteLine " OK" else report_failure() 
 
 
@@ -178,8 +178,8 @@ do test5365()
 do test5365() 
 
 module TestOptimizationOfTypeFunctionsWithSideEffects = begin
-    let count = ref 0
-    let f<'a> = incr count; !count
+    let mutable count = 0
+    let f<'a> = count <- (count + 1); count
 
 
     do test "eoeo23c1" (f = 1)
@@ -212,31 +212,31 @@ module Bug1126BenjaminTeuber = begin
 end
 
 module FSharp_1_0_Bug1024 = begin
-    let count = ref 1
-    let x<'a> = (count := !count + 1); typeof<'a>
+    let mutable count = 1
+    let x<'a> = (count <- count + 1); typeof<'a>
     
-    do test "vnwo9wu1" (!count = 1)
+    do test "vnwo9wu1" (count = 1)
     let z0<'a> =  x<'a>
-    do test "vnwo9wu1" (!count = 1)
+    do test "vnwo9wu1" (count = 1)
     let z1 =  x
-    do test "vnwo9wu2" (!count = 2)
+    do test "vnwo9wu2" (count = 2)
     let z2 =  x
-    do test "vnwo9wu3" (!count = 3)
+    do test "vnwo9wu3" (count = 3)
 
 end
 module FSharp_1_0_Bug1024B = begin
-    let count = ref 1
-    let r<'a> = (count := !count + 1); ref ([] : 'a list)
-    do test "vnwo9wu1" (!count = 1)
+    let mutable count = 1
+    let r<'a> = (count <- count + 1); ref ([] : 'a list)
+    do test "vnwo9wu1" (count = 1)
     let x1 = r
 
-    do test "vnwo9wu1" (!count = 2)
+    do test "vnwo9wu1" (count = 2)
     let z0 =  x1
-    do test "vnwo9wu1" (!count = 2)
+    do test "vnwo9wu1" (count = 2)
     let (z1,z2) =  (x1,x1)
-    do test "vnwo9wu2" (!count = 2)
+    do test "vnwo9wu2" (count = 2)
     let z3 =  x1
-    do test "vnwo9wu3" (!count = 2)
+    do test "vnwo9wu3" (count = 2)
 
 end
 
@@ -383,7 +383,7 @@ end
 
 #if Portable
 let aa = 
-    if !failures then (stdout.WriteLine "Test Failed"; exit 1) 
+    if failures then (stdout.WriteLine "Test Failed"; exit 1) 
     else (stdout.WriteLine "Test Passed"; exit 0)
 #else
 do (stdout.WriteLine "Test Passed"; 
diff --git a/tests/fsharp/core/int32/test.fsx b/tests/fsharp/core/int32/test.fsx
index a964ca946b4..876aa75f510 100644
--- a/tests/fsharp/core/int32/test.fsx
+++ b/tests/fsharp/core/int32/test.fsx
@@ -35,24 +35,28 @@ do test "testnr6" (try int64 0.0 = 0L with _ -> false)
 do test "testn46" (try int32 0.0 = 0 with _ -> false)
 do test "testqb3" (try int16 0.0 = 0s with _ -> false)
 do test "testn4" (try sbyte 0.0 = 0y with _ -> false)
+do test "testn4" (try int8 0.0 = 0y with _ -> false)
 
 do test "test4b" (try unativeint 0.0 = 0un with _ -> false)
 do test "test75j" (try uint64 0.0 = 0UL with _ -> false)
 do test "test4n6" (try uint32 0.0 = 0u with _ -> false)
 do test "testc24q" (try uint16 0.0 = 0us with _ -> false)
 do test "testv43" (try byte 0.0 = 0uy with _ -> false)
+do test "testv43" (try uint8 0.0 = 0uy with _ -> false)
 
 do test "testv3w" (try unativeint 10.0E100 |> ignore ; true  with _ -> false)
 do test "testv3q" (try uint64 10.0E100 |> ignore ; true  with _ -> false)
 do test "testv3" (try uint32 10.0E100 |> ignore ; true  with _ -> false)
 do test "tesvtv3" (try uint16 10.0E100 |> ignore ; true  with _ -> false)
 do test "testvq34" (try byte 10.0E100 |> ignore; true with _ -> false)
+do test "testvq34" (try uint8 10.0E100 |> ignore; true with _ -> false)
 
 do test "testb4wy" (try nativeint 10.0E100 |> ignore ; true  with _ -> false)
 do test "testb4w" (try int64 10.0E100 |> ignore ; true  with _ -> false)
 do test "testnr" (try int32 10.0E100 |> ignore ; true  with _ -> false)
 do test "testjy" (try int16 10.0E100 |> ignore ; true  with _ -> false)
 do test "testny" (try sbyte 10.0E100 |> ignore; true with _ -> false)
+do test "testny" (try int8 10.0E100 |> ignore; true with _ -> false)
 
 
 do test "test3fwe" (try Checked.(+) 0.0 1.0 = 1.0 with _ -> false)
@@ -75,78 +79,91 @@ do test "test" (try Checked.uint64 0.0 = 0UL with _ -> false)
 do test "test" (try Checked.uint32 0.0 = 0u with _ -> false)
 do test "test" (try Checked.uint16 0.0 = 0us with _ -> false)
 do test "test" (try Checked.byte 0.0 = 0uy with _ -> false)
+do test "test" (try Checked.uint8 0.0 = 0uy with _ -> false)
 
 do test "test" (try Checked.nativeint 0.0f = 0n with _ -> false)
 do test "test" (try Checked.int64 0.0f = 0L with _ -> false)
 do test "test" (try Checked.int32 0.0f = 0 with _ -> false)
 do test "test" (try Checked.int16 0.0f = 0s with _ -> false)
 do test "test" (try Checked.sbyte 0.0f = 0y with _ -> false)
+do test "test" (try Checked.int8 0.0f = 0y with _ -> false)
 
 do test "test" (try Checked.unativeint 0.0f = 0un with _ -> false)
 do test "test" (try Checked.uint64 0.0f = 0UL with _ -> false)
 do test "test" (try Checked.uint32 0.0f = 0u with _ -> false)
 do test "test" (try Checked.uint16 0.0f = 0us with _ -> false)
 do test "test" (try Checked.byte 0.0f = 0uy with _ -> false)
+do test "test" (try Checked.uint8 0.0f = 0uy with _ -> false)
 
 do test "test" (try Checked.nativeint 0L = 0n with _ -> false)
 do test "test" (try Checked.int64 0L = 0L with _ -> false)
 do test "test" (try Checked.int32 0L = 0 with _ -> false)
 do test "test" (try Checked.int16 0L = 0s with _ -> false)
 do test "test" (try Checked.sbyte 0L = 0y with _ -> false)
+do test "test" (try Checked.int8 0L = 0y with _ -> false)
 
 do test "test" (try Checked.unativeint 0L = 0un with _ -> false)
 do test "test" (try Checked.uint64 0L = 0UL with _ -> false)
 do test "test" (try Checked.uint32 0L = 0u with _ -> false)
 do test "test" (try Checked.uint16 0L = 0us with _ -> false)
 do test "test" (try Checked.byte 0L = 0uy with _ -> false)
+do test "test" (try Checked.uint8 0L = 0uy with _ -> false)
 
 do test "test" (try Checked.nativeint 0UL = 0n with _ -> false)
 do test "test" (try Checked.int64 0UL = 0L with _ -> false)
 do test "test" (try Checked.int32 0UL = 0 with _ -> false)
 do test "test" (try Checked.int16 0UL = 0s with _ -> false)
 do test "test" (try Checked.sbyte 0UL = 0y with _ -> false)
+do test "test" (try Checked.int8 0UL = 0y with _ -> false)
 
 do test "test" (try Checked.unativeint 0UL = 0un with _ -> false)
 do test "test" (try Checked.uint64 0UL = 0UL with _ -> false)
 do test "test" (try Checked.uint32 0UL = 0u with _ -> false)
 do test "test" (try Checked.uint16 0UL = 0us with _ -> false)
 do test "test" (try Checked.byte 0UL = 0uy with _ -> false)
+do test "test" (try Checked.uint8 0UL = 0uy with _ -> false)
 
 do test "test" (try Checked.nativeint 0 = 0n with _ -> false)
 do test "test" (try Checked.int64 0 = 0L with _ -> false)
 do test "test" (try Checked.int32 0 = 0 with _ -> false)
 do test "test" (try Checked.int16 0 = 0s with _ -> false)
 do test "test" (try Checked.sbyte 0 = 0y with _ -> false)
+do test "test" (try Checked.int8 0 = 0y with _ -> false)
 
 do test "test" (try Checked.unativeint 0 = 0un with _ -> false)
 do test "test" (try Checked.uint64 0 = 0UL with _ -> false)
 do test "test" (try Checked.uint32 0 = 0u with _ -> false)
 do test "test" (try Checked.uint16 0 = 0us with _ -> false)
 do test "test" (try Checked.byte 0 = 0uy with _ -> false)
+do test "test" (try Checked.uint8 0 = 0uy with _ -> false)
 
 do test "test" (try Checked.nativeint 0u = 0n with _ -> false)
 do test "test" (try Checked.int64 0u = 0L with _ -> false)
 do test "test" (try Checked.int32 0u = 0 with _ -> false)
 do test "test" (try Checked.int16 0u = 0s with _ -> false)
 do test "test" (try Checked.sbyte 0u = 0y with _ -> false)
+do test "test" (try Checked.int8 0u = 0y with _ -> false)
 
 do test "test" (try Checked.unativeint 0u = 0un with _ -> false)
 do test "test" (try Checked.uint64 0u = 0UL with _ -> false)
 do test "test" (try Checked.uint32 0u = 0u with _ -> false)
 do test "test" (try Checked.uint16 0u = 0us with _ -> false)
 do test "test" (try Checked.byte 0u = 0uy with _ -> false)
+do test "test" (try Checked.uint8 0u = 0uy with _ -> false)
 
 do test "test" (try Checked.nativeint 0s = 0n with _ -> false)
 do test "test" (try Checked.int64 0s = 0L with _ -> false)
 do test "test" (try Checked.int32 0s = 0 with _ -> false)
 do test "test" (try Checked.int16 0s = 0s with _ -> false)
 do test "test" (try Checked.sbyte 0s = 0y with _ -> false)
+do test "test" (try Checked.int8 0s = 0y with _ -> false)
 
 do test "test" (try Checked.unativeint 0s = 0un with _ -> false)
 do test "test" (try Checked.uint64 0s = 0UL with _ -> false)
 do test "test" (try Checked.uint32 0s = 0u with _ -> false)
 do test "test" (try Checked.uint16 0s = 0us with _ -> false)
 do test "test" (try Checked.byte 0s = 0uy with _ -> false)
+do test "test" (try Checked.uint8 0s = 0uy with _ -> false)
 
 
 
@@ -155,36 +172,42 @@ do test "test" (try Checked.int64 0us = 0L with _ -> false)
 do test "test" (try Checked.int32 0us = 0 with _ -> false)
 do test "test" (try Checked.int16 0us = 0s with _ -> false)
 do test "test" (try Checked.sbyte 0us = 0y with _ -> false)
+do test "test" (try Checked.int8 0us = 0y with _ -> false)
 
 do test "test" (try Checked.unativeint 0us = 0un with _ -> false)
 do test "test" (try Checked.uint64 0us = 0UL with _ -> false)
 do test "test" (try Checked.uint32 0us = 0u with _ -> false)
 do test "test" (try Checked.uint16 0us = 0us with _ -> false)
 do test "test" (try Checked.byte 0us = 0uy with _ -> false)
+do test "test" (try Checked.uint8 0us = 0uy with _ -> false)
 
 do test "test" (try Checked.nativeint 0uy = 0n with _ -> false)
 do test "test" (try Checked.int64 0uy = 0L with _ -> false)
 do test "test" (try Checked.int32 0uy = 0 with _ -> false)
 do test "test" (try Checked.int16 0uy = 0s with _ -> false)
 do test "test" (try Checked.sbyte 0uy = 0y with _ -> false)
+do test "test" (try Checked.int8 0uy = 0y with _ -> false)
 
 do test "test" (try Checked.unativeint 0uy = 0un with _ -> false)
 do test "test" (try Checked.uint64 0uy = 0UL with _ -> false)
 do test "test" (try Checked.uint32 0uy = 0u with _ -> false)
 do test "test" (try Checked.uint16 0uy = 0us with _ -> false)
 do test "test" (try Checked.byte 0uy = 0uy with _ -> false)
+do test "test" (try Checked.uint8 0uy = 0uy with _ -> false)
 
 do test "test" (try Checked.nativeint 0y = 0n with _ -> false)
 do test "test" (try Checked.int64 0y = 0L with _ -> false)
 do test "test" (try Checked.int32 0y = 0 with _ -> false)
 do test "test" (try Checked.int16 0y = 0s with _ -> false)
 do test "test" (try Checked.sbyte 0y = 0y with _ -> false)
+do test "test" (try Checked.int8 0y = 0y with _ -> false)
 
 do test "test" (try Checked.unativeint 0y = 0un with _ -> false)
 do test "test" (try Checked.uint64 0y = 0UL with _ -> false)
 do test "test" (try Checked.uint32 0y = 0u with _ -> false)
 do test "test" (try Checked.uint16 0y = 0us with _ -> false)
 do test "test" (try Checked.byte 0y = 0uy with _ -> false)
+do test "test" (try Checked.uint8 0y = 0uy with _ -> false)
 
 
 do test "test" (try Checked.nativeint 0n = 0n with _ -> false)
@@ -192,24 +215,28 @@ do test "test" (try Checked.int64 0n = 0L with _ -> false)
 do test "test" (try Checked.int32 0n = 0 with _ -> false)
 do test "test" (try Checked.int16 0n = 0s with _ -> false)
 do test "test" (try Checked.sbyte 0n = 0y with _ -> false)
+do test "test" (try Checked.int8 0n = 0y with _ -> false)
 
 do test "test" (try Checked.unativeint 0n = 0un with _ -> false)
 do test "test" (try Checked.uint64 0n = 0UL with _ -> false)
 do test "test" (try Checked.uint32 0n = 0u with _ -> false)
 do test "test" (try Checked.uint16 0n = 0us with _ -> false)
 do test "test" (try Checked.byte 0n = 0uy with _ -> false)
+do test "test" (try Checked.uint8 0n = 0uy with _ -> false)
 
 do test "test" (try Checked.nativeint 0un = 0n with _ -> false)
 do test "test" (try Checked.int64 0un = 0L with _ -> false)
 do test "test" (try Checked.int32 0un = 0 with _ -> false)
 do test "test" (try Checked.int16 0un = 0s with _ -> false)
 do test "test" (try Checked.sbyte 0un = 0y with _ -> false)
+do test "test" (try Checked.int8 0un = 0y with _ -> false)
 
 do test "test" (try Checked.unativeint 0un = 0un with _ -> false)
 do test "test" (try Checked.uint64 0un = 0UL with _ -> false)
 do test "test" (try Checked.uint32 0un = 0u with _ -> false)
 do test "test" (try Checked.uint16 0un = 0us with _ -> false)
 do test "test" (try Checked.byte 0un = 0uy with _ -> false)
+do test "test" (try Checked.uint8 0un = 0uy with _ -> false)
 
 
 
@@ -218,12 +245,14 @@ do test "test" (try Checked.uint64 10.0E100 |> ignore ; false with _ -> true)
 do test "test" (try Checked.uint32 10.0E100 |> ignore ; false with _ -> true)
 do test "test" (try Checked.uint16 10.0E100 |> ignore ; false with _ -> true)
 do test "test" (try Checked.byte 10.0E100 |> ignore; false with _ -> true)
+do test "test" (try Checked.uint8 10.0E100 |> ignore; false with _ -> true)
 
 do test "test" (try Checked.nativeint 10.0E100 |> ignore ; false with _ -> true)
 do test "test" (try Checked.int64 10.0E100 |> ignore ; false with _ -> true)
 do test "test" (try Checked.int32 10.0E100 |> ignore ; false with _ -> true)
 do test "test" (try Checked.int16 10.0E100 |> ignore ; false with _ -> true)
 do test "test" (try Checked.sbyte 10.0E100 |> ignore; false with _ -> true)
+do test "test" (try Checked.int8 10.0E100 |> ignore; false with _ -> true)
 
 let fails f x = try ignore (f x); false with _ -> true
 let succeeds f x = not (fails f x)
diff --git a/tests/fsharp/core/libtest/test.fsx b/tests/fsharp/core/libtest/test.fsx
index 4c79882f3ab..472e74ea318 100644
--- a/tests/fsharp/core/libtest/test.fsx
+++ b/tests/fsharp/core/libtest/test.fsx
@@ -71,12 +71,11 @@ let reportFailure s =
 #else
 let argv = System.Environment.GetCommandLineArgs() 
 let SetCulture() = 
-  if argv.Length > 2 && argv.[1] = "--culture" then  begin
+  if argv.Length > 2 && argv.[1] = "--culture" then  
     let cultureString = argv.[2] in 
     let culture = new System.Globalization.CultureInfo(cultureString) in 
     stdout.WriteLine ("Running under culture "+culture.ToString()+"...");
     System.Threading.Thread.CurrentThread.CurrentCulture <-  culture
-  end 
   
 do SetCulture()    
 #endif
@@ -700,12 +699,12 @@ let _ = printString "hash is interesting (intarray 1): "; if hash [| 3; 4 |] = h
 (* the whole function, which is very unlikely. *)
 let genericHash x =
   stdout.WriteLine "genericHash - hopefully not inlined\n";
-  let r = ref 0 in 
-  for i = 1 to 100 do r := !r + 1; done;
-  for i = 1 to 100 do r := !r + 1; done;
-  for i = 1 to 100 do r := !r + 1; done;
-  for i = 1 to 100 do r := !r + 1; done;
-  (!r - 400) + hash x
+  let mutable r = 0 in 
+  for i = 1 to 100 do r <- r + 1; done;
+  for i = 1 to 100 do r <- r + 1; done;
+  for i = 1 to 100 do r <- r + 1; done;
+  for i = 1 to 100 do r <- r + 1; done;
+  (r - 400) + hash x
 
 
 type T = T of int * int
@@ -818,7 +817,7 @@ let _ = printString "type specific hash matches generic hash (9): "; if getObjec
 !* check we can resolve overlapping constructor names using type names
  *--------------------------------------------------------------------------- *)
 
-module OverlappingCOnstructorNames = begin
+module OverlappingCOnstructorNames = 
 
   type XY = X | Y
   type YZ = Y | Z
@@ -842,13 +841,6 @@ module OverlappingCOnstructorNames = begin
     | YZ.Y -> "X"
     | YZ.Z -> "Y"
 
-end
-
-
-(*---------------------------------------------------------------------------
-!* hashing of large terms that contain back pointers (are infinite)
- *--------------------------------------------------------------------------- *)
-
 
 (*---------------------------------------------------------------------------
 !* Equality tests over structured values for data likely to contain
@@ -1383,17 +1375,17 @@ let _ = test "List.tryFindIndex" (List.tryFindIndex (fun x -> x = 4) [0..10] = S
 let _ = test "List.tryfind_index_b" (List.tryFindIndex (fun x -> x = 42) [0..10] = None)
 
 
-let c = ref -1
-do List.iter (fun x -> incr c; test "List.iter" (x = !c)) [0..100]
-let _ = test "List.iter" (!c = 100)
+let mutable c = -1
+do List.iter (fun x -> c <- (c + 1); test "List.iter" (x = c)) [0..100]
+let _ = test "List.iter" (c = 100)
 
 let _ = test "List.map" ([1..100] |> List.map ((+) 1) = [2..101])
 
 let _ = test "List.mapi" ([0..100] |> List.mapi (+) = [0..+2..200])
 
-do c := -1
-do List.iteri (fun i x -> incr c; test "List.iteri" (x = !c && i = !c)) [0..100]
-let _ = test "List.iteri" (!c = 100)
+do c <- -1
+do List.iteri (fun i x -> c <- (c+1); test "List.iteri" (x = c && i = c)) [0..100]
+let _ = test "List.iteri" (c = 100)
 
 let _ = test "List.exists" ([1..100] |> List.exists ((=) 50))
 
@@ -1417,9 +1409,9 @@ let _ = test "List.tryFind" ([1..100] |> List.tryFind (fun x -> x > 50) = Some 5
 
 let _ = test "List.tryFind b" ([1..100] |> List.tryFind (fun x -> x > 180) = None)
 
-do c := -1
-do List.iter2 (fun x y -> incr c; test "List.iter2" (!c = x && !c = y)) [0..100] [0..100]
-let _ = test "List.iter2" (!c = 100)
+do c <- -1
+do List.iter2 (fun x y -> c <- c + 1; test "List.iter2" (c = x && c = y)) [0..100] [0..100]
+let _ = test "List.iter2" (c = 100)
 
 let _ = test "List.map2" (List.map2 (+) [0..100] [0..100] = [0..+2..200])
 
@@ -1444,7 +1436,7 @@ let _ = test "List.rev d" (List.rev [1; 2] = [2; 1])
 
 
 
-module MinMaxAverageSum = begin
+module MinMaxAverageSum = 
         do test "ceijoe9cewz" (Seq.sum [] = 0)
         do test "ceijoe9cewx" (Seq.sum [1;2;3] = 6)
         do test "ceijoe9cewv" (Seq.sum [0.0;1.0] = 1.0)
@@ -1506,10 +1498,10 @@ module MinMaxAverageSum = begin
 
         do test "ceijoe9ceww" (List.max [1.0M;2.0M;3.0M] = 3.0M)
         do test "ceijoe9cewe" (List.max [3.0M;2.0M;1.0M] = 3.0M)
-end
 
 
-module Pow = begin
+
+module Pow = 
         do test "cnod90km1" (pown 2.0 -3 = 0.125)
         do test "cnod90km2" (pown 2.0 -2 = 0.25)
         do test "cnod90km3" (pown 2.0 -1 = 0.5)
@@ -1615,9 +1607,9 @@ module Pow = begin
                    test "cnod90kmbb1a" (pown (byte baseIdx) 2 = (byte baseIdx) * (byte baseIdx));
                )
            done
-end
 
-module TakeUntilSkipWhile = begin
+
+module TakeUntilSkipWhile = 
 
     do test "oewvjrrovvr1" ([ ] |> Seq.takeWhile (fun x -> x <= 5) |> Seq.toList = [ ])
     do test "oewvjrrovvr2" ([ 1 ] |> Seq.takeWhile (fun x -> x <= 5) |> Seq.toList = [ 1 ])
@@ -1631,7 +1623,6 @@ module TakeUntilSkipWhile = begin
     do test "oewvjrrovvr9" ([ 1;2;3;4;5;6;7 ] |> Seq.skipWhile (fun x -> x <= 5) |> Seq.toList = [ 6;7 ])
     do test "oewvjrrovvra" ([ 1;2;3;4;5;6;5;4;3;2;1 ] |> Seq.skipWhile (fun x -> x <= 5) |> Seq.toList = [ 6;5;4;3;2;1 ])
 
-end
 
 
 (*---------------------------------------------------------------------------
@@ -1674,14 +1665,14 @@ let _ = pri4a(test4())
 
 let listtest1 () = 
   let pri2 s l = printString s; printString ": "; List.iter printInt l; printNewLine () in 
-  let r = ref [] in 
+  let mutable r = [] in 
   for i = 1 to 100 do
-    r := i :: !r;
+    r <- i :: r;
     for j = 1 to 100 do
-      let _ = List.rev !r  in ()
+      let _ = List.rev r  in ()
     done;
   done;
-  pri2 "list: " !r
+  pri2 "list: " r
 
 let _ = listtest1()
 
@@ -2087,19 +2078,19 @@ let sort_test cmp ans =
 let _ = sort_test compare [0;1;2;3;4;5]
 let _ = sort_test (fun x y -> -(compare x y)) [5;4;3;2;1;0]
 *)
-module StrangeOperatorTest = begin
-  let (&&&) x y = x^y
-  let (<<<) (x:string) (y:string) = x ^y^x
+module StrangeOperatorTest = 
+    let (&&&) x y = x^y
+    let (<<<) (x:string) (y:string) = x ^y^x
 
-  let e1 = ("0" &&& ("1" <<< "2"))
-  let e2= (("0" &&& "1") <<< "2") 
-  let e3= ("0" &&& "1" <<< "2") 
+    let e1 = ("0" &&& ("1" <<< "2"))
+    let e2= (("0" &&& "1") <<< "2") 
+    let e3= ("0" &&& "1" <<< "2") 
+
+    let _ = if (e1 <> e2) then stderr.WriteLine "Control Passed" else stderr.WriteLine "Control Failed"
+    let _ = if (e1 = e3) then (stderr.WriteLine "Parsed to Right!  Wrong!" ; reportFailure "parsing")
+    let _ = if (e2 = e3) then stderr.WriteLine "Parsed to Left - correct!" 
 
-  let _ = if (e1 <> e2) then stderr.WriteLine "Control Passed" else stderr.WriteLine "Control Failed"
-  let _ = if (e1 = e3) then (stderr.WriteLine "Parsed to Right!  Wrong!" ; reportFailure "parsing")
-  let _ = if (e2 = e3) then stderr.WriteLine "Parsed to Left - correct!" 
 
-end
 
 //let _ = if (3 then do ignore(4)) = 3 then stderr.WriteLine "OK!" else (stderr.WriteLine "Wrong!" ; reportFailure "unlabelled test")
 //let _ = let x = ref 1 in if (!x then do x := !x + 1) = 1 then stderr.WriteLine "OK!" else (stderr.WriteLine "Wrong!" ; reportFailure "unlabelled test")
@@ -2212,9 +2203,9 @@ do test2398985()
 
 let test2398986() = 
   let l = Array.ofList [1;2;3] in
-  let res = ref 2 in 
-  for i in Array.toSeq l do res := !res + i done;
-  check "test2398986: Array.toSeq" 8 !res
+  let mutable res = 2 in 
+  for i in Array.toSeq l do res <- res + i done;
+  check "test2398986: Array.toSeq" 8 res
 
 do test2398986()
 
@@ -2331,12 +2322,11 @@ do check "type test double" 1.0 (match box(1.0) with | :? System.Int32 -> 3.14 |
 !* type syntax
  *--------------------------------------------------------------------------- *)
 
-module TypeSyntax = begin
- let x1  = [Map.add 1 (Map.add 1 1 Map.empty) Map.empty]
- let x2 : Map<'a,'b> list  = [Map.empty]
- let x3 : Map<'a,'b> list  = []
+module TypeSyntax = 
+    let x1  = [Map.add 1 (Map.add 1 1 Map.empty) Map.empty]
+    let x2 : Map<'a,'b> list  = [Map.empty]
+    let x3 : Map<'a,'b> list  = []
 
-end
 
 module IEnumerableTests = begin
 
@@ -2506,11 +2496,11 @@ end
 
 module SeqTestsOnEnumerableEnforcingDisposalAtEnd = begin
    
-   let numActiveEnumerators = ref 0
+   let mutable numActiveEnumerators = 0
    
    let countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd (seq: seq<'a>) =
        let enumerator() = 
-                 numActiveEnumerators := !numActiveEnumerators + 1;
+                 numActiveEnumerators <- numActiveEnumerators + 1;
                  let disposed = ref false in
                  let endReached = ref false in
                  let ie = seq.GetEnumerator() in
@@ -2522,7 +2512,7 @@ module SeqTestsOnEnumerableEnforcingDisposalAtEnd = begin
                       member x.Dispose() = 
                           test "rvlrve2" !endReached;
                           test "rvlrve4" (not !disposed);
-                          numActiveEnumerators := !numActiveEnumerators - 1;
+                          numActiveEnumerators <- numActiveEnumerators - 1;
                           disposed := true;
                           ie.Dispose() 
                    interface System.Collections.IEnumerator with 
@@ -2549,7 +2539,7 @@ module SeqTestsOnEnumerableEnforcingDisposalAtEnd = begin
                  let disposed = ref false in
                  let endReached = ref false in
                  let ie = seq.GetEnumerator() in
-                 numActiveEnumerators := !numActiveEnumerators + 1;
+                 numActiveEnumerators <- numActiveEnumerators + 1;
                  { new System.Collections.Generic.IEnumerator<'a> with 
                       member x.Current =
                           test "qrvlrve0" (not !endReached);
@@ -2557,7 +2547,7 @@ module SeqTestsOnEnumerableEnforcingDisposalAtEnd = begin
                           ie.Current
                       member x.Dispose() = 
                           test "qrvlrve4" (not !disposed);
-                          numActiveEnumerators := !numActiveEnumerators - 1;
+                          numActiveEnumerators <- numActiveEnumerators - 1;
                           disposed := true;
                           ie.Dispose() 
                    interface System.Collections.IEnumerator with 
@@ -2581,221 +2571,221 @@ module SeqTestsOnEnumerableEnforcingDisposalAtEnd = begin
 
    // This one gave a stack overflow when we weren't tail-calling on 64-bit
    do check "Seq.filter-length" ({ 1 .. 1000000 } |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.filter (fun n -> n <> 1) |> Seq.length) 999999
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.filter-length" ({ 1 .. 1000000 } |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.filter (fun n -> n = 1) |> Seq.length) 1
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.filter-length" ({ 1 .. 1000000 } |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.filter (fun n -> n % 2 = 0) |> Seq.length) 500000
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
     
    do check "IEnumerableTest.empty-length" (Seq.length (countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd Seq.empty)) 0
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.length-of-array" (Seq.length (countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd [| 1;2;3 |])) 3
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.head-of-array" (Seq.head (countEnumeratorsAndCheckedDisposedAtMostOnce [| 1;2;3 |])) 1
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.take-0-of-array" (Seq.take 0 (countEnumeratorsAndCheckedDisposedAtMostOnce [| 1;2;3 |]) |> Seq.toList) []
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.take-1-of-array" (Seq.take 1 (countEnumeratorsAndCheckedDisposedAtMostOnce [| 1;2;3 |]) |> Seq.toList) [1]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.take-3-of-array" (Seq.take 3 (countEnumeratorsAndCheckedDisposedAtMostOnce [| 1;2;3 |]) |> Seq.toList) [1;2;3]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.nonempty-true" (Seq.isEmpty (countEnumeratorsAndCheckedDisposedAtMostOnce [| 1;2;3 |])) false
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.nonempty-false" (Seq.isEmpty (countEnumeratorsAndCheckedDisposedAtMostOnce [| |])) true
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.fold" (Seq.fold (+) 0 (countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd [| 1;2;3 |])   ) 6
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.unfold" (Seq.unfold (fun _ -> None) 1 |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toArray) [| |]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.unfold" (Seq.unfold (fun x -> if x = 1 then Some("a",2) else  None) 1 |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toArray) [| "a" |]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.exists" (Seq.exists ((=) "a") (countEnumeratorsAndCheckedDisposedAtMostOnce [| |])) false
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.exists" (Seq.exists ((=) "a") (countEnumeratorsAndCheckedDisposedAtMostOnce [| "a" |])) true
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.exists" (Seq.exists ((=) "a") (countEnumeratorsAndCheckedDisposedAtMostOnce [| "1"; "a" |])) true
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
 
    do check "IEnumerableTest.exists" (Seq.forall ((=) "a") (countEnumeratorsAndCheckedDisposedAtMostOnce [| |])) true
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.exists" (Seq.forall ((=) "a") (countEnumeratorsAndCheckedDisposedAtMostOnce [| "a" |])) true
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.exists" (Seq.forall ((=) "a") (countEnumeratorsAndCheckedDisposedAtMostOnce [| "1"; "a" |])) false
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
    do check "IEnumerableTest.map on finite" ([| "a" |] |> Seq.map (fun x -> x.Length) |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toArray) [| 1 |]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.filter on finite" ([| "a";"ab";"a" |] |> Seq.filter (fun x -> x.Length = 1) |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toArray) [| "a";"a" |]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.choose on finite" ([| "a";"ab";"a" |] |> Seq.choose (fun x -> if x.Length = 1 then Some(x^"a") else None) |> Seq.toArray) [| "aa";"aa" |]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.pick on finite (succeeding)" ([| "a";"ab";"a" |] |> countEnumeratorsAndCheckedDisposedAtMostOnce |> Seq.pick (fun x -> if x.Length = 1 then Some(x^"a") else None)) "aa"
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.tryPick on finite (succeeding)" ([| "a";"ab";"a" |] |> countEnumeratorsAndCheckedDisposedAtMostOnce |> Seq.tryPick (fun x -> if x.Length = 1 then Some(x^"a") else None)) (Some "aa")
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.tryPick on finite (failing)" ([| "a";"ab";"a" |] |> countEnumeratorsAndCheckedDisposedAtMostOnce |> Seq.tryPick (fun x -> if x.Length = 6 then Some(x^"a") else None)) None
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.find on finite (succeeding)" ([| "a";"ab";"a" |] |> countEnumeratorsAndCheckedDisposedAtMostOnce |> Seq.find (fun x -> x.Length = 1)) "a"
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.find on finite (failing)" (try Some ([| "a";"ab";"a" |] |> countEnumeratorsAndCheckedDisposedAtMostOnce |> Seq.find (fun x -> x.Length = 6)) with :? System.Collections.Generic.KeyNotFoundException -> None) None
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.map_with_type (string up to obj,finite)" ([| "a" |] |> Seq.cast |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toArray) [| ("a" :> obj) |]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.map_with_type (obj down to string, finite)" ([| ("a" :> obj) |] |> Seq.cast |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toArray) [| "a" |]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.append, finite, finite" (Seq.append [| "a" |] [| "b" |]  |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toArray) [| "a"; "b" |]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
 
 
    do check "IEnumerableTest.concat, finite" (Seq.concat [| [| "a" |]; [| |]; [| "b";"c" |] |]  |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toList) [ "a";"b";"c" ]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.init_infinite, then take" (Seq.take 2 (countEnumeratorsAndCheckedDisposedAtMostOnce (Seq.initInfinite (fun i -> i+1))) |> Seq.toList) [ 1;2 ]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.to_array, empty" (Seq.init 0 (fun i -> i+1) |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toArray) [|  |]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.to_array, small" (Seq.init 1 (fun i -> i+1) |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toArray) [| 1 |]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.to_array, large" (Seq.init 100000 (fun i -> i+1) |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toArray |> Array.length) 100000
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.to_array, very large" (Seq.init 1000000 (fun i -> i+1) |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toArray |> Array.length) 1000000
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.to_list, empty" (Seq.init 0 (fun i -> i+1) |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toList) [  ]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.to_list, small" (Seq.init 1 (fun i -> i+1) |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toList) [ 1 ]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.to_list, large" (Seq.init 100000 (fun i -> i+1) |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toList |> List.length) 100000
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.to_list, large" (Seq.init 1000000 (fun i -> i+1) |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toList |> List.length) 1000000
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "IEnumerableTest.to_list, large" (Seq.init 1000000 (fun i -> i+1) |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> List.ofSeq |> List.length) 1000000
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "List.unzip, large" (Seq.init 1000000 (fun i -> (i,i+1)) |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> List.ofSeq |> List.unzip |> fst |> List.length) 1000000
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    let dup x = x,x
    let uncurry f (x,y) = f x y
     
    do check "List.zip, large" (Seq.init 1000000 (fun i -> (i,i+1)) |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> List.ofSeq |> dup |> uncurry List.zip |> List.length) 1000000
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
     
 (*
     // Currently disabled, since IStructuralEquatable.Equals will cause this to stack overflow around 140000 elements
     do check "List.sort, large" ((Seq.init 140000 (fun i -> 139999 - i) |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> List.ofSeq |> List.sort) = 
                                  (Seq.init 140000 (fun i -> i) |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> List.ofSeq |> List.sort))   true
-    do check "" !numActiveEnumerators 0
+    do check "" numActiveEnumerators 0
 *)
     
    do check "Seq.singleton" (Seq.singleton 42 |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.length) 1
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.singleton" (Seq.singleton 42 |> countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd |> Seq.toList) [42]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
    do check "Seq.truncate" (Seq.truncate 20 (countEnumeratorsAndCheckedDisposedAtMostOnce [1..100]) |> Seq.toList) [1..20]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.truncate" (Seq.truncate 1 (countEnumeratorsAndCheckedDisposedAtMostOnce [1..100]) |> Seq.toList) [1]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.truncate" (Seq.truncate 0 (countEnumeratorsAndCheckedDisposedAtMostOnce [1..100]) |> Seq.toList) []
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
    do check "Seq.scan" (Seq.scan (+) 0 (countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd [|1..5|]) |> Seq.toArray) [|0; 1; 3; 6; 10; 15|]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    //do check "Seq.scan1" (Seq.scan1 (+) (countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd [|1..5|]) |> Seq.toArray) [|3; 6; 10; 15|]
-   //do check "" !numActiveEnumerators 0
+   //do check "" numActiveEnumerators 0
 
    do check "Seq.exists2" (Seq.exists2 (=) (countEnumeratorsAndCheckedDisposedAtMostOnce [|1; 2; 3; 4; 5; 6|]) (countEnumeratorsAndCheckedDisposedAtMostOnce [|2; 3; 4; 5; 6; 6|])) true
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.exists2" (Seq.exists2 (=) (countEnumeratorsAndCheckedDisposedAtMostOnce [|1; 2; 3; 4; 5; 6|]) (countEnumeratorsAndCheckedDisposedAtMostOnce [|2; 3; 4; 5; 6; 7|])) false
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
    do check "Seq.forall2" (Seq.forall2 (=) (countEnumeratorsAndCheckedDisposedAtMostOnce [|1..10|]) (countEnumeratorsAndCheckedDisposedAtMostOnce [|1..10|])) true
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.forall2" (Seq.forall2 (=) (countEnumeratorsAndCheckedDisposedAtMostOnce [|1;2;3;4;5|]) (countEnumeratorsAndCheckedDisposedAtMostOnce [|1;2;3;0;5|])) false
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
 
 
    do check "Seq.tryFind" ([|1..100|] |> countEnumeratorsAndCheckedDisposedAtMostOnce |> Seq.tryFind (fun x -> x > 50)) (Some 51)
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.tryFind" ([|1..100|] |> countEnumeratorsAndCheckedDisposedAtMostOnce |> Seq.tryFind (fun x -> x > 180)) None
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
 
    do check "Seq.compareWith" (Seq.compareWith compare (countEnumeratorsAndCheckedDisposedAtMostOnce [1;2]) (countEnumeratorsAndCheckedDisposedAtMostOnce [2;1])) -1
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.compareWith" (Seq.compareWith compare (countEnumeratorsAndCheckedDisposedAtMostOnce [2;1]) (countEnumeratorsAndCheckedDisposedAtMostOnce [1;2]))  1
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.compareWith" (Seq.compareWith compare (countEnumeratorsAndCheckedDisposedAtMostOnce [1;2]) (countEnumeratorsAndCheckedDisposedAtMostOnce [1;2]))  0
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.compareWith" (Seq.compareWith compare (countEnumeratorsAndCheckedDisposedAtMostOnce []) (countEnumeratorsAndCheckedDisposedAtMostOnce    [1;2])) -1
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
    do check "Seq.collect" (Seq.collect (fun i -> [i*10 .. i*10+9]) (countEnumeratorsAndCheckedDisposedAtMostOnce [0..9]) |> Seq.toList) [0..99]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
    let c = ref -1
    do Seq.iter2 (fun x y -> incr c; test "Seq.iter2" (!c = x && !c = y)) (countEnumeratorsAndCheckedDisposedAtMostOnce [0..10]) (countEnumeratorsAndCheckedDisposedAtMostOnce [0..10])
    do check "Seq.iter2" !c 10
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
    do check "Seq.zip"
          (Seq.zip [1..10] (countEnumeratorsAndCheckedDisposedAtMostOnce [2..11]) |> Seq.toList) [for i in 1..10 -> i, i+1]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
 
    do check "Seq.zip3"
          (Seq.zip3 (countEnumeratorsAndCheckedDisposedAtMostOnce [1..10]) (countEnumeratorsAndCheckedDisposedAtMostOnce [2..11]) (countEnumeratorsAndCheckedDisposedAtMostOnce [3..12]) |> Seq.toList) [for i in 1..10 -> i, i+1, i+2]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
    do c := -1
    do Seq.iteri (fun n x -> incr c; test "Seq.iter2" (!c = n && !c+1 = x)) (countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd [1..11])
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.iter2" !c 10
 
    do check "Seq.pairwise" (Seq.pairwise (countEnumeratorsAndCheckedDisposedAtMostOnce [1..20]) |> Seq.toList) [for i in 1 .. 19 -> i, i+1]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
    do check "Seq.windowed 1" (Seq.windowed 1 (countEnumeratorsAndCheckedDisposedAtMostOnce [1..20]) |> Seq.toList) [for i in 1 .. 20 -> [|i|]]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.windowed 2" (Seq.windowed 2 (countEnumeratorsAndCheckedDisposedAtMostOnce [1..20]) |> Seq.toList) [for i in 1 .. 19 -> [|i; i+1|]]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.windowed 3" (Seq.windowed 3 (countEnumeratorsAndCheckedDisposedAtMostOnce [1..20]) |> Seq.toList) [for i in 1 .. 18 -> [|i; i+1; i+2|]]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.windowed 4" (Seq.windowed 4 (countEnumeratorsAndCheckedDisposedAtMostOnce [1..20]) |> Seq.toList) [for i in 1 .. 17 -> [|i; i+1; i+2; i+3|]]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
    let group = Seq.groupBy (fun x -> x % 5) (countEnumeratorsAndCheckedDisposedAtMostOnce [1..100])
    do for n, s in group do
         check "Seq.groupBy" (Seq.forall (fun x -> x % 5 = n) s) true;
-        check "" !numActiveEnumerators 0
+        check "" numActiveEnumerators 0
       done
 
    let sorted = Seq.sortBy abs (countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd [2; 4; 3; -5; 2; -4; -8; 0; 5; 2])
    do check "Seq.sortBy" (Seq.pairwise sorted |> Seq.forall (fun (x, y) -> abs x <= abs y)) true
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    let counts = Seq.countBy id (countEnumeratorsAndCheckedDisposedAtMostOnce [for i in 1..10 do yield! [10..-1..i] done ])
    do check "Seq.countBy" (counts |> Seq.toList) [for i in 10..-1..1 -> i, i]
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
    do check "Seq.sum" (Seq.sum (countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd [1..100])) (100*101/2)
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.sumBy" (Seq.sumBy float [1..100]) (100.*101./2.)
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
 
    do check "Seq.average" (Seq.average (countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd [1.; 2.; 3.])) 2.
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.averageBy" (Seq.averageBy float (countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd [0..100])) 50.
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.min" (Seq.min (countEnumeratorsAndCheckedDisposedAtMostOnceAtEnd [1; 4; 2; 5; 8; 4; 0; 3])) 0
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.max" (Seq.max (countEnumeratorsAndCheckedDisposedAtMostOnce [1; 4; 2; 5; 8; 4; 0; 3])) 8
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    #if Portable
    #else // strings don't have enumerators in portable
    do check "Seq.minBy" (Seq.minBy int (countEnumeratorsAndCheckedDisposedAtMostOnce "this is a test")) ' '
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    do check "Seq.maxBy" (Seq.maxBy int (countEnumeratorsAndCheckedDisposedAtMostOnce "this is a test")) 't'
-   do check "" !numActiveEnumerators 0
+   do check "" numActiveEnumerators 0
    #endif
 
 end
@@ -2850,59 +2840,152 @@ o A positive infinity is considered greater than all other values, but equal to
 *)
 open System
 
-let nan1 = (let r = ref Double.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0))
-let nan2 = (let r = ref Double.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0))
-
-do printf "checking floating point relational operators\n"
-let _ = check "d3wiojd30a" ((Double.NaN > Double.NaN)) false
-let _ = check "d3wiojd30a" (if (Double.NaN > Double.NaN) then "a" else "b") "b"
-let _ = check "d3wiojd30b" ((Double.NaN >= Double.NaN)) false
-let _ = check "d3wiojd30b" (if (Double.NaN >= Double.NaN) then "a" else "b") "b"
-let _ = check "d3wiojd30c" ((Double.NaN < Double.NaN)) false
-let _ = check "d3wiojd30c" (if (Double.NaN < Double.NaN) then "a" else "b") "b"
-let _ = check "d3wiojd30d" ((Double.NaN <= Double.NaN)) false
-let _ = check "d3wiojd30d" (if (Double.NaN <= Double.NaN) then "a" else "b") "b"
-let _ = check "d3wiojd30e" ((Double.NaN = Double.NaN)) false
-let _ = check "d3wiojd30e" (if (Double.NaN = Double.NaN) then "a" else "b") "b"
-let _ = check "d3wiojd30q" ((Double.NaN <> Double.NaN)) true
-let _ = check "d3wiojd30w" ((Double.NaN > 1.0)) false
-let _ = check "d3wiojd30e" ((Double.NaN >= 1.0)) false
-let _ = check "d3wiojd30r" ((Double.NaN < 1.0)) false
-let _ = check "d3wiojd30t" ((Double.NaN <= 1.0)) false
-let _ = check "d3wiojd30y" ((Double.NaN = 1.0)) false
-let _ = check "d3wiojd30u" ((Double.NaN <> 1.0)) true
-let _ = check "d3wiojd30i" ((1.0 > Double.NaN)) false
-let _ = check "d3wiojd30o" ((1.0 >= Double.NaN)) false
-let _ = check "d3wiojd30p" ((1.0 < Double.NaN)) false
-let _ = check "d3wiojd30a" ((1.0 <= Double.NaN)) false
-let _ = check "d3wiojd30s" ((1.0 = Double.NaN)) false
-let _ = check "d3wiojd30d" ((1.0 <> Double.NaN)) true
-let _ = check "d3wiojd30a" ((nan1 > Double.NaN)) false
-let _ = check "d3wiojd30b" ((nan1 >= nan2)) false
-let _ = check "d3wiojd30c" ((nan1 < nan2)) false
-let _ = check "d3wiojd30d" ((nan1 <= nan2)) false
-let _ = check "d3wiojd30e" ((nan1 = nan2)) false
-let _ = check "d3wiojd30q" ((nan1 <> nan2)) true
-let _ = check "d3wiojd30w" ((nan1 > 1.0)) false
-let _ = check "d3wiojd30e" ((nan1 >= 1.0)) false
-let _ = check "d3wiojd30r" ((nan1 < 1.0)) false
-let _ = check "d3wiojd30t" ((nan1 <= 1.0)) false
-let _ = check "d3wiojd30y" ((nan1 = 1.0)) false
-let _ = check "d3wiojd30u" ((nan1 <> 1.0)) true
-let _ = check "d3wiojd30i" ((1.0 > nan2)) false
-let _ = check "d3wiojd30o" ((1.0 >= nan2)) false
-let _ = check "d3wiojd30p" ((1.0 < nan2)) false
-let _ = check "d3wiojd30a" ((1.0 <= nan2)) false
-let _ = check "d3wiojd30s" ((1.0 = nan2)) false
-let _ = check "d3wiojd30d" ((1.0 <> nan2)) true
-let _ = check "d3wiojd30f" ((Double.NegativeInfinity = Double.NegativeInfinity)) true
-let _ = check "d3wiojd30g" ((Double.NegativeInfinity < Double.PositiveInfinity)) true
-let _ = check "d3wiojd30h" ((Double.NegativeInfinity > Double.PositiveInfinity)) false
-let _ = check "d3wiojd30j" ((Double.NegativeInfinity <= Double.NegativeInfinity)) true
-
-module FloatingPointStructured = begin
+(* ----- NaN tests for DOUBLE ----- *)
+
+module DoubleNaN =
+    let nan1 = (let r = ref Double.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0))
+    let nan2 = (let r = ref Double.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0))
+
+    do printf "checking floating point relational operators\n"
+    let _ = check "d3wiojd30a" ((Double.NaN > Double.NaN)) false
+    check "d3wiojd30a" (if (Double.NaN > Double.NaN) then "a" else "b") "b"
+    check "d3wiojd30b" ((Double.NaN >= Double.NaN)) false
+    check "d3wiojd30b" (if (Double.NaN >= Double.NaN) then "a" else "b") "b"
+    check "d3wiojd30c" ((Double.NaN < Double.NaN)) false
+    check "d3wiojd30c" (if (Double.NaN < Double.NaN) then "a" else "b") "b"
+    check "d3wiojd30d" ((Double.NaN <= Double.NaN)) false
+    check "d3wiojd30d" (if (Double.NaN <= Double.NaN) then "a" else "b") "b"
+    check "d3wiojd30e" ((Double.NaN = Double.NaN)) false
+    check "d3wiojd30e" (if (Double.NaN = Double.NaN) then "a" else "b") "b"
+    check "d3wiojd30q" ((Double.NaN <> Double.NaN)) true
+    check "d3wiojd30w" ((Double.NaN > 1.0)) false
+    check "d3wiojd30e" ((Double.NaN >= 1.0)) false
+    check "d3wiojd30r" ((Double.NaN < 1.0)) false
+    check "d3wiojd30t" ((Double.NaN <= 1.0)) false
+    check "d3wiojd30y" ((Double.NaN = 1.0)) false
+    check "d3wiojd30u" ((Double.NaN <> 1.0)) true
+    check "d3wiojd30i" ((1.0 > Double.NaN)) false
+    check "d3wiojd30o" ((1.0 >= Double.NaN)) false
+    check "d3wiojd30p" ((1.0 < Double.NaN)) false
+    check "d3wiojd30a" ((1.0 <= Double.NaN)) false
+    check "d3wiojd30s" ((1.0 = Double.NaN)) false
+    check "d3wiojd30d" ((1.0 <> Double.NaN)) true
+    check "d3wiojd30a" ((nan1 > Double.NaN)) false
+    check "d3wiojd30b" ((nan1 >= nan2)) false
+    check "d3wiojd30c" ((nan1 < nan2)) false
+    check "d3wiojd30d" ((nan1 <= nan2)) false
+    check "d3wiojd30e" ((nan1 = nan2)) false
+    check "d3wiojd30q" ((nan1 <> nan2)) true
+    check "d3wiojd30w" ((nan1 > 1.0)) false
+    check "d3wiojd30e" ((nan1 >= 1.0)) false
+    check "d3wiojd30r" ((nan1 < 1.0)) false
+    check "d3wiojd30t" ((nan1 <= 1.0)) false
+    check "d3wiojd30y" ((nan1 = 1.0)) false
+    check "d3wiojd30u" ((nan1 <> 1.0)) true
+    check "d3wiojd30i" ((1.0 > nan2)) false
+    check "d3wiojd30o" ((1.0 >= nan2)) false
+    check "d3wiojd30p" ((1.0 < nan2)) false
+    check "d3wiojd30a" ((1.0 <= nan2)) false
+    check "d3wiojd30s" ((1.0 = nan2)) false
+    check "d3wiojd30d" ((1.0 <> nan2)) true
+    check "d3wiojd30f" ((Double.NegativeInfinity = Double.NegativeInfinity)) true
+    check "d3wiojd30g" ((Double.NegativeInfinity < Double.PositiveInfinity)) true
+    check "d3wiojd30h" ((Double.NegativeInfinity > Double.PositiveInfinity)) false
+    check "d3wiojd30j" ((Double.NegativeInfinity <= Double.NegativeInfinity)) true
+
+    check "D1nancompare01" (0 = (compare Double.NaN Double.NaN)) true
+    check "D1nancompare02" (0 = (compare Double.NaN nan1)) true
+    check "D1nancompare03" (0 = (compare nan1 Double.NaN)) true
+    check "D1nancompare04" (0 = (compare nan1 nan1)) true
+    check "D1nancompare05" (1 = (compare 1. Double.NaN)) true
+    check "D1nancompare06" (1 = (compare 0. Double.NaN)) true
+    check "D1nancompare07" (1 = (compare -1. Double.NaN)) true
+    check "D1nancompare08" (1 = (compare Double.NegativeInfinity Double.NaN)) true
+    check "D1nancompare09" (1 = (compare Double.PositiveInfinity Double.NaN)) true
+    check "D1nancompare10" (1 = (compare Double.MaxValue Double.NaN)) true
+    check "D1nancompare11" (1 = (compare Double.MinValue Double.NaN)) true
+    check "D1nancompare12" (-1 = (compare Double.NaN 1.)) true
+    check "D1nancompare13" (-1 = (compare Double.NaN 0.)) true
+    check "D1nancompare14" (-1 = (compare Double.NaN -1.)) true
+    check "D1nancompare15" (-1 = (compare Double.NaN Double.NegativeInfinity)) true
+    check "D1nancompare16" (-1 = (compare Double.NaN Double.PositiveInfinity)) true
+    check "D1nancompare17" (-1 = (compare Double.NaN Double.MaxValue)) true
+    check "D1nancompare18" (-1 = (compare Double.NaN Double.MinValue)) true
+
+module DoubleNaNNonStructuralComparison1 = 
+    open NonStructuralComparison
+    let nan1 = (let r = ref Double.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0))
+    let nan2 = (let r = ref Double.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0))
+    
+    check "d3wiojd30a" (if (Double.NaN > Double.NaN) then "a" else "b") "b"
+    check "d3wiojd30b" ((Double.NaN >= Double.NaN)) false
+    check "d3wiojd30b" (if (Double.NaN >= Double.NaN) then "a" else "b") "b"
+    check "d3wiojd30c" ((Double.NaN < Double.NaN)) false
+    check "d3wiojd30c" (if (Double.NaN < Double.NaN) then "a" else "b") "b"
+    check "d3wiojd30d" ((Double.NaN <= Double.NaN)) false
+    check "d3wiojd30d" (if (Double.NaN <= Double.NaN) then "a" else "b") "b"
+    check "d3wiojd30e" ((Double.NaN = Double.NaN)) false
+    check "d3wiojd30e" (if (Double.NaN = Double.NaN) then "a" else "b") "b"
+    check "d3wiojd30q" ((Double.NaN <> Double.NaN)) true
+    check "d3wiojd30w" ((Double.NaN > 1.0)) false
+    check "d3wiojd30e" ((Double.NaN >= 1.0)) false
+    check "d3wiojd30r" ((Double.NaN < 1.0)) false
+    check "d3wiojd30t" ((Double.NaN <= 1.0)) false
+    check "d3wiojd30y" ((Double.NaN = 1.0)) false
+    check "d3wiojd30u" ((Double.NaN <> 1.0)) true
+    check "d3wiojd30i" ((1.0 > Double.NaN)) false
+    check "d3wiojd30o" ((1.0 >= Double.NaN)) false
+    check "d3wiojd30p" ((1.0 < Double.NaN)) false
+    check "d3wiojd30a" ((1.0 <= Double.NaN)) false
+    check "d3wiojd30s" ((1.0 = Double.NaN)) false
+    check "d3wiojd30d" ((1.0 <> Double.NaN)) true
+    check "d3wiojd30a" ((nan1 > Double.NaN)) false
+    check "d3wiojd30b" ((nan1 >= nan2)) false
+    check "d3wiojd30c" ((nan1 < nan2)) false
+    check "d3wiojd30d" ((nan1 <= nan2)) false
+    check "d3wiojd30e" ((nan1 = nan2)) false
+    check "d3wiojd30q" ((nan1 <> nan2)) true
+    check "d3wiojd30w" ((nan1 > 1.0)) false
+    check "d3wiojd30e" ((nan1 >= 1.0)) false
+    check "d3wiojd30r" ((nan1 < 1.0)) false
+    check "d3wiojd30t" ((nan1 <= 1.0)) false
+    check "d3wiojd30y" ((nan1 = 1.0)) false
+    check "d3wiojd30u" ((nan1 <> 1.0)) true
+    check "d3wiojd30i" ((1.0 > nan2)) false
+    check "d3wiojd30o" ((1.0 >= nan2)) false
+    check "d3wiojd30p" ((1.0 < nan2)) false
+    check "d3wiojd30a" ((1.0 <= nan2)) false
+    check "d3wiojd30s" ((1.0 = nan2)) false
+    check "d3wiojd30d" ((1.0 <> nan2)) true
+    check "d3wiojd30f" ((Double.NegativeInfinity = Double.NegativeInfinity)) true
+    check "d3wiojd30g" ((Double.NegativeInfinity < Double.PositiveInfinity)) true
+    check "d3wiojd30h" ((Double.NegativeInfinity > Double.PositiveInfinity)) false
+    check "d3wiojd30j" ((Double.NegativeInfinity <= Double.NegativeInfinity)) true
+
+    check "D2nancompare01" (0 = (compare Double.NaN Double.NaN)) true
+    check "D2nancompare02" (0 = (compare Double.NaN nan1)) true
+    check "D2nancompare03" (0 = (compare nan1 Double.NaN)) true
+    check "D2nancompare04" (0 = (compare nan1 nan1)) true
+    check "D2nancompare05" (1 = (compare 1. Double.NaN)) true
+    check "D2nancompare06" (1 = (compare 0. Double.NaN)) true
+    check "D2nancompare07" (1 = (compare -1. Double.NaN)) true
+    check "D2nancompare08" (1 = (compare Double.NegativeInfinity Double.NaN)) true
+    check "D2nancompare09" (1 = (compare Double.PositiveInfinity Double.NaN)) true
+    check "D2nancompare10" (1 = (compare Double.MaxValue Double.NaN)) true
+    check "D2nancompare11" (1 = (compare Double.MinValue Double.NaN)) true
+    check "D2nancompare12" (-1 = (compare Double.NaN 1.)) true
+    check "D2nancompare13" (-1 = (compare Double.NaN 0.)) true
+    check "D2nancompare14" (-1 = (compare Double.NaN -1.)) true
+    check "D2nancompare15" (-1 = (compare Double.NaN Double.NegativeInfinity)) true
+    check "D2nancompare16" (-1 = (compare Double.NaN Double.PositiveInfinity)) true
+    check "D2nancompare17" (-1 = (compare Double.NaN Double.MaxValue)) true
+    check "D2nancompare18" (-1 = (compare Double.NaN Double.MinValue)) true
+
+module DoubleNaNStructured = 
     type www = W of float
-
+    let nan1 = (let r = ref Double.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0))
+    let nan2 = (let r = ref Double.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0))
+    
     do printf "checking floating point relational operators on structured data\n"
     // NOTE: SPECIFICATION: The relational operators work differently when applied to
     // floats embedded in structured data than when applied to raw floats. 
@@ -2930,11 +3013,30 @@ module FloatingPointStructured = begin
     let _ = check "d3wiojd31c" ((W Double.NegativeInfinity < W Double.PositiveInfinity)) true
     let _ = check "d3wiojd3xx" ((W Double.NegativeInfinity > W Double.PositiveInfinity)) false
     let _ = check "d3wiojd31z" ((W Double.NegativeInfinity <= W Double.NegativeInfinity)) true
-end
 
-module FloatingPointStructuredPoly = begin
+    let _ = check "D3nancompare01" (0 = (compare (W Double.NaN) (W Double.NaN))) true
+    let _ = check "D3nancompare02" (0 = (compare (W Double.NaN) (W nan1))) true
+    let _ = check "D3nancompare03" (0 = (compare (W nan1) (W Double.NaN))) true
+    let _ = check "D3nancompare04" (0 = (compare (W nan1) (W nan1))) true
+    let _ = check "D3nancompare05" (1 = (compare (W 1.) (W Double.NaN))) true
+    let _ = check "D3nancompare06" (1 = (compare (W 0.) (W Double.NaN))) true
+    let _ = check "D3nancompare07" (1 = (compare (W -1.) (W Double.NaN))) true
+    let _ = check "D3nancompare08" (1 = (compare (W Double.NegativeInfinity) (W Double.NaN))) true
+    let _ = check "D3nancompare09" (1 = (compare (W Double.PositiveInfinity) (W Double.NaN))) true
+    let _ = check "D3nancompare10" (1 = (compare (W Double.MaxValue) (W Double.NaN))) true
+    let _ = check "D3nancompare11" (1 = (compare (W Double.MinValue) (W Double.NaN))) true
+    let _ = check "D3nancompare12" (-1 = (compare (W Double.NaN) (W 1.))) true
+    let _ = check "D3nancompare13" (-1 = (compare (W Double.NaN) (W 0.))) true
+    let _ = check "D3nancompare14" (-1 = (compare (W Double.NaN) (W -1.))) true
+    let _ = check "D3nancompare15" (-1 = (compare (W Double.NaN) (W Double.NegativeInfinity))) true
+    let _ = check "D3nancompare16" (-1 = (compare (W Double.NaN) (W Double.PositiveInfinity))) true
+    let _ = check "D3nancompare17" (-1 = (compare (W Double.NaN) (W Double.MaxValue))) true
+    let _ = check "D3nancompare18" (-1 = (compare (W Double.NaN) (W Double.MinValue))) true
+
+module DoubleNaNStructuredPoly = 
     type 'a www = W of 'a
-
+    let nan1 = (let r = ref Double.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0))
+    let nan2 = (let r = ref Double.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0))
     do printf "checking floating point relational operators on polymorphic structured data\n"
 
     let _ = check "d3wiojd32q" ((W Double.NaN > W Double.NaN)) false
@@ -2960,9 +3062,273 @@ module FloatingPointStructuredPoly = begin
     let _ = check "d3wiojd32z" ((W Double.NegativeInfinity < W Double.PositiveInfinity)) true
     let _ = check "d3wiojd32x" ((W Double.NegativeInfinity > W Double.PositiveInfinity)) false
     let _ = check "d3wiojd32c" ((W Double.NegativeInfinity <= W Double.NegativeInfinity)) true
-end
 
-module MoreStructuralEqHashCompareNaNChecks = begin
+    let _ = check "D4nancompare01" (0 = (compare (W Double.NaN) (W Double.NaN))) true
+    let _ = check "D4nancompare02" (0 = (compare (W Double.NaN) (W nan1))) true
+    let _ = check "D4nancompare03" (0 = (compare (W nan1) (W Double.NaN))) true
+    let _ = check "D4nancompare04" (0 = (compare (W nan1) (W nan1))) true
+    let _ = check "D4nancompare05" (1 = (compare (W 1.) (W Double.NaN))) true
+    let _ = check "D4nancompare06" (1 = (compare (W 0.) (W Double.NaN))) true
+    let _ = check "D4nancompare07" (1 = (compare (W -1.) (W Double.NaN))) true
+    let _ = check "D4nancompare08" (1 = (compare (W Double.NegativeInfinity) (W Double.NaN))) true
+    let _ = check "D4nancompare09" (1 = (compare (W Double.PositiveInfinity) (W Double.NaN))) true
+    let _ = check "D4nancompare10" (1 = (compare (W Double.MaxValue) (W Double.NaN))) true
+    let _ = check "D4nancompare11" (1 = (compare (W Double.MinValue) (W Double.NaN))) true
+    let _ = check "D4nancompare12" (-1 = (compare (W Double.NaN) (W 1.))) true
+    let _ = check "D4nancompare13" (-1 = (compare (W Double.NaN) (W 0.))) true
+    let _ = check "D4nancompare14" (-1 = (compare (W Double.NaN) (W -1.))) true
+    let _ = check "D4nancompare15" (-1 = (compare (W Double.NaN) (W Double.NegativeInfinity))) true
+    let _ = check "D4nancompare16" (-1 = (compare (W Double.NaN) (W Double.PositiveInfinity))) true
+    let _ = check "D4nancompare17" (-1 = (compare (W Double.NaN) (W Double.MaxValue))) true
+    let _ = check "D4nancompare18" (-1 = (compare (W Double.NaN) (W Double.MinValue))) true
+
+(* ----- NaN tests for SINGLE ----- *)
+
+module SingleNaN =
+    let nan1 = (let r = ref Single.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0f))
+    let nan2 = (let r = ref Single.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0f))
+
+    do printf "checking floating point relational operators\n"
+    let _ = check "d3wiojd30a" ((Single.NaN > Single.NaN)) false
+    check "d3wiojd30a" (if (Single.NaN > Single.NaN) then "a" else "b") "b"
+    check "d3wiojd30b" ((Single.NaN >= Single.NaN)) false
+    check "d3wiojd30b" (if (Single.NaN >= Single.NaN) then "a" else "b") "b"
+    check "d3wiojd30c" ((Single.NaN < Single.NaN)) false
+    check "d3wiojd30c" (if (Single.NaN < Single.NaN) then "a" else "b") "b"
+    check "d3wiojd30d" ((Single.NaN <= Single.NaN)) false
+    check "d3wiojd30d" (if (Single.NaN <= Single.NaN) then "a" else "b") "b"
+    check "d3wiojd30e" ((Single.NaN = Single.NaN)) false
+    check "d3wiojd30e" (if (Single.NaN = Single.NaN) then "a" else "b") "b"
+    check "d3wiojd30q" ((Single.NaN <> Single.NaN)) true
+    check "d3wiojd30w" ((Single.NaN > 1.0f)) false
+    check "d3wiojd30e" ((Single.NaN >= 1.0f)) false
+    check "d3wiojd30r" ((Single.NaN < 1.0f)) false
+    check "d3wiojd30t" ((Single.NaN <= 1.0f)) false
+    check "d3wiojd30y" ((Single.NaN = 1.0f)) false
+    check "d3wiojd30u" ((Single.NaN <> 1.0f)) true
+    check "d3wiojd30i" ((1.0f > Single.NaN)) false
+    check "d3wiojd30o" ((1.0f >= Single.NaN)) false
+    check "d3wiojd30p" ((1.0f < Single.NaN)) false
+    check "d3wiojd30a" ((1.0f <= Single.NaN)) false
+    check "d3wiojd30s" ((1.0f = Single.NaN)) false
+    check "d3wiojd30d" ((1.0f <> Single.NaN)) true
+    check "d3wiojd30a" ((nan1 > Single.NaN)) false
+    check "d3wiojd30b" ((nan1 >= nan2)) false
+    check "d3wiojd30c" ((nan1 < nan2)) false
+    check "d3wiojd30d" ((nan1 <= nan2)) false
+    check "d3wiojd30e" ((nan1 = nan2)) false
+    check "d3wiojd30q" ((nan1 <> nan2)) true
+    check "d3wiojd30w" ((nan1 > 1.0f)) false
+    check "d3wiojd30e" ((nan1 >= 1.0f)) false
+    check "d3wiojd30r" ((nan1 < 1.0f)) false
+    check "d3wiojd30t" ((nan1 <= 1.0f)) false
+    check "d3wiojd30y" ((nan1 = 1.0f)) false
+    check "d3wiojd30u" ((nan1 <> 1.0f)) true
+    check "d3wiojd30i" ((1.0f > nan2)) false
+    check "d3wiojd30o" ((1.0f >= nan2)) false
+    check "d3wiojd30p" ((1.0f < nan2)) false
+    check "d3wiojd30a" ((1.0f <= nan2)) false
+    check "d3wiojd30s" ((1.0f = nan2)) false
+    check "d3wiojd30d" ((1.0f <> nan2)) true
+    check "d3wiojd30f" ((Single.NegativeInfinity = Single.NegativeInfinity)) true
+    check "d3wiojd30g" ((Single.NegativeInfinity < Single.PositiveInfinity)) true
+    check "d3wiojd30h" ((Single.NegativeInfinity > Single.PositiveInfinity)) false
+    check "d3wiojd30j" ((Single.NegativeInfinity <= Single.NegativeInfinity)) true
+
+    check "S1nancompare01" (0 = (compare Single.NaN Single.NaN)) true
+    check "S1nancompare02" (0 = (compare Single.NaN nan1)) true
+    check "S1nancompare03" (0 = (compare nan1 Single.NaN)) true
+    check "S1nancompare04" (0 = (compare nan1 nan1)) true
+    check "S1nancompare05" (1 = (compare 1.f Single.NaN)) true
+    check "S1nancompare06" (1 = (compare 0.f Single.NaN)) true
+    check "S1nancompare07" (1 = (compare -1.f Single.NaN)) true
+    check "S1nancompare08" (1 = (compare Single.NegativeInfinity Single.NaN)) true
+    check "S1nancompare09" (1 = (compare Single.PositiveInfinity Single.NaN)) true
+    check "S1nancompare10" (1 = (compare Single.MaxValue Single.NaN)) true
+    check "S1nancompare11" (1 = (compare Single.MinValue Single.NaN)) true
+    check "S1nancompare12" (-1 = (compare Single.NaN 1.f)) true
+    check "S1nancompare13" (-1 = (compare Single.NaN 0.f)) true
+    check "S1nancompare14" (-1 = (compare Single.NaN -1.f)) true
+    check "S1nancompare15" (-1 = (compare Single.NaN Single.NegativeInfinity)) true
+    check "S1nancompare16" (-1 = (compare Single.NaN Single.PositiveInfinity)) true
+    check "S1nancompare17" (-1 = (compare Single.NaN Single.MaxValue)) true
+    check "S1nancompare18" (-1 = (compare Single.NaN Single.MinValue)) true
+
+module SingleNaNNonStructuralComparison1 = 
+    open NonStructuralComparison
+    
+    let nan1 = (let r = ref Single.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0f))
+    let nan2 = (let r = ref Single.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0f))
+    
+    check "d3wiojd30a" (if (Single.NaN > Single.NaN) then "a" else "b") "b"
+    check "d3wiojd30b" ((Single.NaN >= Single.NaN)) false
+    check "d3wiojd30b" (if (Single.NaN >= Single.NaN) then "a" else "b") "b"
+    check "d3wiojd30c" ((Single.NaN < Single.NaN)) false
+    check "d3wiojd30c" (if (Single.NaN < Single.NaN) then "a" else "b") "b"
+    check "d3wiojd30d" ((Single.NaN <= Single.NaN)) false
+    check "d3wiojd30d" (if (Single.NaN <= Single.NaN) then "a" else "b") "b"
+    check "d3wiojd30e" ((Single.NaN = Single.NaN)) false
+    check "d3wiojd30e" (if (Single.NaN = Single.NaN) then "a" else "b") "b"
+    check "d3wiojd30q" ((Single.NaN <> Single.NaN)) true
+    check "d3wiojd30w" ((Single.NaN > 1.0f)) false
+    check "d3wiojd30e" ((Single.NaN >= 1.0f)) false
+    check "d3wiojd30r" ((Single.NaN < 1.0f)) false
+    check "d3wiojd30t" ((Single.NaN <= 1.0f)) false
+    check "d3wiojd30y" ((Single.NaN = 1.0f)) false
+    check "d3wiojd30u" ((Single.NaN <> 1.0f)) true
+    check "d3wiojd30i" ((1.0f > Single.NaN)) false
+    check "d3wiojd30o" ((1.0f >= Single.NaN)) false
+    check "d3wiojd30p" ((1.0f < Single.NaN)) false
+    check "d3wiojd30a" ((1.0f <= Single.NaN)) false
+    check "d3wiojd30s" ((1.0f = Single.NaN)) false
+    check "d3wiojd30d" ((1.0f <> Single.NaN)) true
+    check "d3wiojd30a" ((nan1 > Single.NaN)) false
+    check "d3wiojd30b" ((nan1 >= nan2)) false
+    check "d3wiojd30c" ((nan1 < nan2)) false
+    check "d3wiojd30d" ((nan1 <= nan2)) false
+    check "d3wiojd30e" ((nan1 = nan2)) false
+    check "d3wiojd30q" ((nan1 <> nan2)) true
+    check "d3wiojd30w" ((nan1 > 1.0f)) false
+    check "d3wiojd30e" ((nan1 >= 1.0f)) false
+    check "d3wiojd30r" ((nan1 < 1.0f)) false
+    check "d3wiojd30t" ((nan1 <= 1.0f)) false
+    check "d3wiojd30y" ((nan1 = 1.0f)) false
+    check "d3wiojd30u" ((nan1 <> 1.0f)) true
+    check "d3wiojd30i" ((1.0f > nan2)) false
+    check "d3wiojd30o" ((1.0f >= nan2)) false
+    check "d3wiojd30p" ((1.0f < nan2)) false
+    check "d3wiojd30a" ((1.0f <= nan2)) false
+    check "d3wiojd30s" ((1.0f = nan2)) false
+    check "d3wiojd30d" ((1.0f <> nan2)) true
+    check "d3wiojd30f" ((Single.NegativeInfinity = Single.NegativeInfinity)) true
+    check "d3wiojd30g" ((Single.NegativeInfinity < Single.PositiveInfinity)) true
+    check "d3wiojd30h" ((Single.NegativeInfinity > Single.PositiveInfinity)) false
+    check "d3wiojd30j" ((Single.NegativeInfinity <= Single.NegativeInfinity)) true
+
+    check "S2nancompare01" (0 = (compare Single.NaN Single.NaN)) true
+    check "S2nancompare02" (0 = (compare Single.NaN nan1)) true
+    check "S2nancompare03" (0 = (compare nan1 Single.NaN)) true
+    check "S2nancompare04" (0 = (compare nan1 nan1)) true
+    check "S2nancompare05" (1 = (compare 1.f Single.NaN)) true
+    check "S2nancompare06" (1 = (compare 0.f Single.NaN)) true
+    check "S2nancompare07" (1 = (compare -1.f Single.NaN)) true
+    check "S2nancompare08" (1 = (compare Single.NegativeInfinity Single.NaN)) true
+    check "S2nancompare09" (1 = (compare Single.PositiveInfinity Single.NaN)) true
+    check "S2nancompare10" (1 = (compare Single.MaxValue Single.NaN)) true
+    check "S2nancompare11" (1 = (compare Single.MinValue Single.NaN)) true
+    check "S2nancompare12" (-1 = (compare Single.NaN 1.f)) true
+    check "S2nancompare13" (-1 = (compare Single.NaN 0.f)) true
+    check "S2nancompare14" (-1 = (compare Single.NaN -1.f)) true
+    check "S2nancompare15" (-1 = (compare Single.NaN Single.NegativeInfinity)) true
+    check "S2nancompare16" (-1 = (compare Single.NaN Single.PositiveInfinity)) true
+    check "S2nancompare17" (-1 = (compare Single.NaN Single.MaxValue)) true
+    check "S2nancompare18" (-1 = (compare Single.NaN Single.MinValue)) true
+
+module SingleNaNStructured = 
+    type www = W of single
+
+    let nan1 = (let r = ref Single.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0f))
+    let nan2 = (let r = ref Single.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0f))
+    
+    do printf "checking floating point relational operators on structured data\n"
+    // NOTE: SPECIFICATION: The relational operators work differently when applied to
+    // floats embedded in structured data than when applied to raw floats. 
+
+    let _ = check "d3wiojd31q" ((W Single.NaN > W Single.NaN)) false
+    let _ = check "d3wiojd31w" ((W Single.NaN >= W Single.NaN)) false
+    let _ = check "d3wiojd31e" ((W Single.NaN < W Single.NaN)) false
+    let _ = check "d3wiojd31r" ((W Single.NaN <= W Single.NaN)) false
+    let _ = check "d3wiojd31ty" ((W Single.NaN = W Single.NaN)) false
+    let _ = check "d3wiojd31y" ((W Single.NaN <> W Single.NaN)) true
+    let _ = check "d3wiojd31dy" (0 = compare (W Single.NaN) (W Single.NaN)) true
+    let _ = check "d3wiojd31u" ((W Single.NaN > W 1.0f)) false
+    let _ = check "d3wiojd31i" ((W Single.NaN >= W 1.0f)) false
+    let _ = check "d3wiojd31o" ((W Single.NaN < W 1.0f)) false
+    let _ = check "d3wiojd31p" ((W Single.NaN <= W 1.0f)) false
+    let _ = check "d3wiojd31a" ((W Single.NaN = W 1.0f)) false
+    let _ = check "d3wiojd31s" ((W Single.NaN <> W 1.0f)) true
+    let _ = check "d3wiojd31d" ((W 1.0f > W Single.NaN)) false
+    let _ = check "d3wiojd31f" ((W 1.0f >= W Single.NaN)) false
+    let _ = check "d3wiojd31g" ((W 1.0f < W Single.NaN)) false
+    let _ = check "d3wiojd31h" ((W 1.0f <= W Single.NaN)) false
+    let _ = check "d3wiojd31j" ((W 1.0f = W Single.NaN)) false
+    let _ = check "d3wiojd31k" ((W 1.0f <> W Single.NaN)) true
+    let _ = check "d3wiojd31l" ((W Single.NegativeInfinity = W Single.NegativeInfinity)) true
+    let _ = check "d3wiojd31c" ((W Single.NegativeInfinity < W Single.PositiveInfinity)) true
+    let _ = check "d3wiojd3xx" ((W Single.NegativeInfinity > W Single.PositiveInfinity)) false
+    let _ = check "d3wiojd31z" ((W Single.NegativeInfinity <= W Single.NegativeInfinity)) true
+
+    let _ = check "S3nancompare01" (0 = (compare (W Single.NaN) (W Single.NaN))) true
+    let _ = check "S3nancompare02" (0 = (compare (W Single.NaN) (W nan1))) true
+    let _ = check "S3nancompare03" (0 = (compare (W nan1) (W Single.NaN))) true
+    let _ = check "S3nancompare04" (0 = (compare (W nan1) (W nan1))) true
+    let _ = check "S3nancompare05" (1 = (compare (W 1.f) (W Single.NaN))) true
+    let _ = check "S3nancompare06" (1 = (compare (W 0.f) (W Single.NaN))) true
+    let _ = check "S3nancompare07" (1 = (compare (W -1.f) (W Single.NaN))) true
+    let _ = check "S3nancompare08" (1 = (compare (W Single.NegativeInfinity) (W Single.NaN))) true
+    let _ = check "S3nancompare09" (1 = (compare (W Single.PositiveInfinity) (W Single.NaN))) true
+    let _ = check "S3nancompare10" (1 = (compare (W Single.MaxValue) (W Single.NaN))) true
+    let _ = check "S3nancompare11" (1 = (compare (W Single.MinValue) (W Single.NaN))) true
+    let _ = check "S3nancompare12" (-1 = (compare (W Single.NaN) (W 1.f))) true
+    let _ = check "S3nancompare13" (-1 = (compare (W Single.NaN) (W 0.f))) true
+    let _ = check "S3nancompare14" (-1 = (compare (W Single.NaN) (W -1.f))) true
+    let _ = check "S3nancompare15" (-1 = (compare (W Single.NaN) (W Single.NegativeInfinity))) true
+    let _ = check "S3nancompare16" (-1 = (compare (W Single.NaN) (W Single.PositiveInfinity))) true
+    let _ = check "S3nancompare17" (-1 = (compare (W Single.NaN) (W Single.MaxValue))) true
+    let _ = check "S3nancompare18" (-1 = (compare (W Single.NaN) (W Single.MinValue))) true
+
+module SingleNaNStructuredPoly = 
+    type 'a www = W of 'a
+
+    let nan1 = (let r = ref Single.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0f))
+    let nan2 = (let r = ref Single.NaN in (if sprintf "Hello" = "Hello" then !r else 0.0f))
+    
+    do printf "checking floating point relational operators on polymorphic structured data\n"
+
+    let _ = check "d3wiojd32q" ((W Single.NaN > W Single.NaN)) false
+    let _ = check "d3wiojd32w" ((W Single.NaN >= W Single.NaN)) false
+    let _ = check "d3wiojd32e" ((W Single.NaN < W Single.NaN)) false
+    let _ = check "d3wiojd32r" ((W Single.NaN <= W Single.NaN)) false
+    let _ = check "d3wiojd32t" ((W Single.NaN = W Single.NaN)) false
+    let _ = check "d3wiojd32dt" ((W Single.NaN).Equals(W Single.NaN)) true
+    let _ = check "d3wiojd32y" ((W Single.NaN <> W Single.NaN)) true
+    let _ = check "d3wiojd32u" ((W Single.NaN > W 1.0f)) false
+    let _ = check "d3wiojd32i" ((W Single.NaN >= W 1.0f)) false
+    let _ = check "d3wiojd32o" ((W Single.NaN < W 1.0f)) false
+    let _ = check "d3wiojd32p" ((W Single.NaN <= W 1.0f)) false
+    let _ = check "d3wiojd32a" ((W Single.NaN = W 1.0f)) false
+    let _ = check "d3wiojd32s" ((W Single.NaN <> W 1.0f)) true
+    let _ = check "d3wiojd32d" ((W 1.0f > W Single.NaN)) false
+    let _ = check "d3wiojd32f" ((W 1.0f >= W Single.NaN)) false
+    let _ = check "d3wiojd32g" ((W 1.0f < W Single.NaN)) false
+    let _ = check "d3wiojd32h" ((W 1.0f <= W Single.NaN)) false
+    let _ = check "d3wiojd32j" ((W 1.0f = W Single.NaN)) false
+    let _ = check "d3wiojd32k" ((W 1.0f <> W Single.NaN)) true
+    let _ = check "d3wiojd32l" ((W Single.NegativeInfinity = W Single.NegativeInfinity)) true
+    let _ = check "d3wiojd32z" ((W Single.NegativeInfinity < W Single.PositiveInfinity)) true
+    let _ = check "d3wiojd32x" ((W Single.NegativeInfinity > W Single.PositiveInfinity)) false
+    let _ = check "d3wiojd32c" ((W Single.NegativeInfinity <= W Single.NegativeInfinity)) true
+
+    let _ = check "S4nancompare01" (0 = (compare (W Single.NaN) (W Single.NaN))) true
+    let _ = check "S4nancompare02" (0 = (compare (W Single.NaN) (W nan1))) true
+    let _ = check "S4nancompare03" (0 = (compare (W nan1) (W Single.NaN))) true
+    let _ = check "S4nancompare04" (0 = (compare (W nan1) (W nan1))) true
+    let _ = check "S4nancompare05" (1 = (compare (W 1.f) (W Single.NaN))) true
+    let _ = check "S4nancompare06" (1 = (compare (W 0.f) (W Single.NaN))) true
+    let _ = check "S4nancompare07" (1 = (compare (W -1.f) (W Single.NaN))) true
+    let _ = check "S4nancompare08" (1 = (compare (W Single.NegativeInfinity) (W Single.NaN))) true
+    let _ = check "S4nancompare09" (1 = (compare (W Single.PositiveInfinity) (W Single.NaN))) true
+    let _ = check "S4nancompare10" (1 = (compare (W Single.MaxValue) (W Single.NaN))) true
+    let _ = check "S4nancompare11" (1 = (compare (W Single.MinValue) (W Single.NaN))) true
+    let _ = check "S4nancompare12" (-1 = (compare (W Single.NaN) (W 1.f))) true
+    let _ = check "S4nancompare13" (-1 = (compare (W Single.NaN) (W 0.f))) true
+    let _ = check "S4nancompare14" (-1 = (compare (W Single.NaN) (W -1.f))) true
+    let _ = check "S4nancompare15" (-1 = (compare (W Single.NaN) (W Single.NegativeInfinity))) true
+    let _ = check "S4nancompare16" (-1 = (compare (W Single.NaN) (W Single.PositiveInfinity))) true
+    let _ = check "S4nancompare17" (-1 = (compare (W Single.NaN) (W Single.MaxValue))) true
+    let _ = check "S4nancompare18" (-1 = (compare (W Single.NaN) (W Single.MinValue))) true
+    
+module MoreStructuralEqHashCompareNaNChecks = 
     let test398275413() =
         let floats = [1.0; 0.0; System.Double.NaN; System.Double.NegativeInfinity; System.Double.PositiveInfinity; nan] in
         for x in floats do
@@ -3199,7 +3565,7 @@ module MoreStructuralEqHashCompareNaNChecks = begin
         
     let _ = test398275416()    
     
-end
+
 
 // This test tests basic behavior of IEquatable and IComparable augmentations     
 module GenericComparisonAndEquality = begin
@@ -3384,9 +3750,9 @@ module Seq =
     let generate openf compute closef = 
         seq { let r = openf() 
               try 
-                let x = ref None
-                while (x := compute r; (!x).IsSome) do
-                    yield (!x).Value
+                let mutable x = None
+                while (x <- compute r; x.IsSome) do
+                    yield x.Value
               finally
                  closef r }
 
@@ -3482,7 +3848,7 @@ do printf "Test c27mog7keh2\n"; stdout.Flush();  let f x    = if x%2 =0 then Som
 do printf "Test c2e8,h2\n"; stdout.Flush();  let f z x  = (z+1) * x % 1397    in verify(List.fold f 2 xxs = Seq.fold f 2 xie)
 do printfn "seq reduce"; if Seq.reduce (fun x y -> x/y) [5*4*3*2; 4;3;2;1] = 5 then stdout.WriteLine "YES" else  reportFailure "basic test Q"
 
-do printf "Test c2grgeh2\n"; stdout.Flush();  verify(List.nth xxs 3 = Seq.nth 3 xie)  (* err: args wrong way around for List.nth *)
+do printf "Test c2grgeh2\n"; stdout.Flush();  verify(List.item 3 xxs = Seq.item 3 xie)
 
 
 (*---------------------------------------------------------------------------
@@ -4268,6 +4634,188 @@ do check "cenonoiwc" (int64 4UL) 4L
 do check "cenonoiwc" (uint64 4UL) 4UL
 do check "cenonoiwc" (match null with null -> 2 | _ -> 1) 2
 
+module SameTestsUsingNonStructuralComparison2 =
+    open NonStructuralComparison
+
+    do check "ffcenonoiwe1" (3 > 1) true
+    do check "ffcenonoiwe2" (3y > 1y) true
+    do check "ffcenonoiwe3" (3uy > 1uy) true
+    do check "ffcenonoiwe4" (3s > 1s) true
+    do check "ffcenonoiwe5" (3us > 1us) true
+    do check "ffcenonoiwe6" (3 > 1) true
+    do check "ffcenonoiwe7" (3u > 1u) true
+    do check "ffcenonoiwe8" (3L > 1L) true
+    do check "ffcenonoiwe9" (3UL > 1UL) true
+    do check "ffcenonoiwe9" (3.14 > 3.1) true
+    do check "ffcenonoiwe9" (3.14f > 3.1f) true
+    do check "ffcenonoiwe9" ("bbb" > "aaa") true
+    do check "ffcenonoiwe9" ("bbb" > "bbb") false
+    do check "ffcenonoiwe9" ("aaa" > "bbb") false
+    do check "ffcenonoiwe9" ('b' > 'a') true
+    do check "ffcenonoiwe9" ('a' > 'b') false
+    do check "ffcenonoiwe9" ('b' > 'b') false
+
+    do check "ffcenonoiwea" (3 >= 3) true
+    do check "ffcenonoiwes" (3y >= 3y) true
+    do check "ffcenonoiwed" (3uy >= 3uy) true
+    do check "ffcenonoiwef" (3s >= 3s) true
+    do check "ffcenonoiweg" (3us >= 3us) true
+    do check "ffcenonoiweh" (3 >= 3) true
+    do check "ffcenonoiwej" (3u >= 3u) true
+    do check "ffcenonoiwek" (3L >= 3L) true
+    do check "ffcenonoiwel" (3UL >= 3UL) true
+    do check "ffcenonoiwem" (3.14 >= 3.1) true
+    do check "ffcenonoiwen" (3.14f >= 3.1f) true
+    do check "ffcenonoiwen" (3.14M >= 3.1M) true
+    do check "ffcenonoiwe91r" ("bbb" >= "aaa") true
+    do check "ffcenonoiwe92r" ("bbb" >= "bbb") true
+    do check "ffcenonoiwe93r" ("aaa" >= "bbb") false
+    do check "ffcenonoiwe94r" ('b' >= 'a') true
+    do check "ffcenonoiwe95r" ('a' >= 'b') false
+    do check "ffcenonoiwe96r" ('b' >= 'b') true
+
+
+    do check "ffcenonoiwd1" (3 < 1) false
+    do check "ffcenonoiwd2" (3y < 1y) false
+    do check "ffcenonoiwd3" (3uy < 1uy) false
+    do check "ffcenonoiwd4" (3s < 1s) false
+    do check "ffcenonoiwd5" (3us < 1us) false
+    do check "ffcenonoiwd6" (3 < 1) false
+    do check "ffcenonoiwd7" (3u < 1u) false
+    do check "ffcenonoiwd8" (3L < 1L) false
+    do check "ffcenonoiwd9" (3UL < 1UL) false
+    do check "ffcenonoiwd9" (3.14 < 1.0) false
+    do check "ffcenonoiwd9" (3.14f < 1.0f) false
+    do check "ffcenonoiwd9" (3.14M < 1.0M) false
+    do check "ffcenonoiwe91a" ("bbb" < "aaa") false
+    do check "ffcenonoiwe92a" ("bbb" < "bbb") false
+    do check "ffcenonoiwe93a" ("aaa" < "bbb") true
+    do check "ffcenonoiwe94a" ('b' < 'a') false
+    do check "ffcenonoiwe95a" ('a' < 'b') true
+    do check "ffcenonoiwe96a" ('b' < 'b') false
+
+
+    do check "ffcenonoiwdq" (3 <= 1) false
+    do check "ffcenonoiwdw" (3y <= 1y) false
+    do check "ffcenonoiwde" (3uy <= 1uy) false
+    do check "ffcenonoiwdr" (3s <= 1s) false
+    do check "ffcenonoiwdt" (3us <= 1us) false
+    do check "ffcenonoiwdy" (3 <= 1) false
+    do check "ffcenonoiwdu" (3u <= 1u) false
+    do check "ffcenonoiwdi" (3L <= 1L) false
+    do check "ffcenonoiwdo" (3UL <= 1UL) false
+    do check "ffcenonoiwdg" (3.14 <= 1.0) false
+    do check "ffcenonoiwdt" (3.14f <= 1.0f) false
+    do check "ffcenonoiwdt" (3.14M <= 1.0M) false
+    do check "ffcenonoiwe91q" ("bbb" <= "aaa") false
+    do check "ffcenonoiwe92q" ("bbb" <= "bbb") true
+    do check "ffcenonoiwe93q" ("aaa" <= "bbb") true
+    do check "ffcenonoiwe94q" ('b' <= 'a') false
+    do check "ffcenonoiwe95q" ('a' <= 'b') true
+    do check "ffcenonoiwe96q" ('b' <= 'b') true
+
+
+    do check "ffcenonoiwda" (3 <= 3) true
+    do check "ffcenonoiwds" (3y <= 3y) true
+    do check "ffcenonoiwdd" (3uy <= 3uy) true
+    do check "ffcenonoiwdf" (3s <= 3s) true
+    do check "ffcenonoiwdg" (3us <= 3us) true
+    do check "ffcenonoiwdh" (3 <= 3) true
+    do check "ffcenonoiwdj" (3u <= 3u) true
+    do check "ffcenonoiwdk" (3L <= 3L) true
+    do check "ffcenonoiwdl" (3UL <= 3UL) true
+    do check "ffcenonoiwdo" (3.14 <= 3.14) true
+    do check "ffcenonoiwdp" (3.14f <= 3.14f) true
+    do check "ffcenonoiwdp" (3.14M <= 3.14M) true
+
+
+module NonStructuralComparisonOverDateTime =
+    open NonStructuralComparison
+    let now = System.DateTime.Now
+    let tom = now.AddDays 1.0
+    do check "ffcenonoiwe90" (now = tom) false
+    do check "ffcenonoiwe9q" (now <> tom) true
+    do check "ffcenonoiwe91" (now < tom) true
+    do check "ffcenonoiwe92" (now <= now) true
+    do check "ffcenonoiwe93" (now <= tom) true
+    do check "ffcenonoiwe94" (tom > now) true
+    do check "ffcenonoiwe95" (now >= now) true
+    do check "ffcenonoiwe96" (tom >= now) true
+    do check "ffcenonoiwe97" (compare now now) 0
+    do check "ffcenonoiwe98" (compare now tom) -1
+    do check "ffcenonoiwe99" (compare tom now) 1
+    do check "ffcenonoiwe9a" (max tom tom) tom
+    do check "ffcenonoiwe9b" (max tom now) tom
+    do check "ffcenonoiwe9c" (max now tom) tom
+    do check "ffcenonoiwe9d" (min tom tom) tom
+    do check "ffcenonoiwe9e" (min tom now) now
+    do check "ffcenonoiwe9f" (min now tom) now
+
+    do check "ffcenonoiwe97a1" (ComparisonIdentity.NonStructural.Compare (1, 1)) 0
+    do check "ffcenonoiwe98b2" (ComparisonIdentity.NonStructural.Compare (0, 1)) -1
+    do check "ffcenonoiwe99c3" (ComparisonIdentity.NonStructural.Compare (1, 0)) 1
+
+    do check "ffcenonoiwe97a4" (ComparisonIdentity.NonStructural.Compare (now, now)) 0
+    do check "ffcenonoiwe98b5" (ComparisonIdentity.NonStructural.Compare (now, tom)) -1
+    do check "ffcenonoiwe99c6" (ComparisonIdentity.NonStructural.Compare (tom, now)) 1
+
+    do check "ffcenonoiwe97a7" (HashIdentity.NonStructural.Equals (now, now)) true
+    do check "ffcenonoiwe98b8" (HashIdentity.NonStructural.Equals (now, tom)) false
+    do check "ffcenonoiwe99c9" (HashIdentity.NonStructural.Equals (tom, now)) false
+
+    do check "ffcenonoiwe97a7" (HashIdentity.NonStructural.GetHashCode now) (hash now)
+    do check "ffcenonoiwe97a7" (HashIdentity.NonStructural.GetHashCode tom) (hash tom)
+    do check "ffcenonoiwe97a7" (HashIdentity.NonStructural.GetHashCode 11) (hash 11)
+    do check "ffcenonoiwe97a7" (HashIdentity.NonStructural.GetHashCode 11L) (hash 11L)
+    do check "ffcenonoiwe97a7" (HashIdentity.NonStructural.GetHashCode 11UL) (hash 11UL)
+
+    do check "ffcenonoiwe97aa" (HashIdentity.NonStructural.Equals (1, 1)) true
+    do check "ffcenonoiwe98bb" (HashIdentity.NonStructural.Equals (1, 0)) false
+    do check "ffcenonoiwe99cc" (HashIdentity.NonStructural.Equals (0, 1)) false
+
+
+module NonStructuralComparisonOverTimeSpan =
+    open NonStructuralComparison
+    let now = System.TimeSpan.Zero
+    let tom = System.TimeSpan.FromDays 1.0
+    do check "tscenonoiwe90" (now = tom) false
+    do check "tscenonoiwe9q" (now <> tom) true
+    do check "tscenonoiwe91" (now < tom) true
+    do check "tscenonoiwe92" (now <= now) true
+    do check "tscenonoiwe93" (now <= tom) true
+    do check "tscenonoiwe94" (tom > now) true
+    do check "tscenonoiwe95" (now >= now) true
+    do check "tscenonoiwe96" (tom >= now) true
+    do check "tscenonoiwe97" (compare now now) 0
+    do check "tscenonoiwe98" (compare now tom) -1
+    do check "tscenonoiwe99" (compare tom now) 1
+    do check "tscenonoiwe9a" (max tom tom) tom
+    do check "tscenonoiwe9b" (max tom now) tom
+    do check "tscenonoiwe9c" (max now tom) tom
+    do check "tscenonoiwe9d" (min tom tom) tom
+    do check "tscenonoiwe9e" (min tom now) now
+    do check "tscenonoiwe9f" (min now tom) now
+
+
+// Check you can use the operators without opening the module by naming them
+module NonStructuralComparisonOverTimeSpanDirect =
+    let now = System.TimeSpan.Zero
+    let tom = System.TimeSpan.FromDays 1.0
+    do check "tscenonoiwe90" (NonStructuralComparison.(=) now tom) false
+    do check "tscenonoiwe9q" (NonStructuralComparison.(<>) now tom) true
+    do check "tscenonoiwe91" (NonStructuralComparison.(<) now tom) true
+    do check "tscenonoiwe92" (NonStructuralComparison.(<=) now now) true
+    do check "tscenonoiwe94" (NonStructuralComparison.(>) tom now) true
+    do check "tscenonoiwe95" (NonStructuralComparison.(>=) now now) true
+    do check "tscenonoiwe97" (NonStructuralComparison.compare now now) 0
+    do check "tscenonoiwe9a" (NonStructuralComparison.max tom now) tom
+    do check "tscenonoiwe9e" (NonStructuralComparison.min tom now) now
+
+    do check "ffcenonoiwe97a7" (NonStructuralComparison.hash now) (Operators.hash now)
+    do check "ffcenonoiwe97a7" (NonStructuralComparison.hash tom) (Operators.hash tom)
+    do check "ffcenonoiwe97a7" (NonStructuralComparison.hash 11) (Operators.hash 11)
+    do check "ffcenonoiwe97a7" (NonStructuralComparison.hash 11L) (Operators.hash 11L)
+    do check "ffcenonoiwe97a7" (NonStructuralComparison.hash 11UL) (Operators.hash 11UL)
 
 (*---------------------------------------------------------------------------
 !* Bug 1029: Support conversion functions named after C# type names? e.g. uint for uint32
@@ -4468,7 +5016,7 @@ do check "bug5995.Enum.B" (string ToStringEnum.B) "B"
 
 module Check1178 = begin
   do printf "\n\nTest 1178: check finite/infinite sequences have lazy (f i) for each i\n\n"  
-  (* Test cases for Seq.nth. *)
+  (* Test cases for Seq.item. *)
   let counter = ref 0
   let reset r = r := 0
   let fails f = try f() |> ignore;false with _ -> true
@@ -4476,16 +5024,16 @@ module Check1178 = begin
   
   (* Bug 1178: Check Seq.init only computes f on the items requested *)
   let initial_100 = Seq.init 100 (fun i -> incr counter; i)
-  do reset counter; claim(Seq.nth 0  initial_100=0);  claim(!counter = 1)
-  do reset counter; claim(Seq.nth 50 initial_100=50); claim(!counter = 1)
-  do reset counter; claim(fails (fun () -> Seq.nth 100 initial_100));   claim(!counter = 0)
-  do reset counter; claim(fails (fun () -> Seq.nth (-10) initial_100)); claim(!counter = 0)
+  do reset counter; claim(Seq.item 0  initial_100=0);  claim(!counter = 1)
+  do reset counter; claim(Seq.item 50 initial_100=50); claim(!counter = 1)
+  do reset counter; claim(fails (fun () -> Seq.item 100 initial_100));   claim(!counter = 0)
+  do reset counter; claim(fails (fun () -> Seq.item (-10) initial_100)); claim(!counter = 0)
 
   let initial_w = Seq.initInfinite (fun i -> incr counter; i)
-  do reset counter; claim(Seq.nth 0  initial_w=0);  claim(!counter = 1)
-  do reset counter; claim(Seq.nth 50 initial_w=50); claim(!counter = 1)
-  do reset counter; claim(fails (fun () -> Seq.nth (-10) initial_w)); claim(!counter = 0)
-  do reset counter; claim(fails (fun () -> Seq.nth (-1) initial_w)); claim(!counter = 0)
+  do reset counter; claim(Seq.item 0  initial_w=0);  claim(!counter = 1)
+  do reset counter; claim(Seq.item 50 initial_w=50); claim(!counter = 1)
+  do reset counter; claim(fails (fun () -> Seq.item (-10) initial_w)); claim(!counter = 0)
+  do reset counter; claim(fails (fun () -> Seq.item (-1) initial_w)); claim(!counter = 0)
 
   (* Check *)
   let on p f x y = f (p x) (p y)
diff --git a/tests/fsharp/core/measures/test.fsx b/tests/fsharp/core/measures/test.fsx
index 33335ebef74..8b5106e13e1 100644
--- a/tests/fsharp/core/measures/test.fsx
+++ b/tests/fsharp/core/measures/test.fsx
@@ -74,6 +74,8 @@ module FLOAT =
  let x6 = - (2.0)
  let x7 = abs (-2.0)
  let x8 = sqrt (4.0)
+ let x8a = sqrt (4.0)
+ let x8b = sqrt (4.0)
  let x9 = [ 1.0 .. 1.0 .. 4.0 ]
  let x10 = sign (3.0)
  let x11 = atan2 4.4 5.4
@@ -147,6 +149,8 @@ module FLOAT =
  test "x6" (x6 = -2.0)
  test "x7" (x7 = 2.0)
  test "x8" (x8 = 2.0)
+ test "x8a" (x8a = 2.0)
+ test "x8b" (x8b = 2.0)
  test "x9" (x9 = [1.0; 2.0; 3.0; 4.0])
  test "x10" (x10 = 1)
  test "x12" (x12 = 5.0)
@@ -504,8 +508,7 @@ module MembersTest =
     let s = 2.0f
     let d = 2.0M
 
-#if NetCore
-#else
+#if !NetCore
     let tmpCulture = System.Threading.Thread.CurrentThread.CurrentCulture
     System.Threading.Thread.CurrentThread.CurrentCulture <- System.Globalization.CultureInfo("en-US")
     test "f" (f.ToString().Equals("2"))
diff --git a/tests/fsharp/core/netcore/netcoreautomationhelperlibrary/netcoreautomationhelperlibrary.fsproj b/tests/fsharp/core/netcore/netcoreautomationhelperlibrary/netcoreautomationhelperlibrary.fsproj
index 31ad3f9d267..e04bdaeb57a 100644
--- a/tests/fsharp/core/netcore/netcoreautomationhelperlibrary/netcoreautomationhelperlibrary.fsproj
+++ b/tests/fsharp/core/netcore/netcoreautomationhelperlibrary/netcoreautomationhelperlibrary.fsproj
@@ -19,17 +19,17 @@
   
   
     Profile7
-    3.3.1.0
+    3.7.4.0
     $(FSCOREDLLNETCOREPATH)
   
   
     Profile78
-    3.78.3.1
+    3.78.4.0
     $(FSCOREDLLNETCORE78PATH)
   
   
     Profile259
-    3.259.3.1
+    3.259.4.0
     $(FSCOREDLLNETCORE259PATH)
   
   
diff --git a/tests/fsharp/core/netcore/netcorelibrary1/netcoretestinglibrary.fsproj b/tests/fsharp/core/netcore/netcorelibrary1/netcoretestinglibrary.fsproj
index 73e588aff16..17304f6e603 100644
--- a/tests/fsharp/core/netcore/netcorelibrary1/netcoretestinglibrary.fsproj
+++ b/tests/fsharp/core/netcore/netcorelibrary1/netcoretestinglibrary.fsproj
@@ -19,7 +19,7 @@
   
   
     Profile7
-    3.3.1.0
+    3.7.4.0
     $(FSCOREDLLNETCOREPATH)
   
   
diff --git a/tests/fsharp/core/portable/portablelibrary1/portabletestinglibrary.fsproj b/tests/fsharp/core/portable/portablelibrary1/portabletestinglibrary.fsproj
index 8d070c62c22..316c24d237c 100644
--- a/tests/fsharp/core/portable/portablelibrary1/portabletestinglibrary.fsproj
+++ b/tests/fsharp/core/portable/portablelibrary1/portabletestinglibrary.fsproj
@@ -23,7 +23,7 @@
     false
     false
     bin\Debug\
-    TRACE;DEBUG;Portable
+    TRACE;DEBUG;Portable;FX_NO_EXCEPTIONDISPATCHINFO
     3
     bin\Debug\PortableLibrary1.XML
   
diff --git a/tests/fsharp/core/printf/test.fsx b/tests/fsharp/core/printf/test.fsx
index 6763e224d64..0149356405c 100644
--- a/tests/fsharp/core/printf/test.fsx
+++ b/tests/fsharp/core/printf/test.fsx
@@ -384,6 +384,171 @@ module CheckDisplayAttributes8 =
        override x.ToString() = "2"
 
     test "cenwoiwe8" (lazy(sprintf "%A" (Foo()))) "[1; 2]"
+
+// Check one returning two strings
+module CheckDisplayAttributes9 =
+
+    []
+    type Foo() = 
+       member internal x.Hello = "Hello"
+       member internal x.World = "World"
+
+    test "cenwoiwe9" (lazy(sprintf "%A" (Foo()))) "Hello World"
+
+// Check one returning an int and a list
+module CheckDisplayAttributes10 =
+
+    []
+    type Foo() = 
+       member internal x.StructuredDisplay = [1;2]
+       member internal x.Hello = "Hello"
+       override x.ToString() = "2"
+
+    test "cenwoiwe10" (lazy(sprintf "%A" (Foo()))) "Hello: [1; 2]"
+
+// Check one returning an int and a string with no spaces
+module CheckDisplayAttributes11 =
+
+    []
+    type Foo() = 
+       member internal x.Val = 42
+       member internal x.Hello = "Hello"
+
+    test "cenwoiwe11" (lazy(sprintf "%A" (Foo()))) "42Hello"
+
+// Check one with an unmatched opening bracket
+module CheckDisplayAttributes12 =
+
+    []
+    type Foo() = 
+       member internal x.Val = 42
+       member internal x.Hello = "Hello"
+       override x.ToString() = "x"
+
+    // this should produce an error
+    test "cenwoiwe12" (lazy(sprintf "%A" (Foo()))) ""
+
+// Check one with an unmatched closing bracket
+module CheckDisplayAttributes13 =
+
+    []
+    type Foo() = 
+       member internal x.Val = 42
+       member internal x.Hello = "Hello"
+       override x.ToString() = "x"
+
+    test "cenwoiwe13" (lazy(sprintf "%A" (Foo()))) "x"
+
+// Check one with an unmatched trailing open bracket
+module CheckDisplayAttributes14 =
+
+    []
+    type Foo() = 
+       member internal x.Val = 42
+       member internal x.Hello = "Hello"
+       override x.ToString() = "x"
+
+    test "cenwoiwe14" (lazy(sprintf "%A" (Foo()))) "x"
+
+// Check one with unbounded recursion
+module CheckDisplayAttributes15 =
+
+    []
+    type Foo() = 
+       member internal x.X = Foo()
+
+    test "cenwoiwe15" (lazy(sprintf "%A" (Foo()))) "... ... ... ... ... ... ... ..."
+
+// Check escaped brackets with no other members
+module CheckDisplayAttributes16 =
+
+    []
+    type Foo() = 
+      member __.``{}`` = "abc"
+
+    test "cenwoiwe16" (lazy(sprintf "%A" (Foo()))) "abc"
+
+// Check escaped brackets with other members
+module CheckDisplayAttributes17 =
+
+    []
+    type Foo() =
+      member __.``One} {Two`` = "abc"
+      member __.One = 123
+      member __.Two = 456
+
+    test "cenwoiwe17" (lazy(sprintf "%A" (Foo()))) "abc"
+
+// Check escaped brackets with all brackets escaped
+module CheckDisplayAttributes18 =
+
+    []
+    type Foo() =
+      member __.``One} {Two`` = "abc"
+      member __.One = 123
+      member __.Two = 456
+      override x.ToString() = "x"
+
+    test "cenwoiwe18" (lazy(sprintf "%A" (Foo()))) "{One} {Two}"
+
+// Check escaped brackets with opening bracket escaped, invalidating property reference
+module CheckDisplayAttributes19 =
+
+    []
+    type Foo() =
+      member __.``One} {Two`` = "abc"
+      member __.One = 123
+      member __.Two = 456
+      override x.ToString() = "x"
+
+    test "cenwoiwe19" (lazy(sprintf "%A" (Foo()))) "x"
+
+// Check escaped brackets with closing bracket escaped, invalidating property reference
+module CheckDisplayAttributes20 =
+
+    []
+    type Foo() =
+      member __.``One} {Two`` = "abc"
+      member __.One = 123
+      member __.Two = 456
+      override x.ToString() = "x"
+
+    test "cenwoiwe20" (lazy(sprintf "%A" (Foo()))) "x"
+
+// Check escaped brackets display properly
+module CheckDisplayAttributes21 =
+
+    []
+    type Foo() =
+      member __.``One} {Two`` = "abc"
+      member __.One = 123
+      member __.Two = 456
+      override x.ToString() = "x"
+
+    test "cenwoiwe21" (lazy(sprintf "%A" (Foo()))) "{123}"
+
+// Check one with an two matched pairs and a trailing closing bracket
+module CheckDisplayAttributes22 =
+
+    []
+    type Foo() = 
+       member internal x.Val = 42
+       member internal x.Hello = "Hello"
+       override x.ToString() = "x"
+
+    test "cenwoiwe22" (lazy(sprintf "%A" (Foo()))) "x"
+
+// Check one with an two matched pairs and an unmatched closing bracket in-between
+module CheckDisplayAttributes23 =
+
+    []
+    type Foo() = 
+       member internal x.Val = 42
+       member internal x.Hello = "Hello"
+       override x.ToString() = "x"
+
+    test "cenwoiwe23" (lazy(sprintf "%A" (Foo()))) "x"
+
 let func0()=
     test "test1" (lazy(sprintf "%b" true)) "true"
     test "test2" (lazy(sprintf "%5b" true)) " true"
diff --git a/tests/fsharp/core/queriesLeafExpressionConvert/test.fsx b/tests/fsharp/core/queriesLeafExpressionConvert/test.fsx
index 5947fd02c1c..871321f208b 100644
--- a/tests/fsharp/core/queriesLeafExpressionConvert/test.fsx
+++ b/tests/fsharp/core/queriesLeafExpressionConvert/test.fsx
@@ -86,6 +86,33 @@ module LeafExpressionEvaluationTests =
 
     let _ = 1
     checkEval "2ver9ewve" (<@ () @>) ()
+    check "2ver9ewvr1" (Eval <@ (fun x -> NonStructuralComparison.(>) x 1) @> 3) true
+    check "2ver9ewvr1" (Eval <@ (fun x -> NonStructuralComparison.(>) x 4) @> 3) false
+    check "2ver9ewvr1" (Eval <@ (fun x -> NonStructuralComparison.(>) x 3) @> 3) false
+
+    check "2ver9ewvr2" (Eval <@ (fun x -> NonStructuralComparison.(<) x 1) @> 3) false
+    check "2ver9ewvr2" (Eval <@ (fun x -> NonStructuralComparison.(<) x 3) @> 3) false
+    check "2ver9ewvr2" (Eval <@ (fun x -> NonStructuralComparison.(<) x 4) @> 3) true
+
+    check "2ver9ewvr2" (Eval <@ (fun x -> NonStructuralComparison.(>=) x 1) @> 3) true
+    check "2ver9ewvr2" (Eval <@ (fun x -> NonStructuralComparison.(>=) x 3) @> 3) true
+    check "2ver9ewvr2" (Eval <@ (fun x -> NonStructuralComparison.(>=) x 4) @> 3) false
+
+    check "2ver9ewvr2" (Eval <@ (fun x -> NonStructuralComparison.(<=) x 1) @> 3) false
+    check "2ver9ewvr2" (Eval <@ (fun x -> NonStructuralComparison.(<=) x 3) @> 3) true
+    check "2ver9ewvr2" (Eval <@ (fun x -> NonStructuralComparison.(<=) x 4) @> 3) true
+
+    check "2ver9ewvr2" (Eval <@ (fun x -> NonStructuralComparison.(=) x 3) @> 3) true
+    check "2ver9ewvr2" (Eval <@ (fun x -> NonStructuralComparison.(=) x 4) @> 3) false
+    check "2ver9ewvr2" (Eval <@ (fun x -> NonStructuralComparison.(=) x 1) @> 3) false
+
+    check "2ver9ewvr2" (Eval <@ (fun x -> NonStructuralComparison.(<>) x 4) @> 3) true
+    check "2ver9ewvr2" (Eval <@ (fun x -> NonStructuralComparison.(<>) x 3) @> 3) false
+    check "2ver9ewvr2" (Eval <@ (fun x -> NonStructuralComparison.(<>) x 1) @> 3) true
+
+    check "2ver9ewvr" (Eval <@ (fun x -> x + 1) @> (3)) 4
+    check "2ver9ewvr" (Eval <@ (fun x -> x + 1) @> (3)) 4
+    check "2ver9ewvr" (Eval <@ (fun x -> x + 1) @> (3)) 4
     check "2ver9ewvr" (Eval <@ (fun x -> x + 1) @> (3)) 4
     check "2ver9ewvt" (Eval <@ (fun (x,y) -> x + 1) @> (3,4)) 4
     check "2ver9ewvy" (Eval <@ (fun (x1,x2,x3) -> x1 + x2 + x3) @> (3,4,5)) (3+4+5)
@@ -812,6 +839,14 @@ module LeafExpressionEvaluationTests =
         checkEval "clkedw2" (<@ let x : int option = Some 1 in x.Value @>) 1
         checkEval "clkedw3" (<@ let x : int option = Some 1 in x.ToString() @>) "Some(1)"
 
+    module NestedQuotes = 
+
+        open Microsoft.FSharp.Linq.NullableOperators
+
+        checkEval "feoewjewjlejf1" <@ <@@ 1 @@> @> <@@ 1 @@> 
+        checkEval "feoewjewjlejf2" <@ <@ 1 @> @> <@ 1 @> 
+        checkEval "feoewjewjlejf3" <@ <@@ 1 @@>, <@ 2 @> @> (<@@ 1 @@> , <@ 2 @>)
+
     module Extensions = 
         type System.Object with 
             member x.ExtensionMethod0()  = 3
@@ -956,7 +991,9 @@ module LeafExpressionEvaluationTests =
         open Microsoft.FSharp.Data.UnitSystems.SI.UnitSymbols
 
         checkEval "opp2oin209v3041" <@ Nullable.byte (Nullable 2) @> (Nullable 2uy)
+        checkEval "opp2oin209v3041" <@ Nullable.uint8  (Nullable 2) @> (Nullable 2uy)
         checkEval "opp2oin209v3042" <@ Nullable.sbyte (Nullable 2) @> (Nullable 2y)
+        checkEval "opp2oin209v3042" <@ Nullable.int8 (Nullable 2) @> (Nullable 2y)
         checkEval "opp2oin209v3043" <@ Nullable.uint16(Nullable 2 )@> (Nullable 2us)
         checkEval "opp2oin209v3044" <@ Nullable.int16(Nullable 2 )@> (Nullable 2s)
         checkEval "opp2oin209v3045" <@ Nullable.uint32 (Nullable 2s) @> (Nullable 2u)
@@ -968,11 +1005,14 @@ module LeafExpressionEvaluationTests =
         checkEval "opp2oin209v304w" <@ Nullable.enum(Nullable 2 ): System.Nullable @> (Nullable System.DayOfWeek.Tuesday )
 
         checkEval "opp2oin209v304e" <@ Nullable.sbyte (Nullable 2) @> (Nullable 2y)
+        checkEval "opp2oin209v304e" <@ Nullable.int8 (Nullable 2) @> (Nullable 2y)
         checkEval "opp2oin209v304r" <@ Nullable.int16 (Nullable 2) @> (Nullable 2s)
         checkEval "opp2oin209v304t" <@ Nullable.int32 (Nullable 2s) @> (Nullable 2)
         checkEval "opp2oin209v304y" <@ Nullable.int64 (Nullable 2) @> (Nullable 2L)
         checkEval "opp2oin209v304u" <@ Nullable.float (Nullable 2) @> (Nullable 2.0)
+        checkEval "opp2oin209v304u" <@ Nullable.double (Nullable 2) @> (Nullable 2.0)
         checkEval "opp2oin209v304i" <@ Nullable.float32 (Nullable 2) @> (Nullable 2.0f)
+        checkEval "opp2oin209v304i" <@ Nullable.single (Nullable 2) @> (Nullable 2.0f)
 
 
 
@@ -1097,6 +1137,7 @@ module LeafExpressionEvaluationTests =
         checkText "p2oin209v33x" <@ Nullable 2 ?%? Nullable () @> "(Convert(2) % new Nullable`1())"
         checkText "p2oin209v33x" <@ Nullable 2 ?% 3 @> "(Convert(2) % Convert(3))"
 
+
 let aa =
   if not failures.IsEmpty then (printfn "Test Failed, failures = %A" failures; exit 1) 
   else (stdout.WriteLine "Test Passed"; 
diff --git a/tests/fsharp/core/queriesNullableOperators/test.fsx b/tests/fsharp/core/queriesNullableOperators/test.fsx
index 48ee277e710..8820d0f376e 100644
--- a/tests/fsharp/core/queriesNullableOperators/test.fsx
+++ b/tests/fsharp/core/queriesNullableOperators/test.fsx
@@ -291,7 +291,9 @@ module NullableConversions =
     open Microsoft.FSharp.Data.UnitSystems.SI.UnitSymbols
 
     check "opp2oin209v3041" (Nullable.byte (Nullable 2)) (Nullable 2uy)
+    check "opp2oin209v3041" (Nullable.uint8 (Nullable 2)) (Nullable 2uy)
     check "opp2oin209v3042" (Nullable.sbyte (Nullable 2)) (Nullable 2y)
+    check "opp2oin209v3042" (Nullable.int8 (Nullable 2)) (Nullable 2y)
     check "opp2oin209v3043" (Nullable.uint16(Nullable 2 )) (Nullable 2us)
     check "opp2oin209v3044" (Nullable.int16(Nullable 2 )) (Nullable 2s)
     check "opp2oin209v3045" (Nullable.uint32 (Nullable 2s)) (Nullable 2u)
@@ -303,11 +305,14 @@ module NullableConversions =
     check "opp2oin209v304w" (Nullable.enum(Nullable 2 ): System.Nullable) (Nullable System.DayOfWeek.Tuesday )
 
     check "opp2oin209v304e" (Nullable.sbyte (Nullable 2)) (Nullable 2y)
+    check "opp2oin209v304e" (Nullable.int8  (Nullable 2)) (Nullable 2y)
     check "opp2oin209v304r" (Nullable.int16 (Nullable 2)) (Nullable 2s)
     check "opp2oin209v304t" (Nullable.int32 (Nullable 2s)) (Nullable 2)
     check "opp2oin209v304y" (Nullable.int64 (Nullable 2)) (Nullable 2L)
     check "opp2oin209v304u" (Nullable.float (Nullable 2)) (Nullable 2.0)
+    check "opp2oin209v304u" (Nullable.double (Nullable 2)) (Nullable 2.0)
     check "opp2oin209v304i" (Nullable.float32 (Nullable 2)) (Nullable 2.0f)
+    check "opp2oin209v304i" (Nullable.single (Nullable 2)) (Nullable 2.0f)
 
 let aa =
   if not failures.IsEmpty then (printfn "Test Failed, failures = %A" failures; exit 1) 
diff --git a/tests/fsharp/core/quotes/build.bat b/tests/fsharp/core/quotes/build.bat
index d49ef661421..c640c78b032 100644
--- a/tests/fsharp/core/quotes/build.bat
+++ b/tests/fsharp/core/quotes/build.bat
@@ -22,6 +22,13 @@ rem fsc.exe building
     "%PEVERIFY%" test.exe 
     @if ERRORLEVEL 1 goto Error
 
+   "%FSC%" %fsc_flags% -o:test-with-debug-data.exe --quotations-debug+ -r cslib.dll -g test.fsx
+    @if ERRORLEVEL 1 goto Error
+
+    "%PEVERIFY%" test-with-debug-data.exe 
+    @if ERRORLEVEL 1 goto Error
+
+
     "%FSC%" %fsc_flags% --optimize -o:test--optimize.exe -r cslib.dll -g test.fsx
     @if ERRORLEVEL 1 goto Error
 
diff --git a/tests/fsharp/core/quotes/run.bat b/tests/fsharp/core/quotes/run.bat
index 72a50630442..f8f048ea74f 100644
--- a/tests/fsharp/core/quotes/run.bat
+++ b/tests/fsharp/core/quotes/run.bat
@@ -25,6 +25,11 @@ echo TestD
     @if ERRORLEVEL 1 goto Error
     if NOT EXIST test.ok goto SetError
 
+    if exist test.ok (del /f /q test.ok)
+    %CLIX% test-with-debug-data.exe
+    @if ERRORLEVEL 1 goto Error
+    if NOT EXIST test.ok goto SetError
+
     if exist test.ok (del /f /q test.ok)
     %CLIX% test--optimize.exe
     @if ERRORLEVEL 1 goto Error
diff --git a/tests/fsharp/core/quotes/test.fsx b/tests/fsharp/core/quotes/test.fsx
index 322dabec9d7..66bb16e988a 100644
--- a/tests/fsharp/core/quotes/test.fsx
+++ b/tests/fsharp/core/quotes/test.fsx
@@ -64,29 +64,34 @@ type S =
     val mutable x : int
 #endif
 
+
 module TypedTest = begin 
 
     let x = <@ 1 @>
 
-    test "check SByte"   ((<@  1y   @> |> (function SByte 1y -> true | _ -> false))) 
-    test "check Int16"   ((<@  1s   @> |> (function Int16 1s -> true | _ -> false))) 
-    test "check Int32"   ((<@  1   @> |> (function Int32 1 -> true | _ -> false))) 
-    test "check Int64"   ((<@  1L   @> |> (function Int64 1L -> true | _ -> false))) 
-    test "check Byte"     ((<@  1uy   @> |> (function Byte 1uy -> true | _ -> false))) 
-    test "check UInt16"   ((<@  1us   @> |> (function UInt16 1us -> true | _ -> false))) 
-    test "check UInt32"   ((<@  1u   @> |> (function UInt32 1u -> true | _ -> false))) 
-    test "check UInt64"   ((<@  1UL   @> |> (function UInt64 1UL -> true | _ -> false))) 
-    test "check String"  ((<@  "1" @> |> (function String "1" -> true | _ -> false))) 
-
-    test "check ~SByte"   ((<@  "1"   @> |> (function SByte _ -> false | _ -> true))) 
-    test "check ~Int16"   ((<@  "1"   @> |> (function Int16 _ -> false | _ -> true))) 
-    test "check ~Int32"   ((<@  "1"   @> |> (function Int32 _ -> false | _ -> true))) 
-    test "check ~Int64"   ((<@  "1"   @> |> (function Int64 _ -> false | _ -> true))) 
-    test "check ~Byte"   ((<@  "1"   @> |> (function Byte _ -> false | _ -> true))) 
-    test "check ~UInt16"   ((<@  "1"   @> |> (function UInt16 _ -> false | _ -> true))) 
-    test "check ~UInt32"   ((<@  "1"   @> |> (function UInt32 _ -> false | _ -> true))) 
-    test "check ~UInt64"   ((<@  "1"   @> |> (function UInt64 _ -> false | _ -> true))) 
-    test "check ~String" ((<@  1   @> |> (function String "1" -> false | _ -> true))) 
+    test "check SByte"    ((<@  1y   @> |> (function SByte 1y ->   true | _ -> false))) 
+    test "check Int16"    ((<@  1s   @> |> (function Int16 1s ->   true | _ -> false))) 
+    test "check Int32"    ((<@  1    @> |> (function Int32 1 ->    true | _ -> false))) 
+    test "check Int64"    ((<@  1L   @> |> (function Int64 1L ->   true | _ -> false))) 
+    test "check Byte"     ((<@  1uy  @> |> (function Byte 1uy ->   true | _ -> false))) 
+    test "check UInt16"   ((<@  1us  @> |> (function UInt16 1us -> true | _ -> false))) 
+    test "check UInt32"   ((<@  1u   @> |> (function UInt32 1u ->  true | _ -> false))) 
+    test "check UInt64"   ((<@  1UL  @> |> (function UInt64 1UL -> true | _ -> false))) 
+    test "check Decimal"  ((<@  1M   @> |> (function Decimal 1M -> true | _ -> false))) 
+    test "check String"   ((<@  "1"  @> |> (function String "1" -> true | _ -> false))) 
+
+    test "check ~SByte"   ((<@  "1"  @> |> (function SByte _ ->    false | _ -> true))) 
+    test "check ~Int16"   ((<@  "1"  @> |> (function Int16 _ ->    false | _ -> true))) 
+    test "check ~Int32"   ((<@  "1"  @> |> (function Int32 _ ->    false | _ -> true))) 
+    test "check ~Int64"   ((<@  "1"  @> |> (function Int64 _ ->    false | _ -> true))) 
+    test "check ~Byte"    ((<@  "1"  @> |> (function Byte _ ->     false | _ -> true))) 
+    test "check ~UInt16"  ((<@  "1"  @> |> (function UInt16 _ ->   false | _ -> true))) 
+    test "check ~UInt32"  ((<@  "1"  @> |> (function UInt32 _ ->   false | _ -> true))) 
+    test "check ~UInt64"  ((<@  "1"  @> |> (function UInt64 _ ->   false | _ -> true))) 
+    test "check ~Decimal" ((<@  "1"  @> |> (function Decimal _ ->  false | _ -> true))) 
+    test "check ~String"  ((<@  1    @> |> (function String "1" -> false | _ -> true))) 
+
+    test "check ~Decimal neither" ((<@ 1M + 1M @> |> (function Decimal _ ->  false | _ -> true))) 
 
     test "check AndAlso" ((<@ true && true  @> |> (function AndAlso(Bool(true),Bool(true)) -> true | _ -> false))) 
     test "check OrElse"  ((<@ true || true  @> |> (function OrElse(Bool(true),Bool(true)) -> true | _ -> false))) 
@@ -1634,7 +1639,10 @@ module QuotationConstructionTests =
     check "vcknwwe099" (Expr.PropertySet(<@@ (new System.Windows.Forms.Form()) @@>, setof <@@ (new System.Windows.Forms.Form()).Text <- "2" @@>, <@@ "3" @@> )) <@@ (new System.Windows.Forms.Form()).Text <- "3" @@>
     #endif
     check "vcknwwe099" (Expr.PropertySet(<@@ (new Foo()) @@>, setof <@@ (new Foo()).[3] <- 1 @@>, <@@ 2 @@> , [ <@@ 3 @@> ] )) <@@ (new Foo()).[3] <- 2 @@>
-    check "vcknwwe0qq" (Expr.Quote(<@@ "1" @@>)) <@@ <@@ "1" @@> @@>
+    check "vcknwwe0qq1" (Expr.QuoteRaw(<@ "1" @>)) <@@ <@@ "1" @@> @@>
+    check "vcknwwe0qq2" (Expr.QuoteRaw(<@@ "1" @@>)) <@@ <@@ "1" @@> @@>
+    check "vcknwwe0qq3" (Expr.QuoteTyped(<@ "1" @>)) <@@ <@ "1" @> @@>
+    check "vcknwwe0qq4" (Expr.QuoteTyped(<@@ "1" @@>)) <@@ <@ "1" @> @@>
     check "vcknwwe0ww" (Expr.Sequential(<@@ () @@>, <@@ 1 @@>)) <@@ (); 1 @@>
     check "vcknwwe0ee" (Expr.TryFinally(<@@ 1 @@>, <@@ () @@>)) <@@ try 1 finally () @@>
     check "vcknwwe0rr" (match Expr.TryWith(<@@ 1 @@>, Var.Global("e1",typeof), <@@ 1 @@>, Var.Global("e2",typeof), <@@ 2 @@>) with TryWith(b,v1,ef,v2,eh) -> b = <@@ 1 @@> && eh = <@@ 2 @@> && ef = <@@ 1 @@> && v1 = Var.Global("e1",typeof) && v2 = Var.Global("e2",typeof)| _ -> false) true 
@@ -2408,6 +2416,313 @@ module QuotationOfResizeArrayIteration =
                  -> true
          |    _ -> false)
         
+
+
+module TestAutoQuoteAtStaticMethodCalls = 
+    open Microsoft.FSharp.Quotations
+
+    type C() = 
+        static let cleanup (s:string) = s.Replace(" ","").Replace("\n","").Replace("\r","")
+        static member Plot ([] x: Expr<'T>) = 
+            sprintf "%A" x |> cleanup
+
+        static member PlotTwoArg ([] x: Expr<'T>, y : int) = 
+            sprintf "%A" (x,y) |> cleanup
+
+        static member PlotThreeArg (w:int, [] x: Expr<'T>, y : int) = 
+            sprintf "%A" (w,x,y) |> cleanup
+
+        static member PlotParams ([] x: Expr[]) = 
+            sprintf "%A" x |> cleanup
+
+        static member PlotEval ([] x: Expr<'T>) = 
+            sprintf "%A" x |> cleanup
+
+
+    let shouldEqual  id x y = check id y x
+    let x = 1
+    let y = 1
+    let xb = true
+    let yb = true
+    let testItAll() = 
+        let z = 1
+        let zb = true
+
+        C.Plot (xb && yb || zb)  |> shouldEqual "testd109700" "IfThenElse(IfThenElse(PropertyGet(None,xb,[]),PropertyGet(None,yb,[]),Value(false)),Value(true),ValueWithName(true,zb))"
+
+        C.Plot (x + y * z) |> shouldEqual "testd109701" "Call(None,op_Addition,[PropertyGet(None,x,[]),Call(None,op_Multiply,[PropertyGet(None,y,[]),ValueWithName(1,z)])])"
+
+        C.PlotTwoArg (x + y * z, 108) |> shouldEqual "testd109703" "(Call(None,op_Addition,[PropertyGet(None,x,[]),Call(None,op_Multiply,[PropertyGet(None,y,[]),ValueWithName(1,z)])]),108)"
+
+        C.PlotThreeArg (107, x + y * z, 108)|> shouldEqual "testd109704" "(107,Call(None,op_Addition,[PropertyGet(None,x,[]),Call(None,op_Multiply,[PropertyGet(None,y,[]),ValueWithName(1,z)])]),108)"
+
+        C.PlotParams (1, 2) |> shouldEqual "testd109708" "[|Value(1);Value(2)|]"
+
+        C.PlotParams (x + y) |> shouldEqual "testd109709" "[|Call(None,op_Addition,[PropertyGet(None,x,[]),PropertyGet(None,y,[])])|]"
+
+        C.Plot (fun (x,y,z) -> xb && yb || zb) |> shouldEqual "testd10970F" "Lambda(tupledArg,Let(x,TupleGet(tupledArg,0),Let(y,TupleGet(tupledArg,1),Let(z,TupleGet(tupledArg,2),IfThenElse(IfThenElse(PropertyGet(None,xb,[]),PropertyGet(None,yb,[]),Value(false)),Value(true),ValueWithName(true,zb))))))"
+
+        C.Plot (fun x -> x) |> shouldEqual "testd109710" "Lambda(x,x)"
+
+        C.Plot (fun x -> x, x+1)  |> shouldEqual "testd109711" "Lambda(x,NewTuple(x,Call(None,op_Addition,[x,Value(1)])))"
+
+        C.PlotEval (xb && yb || zb) |> shouldEqual "testd109712" "WithValue(true,IfThenElse(IfThenElse(PropertyGet(None,xb,[]),PropertyGet(None,yb,[]),Value(false)),Value(true),ValueWithName(true,zb)))"
+
+    testItAll()
+
+module TestAutoQuoteAtInstanceMethodCalls = 
+    open Microsoft.FSharp.Quotations
+    open System.Runtime.CompilerServices
+
+
+    type C() = 
+        let cleanup (s:string) = s.Replace(" ","").Replace("\n","").Replace("\r","")
+        member __.Plot ([] x: Expr<'T>) = 
+            sprintf "%A" x |> cleanup
+
+        member __.PlotTwoArg ([] x: Expr<'T>, y : int) = 
+            sprintf "%A" (x,y) |> cleanup
+
+        member __.PlotThreeArg (w:int, [] x: Expr<'T>, y : int) = 
+            sprintf "%A" (w,x,y) |> cleanup
+
+        member __.PlotParams ([] x: Expr[]) = 
+            sprintf "%A" x |> cleanup
+
+        member __.Item ([] x: Expr<'T>) = 
+            sprintf "%A" x |> cleanup
+
+        member __.PlotEval ([] x: Expr<'T>) = 
+            sprintf "%A" x |> cleanup
+
+        override __.ToString() = "C"
+
+    []
+    module CSharpStyleExtensionMember = 
+        let cleanup (s:string) = s.Replace(" ","").Replace("\n","").Replace("\r","")
+        []
+        type CExtMem() = 
+            []
+            static member PlotCSharpStyleExtMem (this: C, [] x: Expr<'T>) = 
+                sprintf "%A" x |> cleanup
+
+            // Adding 'ReflectedDefinition' to an argument that doesn't have type Expr<'T> is ignored (no error or warning is given at declaration or use)
+            []
+            static member PlotCSharpStyleExtMemNoExpr (this: C, [] x: 'T) = 
+                sprintf "%A" x |> cleanup
+
+            // Adding 'ReflectedDefinition' to the 'this' argument of a C#-style extension member is ignored. 
+            //
+            //[]
+            //static member PlotCSharpStyleExtMemWithReflectedThis ([] this: Expr, [] x: Expr<'T>) = 
+            //    sprintf "%A" (this, x) |> cleanup
+            []
+            static member PlotCSharpStyleExtMemWithIgnoredReflectedThis ([] this: C, [] x: Expr<'T>) = 
+                sprintf "%A" (this, x) |> cleanup
+
+    open CSharpStyleExtensionMember
+    let shouldEqual  id x y = check id y x
+    let x = 1
+    let y = 1
+    let xb = true
+    let yb = true
+    let testItAll() = 
+        let z = 1
+        let zb = true
+        let c = C()
+
+        c.Plot (xb && yb || zb)  |> shouldEqual "testd109700" "IfThenElse(IfThenElse(PropertyGet(None,xb,[]),PropertyGet(None,yb,[]),Value(false)),Value(true),ValueWithName(true,zb))"
+
+        c.Plot (x + y * z) |> shouldEqual "testd109701" "Call(None,op_Addition,[PropertyGet(None,x,[]),Call(None,op_Multiply,[PropertyGet(None,y,[]),ValueWithName(1,z)])])"
+
+        c.[x + y * z] |> shouldEqual "testd109701" "Call(None,op_Addition,[PropertyGet(None,x,[]),Call(None,op_Multiply,[PropertyGet(None,y,[]),ValueWithName(1,z)])])"
+
+        c.PlotTwoArg (x + y * z, 108) |> shouldEqual "testd109703" "(Call(None,op_Addition,[PropertyGet(None,x,[]),Call(None,op_Multiply,[PropertyGet(None,y,[]),ValueWithName(1,z)])]),108)"
+
+        c.PlotThreeArg (107, x + y * z, 108)|> shouldEqual "testd109704" "(107,Call(None,op_Addition,[PropertyGet(None,x,[]),Call(None,op_Multiply,[PropertyGet(None,y,[]),ValueWithName(1,z)])]),108)"
+
+        c.PlotParams (1, 2) |> shouldEqual "testd109708" "[|Value(1);Value(2)|]"
+
+        c.PlotParams (x + y) |> shouldEqual "testd109709" "[|Call(None,op_Addition,[PropertyGet(None,x,[]),PropertyGet(None,y,[])])|]"
+
+        c.Plot (fun (x,y,z) -> xb && yb || zb) |> shouldEqual "testd10970F" "Lambda(tupledArg,Let(x,TupleGet(tupledArg,0),Let(y,TupleGet(tupledArg,1),Let(z,TupleGet(tupledArg,2),IfThenElse(IfThenElse(PropertyGet(None,xb,[]),PropertyGet(None,yb,[]),Value(false)),Value(true),ValueWithName(true,zb))))))"
+
+        c.Plot (fun x -> x) |> shouldEqual "testd109710" "Lambda(x,x)"
+
+        c.Plot (fun x -> x, x+1)  |> shouldEqual "testd109711" "Lambda(x,NewTuple(x,Call(None,op_Addition,[x,Value(1)])))"
+
+        c.PlotEval (xb && yb || zb) |> shouldEqual "testd109712" "WithValue(true,IfThenElse(IfThenElse(PropertyGet(None,xb,[]),PropertyGet(None,yb,[]),Value(false)),Value(true),ValueWithName(true,zb)))"
+
+        c.PlotCSharpStyleExtMem (xb && yb || zb)  |> shouldEqual "testd109713" "IfThenElse(IfThenElse(PropertyGet(None,xb,[]),PropertyGet(None,yb,[]),Value(false)),Value(true),ValueWithName(true,zb))"
+
+        c.PlotCSharpStyleExtMemNoExpr (xb && yb || zb)  |> shouldEqual "testdoqhwm" "true"
+
+        c.PlotCSharpStyleExtMemWithIgnoredReflectedThis (xb && yb || zb)  |> shouldEqual "testd109714" "(C,IfThenElse(IfThenElse(PropertyGet(None,xb,[]),PropertyGet(None,yb,[]),Value(false)),Value(true),ValueWithName(true,zb)))"
+
+    testItAll()
+
+module TestsForUsingReflectedDefinitionArgumentsAsFirstClassValues = 
+    open Microsoft.FSharp.Quotations
+    open System.Linq.Expressions
+    open System
+
+    type FirstClassTests() = 
+        static member PlotExpr ([] x: Expr<'T>) = x.ToString()
+        static member PlotExprOverloadedByType ([] x: Expr) = x.ToString()
+        static member PlotExprOverloadedByType ([] x: Expr) = x.ToString()
+        static member PlotExprOverloadedByShape (x:int) = x.ToString()
+        static member PlotExprOverloadedByShape ([] x: Expr) = x.ToString()
+        static member PlotLinq (x: Expression>) =  x.ToString()
+        static member PlotLinqOverloadedByType (x: Expression>) =  x.ToString()
+        static member PlotLinqOverloadedByType (x: Expression>) =  x.ToString()
+        static member PlotLinqOverloadedByShape (x: Func) =  x.ToString()
+        static member PlotLinqOverloadedByShape (x: Expression>) =  x.ToString()
+
+    // Most of the following tests are just checking that overloads are resolved correctly
+    let runAll() = 
+
+        // Check we can define a function that calls the overloads
+        let callLinqWithoutAutoConv (ef: Expression>) = FirstClassTests.PlotLinq ef     
+        let callLinqWithAutoConv (f: int -> int) = FirstClassTests.PlotLinq (fun x -> f x)     // needs eta-expansion
+        let callLinqOverloadedByTypeWithoutAutoConvInt (ef: Expression>) = FirstClassTests.PlotLinqOverloadedByType ef     
+        let callLinqOverloadedByTypeWithoutAutoConvString (ef: Expression>) = FirstClassTests.PlotLinqOverloadedByType ef     
+        let callLinqOverloadedByTypeWithAutoConvInt (f: int -> int) = FirstClassTests.PlotLinqOverloadedByType (fun x -> f x)   
+        let callLinqOverloadedByTypeWithAutoConvString (f: string -> int) = FirstClassTests.PlotLinqOverloadedByType (fun x -> f x)   
+        let callLinqOverloadedByShapeWithoutAutoConv (ef: Expression>) = FirstClassTests.PlotLinqOverloadedByShape ef     
+        let callExprWithoutAutoConv (ef: Expr) = FirstClassTests.PlotExpr <@ %ef @>
+        let callExprWithAutoConv (ef: int) = FirstClassTests.PlotExpr ef     
+        let callExprOverloadedWithoutAutoConvA (ef: Expr) = FirstClassTests.PlotExprOverloadedByType <@ %ef @>
+        let callExprOverloadedWithoutAutoConvB (ef: Expr) = FirstClassTests.PlotExprOverloadedByType ef
+        let callExprOverloadedWithAutoConv (ef: int) = FirstClassTests.PlotExprOverloadedByType ef     
+        let callExprOverloadedByShapeWithoutAutoConvA (ef: Expr) = FirstClassTests.PlotExprOverloadedByShape <@ %ef @>
+        let callExprOverloadedByShapeWithoutAutoConvB (ef: Expr) = FirstClassTests.PlotExprOverloadedByShape ef
+        // EXPECTED OVERLOAD RESOLUTION FAILURE: let callLinqOverloadedByShapeWithAutoConv (f: int -> int) = C.PlotLinqOverloadedByShape (fun x -> f x)    // overload not resolved
+        // EXPECTED OVERLOAD RESOLUTION FAILURE: let callExprOverloadedByShapeWithAutoConv (ef: int) = C.PlotExprOverloadedByShape ef      // overload not resolved
+
+        // Check type-checking for type-annotated first-class function values
+        let _unusedFirstClassFunctionValue = (FirstClassTests.PlotLinq : (int -> int) -> string)     // auto-quotes implicit var - though not very useful
+        let _unusedFirstClassFunctionValue = (FirstClassTests.PlotLinq : Expression> -> string)     
+        let _unusedFirstClassFunctionValue = (FirstClassTests.PlotLinqOverloadedByType : (int -> int) -> string)     // auto-quotes implicit var - though not very useful
+        let _unusedFirstClassFunctionValue = (FirstClassTests.PlotLinqOverloadedByType : (int -> string) -> string)     // auto-quotes implicit var - though not very useful
+        let _unusedFirstClassFunctionValue = (FirstClassTests.PlotLinqOverloadedByType : Expression> -> string)     
+        let _unusedFirstClassFunctionValue = (FirstClassTests.PlotLinqOverloadedByShape : Expression> -> string)    
+        let _unusedFirstClassFunctionValue = (FirstClassTests.PlotLinqOverloadedByShape : Func -> string)     // auto-quotes implicit var - though not very useful
+        let _unusedFirstClassFunctionValue = (FirstClassTests.PlotExpr : Expr -> string)     
+        let _unusedFirstClassFunctionValue = (FirstClassTests.PlotExpr : int -> string)           // auto-quotes implicit var - though not very useful
+        let _unusedFirstClassFunctionValue = (FirstClassTests.PlotExprOverloadedByType : Expr -> string)     
+        let _unusedFirstClassFunctionValue = (FirstClassTests.PlotExprOverloadedByType : int -> string)           // auto-quotes implicit var - though not very useful
+        let _unusedFirstClassFunctionValue = (FirstClassTests.PlotExprOverloadedByType : string -> string)           // auto-quotes implicit var - though not very useful
+        let _unusedFirstClassFunctionValue = (FirstClassTests.PlotExprOverloadedByShape : Expr -> string)     
+        // EXPECTED OVERLOAD RESOLUTION FAILURE: (C.PlotLinqOverloadedByShape : (int -> int) -> string)     // overload not resolved
+        // EXPECTED OVERLOAD RESOLUTION FAILURE: (C.PlotExprOverloadedByShape : int -> string)           // overload not resolved
+
+
+        // Check type-checking for applications
+        let _unusedResultValue = FirstClassTests.PlotExpr 1
+        let _unusedResultValue = FirstClassTests.PlotExpr <@ 1 @>
+        let _unusedResultValue = FirstClassTests.PlotExprOverloadedByType 1
+        let _unusedResultValue = FirstClassTests.PlotExprOverloadedByType <@ 1 @>
+        let _unusedResultValue = FirstClassTests.PlotExprOverloadedByType "a"
+        let _unusedResultValue = FirstClassTests.PlotExprOverloadedByType <@ "a" @>
+        let _unusedResultValue = FirstClassTests.PlotExprOverloadedByShape <@ 1 @>
+        // EXPECTED OVERLOAD RESOLUTION FAILURE: let _unusedResultValue = FirstClassTests.PlotLinqOverloadedByShape (fun x -> x)
+        // EXPECTED OVERLOAD RESOLUTION FAILURE: let _unusedResultValue = FirstClassTests.PlotExprOverloadedByShape 1  // overload not resolved
+
+
+        // Check type-checking for pipelining 
+        let _unusedResultValue = 1 |> FirstClassTests.PlotExpr
+        let _unusedResultValue = <@ 1 @> |> FirstClassTests.PlotExpr
+        let _unusedResultValue = 1 |> FirstClassTests.PlotExprOverloadedByType
+        let _unusedResultValue = <@ 1 @> |> FirstClassTests.PlotExprOverloadedByType
+        let _unusedResultValue = "a" |> FirstClassTests.PlotExprOverloadedByType
+        let _unusedResultValue = <@ "a" @> |> FirstClassTests.PlotExprOverloadedByType
+        let _unusedResultValue = <@ 1 @> |> FirstClassTests.PlotExprOverloadedByShape
+        // EXPECTED OVERLOAD RESOLUTION FAILURE: 1 |> FirstClassTests.PlotExprOverloadedByShape // overload not resolved
+
+        ()
+
+    runAll()
+
+
+module NestedQuotations = 
+    open Microsoft.FSharp.Quotations
+    open System.Linq.Expressions
+    open System
+
+    let unnested1 = <@ 100 @> 
+    let unnested2 = <@@ 100 @@> 
+    let nested1 = <@@ <@ 100 @> @@>   
+    let nested2 = <@@ <@@ 100 @@> @@> 
+    let nested3 = <@ <@ 100 @> @>     
+    let nested4 = <@ <@@ 100 @@> @>   
+
+    let runAll() = 
+        test "lfhwwlefkhelw-1a" (match nested1 with  Quote _ -> true | _ -> false)
+        test "lfhwwlefkhelw-1b" (match nested1 with  QuoteTyped _ -> true | _ -> false)
+        test "lfhwwlefkhelw-1c" (match nested1 with  QuoteRaw _ -> false | _ -> true)
+        test "lfhwwlefkhelw-2a" (match nested2 with  Quote _ -> true | _ -> false)
+        test "lfhwwlefkhelw-2b" (match nested2 with  QuoteTyped _ -> false | _ -> true)
+        test "lfhwwlefkhelw-2c" (match nested2 with  QuoteRaw _ -> true | _ -> false)
+        test "lfhwwlefkhelw-3a" (match nested3 with  Quote _ -> true | _ -> false)
+        test "lfhwwlefkhelw-3b" (match nested3 with  QuoteTyped _ -> true | _ -> true)
+        test "lfhwwlefkhelw-3c" (match nested3 with  QuoteRaw _ -> false | _ -> true)
+        test "lfhwwlefkhelw-4a" (match nested4 with  Quote _ -> true | _ -> false)
+        test "lfhwwlefkhelw-4b" (match nested4 with  QuoteRaw _ -> true | _ -> false)
+        test "lfhwwlefkhelw-4c" (match nested4 with  QuoteTyped _ -> false | _ -> true)
+        test "clenewjclkw-1" (match Expr.Quote unnested1 with  QuoteTyped _ -> true | _ -> false)
+        test "clenewjclkw-2" (match Expr.QuoteRaw unnested1 with  QuoteRaw _ -> true | _ -> false)
+        test "clenewjclkw-3" (match Expr.Quote unnested2 with  QuoteTyped _ -> true | _ -> false)
+        test "clenewjclkw-4" (match Expr.QuoteRaw unnested2 with  QuoteRaw _ -> true | _ -> false)
+        test "clenewjclkw-5" (unnested1.Type = typeof)
+        test "clenewjclkw-6" (unnested2.Type = typeof)
+        test "clenewjclkw-7" (Expr.Quote(unnested1).Type = typeof>)
+        test "clenewjclkw-8" (Expr.Quote(unnested2).Type = typeof>)
+        test "clenewjclkw-9" (Expr.QuoteTyped(unnested1).Type = typeof>)
+        test "clenewjclkw-10" (Expr.QuoteTyped(unnested2).Type = typeof>)
+        test "clenewjclkw-11" (Expr.QuoteRaw(unnested1).Type = typeof)
+        test "clenewjclkw-12" (Expr.QuoteRaw(unnested2).Type = typeof)
+
+    runAll()
+
+module ExtensionMembersWithSameName = 
+
+    type System.Object with
+        []
+        member this.Add(x) = x
+        []
+        member this.Add(x, y) = x + y
+        []
+        static member SAdd(x) = x
+        []
+        static member SAdd(x, y) = x + y
+
+    let runAll () =
+        match  <@ obj().Add(2) @> with
+        | (Patterns.Call(_, m, _)) -> 
+            let text = m |> Expr.TryGetReflectedDefinition |> sprintf "%A"
+            check "clewwenf094" text "Some Lambda (this, Lambda (x, x))"
+        | _ -> failwith "unexpected shape"
+
+        match  <@ obj().Add(2,3) @> with
+        | (Patterns.Call(_, m, _)) -> 
+            let text = m |> Expr.TryGetReflectedDefinition |> sprintf "%A"
+            check "clewwenf095" (m.GetParameters().Length) 3
+        | _ -> failwith "unexpected shape"
+
+        match  <@ obj.SAdd(2) @> with
+        | (Patterns.Call(_, m, _)) -> 
+            let text = m |> Expr.TryGetReflectedDefinition |> sprintf "%A"
+            check "clewwenf096" text "Some Lambda (x, x)"
+        | _ -> failwith "unexpected shape"
+
+        match  <@ obj.SAdd(2,3) @> with
+        | (Patterns.Call(_, m, _)) -> 
+            let text = m |> Expr.TryGetReflectedDefinition |> sprintf "%A"
+            check "clewwenf097" (m.GetParameters().Length) 2
+        | _ -> failwith "unexpected shape"
+
+    runAll()
+
 let aa =
   if not failures.IsEmpty then (printfn "Test Failed, failures = %A" failures; exit 1) 
   else (stdout.WriteLine "Test Passed"; 
diff --git a/tests/fsharp/core/quotesInMultipleModules/build.bat b/tests/fsharp/core/quotesInMultipleModules/build.bat
index c90e6d3d6a4..59f5d7ffb3b 100644
--- a/tests/fsharp/core/quotesInMultipleModules/build.bat
+++ b/tests/fsharp/core/quotesInMultipleModules/build.bat
@@ -28,6 +28,13 @@ rem fsc.exe building
     "%PEVERIFY%" module2.exe 
     @if ERRORLEVEL 1 goto Error
     
+    "%FSC%" %fsc_flags% --staticlink:module1 -o:module2-staticlink.exe -r:module1.dll module2.fsx
+    @if ERRORLEVEL 1 goto Error
+
+    "%PEVERIFY%" module2-staticlink.exe 
+    @if ERRORLEVEL 1 goto Error
+    
+
 
     "%FSC%" %fsc_flags% -o:module1-opt.dll --target:library --optimize module1.fsx
     @if ERRORLEVEL 1 goto Error
diff --git a/tests/fsharp/core/quotesInMultipleModules/module1.fsx b/tests/fsharp/core/quotesInMultipleModules/module1.fsx
index 8382f4adcaf..139da0e9261 100644
--- a/tests/fsharp/core/quotesInMultipleModules/module1.fsx
+++ b/tests/fsharp/core/quotesInMultipleModules/module1.fsx
@@ -9,3 +9,9 @@ module Test =
 
     let bar() = 
         sprintf "%A" (run())
+
+type C() = 
+
+  []
+  static member F x = (C(), System.DateTime.Now)
+
diff --git a/tests/fsharp/core/quotesInMultipleModules/module2.fsx b/tests/fsharp/core/quotesInMultipleModules/module2.fsx
index aea75fb914f..ce26e6e723e 100644
--- a/tests/fsharp/core/quotesInMultipleModules/module2.fsx
+++ b/tests/fsharp/core/quotesInMultipleModules/module2.fsx
@@ -1,9 +1,37 @@
 let a = Module1.Test.bar()
 let b = sprintf "%A" (Module1.Test.run())
-if a = b then
+
+let test1 = (a=b)
+type D() = 
+
+  []
+  static member F x = (Module1.C(), D(), System.DateTime.Now)
+
+
+let z2 = Quotations.Expr.TryGetReflectedDefinition(typeof.GetMethod("F"))
+let s2 = (sprintf "%2000A" z2) 
+let test2 = (s2 = "Some Lambda (x, NewTuple (NewObject (C), PropertyGet (None, Now, [])))")
+
+let z3 = Quotations.Expr.TryGetReflectedDefinition(typeof.GetMethod("F"))
+let s3 = (sprintf "%2000A" z3) 
+let test3 = (s3 = "Some Lambda (x, NewTuple (NewObject (C), NewObject (D), PropertyGet (None, Now, [])))")
+
+if not test1 then 
+    stdout.WriteLine "*** test1 FAILED"; 
+    eprintf "FAILED, in-module result %s is different from out-module call %s" a b
+
+if not test2 then 
+    stdout.WriteLine "*** test2 FAILED"; 
+    eprintf "FAILED, %s is different from expected" s2
+if not test3 then 
+    stdout.WriteLine "*** test3 FAILED"; 
+    eprintf "FAILED, %s is different from expected" s3
+
+
+if test1 && test2 && test3 then
     stdout.WriteLine "Test Passed"; 
     System.IO.File.WriteAllText("test.ok","ok"); 
     exit 0
 else
-    eprintf "FAILED, in-module result %s is different from out-module call %s" a b
     exit 1
+
diff --git a/tests/fsharp/core/quotesInMultipleModules/run.bat b/tests/fsharp/core/quotesInMultipleModules/run.bat
index abde7fe996c..ff28bead416 100644
--- a/tests/fsharp/core/quotesInMultipleModules/run.bat
+++ b/tests/fsharp/core/quotesInMultipleModules/run.bat
@@ -30,6 +30,11 @@ echo TestD
     @if ERRORLEVEL 1 goto Error
     if NOT EXIST test.ok goto SetError
 
+    if exist test.ok (del /f /q test.ok)
+    %CLIX% module2-staticlink.exe
+    @if ERRORLEVEL 1 goto Error
+    if NOT EXIST test.ok goto SetError
+
 :Ok
 echo Ran fsharp %~f0 ok.
 endlocal
diff --git a/tests/fsharp/core/seq/test.fsx b/tests/fsharp/core/seq/test.fsx
index e245263dbc8..cec86850d9f 100644
--- a/tests/fsharp/core/seq/test.fsx
+++ b/tests/fsharp/core/seq/test.fsx
@@ -37,37 +37,37 @@ let test s b =
 
   
 check "rwfsjkla"
-   (let results = ref []
+   (let mutable results = []
     let ys =
         seq {
             try
                 try
                     failwith "foo"
                 finally
-                    results := 1::!results
+                    results <- 1::results
                     failwith "bar"
             finally
-                results := 2::!results
+                results <- 2::results
         }        
     try
         for _ in ys do ()
     with
-        Failure "bar" -> results := 3::!results
-    !results)
+        Failure "bar" -> results <- 3::results
+    results)
     [3;2;1]
     
 check "fgyeyrkerkl"
-   (let results = ref []
+   (let mutable results = []
     let xs = 
         seq {
             try
                 try
                     failwith "foo"
                 finally
-                    results := "a"::!results
+                    results <- "a"::results
                     failwith "bar"
             finally
-              results := "c"::!results
+              results <- "c"::results
               failwith "bar1"
         }
 
@@ -79,8 +79,8 @@ check "fgyeyrkerkl"
     try
         for _ in ys do ()
     with
-        Failure "bar1" -> results := "with"::!results
-    !results)
+        Failure "bar1" -> results <- "with"::results
+    results)
     ["with";"c";"a"]
 
 
@@ -106,9 +106,9 @@ check "rwfsfsdgba"
     [3;2;1]
 
 check "fgwehyr1"
-   (let results = ref []
-    let outerFinallyCalled = ref false
-    let innerFinallyCalled = ref false
+   (let mutable results = []
+    let mutable outerFinallyCalled = false
+    let mutable innerFinallyCalled = false
     let ys =
        seq {
           try 
@@ -117,9 +117,9 @@ check "fgwehyr1"
                 failwith "kaboom"
                 yield 2
              finally
-                innerFinallyCalled := true
+                innerFinallyCalled <- true
           finally
-             outerFinallyCalled := true
+             outerFinallyCalled <- true
        }
     // Capturing precisely when what happens
     let yIter = ys.GetEnumerator()
@@ -128,18 +128,18 @@ check "fgwehyr1"
         yIter.MoveNext() |> ignore
     with
         Failure "kaboom" ->
-            results := "kaboom"::!results
+            results <- "kaboom"::results
             
-    match !innerFinallyCalled, !outerFinallyCalled with
+    match innerFinallyCalled, outerFinallyCalled with
     |   false,false -> 
-            results := "beforeFinallyOk"::!results
+            results <- "beforeFinallyOk"::results
     |   _ -> ()            
     yIter.Dispose()
-    match !innerFinallyCalled, !outerFinallyCalled with
+    match innerFinallyCalled, outerFinallyCalled with
     |   true,true -> 
-            results := "afterFinallyOk"::!results
+            results <- "afterFinallyOk"::results
     |   _ -> ()
-    !results)
+    results)
     ["afterFinallyOk";"beforeFinallyOk";"kaboom"]
 
 check "fgwehyr2"
diff --git a/tests/fsharp/core/subtype/test.fsx b/tests/fsharp/core/subtype/test.fsx
index fc8959f66cf..321c202c963 100644
--- a/tests/fsharp/core/subtype/test.fsx
+++ b/tests/fsharp/core/subtype/test.fsx
@@ -829,72 +829,72 @@ module TestSideEffectOrderForLambdasIntroducedBySubsumption1 =
     let vA = A()
     let vB = B()
 
-    let x = ref 0
+    let mutable x = 0
 
     let f (a:A) = 
-        x := 1
+        x <- 1
         fun (b:A,c:A) ->
-            x := 2
+            x <- 2
             fun (c:int) ->
-                x := 3
+                x <- 3
                 99
 
     module Test1 = 
 
-        check "nckew9" !x 0
+        check "nckew9" x 0
         let f1  :      A * A -> int -> int = f   vA
-        check "nckew9" !x 1
+        check "nckew9" x 1
         let f1b :               int -> int = f1  (vA,vA)  // no precomputation here when T is class type
-        check "nckew9" !x 2
+        check "nckew9" x 2
         let f1c :                      int = f1b 3       // no precomputation here when T is class type
-        check "nckew9" !x 3
+        check "nckew9" x 3
 
 
     module Test2 = 
-        x := 0
-        check "nckew9" !x 0
+        x <- 0
+        check "nckew9" x 0
         let f2  :      A * A -> int -> int = f  vB
-        check "nckew9" !x 1
+        check "nckew9" x 1
         let f2b :               int -> int = f2 (vB,vB)  // no precomputation here when T is class type
-        check "nckew9" !x 2
+        check "nckew9" x 2
         let f1c :                      int = f2b 3       // no precomputation here when T is class type
-        check "nckew9" !x 3
+        check "nckew9" x 3
 
     module Test3 = 
-        x := 0
-        check "nckew9" !x 0
+        x <- 0
+        check "nckew9" x 0
         let f2  :      A * A -> int -> int = f  vB
-        check "nckew9" !x 1
+        check "nckew9" x 1
         let f2b :               int -> int = f2 (vA,vB)  // no precomputation here when T is class type
-        check "nckew9" !x 2
+        check "nckew9" x 2
         let f1c :                      int = f2b 3       // no precomputation here when T is class type
-        check "nckew9" !x 3
+        check "nckew9" x 3
 
 
     module Test4 = 
         let TEST (f:A -> A * A -> int -> int) = 
-            x := 0
-            check "nckew9" !x 0
+            x <- 0
+            check "nckew9" x 0
             let f2  :      A * A -> int -> int = f  vB
-            check "nckew9" !x 1
+            check "nckew9" x 1
             let f2b :               int -> int = f2 (vA,vB)  // no precomputation here when T is class type
-            check "nckew9" !x 2
+            check "nckew9" x 2
             let f1c :                      int = f2b 3       // no precomputation here when T is class type
-            check "nckew9" !x 3
+            check "nckew9" x 3
 
         TEST f
         
 
     module Test5 = 
         let TEST (f:A -> A * B -> int -> int) = 
-            x := 0
-            check "nckew9" !x 0
+            x <- 0
+            check "nckew9" x 0
             let f2  :      A * B -> int -> int = f  vB
-            check "nckew9" !x 1
+            check "nckew9" x 1
             let f2b :               int -> int = f2 (vA,vB)  // no precomputation here when T is class type
-            check "nckew9" !x 2
+            check "nckew9" x 2
             let f1c :                      int = f2b 3       // no precomputation here when T is class type
-            check "nckew9" !x 3
+            check "nckew9" x 3
 
         TEST f    
 
@@ -1696,6 +1696,16 @@ module RecordPropertyConstraintTests =
     check "ckjwnewk" (f8()) (System.TimeSpan.FromSeconds 2.0) // after mutation
     check "ckjwnewk" (f10()) "Gary"
 
+
+// See https://github.com/Microsoft/visualfsharp/issues/238
+module GenericPropertyConstraintSolvedByRecord = 
+
+    type hober<'a> = { foo : 'a }
+
+    let inline print_foo_memb x = box (^a : (member foo : 'b) x)
+
+    let v = print_foo_memb { foo=1 } 
+
 let aa =
   if not failures.IsEmpty then (printfn "Test Failed, failures = %A" failures; exit 1) 
 
diff --git a/tests/fsharp/core/unitsOfMeasure/test.fs b/tests/fsharp/core/unitsOfMeasure/test.fs
index 053c7965a82..3a8f4aaa7ef 100644
--- a/tests/fsharp/core/unitsOfMeasure/test.fs
+++ b/tests/fsharp/core/unitsOfMeasure/test.fs
@@ -16,6 +16,19 @@ let CreateBadImageFormatException () =
     let create a b c d (e:int<_>) (f:int) g = TheType.Create a b (int c) d e f g
     seq { yield create 0 0 0 0 0 0 [0] }
 
+
+// Regression test for https://github.com/Microsoft/visualfsharp/issues/30
+// (Compilation error: "Incorrect number of type arguments to local call"
+
+type R<[] 'u> (f : float<'u>) =
+    member r.Member = f
+
+let get (r : R<_>) = r.Member
+let foo =
+    let problem _ = List.map get
+    problem // Error: Incorrect number of type arguments to local call
+
+
 module TestLibrary =
 
     [] 
diff --git a/tests/fsharp/optimize/analyses/effects.HasEffect.output.test.bsl b/tests/fsharp/optimize/analyses/effects.HasEffect.output.test.bsl
index 247aa52a084..cbe4469bf05 100644
--- a/tests/fsharp/optimize/analyses/effects.HasEffect.output.test.bsl
+++ b/tests/fsharp/optimize/analyses/effects.HasEffect.output.test.bsl
@@ -48,3 +48,24 @@ function simpleLibraryUse19 at line 66 causes side effects or may not terminate
 function complexDataAnalysisFunction at line 73 causes no side effects
 function complexDataConstructionFunction at line 81 causes side effects or may not terminate
 function veryComplexDataConstructionFunction at line 90 causes side effects or may not terminate
+function ( .ctor ) at line 118 causes side effects or may not terminate
+function X at line 119 causes no side effects
+function A at line 121 causes no side effects
+function ( .ctor ) at line 124 causes side effects or may not terminate
+function X at line 125 causes no side effects
+function A at line 127 causes no side effects
+function ( .ctor ) at line 130 causes side effects or may not terminate
+function X at line 131 causes side effects or may not terminate
+function A at line 133 causes side effects or may not terminate
+function ( .ctor ) at line 135 causes side effects or may not terminate
+function Y at line 137 causes no side effects
+function Z at line 138 causes side effects or may not terminate
+function A at line 139 causes no side effects
+function ( .ctor ) at line 142 causes side effects or may not terminate
+function Y at line 144 causes no side effects
+function Z at line 145 causes side effects or may not terminate
+function A at line 146 causes no side effects
+function ( .ctor ) at line 149 causes side effects or may not terminate
+function Y at line 151 causes side effects or may not terminate
+function Z at line 152 causes side effects or may not terminate
+function A at line 153 causes side effects or may not terminate
\ No newline at end of file
diff --git a/tests/fsharp/optimize/analyses/effects.fs b/tests/fsharp/optimize/analyses/effects.fs
index 640e91458c7..f204199fb54 100644
--- a/tests/fsharp/optimize/analyses/effects.fs
+++ b/tests/fsharp/optimize/analyses/effects.fs
@@ -114,5 +114,42 @@ module BasicAnalysisTests =
                         complexDataConstructionFunction t1l t1k (complexDataConstructionFunction t1r k t2)
                 | _ -> failwith "veryComplexDataConstructionFunction"
             else complexDataConstructionFunction t1 k t2
+            
+    type NullNotPossible(i:int) =
+        member __.X = i   // no effects
+        abstract member A : int
+        default __.A = i  // no effects
+
+    []
+    type NullNotPossibleAttr(i:int) =
+        member __.X = i   // no effects
+        abstract member A : int
+        default __.A = i  // no effects
+
+    []
+    type NullPossible(i:int) =
+        member __.X = i   // yes effects
+        abstract member A : int
+        default __.A = i  // yes effects
+        
+    type DerivedFromNullPossible(i:int) =
+        inherit NullPossible(i)
+        member __.Y = i   // no effects
+        member __.Z = base.X   // yes effects
+        override __.A = i  // no effects
+      
+    []
+    type DerivedFromNullPossibleAttrFalse(i:int) =
+        inherit NullPossible(i)
+        member __.Y = i   // no effects
+        member __.Z = base.X   // yes effects
+        override __.A = i  // no effects
+
+    []
+    type DerivedFromNullPossibleAlsoNullPossible(i:int) =
+        inherit NullPossible(i)
+        member __.Y = i   // yes effects
+        member __.Z = base.X   // yes effects
+        override __.A = i  // yes effects
 
 printfn "Test run"
\ No newline at end of file
diff --git a/tests/fsharp/optimize/stats/stats.txt b/tests/fsharp/optimize/stats/stats.txt
index e90c910d6c6..676d5db65ad 100644
--- a/tests/fsharp/optimize/stats/stats.txt
+++ b/tests/fsharp/optimize/stats/stats.txt
@@ -451,3 +451,4 @@ Tue 07/14/2009,  9:26:43.59, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-clas
 12/01/2010, 13:52:55.65, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1372,  Microsoft.FSharp-methods, 5722, ,  Microsoft.FSharp-fields, 1934, Microsoft.FSharp.PowerPack-TypeFunc, 0, Microsoft.FSharp.PowerPack-classes, 637, Microsoft.FSharp.PowerPack-methods, 3952, Microsoft.FSharp.PowerPack-fields, 939,  
 20/01/2010, 19:59:48.26, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1368,  Microsoft.FSharp-methods, 5716, ,  Microsoft.FSharp-fields, 1933,  
 21/04/2010, 21:42:44.95, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 1376,  Microsoft.FSharp-methods, 5730, ,  Microsoft.FSharp-fields, 1945,  
+Sun 11/09/2014, 17:38:09.23, Microsoft.FSharp-TypeFunc, 0, Microsoft.FSharp-classes, 2504,  Microsoft.FSharp-methods, 8641, ,  Microsoft.FSharp-fields, 3827,  
diff --git a/tests/fsharp/typeProviders/builtin/SqlDataConnection/test.fsx b/tests/fsharp/typeProviders/builtin/SqlDataConnection/test.fsx
index 8886649defe..288c05c4663 100644
--- a/tests/fsharp/typeProviders/builtin/SqlDataConnection/test.fsx
+++ b/tests/fsharp/typeProviders/builtin/SqlDataConnection/test.fsx
@@ -150,12 +150,12 @@ module CheckSqlConnectionTypeProvider =
                 if isSQLExpressInstalled then
                     @"AttachDBFileName = '|DataDirectory|\" + northwind + "';Server='.\SQLEXPRESS';User Instance=true;Integrated Security=SSPI"
                 else
-                    "AttachDBFileName = '|DataDirectory|\\" + northwind + "';Server='(localdb)\\v11.0'"
+                    "AttachDBFileName = '|DataDirectory|\\" + northwind + "';Server='(localdb)\\MSSQLLocalDB'"
             else
                 if isSQLExpressInstalled then
                     @"AttachDBFileName = '" + System.IO.Path.Combine(__SOURCE_DIRECTORY__, northwindFile) + "';Server='.\SQLEXPRESS';User Instance=true;Integrated Security=SSPI"
                 else
-                    "AttachDBFileName = '" + System.IO.Path.Combine(__SOURCE_DIRECTORY__, northwindFile) + "';Server='(localdb)\\v11.0'"
+                    "AttachDBFileName = '" + System.IO.Path.Combine(__SOURCE_DIRECTORY__, northwindFile) + "';Server='(localdb)\\MSSQLLocalDB'"
 
         match connectionStringName with 
         | None -> ()
diff --git a/tests/fsharp/typeProviders/builtin/SqlEntityConnection/test.fsx b/tests/fsharp/typeProviders/builtin/SqlEntityConnection/test.fsx
index bc8f822c2b4..9ab3cd02f15 100644
--- a/tests/fsharp/typeProviders/builtin/SqlEntityConnection/test.fsx
+++ b/tests/fsharp/typeProviders/builtin/SqlEntityConnection/test.fsx
@@ -140,12 +140,12 @@ module CheckSqlEntityConnectionTypeProvider =
                 if isSQLExpressInstalled then
                     @"AttachDBFileName = '|DataDirectory|\" + northwind + "';Server='.\SQLEXPRESS';User Instance=true;Integrated Security=SSPI"
                 else
-                    "AttachDBFileName = '|DataDirectory|\\" + northwind + "';Server='(localdb)\\v11.0'"
+                    "AttachDBFileName = '|DataDirectory|\\" + northwind + "';Server='(localdb)\\MSSQLLocalDB'"
             else
                 if isSQLExpressInstalled then
                     @"AttachDBFileName = '" + System.IO.Path.Combine(__SOURCE_DIRECTORY__, northwindFile) + "';Server='.\SQLEXPRESS';User Instance=true;Integrated Security=SSPI"
                 else
-                    "AttachDBFileName = '" + System.IO.Path.Combine(__SOURCE_DIRECTORY__, northwindFile) + "';Server='(localdb)\\v11.0'"
+                    "AttachDBFileName = '" + System.IO.Path.Combine(__SOURCE_DIRECTORY__, northwindFile) + "';Server='(localdb)\\MSSQLLocalDB'"
 
         match connectionStringName with 
         | None -> ()
diff --git a/tests/fsharp/typeProviders/builtin/test.exe.config b/tests/fsharp/typeProviders/builtin/test.exe.config
index 4c083b6d9d7..cee22394daa 100644
--- a/tests/fsharp/typeProviders/builtin/test.exe.config
+++ b/tests/fsharp/typeProviders/builtin/test.exe.config
@@ -5,7 +5,7 @@
     
       
         
-        
+        
       
     
   
diff --git a/tests/fsharp/typeProviders/helloWorld/build.bat b/tests/fsharp/typeProviders/helloWorld/build.bat
index 9d5010a91c7..84c9dd4ed88 100644
--- a/tests/fsharp/typeProviders/helloWorld/build.bat
+++ b/tests/fsharp/typeProviders/helloWorld/build.bat
@@ -72,7 +72,11 @@ xcopy /y ..\bincompat1\*.dll .
 
 
 REM overwrite provider.dll
-"%FSC%" --define:ADD_AN_OPTIONAL_STATIC_PARAMETER --out:provider.dll -g -a ..\provider.fsx
+"%FSC%" --define:ADD_AN_OPTIONAL_STATIC_PARAMETER --define:USE_IMPLICIT_ITypeProvider2 --out:provider.dll -g -a ..\provider.fsx
+if ERRORLEVEL 1 goto :Error
+
+
+"%FSC%" -g -a -o:test_lib_recompiled.dll -r:provider.dll ..\test.fsx
 if ERRORLEVEL 1 goto :Error
 
 REM This is the important part of the binary compatibility part of the test: the new provider is being used, but 
@@ -87,6 +91,9 @@ if ERRORLEVEL 1 goto :Error
 "%PEVERIFY%" test_lib.dll
 if ERRORLEVEL 1 goto :Error
 
+"%PEVERIFY%" test_lib_recompiled.dll
+if ERRORLEVEL 1 goto :Error
+
 "%PEVERIFY%" testlib_client.exe
 if ERRORLEVEL 1 goto :Error
 
diff --git a/tests/fsharp/typeProviders/helloWorld/provider.fsx b/tests/fsharp/typeProviders/helloWorld/provider.fsx
index b65e00380bd..4ea849999e9 100644
--- a/tests/fsharp/typeProviders/helloWorld/provider.fsx
+++ b/tests/fsharp/typeProviders/helloWorld/provider.fsx
@@ -15,6 +15,7 @@ do ()
 
 []
 module Utils = 
+    let (|StartsWith|_|) p (s:string) = if s.StartsWith(p) then Some() else None
     let mkNamespace (name,typ:System.Type) = 
         { new IProvidedNamespace with
           member this.NamespaceName = name
@@ -40,6 +41,11 @@ module Utils =
                 member __.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, msg)  |]
                 member __.NamedArguments = upcast [| |] }
 
+    let mkAllowNullLiteralValueAttributeData(value: bool) = 
+        { new CustomAttributeData() with 
+                member __.Constructor =  typeof.GetConstructors().[0]
+                member __.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, value)  |]
+                member __.NamedArguments = upcast [| |] }
 
 type public Runtime() =
     static member Id x = x
@@ -90,6 +96,15 @@ type public GlobalNamespaceProvider() =
         member this.Invalidate = invalidation.Publish
         member this.GetGeneratedAssemblyContents(assembly) = failwith "GetGeneratedAssemblyContents"
 
+#if USE_IMPLICIT_ITypeProvider2
+    member this.GetStaticParametersForMethod _ = [||]
+    member this.ApplyStaticArgumentsForMethod(_,_,_) = raise <| System.InvalidOperationException()
+#else
+    interface ITypeProvider2 with
+        member this.GetStaticParametersForMethod _ = [||]
+        member this.ApplyStaticArgumentsForMethod(_,_,_) = raise <| System.InvalidOperationException()
+#endif
+
 
 
 []
@@ -99,6 +114,32 @@ type public Provider() =
     let rootNamespace = "FSharp.HelloWorld"
     let nestedNamespaceName1 = "FSharp.HelloWorld.NestedNamespace1"
     let nestedNamespaceName2 = "FSharp.HelloWorld.Nested.Nested.Nested.Namespace2"
+
+
+    // Test provision of erase methods with static parameters
+    let helloWorldMethodWithStaticParameters =
+        MemoizationTable(fun (isStatic, enclType, ty, nm, n:int) ->
+           TypeBuilder.CreateMethod(enclType, nm, ty, isStatic=isStatic, parameters=[| for i in 1..n -> TypeBuilder.CreateParameter("x" +  string i,ty) |]) :> MethodBase)
+
+    let helloWorldMethodsWithStaticParametersUninstantiated enclType =
+         [| yield helloWorldMethodWithStaticParameters.Apply(false,enclType,typeof,"HelloWorldInstanceMethodWithStaticCharParameter",0) :> MemberInfo 
+            yield helloWorldMethodWithStaticParameters.Apply(false,enclType,typeof,"HelloWorldInstanceMethodWithStaticBoolParameter",0) :> MemberInfo 
+            yield helloWorldMethodWithStaticParameters.Apply(false,enclType,typeof,"HelloWorldInstanceMethodWithStaticSByteParameter",0) :> MemberInfo 
+            yield helloWorldMethodWithStaticParameters.Apply(false,enclType,typeof,"HelloWorldInstanceMethodWithStaticInt16Parameter",0) :> MemberInfo 
+            yield helloWorldMethodWithStaticParameters.Apply(false,enclType,typeof,"HelloWorldInstanceMethodWithStaticInt32Parameter",0) :> MemberInfo 
+            yield helloWorldMethodWithStaticParameters.Apply(false,enclType,typeof,"HelloWorldInstanceMethodWithStaticOptionalInt32Parameter",0) :> MemberInfo 
+            yield helloWorldMethodWithStaticParameters.Apply(false,enclType,typeof,"HelloWorldInstanceMethodWithStaticInt64Parameter",0) :> MemberInfo 
+            yield helloWorldMethodWithStaticParameters.Apply(false,enclType,typeof,"HelloWorldInstanceMethodWithStaticByteParameter",0) :> MemberInfo 
+            yield helloWorldMethodWithStaticParameters.Apply(false,enclType,typeof,"HelloWorldInstanceMethodWithStaticUInt16Parameter",0) :> MemberInfo 
+            yield helloWorldMethodWithStaticParameters.Apply(true,enclType,typeof,"HelloWorldStaticMethodWithStaticUInt32Parameter",0) :> MemberInfo 
+            yield helloWorldMethodWithStaticParameters.Apply(true,enclType,typeof,"HelloWorldStaticMethodWithStaticUInt64Parameter",0) :> MemberInfo 
+            yield helloWorldMethodWithStaticParameters.Apply(false,enclType,typeof,"HelloWorldInstanceMethodWithStaticDayOfWeekParameter",0) :> MemberInfo 
+            yield helloWorldMethodWithStaticParameters.Apply(false,enclType,typeof,"HelloWorldInstanceMethodWithStaticStringParameter",0) :> MemberInfo 
+            yield helloWorldMethodWithStaticParameters.Apply(false,enclType,typeof,"HelloWorldInstanceMethodWithStaticSingleParameter",0) :> MemberInfo 
+            yield helloWorldMethodWithStaticParameters.Apply(false,enclType,typeof,"HelloWorldInstanceMethodWithStaticDoubleParameter",0) :> MemberInfo 
+            yield helloWorldMethodWithStaticParameters.Apply(false,enclType,typeof,"HelloWorldInstanceMethodWithStaticDecimalParameter",0) :> MemberInfo 
+         |]
+
     // Test provision of an erased class 
     let mkHelloWorldType namespaceName className baseType =
         let rec allMembers = 
@@ -184,6 +225,7 @@ type public Provider() =
                    yield TypeBuilder.CreateMethod(theType ,"TryWithSmokeTest2",typeof, isStatic=true, parameters=[|  |]) :> MemberInfo 
                    yield TypeBuilder.CreateMethod(theType ,"TryWithSmokeTest3",typeof, isStatic=true, parameters=[|  |]) :> MemberInfo 
                    
+                   yield! helloWorldMethodsWithStaticParametersUninstantiated theType
                    yield (theNestedType :> _)
                    yield TypeBuilder.CreateConstructor(theType,(fun _ -> [| |])) :> MemberInfo |]  
 
@@ -192,10 +234,14 @@ type public Provider() =
                 [| for (propertyName, propertyType) in  [for i in 1 .. 2 -> ("StaticProperty"+string i, (if i = 1 then typeof else typeof)) ] do 
                        let prop = TypeBuilder.CreateSyntheticProperty(theNestedType,propertyName,propertyType,isStatic=true) 
                        yield! TypeBuilder.JoinPropertiesIntoMemberInfos [prop]
-                   yield TypeBuilder.CreateConstructor(theNestedType,(fun _ -> [| |])) :> MemberInfo |]  
+                   yield TypeBuilder.CreateConstructor(theNestedType,(fun _ -> [| |])) :> MemberInfo
+                    |]  
 
-        and theType = TypeBuilder.CreateSimpleType(TypeContainer.Namespace(modul, namespaceName),className,members=allMembers,baseType=baseType)
-        and theNestedType = TypeBuilder.CreateSimpleType(TypeContainer.Type(theType),"NestedType",members=allMembersOfNestedType)
+        and theType = TypeBuilder.CreateSimpleType(TypeContainer.Namespace(modul, namespaceName),className,members=allMembers,baseType=baseType, 
+                                                   getCustomAttributes=(fun () -> [| mkAllowNullLiteralValueAttributeData(false) |]))
+
+        and theNestedType = TypeBuilder.CreateSimpleType(TypeContainer.Type(theType),"NestedType",members=allMembersOfNestedType, 
+                                                         getCustomAttributes=(fun () -> [| mkAllowNullLiteralValueAttributeData(true) |]))
 
         theType
     let helloWorldType = mkHelloWorldType rootNamespace "HelloWorldType" (typeof)
@@ -230,6 +276,8 @@ type public Provider() =
                          let prop = TypeBuilder.CreateSyntheticProperty(theType,propertyName,propertyType,isStatic=true) 
                          yield! TypeBuilder.JoinPropertiesIntoMemberInfos [prop]
                      yield (theNestedType :> _)
+                     // Note these are methods taking static parameters inside a type taking static parameters
+                     yield! helloWorldMethodsWithStaticParametersUninstantiated theType
                      yield TypeBuilder.CreateConstructor(theType,(fun _ -> [| |])) :> MemberInfo  |]
 
           and allMembersOfNestedType = 
@@ -245,7 +293,6 @@ type public Provider() =
 
           theType)
 
-    let helloWorldTypeWithStaticParameterUninstantiated = helloWorldTypeWithStaticParameters.Apply("HelloWorldTypeWithStaticParameter",1)
     let helloWorldTypeWithStaticCharParameterUninstantiated = helloWorldTypeWithStaticParameters.Apply("HelloWorldTypeWithStaticCharParameter",1)
     let helloWorldTypeWithStaticBoolParameterUninstantiated = helloWorldTypeWithStaticParameters.Apply("HelloWorldTypeWithStaticBoolParameter",1)
     let helloWorldTypeWithStaticSByteParameterUninstantiated = helloWorldTypeWithStaticParameters.Apply("HelloWorldTypeWithStaticSByteParameter",1)
@@ -263,6 +310,7 @@ type public Provider() =
     let helloWorldTypeWithStaticDoubleParameterUninstantiated = helloWorldTypeWithStaticParameters.Apply("HelloWorldTypeWithStaticDoubleParameter",1)
     let helloWorldTypeWithStaticDecimalParameterUninstantiated = helloWorldTypeWithStaticParameters.Apply("HelloWorldTypeWithStaticDecimalParameter",1)
 
+
     let mkNestedNamespace (name,typ) = 
         { new IProvidedNamespace with
              member this.NamespaceName = name
@@ -298,10 +346,10 @@ type public Provider() =
     // This implements both get_StaticProperty1 and get_StaticProperty2
     static member GetPropertyByName(propertyName:string) : 'T = 
         match propertyName with 
-        | nm when nm.StartsWith "StaticProperty1" -> "You got a static property" |> box |> unbox
-        | nm when nm.StartsWith "StaticProperty2" -> 42 |> box |> unbox
-        | nm when nm.StartsWith "StaticPropertyMinus" -> 40 - (int (nm.Replace("StaticPropertyMinus",""))) |> box |> unbox
-        | nm when nm.StartsWith "StaticProperty" -> int (nm.Replace("StaticProperty","")) + 40 |> box |> unbox
+        | StartsWith "StaticProperty1" -> "You got a static property" |> box |> unbox
+        | StartsWith "StaticProperty2" -> 42 |> box |> unbox
+        | StartsWith "StaticPropertyMinus" as nm -> 40 - (int (nm.Replace("StaticPropertyMinus",""))) |> box |> unbox
+        | StartsWith "StaticProperty" as nm -> int (nm.Replace("StaticProperty","")) + 40 |> box |> unbox
         | _ -> failwith "unexpected property"
 
     // This implements OneOptionalParameter and TwoOptionalParameters
@@ -515,6 +563,38 @@ type public Provider() =
                      <@@ (fun () -> System.Console.WriteLine "hello") @@>
                 elif syntheticMethodBase.Name = "LambdaSmokeTest3" then 
                      <@@ (fun x y -> x + y) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldInstanceMethodWithStaticCharParameter") then 
+                    <@@ (%%(parameterExpressions.[1]) : char) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldInstanceMethodWithStaticBoolParameter") then 
+                    <@@ (%%(parameterExpressions.[1]) : bool) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldInstanceMethodWithStaticSByteParameter") then 
+                    <@@ (%%(parameterExpressions.[1]) : sbyte) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldInstanceMethodWithStaticInt16Parameter") then 
+                    <@@ (%%(parameterExpressions.[1]) : int16) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldInstanceMethodWithStaticInt32Parameter") then 
+                    <@@ (%%(parameterExpressions.[1]) : int32) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldInstanceMethodWithStaticUInt16Parameter") then 
+                    <@@ (%%(parameterExpressions.[1]) : int32) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldInstanceMethodWithStaticOptionalInt32Parameter") then 
+                    <@@ (%%(parameterExpressions.[1]) : int32) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldInstanceMethodWithStaticInt64Parameter") then 
+                    <@@ (%%(parameterExpressions.[1]) : int64) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldInstanceMethodWithStaticByteParameter") then 
+                    <@@ (%%(parameterExpressions.[1]) : byte) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldStaticMethodWithStaticUInt32Parameter") then 
+                    <@@ (%%(parameterExpressions.[0]) : uint32) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldStaticMethodWithStaticUInt64Parameter") then 
+                    <@@ (%%(parameterExpressions.[0]) : uint64) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldInstanceMethodWithStaticDayOfWeekParameter") then 
+                    <@@ (%%(parameterExpressions.[1]) : System.DayOfWeek) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldInstanceMethodWithStaticStringParameter") then 
+                    <@@ (%%(parameterExpressions.[1]) : string) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldInstanceMethodWithStaticSingleParameter") then 
+                    <@@ (%%(parameterExpressions.[1]) : single) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldInstanceMethodWithStaticDoubleParameter") then 
+                    <@@ (%%(parameterExpressions.[1]) : double) @@>
+                elif syntheticMethodBase.Name.StartsWith("HelloWorldInstanceMethodWithStaticDecimalParameter") then 
+                    <@@ (%%(parameterExpressions.[1]) : decimal) @@>                     
                 elif syntheticMethodBase.Name = "CallInstrinsics" then 
                      <@@ [ ((true & false) |> box);
                            ((true && false) |> box);
@@ -813,6 +893,102 @@ type public Provider() =
 
         member this.GetGeneratedAssemblyContents(assembly) = failwith "GetGeneratedAssemblyContents"
 
+    member this.GetStaticParametersForMethodImpl(methodWithoutArguments: MethodBase) =
+     [| match methodWithoutArguments.Name with
+        | StartsWith "HelloWorldInstanceMethodWithStaticSByteParameter" -> yield TypeBuilder.CreateStaticParameter("Count",typeof, 0) 
+        | StartsWith "HelloWorldInstanceMethodWithStaticInt16Parameter" -> yield TypeBuilder.CreateStaticParameter("Count",typeof, 0) 
+        | StartsWith "HelloWorldInstanceMethodWithStaticInt32Parameter" -> yield TypeBuilder.CreateStaticParameter("Count",typeof, 0) 
+        | StartsWith "HelloWorldInstanceMethodWithStaticOptionalInt32Parameter" -> 
+                yield TypeBuilder.CreateStaticParameter("Count",typeof, 0, defaultValue=42) 
+#if ADD_AN_OPTIONAL_STATIC_PARAMETER
+                yield TypeBuilder.CreateStaticParameter("ExtraParameter",typeof, 1, defaultValue=43)             
+#endif
+        | StartsWith "HelloWorldInstanceMethodWithStaticInt64Parameter" -> yield TypeBuilder.CreateStaticParameter("Count",typeof, 0) 
+        | StartsWith "HelloWorldInstanceMethodWithStaticByteParameter" -> yield TypeBuilder.CreateStaticParameter("Count",typeof, 0) 
+        | StartsWith "HelloWorldInstanceMethodWithStaticUInt16Parameter" -> yield TypeBuilder.CreateStaticParameter("Count",typeof, 0) 
+        | StartsWith "HelloWorldStaticMethodWithStaticUInt32Parameter" -> yield TypeBuilder.CreateStaticParameter("Count",typeof, 0) 
+        | StartsWith "HelloWorldStaticMethodWithStaticUInt64Parameter" -> yield TypeBuilder.CreateStaticParameter("Count",typeof, 0) 
+        | StartsWith "HelloWorldInstanceMethodWithStaticDayOfWeekParameter" -> yield TypeBuilder.CreateStaticParameter("Count",typeof, 0) 
+        | StartsWith "HelloWorldInstanceMethodWithStaticDecimalParameter" -> yield TypeBuilder.CreateStaticParameter("Count",typeof, 0) 
+        | StartsWith "HelloWorldInstanceMethodWithStaticSingleParameter" -> yield TypeBuilder.CreateStaticParameter("Count",typeof, 0) 
+        | StartsWith "HelloWorldInstanceMethodWithStaticDoubleParameter" -> yield TypeBuilder.CreateStaticParameter("Count",typeof, 0) 
+        | StartsWith "HelloWorldInstanceMethodWithStaticBoolParameter" -> yield TypeBuilder.CreateStaticParameter("Count",typeof, 0) 
+        | StartsWith "HelloWorldInstanceMethodWithStaticCharParameter" -> yield TypeBuilder.CreateStaticParameter("Count",typeof, 0) 
+        | _ -> () |]
+
+    member this.ApplyStaticArgumentsForMethodImpl(methodWithoutArguments: MethodBase, mangledName:string, staticArguments:obj[]) = 
+        let methodNameWithArguments = mangledName
+        match methodWithoutArguments.Name with
+        | "HelloWorldMethod" -> 
+            if staticArguments.Length <> 0 then failwith "this provided method does not accept static parameters" 
+            methodWithoutArguments
+        | StartsWith "HelloWorldInstanceMethodWithStaticSByteParameter" -> 
+            if staticArguments.Length <> 1 then failwith "this provided method accepts one static parameter" 
+            helloWorldMethodWithStaticParameters.Apply(false,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, staticArguments.[0] :?> sbyte |> int)
+        | StartsWith "HelloWorldInstanceMethodWithStaticInt16Parameter" -> 
+            if staticArguments.Length <> 1 then failwith "this provided method accepts one static parameter" 
+            helloWorldMethodWithStaticParameters.Apply(false,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, staticArguments.[0] :?> int16 |> int)
+        | StartsWith "HelloWorldInstanceMethodWithStaticInt32Parameter" -> 
+            if staticArguments.Length <> 1 then failwith "this provided method accepts one static parameter" 
+            helloWorldMethodWithStaticParameters.Apply(false,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, staticArguments.[0] :?> int)
+        | StartsWith "HelloWorldInstanceMethodWithStaticInt64Parameter" -> 
+            if staticArguments.Length <> 1 then failwith "this provided method accepts one static parameter" 
+            helloWorldMethodWithStaticParameters.Apply(false,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, staticArguments.[0] :?> int64 |> int)
+        | StartsWith "HelloWorldInstanceMethodWithStaticByteParameter" -> 
+            if staticArguments.Length <> 1 then failwith "this provided method accepts one static parameter" 
+            helloWorldMethodWithStaticParameters.Apply(false,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, staticArguments.[0] :?> byte |> int)
+        | StartsWith "HelloWorldInstanceMethodWithStaticUInt16Parameter" -> 
+            if staticArguments.Length <> 1 then failwith "this provided method accepts one static parameter" 
+            helloWorldMethodWithStaticParameters.Apply(false,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, staticArguments.[0] :?> uint16 |> int)
+        | StartsWith "HelloWorldStaticMethodWithStaticUInt32Parameter" -> 
+            if staticArguments.Length <> 1 then failwith "this provided method accepts one static parameter" 
+            helloWorldMethodWithStaticParameters.Apply(true,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, staticArguments.[0] :?> uint32 |> int)
+        | StartsWith "HelloWorldStaticMethodWithStaticUInt64Parameter" -> 
+            if staticArguments.Length <> 1 then failwith "this provided method accepts one static parameter" 
+            helloWorldMethodWithStaticParameters.Apply(true,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, staticArguments.[0] :?> uint64 |> int)
+        | StartsWith "HelloWorldInstanceMethodWithStaticDayOfWeekParameter" -> 
+            if staticArguments.Length <> 1 then failwith "this provided method accepts one static parameter" 
+            helloWorldMethodWithStaticParameters.Apply(false,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, staticArguments.[0] :?> System.DayOfWeek |> int)
+        | StartsWith "HelloWorldInstanceMethodWithStaticBoolParameter" -> 
+            if staticArguments.Length <> 1 then failwith "this provided method accepts one static parameter" 
+            helloWorldMethodWithStaticParameters.Apply(false,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, if (staticArguments.[0] :?> bool) then 1 else 0)
+        | StartsWith "HelloWorldInstanceMethodWithStaticStringParameter" -> 
+            if staticArguments.Length <> 1 then failwith "this provided method accepts one static parameter" 
+            helloWorldMethodWithStaticParameters.Apply(false,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, staticArguments.[0] :?> string |> String.length)
+        | StartsWith "HelloWorldInstanceMethodWithStaticDecimalParameter" -> 
+            if staticArguments.Length <> 1 then failwith "this provided method accepts one static parameter" 
+            helloWorldMethodWithStaticParameters.Apply(false,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, staticArguments.[0] :?> decimal |> int)
+        | StartsWith "HelloWorldInstanceMethodWithStaticCharParameter" -> 
+            if staticArguments.Length <> 1 then failwith "this provided method accepts one static parameter" 
+            helloWorldMethodWithStaticParameters.Apply(false,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, staticArguments.[0] :?> char |> int)
+        | StartsWith "HelloWorldInstanceMethodWithStaticSingleParameter" -> 
+            if staticArguments.Length <> 1 then failwith "this provided method accepts one static parameter" 
+            helloWorldMethodWithStaticParameters.Apply(false,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, staticArguments.[0] :?> single |> int)
+        | StartsWith "HelloWorldInstanceMethodWithStaticDoubleParameter" -> 
+            if staticArguments.Length <> 1 then failwith "this provided method accepts one static parameter" 
+            helloWorldMethodWithStaticParameters.Apply(false,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, staticArguments.[0] :?> double |> int)
+
+        | StartsWith "HelloWorldInstanceMethodWithStaticOptionalInt32Parameter" -> 
+#if ADD_AN_OPTIONAL_STATIC_PARAMETER
+            if staticArguments.Length <> 2 then failwith "this provided method accepts two static parameters" 
+#else
+            if staticArguments.Length <> 1 then failwith "this provided method accepts zero, one static parameter" 
+#endif
+            helloWorldMethodWithStaticParameters.Apply(false,methodWithoutArguments.DeclaringType,typeof,methodNameWithArguments, staticArguments.[0] :?> int)
+
+        | nm -> failwith (sprintf "ApplyStaticArgumentsForMethod %s" nm)
+
+#if USE_IMPLICIT_ITypeProvider2
+    member this.GetStaticParametersForMethod(methodWithoutArguments) = this.GetStaticParametersForMethodImpl(methodWithoutArguments)
+    member this.ApplyStaticArgumentsForMethod(methodWithoutArguments, mangledName, staticArguments) = this.ApplyStaticArgumentsForMethodImpl(methodWithoutArguments, mangledName, staticArguments) 
+#else
+    interface ITypeProvider2 with
+        member this.GetStaticParametersForMethod(methodWithoutArguments) = this.GetStaticParametersForMethodImpl(methodWithoutArguments)
+        member this.ApplyStaticArgumentsForMethod(methodWithoutArguments, mangledName, staticArguments) = 
+            this.ApplyStaticArgumentsForMethodImpl(methodWithoutArguments, mangledName, staticArguments) 
+#endif
+
+
 []
 type public GenerativeProvider(config: TypeProviderConfig) =
     let modul = typeof.Assembly.GetModules().[0]
diff --git a/tests/fsharp/typeProviders/helloWorld/test.fsx b/tests/fsharp/typeProviders/helloWorld/test.fsx
index e7baf01e332..d68f9c6634e 100644
--- a/tests/fsharp/typeProviders/helloWorld/test.fsx
+++ b/tests/fsharp/typeProviders/helloWorld/test.fsx
@@ -111,6 +111,15 @@ module BasicErasedProvidedTypeTest =
         [| 3;6 |]
 
 
+    check "cwkeonwe09a13355 - null attrib can't be used"
+        (null: FSharp.HelloWorld.HelloWorldType.NestedType) // should NOT  give a type error - this explicitly has AllowNullLiteralAttribute(true), so a null literal is allowed
+        null
+
+    // should NOT give a type error - this doesn't have any attributes, and a null literal is allowed by default
+    check "cwkeonwe09a13355 - null attrib"
+        (null : FSharp.HelloWorld.HelloWorldSubType) 
+        null
+
     check "cwkeonwe09a13355"
         (FSharp.HelloWorld.HelloWorldType.ReturnsEmptyNewArray())
         [| |]
@@ -708,6 +717,56 @@ module Char =
         FSharp.HelloWorld.HelloWorldTypeWithStaticCharParameter<'A'>.StaticProperty1
         "You got a static property"
 
+    check "vlkrrevpojvr2"
+        (FSharp.HelloWorld.HelloWorldType().HelloWorldInstanceMethodWithStaticCharParameter<'\001'>('a'))
+        'a'
+
+    let hw = FSharp.HelloWorld.HelloWorldType()
+    check "vlkrrevpojvr2"
+        (hw.HelloWorldInstanceMethodWithStaticCharParameter<'\001'>('a'))
+        'a'
+
+    check "vlkrrevpojvr2b"
+        (hw.HelloWorldInstanceMethodWithStaticDecimalParameter<1M>(10M))
+        10M
+
+    check "vlkrrevpojvr2c"
+        (hw.HelloWorldInstanceMethodWithStaticBoolParameter(true))
+        true
+
+    // Check a static method
+    check "vlkrrevpojvr2d"
+        (FSharp.HelloWorld.HelloWorldType.HelloWorldStaticMethodWithStaticUInt32Parameter<1u>(10u))
+        10u
+
+    // Check another static method
+    check "vlkrrevpojvr2e"
+        (FSharp.HelloWorld.HelloWorldType.HelloWorldStaticMethodWithStaticUInt64Parameter<1UL>(10UL))
+        10UL
+
+    // Check an enum type
+    check "vlkrrevpojvr2f"
+        (hw.HelloWorldInstanceMethodWithStaticDayOfWeekParameter(System.DayOfWeek.Tuesday))
+        System.DayOfWeek.Tuesday
+
+
+    check "vlkrrevpojvr3"
+        (FSharp.HelloWorld.HelloWorldTypeWithStaticCharParameter<'A'>().HelloWorldInstanceMethodWithStaticCharParameter<'\001'>('a'))
+        'a'
+
+    let x = new FSharp.HelloWorld.HelloWorldTypeWithStaticCharParameter<'A'>()
+    check "vlkrrevpojvr2s"
+        (x.HelloWorldInstanceMethodWithStaticInt16Parameter<1s>(10s))
+        10s
+
+    check "vlkrrevpojvr2L"
+        (x.HelloWorldInstanceMethodWithStaticInt64Parameter<1L>(10L))
+        10L
+
+    check "vlkrrevpojvr2Lb"
+        (x.HelloWorldInstanceMethodWithStaticInt64Parameter<2L>(10L,10L))
+        10L
+
 module String = 
     check "vlkrrevpojvr1"
         FSharp.HelloWorld.HelloWorldTypeWithStaticStringParameter<"10000">.StaticProperty1
diff --git a/tests/fsharp/typeProviders/negTests/neg1.bsl b/tests/fsharp/typeProviders/negTests/neg1.bsl
index 97c9d248f81..d73b4f383ff 100644
--- a/tests/fsharp/typeProviders/negTests/neg1.bsl
+++ b/tests/fsharp/typeProviders/negTests/neg1.bsl
@@ -194,43 +194,207 @@ neg1.fsx(19,39,19,67): typecheck error FS3033: The type provider 'Provider.EvilP
 
 neg1.fsx(20,39,20,73): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsRaisesException' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
 
-neg1.fsx(20,39,20,73): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetMethodsRaisesException' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
+neg1.fsx(20,39,20,73): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsRaisesException' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(20,39,20,73): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsRaisesException' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(20,39,20,73): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsRaisesException' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(20,39,20,73): typecheck error FS0039: The type 'TypeWhereGetMethodsRaisesException' is not defined
+
+neg1.fsx(20,39,20,73): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsRaisesException' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(20,39,20,73): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsRaisesException' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(20,39,20,73): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsRaisesException' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(20,39,20,73): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsRaisesException' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(20,39,20,73): typecheck error FS0039: The type 'TypeWhereGetMethodsRaisesException' is not defined
 
 neg1.fsx(21,39,21,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsRaisesException' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
 
-neg1.fsx(21,39,21,72): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetEventsRaisesException' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
+neg1.fsx(21,39,21,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsRaisesException' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(21,39,21,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsRaisesException' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(21,39,21,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsRaisesException' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(21,39,21,72): typecheck error FS0039: The type 'TypeWhereGetEventsRaisesException' is not defined
+
+neg1.fsx(21,39,21,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsRaisesException' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(21,39,21,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsRaisesException' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(21,39,21,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsRaisesException' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(21,39,21,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsRaisesException' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(21,39,21,72): typecheck error FS0039: The type 'TypeWhereGetEventsRaisesException' is not defined
 
 neg1.fsx(22,39,22,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsRaisesException' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
 
-neg1.fsx(22,39,22,72): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetFieldsRaisesException' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
+neg1.fsx(22,39,22,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsRaisesException' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(22,39,22,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsRaisesException' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(22,39,22,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsRaisesException' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(22,39,22,72): typecheck error FS0039: The type 'TypeWhereGetFieldsRaisesException' is not defined
+
+neg1.fsx(22,39,22,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsRaisesException' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(22,39,22,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsRaisesException' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(22,39,22,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsRaisesException' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(22,39,22,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsRaisesException' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(22,39,22,72): typecheck error FS0039: The type 'TypeWhereGetFieldsRaisesException' is not defined
+
+neg1.fsx(23,39,23,76): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesRaisesException' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(23,39,23,76): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesRaisesException' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(23,39,23,76): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesRaisesException' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(23,39,23,76): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesRaisesException' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(23,39,23,76): typecheck error FS0039: The type 'TypeWhereGetPropertiesRaisesException' is not defined
+
+neg1.fsx(23,39,23,76): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesRaisesException' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(23,39,23,76): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesRaisesException' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
 
 neg1.fsx(23,39,23,76): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesRaisesException' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
 
+neg1.fsx(23,39,23,76): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesRaisesException' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(23,39,23,76): typecheck error FS0039: The type 'TypeWhereGetPropertiesRaisesException' is not defined
+
 neg1.fsx(24,39,24,77): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetNestedTypesRaisesException' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
 
 neg1.fsx(25,39,25,78): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsRaisesException' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
 
-neg1.fsx(25,39,25,78): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsRaisesException' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
+neg1.fsx(25,39,25,78): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsRaisesException' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(25,39,25,78): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsRaisesException' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(25,39,25,78): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsRaisesException' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(25,39,25,78): typecheck error FS0039: The type 'TypeWhereGetConstructorsRaisesException' is not defined
+
+neg1.fsx(25,39,25,78): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsRaisesException' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(25,39,25,78): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsRaisesException' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(25,39,25,78): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsRaisesException' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(25,39,25,78): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsRaisesException' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: deliberate error for testing purposes
+
+neg1.fsx(25,39,25,78): typecheck error FS0039: The type 'TypeWhereGetConstructorsRaisesException' is not defined
 
 neg1.fsx(27,39,27,69): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsReturnsNull' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetMethods'
 
-neg1.fsx(27,39,27,69): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetMethodsReturnsNull' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
+neg1.fsx(27,39,27,69): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsReturnsNull' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetMethods'
+
+neg1.fsx(27,39,27,69): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsReturnsNull' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetMethods'
+
+neg1.fsx(27,39,27,69): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsReturnsNull' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetMethods'
+
+neg1.fsx(27,39,27,69): typecheck error FS0039: The type 'TypeWhereGetMethodsReturnsNull' is not defined
+
+neg1.fsx(27,39,27,69): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsReturnsNull' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetMethods'
+
+neg1.fsx(27,39,27,69): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsReturnsNull' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetMethods'
+
+neg1.fsx(27,39,27,69): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsReturnsNull' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetMethods'
+
+neg1.fsx(27,39,27,69): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetMethodsReturnsNull' member 'GetMethods': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetMethods'
+
+neg1.fsx(27,39,27,69): typecheck error FS0039: The type 'TypeWhereGetMethodsReturnsNull' is not defined
+
+neg1.fsx(28,39,28,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsReturnsNull' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetEvents'
+
+neg1.fsx(28,39,28,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsReturnsNull' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetEvents'
+
+neg1.fsx(28,39,28,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsReturnsNull' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetEvents'
+
+neg1.fsx(28,39,28,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsReturnsNull' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetEvents'
+
+neg1.fsx(28,39,28,68): typecheck error FS0039: The type 'TypeWhereGetEventsReturnsNull' is not defined
+
+neg1.fsx(28,39,28,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsReturnsNull' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetEvents'
+
+neg1.fsx(28,39,28,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsReturnsNull' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetEvents'
+
+neg1.fsx(28,39,28,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsReturnsNull' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetEvents'
 
 neg1.fsx(28,39,28,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetEventsReturnsNull' member 'GetEvents': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetEvents'
 
-neg1.fsx(28,39,28,68): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetEventsReturnsNull' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
+neg1.fsx(28,39,28,68): typecheck error FS0039: The type 'TypeWhereGetEventsReturnsNull' is not defined
+
+neg1.fsx(29,39,29,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsReturnsNull' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetFields'
+
+neg1.fsx(29,39,29,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsReturnsNull' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetFields'
+
+neg1.fsx(29,39,29,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsReturnsNull' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetFields'
+
+neg1.fsx(29,39,29,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsReturnsNull' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetFields'
+
+neg1.fsx(29,39,29,68): typecheck error FS0039: The type 'TypeWhereGetFieldsReturnsNull' is not defined
 
 neg1.fsx(29,39,29,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsReturnsNull' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetFields'
 
-neg1.fsx(29,39,29,68): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetFieldsReturnsNull' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
+neg1.fsx(29,39,29,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsReturnsNull' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetFields'
+
+neg1.fsx(29,39,29,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsReturnsNull' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetFields'
+
+neg1.fsx(29,39,29,68): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetFieldsReturnsNull' member 'GetFields': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetFields'
+
+neg1.fsx(29,39,29,68): typecheck error FS0039: The type 'TypeWhereGetFieldsReturnsNull' is not defined
+
+neg1.fsx(30,39,30,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesReturnsNull' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetProperties'
+
+neg1.fsx(30,39,30,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesReturnsNull' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetProperties'
+
+neg1.fsx(30,39,30,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesReturnsNull' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetProperties'
+
+neg1.fsx(30,39,30,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesReturnsNull' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetProperties'
+
+neg1.fsx(30,39,30,72): typecheck error FS0039: The type 'TypeWhereGetPropertiesReturnsNull' is not defined
+
+neg1.fsx(30,39,30,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesReturnsNull' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetProperties'
+
+neg1.fsx(30,39,30,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesReturnsNull' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetProperties'
 
 neg1.fsx(30,39,30,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesReturnsNull' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetProperties'
 
+neg1.fsx(30,39,30,72): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetPropertiesReturnsNull' member 'GetProperties': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetProperties'
+
+neg1.fsx(30,39,30,72): typecheck error FS0039: The type 'TypeWhereGetPropertiesReturnsNull' is not defined
+
 neg1.fsx(31,39,31,73): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetNestedTypesReturnsNull' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
 
 neg1.fsx(32,39,32,74): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsReturnsNull' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetConstructors'
 
-neg1.fsx(32,39,32,74): typecheck error FS3004: The provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsReturnsNull' has member 'Foo' which has declaring type 'FSharp.EvilProvider.TheType'. Expected declaring type to be the same as provided type.
+neg1.fsx(32,39,32,74): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsReturnsNull' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetConstructors'
+
+neg1.fsx(32,39,32,74): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsReturnsNull' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetConstructors'
+
+neg1.fsx(32,39,32,74): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsReturnsNull' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetConstructors'
+
+neg1.fsx(32,39,32,74): typecheck error FS0039: The type 'TypeWhereGetConstructorsReturnsNull' is not defined
+
+neg1.fsx(32,39,32,74): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsReturnsNull' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetConstructors'
+
+neg1.fsx(32,39,32,74): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsReturnsNull' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetConstructors'
+
+neg1.fsx(32,39,32,74): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsReturnsNull' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetConstructors'
+
+neg1.fsx(32,39,32,74): typecheck error FS3021: Unexpected exception from provided type 'FSharp.EvilProvider.TypeWhereGetConstructorsReturnsNull' member 'GetConstructors': The type provider 'Provider.EvilProvider' reported an error: The type provider returned 'null', which is not a valid return value from 'GetConstructors'
+
+neg1.fsx(32,39,32,74): typecheck error FS0039: The type 'TypeWhereGetConstructorsReturnsNull' is not defined
 
 neg1.fsx(33,39,33,72): typecheck error FS3042: Unexpected 'null' return value from provided type 'FSharp.EvilProvider.TypeWhereGetInterfacesReturnsNull' member 'GetInterfaces'
 
@@ -1447,3 +1611,5 @@ neg1.fsx(448,9,448,107): typecheck error FS3148: Too many static parameters. Exp
 neg1.fsx(449,105,449,110): typecheck error FS3083: The static parameter 'Count' has already been given a value
 
 neg1.fsx(450,9,450,119): typecheck error FS3148: Too many static parameters. Expected at most 1 parameters, but got 0 unnamed and 2 named parameters.
+
+neg1.fsx(455,14,455,18): typecheck error FS0043: The type 'FSharp.HelloWorld.HelloWorldType' does not have 'null' as a proper value
diff --git a/tests/fsharp/typeProviders/negTests/neg1.fsx b/tests/fsharp/typeProviders/negTests/neg1.fsx
index e216d874e05..7b10b878dbf 100644
--- a/tests/fsharp/typeProviders/negTests/neg1.fsx
+++ b/tests/fsharp/typeProviders/negTests/neg1.fsx
@@ -449,3 +449,7 @@ module TooManyArgs =
         FSharp.GoodProviderForNegativeStaticParameterTypeTests.HelloWorldTypeWithStaticInt32Parameter<3,Count=2>.StaticProperty1 |> ignore
         FSharp.GoodProviderForNegativeStaticParameterTypeTests.HelloWorldTypeWithStaticInt32Parameter.StaticProperty1 |> ignore
         //FSharp.GoodProviderForNegativeStaticParameterTypeTests.HelloWorldTypeWithStaticStringParameter.StaticProperty1 |> ignore
+
+module NullLiteralNotAllowed =
+
+    let v = (null : FSharp.HelloWorld.HelloWorldType) // should give a type error - this explicitly has AllowNullLiteralAttribute(false), so a null literal is not allowed
diff --git a/tests/fsharp/typeProviders/negTests/provider.fsx b/tests/fsharp/typeProviders/negTests/provider.fsx
index f64589b1404..ed359714f78 100644
--- a/tests/fsharp/typeProviders/negTests/provider.fsx
+++ b/tests/fsharp/typeProviders/negTests/provider.fsx
@@ -22,6 +22,12 @@ type public Runtime() =
 module Utils = 
     let doEvil() = failwith "deliberate error for testing purposes"
 
+    let mkAllowNullLiteralValueAttributeData(value: bool) = 
+        { new CustomAttributeData() with 
+                member __.Constructor =  typeof.GetConstructors().[0]
+                member __.ConstructorArguments = upcast [| CustomAttributeTypedArgument(typeof, value)  |]
+                member __.NamedArguments = upcast [| |] }
+
 []
 type public GoodProviderForNegativeTypeTests1() =
     let modul = typeof.Assembly.GetModules().[0]
@@ -307,7 +313,8 @@ type public GoodProviderForNegativeStaticParameterTypeTests() =
 
         and theType = 
             let container = TypeContainer.Namespace(modul, rootNamespace)
-            TypeBuilder.CreateSimpleType(container,"HelloWorldType",members=allMembers)
+            TypeBuilder.CreateSimpleType(container,"HelloWorldType",members=allMembers,
+                                         getCustomAttributes=(fun () -> [| mkAllowNullLiteralValueAttributeData(false) |]))
 
         theType
 
diff --git a/tests/fsharp/typecheck/sigs/build.bat b/tests/fsharp/typecheck/sigs/build.bat
index 116a8f55fe5..43708739c74 100644
--- a/tests/fsharp/typecheck/sigs/build.bat
+++ b/tests/fsharp/typecheck/sigs/build.bat
@@ -5,9 +5,44 @@ REM Configure the sample, i.e. where to find the F# compiler and C# compiler.
 
 call %~d0%~p0..\..\..\config.bat
 
+"%FSC%" --noframework -r:"%FSCOREDLLPATH%" -r:"%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll" -r:"%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Core.dll" -r:"%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Data.dll" -r:"%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.dll" -r:"%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\System.Numerics.dll" -a -o:pos21.dll  pos21.fs
+@if ERRORLEVEL 1 goto Error
+
+call ..\..\single-neg-test.bat neg92
+@if ERRORLEVEL 1 goto Error
+
 call ..\..\single-neg-test.bat neg91
 @if ERRORLEVEL 1 goto Error
 
+"%FSC%" %fsc_flags% --target:exe -o:pos20.exe  pos20.fs 
+@if ERRORLEVEL 1 goto Error
+
+"%PEVERIFY%" pos20.exe
+@if ERRORLEVEL 1 goto Error
+
+pos20.exe
+@if ERRORLEVEL 1 goto Error
+
+"%FSC%" %fsc_flags% --target:exe -o:pos19.exe  pos19.fs 
+@if ERRORLEVEL 1 goto Error
+
+"%PEVERIFY%" pos19.exe
+@if ERRORLEVEL 1 goto Error
+
+pos19.exe
+@if ERRORLEVEL 1 goto Error
+
+
+"%FSC%" %fsc_flags% --target:exe -o:pos18.exe  pos18.fs 
+@if ERRORLEVEL 1 goto Error
+
+"%PEVERIFY%" pos18.exe
+@if ERRORLEVEL 1 goto Error
+
+pos18.exe
+@if ERRORLEVEL 1 goto Error
+
+
 "%FSC%" %fsc_flags% --target:exe -o:pos16.exe  pos16.fs 
 @if ERRORLEVEL 1 goto Error
 
@@ -17,6 +52,15 @@ call ..\..\single-neg-test.bat neg91
 pos16.exe
 @if ERRORLEVEL 1 goto Error
 
+"%FSC%" %fsc_flags% --target:exe -o:pos17.exe  pos17.fs 
+@if ERRORLEVEL 1 goto Error
+
+"%PEVERIFY%" pos17.exe
+@if ERRORLEVEL 1 goto Error
+
+pos17.exe
+@if ERRORLEVEL 1 goto Error
+
 "%FSC%" %fsc_flags% --target:exe -o:pos15.exe  pos15.fs 
 @if ERRORLEVEL 1 goto Error
 
@@ -479,7 +523,6 @@ call ..\..\single-neg-test.bat neg35
 "%FSC%" %fsc_flags% -a -o:pos05.dll  pos05.fs
 @if ERRORLEVEL 1 goto Error
 
-
 :Ok
 echo Built fsharp %~f0 ok.
 endlocal
diff --git a/tests/fsharp/typecheck/sigs/neg16.bsl b/tests/fsharp/typecheck/sigs/neg16.bsl
index a4bfaf80f2f..9a3b64f0066 100644
--- a/tests/fsharp/typecheck/sigs/neg16.bsl
+++ b/tests/fsharp/typecheck/sigs/neg16.bsl
@@ -88,3 +88,5 @@ neg16.fs(110,16,110,20): typecheck error FS0879: Volatile fields must be marked
 neg16.fs(113,9,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(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/neg16.fs b/tests/fsharp/typecheck/sigs/neg16.fs
index f43f6e4f28b..2fa1df8fa03 100644
--- a/tests/fsharp/typecheck/sigs/neg16.fs
+++ b/tests/fsharp/typecheck/sigs/neg16.fs
@@ -122,3 +122,11 @@ module VolatileFieldSanityChecks = begin
 
 end
 
+module AllowNullLiteralWithArgumentTest = begin
+
+    type A() = class end
+
+    [] // expect an error here
+    type B() = inherit A()
+
+end
diff --git a/tests/fsharp/typecheck/sigs/neg20.bsl b/tests/fsharp/typecheck/sigs/neg20.bsl
index a2b891817d7..d63b94ffbab 100644
--- a/tests/fsharp/typecheck/sigs/neg20.bsl
+++ b/tests/fsharp/typecheck/sigs/neg20.bsl
@@ -227,12 +227,12 @@ neg20.fs(166,13,166,35): typecheck error FS0502: The member or object constructo
 neg20.fs(167,13,167,31): typecheck error FS0502: The member or object constructor 'M5' takes 2 type argument(s) but is here given 1. The required signature is 'member C.M5 : y:'a * z:'b -> int'.
 
 neg20.fs(182,14,182,31): typecheck error FS0041: No overloads match for method 'M'. The available overloads are shown below (or in the Error List window).
-neg20.fs(182,14,182,31): typecheck error FS0041: Possible overload: 'static member C2.M : fmt:string * params args:int [] -> string'. Type constraint mismatch. The type 
+neg20.fs(182,14,182,31): typecheck error FS0041: Possible overload: 'static member C2.M : fmt:string * [] args:int [] -> string'. Type constraint mismatch. The type 
     obj    
 is not compatible with type
     int    
 The type 'obj' is not compatible with the type 'int'.
-neg20.fs(182,14,182,31): typecheck error FS0041: Possible overload: 'static member C2.M : fmt:string * params args:int [] -> string'. Type constraint mismatch. The type 
+neg20.fs(182,14,182,31): typecheck error FS0041: Possible overload: 'static member C2.M : fmt:string * [] args:int [] -> string'. Type constraint mismatch. The type 
     obj    
 is not compatible with type
     int []    
@@ -254,12 +254,12 @@ but here has type
     obj    
 
 neg20.fs(188,14,188,31): typecheck error FS0041: No overloads match for method 'M'. The available overloads are shown below (or in the Error List window).
-neg20.fs(188,14,188,31): typecheck error FS0041: Possible overload: 'static member C3.M : fmt:string * params args:string [] -> string'. Type constraint mismatch. The type 
+neg20.fs(188,14,188,31): typecheck error FS0041: Possible overload: 'static member C3.M : fmt:string * [] args:string [] -> string'. Type constraint mismatch. The type 
     obj    
 is not compatible with type
     string    
 The type 'obj' is not compatible with the type 'string'.
-neg20.fs(188,14,188,31): typecheck error FS0041: Possible overload: 'static member C3.M : fmt:string * params args:string [] -> string'. Type constraint mismatch. The type 
+neg20.fs(188,14,188,31): typecheck error FS0041: Possible overload: 'static member C3.M : fmt:string * [] args:string [] -> string'. Type constraint mismatch. The type 
     obj    
 is not compatible with type
     string []    
@@ -356,9 +356,28 @@ neg20.fs(319,8,319,17): typecheck error FS3132: This type definition may not hav
 
 neg20.fs(322,8,322,18): typecheck error FS3132: This type definition may not have the 'CLIMutable' attribute. Only record types may have this attribute.
 
-neg20.fs(335,11,335,24): typecheck error FS0802: Invalid use of a type name and/or object constructor. If necessary use 'new' and apply the constructor to its arguments, e.g. 'new Type(args)'.
+neg20.fs(335,11,335,24): typecheck error FS0041: A unique overload for method 'String' could not be determined based on type information prior to this program point. A type annotation may be needed. Candidates: System.String(value: char []) : unit, System.String(value: nativeptr) : unit, System.String(value: nativeptr) : unit
 
-neg20.fs(336,11,336,22): typecheck error FS0802: Invalid use of a type name and/or object constructor. If necessary use 'new' and apply the constructor to its arguments, e.g. 'new Type(args)'.
+neg20.fs(336,11,336,22): typecheck error FS0041: A unique overload for method 'Guid' could not be determined based on type information prior to this program point. A type annotation may be needed. Candidates: System.Guid(b: byte []) : unit, System.Guid(g: string) : unit
 
-neg20.fs(340,11,340,34): typecheck error FS0803: Invalid use of a type name and/or object constructor. If necessary use 'new' and apply the constructor to its arguments, e.g. 'new Type(args)'. The required signature is:
-	new : x:int -> ClassWithOneConstructor.
+neg20.fs(355,19,355,38): typecheck error FS1124: Multiple types exist called 'OverloadedClassName', taking different numbers of generic parameters. Provide a type instantiation to disambiguate the type resolution, e.g. 'OverloadedClassName<_>'.
+
+neg20.fs(356,22,356,41): typecheck error FS1124: Multiple types exist called 'OverloadedClassName', taking different numbers of generic parameters. Provide a type instantiation to disambiguate the type resolution, e.g. 'OverloadedClassName<_>'.
+
+neg20.fs(370,19,370,38): typecheck error FS0039: The value or constructor 'OverloadedClassName' is not defined
+
+neg20.fs(371,19,371,38): typecheck error FS1124: Multiple types exist called 'OverloadedClassName', taking different numbers of generic parameters. Provide a type instantiation to disambiguate the type resolution, e.g. 'OverloadedClassName<_>'.
+
+neg20.fs(372,22,372,41): typecheck error FS0039: The value or constructor 'OverloadedClassName' is not defined
+
+neg20.fs(373,22,373,41): typecheck error FS1124: Multiple types exist called 'OverloadedClassName', taking different numbers of generic parameters. Provide a type instantiation to disambiguate the type resolution, e.g. 'OverloadedClassName<_>'.
+
+neg20.fs(382,19,382,40): typecheck error FS1124: Multiple types exist called 'OverloadedClassName', taking different numbers of generic parameters. Provide a type instantiation to disambiguate the type resolution, e.g. 'OverloadedClassName<_>'.
+
+neg20.fs(383,39,383,41): typecheck error FS0039: The field, constructor or member 'S2' is not defined
+
+neg20.fs(428,19,428,38): typecheck error FS0039: The value or constructor 'OverloadedClassName' is not defined
+
+neg20.fs(430,22,430,41): typecheck error FS0039: The value or constructor 'OverloadedClassName' is not defined
+
+neg20.fs(444,39,444,41): typecheck error FS0039: The field, constructor or member 'S2' is not defined
diff --git a/tests/fsharp/typecheck/sigs/neg20.fs b/tests/fsharp/typecheck/sigs/neg20.fs
index 750905cc436..17a744b50bd 100644
--- a/tests/fsharp/typecheck/sigs/neg20.fs
+++ b/tests/fsharp/typecheck/sigs/neg20.fs
@@ -340,3 +340,106 @@ type ClassWithOneConstructor(x:int) = member x.P = 1
 let ss3 = ClassWithOneConstructor
 
 
+module OverloadedTypeNamesBothHaveConstructors = 
+    type OverloadedClassName<'T>(x:int) = 
+        new (y:string) = OverloadedClassName<'T>(1)
+        member __.P = x
+        static member S() = 3
+
+
+    type OverloadedClassName<'T1,'T2>(x:int) = 
+        new (y:string) = OverloadedClassName<'T1,'T2>(1)
+        member __.P = x
+        static member S() = 3
+
+    let t3 = 3 |> OverloadedClassName // expected error - multiple types exist
+    let t3s = "3" |> OverloadedClassName // expected error - multiple types exist
+
+
+module OverloadedTypeNamesSomeConstructors = 
+    type OverloadedClassName<'T>(x:int) = 
+        new (y:string) = OverloadedClassName<'T>(1)
+        member __.P = x
+        static member S() = 3
+
+
+    type OverloadedClassName<'T1,'T2> = 
+        member __.P = 1
+        static member S() = 3
+
+    let t2 = 3 |> OverloadedClassName //  CHANGE IN ERROR MESSAGE IN F# 4.x: Was "Invalid use of a type name", now "The value or constructor 'OverloadedClassName' is not defined"
+    let t3 = 3 |> OverloadedClassName // expected error - multiple types exist
+    let t2s = "3" |> OverloadedClassName //  CHANGE IN ERROR MESSAGE IN F# 4.x: Was "Invalid use of a type name", now "The value or constructor 'OverloadedClassName' is not defined"
+    let t3s = "3" |> OverloadedClassName // expected error - multiple types exist
+
+module OverloadedTypeNamesNoConstructors = 
+    type OverloadedClassName<'T> = 
+        static member S(x:int) = 3
+
+    type OverloadedClassName<'T1,'T2> = 
+        static member S(x:int) = 3
+
+    let t3 = 3 |> OverloadedClassName.S // expected error - multiple types exist
+    let t4 = 3 |> OverloadedClassName.S2 // expected error -  The field, constructor or member 'S2' is not defined
+
+
+
+
+
+
+module OverloadedTypeNamesIncludingNonGenericTypeBothHaveConstructors = 
+
+    type OverloadedClassName(x:int) = 
+        new (y:string) = OverloadedClassName(1)
+        member __.P = x
+        static member S() = 3
+
+    type OverloadedClassName<'T>(x:int) = 
+        new (y:string) = OverloadedClassName<'T>(1)
+        member __.P = x
+        static member S() = 3
+
+
+    type OverloadedClassName<'T1,'T2>(x:int) = 
+        new (y:string) = OverloadedClassName<'T1,'T2>(1)
+        member __.P = x
+        static member S() = 3
+
+    let t3 = 3 |> OverloadedClassName // expected error - multiple types exist
+    let t3s = "3" |> OverloadedClassName // expected error - multiple types exist
+
+
+module OverloadedTypeNamesIncludingNonGenericTypeSomeConstructors = 
+    type OverloadedClassName(x:int) = 
+        new (y:string) = OverloadedClassName(1)
+        member __.P = x
+        static member S() = 3
+
+    type OverloadedClassName<'T>(x:int) = 
+        new (y:string) = OverloadedClassName<'T>(1)
+        member __.P = x
+        static member S() = 3
+
+
+    type OverloadedClassName<'T1,'T2> = 
+        member __.P = 1
+        static member S() = 3
+
+    let t2 = 3 |> OverloadedClassName //  CHANGE IN ERROR MESSAGE IN F# 4.x: Was "Invalid use of a type name", now "The value or constructor 'OverloadedClassName' is not defined"
+    let t3 = 3 |> OverloadedClassName // NO ERROR EXPECTED
+    let t2s = "3" |> OverloadedClassName //  CHANGE IN ERROR MESSAGE IN F# 4.x: Was "Invalid use of a type name", now "The value or constructor 'OverloadedClassName' is not defined"
+    let t3s = "3" |> OverloadedClassName // expected error - multiple types exist
+
+module OverloadedTypeNamesIncludingNonGenericTypeNoConstructors = 
+    type OverloadedClassName = 
+        static member S(x:int) = 3
+
+    type OverloadedClassName<'T> = 
+        static member S(x:int) = 3
+
+    type OverloadedClassName<'T1,'T2> = 
+        static member S(x:int) = 3
+
+    let t3 = 3 |> OverloadedClassName.S // NO ERROR EXPECTED
+    let t4 = 3 |> OverloadedClassName.S2 // expected error -  The field, constructor or member 'S2' is not defined
+
diff --git a/tests/fsharp/typecheck/sigs/neg21.bsl b/tests/fsharp/typecheck/sigs/neg21.bsl
index d30e35f5526..60ed9ff9491 100644
--- a/tests/fsharp/typecheck/sigs/neg21.bsl
+++ b/tests/fsharp/typecheck/sigs/neg21.bsl
@@ -11,8 +11,6 @@ neg21.fs(14,19,14,23): typecheck error FS0001: The type 'float32' does not match
 
 neg21.fs(14,17,14,18): typecheck error FS0043: The type 'float32' does not match the type 'float<'u>'
 
-neg21.fs(15,16,15,22): typecheck error FS0001: The unit of measure 'm' does not match the unit of measure ''u ^ 2'
-
 neg21.fs(17,26,17,34): typecheck error FS0001: Type mismatch. Expecting a
     float    
 but given a
diff --git a/tests/fsharp/typecheck/sigs/neg23.bsl b/tests/fsharp/typecheck/sigs/neg23.bsl
index 5e75b46acc8..1d21a9a9a41 100644
--- a/tests/fsharp/typecheck/sigs/neg23.bsl
+++ b/tests/fsharp/typecheck/sigs/neg23.bsl
@@ -27,9 +27,9 @@ neg23.fs(82,18,82,20): typecheck error FS0439: The method 'X0' has curried argum
 
 neg23.fs(85,18,85,21): typecheck error FS0439: The method 'X01' has curried arguments but has the same name as another method in this type. Methods with curried arguments cannot be overloaded. Consider using a method taking tupled arguments.
 
-neg23.fs(88,18,88,21): typecheck error FS0440: Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional' or 'byref' arguments
+neg23.fs(88,18,88,21): typecheck error FS0440: Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional', 'ReflectedDefinition' or 'byref' arguments
 
-neg23.fs(90,18,90,21): typecheck error FS0440: Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional' or 'byref' arguments
+neg23.fs(90,18,90,21): typecheck error FS0440: Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional', 'ReflectedDefinition' or 'byref' arguments
 
 neg23.fs(93,18,93,21): typecheck error FS0439: The method 'X04' has curried arguments but has the same name as another method in this type. Methods with curried arguments cannot be overloaded. Consider using a method taking tupled arguments.
 
@@ -38,3 +38,11 @@ neg23.fs(92,18,92,21): typecheck error FS0439: The method 'X04' has curried argu
 neg23.fs(110,21,110,22): typecheck error FS0439: The method 'F' has curried arguments but has the same name as another method in this type. Methods with curried arguments cannot be overloaded. Consider using a method taking tupled arguments.
 
 neg23.fs(113,21,113,22): typecheck error FS0439: The method 'F' has curried arguments but has the same name as another method in this type. Methods with curried arguments cannot be overloaded. Consider using a method taking tupled arguments.
+
+neg23.fs(164,18,164,29): typecheck error FS0037: Two members called 'GroupRowsBy' have the same signature
+
+neg23.fs(165,18,165,29): typecheck error FS0037: Two members called 'GroupRowsBy' have the same signature
+
+neg23.fs(168,17,168,20): typecheck error FS0037: Two members called 'Foo' have the same signature
+
+neg23.fs(169,17,169,20): typecheck error FS0037: Two members called 'Foo' have the same signature
diff --git a/tests/fsharp/typecheck/sigs/neg23.fs b/tests/fsharp/typecheck/sigs/neg23.fs
index 24cf167bd34..cef3a34ae93 100644
--- a/tests/fsharp/typecheck/sigs/neg23.fs
+++ b/tests/fsharp/typecheck/sigs/neg23.fs
@@ -155,3 +155,15 @@ module PositiveTests =
         let y2 : int -> int = c.M2 (3,4)
         let y3 : int * int -> int -> int = c.M2
 
+
+type Frame = 
+  class 
+  end
+module X =
+  type Frame with
+    member frame.GroupRowsBy(key) = ()
+    member frame.GroupRowsBy(key) = ()
+    
+    // Up to erasure
+    member this.Foo (x:int->int) = printfn "method 1"
+    member this.Foo (x:FSharpFunc) = printfn "method 2"
diff --git a/tests/fsharp/typecheck/sigs/neg90.bsl b/tests/fsharp/typecheck/sigs/neg90.bsl
index 9fa4482ce42..37a9064e566 100644
--- a/tests/fsharp/typecheck/sigs/neg90.bsl
+++ b/tests/fsharp/typecheck/sigs/neg90.bsl
@@ -1,2 +1,10 @@
 
 neg90.fs(4,9,4,12): typecheck error FS0001: A generic construct requires that the type 'Recd' have a public default constructor
+
+neg90.fs(7,22,7,25): typecheck error FS0039: The type 'foo' is not defined
+
+neg90.fs(7,22,7,25): typecheck error FS0039: The type 'foo' is not defined
+
+neg90.fs(16,9,16,21): typecheck error FS0035: This construct is deprecated: The union type for union case 'Member' was defined with the RequireQualifiedAccessAttribute. Include the name of the union type ('DU') in the name you are using.
+
+neg90.fs(28,9,28,41): typecheck error FS0035: This construct is deprecated: The record type for the record field 'Field1' was defined with the RequireQualifiedAccessAttribute. Include the name of the record type ('Record1') in the name you are using.
diff --git a/tests/fsharp/typecheck/sigs/neg90.fs b/tests/fsharp/typecheck/sigs/neg90.fs
index 83b29cc8612..39cca4e4607 100644
--- a/tests/fsharp/typecheck/sigs/neg90.fs
+++ b/tests/fsharp/typecheck/sigs/neg90.fs
@@ -1,4 +1,29 @@
 module Test
 let foo<'a when 'a : (new : unit -> 'a)>() = new 'a()
 type Recd = {f : int}
-let _ = foo()
\ No newline at end of file
+let _ = foo()
+
+// See https://github.com/Microsoft/visualfsharp/issues/38
+type [] N = foo // foo is undefined
+type M2 = float
+
+
+// See https://github.com/Microsoft/visualfsharp/issues/95
+module First = 
+  []
+  type DU = Member of int
+
+let _ = First.Member(0)     // compiles, but should not
+let _ = First.DU.Member(0) // correct
+
+// See https://github.com/Microsoft/visualfsharp/issues/95 - part 2
+module ModuleWithRecord =
+    []
+    type Record1 = { Field1 : int }
+
+let _ = { ModuleWithRecord.Record1.Field1 = 42 } // correct
+
+open ModuleWithRecord
+let _ = { Record1.Field1 = 42 }                  // correct
+let _ = { ModuleWithRecord.Field1 = 42 }         // compiles, but should not
+let _ = { ModuleWithRecord.Record1.Field1 = 42 } // correct
\ No newline at end of file
diff --git a/tests/fsharp/typecheck/sigs/neg91.bsl b/tests/fsharp/typecheck/sigs/neg91.bsl
index 6fb74c5b67a..afa9650ca45 100644
--- a/tests/fsharp/typecheck/sigs/neg91.bsl
+++ b/tests/fsharp/typecheck/sigs/neg91.bsl
@@ -2,3 +2,11 @@
 neg91.fs(7,16,7,30): typecheck error FS0896: Enumerations cannot have members
 
 neg91.fs(10,10,10,15): typecheck error FS0956: Members that extend interface, delegate or enum types must be placed in a module separate to the definition of the type. This module must either have the AutoOpen attribute or be opened explicitly by client code to bring the extension members into scope.
+
+neg91.fs(24,13,24,16): typecheck error FS1094: The value 'x' is not accessible from this code location
+
+neg91.fs(34,13,34,16): typecheck error FS0044: This construct is deprecated. Don't touch me
+
+neg91.fs(44,13,44,16): typecheck error FS3003: Don't touch me
+
+neg91.fs(54,13,54,16): typecheck error FS0057: It was just an experiment!. This warning can be disabled using '--nowarn:57' or '#nowarn "57"'.
diff --git a/tests/fsharp/typecheck/sigs/neg91.fs b/tests/fsharp/typecheck/sigs/neg91.fs
index 0c190619f7e..09cb4849173 100644
--- a/tests/fsharp/typecheck/sigs/neg91.fs
+++ b/tests/fsharp/typecheck/sigs/neg91.fs
@@ -12,3 +12,44 @@ module T2 =
     type Enum2
         with
         member this.Foo() = 1 // not ok
+
+module TestPrivateSet = 
+    // See https://github.com/Microsoft/visualfsharp/issues/27
+    module A =
+        let mutable private x = 0
+
+    module B = 
+        let test () =
+            // let _ = A.x  // accessibility error on read, as expected
+            A.x <- 1     // but write works!
+
+module TestObsoleteSet = 
+    // See https://github.com/Microsoft/visualfsharp/issues/27
+    module A =
+        []
+        let mutable x = 0
+
+    module B = 
+        let test () =
+            A.x <- 1     
+
+module TestCompilerMessgeSet = 
+    // See https://github.com/Microsoft/visualfsharp/issues/27
+    module A =
+        []
+        let mutable x = 0
+
+    module B = 
+        let test () =
+            A.x <- 1     
+
+module TestExperimentalSet = 
+    // See https://github.com/Microsoft/visualfsharp/issues/27
+    module A =
+        []
+        let mutable x = 0
+
+    module B = 
+        let test () =
+            A.x <- 1     
+
diff --git a/tests/fsharp/typecheck/sigs/neg92.bsl b/tests/fsharp/typecheck/sigs/neg92.bsl
new file mode 100644
index 00000000000..3ad79cb7c45
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/neg92.bsl
@@ -0,0 +1,4 @@
+
+neg92.fs(10,19,10,20): typecheck error FS0064: This construct causes code to be less generic than indicated by the type annotations. The type variable 'T has been constrained to be type ''U'.
+
+neg92.fs(9,9,9,30): typecheck error FS0670: This code is not sufficiently generic. The type variable 'U could not be generalized because it would escape its scope.
diff --git a/tests/fsharp/typecheck/sigs/neg92.fs b/tests/fsharp/typecheck/sigs/neg92.fs
new file mode 100644
index 00000000000..4e18b421f47
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/neg92.fs
@@ -0,0 +1,23 @@
+module Test
+
+
+module Test1 = 
+    type SomeClass(x : 'T) = class end
+        //member this.P = 1
+        //member this.X = x
+
+    let SomeFunc<'U> (x : 'U) =
+        SomeClass(x)
+
+module Test2 = 
+    open System
+
+    type SomeClass(updater : #IComparable->unit) =
+        let onLoaded () = 
+            let adorner : #IComparable = failwith ""
+            updater adorner
+        member this.OnLoaded = onLoaded
+
+    let UpdateAdorner (updater : #IComparable->unit)=
+        let updater = SomeClass (updater)
+        updater.OnLoaded
diff --git a/tests/fsharp/typecheck/sigs/pos16.fs b/tests/fsharp/typecheck/sigs/pos16.fs
index bcd5b7ade1b..becdb981815 100644
--- a/tests/fsharp/typecheck/sigs/pos16.fs
+++ b/tests/fsharp/typecheck/sigs/pos16.fs
@@ -24,4 +24,32 @@ let (|``Charlie Delta``|Echo|``Fox Trot``|) (x:int) =
 
 match 0,1,2 with
 | ``Charlie Delta``,Echo,``Fox Trot`` -> ()
-| _ -> exit 1
\ No newline at end of file
+| _ -> exit 1
+
+
+module UnitOfMeasurePrintfPositiveTests = 
+
+    open Microsoft.FSharp.Data.UnitSystems.SI.UnitNames
+    open Microsoft.FSharp.Data.UnitSystems.SI.UnitSymbols
+
+    let _ = sprintf "%f" 1.0
+    let _ = sprintf "%f" 1.0
+    let _ = sprintf "%f" 1.0
+    let _ = sprintf "%f" 1.0
+
+    let _ = sprintf "%d" 1
+    let _ = sprintf "%d" 1
+    let _ = sprintf "%d" 1
+    let _ = sprintf "%d" 1
+
+    let _ = sprintf "%g" 1.0M
+    let _ = sprintf "%g" 1.0M
+    let _ = sprintf "%g" 1.0M
+    let _ = sprintf "%g" 1.0M
+
+module AllowNullLiteralWithArgumentTest = 
+
+    type A() = class end
+
+    []
+    type B() = inherit A()
diff --git a/tests/fsharp/typecheck/sigs/pos17.fs b/tests/fsharp/typecheck/sigs/pos17.fs
new file mode 100644
index 00000000000..8e81dc9369b
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/pos17.fs
@@ -0,0 +1,248 @@
+module Pos17
+
+
+
+open System
+open System.Collections.Generic
+
+module BasicTests = 
+  let f1() = "a" |> System.Uri
+  let f2() = "a" |> Uri
+  let f3() = ["a"] |> Set
+  let f4() = ["a", 4 ] |> Map
+
+module CheckFunctionNameHasPriorityOverTypeName = 
+
+  let Uri (x:int) =  4
+  let f3() = 3 |> Uri
+
+module TestResolutionOfNonGenericTypeNameAsOverloadedConstructor = 
+
+  let f4() = ('a',3) |> String
+
+module TestResolutionOfGenericTypeNameWithTypeArgumentsAsOverloadedConstructor = 
+  let w1 = List()
+  let w2 = () |> List
+  let w3 = List(3)
+  let w4 = 3 |> List
+  let w5 = List([1;3])
+  let w6 = [1;3] |> List
+  let w7 = List(seq { yield 1; yield 3 } )
+  let w8 = seq { yield 1; yield 3 } |> List
+
+module TestResolutionOfGenericTypeNameAsOverloadedConstructorWithoutTypeAnnotation = 
+  let x1 : List = List()
+  let x2 : List = () |> List
+  let x3 : List = List(3)
+  let x4 : List = 3 |> List
+  let x5 : List = List([1;3])
+  let x6 : List = [1;3] |> List
+  let x7 : List = List(seq { yield 1; yield 3 } )
+  let x8 : List = seq { yield 1; yield 3 } |> List
+
+module TestUseAsLambdaOfGenericTypeNameAsOverloadedConstructorWithoutTypeAnnotation = 
+  let x1 : unit -> List = List
+  let x4 : int -> List = List
+  let x5 : seq -> List = List
+
+module TestUseAsLambdaOfGenericTypeNameWithLongPathAsOverloadedConstructorWithoutTypeAnnotation = 
+  let x1 : unit -> List = System.Collections.Generic.List
+  let x4 : int -> List = System.Collections.Generic.List
+  let x5 : seq -> List = System.Collections.Generic.List
+
+module TestUseAsLambda2 = 
+  let x1 : unit -> List<_> = List
+  let x4 : int -> List<_> = List
+  let x5 : seq -> List<_> = List
+
+
+
+
+
+
+module TestResolutionOfAbbreviatedGenericTypeNameWithTypeArgumentsAsOverloadedConstructor = 
+  let w1 = ResizeArray()
+  let w2 = () |> ResizeArray
+  let w3 = ResizeArray(3)
+  let w4 = 3 |> ResizeArray
+  let w5 = ResizeArray([1;3])
+  let w6 = [1;3] |> ResizeArray
+  let w7 = ResizeArray(seq { yield 1; yield 3 } )
+  let w8 = seq { yield 1; yield 3 } |> ResizeArray
+
+module TestResolutionOfAbbreviatedGenericTypeNameAsOverloadedConstructorWithoutTypeAnnotation = 
+  let x1 : ResizeArray = ResizeArray()
+  let x2 : ResizeArray = () |> ResizeArray
+  let x3 : ResizeArray = ResizeArray(3)
+  let x4 : ResizeArray = 3 |> ResizeArray
+  let x5 : ResizeArray = ResizeArray([1;3])
+  let x6 : ResizeArray = [1;3] |> ResizeArray
+  let x7 : ResizeArray = ResizeArray(seq { yield 1; yield 3 } )
+  let x8 : ResizeArray = seq { yield 1; yield 3 } |> ResizeArray
+
+module TestUseOfAbbreviatedGenericTypeNameAsLambdaForOverloadedConstructor = 
+  let x1 : unit -> ResizeArray = ResizeArray
+  let x4 : int -> ResizeArray = ResizeArray
+  let x5 : seq -> ResizeArray = ResizeArray
+
+module TestUseOfAbbreviatedGenericTypeNameWithTypeArgumentsAsLambdaForOverloadedConstructor = 
+  let x1 : unit -> ResizeArray<_> = ResizeArray
+  let x4 : int -> ResizeArray<_> = ResizeArray
+  let x5 : seq -> ResizeArray<_> = ResizeArray
+
+
+type IntResizeArray = List
+
+module TestResolutionOfAbbreviatedAndInstantiatedGenericTypeNameWithTypeArgumentsAsOverloadedConstructor = 
+  let w1 = IntResizeArray()
+  let w2 = () |> IntResizeArray
+  let w3 = IntResizeArray(3)
+  let w4 = 3 |> IntResizeArray
+  let w5 = IntResizeArray([1;3])
+  let w6 = [1;3] |> IntResizeArray
+  let w7 = IntResizeArray(seq { yield 1; yield 3 } )
+  let w8 = seq { yield 1; yield 3 } |> IntResizeArray
+
+module TestResolutionOfAbbreviatedAndInstantiatedGenericTypeNameAsOverloadedConstructorWithoutTypeAnnotation = 
+  let x1 : IntResizeArray = IntResizeArray()
+  let x2 : IntResizeArray = () |> IntResizeArray
+  let x3 : IntResizeArray = IntResizeArray(3)
+  let x4 : IntResizeArray = 3 |> IntResizeArray
+  let x5 : IntResizeArray = IntResizeArray([1;3])
+  let x6 : IntResizeArray = [1;3] |> IntResizeArray
+  let x7 : IntResizeArray = IntResizeArray(seq { yield 1; yield 3 } )
+  let x8 : IntResizeArray = seq { yield 1; yield 3 } |> IntResizeArray
+
+module TestUseOfAbbreviatedAndInstantiatedGenericTypeNameAsLambdaForOverloadedConstructor = 
+  let x1 : unit -> IntResizeArray = IntResizeArray
+  let x4 : int -> IntResizeArray = IntResizeArray
+  let x5 : seq -> IntResizeArray = IntResizeArray
+
+module TestUseOfAbbreviatedAndInstantiatedGenericTypeNameWithTypeArgumentsAsLambdaForOverloadedConstructor = 
+  let x1 : unit -> IntResizeArray = IntResizeArray
+  let x4 : int -> IntResizeArray = IntResizeArray
+  let x5 : seq -> IntResizeArray = IntResizeArray
+
+
+
+module OverloadedTypeNamesBothWithConstructors = 
+    type OverloadedClassName<'T>(x:int) = 
+        new (y:string) = OverloadedClassName<'T>(1)
+        member __.P = x
+        static member S() = 3
+
+
+    type OverloadedClassName<'T1,'T2>(x:int) = 
+        new (y:string) = OverloadedClassName<'T1,'T2>(1)
+        member __.P = x
+        static member S() = 3
+
+    let t1 = 3 |> OverloadedClassName
+    let t2 = 3 |> OverloadedClassName
+    //let t3 = 3 |> OverloadedClassName // expected error (see neg20.fs) - multiple types exist
+    let t1s = "3" |> OverloadedClassName
+    let t2s = "3" |> OverloadedClassName
+    //let t3s = "3" |> OverloadedClassName // expected error (see neg20.fs) - multiple types exist
+
+
+module OverloadedTypeNamesSomeConstructors = 
+    type OverloadedClassName<'T>(x:int) = 
+        new (y:string) = OverloadedClassName<'T>(1)
+        member __.P = x
+        static member S() = 3
+
+
+    type OverloadedClassName<'T1,'T2> = 
+        member __.P = 1
+        static member S() = 3
+
+    let t1 = 3 |> OverloadedClassName
+    //let t2 = 3 |> OverloadedClassName //  expected error (see neg20.fs) -  "The value or constructor 'OverloadedClassName' is not defined"
+    //let t3 = 3 |> OverloadedClassName // expected error (see neg20.fs) - - multiple types exist
+    let t1s = "3" |> OverloadedClassName
+    //let t2s = "3" |> OverloadedClassName //  expected error (see neg20.fs) - "The value or constructor 'OverloadedClassName' is not defined"
+    //let t3s = "3" |> OverloadedClassName // expected error (see neg20.fs) - - multiple types exist
+
+module OverloadedTypeNamesNoConstructors = 
+    type OverloadedClassName<'T> = 
+        static member S(x:int) = 3
+
+    type OverloadedClassName<'T1,'T2> = 
+        static member S(x:int) = 3
+
+    let t1 = 3 |> OverloadedClassName.S
+    let t2 = 3 |> OverloadedClassName.S
+    //let t3 = 3 |> OverloadedClassName.S // expected error (see neg20.fs) - multiple types exist
+    //let t3b = 3 |> OverloadedClassName.S // expected error (see neg20.fs) - multiple types exist
+    //let t3c = 3 |> OverloadedClassName.S // expected error (see neg20.fs) - multiple types exist
+    //let t4 = 3 |> OverloadedClassName.S2 // expected error (see neg20.fs) -  The field, constructor or member 'S2' is not defined
+
+
+
+
+module OverloadedTypeNamesIncludingNonGenericTypeAllWithConstructors = 
+
+    type OverloadedClassName(x:int) = 
+        new (y:string) = OverloadedClassName(1)
+        member __.P = x
+        static member S() = 3
+
+    type OverloadedClassName<'T>(x:int) = 
+        new (y:string) = OverloadedClassName<'T>(1)
+        member __.P = x
+        static member S() = 3
+
+
+    type OverloadedClassName<'T1,'T2>(x:int) = 
+        new (y:string) = OverloadedClassName<'T1,'T2>(1)
+        member __.P = x
+        static member S() = 3
+
+    let t1 = 3 |> OverloadedClassName
+    let t2 = 3 |> OverloadedClassName
+    let t3 = 3 |> OverloadedClassName
+    let t1s = "3" |> OverloadedClassName
+    let t2s = "3" |> OverloadedClassName
+    let t3s = "3" |> OverloadedClassName
+
+
+module OverloadedTypeNamesIncludingNonGenericTypeSomeConstructors = 
+    type OverloadedClassName(x:int) = 
+        new (y:string) = OverloadedClassName(1)
+        member __.P = x
+        static member S() = 3
+
+    type OverloadedClassName<'T>(x:int) = 
+        new (y:string) = OverloadedClassName<'T>(1)
+        member __.P = x
+        static member S() = 3
+
+
+    type OverloadedClassName<'T1,'T2> = 
+        member __.P = 1
+        static member S() = 3
+
+    let t1 = 3 |> OverloadedClassName
+    let t1s = "3" |> OverloadedClassName
+
+module OverloadedTypeNamesIncludingNonGenericTypeNoConstructors = 
+
+    type OverloadedClassName = 
+        static member S(x:int) = 3
+
+    type OverloadedClassName<'T> = 
+        static member S(x:int) = 3
+
+    type OverloadedClassName<'T1,'T2> = 
+        static member S(x:int) = 3
+
+    let t1 = 3 |> OverloadedClassName.S
+    let t2 = 3 |> OverloadedClassName.S
+    let t3 = 3 |> OverloadedClassName.S 
+    let t3b = 3 |> OverloadedClassName.S 
+    let t3c = 3 |> OverloadedClassName.S 
+
+
+
+
+
diff --git a/tests/fsharp/typecheck/sigs/pos18.fs b/tests/fsharp/typecheck/sigs/pos18.fs
new file mode 100644
index 00000000000..361b9c8862f
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/pos18.fs
@@ -0,0 +1,35 @@
+// This test is related to F# 4.0+ design change "https://fslang.uservoice.com/forums/245727-f-language/suggestions/6107641-make-microsoft-prefix-optional-when-using-core-f"
+//
+// In this test, we check we can do basic operations like "open FSharp.Collections" without needing the "Microsoft" prefix
+
+module Pos18 = 
+  // Check we can open 'FSharp.Collections' unqualified, without warning
+  open FSharp.Collections
+
+  // Check we can open 'FSharp.Quotations' unqualified, without warning
+  open FSharp.Quotations
+
+  let v = Expr.Value 3
+
+  // Check we can access 'FSharp.Quotations' via full path
+  let v2 = FSharp.Quotations.Expr.Value 3
+
+  // Check we can access 'FSharp.Quotations' via 'global' 
+  let v3 = global.FSharp.Quotations.Expr.Value 3
+
+module Pos18b = 
+  open Microsoft // Adding "open Microsoft" shouldn't trigger additional warnings
+  
+  // Check we can open 'FSharp.Collections' unqualified, without warning
+  open FSharp.Collections
+
+  // Check we can open 'FSharp.Quotations' unqualified, without warning
+  open FSharp.Quotations
+
+  let v = Expr.Value 3
+
+  // Check we can access 'FSharp.Quotations' via full path
+  let v2 = FSharp.Quotations.Expr.Value 3
+
+  // Check we can access 'FSharp.Quotations' via 'global' 
+  let v3 = global.FSharp.Quotations.Expr.Value 3
diff --git a/tests/fsharp/typecheck/sigs/pos19.fs b/tests/fsharp/typecheck/sigs/pos19.fs
new file mode 100644
index 00000000000..850c4061a87
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/pos19.fs
@@ -0,0 +1,79 @@
+
+// This test is related to F# 4.0+ design change "https://fslang.uservoice.com/forums/245727-f-language/suggestions/6107641-make-microsoft-prefix-optional-when-using-core-f"
+//
+// In this test, we simulate user code that has defined types in FSharp.Collections. We check that the resolution
+// of types in FSharp.Collections proceeds as previously for user-defined types.
+
+namespace FSharp.Collections
+
+    type List<'T> = A | B
+    type Map<'T> = C | D
+
+
+namespace Pos19
+
+    module N = 
+        open FSharp.Collections
+
+        // check "List" resolves to the FSharp.Collections.List defined above
+        let f (x: List) = 
+           match x with 
+           | A -> 1 
+           | B -> 2
+
+        let y = f A 
+
+namespace Test3
+
+    module N = 
+        open FSharp.Collections
+
+        // check "List" resolves to the FSharp.Collections.List defined above
+        let f1 (x: List) = 
+           match x with 
+           | A -> 1 
+           | B -> 2
+
+        let y1 = f1 A 
+
+        // check "List" resolves to the FSharp.Collections.List defined above
+        let f2 (x: global.FSharp.Collections.List) = 
+           match x with 
+           | A -> 1 
+           | B -> 2
+
+        let y2 = f2 A 
+
+        // check "List" resolves to the FSharp.Collections.List defined above
+        let f3 (x: FSharp.Collections.List) = 
+           match x with 
+           | A -> 1 
+           | B -> 2
+
+        let y3 = f3 A 
+
+
+        // check "Map" resolves to the FSharp.Collections.List defined above
+        let g1 (x: Map) = 
+           match x with 
+           | C -> 1 
+           | D -> 2
+
+        let z1 = g1 C 
+
+        // check "List" resolves to the FSharp.Collections.List defined above
+        let g2 (x: global.FSharp.Collections.Map) = 
+           match x with 
+           | C -> 1 
+           | D -> 2
+
+        let z2 = g2 C 
+
+
+        // check "List" resolves to the FSharp.Collections.List defined above
+        let g3 (x: FSharp.Collections.Map) = 
+           match x with 
+           | C -> 1 
+           | D -> 2
+
+        let z3 = g3 C 
diff --git a/tests/fsharp/typecheck/sigs/pos20.fs b/tests/fsharp/typecheck/sigs/pos20.fs
new file mode 100644
index 00000000000..2c0c8ef098d
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/pos20.fs
@@ -0,0 +1,16 @@
+// test covering https://github.com/Microsoft/visualfsharp/issues/276
+
+open FSharp.Data.UnitSystems.SI.UnitSymbols 
+
+[]
+type S1 =
+  val X: int
+
+[]
+type S2 =
+  val X: int 
+
+let f (x : 'T when 'T: unmanaged and 'T: struct) = printfn "%A" x
+
+f (S1())
+f (S2())  // previously had error FS0001: A generic construct requires that the type 'S2' is an unmanaged type
diff --git a/tests/fsharp/typecheck/sigs/pos21.fs b/tests/fsharp/typecheck/sigs/pos21.fs
new file mode 100644
index 00000000000..77f2d2d1fb4
--- /dev/null
+++ b/tests/fsharp/typecheck/sigs/pos21.fs
@@ -0,0 +1,9 @@
+namespace Library2
+
+open System
+open System.Data
+
+module M = 
+    let dataset = new DataSet("test add reference")
+    Console.WriteLine(dataset.DataSetName)
+    Console.ReadKey(true)
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/env.lst
index f1d83925127..d716f908a27 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/AsyncExpressionStepping/env.lst
@@ -1,9 +1,9 @@
-	SOURCE=AsyncExpressionSteppingTest1.fs   ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd AsyncExpressionSteppingTest1.dll NetFx40"	# AsyncExpressionSteppingTest1.fs - NetFx40
+	SOURCE=AsyncExpressionSteppingTest1.fs   SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd AsyncExpressionSteppingTest1.dll NetFx40"	# AsyncExpressionSteppingTest1.fs - NetFx40
 
-	SOURCE=AsyncExpressionSteppingTest2.fs   ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd AsyncExpressionSteppingTest2.dll NetFx40"	# AsyncExpressionSteppingTest2.fs - NetFx40
+	SOURCE=AsyncExpressionSteppingTest2.fs   SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd AsyncExpressionSteppingTest2.dll NetFx40"	# AsyncExpressionSteppingTest2.fs - NetFx40
 
-	SOURCE=AsyncExpressionSteppingTest3.fs   ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd AsyncExpressionSteppingTest3.dll NetFx40"	# AsyncExpressionSteppingTest3.fs - NetFx40
+	SOURCE=AsyncExpressionSteppingTest3.fs   SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd AsyncExpressionSteppingTest3.dll NetFx40"	# AsyncExpressionSteppingTest3.fs - NetFx40
 
-	SOURCE=AsyncExpressionSteppingTest4.fs   ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd AsyncExpressionSteppingTest4.dll NetFx40"	# AsyncExpressionSteppingTest4.fs - NetFx40
-	SOURCE=AsyncExpressionSteppingTest5.fs   ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd AsyncExpressionSteppingTest5.dll NetFx40"	# AsyncExpressionSteppingTest5.fs - NetFx40
-	SOURCE=AsyncExpressionSteppingTest6.fs   ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd AsyncExpressionSteppingTest6.dll NetFx40"	# AsyncExpressionSteppingTest6.fs - NetFx40
+	SOURCE=AsyncExpressionSteppingTest4.fs   SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd AsyncExpressionSteppingTest4.dll NetFx40"	# AsyncExpressionSteppingTest4.fs - NetFx40
+	SOURCE=AsyncExpressionSteppingTest5.fs   SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd AsyncExpressionSteppingTest5.dll NetFx40"	# AsyncExpressionSteppingTest5.fs - NetFx40
+	SOURCE=AsyncExpressionSteppingTest6.fs   SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd AsyncExpressionSteppingTest6.dll NetFx40"	# AsyncExpressionSteppingTest6.fs - NetFx40
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/AttributeTargets/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/AttributeTargets/env.lst
index a864100c16c..3b644dbdc06 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/AttributeTargets/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/AttributeTargets/env.lst
@@ -1,4 +1,4 @@
-	SOURCE=Default.fs   ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Default.dll"	# Default.fs
-	SOURCE=Field.fs     ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Field.dll"		# Field.fs
-	SOURCE=Property.fs  ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Property.dll"	# Property.fs
+	SOURCE=Default.fs   SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Default.dll"	# Default.fs
+	SOURCE=Field.fs     SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Field.dll"		# Field.fs
+	SOURCE=Property.fs  SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Property.dll"	# Property.fs
 
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/cctorduwithmember01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/cctorduwithmember01.il.netfx4.bsl
index c115bb41796..31d0820c370 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/cctorduwithmember01.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/cctorduwithmember01.il.netfx4.bsl
@@ -102,7 +102,7 @@
        extends [mscorlib]System.Object
 {
   .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-  .class auto autochar serializable nested public beforefieldinit C
+  .class auto autochar serializable sealed nested public beforefieldinit C
          extends [mscorlib]System.Object
          implements class [mscorlib]System.IEquatable`1,
                     [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/env.lst
index 24ababf3dd8..f3b623c8e60 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/CCtorDUWithMember/env.lst
@@ -1,5 +1,5 @@
-	SOURCE="CCtorDUWithMember01a.fs CCtorDUWithMember01.fs" ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CCtorDUWithMember01.exe NetFx40"	# CCtorDUWithMember01.fs - NetFx40
+	SOURCE="CCtorDUWithMember01a.fs CCtorDUWithMember01.fs" SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CCtorDUWithMember01.exe NetFx40"	# CCtorDUWithMember01.fs - NetFx40
 
-	SOURCE="CCtorDUWithMember02a.fs CCtorDUWithMember02.fs" ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CCtorDUWithMember02.exe"	# CCtorDUWithMember02.fs
-	SOURCE="CCtorDUWithMember03a.fs CCtorDUWithMember03.fs" ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CCtorDUWithMember03.exe"	# CCtorDUWithMember03.fs
-	SOURCE="CCtorDUWithMember04a.fs CCtorDUWithMember04.fs" ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CCtorDUWithMember04.exe"	# CCtorDUWithMember04.fs
+	SOURCE="CCtorDUWithMember02a.fs CCtorDUWithMember02.fs" SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CCtorDUWithMember02.exe"	# CCtorDUWithMember02.fs
+	SOURCE="CCtorDUWithMember03a.fs CCtorDUWithMember03.fs" SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CCtorDUWithMember03.exe"	# CCtorDUWithMember03.fs
+	SOURCE="CCtorDUWithMember04a.fs CCtorDUWithMember04.fs" SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CCtorDUWithMember04.exe"	# CCtorDUWithMember04.fs
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/CompiledNameAttribute/CompiledNameAttribute04.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/CompiledNameAttribute/CompiledNameAttribute04.il.bsl
index 54a89679a3e..1f8e155f62f 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/CompiledNameAttribute/CompiledNameAttribute04.il.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/CompiledNameAttribute/CompiledNameAttribute04.il.bsl
@@ -68,7 +68,7 @@
     {
     } // end of method C::A2
 
-    .method family specialname rtspecialname 
+    .method public specialname rtspecialname 
             instance void  .ctor() cil managed
     {
       // Code size       10 (0xa)
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/CompiledNameAttribute/CompiledNameAttribute04.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/CompiledNameAttribute/CompiledNameAttribute04.il.netfx4.bsl
index f54cf2ec818..a38431b8f68 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/CompiledNameAttribute/CompiledNameAttribute04.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/CompiledNameAttribute/CompiledNameAttribute04.il.netfx4.bsl
@@ -68,7 +68,7 @@
     {
     } // end of method C::A2
 
-    .method family specialname rtspecialname 
+    .method public specialname rtspecialname 
             instance void  .ctor() cil managed
     {
       // Code size       10 (0xa)
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/CompiledNameAttribute/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/CompiledNameAttribute/env.lst
index 4e5b62fe72b..0126162f005 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/CompiledNameAttribute/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/CompiledNameAttribute/env.lst
@@ -1,5 +1,5 @@
-	SOURCE=CompiledNameAttribute01.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CompiledNameAttribute01.exe"		# CompiledNameAttribute01.fs
-	SOURCE=CompiledNameAttribute02.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CompiledNameAttribute02.exe"		# CompiledNameAttribute02.fs
-	SOURCE=CompiledNameAttribute03.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CompiledNameAttribute03.exe"		# CompiledNameAttribute03.fs
+	SOURCE=CompiledNameAttribute01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CompiledNameAttribute01.exe"		# CompiledNameAttribute01.fs
+	SOURCE=CompiledNameAttribute02.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CompiledNameAttribute02.exe"		# CompiledNameAttribute02.fs
+	SOURCE=CompiledNameAttribute03.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CompiledNameAttribute03.exe"		# CompiledNameAttribute03.fs
 
-	SOURCE=CompiledNameAttribute04.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CompiledNameAttribute04.exe NetFx40"	# CompiledNameAttribute04.fs - NetFx40
+	SOURCE=CompiledNameAttribute04.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CompiledNameAttribute04.exe NetFx40"	# CompiledNameAttribute04.fs - NetFx40
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/env.lst
index fbd1792a9c1..e9a3d89387e 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ComputationExpressions/env.lst
@@ -1,13 +1,13 @@
 # These might become handly one day...
 # 
 
-	SOURCE=ComputationExprLibrary.fs ISCFLAGS="-a --optimize-" SCFLAGS=" " COMPILE_ONLY=1	# ComputationExprLibrary.fs (setup)
+	SOURCE=ComputationExprLibrary.fs SCFLAGS="-a --optimize-"  COMPILE_ONLY=1	# ComputationExprLibrary.fs (setup)
 
-	SOURCE=ComputationExpr01.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- -r:ComputationExprLibrary.dll" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ComputationExpr01.exe"		# ComputationExpr01.fs
-	SOURCE=ComputationExpr02.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- -r:ComputationExprLibrary.dll" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ComputationExpr02.exe"		# ComputationExpr02.fs
-	SOURCE=ComputationExpr03.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- -r:ComputationExprLibrary.dll" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ComputationExpr03.exe"		# ComputationExpr03.fs
-	SOURCE=ComputationExpr04.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- -r:ComputationExprLibrary.dll" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ComputationExpr04.exe"		# ComputationExpr04.fs
-	SOURCE=ComputationExpr05.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- -r:ComputationExprLibrary.dll" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ComputationExpr05.exe"		# ComputationExpr05.fs
-	SOURCE=ComputationExpr06.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- -r:ComputationExprLibrary.dll" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ComputationExpr06.exe"		# ComputationExpr06.fs
-	SOURCE=ComputationExpr07.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- -r:ComputationExprLibrary.dll" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ComputationExpr07.exe"		# ComputationExpr07.fs
+	SOURCE=ComputationExpr01.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- -r:ComputationExprLibrary.dll" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ComputationExpr01.exe"		# ComputationExpr01.fs
+	SOURCE=ComputationExpr02.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- -r:ComputationExprLibrary.dll" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ComputationExpr02.exe"		# ComputationExpr02.fs
+	SOURCE=ComputationExpr03.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- -r:ComputationExprLibrary.dll" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ComputationExpr03.exe"		# ComputationExpr03.fs
+	SOURCE=ComputationExpr04.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- -r:ComputationExprLibrary.dll" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ComputationExpr04.exe"		# ComputationExpr04.fs
+	SOURCE=ComputationExpr05.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- -r:ComputationExprLibrary.dll" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ComputationExpr05.exe"		# ComputationExpr05.fs
+	SOURCE=ComputationExpr06.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- -r:ComputationExprLibrary.dll" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ComputationExpr06.exe"		# ComputationExpr06.fs
+	SOURCE=ComputationExpr07.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- -r:ComputationExprLibrary.dll" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ComputationExpr07.exe"		# ComputationExpr07.fs
 
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/env.lst
index 50bb9b74a82..d00bad26e5c 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/DoNotBoxStruct/env.lst
@@ -1,24 +1,24 @@
-	SOURCE=DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth.exe"	# DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth.fs
-	SOURCE=DoNotBoxStruct_Array_FSInterface_NoExtMeth.fs          ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_Array_FSInterface_NoExtMeth.exe"		# DoNotBoxStruct_Array_FSInterface_NoExtMeth.fs
+	SOURCE=DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth.exe"	# DoNotBoxStruct_ArrayOfArray_FSInterface_NoExtMeth.fs
+	SOURCE=DoNotBoxStruct_Array_FSInterface_NoExtMeth.fs          SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_Array_FSInterface_NoExtMeth.exe"		# DoNotBoxStruct_Array_FSInterface_NoExtMeth.fs
 
-	SOURCE=DoNotBoxStruct_MDArray_FSInterface_NoExtMeth.fs        ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_MDArray_FSInterface_NoExtMeth.exe NetFx40"	# DoNotBoxStruct_MDArray_FSInterface_NoExtMeth.fs - NetFx40
+	SOURCE=DoNotBoxStruct_MDArray_FSInterface_NoExtMeth.fs        SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_MDArray_FSInterface_NoExtMeth.exe NetFx40"	# DoNotBoxStruct_MDArray_FSInterface_NoExtMeth.fs - NetFx40
 
-	SOURCE=DoNotBoxStruct_NoArray_FSInterface_NoExtMeth.fs        ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_NoArray_FSInterface_NoExtMeth.exe NetFx40"	# DoNotBoxStruct_NoArray_FSInterface_NoExtMeth.fs - NetFx40
+	SOURCE=DoNotBoxStruct_NoArray_FSInterface_NoExtMeth.fs        SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_NoArray_FSInterface_NoExtMeth.exe NetFx40"	# DoNotBoxStruct_NoArray_FSInterface_NoExtMeth.fs - NetFx40
 
-	SOURCE=DoNotBoxStruct_ArrayOfArray_CSInterface.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_ArrayOfArray_CSInterface.exe"			# DoNotBoxStruct_ArrayOfArray_CSInterface.fs
+	SOURCE=DoNotBoxStruct_ArrayOfArray_CSInterface.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_ArrayOfArray_CSInterface.exe"			# DoNotBoxStruct_ArrayOfArray_CSInterface.fs
 
-	SOURCE=DoNotBoxStruct_ArrayOfArray_FSInterface.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_ArrayOfArray_FSInterface.exe NetFx40"		# DoNotBoxStruct_ArrayOfArray_FSInterface.fs - NetFx40
+	SOURCE=DoNotBoxStruct_ArrayOfArray_FSInterface.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_ArrayOfArray_FSInterface.exe NetFx40"		# DoNotBoxStruct_ArrayOfArray_FSInterface.fs - NetFx40
 
-	SOURCE=DoNotBoxStruct_Array_CSInterface.fs    ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_Array_CSInterface.exe"			# DoNotBoxStruct_Array_CSInterface.fs
+	SOURCE=DoNotBoxStruct_Array_CSInterface.fs    SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_Array_CSInterface.exe"			# DoNotBoxStruct_Array_CSInterface.fs
 
-	SOURCE=DoNotBoxStruct_Array_FSInterface.fs    ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_Array_FSInterface.exe NetFx40"		# DoNotBoxStruct_Array_FSInterface.fs - NetFx40
+	SOURCE=DoNotBoxStruct_Array_FSInterface.fs    SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_Array_FSInterface.exe NetFx40"		# DoNotBoxStruct_Array_FSInterface.fs - NetFx40
 
-	SOURCE=DoNotBoxStruct_MDArray_CSInterface.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_MDArray_CSInterface.exe NetFx40"		# DoNotBoxStruct_MDArray_CSInterface.fs - NetFx40
+	SOURCE=DoNotBoxStruct_MDArray_CSInterface.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_MDArray_CSInterface.exe NetFx40"		# DoNotBoxStruct_MDArray_CSInterface.fs - NetFx40
 
-	SOURCE=DoNotBoxStruct_MDArray_FSInterface.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_MDArray_FSInterface.exe NetFx40"		# DoNotBoxStruct_MDArray_FSInterface.fs - NetFx40
+	SOURCE=DoNotBoxStruct_MDArray_FSInterface.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_MDArray_FSInterface.exe NetFx40"		# DoNotBoxStruct_MDArray_FSInterface.fs - NetFx40
 
-	SOURCE=DoNotBoxStruct_NoArray_CSInterface.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_NoArray_CSInterface.exe"					# DoNotBoxStruct_NoArray_CSInterface.fs
+	SOURCE=DoNotBoxStruct_NoArray_CSInterface.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_NoArray_CSInterface.exe"					# DoNotBoxStruct_NoArray_CSInterface.fs
 
-	SOURCE=DoNotBoxStruct_NoArray_FSInterface.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_NoArray_FSInterface.exe NetFx40"		# DoNotBoxStruct_NoArray_FSInterface.fs - NetFx40
+	SOURCE=DoNotBoxStruct_NoArray_FSInterface.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_NoArray_FSInterface.exe NetFx40"		# DoNotBoxStruct_NoArray_FSInterface.fs - NetFx40
 
-	SOURCE=DoNotBoxStruct_ToString.fs             ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_ToString.exe"				# DoNotBoxStruct_ToString.fs
+	SOURCE=DoNotBoxStruct_ToString.fs             SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd DoNotBoxStruct_ToString.exe"				# DoNotBoxStruct_ToString.fs
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/env.lst
index 749853a5048..892d47c8fe2 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/GeneratedIterators/env.lst
@@ -1,5 +1,5 @@
 
-	SOURCE=GenIter01.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd GenIter01.exe NetFx40"	# GenIter01.fs - NetFx40
-	SOURCE=GenIter02.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd GenIter02.exe NetFx40"	# GenIter02.fs - NetFx40
-	SOURCE=GenIter03.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd GenIter03.exe NetFx40"	# GenIter03.fs - NetFx40
-	SOURCE=GenIter04.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd GenIter04.exe NetFx40"	# GenIter04.fs - NetFx40
+	SOURCE=GenIter01.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd GenIter01.exe NetFx40"	# GenIter01.fs - NetFx40
+	SOURCE=GenIter02.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd GenIter02.exe NetFx40"	# GenIter02.fs - NetFx40
+	SOURCE=GenIter03.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd GenIter03.exe NetFx40"	# GenIter03.fs - NetFx40
+	SOURCE=GenIter04.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd GenIter04.exe NetFx40"	# GenIter04.fs - NetFx40
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/env.lst
index e86424d4d67..9c42a7a604f 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/InequalityComparison/env.lst
@@ -1,5 +1,5 @@
-	SOURCE=InequalityComparison01.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd InequalityComparison01.exe"	# x <= y
-	SOURCE=InequalityComparison02.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd InequalityComparison02.exe"	# x >= y
-	SOURCE=InequalityComparison03.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd InequalityComparison03.exe"	# x < y
-	SOURCE=InequalityComparison04.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd InequalityComparison04.exe"	# x > y
-	SOURCE=InequalityComparison05.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd InequalityComparison05.exe"	# if (x > y) then ... else ...
+	SOURCE=InequalityComparison01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd InequalityComparison01.exe"	# x <= y
+	SOURCE=InequalityComparison02.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd InequalityComparison02.exe"	# x >= y
+	SOURCE=InequalityComparison03.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd InequalityComparison03.exe"	# x < y
+	SOURCE=InequalityComparison04.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd InequalityComparison04.exe"	# x > y
+	SOURCE=InequalityComparison05.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd InequalityComparison05.exe"	# if (x > y) then ... else ...
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/env.lst
index f4be0d2e6c5..9253505d54b 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/ListExpressionStepping/env.lst
@@ -1,6 +1,6 @@
-	SOURCE=ListExpressionSteppingTest1.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ListExpressionSteppingTest1.exe NetFx40"	# ListExpressionSteppingTest1.fs - NetFx40
-	SOURCE=ListExpressionSteppingTest2.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ListExpressionSteppingTest2.exe NetFx40"	# ListExpressionSteppingTest2.fs - NetFx40
-	SOURCE=ListExpressionSteppingTest3.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ListExpressionSteppingTest3.exe NetFx40"	# ListExpressionSteppingTest3.fs - NetFx40
-	SOURCE=ListExpressionSteppingTest4.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ListExpressionSteppingTest4.exe NetFx40"	# ListExpressionSteppingTest4.fs - NetFx40
-	SOURCE=ListExpressionSteppingTest5.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ListExpressionSteppingTest5.exe NetFx40"	# ListExpressionSteppingTest5.fs - NetFx40
-	SOURCE=ListExpressionSteppingTest6.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ListExpressionSteppingTest6.exe NetFx40"	# ListExpressionSteppingTest6.fs - NetFx40
+	SOURCE=ListExpressionSteppingTest1.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ListExpressionSteppingTest1.exe NetFx40"	# ListExpressionSteppingTest1.fs - NetFx40
+	SOURCE=ListExpressionSteppingTest2.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ListExpressionSteppingTest2.exe NetFx40"	# ListExpressionSteppingTest2.fs - NetFx40
+	SOURCE=ListExpressionSteppingTest3.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ListExpressionSteppingTest3.exe NetFx40"	# ListExpressionSteppingTest3.fs - NetFx40
+	SOURCE=ListExpressionSteppingTest4.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ListExpressionSteppingTest4.exe NetFx40"	# ListExpressionSteppingTest4.fs - NetFx40
+	SOURCE=ListExpressionSteppingTest5.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ListExpressionSteppingTest5.exe NetFx40"	# ListExpressionSteppingTest5.fs - NetFx40
+	SOURCE=ListExpressionSteppingTest6.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ListExpressionSteppingTest6.exe NetFx40"	# ListExpressionSteppingTest6.fs - NetFx40
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/MethodImplAttribute/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/MethodImplAttribute/env.lst
index bf246e86da1..a8ce825221b 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/MethodImplAttribute/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/MethodImplAttribute/env.lst
@@ -1,10 +1,10 @@
 # These are 4.x baselines
-	SOURCE=MethodImplAttribute.ForwardRef.fs        ISCFLAGS="-a -g --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplAttribute.ForwardRef.dll"	# MethodImplAttribute.ForwardRef.fs
-	SOURCE=MethodImplAttribute.InternalCall.fs      ISCFLAGS="-a -g --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplAttribute.InternalCall.dll"	# MethodImplAttribute.InternalCall.fs
-	SOURCE=MethodImplAttribute.NoInlining.fs        ISCFLAGS="-a -g --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplAttribute.NoInlining.dll"	# MethodImplAttribute.NoInlining.fs
-	SOURCE=MethodImplAttribute.NoOptimization.fs    ISCFLAGS="-a -g --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplAttribute.NoOptimization.dll"	# MethodImplAttribute.NoOptimization.fs
-	SOURCE=MethodImplAttribute.PreserveSig.fs       ISCFLAGS="-a -g --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplAttribute.PreserveSig.dll"	# MethodImplAttribute.PreserveSig.fs
-	SOURCE=MethodImplAttribute.Synchronized.fs      ISCFLAGS="-a -g --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplAttribute.Synchronized.dll"	# MethodImplAttribute.Synchronized.fs
-	SOURCE=MethodImplAttribute.Unmanaged.fs         ISCFLAGS="-a -g --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplAttribute.Unmanaged.dll"	# MethodImplAttribute.Unmanaged.fs
+	SOURCE=MethodImplAttribute.ForwardRef.fs        SCFLAGS="-a -g --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplAttribute.ForwardRef.dll"	# MethodImplAttribute.ForwardRef.fs
+	SOURCE=MethodImplAttribute.InternalCall.fs      SCFLAGS="-a -g --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplAttribute.InternalCall.dll"	# MethodImplAttribute.InternalCall.fs
+	SOURCE=MethodImplAttribute.NoInlining.fs        SCFLAGS="-a -g --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplAttribute.NoInlining.dll"	# MethodImplAttribute.NoInlining.fs
+	SOURCE=MethodImplAttribute.NoOptimization.fs    SCFLAGS="-a -g --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplAttribute.NoOptimization.dll"	# MethodImplAttribute.NoOptimization.fs
+	SOURCE=MethodImplAttribute.PreserveSig.fs       SCFLAGS="-a -g --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplAttribute.PreserveSig.dll"	# MethodImplAttribute.PreserveSig.fs
+	SOURCE=MethodImplAttribute.Synchronized.fs      SCFLAGS="-a -g --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplAttribute.Synchronized.dll"	# MethodImplAttribute.Synchronized.fs
+	SOURCE=MethodImplAttribute.Unmanaged.fs         SCFLAGS="-a -g --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplAttribute.Unmanaged.dll"	# MethodImplAttribute.Unmanaged.fs
 
 
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.fs b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.fs
new file mode 100644
index 00000000000..5210295c8eb
--- /dev/null
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.fs
@@ -0,0 +1,8 @@
+// regression test for https://github.com/Microsoft/visualfsharp/issues/420
+
+[]
+type X public (i : int) =
+    internal new() = X(1)
+    private new(f : float32) = X(1)
+
+exit 0
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.il.bsl
new file mode 100644
index 00000000000..3ecf71cd3ab
--- /dev/null
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/AbstractClass.il.bsl
@@ -0,0 +1,129 @@
+
+//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.1
+//  Copyright (c) Microsoft Corporation.  All rights reserved.
+
+
+
+// Metadata version: v4.0.30319
+.assembly extern mscorlib
+{
+  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
+  .ver 4:0:0:0
+}
+.assembly extern FSharp.Core
+{
+  .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:
+  .ver 4:4:0:9055
+}
+.assembly AbstractClass
+{
+  .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32,
+                                                                                                      int32,
+                                                                                                      int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) 
+
+  // 
+  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) 
+
+  .hash algorithm 0x00008004
+  .ver 0:0:0:0
+}
+.mresource public FSharpSignatureData.AbstractClass
+{
+  // Offset: 0x00000000 Length: 0x00000308
+}
+.mresource public FSharpOptimizationData.AbstractClass
+{
+  // Offset: 0x00000310 Length: 0x000000B1
+}
+.module AbstractClass.exe
+// MVID: {554AAD5A-333C-8BAF-A745-03835AAD4A55}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003       // WINDOWS_CUI
+.corflags 0x00000001    //  ILONLY
+// Image base: 0x00AE0000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public abstract auto ansi sealed AbstractClass
+       extends [mscorlib]System.Object
+{
+  .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
+  .class abstract auto ansi serializable nested public X
+         extends [mscorlib]System.Object
+  {
+    .custom instance void [FSharp.Core]Microsoft.FSharp.Core.AbstractClassAttribute::.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 specialname rtspecialname 
+            instance void  .ctor(int32 i) cil managed
+    {
+      // 
+      .maxstack  8
+      .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
+      .line 4,4 : 6,7 'D:\\source\\repos\\latkinfsharp\\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
+      IL_0007:  pop
+      IL_0008:  nop
+      IL_0009:  ret
+    } // end of method X::.ctor
+
+    .method assembly specialname rtspecialname 
+            instance void  .ctor() cil managed
+    {
+      // 
+      .maxstack  8
+      .line 5,5 : 22,26 ''
+      IL_0000:  nop
+      IL_0001:  ldarg.0
+      IL_0002:  ldc.i4.1
+      IL_0003:  callvirt   instance void AbstractClass/X::.ctor(int32)
+      IL_0008:  ret
+    } // end of method X::.ctor
+
+    .method assembly specialname rtspecialname 
+            instance void  .ctor(float32 f) cil managed
+    {
+      // 
+      .maxstack  8
+      .line 6,6 : 32,36 ''
+      IL_0000:  nop
+      IL_0001:  ldarg.0
+      IL_0002:  ldc.i4.1
+      IL_0003:  callvirt   instance void AbstractClass/X::.ctor(int32)
+      IL_0008:  ret
+    } // end of method X::.ctor
+
+  } // end of class X
+
+} // end of class AbstractClass
+
+.class private abstract auto ansi sealed ''.$AbstractClass
+       extends [mscorlib]System.Object
+{
+  .field static assembly int32 init@
+  .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) 
+  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) 
+  .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) 
+  .method public static void  main@() cil managed
+  {
+    .entrypoint
+    // 
+    .maxstack  8
+    .line 8,8 : 1,7 ''
+    IL_0000:  nop
+    IL_0001:  ldc.i4.0
+    IL_0002:  call       !!0 [FSharp.Core]Microsoft.FSharp.Core.Operators::Exit(int32)
+    IL_0007:  pop
+    IL_0008:  ret
+  } // end of method $AbstractClass::main@
+
+} // end of class ''.$AbstractClass
+
+
+// =============================================================
+
+// 
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GeneralizationOnUnions01.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GeneralizationOnUnions01.il.bsl
index 1b9d45c2a7c..7026401c306 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GeneralizationOnUnions01.il.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/GeneralizationOnUnions01.il.bsl
@@ -51,7 +51,7 @@
        extends [mscorlib]System.Object
 {
   .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-  .class auto autochar serializable nested public beforefieldinit Weirdo
+  .class auto autochar serializable sealed nested public beforefieldinit Weirdo
          extends [mscorlib]System.Object
          implements class [mscorlib]System.IEquatable`1,
                     [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/env.lst
index f8449641286..272c8588724 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/env.lst
@@ -1,54 +1,56 @@
-	SOURCE=CodeGenRenamings01.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CodeGenRenamings01.exe NetFx40"	# CodeGenRenamings01.fs - NetFx40
+	SOURCE=CodeGenRenamings01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CodeGenRenamings01.exe NetFx40"	# CodeGenRenamings01.fs - NetFx40
 
-	SOURCE=ArgumentNamesInClosures01.fs ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ArgumentNamesInClosures01.dll NetFx40"	# ArgumentNamesInClosures01.fs - NetFx40
+	SOURCE=ArgumentNamesInClosures01.fs SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ArgumentNamesInClosures01.dll NetFx40"	# ArgumentNamesInClosures01.fs - NetFx40
 
-	SOURCE=Decimal01.fs              ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Decimal01.exe"			# Decimal01.fs
+	SOURCE=Decimal01.fs              SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Decimal01.exe"			# Decimal01.fs
 
-	SOURCE=EntryPoint01.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd EntryPoint01.exe"		# EntryPoint01.fs
+	SOURCE=EntryPoint01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd EntryPoint01.exe"		# EntryPoint01.fs
 
-	SOURCE=EqualsOnUnions01.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd EqualsOnUnions01.exe NetFx40"		# EqualsOnUnions01.fs - NetFx40
+	SOURCE=EqualsOnUnions01.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd EqualsOnUnions01.exe NetFx40"		# EqualsOnUnions01.fs - NetFx40
 
-	SOURCE=ForLoop01.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ForLoop01.exe NetFx40"	# ForLoop01.fs - NetFx40
+	SOURCE=ForLoop01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ForLoop01.exe NetFx40"	# ForLoop01.fs - NetFx40
 
-	SOURCE=ForLoop02.fs                                           ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ForLoop02.exe"	# ForLoop02.fs
-	SOURCE=ForLoop03.fs                                           ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ForLoop03.exe"	# ForLoop03.fs
-	SOURCE=NoBoxingOnDispose01.fs                                 ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd NoBoxingOnDispose01.exe"		# NoBoxingOnDispose01.fs
+	SOURCE=ForLoop02.fs                                           SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ForLoop02.exe"	# ForLoop02.fs
+	SOURCE=ForLoop03.fs                                           SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ForLoop03.exe"	# ForLoop03.fs
+	SOURCE=NoBoxingOnDispose01.fs                                 SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd NoBoxingOnDispose01.exe"		# NoBoxingOnDispose01.fs
 
-	SOURCE=IfThenElse01.fs                   ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd IfThenElse01.dll"		# IfThenElse01.fs
+	SOURCE=IfThenElse01.fs                   SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd IfThenElse01.dll"		# IfThenElse01.fs
 
-	SOURCE=LetIfThenElse01.fs          ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd LetIfThenElse01.exe NetFx40"			# LetIfThenElse01.fs - NetFx40
+	SOURCE=LetIfThenElse01.fs          SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd LetIfThenElse01.exe NetFx40"			# LetIfThenElse01.fs - NetFx40
 
-	SOURCE=Lock01.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Lock01.exe NetFx40"	# Lock01.fs - NetFx40
+	SOURCE=Lock01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Lock01.exe NetFx40"	# Lock01.fs - NetFx40
 
-	SOURCE=ModuleWithExpression01.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ModuleWithExpression01.exe"	# ModuleWithExpression01.fs
+	SOURCE=ModuleWithExpression01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ModuleWithExpression01.exe"	# ModuleWithExpression01.fs
 
-	SOURCE=NonEscapingArguments02.fs ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd NonEscapingArguments02.dll"	# NonEscapingArguments02.fs
+	SOURCE=NonEscapingArguments02.fs SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd NonEscapingArguments02.dll"	# NonEscapingArguments02.fs
 
-	SOURCE=Seq_for_all01.fs          ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Seq_for_all01.exe"		# Seq_for_all01.fs
+	SOURCE=Seq_for_all01.fs          SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Seq_for_all01.exe"		# Seq_for_all01.fs
 
 
-	SOURCE=StructsAsArrayElements01.fs       ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd StructsAsArrayElements01.dll NetFx40"		# StructsAsArrayElements01.fs - NetFx40
+	SOURCE=StructsAsArrayElements01.fs       SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd StructsAsArrayElements01.dll NetFx40"		# StructsAsArrayElements01.fs - NetFx40
 
-	SOURCE=PreserveSig.fs       ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd PreserveSig.dll NetFx40"		# PreserveSig.fs - NetFx40
+	SOURCE=PreserveSig.fs       SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd PreserveSig.dll NetFx40"		# PreserveSig.fs - NetFx40
 
 # The name of this test is a bit misleading for legacy reasons: it used to test the --no-generate-filter-blocks option, which is now gone
-	SOURCE=TryWith_NoFilterBlocks01.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TryWith_NoFilterBlocks01.exe"						# TryWith_NoFilterBlocks01.fs
+	SOURCE=TryWith_NoFilterBlocks01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TryWith_NoFilterBlocks01.exe"						# TryWith_NoFilterBlocks01.fs
 
-	SOURCE=Structs01.fs          ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Structs01.exe NetFx40"		# Structs01.fs - NetFx40
-	SOURCE=Structs02.fs          ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Structs02.exe NetFx40"		# Structs02.fs - NetFx40
+	SOURCE=Structs01.fs          SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Structs01.exe NetFx40"		# Structs01.fs - NetFx40
+	SOURCE=Structs02.fs          SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Structs02.exe NetFx40"		# Structs02.fs - NetFx40
 
-	SOURCE=cas.fs PRECMD="\$CSC_PIPE /t:library cas.cs" ISCFLAGS="-r cas.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd cas.exe NetFx40"	# cas.fs - NetFx40
+	SOURCE=cas.fs PRECMD="\$CSC_PIPE /t:library cas.cs" SCFLAGS="-r cas.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd cas.exe NetFx40"	# cas.fs - NetFx40
 
-	SOURCE=Marshal.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Marshal.exe"  # Marshal.fs
-	SOURCE=MethodImplNoInline.fs ISCFLAGS="-O" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplNoInline.exe"						# MethodImplNoInline.fs
-	SOURCE=MethodImplNoInline02.fs ISCFLAGS="-O" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplNoInline02.exe"						# MethodImplNoInline02.fs
+	SOURCE=Marshal.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Marshal.exe"  # Marshal.fs
+	SOURCE=MethodImplNoInline.fs SCFLAGS="-O" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplNoInline.exe"						# MethodImplNoInline.fs
+	SOURCE=MethodImplNoInline02.fs SCFLAGS="-O" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd MethodImplNoInline02.exe"						# MethodImplNoInline02.fs
 
-	SOURCE=CustomAttributeGenericParameter01.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CustomAttributeGenericParameter01.exe NetFx40"	# CustomAttributeGenericParameter01.fs - NetFx40
+	SOURCE=CustomAttributeGenericParameter01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CustomAttributeGenericParameter01.exe NetFx40"	# CustomAttributeGenericParameter01.fs - NetFx40
 
 # Need to create 2.0 baseline
-	SOURCE=GenericTypeStaticField01.fs COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd GenericTypeStaticField01.exe NetFx40"	# GenericTypeStaticField01.fs - NetFx40
+	SOURCE=GenericTypeStaticField01.fs SCFLAGS="-g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd GenericTypeStaticField01.exe NetFx40"	# GenericTypeStaticField01.fs - NetFx40
 
-	SOURCE=GeneralizationOnUnions01.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd GeneralizationOnUnions01.exe"	# GeneralizationOnUnions01.fs
+	SOURCE=GeneralizationOnUnions01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd GeneralizationOnUnions01.exe"	# GeneralizationOnUnions01.fs
 
 # Note that unlike other codegen tests this requires --optimize+ since we're testing for the prescence of inlined code
-ReqPP	SOURCE=LazyNoInline01.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd LazyNoInline01.exe NetFx40"	# LazyNoInline01.fs - NetFx40
+ReqPP	SOURCE=LazyNoInline01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd LazyNoInline01.exe NetFx40"	# LazyNoInline01.fs - NetFx40
+
+	SOURCE=AbstractClass.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd AbstractClass.exe"	# AbstractClass.fs
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/generictypestaticfield01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/generictypestaticfield01.il.netfx4.bsl
index d339d72c736..86915d8ae2e 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/generictypestaticfield01.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Misc/generictypestaticfield01.il.netfx4.bsl
@@ -1,5 +1,5 @@
 
-//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.16774
+//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.33440
 //  Copyright (c) Microsoft Corporation.  All rights reserved.
 
 
@@ -13,7 +13,7 @@
 .assembly extern FSharp.Core
 {
   .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:
-  .ver 4:0:0:0
+  .ver 4:4:0:9055
 }
 .assembly GenericTypeStaticField01
 {
@@ -29,20 +29,20 @@
 }
 .mresource public FSharpSignatureData.GenericTypeStaticField01
 {
-  // Offset: 0x00000000 Length: 0x0000062C
+  // Offset: 0x00000000 Length: 0x00000608
 }
 .mresource public FSharpOptimizationData.GenericTypeStaticField01
 {
-  // Offset: 0x00000630 Length: 0x000001F9
+  // Offset: 0x00000610 Length: 0x000001E7
 }
 .module GenericTypeStaticField01.exe
-// MVID: {4DAC0E02-1E75-7E6B-A745-0383020EAC4D}
+// MVID: {54CA24D1-1E75-7E6B-A745-0383D124CA54}
 .imagebase 0x00400000
 .file alignment 0x00000200
 .stackreserve 0x00100000
 .subsystem 0x0003       // WINDOWS_CUI
 .corflags 0x00000001    //  ILONLY
-// Image base: 0x0000000000550000
+// Image base: 0x00460000
 
 
 // =============== CLASS MEMBERS DECLARATION ===================
@@ -63,7 +63,7 @@
       // Code size       10 (0xa)
       .maxstack  8
       .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
-      .line 2,2 : 6,9 
+      .line 2,2 : 6,9 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\Misc\\GenericTypeStaticField01.fs'
       IL_0000:  ldarg.0
       IL_0001:  callvirt   instance void [mscorlib]System.Object::.ctor()
       IL_0006:  ldarg.0
@@ -75,16 +75,17 @@
     .method private specialname rtspecialname static 
             void  .cctor() cil managed
     {
-      // Code size       18 (0x12)
+      // Code size       20 (0x14)
       .maxstack  8
-      .line 3,3 : 10,41 
+      .line 3,3 : 10,41 ''
       IL_0000:  nop
       IL_0001:  newobj     instance void class GenericTypeStaticField01/Foo`1::.ctor()
       IL_0006:  stsfld     class GenericTypeStaticField01/Foo`1 class GenericTypeStaticField01/Foo`1::theInstance
       IL_000b:  ldc.i4.1
-      IL_000c:  stsfld     int32 class GenericTypeStaticField01/Foo`1::init@2
-      .line 2,2 : 6,9 
-      IL_0011:  ret
+      IL_000c:  volatile.
+      IL_000e:  stsfld     int32 class GenericTypeStaticField01/Foo`1::init@2
+      .line 2,2 : 6,9 ''
+      IL_0013:  ret
     } // end of method Foo`1::.cctor
 
     .method public specialname static class GenericTypeStaticField01/Foo`1 
@@ -92,7 +93,7 @@
     {
       // Code size       27 (0x1b)
       .maxstack  8
-      .line 4,4 : 28,39 
+      .line 4,4 : 28,39 ''
       IL_0000:  volatile.
       IL_0002:  ldsfld     int32 class GenericTypeStaticField01/Foo`1::init@2
       IL_0007:  ldc.i4.1
@@ -127,7 +128,7 @@
     {
       // Code size       10 (0xa)
       .maxstack  8
-      .line 6,6 : 6,9 
+      .line 6,6 : 6,9 ''
       IL_0000:  ldarg.0
       IL_0001:  callvirt   instance void [mscorlib]System.Object::.ctor()
       IL_0006:  ldarg.0
@@ -139,16 +140,17 @@
     .method private specialname rtspecialname static 
             void  .cctor() cil managed
     {
-      // Code size       18 (0x12)
+      // Code size       20 (0x14)
       .maxstack  8
-      .line 7,7 : 10,44 
+      .line 7,7 : 10,44 ''
       IL_0000:  nop
       IL_0001:  newobj     instance void class GenericTypeStaticField01/Bar`2::.ctor()
       IL_0006:  stsfld     class GenericTypeStaticField01/Bar`2 class GenericTypeStaticField01/Bar`2::theInstance
       IL_000b:  ldc.i4.1
-      IL_000c:  stsfld     int32 class GenericTypeStaticField01/Bar`2::'init@6-1'
-      .line 6,6 : 6,9 
-      IL_0011:  ret
+      IL_000c:  volatile.
+      IL_000e:  stsfld     int32 class GenericTypeStaticField01/Bar`2::'init@6-1'
+      .line 6,6 : 6,9 ''
+      IL_0013:  ret
     } // end of method Bar`2::.cctor
 
     .method public specialname static class GenericTypeStaticField01/Bar`2 
@@ -156,7 +158,7 @@
     {
       // Code size       27 (0x1b)
       .maxstack  8
-      .line 8,8 : 28,39 
+      .line 8,8 : 28,39 ''
       IL_0000:  volatile.
       IL_0002:  ldsfld     int32 class GenericTypeStaticField01/Bar`2::'init@6-1'
       IL_0007:  ldc.i4.1
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.fs b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.fs
new file mode 100644
index 00000000000..c355da097c3
--- /dev/null
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.fs
@@ -0,0 +1,13 @@
+// #Regression #NoMono #NoMT #CodeGen #EmittedIL 
+type C() = 
+    []
+    let mutable x = 1
+
+    member this.X with get() = x and set v = x <- v
+
+
+type StaticC() = 
+    []
+    static let mutable x = 1
+
+    static member X with get() = x and set v = x <- v
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl
new file mode 100644
index 00000000000..1d5278e6be2
--- /dev/null
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/Mutation05.il.bsl
@@ -0,0 +1,249 @@
+
+//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.33440
+//  Copyright (c) Microsoft Corporation.  All rights reserved.
+
+
+
+// Metadata version: v4.0.30319
+.assembly extern mscorlib
+{
+  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
+  .ver 4:0:0:0
+}
+.assembly extern FSharp.Core
+{
+  .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:
+  .ver 4:4:0:9055
+}
+.assembly Mutation05
+{
+  .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32,
+                                                                                                      int32,
+                                                                                                      int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) 
+
+  // --- The following custom attribute is added automatically, do not uncomment -------
+  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 01 01 00 00 00 00 ) 
+
+  .hash algorithm 0x00008004
+  .ver 0:0:0:0
+}
+.mresource public FSharpSignatureData.Mutation05
+{
+  // Offset: 0x00000000 Length: 0x000004C6
+}
+.mresource public FSharpOptimizationData.Mutation05
+{
+  // Offset: 0x000004D0 Length: 0x00000127
+}
+.module Mutation05.exe
+// MVID: {54C7CE57-8C6A-2E22-A745-038357CEC754}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003       // WINDOWS_CUI
+.corflags 0x00000001    //  ILONLY
+// Image base: 0x001E0000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public abstract auto ansi sealed Mutation05
+       extends [mscorlib]System.Object
+{
+  .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
+  .class auto ansi serializable nested public C
+         extends [mscorlib]System.Object
+  {
+    .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) 
+    .field assembly int32 x
+    .custom instance void [FSharp.Core]Microsoft.FSharp.Core.VolatileFieldAttribute::.ctor() = ( 01 00 00 00 ) 
+    .method public specialname rtspecialname 
+            instance void  .ctor() cil managed
+    {
+      // Code size       19 (0x13)
+      .maxstack  8
+      .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\\Mutation\\Mutation05.fs'
+      IL_0000:  ldarg.0
+      IL_0001:  callvirt   instance void [mscorlib]System.Object::.ctor()
+      IL_0006:  ldarg.0
+      IL_0007:  pop
+      IL_0008:  nop
+      IL_0009:  ldarg.0
+      IL_000a:  ldc.i4.1
+      IL_000b:  volatile.
+      IL_000d:  stfld      int32 Mutation05/C::x
+      .line 2,2 : 6,7 ''
+      IL_0012:  ret
+    } // end of method C::.ctor
+
+    .method public hidebysig specialname 
+            instance int32  get_X() cil managed
+    {
+      // Code size       10 (0xa)
+      .maxstack  8
+      .line 6,6 : 32,33 ''
+      IL_0000:  nop
+      IL_0001:  ldarg.0
+      IL_0002:  volatile.
+      IL_0004:  ldfld      int32 Mutation05/C::x
+      IL_0009:  ret
+    } // end of method C::get_X
+
+    .method public hidebysig specialname 
+            instance void  set_X(int32 v) cil managed
+    {
+      // Code size       11 (0xb)
+      .maxstack  8
+      .line 6,6 : 46,52 ''
+      IL_0000:  nop
+      IL_0001:  ldarg.0
+      IL_0002:  ldarg.1
+      IL_0003:  volatile.
+      IL_0005:  stfld      int32 Mutation05/C::x
+      IL_000a:  ret
+    } // end of method C::set_X
+
+    .property instance int32 X()
+    {
+      .set instance void Mutation05/C::set_X(int32)
+      .get instance int32 Mutation05/C::get_X()
+    } // end of property C::X
+  } // end of class C
+
+  .class auto ansi serializable nested public StaticC
+         extends [mscorlib]System.Object
+  {
+    .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 03 00 00 00 00 00 ) 
+    .field static assembly int32 x
+    .custom instance void [FSharp.Core]Microsoft.FSharp.Core.VolatileFieldAttribute::.ctor() = ( 01 00 00 00 ) 
+    .field static assembly int32 init@9
+    .method public specialname rtspecialname 
+            instance void  .ctor() cil managed
+    {
+      // Code size       10 (0xa)
+      .maxstack  8
+      .line 9,9 : 6,13 ''
+      IL_0000:  ldarg.0
+      IL_0001:  callvirt   instance void [mscorlib]System.Object::.ctor()
+      IL_0006:  ldarg.0
+      IL_0007:  pop
+      IL_0008:  nop
+      IL_0009:  ret
+    } // end of method StaticC::.ctor
+
+    .method public specialname static int32 
+            get_X() cil managed
+    {
+      // Code size       33 (0x21)
+      .maxstack  8
+      .line 13,13 : 34,35 ''
+      IL_0000:  volatile.
+      IL_0002:  ldsfld     int32 Mutation05/StaticC::init@9
+      IL_0007:  ldc.i4.1
+      IL_0008:  bge.s      IL_000c
+
+      IL_000a:  br.s       IL_000e
+
+      IL_000c:  br.s       IL_0017
+
+      .line 100001,100001 : 0,0 ''
+      IL_000e:  call       void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit()
+      IL_0013:  nop
+      .line 100001,100001 : 0,0 ''
+      IL_0014:  nop
+      IL_0015:  br.s       IL_0018
+
+      .line 100001,100001 : 0,0 ''
+      .line 100001,100001 : 0,0 ''
+      IL_0017:  nop
+      IL_0018:  nop
+      IL_0019:  volatile.
+      IL_001b:  ldsfld     int32 Mutation05/StaticC::x
+      IL_0020:  ret
+    } // end of method StaticC::get_X
+
+    .method public specialname static void 
+            set_X(int32 v) cil managed
+    {
+      // Code size       34 (0x22)
+      .maxstack  8
+      .line 13,13 : 48,54 ''
+      IL_0000:  volatile.
+      IL_0002:  ldsfld     int32 Mutation05/StaticC::init@9
+      IL_0007:  ldc.i4.1
+      IL_0008:  bge.s      IL_000c
+
+      IL_000a:  br.s       IL_000e
+
+      IL_000c:  br.s       IL_0017
+
+      .line 100001,100001 : 0,0 ''
+      IL_000e:  call       void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit()
+      IL_0013:  nop
+      .line 100001,100001 : 0,0 ''
+      IL_0014:  nop
+      IL_0015:  br.s       IL_0018
+
+      .line 100001,100001 : 0,0 ''
+      .line 100001,100001 : 0,0 ''
+      IL_0017:  nop
+      IL_0018:  nop
+      IL_0019:  ldarg.0
+      IL_001a:  volatile.
+      IL_001c:  stsfld     int32 Mutation05/StaticC::x
+      IL_0021:  ret
+    } // end of method StaticC::set_X
+
+    .method private specialname rtspecialname static 
+            void  .cctor() cil managed
+    {
+      // Code size       13 (0xd)
+      .maxstack  8
+      .line 100001,100001 : 0,0 ''
+      IL_0000:  ldc.i4.0
+      IL_0001:  stsfld     int32 ''.$Mutation05::init@
+      IL_0006:  ldsfld     int32 ''.$Mutation05::init@
+      IL_000b:  pop
+      IL_000c:  ret
+    } // end of method StaticC::.cctor
+
+    .property int32 X()
+    {
+      .set void Mutation05/StaticC::set_X(int32)
+      .get int32 Mutation05/StaticC::get_X()
+    } // end of property StaticC::X
+  } // end of class StaticC
+
+} // end of class Mutation05
+
+.class private abstract auto ansi sealed ''.$Mutation05
+       extends [mscorlib]System.Object
+{
+  .field static assembly int32 init@
+  .custom instance void [mscorlib]System.Diagnostics.DebuggerBrowsableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggerBrowsableState) = ( 01 00 00 00 00 00 00 00 ) 
+  .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) 
+  .custom instance void [mscorlib]System.Diagnostics.DebuggerNonUserCodeAttribute::.ctor() = ( 01 00 00 00 ) 
+  .method public static void  main@() cil managed
+  {
+    .entrypoint
+    // Code size       18 (0x12)
+    .maxstack  8
+    .line 11,11 : 12,29 ''
+    IL_0000:  nop
+    IL_0001:  ldc.i4.1
+    IL_0002:  volatile.
+    IL_0004:  stsfld     int32 Mutation05/StaticC::x
+    IL_0009:  ldc.i4.1
+    IL_000a:  volatile.
+    IL_000c:  stsfld     int32 Mutation05/StaticC::init@9
+    .line 9,9 : 6,13 ''
+    IL_0011:  ret
+  } // end of method $Mutation05::main@
+
+} // end of class ''.$Mutation05
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/env.lst
index 6f9eea46d59..e8b6fddffbc 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Mutation/env.lst
@@ -1,6 +1,7 @@
-	SOURCE=Mutation01.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Mutation01.exe NetFx40"		# Mutation01.fs - NetFx40
+	SOURCE=Mutation01.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Mutation01.exe NetFx40"		# Mutation01.fs - NetFx40
 
-	SOURCE=Mutation02.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Mutation02.exe"		# Mutation02.fs
-	SOURCE=Mutation03.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Mutation03.exe"		# Mutation03.fs
-	SOURCE=Mutation04.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Mutation04.exe"		# Mutation04.fs
+	SOURCE=Mutation02.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Mutation02.exe"		# Mutation02.fs
+	SOURCE=Mutation03.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Mutation03.exe"		# Mutation03.fs
+	SOURCE=Mutation04.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Mutation04.exe"		# Mutation04.fs
+	SOURCE=Mutation05.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Mutation05.exe"		# Mutation05.fs
 
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Operators/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/Operators/env.lst
index 366b1307faa..8cd1210a462 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Operators/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Operators/env.lst
@@ -1,2 +1,2 @@
-	SOURCE=comparison_decimal01.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd comparison_decimal01.exe"		# comparison_decimal01.fs
+	SOURCE=comparison_decimal01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd comparison_decimal01.exe"		# comparison_decimal01.fs
 
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/env.lst
index aa1d9d5a63d..5df032d5bb7 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/QueryExpressionStepping/env.lst
@@ -1,14 +1,14 @@
 NoMT	SOURCE=Utils.fs                       SCFLAGS="-a -r:System.Xml.Linq"																					# Utils.fs
-Expensive,NoMT	SOURCE=Linq101Aggregates01.fs         ISCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Aggregates01.exe NetFx40"		# Linq101Aggregates01.fs - CodeGen
-NoMT	SOURCE=Linq101ElementOperators01.fs   ISCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101ElementOperators01.exe NetFx40"		# Linq101ElementOperators01.fs - CodeGen
-NoMT	SOURCE=Linq101Grouping01.fs           ISCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Grouping01.exe NetFx40"			# Linq101Grouping01.fs - CodeGen
-NoMT	SOURCE=Linq101Joins01.fs              ISCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Joins01.exe NetFx40"			# Linq101Joins01.fs - CodeGen
-NoMT	SOURCE=Linq101Ordering01.fs           ISCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Ordering01.exe NetFx40"			# Linq101Ordering01.fs - CodeGen
-NoMT	SOURCE=Linq101Partitioning01.fs       ISCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Partitioning01.exe NetFx40"		# Linq101Partitioning01.fs - CodeGen
-NoMT	SOURCE=Linq101Quantifiers01.fs        ISCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Quantifiers01.exe NetFx40"		# Linq101Quantifiers01.fs - CodeGen
-Expensive,NoMT	SOURCE=Linq101Select01.fs             ISCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Select01.exe NetFx40"			# Linq101Select01.fs - CodeGen
-Expensive,NoMT	SOURCE=Linq101SetOperators01.fs       ISCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101SetOperators01.exe NetFx40"		# Linq101SetOperators01.fs - CodeGen
-NoMT	SOURCE=Linq101Where01.fs              ISCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Where01.exe NetFx40"			# Linq101Where01.fs - CodeGen
+Expensive,NoMT	SOURCE=Linq101Aggregates01.fs         SCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Aggregates01.exe NetFx40"		# Linq101Aggregates01.fs - CodeGen
+NoMT	SOURCE=Linq101ElementOperators01.fs   SCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101ElementOperators01.exe NetFx40"		# Linq101ElementOperators01.fs - CodeGen
+NoMT	SOURCE=Linq101Grouping01.fs           SCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Grouping01.exe NetFx40"			# Linq101Grouping01.fs - CodeGen
+NoMT	SOURCE=Linq101Joins01.fs              SCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Joins01.exe NetFx40"			# Linq101Joins01.fs - CodeGen
+NoMT	SOURCE=Linq101Ordering01.fs           SCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Ordering01.exe NetFx40"			# Linq101Ordering01.fs - CodeGen
+NoMT	SOURCE=Linq101Partitioning01.fs       SCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Partitioning01.exe NetFx40"		# Linq101Partitioning01.fs - CodeGen
+NoMT	SOURCE=Linq101Quantifiers01.fs        SCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Quantifiers01.exe NetFx40"		# Linq101Quantifiers01.fs - CodeGen
+Expensive,NoMT	SOURCE=Linq101Select01.fs             SCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Select01.exe NetFx40"			# Linq101Select01.fs - CodeGen
+Expensive,NoMT	SOURCE=Linq101SetOperators01.fs       SCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101SetOperators01.exe NetFx40"		# Linq101SetOperators01.fs - CodeGen
+NoMT	SOURCE=Linq101Where01.fs              SCFLAGS="-r:Utils.dll -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Linq101Where01.exe NetFx40"			# Linq101Where01.fs - CodeGen
 
 
 
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/env.lst
index 43a7ced1d55..41b18794b8d 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionStepping/env.lst
@@ -1,7 +1,7 @@
-	SOURCE=SeqExpressionSteppingTest1.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionSteppingTest1.exe NetFx40"	# SeqExpressionSteppingTest1.fs - NetFx40
-	SOURCE=SeqExpressionSteppingTest2.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionSteppingTest2.exe NetFx40"	# SeqExpressionSteppingTest2.fs - NetFx40
-	SOURCE=SeqExpressionSteppingTest3.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionSteppingTest3.exe NetFx40"	# SeqExpressionSteppingTest3.fs - NetFx40
-	SOURCE=SeqExpressionSteppingTest4.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionSteppingTest4.exe NetFx40"	# SeqExpressionSteppingTest4.fs - NetFx40
-	SOURCE=SeqExpressionSteppingTest5.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionSteppingTest5.exe NetFx40"	# SeqExpressionSteppingTest5.fs - NetFx40
-	SOURCE=SeqExpressionSteppingTest6.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionSteppingTest6.exe NetFx40"	# SeqExpressionSteppingTest6.fs - NetFx40
-	SOURCE=SeqExpressionSteppingTest7.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionSteppingTest7.exe NetFx40"	# SeqExpressionSteppingTest7.fs - NetFx40
+	SOURCE=SeqExpressionSteppingTest1.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionSteppingTest1.exe NetFx40"	# SeqExpressionSteppingTest1.fs - NetFx40
+	SOURCE=SeqExpressionSteppingTest2.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionSteppingTest2.exe NetFx40"	# SeqExpressionSteppingTest2.fs - NetFx40
+	SOURCE=SeqExpressionSteppingTest3.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionSteppingTest3.exe NetFx40"	# SeqExpressionSteppingTest3.fs - NetFx40
+	SOURCE=SeqExpressionSteppingTest4.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionSteppingTest4.exe NetFx40"	# SeqExpressionSteppingTest4.fs - NetFx40
+	SOURCE=SeqExpressionSteppingTest5.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionSteppingTest5.exe NetFx40"	# SeqExpressionSteppingTest5.fs - NetFx40
+	SOURCE=SeqExpressionSteppingTest6.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionSteppingTest6.exe NetFx40"	# SeqExpressionSteppingTest6.fs - NetFx40
+	SOURCE=SeqExpressionSteppingTest7.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionSteppingTest7.exe NetFx40"	# SeqExpressionSteppingTest7.fs - NetFx40
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/env.lst
index 102711c8242..d6b2b490043 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SeqExpressionTailCalls/env.lst
@@ -1,2 +1,2 @@
-	SOURCE=SeqExpressionTailCalls01.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionTailCalls01.exe NetFx40"	# SeqExpressionTailCalls01.fs - NetFx40
-Expensive	SOURCE=SeqExpressionTailCalls02.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionTailCalls02.exe NetFx40"	# SeqExpressionTailCalls02.fs - NetFx40
+	SOURCE=SeqExpressionTailCalls01.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionTailCalls01.exe NetFx40"	# SeqExpressionTailCalls01.fs - NetFx40
+Expensive	SOURCE=SeqExpressionTailCalls02.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SeqExpressionTailCalls02.exe NetFx40"	# SeqExpressionTailCalls02.fs - NetFx40
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModule.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModule.il.bsl
index 8d4e4bb86fe..1bc11601ade 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModule.il.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModule.il.bsl
@@ -51,7 +51,7 @@
        extends [mscorlib]System.Object
 {
   .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-  .class auto autochar serializable nested public beforefieldinit Expr
+  .class auto autochar serializable sealed nested public beforefieldinit Expr
          extends [mscorlib]System.Object
          implements class [mscorlib]System.IEquatable`1,
                     [mscorlib]System.Collections.IStructuralEquatable,
@@ -850,7 +850,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit Expr
+    .class auto autochar serializable sealed nested public beforefieldinit Expr
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModuleP.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModuleP.il.bsl
index abdfadce645..11f516feb8a 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModuleP.il.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelModuleP.il.bsl
@@ -51,7 +51,7 @@
        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 nested public beforefieldinit Expr
+  .class auto autochar sealed nested public beforefieldinit Expr
          extends [mscorlib]System.Object
          implements class [mscorlib]System.IEquatable`1,
                     [mscorlib]System.Collections.IStructuralEquatable,
@@ -836,7 +836,7 @@
          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 nested public beforefieldinit Expr
+    .class auto autochar sealed nested public beforefieldinit Expr
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespace.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespace.il.bsl
index 2480fee42c4..7bc58a1c435 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespace.il.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespace.il.bsl
@@ -47,7 +47,7 @@
 
 // =============== CLASS MEMBERS DECLARATION ===================
 
-.class public auto autochar serializable beforefieldinit XYZ.Expr
+.class public auto autochar serializable sealed beforefieldinit XYZ.Expr
        extends [mscorlib]System.Object
        implements class [mscorlib]System.IEquatable`1,
                   [mscorlib]System.Collections.IStructuralEquatable,
@@ -845,7 +845,7 @@
        extends [mscorlib]System.Object
 {
   .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-  .class auto autochar serializable nested public beforefieldinit Expr
+  .class auto autochar serializable sealed nested public beforefieldinit Expr
          extends [mscorlib]System.Object
          implements class [mscorlib]System.IEquatable`1,
                     [mscorlib]System.Collections.IStructuralEquatable,
@@ -1643,7 +1643,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit Expr
+    .class auto autochar serializable sealed nested public beforefieldinit Expr
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespaceP.il.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespaceP.il.bsl
index a2da2428abb..f19c1dc31eb 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespaceP.il.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/ToplevelNamespaceP.il.bsl
@@ -47,7 +47,7 @@
 
 // =============== CLASS MEMBERS DECLARATION ===================
 
-.class public auto autochar beforefieldinit XYZ.Expr
+.class public auto autochar sealed beforefieldinit XYZ.Expr
        extends [mscorlib]System.Object
        implements class [mscorlib]System.IEquatable`1,
                   [mscorlib]System.Collections.IStructuralEquatable,
@@ -831,7 +831,7 @@
        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 nested public beforefieldinit Expr
+  .class auto autochar sealed nested public beforefieldinit Expr
          extends [mscorlib]System.Object
          implements class [mscorlib]System.IEquatable`1,
                     [mscorlib]System.Collections.IStructuralEquatable,
@@ -1615,7 +1615,7 @@
          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 nested public beforefieldinit Expr
+    .class auto autochar sealed nested public beforefieldinit Expr
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/env.lst
index 4ef714c1e79..93e91c73c15 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SerializableAttribute/env.lst
@@ -1,7 +1,7 @@
-	SOURCE=ToplevelModule.fs    ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ToplevelModule.dll"		# ToplevelModule.fs - Desktop
-	SOURCE=ToplevelNamespace.fs ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ToplevelNamespace.dll"		# ToplevelNamespace.fs - Desktop
+	SOURCE=ToplevelModule.fs    SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ToplevelModule.dll"		# ToplevelModule.fs - Desktop
+	SOURCE=ToplevelNamespace.fs SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ToplevelNamespace.dll"		# ToplevelNamespace.fs - Desktop
 
 
-x,ReqUltimate	SOURCE=ToplevelModule.fs    ISCFLAGS="-o:ToplevelModuleP.dll -a -g --test:EmitFeeFeeAs100001 --optimize- --noframework -r:\"%FSCOREDLLPORTABLEPATH%\" -r:\"%X86_PROGRAMFILES%\\Reference Assemblies\\Microsoft\\Framework\\.NETPortable\\v4.0\\Profile\\Profile47\\mscorlib.dll\"" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ToplevelModuleP.dll"		# ToplevelModule.fs - Portable
-y,ReqUltimate	SOURCE=ToplevelNamespace.fs ISCFLAGS="-o:ToplevelNamespaceP.dll -a -g --test:EmitFeeFeeAs100001 --optimize- --noframework -r:\"%FSCOREDLLPORTABLEPATH%\" -r:\"%X86_PROGRAMFILES%\\Reference Assemblies\\Microsoft\\Framework\\.NETPortable\\v4.0\\Profile\\Profile47\\mscorlib.dll\"" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ToplevelNamespaceP.dll"	# ToplevelNamespace.fs - Portable
+x,ReqUltimate	SOURCE=ToplevelModule.fs    SCFLAGS="-o:ToplevelModuleP.dll -a -g --test:EmitFeeFeeAs100001 --optimize- --noframework -r:\"%FSCOREDLLPORTABLEPATH%\" -r:\"%X86_PROGRAMFILES%\\Reference Assemblies\\Microsoft\\Framework\\.NETPortable\\v4.0\\Profile\\Profile47\\mscorlib.dll\"" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ToplevelModuleP.dll"		# ToplevelModule.fs - Portable
+y,ReqUltimate	SOURCE=ToplevelNamespace.fs SCFLAGS="-o:ToplevelNamespaceP.dll -a -g --test:EmitFeeFeeAs100001 --optimize- --noframework -r:\"%FSCOREDLLPORTABLEPATH%\" -r:\"%X86_PROGRAMFILES%\\Reference Assemblies\\Microsoft\\Framework\\.NETPortable\\v4.0\\Profile\\Profile47\\mscorlib.dll\"" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ToplevelNamespaceP.dll"	# ToplevelNamespace.fs - Portable
 
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.netfx4.bsl
index 6ddfa38686c..4a11dca3fb9 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Class01.il.netfx4.bsl
@@ -1,5 +1,5 @@
 
-//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.16774
+//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.33440
 //  Copyright (c) Microsoft Corporation.  All rights reserved.
 
 
@@ -13,7 +13,7 @@
 .assembly extern FSharp.Core
 {
   .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:
-  .ver 4:0:0:0
+  .ver 4:4:0:9055
 }
 .assembly StaticInit_Class01
 {
@@ -29,20 +29,20 @@
 }
 .mresource public FSharpSignatureData.StaticInit_Class01
 {
-  // Offset: 0x00000000 Length: 0x00000357
+  // Offset: 0x00000000 Length: 0x00000333
 }
 .mresource public FSharpOptimizationData.StaticInit_Class01
 {
-  // Offset: 0x00000360 Length: 0x000000AD
+  // Offset: 0x00000338 Length: 0x000000AD
 }
 .module StaticInit_Class01.dll
-// MVID: {4DAC14AB-EC34-E66E-A745-0383AB14AC4D}
+// MVID: {54CA2363-EC34-E66E-A745-03836323CA54}
 .imagebase 0x00400000
 .file alignment 0x00000200
 .stackreserve 0x00100000
 .subsystem 0x0003       // WINDOWS_CUI
 .corflags 0x00000001    //  ILONLY
-// Image base: 0x0000000000470000
+// Image base: 0x003D0000
 
 
 // =============== CLASS MEMBERS DECLARATION ===================
@@ -63,7 +63,7 @@
       // Code size       10 (0xa)
       .maxstack  8
       .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
-      .line 4,4 : 6,7 
+      .line 4,4 : 6,7 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\StaticInit\\StaticInit_Class01.fs'
       IL_0000:  ldarg.0
       IL_0001:  callvirt   instance void [mscorlib]System.Object::.ctor()
       IL_0006:  ldarg.0
@@ -77,7 +77,7 @@
       .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) 
       // Code size       42 (0x2a)
       .maxstack  8
-      .line 7,7 : 23,37 
+      .line 7,7 : 23,37 ''
       IL_0000:  nop
       IL_0001:  volatile.
       IL_0003:  ldsfld     int32 StaticInit_ClassS01/C::init@4
@@ -88,15 +88,15 @@
 
       IL_000d:  br.s       IL_0018
 
-      .line 100001,100001 : 0,0 
+      .line 100001,100001 : 0,0 ''
       IL_000f:  call       void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit()
       IL_0014:  nop
-      .line 100001,100001 : 0,0 
+      .line 100001,100001 : 0,0 ''
       IL_0015:  nop
       IL_0016:  br.s       IL_0019
 
-      .line 100001,100001 : 0,0 
-      .line 100001,100001 : 0,0 
+      .line 100001,100001 : 0,0 ''
+      .line 100001,100001 : 0,0 ''
       IL_0018:  nop
       IL_0019:  ldsfld     int32 StaticInit_ClassS01/C::x
       IL_001e:  ldstr      "2"
@@ -110,7 +110,7 @@
     {
       // Code size       13 (0xd)
       .maxstack  8
-      .line 100001,100001 : 0,0 
+      .line 100001,100001 : 0,0 ''
       IL_0000:  ldc.i4.0
       IL_0001:  stsfld     int32 ''.$StaticInit_ClassS01::init@
       IL_0006:  ldsfld     int32 ''.$StaticInit_ClassS01::init@
@@ -132,17 +132,18 @@
   .method private specialname rtspecialname static 
           void  .cctor() cil managed
   {
-    // Code size       23 (0x17)
+    // Code size       25 (0x19)
     .maxstack  8
-    .line 6,6 : 12,30 
+    .line 6,6 : 12,30 ''
     IL_0000:  nop
     IL_0001:  ldstr      "1"
     IL_0006:  callvirt   instance int32 [mscorlib]System.String::get_Length()
     IL_000b:  stsfld     int32 StaticInit_ClassS01/C::x
     IL_0010:  ldc.i4.1
-    IL_0011:  stsfld     int32 StaticInit_ClassS01/C::init@4
-    .line 4,4 : 6,7 
-    IL_0016:  ret
+    IL_0011:  volatile.
+    IL_0013:  stsfld     int32 StaticInit_ClassS01/C::init@4
+    .line 4,4 : 6,7 ''
+    IL_0018:  ret
   } // end of method $StaticInit_ClassS01::.cctor
 
 } // end of class ''.$StaticInit_ClassS01
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.netfx4.bsl
index a4c2b81e6a6..74746b1c3b0 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/StaticInit_Struct01.il.netfx4.bsl
@@ -1,5 +1,5 @@
 
-//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.16774
+//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.33440
 //  Copyright (c) Microsoft Corporation.  All rights reserved.
 
 
@@ -13,7 +13,7 @@
 .assembly extern FSharp.Core
 {
   .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:
-  .ver 4:0:0:0
+  .ver 4:4:0:9055
 }
 .assembly StaticInit_Struct01
 {
@@ -29,20 +29,20 @@
 }
 .mresource public FSharpSignatureData.StaticInit_Struct01
 {
-  // Offset: 0x00000000 Length: 0x000007CD
+  // Offset: 0x00000000 Length: 0x000007B1
 }
 .mresource public FSharpOptimizationData.StaticInit_Struct01
 {
-  // Offset: 0x000007D8 Length: 0x0000021F
+  // Offset: 0x000007B8 Length: 0x0000021F
 }
 .module StaticInit_Struct01.dll
-// MVID: {4DAC14A8-05F6-D6CB-A745-0383A814AC4D}
+// MVID: {54CA235E-05F6-D6CB-A745-03835E23CA54}
 .imagebase 0x00400000
 .file alignment 0x00000200
 .stackreserve 0x00100000
 .subsystem 0x0003       // WINDOWS_CUI
 .corflags 0x00000001    //  ILONLY
-// Image base: 0x0000000000180000
+// Image base: 0x00440000
 
 
 // =============== CLASS MEMBERS DECLARATION ===================
@@ -71,7 +71,7 @@
       .maxstack  5
       .locals init ([0] valuetype StaticInit_Struct01/C& V_0)
       .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
-      .line 4,4 : 6,7 
+      .line 4,4 : 6,7 'C:\\GitHub\\dsyme\\visualfsharp\\tests\\fsharpqa\\Source\\CodeGen\\EmittedIL\\StaticInit\\StaticInit_Struct01.fs'
       IL_0000:  nop
       IL_0001:  ldarga.s   obj
       IL_0003:  stloc.0
@@ -93,7 +93,7 @@
       .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) 
       // Code size       14 (0xe)
       .maxstack  8
-      .line 4,4 : 6,7 
+      .line 4,4 : 6,7 ''
       IL_0000:  nop
       IL_0001:  ldarg.0
       IL_0002:  ldarg.1
@@ -111,7 +111,7 @@
       .maxstack  5
       .locals init ([0] valuetype StaticInit_Struct01/C V_0,
                [1] valuetype StaticInit_Struct01/C& V_1)
-      .line 4,4 : 6,7 
+      .line 4,4 : 6,7 ''
       IL_0000:  nop
       IL_0001:  ldarg.1
       IL_0002:  unbox.any  StaticInit_Struct01/C
@@ -137,7 +137,7 @@
       // Code size       32 (0x20)
       .maxstack  7
       .locals init ([0] int32 V_0)
-      .line 4,4 : 6,7 
+      .line 4,4 : 6,7 ''
       IL_0000:  nop
       IL_0001:  ldc.i4.0
       IL_0002:  stloc.0
@@ -167,7 +167,7 @@
       .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) 
       // Code size       13 (0xd)
       .maxstack  8
-      .line 4,4 : 6,7 
+      .line 4,4 : 6,7 ''
       IL_0000:  nop
       IL_0001:  ldarg.0
       IL_0002:  call       class [mscorlib]System.Collections.IEqualityComparer [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives::get_GenericEqualityComparer()
@@ -216,12 +216,12 @@
     {
       // Code size       9 (0x9)
       .maxstack  8
-      .line 4,4 : 8,9 
+      .line 4,4 : 8,9 ''
       IL_0000:  nop
       IL_0001:  ldarg.0
       IL_0002:  ldarg.1
       IL_0003:  stfld      valuetype [mscorlib]System.DateTime StaticInit_Struct01/C::s
-      .line 4,4 : 6,7 
+      .line 4,4 : 6,7 ''
       IL_0008:  ret
     } // end of method C::.ctor
 
@@ -230,7 +230,7 @@
       .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) 
       // Code size       42 (0x2a)
       .maxstack  8
-      .line 7,7 : 23,37 
+      .line 7,7 : 23,37 ''
       IL_0000:  nop
       IL_0001:  volatile.
       IL_0003:  ldsfld     int32 StaticInit_Struct01/C::init@4
@@ -241,15 +241,15 @@
 
       IL_000d:  br.s       IL_0018
 
-      .line 100001,100001 : 0,0 
+      .line 100001,100001 : 0,0 ''
       IL_000f:  call       void [FSharp.Core]Microsoft.FSharp.Core.LanguagePrimitives/IntrinsicFunctions::FailStaticInit()
       IL_0014:  nop
-      .line 100001,100001 : 0,0 
+      .line 100001,100001 : 0,0 ''
       IL_0015:  nop
       IL_0016:  br.s       IL_0019
 
-      .line 100001,100001 : 0,0 
-      .line 100001,100001 : 0,0 
+      .line 100001,100001 : 0,0 ''
+      .line 100001,100001 : 0,0 ''
       IL_0018:  nop
       IL_0019:  ldsfld     int32 StaticInit_Struct01/C::x
       IL_001e:  ldstr      "2"
@@ -265,7 +265,7 @@
       // Code size       24 (0x18)
       .maxstack  4
       .locals init ([0] valuetype StaticInit_Struct01/C& V_0)
-      .line 4,4 : 6,7 
+      .line 4,4 : 6,7 ''
       IL_0000:  nop
       IL_0001:  ldarga.s   obj
       IL_0003:  stloc.0
@@ -310,7 +310,7 @@
     {
       // Code size       13 (0xd)
       .maxstack  8
-      .line 100001,100001 : 0,0 
+      .line 100001,100001 : 0,0 ''
       IL_0000:  ldc.i4.0
       IL_0001:  stsfld     int32 ''.$StaticInit_Struct01::init@
       IL_0006:  ldsfld     int32 ''.$StaticInit_Struct01::init@
@@ -332,17 +332,18 @@
   .method private specialname rtspecialname static 
           void  .cctor() cil managed
   {
-    // Code size       23 (0x17)
+    // Code size       25 (0x19)
     .maxstack  8
-    .line 6,6 : 12,30 
+    .line 6,6 : 12,30 ''
     IL_0000:  nop
     IL_0001:  ldstr      "1"
     IL_0006:  callvirt   instance int32 [mscorlib]System.String::get_Length()
     IL_000b:  stsfld     int32 StaticInit_Struct01/C::x
     IL_0010:  ldc.i4.1
-    IL_0011:  stsfld     int32 StaticInit_Struct01/C::init@4
-    .line 4,4 : 6,7 
-    IL_0016:  ret
+    IL_0011:  volatile.
+    IL_0013:  stsfld     int32 StaticInit_Struct01/C::init@4
+    .line 4,4 : 6,7 ''
+    IL_0018:  ret
   } // end of method $StaticInit_Struct01::.cctor
 
 } // end of class ''.$StaticInit_Struct01
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/env.lst
index b6b2a95e109..47afdbb99d9 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/StaticInit/env.lst
@@ -1,7 +1,7 @@
-			SOURCE=LetBinding01.fs             ISCFLAGS="   -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd LetBinding01.exe"			# LetBinding01.fs
+			SOURCE=LetBinding01.fs             SCFLAGS="   -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd LetBinding01.exe"			# LetBinding01.fs
 
-	SOURCE=StaticInit_Struct01.fs      ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd StaticInit_Struct01.dll NetFx40"	# StaticInit_Struct01.fs - NetFx40
+	SOURCE=StaticInit_Struct01.fs      SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd StaticInit_Struct01.dll NetFx40"	# StaticInit_Struct01.fs - NetFx40
 
-	SOURCE=StaticInit_Class01.fs       ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd StaticInit_Class01.dll NetFx40"	# StaticInit_Class01.fs - NetFx40
+	SOURCE=StaticInit_Class01.fs       SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd StaticInit_Class01.dll NetFx40"	# StaticInit_Class01.fs - NetFx40
 
-	SOURCE=StaticInit_Module01.fs      ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd StaticInit_Module01.dll NetFx40"	# StaticInit_Module01.fs - NetFx40
+	SOURCE=StaticInit_Module01.fs      SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd StaticInit_Module01.dll NetFx40"	# StaticInit_Module01.fs - NetFx40
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/env.lst
index 059bce6b5fb..29e5289ec6e 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/env.lst
@@ -1,14 +1,14 @@
 
-	SOURCE=SteppingMatch01.fs                ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch01.dll"	# SteppingMatch01.fs
-	SOURCE=SteppingMatch02.fs                ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch02.dll"	# SteppingMatch02.fs
-	SOURCE=SteppingMatch03.fs                ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch03.dll"	# SteppingMatch03.fs
-	SOURCE=SteppingMatch04.fs                ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch04.dll"	# SteppingMatch04.fs
-Expensive	SOURCE=SteppingMatch05.fs                ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch05.dll"	# SteppingMatch05.fs
+	SOURCE=SteppingMatch01.fs                SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch01.dll"	# SteppingMatch01.fs
+	SOURCE=SteppingMatch02.fs                SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch02.dll"	# SteppingMatch02.fs
+	SOURCE=SteppingMatch03.fs                SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch03.dll"	# SteppingMatch03.fs
+	SOURCE=SteppingMatch04.fs                SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch04.dll"	# SteppingMatch04.fs
+Expensive	SOURCE=SteppingMatch05.fs                SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch05.dll"	# SteppingMatch05.fs
 
-	SOURCE=SteppingMatch06.fs                ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch06.dll NetFx40"	# SteppingMatch06.fs - NetFx40
+	SOURCE=SteppingMatch06.fs                SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch06.dll NetFx40"	# SteppingMatch06.fs - NetFx40
 
-	SOURCE=SteppingMatch07.fs                ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch07.dll NetFx40"	# SteppingMatch07.fs - NetFx40
+	SOURCE=SteppingMatch07.fs                SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch07.dll NetFx40"	# SteppingMatch07.fs - NetFx40
 
-	SOURCE=SteppingMatch08.fs                ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch08.dll"	# SteppingMatch08.fs
+	SOURCE=SteppingMatch08.fs                SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch08.dll"	# SteppingMatch08.fs
 
-	SOURCE=SteppingMatch09.fs                ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch09.dll"	# SteppingMatch09.fs
+	SOURCE=SteppingMatch09.fs                SCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd SteppingMatch09.dll"	# SteppingMatch09.fs
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/steppingmatch06.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/steppingmatch06.il.netfx4.bsl
index 657062fc59b..cde17845fa8 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/steppingmatch06.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/steppingmatch06.il.netfx4.bsl
@@ -51,7 +51,7 @@
        extends [mscorlib]System.Object
 {
   .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-  .class auto autochar serializable nested public beforefieldinit Discr
+  .class auto autochar serializable sealed nested public beforefieldinit Discr
          extends [mscorlib]System.Object
          implements class [mscorlib]System.IEquatable`1,
                     [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/steppingmatch07.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/steppingmatch07.il.netfx4.bsl
index 19689217fcd..2086ae565ba 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/steppingmatch07.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/SteppingMatch/steppingmatch07.il.netfx4.bsl
@@ -51,7 +51,7 @@
        extends [mscorlib]System.Object
 {
   .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-  .class auto autochar serializable nested public beforefieldinit Discr
+  .class auto autochar serializable sealed nested public beforefieldinit Discr
          extends [mscorlib]System.Object
          implements class [mscorlib]System.IEquatable`1,
                     [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/env.lst
index 5289abb1037..5f128dfd718 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TailCalls/env.lst
@@ -1,5 +1,5 @@
-	SOURCE=TailCall01.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- --tailcalls+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TailCall01.exe NetFx40"		# TailCall01.fs - NetFx40
-	SOURCE=TailCall02.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- --tailcalls+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TailCall02.exe NetFx40"		# TailCall02.fs - NetFx40
-	SOURCE=TailCall03.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- --tailcalls+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TailCall03.exe NetFx40"		# TailCall03.fs - NetFx40
-	SOURCE=TailCall04.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- --tailcalls+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TailCall04.exe NetFx40"		# TailCall04.fs - NetFx40
-	SOURCE=TailCall05.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- --tailcalls+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TailCall05.exe NetFx40"		# TailCall05.fs - NetFx40
+	SOURCE=TailCall01.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- --tailcalls+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TailCall01.exe NetFx40"		# TailCall01.fs - NetFx40
+	SOURCE=TailCall02.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- --tailcalls+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TailCall02.exe NetFx40"		# TailCall02.fs - NetFx40
+	SOURCE=TailCall03.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- --tailcalls+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TailCall03.exe NetFx40"		# TailCall03.fs - NetFx40
+	SOURCE=TailCall04.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- --tailcalls+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TailCall04.exe NetFx40"		# TailCall04.fs - NetFx40
+	SOURCE=TailCall05.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize- --tailcalls+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TailCall05.exe NetFx40"		# TailCall05.fs - NetFx40
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction16.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction16.il.netfx4.bsl
index a755c03ec38..4891b7a3ac5 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction16.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction16.il.netfx4.bsl
@@ -51,7 +51,7 @@
        extends [mscorlib]System.Object
 {
   .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-  .class auto autochar serializable nested public beforefieldinit U
+  .class auto autochar serializable sealed nested public beforefieldinit U
          extends [mscorlib]System.Object
          implements class [mscorlib]System.IEquatable`1,
                     [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.netfx4.bsl
index 1d6a7f9a024..d387f38504c 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/TestFunction21.il.netfx4.bsl
@@ -51,7 +51,7 @@
        extends [mscorlib]System.Object
 {
   .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-  .class auto autochar serializable nested public beforefieldinit U
+  .class auto autochar serializable sealed nested public beforefieldinit U
          extends [mscorlib]System.Object
          implements class [mscorlib]System.IEquatable`1,
                     [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/env.lst
index 65555c038ea..8ffdad5d7fa 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TestFunctions/env.lst
@@ -1,45 +1,45 @@
 
-	SOURCE=TestFunction10.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction10.exe NetFx40"	# TestFunction10.fs - NetFx40
-	SOURCE=TestFunction13.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction13.exe NetFx40"	# TestFunction13.fs - NetFx40
-	SOURCE=TestFunction16.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction16.exe NetFx40"	# TestFunction16.fs - NetFx40
-	SOURCE=TestFunction17.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction17.exe NetFx40"	# TestFunction17.fs - NetFx40
-	SOURCE=TestFunction19.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction19.exe NetFx40"	# TestFunction19.fs - NetFx40
-	SOURCE=TestFunction20.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction20.exe NetFx40"	# TestFunction20.fs - NetFx40
-	SOURCE=TestFunction21.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction21.exe NetFx40"	# TestFunction21.fs - NetFx40
-	SOURCE=TestFunction23.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction23.exe NetFx40"	# TestFunction23.fs - NetFx40
-
-	SOURCE=TestFunction1.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction1.exe"	# TestFunction1.fs
-	SOURCE=TestFunction2.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction2.exe"	# TestFunction2.fs
-
-	SOURCE=TestFunction3.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction3.exe NetFx40"	# TestFunction3.fs - NetFx40
-	SOURCE=TestFunction3b.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction3b.exe NetFx40"	# TestFunction3b.fs - NetFx40
-	SOURCE=TestFunction3c.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction3c.exe NetFx40"	# TestFunction3c.fs - NetFx40
-
-	SOURCE=TestFunction4.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction4.exe"	# TestFunction4.fs
-	SOURCE=TestFunction5.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction5.exe"	# TestFunction5.fs
-	SOURCE=TestFunction6.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction6.exe"	# TestFunction6.fs
-	SOURCE=TestFunction7.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction7.exe"	# TestFunction7.fs
-	SOURCE=TestFunction8.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction8.exe"	# TestFunction8.fs
-	SOURCE=TestFunction9.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction9.exe"	# TestFunction9.fs
-	SOURCE=TestFunction9b.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction9b.exe"	# TestFunction9b.fs
-	SOURCE=TestFunction9b1.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction9b1.exe"	# TestFunction9b1.fs
-	SOURCE=TestFunction9b2.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction9b2.exe"	# TestFunction9b2.fs
-	SOURCE=TestFunction9b3.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction9b3.exe"	# TestFunction9b3.fs
-	SOURCE=TestFunction9b4.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction9b4.exe"	# TestFunction9b4.fs
-	SOURCE=TestFunction11.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction11.exe"	# TestFunction11.fs
-	SOURCE=TestFunction12.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction12.exe"	# TestFunction12.fs
-
-	SOURCE=TestFunction14.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction14.exe NetFx40"	# TestFunction14.fs - NetFx40
-
-	SOURCE=TestFunction15.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction15.exe"	# TestFunction15.fs
-	SOURCE=TestFunction18.fs  ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction18.exe"	# TestFunction18.fs
-
-	SOURCE=Testfunction22.fs    ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22.exe"	# TestFunction22.fs
-	SOURCE=Testfunction22b.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22b.exe"	# TestFunction22b.fs
-	SOURCE=Testfunction22c.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22c.exe"	# TestFunction22c.fs
-	SOURCE=Testfunction22d.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22d.exe"	# TestFunction22d.fs
-	SOURCE=Testfunction22e.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22e.exe"	# TestFunction22e.fs
-	SOURCE=Testfunction22f.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22f.exe"	# TestFunction22f.fs
-	SOURCE=Testfunction22g.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22g.exe"	# TestFunction22g.fs
-
-	SOURCE=Testfunction22h.fs   ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22h.exe NetFx40"	# TestFunction22h.fs - NetFx40
+	SOURCE=TestFunction10.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction10.exe NetFx40"	# TestFunction10.fs - NetFx40
+	SOURCE=TestFunction13.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction13.exe NetFx40"	# TestFunction13.fs - NetFx40
+	SOURCE=TestFunction16.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction16.exe NetFx40"	# TestFunction16.fs - NetFx40
+	SOURCE=TestFunction17.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction17.exe NetFx40"	# TestFunction17.fs - NetFx40
+	SOURCE=TestFunction19.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction19.exe NetFx40"	# TestFunction19.fs - NetFx40
+	SOURCE=TestFunction20.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction20.exe NetFx40"	# TestFunction20.fs - NetFx40
+	SOURCE=TestFunction21.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction21.exe NetFx40"	# TestFunction21.fs - NetFx40
+	SOURCE=TestFunction23.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction23.exe NetFx40"	# TestFunction23.fs - NetFx40
+
+	SOURCE=TestFunction1.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction1.exe"	# TestFunction1.fs
+	SOURCE=TestFunction2.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction2.exe"	# TestFunction2.fs
+
+	SOURCE=TestFunction3.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction3.exe NetFx40"	# TestFunction3.fs - NetFx40
+	SOURCE=TestFunction3b.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction3b.exe NetFx40"	# TestFunction3b.fs - NetFx40
+	SOURCE=TestFunction3c.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction3c.exe NetFx40"	# TestFunction3c.fs - NetFx40
+
+	SOURCE=TestFunction4.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction4.exe"	# TestFunction4.fs
+	SOURCE=TestFunction5.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction5.exe"	# TestFunction5.fs
+	SOURCE=TestFunction6.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction6.exe"	# TestFunction6.fs
+	SOURCE=TestFunction7.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction7.exe"	# TestFunction7.fs
+	SOURCE=TestFunction8.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction8.exe"	# TestFunction8.fs
+	SOURCE=TestFunction9.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction9.exe"	# TestFunction9.fs
+	SOURCE=TestFunction9b.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction9b.exe"	# TestFunction9b.fs
+	SOURCE=TestFunction9b1.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction9b1.exe"	# TestFunction9b1.fs
+	SOURCE=TestFunction9b2.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction9b2.exe"	# TestFunction9b2.fs
+	SOURCE=TestFunction9b3.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction9b3.exe"	# TestFunction9b3.fs
+	SOURCE=TestFunction9b4.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction9b4.exe"	# TestFunction9b4.fs
+	SOURCE=TestFunction11.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction11.exe"	# TestFunction11.fs
+	SOURCE=TestFunction12.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction12.exe"	# TestFunction12.fs
+
+	SOURCE=TestFunction14.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction14.exe NetFx40"	# TestFunction14.fs - NetFx40
+
+	SOURCE=TestFunction15.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction15.exe"	# TestFunction15.fs
+	SOURCE=TestFunction18.fs  SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction18.exe"	# TestFunction18.fs
+
+	SOURCE=Testfunction22.fs    SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22.exe"	# TestFunction22.fs
+	SOURCE=Testfunction22b.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22b.exe"	# TestFunction22b.fs
+	SOURCE=Testfunction22c.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22c.exe"	# TestFunction22c.fs
+	SOURCE=Testfunction22d.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22d.exe"	# TestFunction22d.fs
+	SOURCE=Testfunction22e.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22e.exe"	# TestFunction22e.fs
+	SOURCE=Testfunction22f.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22f.exe"	# TestFunction22f.fs
+	SOURCE=Testfunction22g.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22g.exe"	# TestFunction22g.fs
+
+	SOURCE=Testfunction22h.fs   SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TestFunction22h.exe NetFx40"	# TestFunction22h.fs - NetFx40
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.fs b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.fs
new file mode 100644
index 00000000000..741a8422343
--- /dev/null
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.fs
@@ -0,0 +1,23 @@
+// #NoMono #NoMT #CodeGen #EmittedIL #Tuples
+
+[]
+let main argv =
+    let p v = printfn "%A" v
+
+    let dic = System.Collections.Generic.Dictionary()
+    // Tests that the Tuple is eliminated as intended for instance methods
+    let (b : bool, i : int) = dic.TryGetValue 1
+    p b
+    p i
+
+    // Tests that the Tuple is eliminated as intended for static methods
+    let (b : bool, l : int64) as t = System.Int64.TryParse "123"
+    p b
+    p l
+
+    let tt : bool*int64 = t 
+
+    // Tests that a Tuple is created as needed when calling p
+    p tt
+
+    0
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.il.netfx4.bsl b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.il.netfx4.bsl
new file mode 100644
index 00000000000..a7a2763183f
--- /dev/null
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/TupleElimination.il.netfx4.bsl
@@ -0,0 +1,155 @@
+
+//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.33440
+//  Copyright (c) Microsoft Corporation.  All rights reserved.
+
+
+
+// Metadata version: v4.0.30319
+.assembly extern mscorlib
+{
+  .publickeytoken = (B7 7A 5C 56 19 34 E0 89 )                         // .z\V.4..
+  .ver 4:0:0:0
+}
+.assembly extern FSharp.Core
+{
+  .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:
+  .ver 4:4:0:9055
+}
+.assembly TupleElimination
+{
+  .custom instance void [FSharp.Core]Microsoft.FSharp.Core.FSharpInterfaceDataVersionAttribute::.ctor(int32,
+                                                                                                      int32,
+                                                                                                      int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) 
+
+  // --- The following custom attribute is added automatically, do not uncomment -------
+  //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) 
+
+  .hash algorithm 0x00008004
+  .ver 0:0:0:0
+}
+.mresource public FSharpSignatureData.TupleElimination
+{
+  // Offset: 0x00000000 Length: 0x0000022E
+}
+.mresource public FSharpOptimizationData.TupleElimination
+{
+  // Offset: 0x00000238 Length: 0x0000007B
+}
+.module TupleElimination.exe
+// MVID: {551307BF-DFDD-92DF-A745-0383BF071355}
+.imagebase 0x00400000
+.file alignment 0x00000200
+.stackreserve 0x00100000
+.subsystem 0x0003       // WINDOWS_CUI
+.corflags 0x00000001    //  ILONLY
+// Image base: 0x00460000
+
+
+// =============== CLASS MEMBERS DECLARATION ===================
+
+.class public abstract auto ansi sealed TupleElimination
+       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 assembly static void  p@5(!!a v) cil managed
+  {
+    // Code size       31 (0x1f)
+    .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 ''
+    IL_0000:  nop
+    IL_0001:  ldstr      "%A"
+    IL_0006:  newobj     instance void class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`5,class [mscorlib]System.IO.TextWriter,class [FSharp.Core]Microsoft.FSharp.Core.Unit,class [FSharp.Core]Microsoft.FSharp.Core.Unit,!!a>::.ctor(string)
+    IL_000b:  stloc.0
+    IL_000c:  call       class [mscorlib]System.IO.TextWriter [mscorlib]System.Console::get_Out()
+    IL_0011:  ldloc.0
+    IL_0012:  call       !!0 [FSharp.Core]Microsoft.FSharp.Core.PrintfModule::PrintFormatLineToTextWriter>(class [mscorlib]System.IO.TextWriter,
+                                                                                                                                                                                                                    class [FSharp.Core]Microsoft.FSharp.Core.PrintfFormat`4)
+    IL_0017:  ldarg.0
+    IL_0018:  callvirt   instance !1 class [FSharp.Core]Microsoft.FSharp.Core.FSharpFunc`2::Invoke(!0)
+    IL_001d:  pop
+    IL_001e:  ret
+  } // end of method TupleElimination::p@5
+
+  .method public static int32  main(string[] argv) cil managed
+  {
+    .entrypoint
+    .custom instance void [FSharp.Core]Microsoft.FSharp.Core.EntryPointAttribute::.ctor() = ( 01 00 00 00 ) 
+    // Code size       101 (0x65)
+    .maxstack  5
+    .locals init ([0] class [mscorlib]System.Collections.Generic.Dictionary`2 dic,
+             [1] int32 V_1,
+             [2] bool V_2,
+             [3] int32 V_3,
+             [4] int64 V_4,
+             [5] bool V_5,
+             [6] int64 V_6,
+             [7] class [mscorlib]System.Tuple`2 t)
+    .line 7,7 : 5,64 ''
+    IL_0000:  nop
+    IL_0001:  newobj     instance void class [mscorlib]System.Collections.Generic.Dictionary`2::.ctor()
+    IL_0006:  stloc.0
+    .line 9,9 : 31,48 ''
+    IL_0007:  ldc.i4.0
+    IL_0008:  stloc.1
+    IL_0009:  ldloc.0
+    IL_000a:  ldc.i4.1
+    IL_000b:  ldloca.s   V_1
+    IL_000d:  callvirt   instance bool class [mscorlib]System.Collections.Generic.Dictionary`2::TryGetValue(!0,
+                                                                                                                         !1&)
+    IL_0012:  stloc.2
+    IL_0013:  ldloc.1
+    IL_0014:  stloc.3
+    .line 10,10 : 5,6 ''
+    IL_0015:  ldloc.2
+    IL_0016:  call       void TupleElimination::p@5(!!0)
+    IL_001b:  nop
+    .line 11,11 : 5,6 ''
+    IL_001c:  ldloc.3
+    IL_001d:  call       void TupleElimination::p@5(!!0)
+    IL_0022:  nop
+    .line 14,14 : 38,65 ''
+    IL_0023:  ldc.i8     0x0
+    IL_002c:  stloc.s    V_4
+    IL_002e:  ldstr      "123"
+    IL_0033:  ldloca.s   V_4
+    IL_0035:  call       bool [mscorlib]System.Int64::TryParse(string,
+                                                               int64&)
+    IL_003a:  stloc.s    V_5
+    IL_003c:  ldloc.s    V_4
+    IL_003e:  stloc.s    V_6
+    .line 14,14 : 5,65 ''
+    IL_0040:  ldloc.s    V_5
+    IL_0042:  ldloc.s    V_6
+    IL_0044:  newobj     instance void class [mscorlib]System.Tuple`2::.ctor(!0,
+                                                                                         !1)
+    IL_0049:  stloc.s    t
+    .line 15,15 : 5,6 ''
+    IL_004b:  ldloc.s    V_5
+    IL_004d:  call       void TupleElimination::p@5(!!0)
+    IL_0052:  nop
+    .line 16,16 : 5,6 ''
+    IL_0053:  ldloc.s    V_6
+    IL_0055:  call       void TupleElimination::p@5(!!0)
+    IL_005a:  nop
+    .line 21,21 : 5,6 ''
+    IL_005b:  ldloc.s    t
+    IL_005d:  call       void TupleElimination::p@5>(!!0)
+    IL_0062:  nop
+    .line 23,23 : 5,6 ''
+    IL_0063:  ldc.i4.0
+    IL_0064:  ret
+  } // end of method TupleElimination::main
+
+} // end of class TupleElimination
+
+.class private abstract auto ansi sealed ''.$TupleElimination
+       extends [mscorlib]System.Object
+{
+} // end of class ''.$TupleElimination
+
+
+// =============================================================
+
+// *********** DISASSEMBLY COMPLETE ***********************
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/env.lst
index 22790b7d9ca..4281aa70936 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/Tuples/env.lst
@@ -1,11 +1,13 @@
-			SOURCE=Tuple01.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple01.exe"			# Tuple01.fs
-	SOURCE=Tuple02.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple02.exe NetFx40"		# Tuple02.fs - NetFx40
-	SOURCE=Tuple03.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple03.exe NetFx40"		# Tuple03.fs - NetFx40
-	SOURCE=Tuple04.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple04.exe NetFx40"		# Tuple04.fs - NetFx40
-	SOURCE=Tuple05.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple05.exe NetFx40"		# Tuple05.fs - NetFx40
-	SOURCE=Tuple06.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple06.exe NetFx40"		# Tuple06.fs - NetFx40
-	SOURCE=Tuple07.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple07.exe NetFx40"		# Tuple07.fs - NetFx40
+			SOURCE=Tuple01.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple01.exe"			# Tuple01.fs
+	SOURCE=Tuple02.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple02.exe NetFx40"		# Tuple02.fs - NetFx40
+	SOURCE=Tuple03.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple03.exe NetFx40"		# Tuple03.fs - NetFx40
+	SOURCE=Tuple04.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple04.exe NetFx40"		# Tuple04.fs - NetFx40
+	SOURCE=Tuple05.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple05.exe NetFx40"		# Tuple05.fs - NetFx40
+	SOURCE=Tuple06.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple06.exe NetFx40"		# Tuple06.fs - NetFx40
+	SOURCE=Tuple07.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple07.exe NetFx40"		# Tuple07.fs - NetFx40
 
-	SOURCE=Tuple08.fs      ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple08.exe NetFx40"		# Tuple08.fs - NetFx40
+	SOURCE=Tuple08.fs      SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Tuple08.exe NetFx40"		# Tuple08.fs - NetFx40
 
-	SOURCE=TupleMonster.fs ISCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TupleMonster.exe NetFx40"		# TupleMonster.fs - NetFx40
+	SOURCE=TupleMonster.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TupleMonster.exe NetFx40"		# TupleMonster.fs - NetFx40
+
+	SOURCE=TupleElimination.fs SCFLAGS="-g --test:EmitFeeFeeAs100001 --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd TupleElimination.exe NetFx40"		# TupleElimination.fs - NetFx40
diff --git a/tests/fsharpqa/Source/CodeGen/EmittedIL/TypeProviders/env.lst b/tests/fsharpqa/Source/CodeGen/EmittedIL/TypeProviders/env.lst
index c8655168a77..71cd4d55470 100644
--- a/tests/fsharpqa/Source/CodeGen/EmittedIL/TypeProviders/env.lst
+++ b/tests/fsharpqa/Source/CodeGen/EmittedIL/TypeProviders/env.lst
@@ -1 +1 @@
-Expensive	SOURCE=CallIntrinsics.fsx PRECMD="\$FSC_PIPE -a --nowarn:1204,40,1203,26 provider.fsx" SCFLAGS="-r:provider.dll" ISCFLAGS="-a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CallIntrinsics.dll"		# CallIntrinsics.fsx
+Expensive,NoCrossVer	SOURCE=CallIntrinsics.fsx PRECMD="\$FSC_PIPE -a --nowarn:1204,40,1203,26 provider.fsx" SCFLAGS="-r:provider.dll -a -g --test:EmitFeeFeeAs100001 --optimize-" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd CallIntrinsics.dll"		# CallIntrinsics.fsx
diff --git a/tests/fsharpqa/Source/CodeGen/Structure/DoNotInlineX.fs b/tests/fsharpqa/Source/CodeGen/Structure/DoNotInlineX.fs
index 28acc804b41..2a10b0bf37b 100644
--- a/tests/fsharpqa/Source/CodeGen/Structure/DoNotInlineX.fs
+++ b/tests/fsharpqa/Source/CodeGen/Structure/DoNotInlineX.fs
@@ -12,7 +12,7 @@ let fsc =
     if not (String.IsNullOrEmpty(overridePath)) then 
         overridePath 
     else
-        let fsc45 = programFiles + @"\Microsoft SDKs\F#\3.1\Framework\v4.0\fsc.exe"
+        let fsc45 = programFiles + @"\Microsoft SDKs\F#\4.0\Framework\v4.0\fsc.exe"
         let fsc40 = programFiles + @"\Microsoft F#\v4.0\fsc.exe"
         let fsc20 = programFiles + @"\FSharp-2.0.0.0\bin\fsc.exe"
         
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/Removed/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/Removed/env.lst
index 09b724b5c02..65fc82ddddf 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/Removed/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/Removed/env.lst
@@ -1,83 +1,83 @@
-	SOURCE=nopowerpack02.fs ISCFLAGS=--no-power-pack		# fsc --no-power-pack
-	SOURCE=nopowerpack01.fs ISCFLAGS=--nopowerpack			# fsc --nopowerpack
-	SOURCE=nopowerpack02.fs IFSIFLAGS=--no-power-pack FSIMODE=PIPE	# fsi --no-power-pack
-	SOURCE=nopowerpack01.fs IFSIFLAGS=--nopowerpack   FSIMODE=PIPE	# fsi --nopowerpack
+	SOURCE=nopowerpack02.fs SCFLAGS=--no-power-pack		# fsc --no-power-pack
+	SOURCE=nopowerpack01.fs SCFLAGS=--nopowerpack			# fsc --nopowerpack
+	SOURCE=nopowerpack02.fs SCFLAGS=--no-power-pack FSIMODE=PIPE	# fsi --no-power-pack
+	SOURCE=nopowerpack01.fs SCFLAGS=--nopowerpack   FSIMODE=PIPE	# fsi --nopowerpack
 
-	SOURCE=namespace01.fs ISCFLAGS=--namespace			# fsc --namespace
-	SOURCE=namespace01.fs ISCFLAGS="--namespace Foo"		# fsc --namespace Foo
-	SOURCE=namespace01.fs IFSIFLAGS=--namespace       FSIMODE=PIPE	# fsi --namespace
-	SOURCE=namespace01.fs IFSIFLAGS="--namespace Foo" FSIMODE=PIPE	# fsi --namespace Foo
+	SOURCE=namespace01.fs SCFLAGS=--namespace			# fsc --namespace
+	SOURCE=namespace01.fs SCFLAGS="--namespace Foo"		# fsc --namespace Foo
+	SOURCE=namespace01.fs SCFLAGS=--namespace       FSIMODE=PIPE	# fsi --namespace
+	SOURCE=namespace01.fs SCFLAGS="--namespace Foo" FSIMODE=PIPE	# fsi --namespace Foo
 
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="-R"					# fsc -R
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="--open"				# fsc --open
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="--clr-mscorlib"			# fsc --clr-mscorlib
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="--quotation-data"			# fsc --quotation-data
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="--all-tailcalls"			# fsc --all-tailcalls
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="--no-tailcalls"			# fsc --no-tailcalls
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="--closures-as-virtuals"		# fsc --closures-as-virtuals
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="--multi-entrypoint-closures"	# fsc --multi-entrypoint-closures
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="--generate-debug-file"		# fsc --generate-debug-file
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="--sscli"					# fsc --sscli
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="--no-inner-polymorphism"			# fsc --no-inner-polymorphism
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="--permit-inner-polymorphism"		# fsc --permit-inner-polymorphism
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="--fast-sublanguage-only"			# fsc --fast-sublanguage-only
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="--generate-config-file"			# fsc --generate-config-file
+	SOURCE=unrecognized_argument01.fs SCFLAGS="-R"					# fsc -R
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--open"				# fsc --open
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--clr-mscorlib"			# fsc --clr-mscorlib
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--quotation-data"			# fsc --quotation-data
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--all-tailcalls"			# fsc --all-tailcalls
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--no-tailcalls"			# fsc --no-tailcalls
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--closures-as-virtuals"		# fsc --closures-as-virtuals
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--multi-entrypoint-closures"	# fsc --multi-entrypoint-closures
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--generate-debug-file"		# fsc --generate-debug-file
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--sscli"					# fsc --sscli
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--no-inner-polymorphism"			# fsc --no-inner-polymorphism
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--permit-inner-polymorphism"		# fsc --permit-inner-polymorphism
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--fast-sublanguage-only"			# fsc --fast-sublanguage-only
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--generate-config-file"			# fsc --generate-config-file
 
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--ml-keywords"               FSIMODE=PIPE	# fsi --ml-keywords
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="-R"                          FSIMODE=PIPE	# fsi -R
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--gnu-style-errors"          FSIMODE=PIPE	# fsi --gnu-style-errors
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--open"                      FSIMODE=PIPE	# fsi --open
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--clr-mscorlib"              FSIMODE=PIPE	# fsi --clr-mscorlib
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--quotation-data"            FSIMODE=PIPE	# fsi --quotation-data
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--all-tailcalls"             FSIMODE=PIPE	# fsi --all-tailcalls
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--no-tailcalls"              FSIMODE=PIPE	# fsi --no-tailcalls
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--closures-as-virtuals"      FSIMODE=PIPE	# fsi --closures-as-virtuals
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--multi-entrypoint-closures" FSIMODE=PIPE	# fsi --multi-entrypoint-closures
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--generate-debug-file"       FSIMODE=PIPE	# fsi --generate-debug-file
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--ml-keywords"               FSIMODE=PIPE	# fsi --ml-keywords
+	SOURCE=unrecognized_argument01.fs SCFLAGS="-R"                          FSIMODE=PIPE	# fsi -R
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--gnu-style-errors"          FSIMODE=PIPE	# fsi --gnu-style-errors
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--open"                      FSIMODE=PIPE	# fsi --open
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--clr-mscorlib"              FSIMODE=PIPE	# fsi --clr-mscorlib
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--quotation-data"            FSIMODE=PIPE	# fsi --quotation-data
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--all-tailcalls"             FSIMODE=PIPE	# fsi --all-tailcalls
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--no-tailcalls"              FSIMODE=PIPE	# fsi --no-tailcalls
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--closures-as-virtuals"      FSIMODE=PIPE	# fsi --closures-as-virtuals
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--multi-entrypoint-closures" FSIMODE=PIPE	# fsi --multi-entrypoint-closures
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--generate-debug-file"       FSIMODE=PIPE	# fsi --generate-debug-file
 
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--debug-file"                FSIMODE=PIPE	# fsi --debug-file
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--generate-config-file"      FSIMODE=PIPE	# fsi --generate-config-file
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--no-inner-polymorphism"     FSIMODE=PIPE	# fsi --no-inner-polymorphism
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--permit-inner-polymorphism" FSIMODE=PIPE	# fsi --permit-inner-polymorphism
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--generate-filter-blocks"    FSIMODE=PIPE	# fsi --generate-filter-blocks
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--max-errors"                FSIMODE=PIPE	# fsi --max-errors
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--no-string-interning"       FSIMODE=PIPE	# fsi --no-string-interning
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--sscli"                     FSIMODE=PIPE	# fsi --sscli
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--debug-file"                FSIMODE=PIPE	# fsi --debug-file
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--generate-config-file"      FSIMODE=PIPE	# fsi --generate-config-file
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--no-inner-polymorphism"     FSIMODE=PIPE	# fsi --no-inner-polymorphism
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--permit-inner-polymorphism" FSIMODE=PIPE	# fsi --permit-inner-polymorphism
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--generate-filter-blocks"    FSIMODE=PIPE	# fsi --generate-filter-blocks
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--max-errors"                FSIMODE=PIPE	# fsi --max-errors
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--no-string-interning"       FSIMODE=PIPE	# fsi --no-string-interning
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--sscli"                     FSIMODE=PIPE	# fsi --sscli
 
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--statistics"                FSIMODE=PIPE	# fsi --statistics
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="-Ooff"                       FSIMODE=PIPE	# fsi -Ooff
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--statistics"                FSIMODE=PIPE	# fsi --statistics
+	SOURCE=unrecognized_argument01.fs SCFLAGS="-Ooff"                       FSIMODE=PIPE	# fsi -Ooff
 
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--no-banner"                 FSIMODE=PIPE	# fsi --no-banner
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--nobanner"                  FSIMODE=PIPE	# fsi --nobanner
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="--no-banner"				# fsc --no-banner
-	SOURCE=unrecognized_argument01.fs ISCFLAGS="--nobanner"					# fsc --nobanner
-	SOURCE=unrecognized_argument01.fs IFSIFLAGS="--fast-sublanguage-only"     FSIMODE=PIPE	# fsi --fast-sublanguage-only
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--no-banner"                 FSIMODE=PIPE	# fsi --no-banner
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--nobanner"                  FSIMODE=PIPE	# fsi --nobanner
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--no-banner"				# fsc --no-banner
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--nobanner"					# fsc --nobanner
+	SOURCE=unrecognized_argument01.fs SCFLAGS="--fast-sublanguage-only"     FSIMODE=PIPE	# fsi --fast-sublanguage-only
 
 # Not removed - just deprecated
-	SOURCE=deprecated_Ooff.fs         ISCFLAGS="-Ooff"							# fsc -Ooff
-	SOURCE=deprecated_statistics01.fs ISCFLAGS="--statistics"						# fsc --statistics
-	SOURCE=deprecated_debug-file01.fs ISCFLAGS="-g --debug-file:foo.pdb"					# fsc --debug-file
+	SOURCE=deprecated_Ooff.fs         SCFLAGS="-Ooff"							# fsc -Ooff
+	SOURCE=deprecated_statistics01.fs SCFLAGS="--statistics"						# fsc --statistics
+	SOURCE=deprecated_debug-file01.fs SCFLAGS="-g --debug-file:foo.pdb"					# fsc --debug-file
 
-	SOURCE=deprecated_generate-filter-blocks01.fs ISCFLAGS="--generate-filter-blocks"			# fsc --generate-filter-blocks
+	SOURCE=deprecated_generate-filter-blocks01.fs SCFLAGS="--generate-filter-blocks"			# fsc --generate-filter-blocks
 
-	SOURCE=deprecated_max-errors01.fs ISCFLAGS="--max-errors:1"						# fsc --max-errors:1
-	SOURCE=deprecated_max-errors02.fs ISCFLAGS="--max-errors"						# fsc --max-errors
+	SOURCE=deprecated_max-errors01.fs SCFLAGS="--max-errors:1"						# fsc --max-errors:1
+	SOURCE=deprecated_max-errors02.fs SCFLAGS="--max-errors"						# fsc --max-errors
 
-	SOURCE=deprecated_no-string-interning01.fs ISCFLAGS="--no-string-interning"				# fsc --no-string-interning
+	SOURCE=deprecated_no-string-interning01.fs SCFLAGS="--no-string-interning"				# fsc --no-string-interning
 
-	SOURCE=deprecated_ml-keywords01.fs           ISCFLAGS="--ml-keywords"					# fsc --ml-keywords
-	SOURCE=deprecated_gnu-style-errors01.fs      ISCFLAGS="--gnu-style-errors"				# fsc --gnu-style-errors
+	SOURCE=deprecated_ml-keywords01.fs           SCFLAGS="--ml-keywords"					# fsc --ml-keywords
+	SOURCE=deprecated_gnu-style-errors01.fs      SCFLAGS="--gnu-style-errors"				# fsc --gnu-style-errors
 
 # Not really removed...
-#	SOURCE=unrecognized_argument01.fs ISCFLAGS="--cli-version"			# --cli-version 
-#	SOURCE=unrecognized_argument01.fs ISCFLAGS="-a"					# -a
-#	SOURCE=unrecognized_argument01.fs ISCFLAGS="-i"					# -i
-#	SOURCE=unrecognized_argument01.fs ISCFLAGS="--retargetable"			# --retargetable
-#	SOURCE=unrecognized_argument01.fs ISCFLAGS="--version-file"			# --version-file
-#	SOURCE=unrecognized_argument01.fs ISCFLAGS="--fast-sublanguage-only"		# --fast-sublanguage-only
-#	SOURCE=unrecognized_argument01.fs ISCFLAGS="--progress"				# --progress
-#	SOURCE=unrecognized_argument01.fs ISCFLAGS="--light"				# --light
-#	SOURCE=unrecognized_argument01.fs ISCFLAGS="--indentation-syntax"		# --indentation-syntax
-#	SOURCE=unrecognized_argument01.fs ISCFLAGS="--no-indentation-syntax"		# --no-indentation-syntax
-#	SOURCE=unrecognized_argument01.fs ISCFLAGS="--detuple"				# --detuple
-#	SOURCE=unrecognized_argument01.fs ISCFLAGS="--version"				# --version
+#	SOURCE=unrecognized_argument01.fs SCFLAGS="--cli-version"			# --cli-version 
+#	SOURCE=unrecognized_argument01.fs SCFLAGS="-a"					# -a
+#	SOURCE=unrecognized_argument01.fs SCFLAGS="-i"					# -i
+#	SOURCE=unrecognized_argument01.fs SCFLAGS="--retargetable"			# --retargetable
+#	SOURCE=unrecognized_argument01.fs SCFLAGS="--version-file"			# --version-file
+#	SOURCE=unrecognized_argument01.fs SCFLAGS="--fast-sublanguage-only"		# --fast-sublanguage-only
+#	SOURCE=unrecognized_argument01.fs SCFLAGS="--progress"				# --progress
+#	SOURCE=unrecognized_argument01.fs SCFLAGS="--light"				# --light
+#	SOURCE=unrecognized_argument01.fs SCFLAGS="--indentation-syntax"		# --indentation-syntax
+#	SOURCE=unrecognized_argument01.fs SCFLAGS="--no-indentation-syntax"		# --no-indentation-syntax
+#	SOURCE=unrecognized_argument01.fs SCFLAGS="--detuple"				# --detuple
+#	SOURCE=unrecognized_argument01.fs SCFLAGS="--version"				# --version
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/checked/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/checked/env.lst
index ca7706d094e..dd474e8c37e 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/checked/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/checked/env.lst
@@ -1,29 +1,29 @@
 # Functional:
-	SOURCE=unchecked01.fs ISCFLAGS=" "		# fsc-default
-	SOURCE=checked01.fs   ISCFLAGS="--checked"	# fsc-checked
-	SOURCE=checked01.fs   ISCFLAGS="--checked+"	# fsc-checked+
-	SOURCE=unchecked01.fs ISCFLAGS="--checked-"	# fsc-checked-
+	SOURCE=unchecked01.fs 		# fsc-default
+	SOURCE=checked01.fs   SCFLAGS="--checked"	# fsc-checked
+	SOURCE=checked01.fs   SCFLAGS="--checked+"	# fsc-checked+
+	SOURCE=unchecked01.fs SCFLAGS="--checked-"	# fsc-checked-
 
-	SOURCE=unchecked01.fs IFSIFLAGS=" "          FSIMODE=EXEC COMPILE_ONLY=1	# fsi-default
-	SOURCE=checked01.fs   IFSIFLAGS="--checked"  FSIMODE=EXEC COMPILE_ONLY=1	# fsi-checked
-	SOURCE=checked01.fs   IFSIFLAGS="--checked+" FSIMODE=EXEC COMPILE_ONLY=1	# fsi-checked+
-	SOURCE=unchecked01.fs IFSIFLAGS="--checked-" FSIMODE=EXEC COMPILE_ONLY=1	# fsi-checked-
+	SOURCE=unchecked01.fs           FSIMODE=EXEC COMPILE_ONLY=1	# fsi-default
+	SOURCE=checked01.fs   SCFLAGS="--checked"  FSIMODE=EXEC COMPILE_ONLY=1	# fsi-checked
+	SOURCE=checked01.fs   SCFLAGS="--checked+" FSIMODE=EXEC COMPILE_ONLY=1	# fsi-checked+
+	SOURCE=unchecked01.fs SCFLAGS="--checked-" FSIMODE=EXEC COMPILE_ONLY=1	# fsi-checked-
 
 # Last one wins
-	SOURCE=checked01.fs   ISCFLAGS="--checked  --checked+"	# fsc-checkedchecked+
-	SOURCE=checked01.fs   ISCFLAGS="--checked- --checked+"	# fsc-checked-checked+
-	SOURCE=unchecked01.fs ISCFLAGS="--checked+ --checked-"	# fsc-checked+checked-
+	SOURCE=checked01.fs   SCFLAGS="--checked  --checked+"	# fsc-checkedchecked+
+	SOURCE=checked01.fs   SCFLAGS="--checked- --checked+"	# fsc-checked-checked+
+	SOURCE=unchecked01.fs SCFLAGS="--checked+ --checked-"	# fsc-checked+checked-
 
-	SOURCE=checked01.fs   IFSIFLAGS="--checked  --checked+" FSIMODE=EXEC COMPILE_ONLY=1	# fsi-checkedchecked+
-	SOURCE=checked01.fs   IFSIFLAGS="--checked- --checked+" FSIMODE=EXEC COMPILE_ONLY=1	# fsi-checked-checked+
-	SOURCE=unchecked01.fs IFSIFLAGS="--checked+ --checked-" FSIMODE=EXEC COMPILE_ONLY=1	# fsi-checked+checked-
+	SOURCE=checked01.fs   SCFLAGS="--checked  --checked+" FSIMODE=EXEC COMPILE_ONLY=1	# fsi-checkedchecked+
+	SOURCE=checked01.fs   SCFLAGS="--checked- --checked+" FSIMODE=EXEC COMPILE_ONLY=1	# fsi-checked-checked+
+	SOURCE=unchecked01.fs SCFLAGS="--checked+ --checked-" FSIMODE=EXEC COMPILE_ONLY=1	# fsi-checked+checked-
 
 # Unrecognized argument
-	SOURCE=unrecogarg.fs  ISCFLAGS="--Checked"					# fsc--Checked
-	SOURCE=unrecogarg.fs  ISCFLAGS="--checked*"					# fsc--checked*
+	SOURCE=unrecogarg.fs  SCFLAGS="--Checked"					# fsc--Checked
+	SOURCE=unrecogarg.fs  SCFLAGS="--checked*"					# fsc--checked*
 
-	SOURCE=unrecogarg.fs  IFSIFLAGS="--Checked"  FSIMODE=EXEC COMPILE_ONLY=1		# fsi--Checked
-	SOURCE=unrecogarg.fs  IFSIFLAGS="--checked*" FSIMODE=EXEC COMPILE_ONLY=1		# fsi--checked*
+	SOURCE=unrecogarg.fs  SCFLAGS="--Checked"  FSIMODE=EXEC COMPILE_ONLY=1		# fsi--Checked
+	SOURCE=unrecogarg.fs  SCFLAGS="--checked*" FSIMODE=EXEC COMPILE_ONLY=1		# fsi--checked*
 
 
-	SOURCE=UncheckedDefaultOf01.fs			# UncheckedDefaultOf01
\ No newline at end of file
+	SOURCE=UncheckedDefaultOf01.fs			# UncheckedDefaultOf01
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/cliversion/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/cliversion/env.lst
index 57fa98b1d98..0255f13740e 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/cliversion/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/cliversion/env.lst
@@ -1,3 +1,3 @@
-	SOURCE=E_fsc_cliversion.fs ISCFLAGS=" " SCFLAGS="--cliversion:2.0" 				# fsc --cliversion:2.0
-	SOURCE=E_fsi_cliversion.fs ISCFLAGS=" " SCFLAGS="--cliversion:2.0" FSIMODE=EXEC COMPILE_ONLY=1	# fsi --cliversion:2.0
+	SOURCE=E_fsc_cliversion.fs  SCFLAGS="--cliversion:2.0" 				# fsc --cliversion:2.0
+	SOURCE=E_fsi_cliversion.fs  SCFLAGS="--cliversion:2.0" FSIMODE=EXEC COMPILE_ONLY=1	# fsi --cliversion:2.0
 
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/codepage/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/codepage/env.lst
index 249fa709452..1befab598a4 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/codepage/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/codepage/env.lst
@@ -3,33 +3,33 @@
 # Functional:
 # Same source file, parsed with different codepage options
 
-	SOURCE=FunctionalLibrary01.fs  COMPILE_ONLY=1 ISCFLAGS="-a --codepage:1250 -o:A1250.dll"	# FunctionalLibrary01.fs-A1250
-	SOURCE=FunctionalLibrary01.fs  COMPILE_ONLY=1 ISCFLAGS="-a --codepage:1251 -o:A1251.dll"	# FunctionalLibrary01.fs-A1251
+	SOURCE=FunctionalLibrary01.fs  COMPILE_ONLY=1 SCFLAGS="-a --codepage:1250 -o:A1250.dll"	# FunctionalLibrary01.fs-A1250
+	SOURCE=FunctionalLibrary01.fs  COMPILE_ONLY=1 SCFLAGS="-a --codepage:1251 -o:A1251.dll"	# FunctionalLibrary01.fs-A1251
 	SOURCE=Functional01.fs          SCFLAGS="-r:A1250.dll -r:A1251.dll"	# Functional01.fs
 
 # Boundary cases:
 # 0, 65535
 # Hex num
-	SOURCE=E_NoDataForEncoding65535.fs ISCFLAGS="--codepage:65535"		# E_NoDataForEncoding65535.fs
-	SOURCE=Zero.fs                     ISCFLAGS="--codepage:0x0"		# Zero.fs
+	SOURCE=E_NoDataForEncoding65535.fs SCFLAGS="--codepage:65535"		# E_NoDataForEncoding65535.fs
+	SOURCE=Zero.fs                     SCFLAGS="--codepage:0x0"		# Zero.fs
 
 # Negative cases:
 # String
 # -1, 65536
 # Not specified
-	SOURCE=E_OutOfRangeArgument01.fs  ISCFLAGS="--codepage:65536"		# E_OutOfRangeArgument01.fs
-	SOURCE=E_OutOfRangeArgument01.fs  ISCFLAGS=" " IFSIFLAGS="--codepage:65536" FSIMODE=EXEC		# E_OutOfRangeArgument01.fs-fsi
+	SOURCE=E_OutOfRangeArgument01.fs  SCFLAGS="--codepage:65536"		# E_OutOfRangeArgument01.fs
+	SOURCE=E_OutOfRangeArgument01.fs   SCFLAGS="--codepage:65536" FSIMODE=EXEC		# E_OutOfRangeArgument01.fs-fsi
 
-	SOURCE=E_NegativeArgument01.fs    ISCFLAGS="--codepage:-1"		# E_NegativeArgument01.fs
-	SOURCE=E_NegativeArgument01.fs    ISCFLAGS=" " IFSIFLAGS="--codepage:-1" FSIMODE=EXEC		# E_NegativeArgument01.fs-fsi
+	SOURCE=E_NegativeArgument01.fs    SCFLAGS="--codepage:-1"		# E_NegativeArgument01.fs
+	SOURCE=E_NegativeArgument01.fs     SCFLAGS="--codepage:-1" FSIMODE=EXEC		# E_NegativeArgument01.fs-fsi
 
-	SOURCE=E_NotAValidInteger01.fs    ISCFLAGS="--codepage:foo"		# E_NotAValidInteger01.fs
-	SOURCE=E_NotAValidInteger01.fs    ISCFLAGS=" " IFSIFLAGS="--codepage:foo" FSIMODE=EXEC		# E_NotAValidInteger01.fs-fsi
+	SOURCE=E_NotAValidInteger01.fs    SCFLAGS="--codepage:foo"		# E_NotAValidInteger01.fs
+	SOURCE=E_NotAValidInteger01.fs     SCFLAGS="--codepage:foo" FSIMODE=EXEC		# E_NotAValidInteger01.fs-fsi
 
-	SOURCE=E_RequiresParameter01.fs  ISCFLAGS=" " TAILFLAGS="--codepage" 	# E_RequiresParameter01.fs
-	SOURCE=E_RequiresParameter01.fs  ISCFLAGS=" " TAILFLAGS="--codepage" IFSIFLAGS=" " FSIMODE=EXEC 	# E_RequiresParameter01.fs-fsi
+	SOURCE=E_RequiresParameter01.fs   TAILFLAGS="--codepage" 	# E_RequiresParameter01.fs
+	SOURCE=E_RequiresParameter01.fs   TAILFLAGS="--codepage"  FSIMODE=EXEC 	# E_RequiresParameter01.fs-fsi
 
-	SOURCE=E_DefaultCodePage01.fsx     COMPILE_ONLY=1 ISCFLAGS=" " IFSIFLAGS=" " FSIMODE=EXEC	# E_DefaultCodePage01.fsx
-	SOURCE=E_DefaultCodePage02.fsx     COMPILE_ONLY=1 ISCFLAGS=" " IFSIFLAGS=" " 			# E_DefaultCodePage02.fsx
-	SOURCE=MatchingCodePage01.fsx      COMPILE_ONLY=1 ISCFLAGS=" " IFSIFLAGS="--codepage:1250" FSIMODE=EXEC	# MatchingCodePage01.fsx
+	SOURCE=E_DefaultCodePage01.fsx     COMPILE_ONLY=1   FSIMODE=EXEC	# E_DefaultCodePage01.fsx
+	SOURCE=E_DefaultCodePage02.fsx     COMPILE_ONLY=1   			# E_DefaultCodePage02.fsx
+	SOURCE=MatchingCodePage01.fsx      COMPILE_ONLY=1  SCFLAGS="--codepage:1250" FSIMODE=EXEC	# MatchingCodePage01.fsx
 
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/crossoptimize/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/crossoptimize/env.lst
index a5fabd74979..68f2e152665 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/crossoptimize/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/crossoptimize/env.lst
@@ -1,10 +1,10 @@
 # Sanity check - simply check that the option is valid
 
-	SOURCE=crossoptimize01.fs ISCFLAGS="--crossoptimize" SCFLAGS=" "
-	SOURCE=crossoptimize01.fs ISCFLAGS="--crossoptimize+" SCFLAGS=" "
-	SOURCE=crossoptimize01.fs ISCFLAGS="--crossoptimize-" SCFLAGS=" "
+	SOURCE=crossoptimize01.fs SCFLAGS="--crossoptimize" 
+	SOURCE=crossoptimize01.fs SCFLAGS="--crossoptimize+" 
+	SOURCE=crossoptimize01.fs SCFLAGS="--crossoptimize-" 
 
-	SOURCE=crossoptimize01.fs ISCFLAGS="--crossoptimize" SCFLAGS=" "  FSIMODE=EXEC COMPILE_ONLY=1
-	SOURCE=crossoptimize01.fs ISCFLAGS="--crossoptimize+" SCFLAGS=" " FSIMODE=EXEC COMPILE_ONLY=1
-	SOURCE=crossoptimize01.fs ISCFLAGS="--crossoptimize-" SCFLAGS=" " FSIMODE=EXEC COMPILE_ONLY=1
+	SOURCE=crossoptimize01.fs SCFLAGS="--crossoptimize"   FSIMODE=EXEC COMPILE_ONLY=1
+	SOURCE=crossoptimize01.fs SCFLAGS="--crossoptimize+"  FSIMODE=EXEC COMPILE_ONLY=1
+	SOURCE=crossoptimize01.fs SCFLAGS="--crossoptimize-"  FSIMODE=EXEC COMPILE_ONLY=1
 
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/debug/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/debug/env.lst
index 5efc3953157..567c1865a20 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/debug/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/debug/env.lst
@@ -1,2 +1,2 @@
-NOMONO	SOURCE=debug01.fs ISCFLAGS="--debug+"		# debug01.fs (--debug+)
-	SOURCE=debug02.fs ISCFLAGS="--debug-"		# debug02.fs (--debug-)
+NOMONO	SOURCE=debug01.fs SCFLAGS="--debug+"		# debug01.fs (--debug+)
+	SOURCE=debug02.fs SCFLAGS="--debug-"		# debug02.fs (--debug-)
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/env.lst
index e245f47753e..8170be6a336 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/dumpAllCommandLineOptions/env.lst
@@ -1,2 +1,2 @@
-ReqENU	SOURCE=dummy.fs  SCFLAGS=" " ISCFLAGS=--dumpAllCommandLineOptions COMPILE_ONLY=1		# dummy.fs
-ReqENU	SOURCE=dummy.fsx SCFLAGS=" " ISCFLAGS=--dumpAllCommandLineOptions COMPILE_ONLY=1 FSIMODE=PIPE	# dummy.fsx
+ReqENU	SOURCE=dummy.fs  SCFLAGS="--dumpAllCommandLineOptions" COMPILE_ONLY=1		# dummy.fs
+ReqENU	SOURCE=dummy.fsx SCFLAGS="--dumpAllCommandLineOptions" COMPILE_ONLY=1 FSIMODE=PIPE	# dummy.fsx
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/help/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/help/env.lst
index 50eeddfe972..cf24fc8d3a2 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/help/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/help/env.lst
@@ -1,6 +1,6 @@
 # ReqENU means that the test is non-localized
 
-ReqENU	SOURCE=dummy.fsx COMPILE_ONLY=1 SCFLAGS=" " PRECMD="\$FSC_PIPE >help40.txt -?     2>&1" POSTCMD="\$FSI_PIPE --nologo --quiet --exec comparer.fsx help40.txt help40.437.1033.bsl"	# NetFx40 -?
-ReqENU	SOURCE=dummy.fsx COMPILE_ONLY=1 SCFLAGS=" " PRECMD="\$FSC_PIPE >help40.txt --help 2>&1" POSTCMD="\$FSI_PIPE --nologo --quiet --exec comparer.fsx help40.txt help40.437.1033.bsl"	# NetFx40 --help 
-ReqENU	SOURCE=dummy.fsx COMPILE_ONLY=1 SCFLAGS=" " PRECMD="\$FSC_PIPE >help40.txt /? 2>&1"     POSTCMD="\$FSI_PIPE --nologo --quiet --exec comparer.fsx help40.txt help40.437.1033.bsl"	# NetFx40 /?
+ReqENU	SOURCE=dummy.fsx COMPILE_ONLY=1  PRECMD="\$FSC_PIPE >help40.txt -?     2>&1" POSTCMD="\$FSI_PIPE --nologo --quiet --exec comparer.fsx help40.txt help40.437.1033.bsl"	# NetFx40 -?
+ReqENU	SOURCE=dummy.fsx COMPILE_ONLY=1  PRECMD="\$FSC_PIPE >help40.txt --help 2>&1" POSTCMD="\$FSI_PIPE --nologo --quiet --exec comparer.fsx help40.txt help40.437.1033.bsl"	# NetFx40 --help 
+ReqENU	SOURCE=dummy.fsx COMPILE_ONLY=1  PRECMD="\$FSC_PIPE >help40.txt /? 2>&1"     POSTCMD="\$FSI_PIPE --nologo --quiet --exec comparer.fsx help40.txt help40.437.1033.bsl"	# NetFx40 /?
 
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/invalid/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/invalid/env.lst
index fd3560002c9..5c6621a4a82 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/invalid/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/invalid/env.lst
@@ -1,7 +1,7 @@
 # Invalid arguments
-	SOURCE=dummy.fs ISCFLAGS="=:" SCFLAGS=" "			# Regression FSharp1.0:4682 (1)
-	SOURCE=dummy.fs ISCFLAGS="--:" SCFLAGS=" "			# Regression FSharp1.0:4682 (2)
-	SOURCE=dummy.fs ISCFLAGS="@" SCFLAGS=" "			# Regression FSharp1.0:4682 (3)
-	SOURCE=dummy.fs ISCFLAGS="\\" SCFLAGS=" "			# Regression FSharp1.0:4682 (4)
+	SOURCE=dummy.fs SCFLAGS="=:" 			# Regression FSharp1.0:4682 (1)
+	SOURCE=dummy.fs SCFLAGS="--:" 			# Regression FSharp1.0:4682 (2)
+	SOURCE=dummy.fs SCFLAGS="@" 			# Regression FSharp1.0:4682 (3)
+	SOURCE=dummy.fs SCFLAGS="\\" 			# Regression FSharp1.0:4682 (4)
 	SOURCE="dummy2.fs""									# Regression FSharp1.0:895020 (5)
-	SOURCE=dummy2.fs "<.fs"								# Regression FSharp1.0:895020 (6)
\ No newline at end of file
+	SOURCE=dummy2.fs "<.fs"								# Regression FSharp1.0:895020 (6)
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/lib/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/lib/env.lst
index 0656efdeca1..e632db8741f 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/lib/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/lib/env.lst
@@ -6,48 +6,48 @@
 	SOURCE=Folder3\\Folder3a\\dll1.fs SCFLAGS="-a --out:Folder3\\Folder3a\\dll3.dll"	# setup3
 
 # Same thing
-	SOURCE=dummy.fs COMPILE_ONLY=1 ISCFLAGS="-I Folder1"    SCFLAGS=" "			# -I Folder1
-	SOURCE=dummy.fs COMPILE_ONLY=1 ISCFLAGS="-I Folder1"    SCFLAGS=" " FSCMODE=FEED 	# -I Folder1 (fsi)
+	SOURCE=dummy.fs COMPILE_ONLY=1 SCFLAGS="-I Folder1"    			# -I Folder1
+	SOURCE=dummy.fs COMPILE_ONLY=1 SCFLAGS="-I Folder1"     FSCMODE=FEED 	# -I Folder1 (fsi)
 
-	SOURCE=dummy.fs COMPILE_ONLY=1 ISCFLAGS="-I:Folder1"    SCFLAGS=" "			# -I:Folder1
-	SOURCE=dummy.fs COMPILE_ONLY=1 ISCFLAGS="-I:Folder1"    SCFLAGS=" " FSCMODE=FEED	# -I:Folder1 (fsi)
+	SOURCE=dummy.fs COMPILE_ONLY=1 SCFLAGS="-I:Folder1"    			# -I:Folder1
+	SOURCE=dummy.fs COMPILE_ONLY=1 SCFLAGS="-I:Folder1"     FSCMODE=FEED	# -I:Folder1 (fsi)
 
-	SOURCE=dummy.fs COMPILE_ONLY=1 ISCFLAGS="--lib:Folder1" SCFLAGS=" "			# --lib:Folder1
-	SOURCE=dummy.fs COMPILE_ONLY=1 ISCFLAGS="--lib:Folder1" SCFLAGS=" " FSCMODE=FEED	# --lib:Folder1 (fsi)
+	SOURCE=dummy.fs COMPILE_ONLY=1 SCFLAGS="--lib:Folder1" 			# --lib:Folder1
+	SOURCE=dummy.fs COMPILE_ONLY=1 SCFLAGS="--lib:Folder1"  FSCMODE=FEED	# --lib:Folder1 (fsi)
 
 # Invalid
-	SOURCE=error01.fs COMPILE_ONLY=1 ISCFLAGS="--I:Folder" SCFLAGS=" "	# --I:Folder
-	SOURCE=error02.fs COMPILE_ONLY=1 ISCFLAGS="--I Folder" SCFLAGS=" "	# --I Folder
-	SOURCE=error03.fs COMPILE_ONLY=1 ISCFLAGS="-lib:Folder1"  SCFLAGS=" "	# -lib:Folder1
-	SOURCE=error04.fs COMPILE_ONLY=1 ISCFLAGS="--lib Folder1" SCFLAGS=" "	# --lib Folder1
+	SOURCE=error01.fs COMPILE_ONLY=1 SCFLAGS="--I:Folder" 	# --I:Folder
+	SOURCE=error02.fs COMPILE_ONLY=1 SCFLAGS="--I Folder" 	# --I Folder
+	SOURCE=error03.fs COMPILE_ONLY=1 SCFLAGS="-lib:Folder1"  	# -lib:Folder1
+	SOURCE=error04.fs COMPILE_ONLY=1 SCFLAGS="--lib Folder1" 	# --lib Folder1
 
 # With full path and UNC
 #fsc -I:X:\Y\Z
 #fsc -I \\A\B\C
 
 # Comma sep values
-	SOURCE=dummy.fs COMPILE_ONLY=1 ISCFLAGS="--lib:Folder1,Folder2,Folder3\Folder3a" SCFLAGS=" "	# --lib:Folder1,Folder2,Folder3\Folder3a
+	SOURCE=dummy.fs COMPILE_ONLY=1 SCFLAGS="--lib:Folder1,Folder2,Folder3\Folder3a" 	# --lib:Folder1,Folder2,Folder3\Folder3a
 
 # Order matters?
-	SOURCE=order01.fs  ISCFLAGS="-r:dll1.dll --lib:Folder1,Folder2" SCFLAGS=" "	# --lib:Folder1,Folder2
-	SOURCE=order02.fs  ISCFLAGS="-r:dll1.dll --lib:Folder2,Folder1" SCFLAGS=" "	# --lib:Folder2,Folder1
+	SOURCE=order01.fs  SCFLAGS="-r:dll1.dll --lib:Folder1,Folder2" 	# --lib:Folder1,Folder2
+	SOURCE=order02.fs  SCFLAGS="-r:dll1.dll --lib:Folder2,Folder1" 	# --lib:Folder2,Folder1
 
 # Specified multiple times: are the folders added? or the last one wins?
-	SOURCE=multiple.fs ISCFLAGS="-r:dll1.dll -r:dll3.dll --lib:Folder1 --lib:Folder3\\Folder3a" SCFLAGS=" "	# --lib:Folder1 --lib:Folder3\Folder3a
+	SOURCE=multiple.fs SCFLAGS="-r:dll1.dll -r:dll3.dll --lib:Folder1 --lib:Folder3\\Folder3a" 	# --lib:Folder1 --lib:Folder3\Folder3a
 
 # Option is case sentitive
-	SOURCE=error05.fs ISCFLAGS="--LIB:Folder1" SCFLAGS=" "	# --LIB:Folder1
-	SOURCE=error06.fs ISCFLAGS="-i:Folder1"    SCFLAGS=" "	# -i:Folder1
+	SOURCE=error05.fs SCFLAGS="--LIB:Folder1" 	# --LIB:Folder1
+	SOURCE=error06.fs SCFLAGS="-i:Folder1"    	# -i:Folder1
 
 # Folder does not exist. What happens? => warning
-	SOURCE=W_notfound.fs   ISCFLAGS="--lib:FolderThatDoesNotExist" SCFLAGS=" "	# --lib:FolderThatDoesNotExist
+	SOURCE=W_notfound.fs   SCFLAGS="--lib:FolderThatDoesNotExist" 	# --lib:FolderThatDoesNotExist
 
 # Mispelled options
-	SOURCE=error07.fs      ISCFLAGS="--libb:Folder1" SCFLAGS=" "			# --libb:Folder1
+	SOURCE=error07.fs      SCFLAGS="--libb:Folder1" 			# --libb:Folder1
 
 # Missing argument
-	SOURCE=error08.fs      ISCFLAGS=" "       SCFLAGS=" " TAILFLAGS=--lib:		# --lib: (tail)
-	SOURCE=error09.fs      ISCFLAGS="--lib: " SCFLAGS=" " 				# --lib:
-	SOURCE=error10.fs      ISCFLAGS=" "       SCFLAGS=" " TAILFLAGS=--lib		# --lib (tail)
+	SOURCE=error08.fs              TAILFLAGS=--lib:		# --lib: (tail)
+	SOURCE=error09.fs      SCFLAGS="--lib: "  				# --lib:
+	SOURCE=error10.fs              TAILFLAGS=--lib		# --lib (tail)
 
 # In FSI...
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/noframework/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/noframework/env.lst
index 246c26e7d42..10a5d4db368 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/noframework/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/noframework/env.lst
@@ -1,7 +1,7 @@
 # Functional: the option does what it is meant to do
-	SOURCE=noframework01.fs                 ISCFLAGS=" " SCFLAGS=" "				# noframework01.fs
-	SOURCE=noframework01.fsx COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS=" " FSIMODE=PIPE			# noframework01.fsx
+	SOURCE=noframework01.fs                  				# noframework01.fs
+	SOURCE=noframework01.fsx COMPILE_ONLY=1   FSIMODE=PIPE			# noframework01.fsx
 
-	SOURCE=noframework02.fs  COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--noframework"			# noframework02.fs
-	SOURCE=noframework02.fsx COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--noframework" FSIMODE=FEED	# noframework02.fsx
+	SOURCE=noframework02.fs  COMPILE_ONLY=1  SCFLAGS="--noframework"			# noframework02.fs
+	SOURCE=noframework02.fsx COMPILE_ONLY=1  SCFLAGS="--noframework" FSIMODE=FEED	# noframework02.fsx
 
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/nologo/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/nologo/env.lst
index 21c9db97037..b4d4335cbff 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/nologo/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/nologo/env.lst
@@ -1,7 +1,7 @@
 # Not really related to the --nologo option
 
-ReqENU	SOURCE=dummy.fsx COMPILE_ONLY=1 SCFLAGS=" " PRECMD="\$FSC_PIPE >logo.txt            2>&1 || time /t" POSTCMD="\$FSI_PIPE --nologo --quiet --exec comparer.fsx logo.txt   logo.437.1033.bsl"	# fsc
-ReqENU	SOURCE=dummy.fsx COMPILE_ONLY=1 SCFLAGS=" " PRECMD="\$FSC_PIPE >nologo.txt --nologo 2>&1 || time /t" POSTCMD="\$FSI_PIPE --nologo --quiet --exec comparer.fsx nologo.txt nologo.437.1033.bsl"	# fsc --nologo
+ReqENU	SOURCE=dummy.fsx COMPILE_ONLY=1  PRECMD="\$FSC_PIPE >logo.txt            2>&1 || time /t" POSTCMD="\$FSI_PIPE --nologo --quiet --exec comparer.fsx logo.txt   logo.437.1033.bsl"	# fsc
+ReqENU	SOURCE=dummy.fsx COMPILE_ONLY=1  PRECMD="\$FSC_PIPE >nologo.txt --nologo 2>&1 || time /t" POSTCMD="\$FSI_PIPE --nologo --quiet --exec comparer.fsx nologo.txt nologo.437.1033.bsl"	# fsc --nologo
 
 
 
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/optimize/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/optimize/env.lst
index 630c54f1d6f..f0596c379dc 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/optimize/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/optimize/env.lst
@@ -1,19 +1,19 @@
 # Sanity check - simply check that the option is valid
 
-	SOURCE=optimize01.fs ISCFLAGS="--optimize" SCFLAGS=" "
-	SOURCE=optimize01.fs ISCFLAGS="--optimize+" SCFLAGS=" "
-	SOURCE=optimize01.fs ISCFLAGS="-O" SCFLAGS=" "
-	SOURCE=E_optimizeOPlus.fs ISCFLAGS="-O+" SCFLAGS=" "
-	SOURCE=optimize01.fs ISCFLAGS="--optimize-" SCFLAGS=" "
-	SOURCE=E_optimizeOMinus.fs ISCFLAGS="-O-" SCFLAGS=" "
+	SOURCE=optimize01.fs SCFLAGS="--optimize" 
+	SOURCE=optimize01.fs SCFLAGS="--optimize+" 
+	SOURCE=optimize01.fs SCFLAGS="-O" 
+	SOURCE=E_optimizeOPlus.fs SCFLAGS="-O+" 
+	SOURCE=optimize01.fs SCFLAGS="--optimize-" 
+	SOURCE=E_optimizeOMinus.fs SCFLAGS="-O-" 
 
 
-	SOURCE=optimize01.fs ISCFLAGS="--optimize" SCFLAGS=" "  FSIMODE=EXEC COMPILE_ONLY=1
-	SOURCE=optimize01.fs ISCFLAGS="--optimize+" SCFLAGS=" " FSIMODE=EXEC COMPILE_ONLY=1
-	SOURCE=optimize01.fs ISCFLAGS="-O" SCFLAGS=" "          FSIMODE=EXEC COMPILE_ONLY=1
-	SOURCE=E_optimizeOPlus.fs ISCFLAGS="-O+" SCFLAGS=" "         FSIMODE=EXEC COMPILE_ONLY=1
+	SOURCE=optimize01.fs SCFLAGS="--optimize"   FSIMODE=EXEC COMPILE_ONLY=1
+	SOURCE=optimize01.fs SCFLAGS="--optimize+"  FSIMODE=EXEC COMPILE_ONLY=1
+	SOURCE=optimize01.fs SCFLAGS="-O"           FSIMODE=EXEC COMPILE_ONLY=1
+	SOURCE=E_optimizeOPlus.fs SCFLAGS="-O+"          FSIMODE=EXEC COMPILE_ONLY=1
 
-	SOURCE=optimize01.fs ISCFLAGS="--optimize-" SCFLAGS=" " FSIMODE=EXEC COMPILE_ONLY=1
-	SOURCE=E_optimizeOMinus.fs ISCFLAGS="-O-" SCFLAGS=" "         FSIMODE=EXEC COMPILE_ONLY=1
+	SOURCE=optimize01.fs SCFLAGS="--optimize-"  FSIMODE=EXEC COMPILE_ONLY=1
+	SOURCE=E_optimizeOMinus.fs SCFLAGS="-O-"          FSIMODE=EXEC COMPILE_ONLY=1
 
-	SOURCE=Regressions01.fs ISCFLAGS="--debug --optimize-" # Regressions01.fs
+	SOURCE=Regressions01.fs SCFLAGS="--debug --optimize-" # Regressions01.fs
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/out/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/out/env.lst
index cd04a05cd06..e2bb93eb136 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/out/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/out/env.lst
@@ -1,27 +1,27 @@
 # Functional: the option does what it is meant to do
-	SOURCE=dummy.fs COMPILE_ONLY=1 ISCFLAGS="--out:out1.exe" SCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec exist.fsx out1.exe"		# --out:out1.exe
-	SOURCE=error07.fs COMPILE_ONLY=1 ISCFLAGS="--out out2.exe" SCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out2.exe"	# --out out2.exe
-	SOURCE=error06.fs COMPILE_ONLY=1 ISCFLAGS="-out:out2.exe" SCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out2.exe"	# -out:out2.exe
+	SOURCE=dummy.fs COMPILE_ONLY=1 SCFLAGS="--out:out1.exe"  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec exist.fsx out1.exe"		# --out:out1.exe
+	SOURCE=error07.fs COMPILE_ONLY=1 SCFLAGS="--out out2.exe"  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out2.exe"	# --out out2.exe
+	SOURCE=error06.fs COMPILE_ONLY=1 SCFLAGS="-out:out2.exe"  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out2.exe"	# -out:out2.exe
 
 # Last one wins...
-	SOURCE=dummy.fs COMPILE_ONLY=1 ISCFLAGS="--out:out1.exe --out:out3.exe" SCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec exist.fsx out3.exe"	# --out:out1 --out:out2
+	SOURCE=dummy.fs COMPILE_ONLY=1 SCFLAGS="--out:out1.exe --out:out3.exe"  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec exist.fsx out3.exe"	# --out:out1 --out:out2
 
 # Option is case sentitive
-	SOURCE=error01.fs COMPILE_ONLY=1 ISCFLAGS="--OUT:out1.exe" SCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out1.exe"	# --OUT:out1
-	SOURCE=error02.fs COMPILE_ONLY=1 ISCFLAGS="--oUT:out1.exe" SCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out1.exe"	# --oUT:out1
+	SOURCE=error01.fs COMPILE_ONLY=1 SCFLAGS="--OUT:out1.exe"  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out1.exe"	# --OUT:out1
+	SOURCE=error02.fs COMPILE_ONLY=1 SCFLAGS="--oUT:out1.exe"  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out1.exe"	# --oUT:out1
 
 # Mispelled options
-	SOURCE=error03.fs COMPILE_ONLY=1 ISCFLAGS="--oup:out1" SCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out1.exe"	# --oup:out1
+	SOURCE=error03.fs COMPILE_ONLY=1 SCFLAGS="--oup:out1"  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out1.exe"	# --oup:out1
 
 # Missing argument
-	SOURCE=error04.fs COMPILE_ONLY=1 ISCFLAGS="--out:" SCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out1.exe"	# --out
-	SOURCE=error04.fs COMPILE_ONLY=1 TAILFLAGS="--out" SCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out1.exe"	# --out: (last)
-	SOURCE=error04.fs COMPILE_ONLY=1 TAILFLAGS="--out:" SCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out1.exe"	# --out:
+	SOURCE=error04.fs COMPILE_ONLY=1 SCFLAGS="--out:"  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out1.exe"	# --out
+	SOURCE=error04.fs COMPILE_ONLY=1 TAILFLAGS="--out"  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out1.exe"	# --out: (last)
+	SOURCE=error04.fs COMPILE_ONLY=1 TAILFLAGS="--out:"  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx out1.exe"	# --out:
 
 # What is the expected extension?
-	SOURCE=error05.fs COMPILE_ONLY=1 ISCFLAGS="-a --out:library.exe"      SCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx library.exe"	# --out:library.exe
-	SOURCE=error05.fs COMPILE_ONLY=1 ISCFLAGS="--target:exe --out:exe.dll" SCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx exe.dll"		# --out:exe.dll
-	SOURCE=error05.fs COMPILE_ONLY=1 ISCFLAGS="--target:module --out:exe.exe" SCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx exe.exe"		# --out:exe.exe
+	SOURCE=error05.fs COMPILE_ONLY=1 SCFLAGS="-a --out:library.exe"       POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx library.exe"	# --out:library.exe
+	SOURCE=error05.fs COMPILE_ONLY=1 SCFLAGS="--target:exe --out:exe.dll"  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx exe.dll"		# --out:exe.dll
+	SOURCE=error05.fs COMPILE_ONLY=1 SCFLAGS="--target:module --out:exe.exe"  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx exe.exe"		# --out:exe.exe
 
 # Option is not available in FSI
-	SOURCE=error08.fs COMPILE_ONLY=1 ISCFLAGS="--out:fsi.exe" SCFLAGS=" " FSIMODE=EXEC POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx fsi.exe"	# --out:fsi.exe
+	SOURCE=error08.fs COMPILE_ONLY=1 SCFLAGS="--out:fsi.exe"  FSIMODE=EXEC POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec notexist.fsx fsi.exe"	# --out:fsi.exe
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/pdb/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/pdb/env.lst
index 7cd0933fca6..1d1680d8d75 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/pdb/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/pdb/env.lst
@@ -1,24 +1,24 @@
 # Make sure we can use --pdb to create a non-default .pdb
 
 # It's ok (although redundant) to specify the same file
-NOMONO	SOURCE=E_pdb_and_debug.fs ISCFLAGS="--pdb:pdb01.pdb"    SCFLAGS=" "  PRECMD="IF EXIST pdb01.pdb DEL pdb01.pdb"  POSTCMD="IF     EXIST pdb01.pdb EXIT 1"			# same file w/o -g
-NOMONO	SOURCE=pdb01.fs           ISCFLAGS="-g --pdb:pdb01.pdb" SCFLAGS=" "  PRECMD="IF EXIST pdb01.pdb DEL pdb01.pdb"  POSTCMD="IF NOT EXIST pdb01.pdb EXIT 1"			# same file w/ -g
+NOMONO	SOURCE=E_pdb_and_debug.fs SCFLAGS="--pdb:pdb01.pdb"      PRECMD="IF EXIST pdb01.pdb DEL pdb01.pdb"  POSTCMD="IF     EXIST pdb01.pdb EXIT 1"			# same file w/o -g
+NOMONO	SOURCE=pdb01.fs           SCFLAGS="-g --pdb:pdb01.pdb"   PRECMD="IF EXIST pdb01.pdb DEL pdb01.pdb"  POSTCMD="IF NOT EXIST pdb01.pdb EXIT 1"			# same file w/ -g
 
-NOMONO	SOURCE=E_pdb_and_debug.fs ISCFLAGS="--pdb:pdb01x.pdb"    SCFLAGS=" " PRECMD="IF EXIST pdb01x.pdb  DEL pdb01x.pdb" POSTCMD="IF     EXIST pdb01x.pdb EXIT 1"			# different file w/o -g
-NOMONO	SOURCE=pdb01.fs           ISCFLAGS="-g --pdb:pdb01x.pdb" SCFLAGS=" " PRECMD="IF EXIST pdb01x.pdb  DEL pdb01x.pdb" POSTCMD="IF NOT EXIST pdb01x.pdb EXIT 1"			# different file w/ -g
-NOMONO	SOURCE=E_pdb_and_debug.fs ISCFLAGS="--pdb:pdb01x.pdb"    SCFLAGS=" " PRECMD="IF EXIST pdb01.pdb   DEL pdb01.pdb"  POSTCMD="IF     EXIST pdb01.pdb EXIT 1"			# different file w/o -g (no pdb01.pdb)
-NOMONO	SOURCE=pdb01.fs           ISCFLAGS="-g --pdb:pdb01x.pdb" SCFLAGS=" " PRECMD="IF EXIST pdb01.pdb   DEL pdb01.pdb"  POSTCMD="IF     EXIST pdb01.pdb EXIT 1"			# different file w/ -g (no pdb01.pdb)
+NOMONO	SOURCE=E_pdb_and_debug.fs SCFLAGS="--pdb:pdb01x.pdb"     PRECMD="IF EXIST pdb01x.pdb  DEL pdb01x.pdb" POSTCMD="IF     EXIST pdb01x.pdb EXIT 1"			# different file w/o -g
+NOMONO	SOURCE=pdb01.fs           SCFLAGS="-g --pdb:pdb01x.pdb"  PRECMD="IF EXIST pdb01x.pdb  DEL pdb01x.pdb" POSTCMD="IF NOT EXIST pdb01x.pdb EXIT 1"			# different file w/ -g
+NOMONO	SOURCE=E_pdb_and_debug.fs SCFLAGS="--pdb:pdb01x.pdb"     PRECMD="IF EXIST pdb01.pdb   DEL pdb01.pdb"  POSTCMD="IF     EXIST pdb01.pdb EXIT 1"			# different file w/o -g (no pdb01.pdb)
+NOMONO	SOURCE=pdb01.fs           SCFLAGS="-g --pdb:pdb01x.pdb"  PRECMD="IF EXIST pdb01.pdb   DEL pdb01.pdb"  POSTCMD="IF     EXIST pdb01.pdb EXIT 1"			# different file w/ -g (no pdb01.pdb)
 
-NOMONO	SOURCE=pdb01.fs ISCFLAGS="--debug --pdb:d\\pdb01.pdb" SCFLAGS=" " PRECMD="setup.cmd"   POSTCMD="IF NOT EXIST d\\pdb01.pdb EXIT 1"	# different file w/ -g (in a directory)
-NOMONO	SOURCE=pdb01.fs ISCFLAGS="--debug --pdb:.\\pdb01.pdb" SCFLAGS=" " PRECMD="IF EXIST pdb01.pdb DEL pdb01.pdb"  POSTCMD="IF NOT EXIST   pdb01.pdb EXIT 1"	# different file w/ -g (in current dir)
+NOMONO	SOURCE=pdb01.fs SCFLAGS="--debug --pdb:d\\pdb01.pdb"  PRECMD="setup.cmd"   POSTCMD="IF NOT EXIST d\\pdb01.pdb EXIT 1"	# different file w/ -g (in a directory)
+NOMONO	SOURCE=pdb01.fs SCFLAGS="--debug --pdb:.\\pdb01.pdb"  PRECMD="IF EXIST pdb01.pdb DEL pdb01.pdb"  POSTCMD="IF NOT EXIST   pdb01.pdb EXIT 1"	# different file w/ -g (in current dir)
 
-NOMONO	SOURCE=pdb01.fs ISCFLAGS="-g --pdb:.\\pdb01.fs" SCFLAGS=" "       PRECMD="IF EXIST pdb01.pdb DEL pdb01.pdb"  POSTCMD="IF NOT EXIST   pdb01.pdb EXIT 1"	# different file w/ -g (try to overwrite)
+NOMONO	SOURCE=pdb01.fs SCFLAGS="-g --pdb:.\\pdb01.fs"        PRECMD="IF EXIST pdb01.pdb DEL pdb01.pdb"  POSTCMD="IF NOT EXIST   pdb01.pdb EXIT 1"	# different file w/ -g (try to overwrite)
 
 # Case sensitive
-	SOURCE=pdb02.fs ISCFLAGS="--PDB" SCFLAGS="-g"                                                              POSTCMD="IF     EXIST   pdb02.pdb EXIT 1"	# --PDB
+	SOURCE=pdb02.fs SCFLAGS="--PDB -g"                                                              POSTCMD="IF     EXIST   pdb02.pdb EXIT 1"	# --PDB
 
 # Not in FSI
-	SOURCE=pdb03.fsx IFSIFLAGS="--pdb:pdb03x.pdb" SCFLAGS="-g" COMPILE_ONLY=1 FSIMODE=PIPE POSTCMD="IF EXIST pdb03x.pdb EXIT 1"	# fsi
+	SOURCE=pdb03.fsx SCFLAGS="--pdb:pdb03x.pdb -g" COMPILE_ONLY=1 FSIMODE=PIPE POSTCMD="IF EXIST pdb03x.pdb EXIT 1"	# fsi
 
 # Test against creating debug info when file is not accessible
-NOMONO	SOURCE=pdb04.fs SCFLAGS="-g --pdb:pdb04.exe"											# pdb04.fs
\ No newline at end of file
+NOMONO	SOURCE=pdb04.fs SCFLAGS="-g --pdb:pdb04.exe"											# pdb04.fs
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/platform/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/platform/env.lst
index be496366f6d..88dd3e2d7fb 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/platform/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/platform/env.lst
@@ -1,63 +1,63 @@
-	SOURCE=error_17.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--noframework --platform:anycpu32bitpreferred -r:\"%FSCOREDLL20PATH%\" -r:\"%X86_PROGRAMFILES%\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v3.5\\Profile\\Client\\mscorlib.dll\""	# anycpu32bitpreferred - downtarget
+	SOURCE=error_17.fs COMPILE_ONLY=1  SCFLAGS="--noframework --platform:anycpu32bitpreferred -r:\"%FSCOREDLL20PATH%\" -r:\"%X86_PROGRAMFILES%\\Reference Assemblies\\Microsoft\\Framework\\.NETFramework\\v3.5\\Profile\\Client\\mscorlib.dll\""	# anycpu32bitpreferred - downtarget
 
 # Functional: the option does what it is meant to do
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS=" "				# default=anycpu
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:anycpu"		# anycpu
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:x86"			# x86
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:x64"			# x64
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:Itanium"		# Itanium
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:anycpu32bitpreferred"	# anycpu32bitpreferred
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" 				# default=anycpu
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:anycpu"		# anycpu
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:x86"			# x86
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:x64"			# x64
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:Itanium"		# Itanium
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:anycpu32bitpreferred"	# anycpu32bitpreferred
 
 # In combination with --target
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:exe"					# exe - default=anycpu
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:exe --platform:anycpu"			# exe - anycpu
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:exe --platform:x86"			# exe - x86
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:exe --platform:x64"			# exe - x64
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:exe --platform:Itanium"			# exe - Itanium
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:exe --platform:anycpu32bitpreferred"	# exe - anycpu32bitpreferred
-
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:winexe"					# winexe - default=anycpu
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:winexe --platform:anycpu"		# winexe - anycpu
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:winexe --platform:x86"			# winexe - x86
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:winexe --platform:x64"			# winexe - x64
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:winexe --platform:Itanium"		# winexe - Itanium
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:winexe --platform:anycpu32bitpreferred"	# winexe - anycpu32bitpreferred
-
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:library"			# library - default=anycpu
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:library --platform:anycpu"	# library - anycpu
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:library --platform:x86"		# library - x86
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:library --platform:x64"		# library - x64
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:library --platform:Itanium"	# library - Itanium
-	SOURCE=error_16.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--target:library --platform:anycpu32bitpreferred"								# library - anycpu32bitpreferred
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:exe"					# exe - default=anycpu
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:exe --platform:anycpu"			# exe - anycpu
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:exe --platform:x86"			# exe - x86
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:exe --platform:x64"			# exe - x64
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:exe --platform:Itanium"			# exe - Itanium
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:exe --platform:anycpu32bitpreferred"	# exe - anycpu32bitpreferred
+
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:winexe"					# winexe - default=anycpu
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:winexe --platform:anycpu"		# winexe - anycpu
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:winexe --platform:x86"			# winexe - x86
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:winexe --platform:x64"			# winexe - x64
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:winexe --platform:Itanium"		# winexe - Itanium
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:winexe --platform:anycpu32bitpreferred"	# winexe - anycpu32bitpreferred
+
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:library"			# library - default=anycpu
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:library --platform:anycpu"	# library - anycpu
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:library --platform:x86"		# library - x86
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:library --platform:x64"		# library - x64
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--target:library --platform:Itanium"	# library - Itanium
+	SOURCE=error_16.fs COMPILE_ONLY=1  SCFLAGS="--target:library --platform:anycpu32bitpreferred"								# library - anycpu32bitpreferred
 
 # Last one wins...
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:anycpu --platform:x64"
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:anycpu --platform:x86"
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:x86 --platform:x64"
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:x64 --platform:x86"
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:Itanium --platform:anycpu"
-	SOURCE=platf_01.fs COMPILE_ONLY=1 ISCFLAGS=" " POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:Itanium --platform:anycpu32bitpreferred"
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:anycpu --platform:x64"
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:anycpu --platform:x86"
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:x86 --platform:x64"
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:x64 --platform:x86"
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:Itanium --platform:anycpu"
+	SOURCE=platf_01.fs COMPILE_ONLY=1  POSTCMD="\$FSI_PIPE --nologo --quiet --debug- --exec bitnesscheck.fsx" SCFLAGS="--platform:Itanium --platform:anycpu32bitpreferred"
 
 # Option is case sentitive
-	SOURCE=error_01.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--PLATFORM:anycpu"
-	SOURCE=error_02.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--PlatForm:anycpu"
+	SOURCE=error_01.fs COMPILE_ONLY=1  SCFLAGS="--PLATFORM:anycpu"
+	SOURCE=error_02.fs COMPILE_ONLY=1  SCFLAGS="--PlatForm:anycpu"
 
-	SOURCE=error_03.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--platform:ITANIUM"
-	SOURCE=error_04.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--platform:ANYCPU"
-	SOURCE=error_05.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--platform:X86"
-	SOURCE=error_06.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--platform:X64"
+	SOURCE=error_03.fs COMPILE_ONLY=1  SCFLAGS="--platform:ITANIUM"
+	SOURCE=error_04.fs COMPILE_ONLY=1  SCFLAGS="--platform:ANYCPU"
+	SOURCE=error_05.fs COMPILE_ONLY=1  SCFLAGS="--platform:X86"
+	SOURCE=error_06.fs COMPILE_ONLY=1  SCFLAGS="--platform:X64"
 
 # Incorrect platform
-	SOURCE=error_07.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--platform:IA64"
-	SOURCE=error_08.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--platform:i386"
-	SOURCE=error_09.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--platform:AMD64"
-	SOURCE=error_10.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--platform:PPC"
-	SOURCE=error_15.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--platform:ARM"
+	SOURCE=error_07.fs COMPILE_ONLY=1  SCFLAGS="--platform:IA64"
+	SOURCE=error_08.fs COMPILE_ONLY=1  SCFLAGS="--platform:i386"
+	SOURCE=error_09.fs COMPILE_ONLY=1  SCFLAGS="--platform:AMD64"
+	SOURCE=error_10.fs COMPILE_ONLY=1  SCFLAGS="--platform:PPC"
+	SOURCE=error_15.fs COMPILE_ONLY=1  SCFLAGS="--platform:ARM"
 
 # Mispelled options
-	SOURCE=error_11.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--platform-:anycpu"
-	SOURCE=error_12.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--PLATFORM+:anycpu"
-	SOURCE=error_13.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="---platform:anycpu"
+	SOURCE=error_11.fs COMPILE_ONLY=1  SCFLAGS="--platform-:anycpu"
+	SOURCE=error_12.fs COMPILE_ONLY=1  SCFLAGS="--PLATFORM+:anycpu"
+	SOURCE=error_13.fs COMPILE_ONLY=1  SCFLAGS="---platform:anycpu"
 
 # Missing argument
-	SOURCE=error_14.fs COMPILE_ONLY=1 ISCFLAGS=" " TAILFLAGS="--platform"
+	SOURCE=error_14.fs COMPILE_ONLY=1  TAILFLAGS="--platform"
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/reference/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/reference/env.lst
index ee0702b799a..390428f3295 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/reference/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/reference/env.lst
@@ -1,20 +1,20 @@
-	SOURCE=E_RefFSharpCore.fs ISCFLAGS="-r FSharp.Core"				# E_RefFSharpCore.fs
-	SOURCE=EscapeChars01.fs   ISCFLAGS="-r:\".\No\nNewLine\" SCFLAGS=" "		# EscapeChars01.fs
+NoCrossVer	SOURCE=E_RefFSharpCore.fs SCFLAGS="-r FSharp.Core"				# E_RefFSharpCore.fs
+	SOURCE=EscapeChars01.fs   SCFLAGS="-r:\".\No\nNewLine\" 		# EscapeChars01.fs
 
-	SOURCE=EscapeChars01.fs ISCFLAGS="-r:a\\b\\n.dll" SCFLAGS=" "			# EscapeChars01.fs (-r:)
-	SOURCE=EscapeChars01.fs ISCFLAGS="-r a\\b\\n.dll" SCFLAGS=" "			# EscapeChars01.fs (-r )
+	SOURCE=EscapeChars01.fs SCFLAGS="-r:a\\b\\n.dll" 			# EscapeChars01.fs (-r:)
+	SOURCE=EscapeChars01.fs SCFLAGS="-r a\\b\\n.dll" 			# EscapeChars01.fs (-r )
 
-	SOURCE=EscapeChars02.fs ISCFLAGS="-r:.\\r.dll -r:..\\n\\r\\a.dll" SCFLAGS=" "	# EscapeChars02.fs (-r: )
-	SOURCE=EscapeChars02.fs ISCFLAGS="-r .\\r.dll -r:..\\n\\r\\a.dll" SCFLAGS=" "	# EscapeChars02.fs (-r )
+	SOURCE=EscapeChars02.fs SCFLAGS="-r:.\\r.dll -r:..\\n\\r\\a.dll" 	# EscapeChars02.fs (-r: )
+	SOURCE=EscapeChars02.fs SCFLAGS="-r .\\r.dll -r:..\\n\\r\\a.dll" 	# EscapeChars02.fs (-r )
 
-	SOURCE=MissingDLL.fs ISCFLAGS="-r:MissingDLL.dll" SCFLAGS=" "	# MissingDLL.fs
-	SOURCE=MissingEXE.fs ISCFLAGS="-r:MissingEXE.exe" SCFLAGS=" "	# MissingEXE.fs
+	SOURCE=MissingDLL.fs SCFLAGS="-r:MissingDLL.dll" 	# MissingDLL.fs
+	SOURCE=MissingEXE.fs SCFLAGS="-r:MissingEXE.exe" 	# MissingEXE.fs
 
-	SOURCE=MissingDLL.fsx IFSIFLAGS="-r:MissingDLL.dll" SCFLAGS=" " FSIMODE=EXEC	# MissingDLL.fsx (-r:)
-	SOURCE=MissingDLL.fsx IFSIFLAGS="-r MissingDLL.dll" SCFLAGS=" " FSIMODE=EXEC	# MissingDLL.fsx (-r )
+	SOURCE=MissingDLL.fsx SCFLAGS="-r:MissingDLL.dll"  FSIMODE=EXEC	# MissingDLL.fsx (-r:)
+	SOURCE=MissingDLL.fsx SCFLAGS="-r MissingDLL.dll"  FSIMODE=EXEC	# MissingDLL.fsx (-r )
 
-	SOURCE=MissingEXE.fsx IFSIFLAGS="-r:MissingEXE.exe" SCFLAGS=" " FSIMODE=EXEC	# MissingEXE.fsx (-r:)
-	SOURCE=MissingEXE.fsx IFSIFLAGS="-r MissingEXE.exe" SCFLAGS=" " FSIMODE=EXEC	# MissingEXE.fsx (-r )
+	SOURCE=MissingEXE.fsx SCFLAGS="-r:MissingEXE.exe"  FSIMODE=EXEC	# MissingEXE.fsx (-r:)
+	SOURCE=MissingEXE.fsx SCFLAGS="-r MissingEXE.exe"  FSIMODE=EXEC	# MissingEXE.fsx (-r )
 
 ReqPP	SOURCE="fscArgOrder.fsi fscArgOrder.fs" SCFLAGS="--define:NO_INSTALLED_ILX_CONFIGS -r:FSharp.PowerPack.dll -r:System.Core.dll -r:FSharp.PowerPack.Linq.dll --nowarn:20 --define:COMPILED --optimize -r:LibforfscArgOrder.dll --target:library -o:dbwlib2.optimize.dll" PRECMD="\$FSC_PIPE -a LibforfscArgOrder.fs" COMPILE_ONLY=1	# fscArgOrder.fs (-r:)
 ReqPP	SOURCE="fscArgOrder.fsi fscArgOrder.fs" SCFLAGS="--define:NO_INSTALLED_ILX_CONFIGS -r FSharp.PowerPack.dll -r:System.Core.dll -r:FSharp.PowerPack.Linq.dll --nowarn:20 --define:COMPILED --optimize -r:LibforfscArgOrder.dll --target:library -o:dbwlib2.optimize.dll" PRECMD="\$FSC_PIPE -a LibforfscArgOrder.fs" COMPILE_ONLY=1	# fscArgOrder.fs (-r )
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/simpleresolution/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/simpleresolution/env.lst
index b33583d375b..13eedbc60ff 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/simpleresolution/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/simpleresolution/env.lst
@@ -1,15 +1,15 @@
 # Works fine when just specified
-	SOURCE=simpleres_01.fs ISCFLAGS=" " SCFLAGS="--simpleresolution"				# basic
+	SOURCE=simpleres_01.fs  SCFLAGS="--simpleresolution"				# basic
 
 # Does not take arguments
-	SOURCE=error_01.fs ISCFLAGS=" " SCFLAGS="--simpleresolution:foo" COMPILE_ONLY=1			# with-argument
+	SOURCE=error_01.fs  SCFLAGS="--simpleresolution:foo" COMPILE_ONLY=1			# with-argument
 
 # Basic functionality
-	SOURCE=simpleres_01.fs ISCFLAGS=" " SCFLAGS="--simpleresolution -r System.dll"			# reference-name-extension
-	SOURCE=error_02.fs ISCFLAGS=" " SCFLAGS="--simpleresolution -r System" COMPILE_ONLY=1		# reference-name-only
+	SOURCE=simpleres_01.fs  SCFLAGS="--simpleresolution -r System.dll"			# reference-name-extension
+	SOURCE=error_02.fs  SCFLAGS="--simpleresolution -r System" COMPILE_ONLY=1		# reference-name-only
 
 # Option is no available in FSI.exe
-	SOURCE=error_03.fs ISCFLAGS=" " IFSIFLAGS="--simpleresolution" FSIMODE=EXEC 			# not-for-fsi
+	SOURCE=error_03.fs  SCFLAGS="--simpleresolution" FSIMODE=EXEC 			# not-for-fsi
 
 # Interacting with --resolutions
-	SOURCE=simpleres_02.fs ISCFLAGS=" " SCFLAGS="--simpleresolution --resolutions" COMPILE_ONLY=1	# simpleres_02
\ No newline at end of file
+	SOURCE=simpleres_02.fs  SCFLAGS="--simpleresolution --resolutions" COMPILE_ONLY=1	# simpleres_02
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/standalone/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/standalone/env.lst
index 04476b1ff2b..a051f59cdd7 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/standalone/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/standalone/env.lst
@@ -1,2 +1,2 @@
-	SOURCE=E_MayNotIncludeEXE.fs     ISCFLAGS="--standalone --target:library -r:E_MayNotIncludeEXERef.exe" PRECMD="\$FSC_PIPE --target:exe E_MayNotIncludeEXERef.fs"	# E_MayNotIncludeEXE.fs
-NOMONO	SOURCE=W_MissingTransitiveRef.fs ISCFLAGS="--standalone --target:library -r:PresentationFramework.dll" COMPILE_ONLY=1 							# W_MissingTransitiveRef.fs
+	SOURCE=E_MayNotIncludeEXE.fs     SCFLAGS="--standalone --target:library -r:E_MayNotIncludeEXERef.exe" PRECMD="\$FSC_PIPE --target:exe E_MayNotIncludeEXERef.fs"	# E_MayNotIncludeEXE.fs
+NOMONO	SOURCE=W_MissingTransitiveRef.fs SCFLAGS="--standalone --target:library -r:PresentationFramework.dll" COMPILE_ONLY=1 							# W_MissingTransitiveRef.fs
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/staticlink/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/staticlink/env.lst
index 8382155dba7..d2a856cc544 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/staticlink/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/staticlink/env.lst
@@ -1,2 +1,2 @@
-	SOURCE=E_FileNotFound.fs                                                            ISCFLAGS="--staticlink:IDontExist.dll" 							# E_FileNotFound.fs
-	SOURCE=E_StaticLinkingErrorEXE.fs PRECMD="\$FSC_PIPE -a E_StaticLinkingErrorDLL.fs" ISCFLAGS="--staticlink:E_StaticLinkingErrorDLL" SCFLAGS="-r E_StaticLinkingErrorDLL.dll"	# E_StaticLinkingErrorEXE.fs
+	SOURCE=E_FileNotFound.fs                                                            SCFLAGS="--staticlink:IDontExist.dll" 							# E_FileNotFound.fs
+	SOURCE=E_StaticLinkingErrorEXE.fs PRECMD="\$FSC_PIPE -a E_StaticLinkingErrorDLL.fs" SCFLAGS="--staticlink:E_StaticLinkingErrorDLL -r E_StaticLinkingErrorDLL.dll"	# E_StaticLinkingErrorEXE.fs
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/env.lst
index cf8e4d0cdf3..29319456044 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/subsystemversion/env.lst
@@ -1,31 +1,31 @@
 # Default behavior
-	SOURCE=dummy.fs SCFLAGS=" " ISCFLAGS=" "                       COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 4.00"	# default is 4.00
+	SOURCE=dummy.fs                         COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 4.00"	# default is 4.00
 
-	SOURCE=dummy.fs SCFLAGS=" " ISCFLAGS="--subsystemversion:4.00" COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 4.00"	# explicit 4.00
-	SOURCE=dummy.fs SCFLAGS=" " ISCFLAGS="--subsystemversion:5.01" COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 5.01"	# explicit 5.01
-	SOURCE=dummy.fs SCFLAGS=" " ISCFLAGS="--subsystemversion:6.00" COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 6.00"	# explicit 6.00 - Vista
-	SOURCE=dummy.fs SCFLAGS=" " ISCFLAGS="--subsystemversion:6.02" COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 6.02"	# explicit 6.02 - Win8
+	SOURCE=dummy.fs  SCFLAGS="--subsystemversion:4.00" COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 4.00"	# explicit 4.00
+	SOURCE=dummy.fs  SCFLAGS="--subsystemversion:5.01" COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 5.01"	# explicit 5.01
+	SOURCE=dummy.fs  SCFLAGS="--subsystemversion:6.00" COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 6.00"	# explicit 6.00 - Vista
+	SOURCE=dummy.fs  SCFLAGS="--subsystemversion:6.02" COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 6.02"	# explicit 6.02 - Win8
 
 # Different targets...
-	SOURCE=dummy.fs SCFLAGS=" " ISCFLAGS="--target:winexe  --subsystemversion:6.01"                POSTCMD="CheckSubsystemVersion.bat dummy.exe 6.01"	# explicit 6.01 - Win7 - winexe
-	SOURCE=dummy.fs SCFLAGS=" " ISCFLAGS="--target:exe     --subsystemversion:6.01"                POSTCMD="CheckSubsystemVersion.bat dummy.exe 6.01"	# explicit 6.01 - Win7 - exe
-	SOURCE=dummy.fs SCFLAGS=" " ISCFLAGS="--target:library --subsystemversion:6.01" COMPILE_ONLY=1 POSTCMD="CheckSubsystemVersion.bat dummy.dll 6.01"	# explicit 6.01 - Win7 - library
-	SOURCE=dummy.fs SCFLAGS=" " ISCFLAGS="--target:module  --subsystemversion:6.01" COMPILE_ONLY=1 POSTCMD="CheckSubsystemVersion.bat dummy.netmodule 6.01"	# explicit 6.01 - Win7 - module
+	SOURCE=dummy.fs  SCFLAGS="--target:winexe  --subsystemversion:6.01"                POSTCMD="CheckSubsystemVersion.bat dummy.exe 6.01"	# explicit 6.01 - Win7 - winexe
+	SOURCE=dummy.fs  SCFLAGS="--target:exe     --subsystemversion:6.01"                POSTCMD="CheckSubsystemVersion.bat dummy.exe 6.01"	# explicit 6.01 - Win7 - exe
+	SOURCE=dummy.fs  SCFLAGS="--target:library --subsystemversion:6.01" COMPILE_ONLY=1 POSTCMD="CheckSubsystemVersion.bat dummy.dll 6.01"	# explicit 6.01 - Win7 - library
+	SOURCE=dummy.fs  SCFLAGS="--target:module  --subsystemversion:6.01" COMPILE_ONLY=1 POSTCMD="CheckSubsystemVersion.bat dummy.netmodule 6.01"	# explicit 6.01 - Win7 - module
 
 
 # Misc formats...
-	SOURCE=dummy.fs SCFLAGS=" "   ISCFLAGS="--subsystemversion:6.2"         COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 6.02"		# 6.2
-	SOURCE=dummy.fs SCFLAGS=" "   ISCFLAGS="--subsystemversion:06.002"      COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 6.02"		# 06.002
-	SOURCE=dummy.fs SCFLAGS=" "   ISCFLAGS="--subsystemversion:65535.65535" COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 65535.65535"	# 65535.65535
+	SOURCE=dummy.fs    SCFLAGS="--subsystemversion:6.2"         COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 6.02"		# 6.2
+	SOURCE=dummy.fs    SCFLAGS="--subsystemversion:06.002"      COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 6.02"		# 06.002
+	SOURCE=dummy.fs    SCFLAGS="--subsystemversion:65535.65535" COMPILE_ONLY=1  POSTCMD="CheckSubsystemVersion.bat dummy.exe 65535.65535"	# 65535.65535
 
 # Bad arguments...
-	SOURCE=E_Error01.fs SCFLAGS=" " ISCFLAGS="--subsystemversion:3.99"        COMPILE_ONLY=1	# 3.99
-	SOURCE=E_Error02.fs SCFLAGS=" " ISCFLAGS="--subsystemversion:"            COMPILE_ONLY=1	# missing
-	SOURCE=E_Error03.fs SCFLAGS=" " ISCFLAGS="--subsystemversion:\"\" "       COMPILE_ONLY=1	# ""
-	SOURCE=E_Error04.fs SCFLAGS=" " ISCFLAGS="--subsystemversion:4,0"         COMPILE_ONLY=1	# 4,0
-	SOURCE=E_Error05.fs SCFLAGS=" " ISCFLAGS="--subsystemversion:4"           COMPILE_ONLY=1	# missing minor
-	SOURCE=E_Error06.fs SCFLAGS=" " ISCFLAGS="--subsystemversion:.4"          COMPILE_ONLY=1	# missing major
-	SOURCE=E_Error07.fs SCFLAGS=" " ISCFLAGS="--subsystemversion:65536.0"     COMPILE_ONLY=1	# 65536.0
-	SOURCE=E_Error08.fs SCFLAGS=" " ISCFLAGS="--subsystemversion:4.65536"     COMPILE_ONLY=1	# 4.65536
-	SOURCE=E_Error09.fs SCFLAGS=" " ISCFLAGS="--subsystemversion:65536.65536" COMPILE_ONLY=1	# 65536.65536
-	SOURCE=E_Error10.fs SCFLAGS=" " ISCFLAGS="--subsystemversion:-1.-2"       COMPILE_ONLY=1	# -1.-2
+	SOURCE=E_Error01.fs  SCFLAGS="--subsystemversion:3.99"        COMPILE_ONLY=1	# 3.99
+	SOURCE=E_Error02.fs  SCFLAGS="--subsystemversion:"            COMPILE_ONLY=1	# missing
+	SOURCE=E_Error03.fs  SCFLAGS="--subsystemversion:\"\" "       COMPILE_ONLY=1	# ""
+	SOURCE=E_Error04.fs  SCFLAGS="--subsystemversion:4,0"         COMPILE_ONLY=1	# 4,0
+	SOURCE=E_Error05.fs  SCFLAGS="--subsystemversion:4"           COMPILE_ONLY=1	# missing minor
+	SOURCE=E_Error06.fs  SCFLAGS="--subsystemversion:.4"          COMPILE_ONLY=1	# missing major
+	SOURCE=E_Error07.fs  SCFLAGS="--subsystemversion:65536.0"     COMPILE_ONLY=1	# 65536.0
+	SOURCE=E_Error08.fs  SCFLAGS="--subsystemversion:4.65536"     COMPILE_ONLY=1	# 4.65536
+	SOURCE=E_Error09.fs  SCFLAGS="--subsystemversion:65536.65536" COMPILE_ONLY=1	# 65536.65536
+	SOURCE=E_Error10.fs  SCFLAGS="--subsystemversion:-1.-2"       COMPILE_ONLY=1	# -1.-2
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/tailcalls/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/tailcalls/env.lst
index 40eeed7b9f2..f701d4e2f2d 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/tailcalls/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/tailcalls/env.lst
@@ -1,9 +1,9 @@
 # Sanity check - simply check that the option is valid
 
-	SOURCE=tailcalls01.fs ISCFLAGS="--tailcalls" SCFLAGS=" "
-	SOURCE=tailcalls01.fs ISCFLAGS="--tailcalls+" SCFLAGS=" "
-	SOURCE=tailcalls01.fs ISCFLAGS="--tailcalls-" SCFLAGS=" "
+	SOURCE=tailcalls01.fs SCFLAGS="--tailcalls" 
+	SOURCE=tailcalls01.fs SCFLAGS="--tailcalls+" 
+	SOURCE=tailcalls01.fs SCFLAGS="--tailcalls-" 
 
-	SOURCE=tailcalls01.fs ISCFLAGS="--tailcalls" SCFLAGS=" "  FSIMODE=EXEC COMPILE_ONLY=1
-	SOURCE=tailcalls01.fs ISCFLAGS="--tailcalls+" SCFLAGS=" " FSIMODE=EXEC COMPILE_ONLY=1
-	SOURCE=tailcalls01.fs ISCFLAGS="--tailcalls-" SCFLAGS=" " FSIMODE=EXEC COMPILE_ONLY=1
+	SOURCE=tailcalls01.fs SCFLAGS="--tailcalls"   FSIMODE=EXEC COMPILE_ONLY=1
+	SOURCE=tailcalls01.fs SCFLAGS="--tailcalls+"  FSIMODE=EXEC COMPILE_ONLY=1
+	SOURCE=tailcalls01.fs SCFLAGS="--tailcalls-"  FSIMODE=EXEC COMPILE_ONLY=1
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/target/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/target/env.lst
index 2aef7518813..562c7174811 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/target/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/target/env.lst
@@ -1,4 +1,4 @@
 # Error cases
-	SOURCE=error01.fs ISCFLAGS=--a SCFLAGS=" "	# --a
-	SOURCE=error02.fs ISCFLAGS=//a SCFLAGS=" "	# //a
+	SOURCE=error01.fs SCFLAGS="--a"	# --a
+	SOURCE=error02.fs SCFLAGS="//a"	# //a
 
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/times/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/times/env.lst
index f7c4a87cf68..31c2becd404 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/times/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/times/env.lst
@@ -1,16 +1,16 @@
 # Functional: the option does what it is meant to do
-	SOURCE=times01.fs  COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--times"
-	SOURCE=times01.fs  COMPILE_ONLY=1 ISCFLAGS=" " TAILFLAGS="--times"
+	SOURCE=times01.fs  COMPILE_ONLY=1  SCFLAGS="--times"
+	SOURCE=times01.fs  COMPILE_ONLY=1  TAILFLAGS="--times"
 
 # Last one wins...
-	SOURCE=times01.fs  COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--times --times"
+	SOURCE=times01.fs  COMPILE_ONLY=1  SCFLAGS="--times --times"
 
 # Option is case sentitive
-	SOURCE=error_01.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--Times"
+	SOURCE=error_01.fs COMPILE_ONLY=1  SCFLAGS="--Times"
 
 # Mispelled options
-	SOURCE=error_02.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--times-"
-	SOURCE=error_03.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--times+"
+	SOURCE=error_02.fs COMPILE_ONLY=1  SCFLAGS="--times-"
+	SOURCE=error_03.fs COMPILE_ONLY=1  SCFLAGS="--times+"
 
 # Missing argument
-	SOURCE=error_04.fs COMPILE_ONLY=1 ISCFLAGS=" " TAILFLAGS="--times:0"
+	SOURCE=error_04.fs COMPILE_ONLY=1  TAILFLAGS="--times:0"
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/warn/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/warn/env.lst
index c3c8779d294..38ef7217a0b 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/warn/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/warn/env.lst
@@ -1,17 +1,17 @@
-	SOURCE=warning_level_0.fs ISCFLAGS="--warn:0 --warnaserror" SCFLAGS=" "	# warning_level_0.fs
+	SOURCE=warning_level_0.fs SCFLAGS="--warn:0 --warnaserror" 	# warning_level_0.fs
 
 # Compile a code which produces a level5 warning (FS0052) with different --warn options
-NoMT	SOURCE=warn0_level5.fs ISCFLAGS="--warn:0 --warnaserror" SCFLAGS=" " COMPILE_ONLY=1	# warn5_level0.fs
-NoMT	SOURCE=warn1_level5.fs ISCFLAGS="--warn:1 --warnaserror" SCFLAGS=" " COMPILE_ONLY=1	# warn5_level1.fs
-NoMT	SOURCE=warn2_level5.fs ISCFLAGS="--warn:2 --warnaserror" SCFLAGS=" " COMPILE_ONLY=1	# warn5_level2.fs
-NoMT	SOURCE=warn3_level5.fs ISCFLAGS="--warn:3 --warnaserror" SCFLAGS=" " COMPILE_ONLY=1	# warn5_level3.fs
-NoMT	SOURCE=warn4_level5.fs ISCFLAGS="--warn:4 --warnaserror" SCFLAGS=" " COMPILE_ONLY=1	# warn5_level4.fs
-NoMT	SOURCE=warn5_level5.fs ISCFLAGS="--warn:5 --warnaserror" SCFLAGS=" " COMPILE_ONLY=1	# warn5_level5.fs
-NoMT	SOURCE=warn5_level5w.fs ISCFLAGS="--warn:5"              SCFLAGS=" " COMPILE_ONLY=1	# warn5_level5w.fs
+NoMT	SOURCE=warn0_level5.fs SCFLAGS="--warn:0 --warnaserror"  COMPILE_ONLY=1	# warn5_level0.fs
+NoMT	SOURCE=warn1_level5.fs SCFLAGS="--warn:1 --warnaserror"  COMPILE_ONLY=1	# warn5_level1.fs
+NoMT	SOURCE=warn2_level5.fs SCFLAGS="--warn:2 --warnaserror"  COMPILE_ONLY=1	# warn5_level2.fs
+NoMT	SOURCE=warn3_level5.fs SCFLAGS="--warn:3 --warnaserror"  COMPILE_ONLY=1	# warn5_level3.fs
+NoMT	SOURCE=warn4_level5.fs SCFLAGS="--warn:4 --warnaserror"  COMPILE_ONLY=1	# warn5_level4.fs
+NoMT	SOURCE=warn5_level5.fs SCFLAGS="--warn:5 --warnaserror"  COMPILE_ONLY=1	# warn5_level5.fs
+NoMT	SOURCE=warn5_level5w.fs SCFLAGS="--warn:5"               COMPILE_ONLY=1	# warn5_level5w.fs
 
-	SOURCE=invalid_warning_level_6.fs ISCFLAGS="--warn:6" SCFLAGS=" "	# invalid_warning_level_6.fs
-	SOURCE=nowarn.fs ISCFLAGS="--warnaserror" 	# nowarn.fs
+	SOURCE=invalid_warning_level_6.fs SCFLAGS="--warn:6" 	# invalid_warning_level_6.fs
+	SOURCE=nowarn.fs SCFLAGS="--warnaserror" 	# nowarn.fs
 
-	SOURCE=nowarn_with_warnaserror01.fs ISCFLAGS="--warnaserror --warn:4"  SCFLAGS=" " COMPILE_ONLY=1	# nowarn_with_warnaserror01.fs
-	SOURCE=nowarn_with_warnaserror02.fs ISCFLAGS="--warnaserror --warn:4"  SCFLAGS=" " COMPILE_ONLY=1	# nowarn_with_warnaserror02.fs
-	SOURCE=nowarn_with_warnaserror03.fs ISCFLAGS="--warnaserror --warn:4"  SCFLAGS=" " COMPILE_ONLY=1 	# nowarn_with_warnaserror03.fs
+	SOURCE=nowarn_with_warnaserror01.fs SCFLAGS="--warnaserror --warn:4"   COMPILE_ONLY=1	# nowarn_with_warnaserror01.fs
+	SOURCE=nowarn_with_warnaserror02.fs SCFLAGS="--warnaserror --warn:4"   COMPILE_ONLY=1	# nowarn_with_warnaserror02.fs
+	SOURCE=nowarn_with_warnaserror03.fs SCFLAGS="--warnaserror --warn:4"   COMPILE_ONLY=1 	# nowarn_with_warnaserror03.fs
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/warnaserror/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/warnaserror/env.lst
index 0959f3ae957..f4266b574c3 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/warnaserror/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/warnaserror/env.lst
@@ -1,18 +1,18 @@
-	SOURCE=t1.fs ISCFLAGS="--warnaserror+ --warnaserror-:25,26,988	# enabled, excl list with all warnings, list with >1 element
-	SOURCE=t2.fs ISCFLAGS="--warnaserror+ --warnaserror-:25,26	# enabled, excl list with some warning, list with >1 element
-	SOURCE=t3.fs ISCFLAGS="--warnaserror+ --warnaserror-:25		# enabled, excl list with one warning, list with 1 element
+	SOURCE=t1.fs SCFLAGS="--warnaserror+ --warnaserror-:25,26,988	# enabled, excl list with all warnings, list with >1 element
+	SOURCE=t2.fs SCFLAGS="--warnaserror+ --warnaserror-:25,26	# enabled, excl list with some warning, list with >1 element
+	SOURCE=t3.fs SCFLAGS="--warnaserror+ --warnaserror-:25		# enabled, excl list with one warning, list with 1 element
 
-	SOURCE=t4.fs ISCFLAGS="--warnaserror+ --warnaserror+:25,26,988	# enabled, incl list with all warnings, list with >1 element
-	SOURCE=t5.fs ISCFLAGS="--warnaserror+ --warnaserror+:25,26	# enabled, incl list with some warning, list with >1 element
-	SOURCE=t6.fs ISCFLAGS="--warnaserror+ --warnaserror+:25		# enabled, incl list with one warning, list with 1 element
+	SOURCE=t4.fs SCFLAGS="--warnaserror+ --warnaserror+:25,26,988	# enabled, incl list with all warnings, list with >1 element
+	SOURCE=t5.fs SCFLAGS="--warnaserror+ --warnaserror+:25,26	# enabled, incl list with some warning, list with >1 element
+	SOURCE=t6.fs SCFLAGS="--warnaserror+ --warnaserror+:25		# enabled, incl list with one warning, list with 1 element
 
-	SOURCE=t7.fs ISCFLAGS="--warnaserror- --warnaserror-:25,26,988	# disabled, excl list with all warnings, list with >1 element
-	SOURCE=t8.fs ISCFLAGS="--warnaserror- --warnaserror-:25,26	# disabled, excl list with some warning, list with >1 element
-	SOURCE=t9.fs ISCFLAGS="--warnaserror- --warnaserror-:25		# disabled, excl list with one warning, list with 1 element
+	SOURCE=t7.fs SCFLAGS="--warnaserror- --warnaserror-:25,26,988	# disabled, excl list with all warnings, list with >1 element
+	SOURCE=t8.fs SCFLAGS="--warnaserror- --warnaserror-:25,26	# disabled, excl list with some warning, list with >1 element
+	SOURCE=t9.fs SCFLAGS="--warnaserror- --warnaserror-:25		# disabled, excl list with one warning, list with 1 element
 
-	SOURCE=t10.fs ISCFLAGS="--warnaserror- --warnaserror+:25,26,988	# disabled, incl list with all warnings, list with >1 element
-	SOURCE=t11.fs ISCFLAGS="--warnaserror- --warnaserror+:25,26	# disabled, incl list with some warning, list with >1 element
-	SOURCE=t12.fs ISCFLAGS="--warnaserror- --warnaserror+:25		# disabled, incl list with one warning, list with 1 element
+	SOURCE=t10.fs SCFLAGS="--warnaserror- --warnaserror+:25,26,988	# disabled, incl list with all warnings, list with >1 element
+	SOURCE=t11.fs SCFLAGS="--warnaserror- --warnaserror+:25,26	# disabled, incl list with some warning, list with >1 element
+	SOURCE=t12.fs SCFLAGS="--warnaserror- --warnaserror+:25		# disabled, incl list with one warning, list with 1 element
 
 
 
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/warnon/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/warnon/env.lst
index f8117e604a1..79000e59bec 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/warnon/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/warnon/env.lst
@@ -1,3 +1,3 @@
-	SOURCE=warnon01.fs  ISCFLAGS="--warnon:1182" SCFLAGS="--test:ErrorRanges" COMPILE_ONLY=1		# warnon01.fs
-	SOURCE=warnon01.fsx ISCFLAGS="--warnon:1182" SCFLAGS=" "                  COMPILE_ONLY=1 FSIMODE=PIPE	# warnon01.fsx
+	SOURCE=warnon01.fs  SCFLAGS="--warnon:1182 --test:ErrorRanges" COMPILE_ONLY=1		# warnon01.fs
+	SOURCE=warnon01.fsx SCFLAGS="--warnon:1182"                   COMPILE_ONLY=1 FSIMODE=PIPE	# warnon01.fsx
 
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/win32res/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsc/win32res/env.lst
index 2ae6cc75f8d..a518278a70a 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsc/win32res/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsc/win32res/env.lst
@@ -1,28 +1,28 @@
 # Functional: the option does what it is meant to do
 
 # Good res
-	SOURCE=wellformedres01.fs  COMPILE_ONLY=1 ISCFLAGS="--win32res goodresfile.res" # wellformedres01.fs
+	SOURCE=wellformedres01.fs  COMPILE_ONLY=1 SCFLAGS="--win32res goodresfile.res" # wellformedres01.fs
 # Bad res
-	SOURCE=E_malformedres01.fs COMPILE_ONLY=1 ISCFLAGS="--win32res badresfile.res" 	# E_malformedres01.fs
+	SOURCE=E_malformedres01.fs COMPILE_ONLY=1 SCFLAGS="--win32res badresfile.res" 	# E_malformedres01.fs
 
 # Multiple res
-	SOURCE=wellformedres02.fs  COMPILE_ONLY=1 ISCFLAGS="--win32res goodresfile.res --win32res goodresfile2.res"	# wellformedres02a.fs
-	SOURCE=wellformedres02.fs  COMPILE_ONLY=1 ISCFLAGS="--win32res goodresfile.res --win32res goodresfile.res"	# wellformedres02b.fs
+	SOURCE=wellformedres02.fs  COMPILE_ONLY=1 SCFLAGS="--win32res goodresfile.res --win32res goodresfile2.res"	# wellformedres02a.fs
+	SOURCE=wellformedres02.fs  COMPILE_ONLY=1 SCFLAGS="--win32res goodresfile.res --win32res goodresfile.res"	# wellformedres02b.fs
 
 # Option is case sentitive
-	SOURCE=error_01.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--Win32RES goodresfile.res"	# --Win32RES
-	SOURCE=error_02.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--WIN32res goodresfile.res"	# --WIN32res
+	SOURCE=error_01.fs COMPILE_ONLY=1  SCFLAGS="--Win32RES goodresfile.res"	# --Win32RES
+	SOURCE=error_02.fs COMPILE_ONLY=1  SCFLAGS="--WIN32res goodresfile.res"	# --WIN32res
 
 # Empty file?
-	SOURCE=error_03.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--win32res \"\""		# empty res
+	SOURCE=error_03.fs COMPILE_ONLY=1  SCFLAGS="--win32res \"\""		# empty res
 
 # Mispelled options
-	SOURCE=error_04.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--win32res+ goodresfile.res"
-	SOURCE=error_04.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--win32res- goodresfile.res"
-	SOURCE=error_04.fs COMPILE_ONLY=1 ISCFLAGS=" " SCFLAGS="--win32resX goodresfile.res"
+	SOURCE=error_04.fs COMPILE_ONLY=1  SCFLAGS="--win32res+ goodresfile.res"
+	SOURCE=error_04.fs COMPILE_ONLY=1  SCFLAGS="--win32res- goodresfile.res"
+	SOURCE=error_04.fs COMPILE_ONLY=1  SCFLAGS="--win32resX goodresfile.res"
 
 # Missing argument
-	SOURCE=error_05.fs COMPILE_ONLY=1 ISCFLAGS=" " TAILFLAGS="--win32res"
+	SOURCE=error_05.fs COMPILE_ONLY=1  TAILFLAGS="--win32res"
 
 # Option is no available in FSI.exe
-	SOURCE=E_UnrecognizedArgument01.fs ISCFLAGS=" " IFSIFLAGS="--win32res goodresfile.res" FSIMODE=EXEC	# E_UnrecognizedArgument01.fs
\ No newline at end of file
+	SOURCE=E_UnrecognizedArgument01.fs  SCFLAGS="--win32res goodresfile.res" FSIMODE=EXEC	# E_UnrecognizedArgument01.fs
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/arguments/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsi/arguments/env.lst
index 5d490883e76..ae8a781b664 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsi/arguments/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsi/arguments/env.lst
@@ -1,18 +1,18 @@
 # Script file tests
-	SOURCE=PassedArguments01.fsx COMPILE_ONLY=1 FSIMODE=FEED IFSIFLAGS=" " SCFLAGS=" " 						# script-feed-no-arg
-	SOURCE=PassedArguments02.fsx COMPILE_ONLY=1 FSIMODE=FEED IFSIFLAGS=" " SCFLAGS=" " TAILFLAGS="Alpha \"Beta Gamma\" foo.fs"	# script-feed-with-args
+	SOURCE=PassedArguments01.fsx COMPILE_ONLY=1 FSIMODE=FEED   						# script-feed-no-arg
+	SOURCE=PassedArguments02.fsx COMPILE_ONLY=1 FSIMODE=FEED   TAILFLAGS="Alpha \"Beta Gamma\" foo.fs"	# script-feed-with-args
 
 # Placement conditions
-	SOURCE=error01.fsx FSIMODE=EXEC COMPILE_ONLY=1 SCFLAGS=" " IFSIFLAGS="-- " 							# script-as-fsi-arg
-	SOURCE=error02.fsx FSIMODE=EXEC COMPILE_ONLY=1 SCFLAGS=" " IFSIFLAGS="Alpha" 							# incorrect-fsi-argument
+	SOURCE=error01.fsx FSIMODE=EXEC COMPILE_ONLY=1  SCFLAGS="-- " 							# script-as-fsi-arg
+	SOURCE=error02.fsx FSIMODE=EXEC COMPILE_ONLY=1  SCFLAGS="Alpha" 							# incorrect-fsi-argument
 
 # Code file tests
-	SOURCE=PassedArguments03.fs COMPILE_ONLY=1 FSIMODE=EXEC IFSIFLAGS=" " SCFLAGS=" " 						# codefile-exec-no-arg
-	SOURCE=error03.fs COMPILE_ONLY=1 FSIMODE=EXEC IFSIFLAGS=" " SCFLAGS=" " TAILFLAGS="Alpha \"Beta Gamma\" foo.fs"			# codefile-exec-with-args
+	SOURCE=PassedArguments03.fs COMPILE_ONLY=1 FSIMODE=EXEC   						# codefile-exec-no-arg
+	SOURCE=error03.fs COMPILE_ONLY=1 FSIMODE=EXEC   TAILFLAGS="Alpha \"Beta Gamma\" foo.fs"			# codefile-exec-with-args
 
 # [--use:]
-	SOURCE=PassedArguments04.fsx FSIMODE=FEED COMPILE_ONLY=1 SCFLAGS=" " IFSIFLAGS="--use:PassedArguments04.fsx" 			# script-use
+	SOURCE=PassedArguments04.fsx FSIMODE=FEED COMPILE_ONLY=1  SCFLAGS="--use:PassedArguments04.fsx" 			# script-use
 	
 # referencing
-	SOURCE=Helper.fs FSIMODE=EXEC COMPILE_ONLY=1 SCFLAGS=" " IFSIFLAGS="-r:System.Drawing.dll" 										# codefile-ref-exec
-	SOURCE=PassedArguments05.fsx FSIMODE=FEED COMPILE_ONLY=1 SCFLAGS=" " IFSIFLAGS="-r:Helper.dll" TAILFLAGS="1 1" PRECMD="\$FSC_PIPE --target:library Helper.fs" 		# sciprt-feed-with-ref-dll
\ No newline at end of file
+	SOURCE=Helper.fs FSIMODE=EXEC COMPILE_ONLY=1  SCFLAGS="-r:System.Drawing.dll" 										# codefile-ref-exec
+	SOURCE=PassedArguments05.fsx FSIMODE=FEED COMPILE_ONLY=1  SCFLAGS="-r:Helper.dll" TAILFLAGS="1 1" PRECMD="\$FSC_PIPE --target:library Helper.fs" 		# sciprt-feed-with-ref-dll
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/nologo/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsi/nologo/env.lst
index de9451dd556..001ea23e12d 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsi/nologo/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsi/nologo/env.lst
@@ -1,2 +1,2 @@
-	SOURCE=nologo01.fsx COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS=" " IFSIFLAGS="--nologo"	# nologo01.fsx
-ReqENU	SOURCE=nologo02.fsx COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS=" " IFSIFLAGS=" "		# nologo02.fsx
+	SOURCE=nologo01.fsx COMPILE_ONLY=1 FSIMODE=PIPE  SCFLAGS="--nologo"	# nologo01.fsx
+ReqENU	SOURCE=nologo02.fsx COMPILE_ONLY=1 FSIMODE=PIPE  		# nologo02.fsx
diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/times/env.lst b/tests/fsharpqa/Source/CompilerOptions/fsi/times/env.lst
index 4e265a6d5b9..2f1494e0696 100644
--- a/tests/fsharpqa/Source/CompilerOptions/fsi/times/env.lst
+++ b/tests/fsharpqa/Source/CompilerOptions/fsi/times/env.lst
@@ -1,13 +1,13 @@
 # As argument, after --
-	SOURCE=asargument.fsx COMPILE_ONLY=1 IFSIFLAGS=" " SCFLAGS=" " TAILFLAGS="-- --times"        FSIMODE=EXEC
+	SOURCE=asargument.fsx COMPILE_ONLY=1   TAILFLAGS="-- --times"        FSIMODE=EXEC
 
 # Last one wins...
-	SOURCE=times01.fs    COMPILE_ONLY=1 IFSIFLAGS=" " SCFLAGS="--times --times" FSIMODE=PIPE
+	SOURCE=times01.fs    COMPILE_ONLY=1  SCFLAGS="--times --times" FSIMODE=PIPE
 
 # Mispelled options
-	SOURCE=error_02.fs IFSIFLAGS=" " SCFLAGS="--times-"       FSIMODE=EXEC
-	SOURCE=error_03.fs IFSIFLAGS=" " SCFLAGS="--times+"       FSIMODE=EXEC
+	SOURCE=error_02.fs  SCFLAGS="--times-"       FSIMODE=EXEC
+	SOURCE=error_03.fs  SCFLAGS="--times+"       FSIMODE=EXEC
 
 # Missing argument
-	SOURCE=error_04.fs IFSIFLAGS=" " TAILFLAGS="--times:0"    FSIMODE=EXEC
+	SOURCE=error_04.fs  TAILFLAGS="--times:0"    FSIMODE=EXEC
 
diff --git a/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_ExclamationMark01.fs b/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_ExclamationMark01.fs
index 73552619a71..cf5a5e722a6 100644
--- a/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_ExclamationMark01.fs
+++ b/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_ExclamationMark01.fs
@@ -8,8 +8,8 @@
 
 module M
 
-let (!!) x y = List.nth x y;;
-let (!!!) x y = List.nth x y
+let (!!) x y = List.item y x;;
+let (!!!) x y = List.item y x
 
 let err = [1 .. 10] !! 2            // error
 let err2 = [1 .. 10] !!! 2          // error
diff --git a/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_QuestionMark01.fs b/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_QuestionMark01.fs
index 9f3fad44491..01d4a71de04 100644
--- a/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_QuestionMark01.fs
+++ b/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_QuestionMark01.fs
@@ -9,8 +9,8 @@
 //Invalid prefix operator
 module M
 
-let (?!!) x y = List.nth x y         // error
-let (?!!!) x y = List.nth x y        // error
+let (?!!) x y = List.item y x         // error
+let (?!!!) x y = List.item y x        // error
 
 let err = [1 .. 10] ?!! 2            // error
 let err2 = [1 .. 10] ?!!! 2          // error
diff --git a/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_QuestionMark02.fs b/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_QuestionMark02.fs
index e5a7eaa96ba..395ea8165dc 100644
--- a/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_QuestionMark02.fs
+++ b/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_QuestionMark02.fs
@@ -8,7 +8,7 @@
 //Invalid prefix operator$
 
 module M
-let (?!!!) x y = List.nth y x
+let (?!!!) x y = List.item x y
 
 let ok1 = ?!! [1..10] 2
 let ok2 = ?!!! 3 [1..10]
diff --git a/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_Tilde01.fs b/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_Tilde01.fs
index 11b7ce98160..e7011eda01c 100644
--- a/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_Tilde01.fs
+++ b/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_Tilde01.fs
@@ -11,8 +11,8 @@
 
 module M
 
-let (~!!) x y = List.nth x y
-let (~!!!) x y = List.nth x y
+let (~!!) x y = List.item y x
+let (~!!!) x y = List.item y x
 
 let err = [1 .. 10] ~!! 2            // error
 let err2 = [1 .. 10] ~!!! 2          // error
diff --git a/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_Tilde02.fs b/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_Tilde02.fs
index beab160f664..f24430346ab 100644
--- a/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_Tilde02.fs
+++ b/tests/fsharpqa/Source/Conformance/BasicGrammarElements/PrecedenceAndOperators/E_Tilde02.fs
@@ -9,8 +9,8 @@
 //Invalid prefix operator$
 module M
 
-let (~!!) x y = List.nth x y;;
-let (~!!!) x y = List.nth y x
+let (~!!) x y = List.item y x;;
+let (~!!!) x y = List.item x y
 
 let ok1 = ~!! [1..10] 2        // ok
 let ok2 = ~!!! 3 [1..10]       // ok
diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/ArgumentsOfAllTypes/env.lst b/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/ArgumentsOfAllTypes/env.lst
index b56d1f25455..cff630d5bd0 100644
--- a/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/ArgumentsOfAllTypes/env.lst
+++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/CustomAttributes/ArgumentsOfAllTypes/env.lst
@@ -8,34 +8,34 @@ NoMT	SOURCE=dummy.fs PRECMD="\$CSC_PIPE CSharpConsumer.cs /r:FSharpAttrLibrary.d
 # .. which are eventually consumed again from F#
 NoMT	SOURCE=dummy.fs PRECMD="\$CSC_PIPE /target:library CSLibraryWithAttributes.cs"	# CSLibraryWithAttributes.cs
 NoMT	SOURCE=System_Int16.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_Int16.fsx
-NoMT	SOURCE=System_Int16_Consumer.fsx SCFLAGS="   -r System_Int16.dll"	# System_Int16_Consumer.fsx
+NoMT	SOURCE=System_Int16_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_Int16.dll"	# System_Int16_Consumer.fsx
 NoMT	SOURCE=System_Int32.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_Int32.fsx
-NoMT	SOURCE=System_Int32_Consumer.fsx SCFLAGS="   -r System_Int32.dll"	# System_Int32_Consumer.fsx
+NoMT	SOURCE=System_Int32_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_Int32.dll"	# System_Int32_Consumer.fsx
 NoMT	SOURCE=System_Int64.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_Int64.fsx
-NoMT	SOURCE=System_Int64_Consumer.fsx SCFLAGS="   -r System_Int64.dll"	# System_Int64_Consumer.fsx
+NoMT	SOURCE=System_Int64_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_Int64.dll"	# System_Int64_Consumer.fsx
 NoMT	SOURCE=System_UInt16.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_UInt16.fsx
-NoMT	SOURCE=System_UInt16_Consumer.fsx SCFLAGS="   -r System_UInt16.dll"	# System_UInt16_Consumer.fsx
+NoMT	SOURCE=System_UInt16_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_UInt16.dll"	# System_UInt16_Consumer.fsx
 NoMT	SOURCE=System_UInt32.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_UInt32.fsx
-NoMT	SOURCE=System_UInt32_Consumer.fsx SCFLAGS="   -r System_UInt32.dll"	# System_UInt32_Consumer.fsx
+NoMT	SOURCE=System_UInt32_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_UInt32.dll"	# System_UInt32_Consumer.fsx
 NoMT	SOURCE=System_UInt64.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_UInt64.fsx
-NoMT	SOURCE=System_UInt64_Consumer.fsx SCFLAGS="   -r System_UInt64.dll"	# System_UInt64_Consumer.fsx
+NoMT	SOURCE=System_UInt64_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_UInt64.dll"	# System_UInt64_Consumer.fsx
 NoMT	SOURCE=System_Char.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_Char.fsx
-NoMT	SOURCE=System_Char_Consumer.fsx SCFLAGS="   -r System_Char.dll"	# System_Char_Consumer.fsx
+NoMT	SOURCE=System_Char_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_Char.dll"	# System_Char_Consumer.fsx
 NoMT	SOURCE=System_Byte.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_Byte.fsx
-NoMT	SOURCE=System_Byte_Consumer.fsx SCFLAGS="   -r System_Byte.dll"	# System_Byte_Consumer.fsx
+NoMT	SOURCE=System_Byte_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_Byte.dll"	# System_Byte_Consumer.fsx
 NoMT	SOURCE=System_SByte.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_SByte.fsx
-NoMT	SOURCE=System_SByte_Consumer.fsx SCFLAGS="   -r System_SByte.dll"	# System_SByte_Consumer.fsx
+NoMT	SOURCE=System_SByte_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_SByte.dll"	# System_SByte_Consumer.fsx
 NoMT	SOURCE=System_Single.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_Single.fsx
-NoMT	SOURCE=System_Single_Consumer.fsx SCFLAGS="   -r System_Single.dll"	# System_Single_Consumer.fsx
+NoMT	SOURCE=System_Single_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_Single.dll"	# System_Single_Consumer.fsx
 NoMT	SOURCE=System_Double.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_Double.fsx
-NoMT	SOURCE=System_Double_Consumer.fsx SCFLAGS="   -r System_Double.dll"	# System_Double_Consumer.fsx
+NoMT	SOURCE=System_Double_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_Double.dll"	# System_Double_Consumer.fsx
 NoMT	SOURCE=System_String.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_String.fsx
-NoMT	SOURCE=System_String_Consumer.fsx SCFLAGS="   -r System_String.dll"	# System_String_Consumer.fsx
+NoMT	SOURCE=System_String_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_String.dll"	# System_String_Consumer.fsx
 NoMT	SOURCE=System_DateTimeKind.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_DateTimeKind.fsx
-NoMT	SOURCE=System_DateTimeKind_Consumer.fsx SCFLAGS="   -r System_DateTimeKind.dll"	# System_DateTimeKind_Consumer.fsx
+NoMT	SOURCE=System_DateTimeKind_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_DateTimeKind.dll"	# System_DateTimeKind_Consumer.fsx
 NoMT	SOURCE=System_Type.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_Type.fsx
-NoMT	SOURCE=System_Type_Consumer.fsx SCFLAGS="   -r System_Type.dll"	# System_Type_Consumer.fsx
+NoMT	SOURCE=System_Type_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_Type.dll"	# System_Type_Consumer.fsx
 NoMT	SOURCE=System_Object.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_Object.fsx
-NoMT	SOURCE=System_Object_Consumer.fsx SCFLAGS="   -r System_Object.dll"	# System_Object_Consumer.fsx
+NoMT	SOURCE=System_Object_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_Object.dll"	# System_Object_Consumer.fsx
 NoMT	SOURCE=System_TypeArray.fsx          SCFLAGS="-a -r CSLibraryWithAttributes.dll"	# System_TypeArray.fsx
-NoMT	SOURCE=System_TypeArray_Consumer.fsx SCFLAGS="   -r System_TypeArray.dll"	# System_TypeArray_Consumer.fsx
+NoMT	SOURCE=System_TypeArray_Consumer.fsx SCFLAGS="-r CSLibraryWithAttributes.dll   -r System_TypeArray.dll"	# System_TypeArray_Consumer.fsx
diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/Events/basic/Regression01.fs b/tests/fsharpqa/Source/Conformance/DeclarationElements/Events/basic/Regression01.fs
index 635c5fe191b..86d1a86c011 100644
--- a/tests/fsharpqa/Source/Conformance/DeclarationElements/Events/basic/Regression01.fs
+++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/Events/basic/Regression01.fs
@@ -32,14 +32,14 @@ let test() =
 
     // Hook up event handler, so when the event fires
     // m_eventFlag is set to whatever the param was.
-    let m_eventFlag1 = ref None
-    let eventHandler1 = new Handler (fun (_ : obj)  (arg : Action) -> m_eventFlag1 := Some(arg))
+    let mutable m_eventFlag1 = None
+    let eventHandler1 = new Handler (fun (_ : obj)  (arg : Action) -> m_eventFlag1 <- Some(arg))
     pinkSqueekyToy.Squeek.Publish.AddHandler(eventHandler1)
 
     // Poke the toy, which should cause it to squeek
-    m_eventFlag1 := None
+    m_eventFlag1 <- None
     pinkSqueekyToy.ApplyAction(Poke)
-    if !m_eventFlag1 <> Some(Poke) then exit 1
+    if m_eventFlag1 <> Some(Poke) then exit 1
 
     // Now add another event handler
     let m_eventFlag2 = ref None
@@ -48,31 +48,31 @@ let test() =
 
     // Now squeeze the toy, verifying that both event handlers
     // were called.
-    m_eventFlag1 := None
+    m_eventFlag1 <- None
     m_eventFlag2 := None
 
     pinkSqueekyToy.ApplyAction(Squeeze)
-    if !m_eventFlag1 <> Some(Squeeze) then exit 1
+    if m_eventFlag1 <> Some(Squeeze) then exit 1
     if !m_eventFlag2 <> Some(Squeeze) then exit 1
      
     // Remove one of the event handlers
     pinkSqueekyToy.Squeek.Publish.RemoveHandler(eventHandler1)
-    m_eventFlag1 := None
+    m_eventFlag1 <- None
     m_eventFlag2 := None
 
     // Event handler 1 should not have fired.
     pinkSqueekyToy.ApplyAction(Squeeze)
-    if !m_eventFlag1 <> None then exit 1
+    if m_eventFlag1 <> None then exit 1
     if !m_eventFlag2 <> Some(Squeeze) then exit 1
 
     // Remove the last event handler
     pinkSqueekyToy.Squeek.Publish.RemoveHandler(eventHandler2)
-    m_eventFlag1 := None
+    m_eventFlag1 <- None
     m_eventFlag2 := None
 
     // Event handler 1 should not have fired.
     pinkSqueekyToy.ApplyAction(Squeeze)
-    if !m_eventFlag1 <> None then exit 1
+    if m_eventFlag1 <> None then exit 1
     if !m_eventFlag2 <> None then exit 1
 
 // Run our test
diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/MethodsAndProperties/Properties05.fs b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/MethodsAndProperties/Properties05.fs
index 53ab1140177..e01ded3d93e 100644
--- a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/MethodsAndProperties/Properties05.fs
+++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/MethodsAndProperties/Properties05.fs
@@ -12,35 +12,35 @@ type IAmWriteOnly =
 type IAmReadWrite =
     abstract RWValue : int with get, set
 
-let ROCalled = ref false
-let WOCalled = ref false
-let RWRCalled = ref false
-let RWWCalled = ref false
+let mutable ROCalled = false
+let mutable WOCalled = false
+let mutable RWRCalled = false
+let mutable RWWCalled = false
 
 type Test() =
     interface IAmReadOnly with
-        override this.ROValue with get() = ROCalled := true; 42
+        override this.ROValue with get() = ROCalled <- true; 42
     interface IAmWriteOnly with
-        override this.WOValue with set x = WOCalled := true; ()
+        override this.WOValue with set x = WOCalled <- true; ()
     interface IAmReadWrite with
-        override this.RWValue with get() = RWRCalled := true; 42
-                              and  set x = RWWCalled := true; ()
+        override this.RWValue with get() = RWRCalled <- true; 42
+                              and  set x = RWWCalled <- true; ()
 
 let t = new Test()
 
-if !ROCalled <> false then exit 1
+if ROCalled <> false then exit 1
 if (t :> IAmReadOnly).ROValue <> 42 then exit 1
-if !ROCalled <> true then exit 1
+if ROCalled <> true then exit 1
 
-if !WOCalled <> false then exit 1
+if WOCalled <> false then exit 1
 (t :> IAmWriteOnly).WOValue <- 4 
-if !WOCalled <> true then exit 1
+if WOCalled <> true then exit 1
 
-if !RWRCalled <> false then exit 1
-if !RWWCalled <> false then exit 1
+if RWRCalled <> false then exit 1
+if RWWCalled <> false then exit 1
 if (t :> IAmReadWrite).RWValue <> 42 then exit 1
 (t :> IAmReadWrite).RWValue <- 4 
-if !RWRCalled <> true then exit 1
-if !RWWCalled <> true then exit 1
+if RWRCalled <> true then exit 1
+if RWWCalled <> true then exit 1
 
 exit 0
diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/PropertySetterAfterConstruction01NamedExtensions.fs b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/PropertySetterAfterConstruction01NamedExtensions.fs
new file mode 100644
index 00000000000..9ad3a74d951
--- /dev/null
+++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/PropertySetterAfterConstruction01NamedExtensions.fs
@@ -0,0 +1,24 @@
+// #Regression #Conformance #DeclarationElements #MemberDefinitions #NamedArguments 
+#light
+
+// FSB 1368, named arguments implicitly using property setters for generic class do not typecheck correctly
+
+module GenericClass =
+    type S<'a,'b> =
+        class
+           val mutable x : 'a
+           val mutable y : 'b
+           member obj.X with set(v) = obj.x <- v
+           member obj.Y with set(v) = obj.y <- v
+           new(a,b) = { x=a; y=b }
+        end
+    type S<'a,'b> with
+        member x.XProxy with set v = x.X  <- v
+        member x.YProxy with set v = x.Y  <- v
+
+    // Standard construction
+    let x1 = S(1,"1", XProxy = 2, YProxy = "2")
+    if x1.x <> 2   then exit 1
+    if x1.y <> "2" then exit 1
+    exit 0
+
diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/PropertySetterAfterConstruction01NamedExtensionsInheritance.fs b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/PropertySetterAfterConstruction01NamedExtensionsInheritance.fs
new file mode 100644
index 00000000000..947f80384c4
--- /dev/null
+++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/PropertySetterAfterConstruction01NamedExtensionsInheritance.fs
@@ -0,0 +1,34 @@
+// #Regression #Conformance #DeclarationElements #MemberDefinitions #NamedArguments 
+#light
+
+module GenericInheritedClass2 =
+    type R =
+        class
+           val mutable w : System.Collections.Generic.List
+           member obj.W with set(v) = obj.w <- v
+           new() = { w = new System.Collections.Generic.List()}
+        end
+
+    type S =        
+        class
+           inherit R
+           val mutable x : int
+           val mutable y : string
+           member obj.X with set(v) = obj.x <- v
+           member obj.Y with set(v) = obj.y <- v
+           new(a,b) = { inherit R(); x=a; y=b }
+        end
+module GenericInheritedClassExt2 =
+    type GenericInheritedClass2.S with
+        member x.A with set v = x.X  <- v + 1
+        member x.B with set v = x.Y  <- v + "1"
+    type GenericInheritedClass2.R with
+        member x.C with set v =  v |> Seq.iter x.w.Add 
+
+    // Standard construction
+    let x1 = GenericInheritedClass2.S(1,"1", A = 2, B = "2",C = [ 3] )
+    if x1.x <> 3   then exit 1
+    if x1.y <> "21" then exit 1
+    if x1.w.Count <> 1 then exit 1
+    exit 0
+
diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/PropertySetterAfterConstruction01NamedExtensionsOptional.fs b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/PropertySetterAfterConstruction01NamedExtensionsOptional.fs
new file mode 100644
index 00000000000..0d65a4f5dd5
--- /dev/null
+++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/PropertySetterAfterConstruction01NamedExtensionsOptional.fs
@@ -0,0 +1,36 @@
+// #Regression #Conformance #DeclarationElements #MemberDefinitions #NamedArguments 
+#light
+
+
+module GenericClass =
+    type S<'a,'b> =
+        class
+           val mutable x : 'a
+           val mutable y : 'b
+           member obj.X with set(v) = obj.x <- v
+           member obj.Y with set(v) = obj.y <- v
+           new(a,b) = { x=a; y=b }
+        end
+    type S<'a,'b> with
+        member x.XProxyIntrinsic with set (v:'a) = x.X  <- v
+        member x.YProxyIntrinsic with set (v:'b) = x.Y  <- v
+module GenericClassExt =
+    
+    module Extensions =
+        open GenericClass
+        type S<'a,'b> with
+            member x.XProxyOptional with set (v:'a) = x.X  <- v
+            member x.YProxyOptional with set (v:'b) = x.Y  <- v
+
+module Test =
+    open GenericClassExt.Extensions
+    open GenericClass
+    let x1 = S<_,_>(1,"1", XProxyIntrinsic = 44, YProxyIntrinsic = "44")
+    if x1.x <> 44   then exit 1
+    if x1.y <> "44" then exit 1
+
+    let x3 = S<_,_>(1,"1", XProxyOptional = 44, YProxyOptional = "44")
+    if x3.x <> 44   then exit 1
+    if x3.y <> "44" then exit 1
+
+    exit 0
diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/PropertySetterAfterConstruction02NamedExtensions.fs b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/PropertySetterAfterConstruction02NamedExtensions.fs
new file mode 100644
index 00000000000..60785ec9861
--- /dev/null
+++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/PropertySetterAfterConstruction02NamedExtensions.fs
@@ -0,0 +1,39 @@
+// #Regression #Conformance #DeclarationElements #MemberDefinitions #NamedArguments 
+#light
+
+// FSB 1368, named arguments implicitly using property setters for generic class do not typecheck correctly
+
+module GenericClass =
+    type S<'a,'b> =
+        class
+           val mutable x : 'a
+           val mutable y : 'b
+           member obj.X with set(v) = obj.x <- v
+           member obj.Y with set(v) = obj.y <- v
+           new(a,b) = { x=a; y=b }
+        end
+    type S<'a,'b> with
+        member x.XProxyIntrinsic with set (v:'a) = x.X  <- v
+        member x.YProxyIntrinsic with set (v:'b) = x.Y  <- v
+    module Extensions =
+        type S<'a,'b> with
+            member x.XProxyOptional with set (v:'a) = x.X  <- v
+            member x.YProxyOptional with set (v:'b) = x.Y  <- v
+    
+    open Extensions
+ 
+    // Standard construction
+    let x1 = S(1,"1", XProxyIntrinsic = 42, YProxyIntrinsic = "42")
+    if x1.x <> 42   then exit 1
+    if x1.y <> "42" then exit 1
+    
+    let x2 = S<_,_>(1,"1")
+    x2.XProxyOptional <- 43
+    x2.YProxyOptional <- "43"
+    if x2.x <> 43   then exit 1
+    if x2.y <> "43" then exit 1
+ 
+    let x3 = S<_,_>(1,"1", XProxyOptional = 44, YProxyOptional = "44")
+    if x3.x <> 44   then exit 1
+    if x3.y <> "44" then exit 1
+    exit 0
diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/env.lst b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/env.lst
index ec1728d9482..02dbe48692d 100644
--- a/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/env.lst
+++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/NamedArguments/env.lst
@@ -7,8 +7,11 @@
 	SOURCE=mixNamedNonNamed.fs		# mixNamedNonNamed.fs
 	SOURCE=refLibsHaveNamedParams.fs	# refLibsHaveNamedParams.fs
 	SOURCE=E_NumParamMismatch01.fs		# E_NumParamMismatch01.fs
+	SOURCE=PropertySetterAfterConstruction01NamedExtensions.fs	# PropertySetterAfterConstruction01NamedExtensions.fs
+	SOURCE=PropertySetterAfterConstruction01NamedExtensionsInheritance.fs	# PropertySetterAfterConstruction01NamedExtensionsInheritance.fs
+	SOURCE=PropertySetterAfterConstruction01NamedExtensionsOptional.fs	# PropertySetterAfterConstruction01NamedExtensionsOptional.fs	
+	SOURCE=PropertySetterAfterConstruction02NamedExtensions.fs	# PropertySetterAfterConstruction02NamedExtensions.fs
 	SOURCE=PropertySetterAfterConstruction01.fs	# PropertySetterAfterConstruction01.fs
 	SOURCE=PropertySetterAfterConstruction02.fs	# PropertySetterAfterConstruction02.fs
 	SOURCE=E_MisspeltParam01.fs		# E_MisspeltParam01.fs
-
 	SOURCE=E_MustBePrefix.fs		# E_MustBePrefix.fs
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Conformance/DeclarationElements/P-invokeDeclarations/env.lst b/tests/fsharpqa/Source/Conformance/DeclarationElements/P-invokeDeclarations/env.lst
index 5c025ae9373..3e47f5de60a 100644
--- a/tests/fsharpqa/Source/Conformance/DeclarationElements/P-invokeDeclarations/env.lst
+++ b/tests/fsharpqa/Source/Conformance/DeclarationElements/P-invokeDeclarations/env.lst
@@ -6,5 +6,5 @@
 	SOURCE=ComVisible02.fs		# ComVisible02.fs
 
 	SOURCE=E_DLLImportInTypeDef01.fs   SCFLAGS="--test:ErrorRanges"	# E_DLLImportInTypeDef01.fs
-	SOURCE=CallingConventions01.fs    SCFLAGS="--platform:x86"			# CallingConventions01.fs - x86
-	SOURCE=CallingConventions01.fs    SCFLAGS="--platform:x64 --define:AMD64"	# CallingConventions01.fs - x64
+	SOURCE=CallingConventions01.fs    SCFLAGS="--platform:x86"   PLATFORM=x86			# CallingConventions01.fs - x86
+	SOURCE=CallingConventions01.fs    SCFLAGS="--platform:x64 --define:AMD64"   PLATFORM=AMD64	# CallingConventions01.fs - x64
diff --git a/tests/fsharpqa/Source/Conformance/Expressions/BindingExpressions/Binding/MutableLocals01.fs b/tests/fsharpqa/Source/Conformance/Expressions/BindingExpressions/Binding/MutableLocals01.fs
new file mode 100644
index 00000000000..1009b7443b6
--- /dev/null
+++ b/tests/fsharpqa/Source/Conformance/Expressions/BindingExpressions/Binding/MutableLocals01.fs
@@ -0,0 +1,339 @@
+// #in #BindingExpressions
+//
+// This provides conformance testing for capture of local mutable values in closures
+//The mutable local 'exec_test_1' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed. 
+//The mutable local 'ix1' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'ix1d' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'ix2' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'ix3' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'ix4' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'sx1' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'sx2' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'sx3' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'nlx1' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'nlx2' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'nlx1' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'nlx1' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'nlx1' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'seq3' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'nlx1' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'x' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'x' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'x' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+//The mutable local 'x' is implicitly allocated as a reference cell because it has been captured by a closure. This warning is for informational purposes only to indicate where implicit allocations are performed.
+
+
+
+
+
+
+
+module ExecTests =
+
+    let test1() =
+        let mutable exec_test_1 = 1
+        (fun () -> exec_test_1 <- exec_test_1 + 1), (fun () -> exec_test_1 <- exec_test_1 + 2), (fun () -> exec_test_1) 
+
+    let incr, incr2, get = test1()
+
+
+    let v1 = (get())
+    let v2 = (get())
+    incr()
+    let v3 = (get())
+    incr()
+    incr()
+    let v4 = (get())
+    incr2()
+    incr2()
+    let v5 = (get())
+
+    let exp = (1,1,2,4,8)
+
+    let result () = (v1,v2,v3,v4,v5) = exp
+
+    let check() = 
+        if result() then true 
+        else
+            eprintfn "FAIL: (v1,v2,v3,v4,v5) = %A, expected %A" (v1,v2,v3,v4,v5) exp
+            false
+
+
+module IntTests =
+
+    let test0() =
+
+        let ix0_NO = 1
+        [ (fun () -> ix0_NO + 1) ]
+
+    let test1() =
+
+        let mutable ix1 = 1
+        [ (fun () -> ix1 <- ix1 + 1) ]
+
+    let test1z() =
+
+        let mutable ix1z_NOT_IF_OPT = 1
+        let _ = (fun () -> ix1z_NOT_IF_OPT <- ix1z_NOT_IF_OPT + 1)  // throw it away
+        ix1z_NOT_IF_OPT
+
+    let test1b() =
+
+        let mutable ix1b_NOT_IF_OPT = 1
+        let localFunctionThatIsNotGeneric () = ix1b_NOT_IF_OPT <- ix1b_NOT_IF_OPT + 1
+        localFunctionThatIsNotGeneric()
+
+    let test1c() =
+        let mutable ix1c_NOT_IF_OPT = 1
+        let unusedLocalFunctionThatIsNotGeneric () = ix1c_NOT_IF_OPT <- ix1c_NOT_IF_OPT + 1
+        ()
+
+    let test1bg() =
+
+        let mutable ix1bg_NOT_IF_OPT = 1
+        let localFunctionThatIsGeneric (any: 'T) = ix1bg_NOT_IF_OPT <- ix1bg_NOT_IF_OPT + 1
+        localFunctionThatIsGeneric()
+
+    let test1cg() =
+        let mutable ix1cg_NOT_IF_OPT = 1
+        let unusedLocalFunctionThatIsGeneric (any: 'T) = ix1cg_NOT_IF_OPT <- ix1cg_NOT_IF_OPT + 1
+        ()
+
+    let test1d() =
+
+        let mutable ix1d = 1
+        let f () = 
+            printfn "don't inline me"
+            printfn "don't inline me"
+            printfn "don't inline me"
+            printfn "don't inline me"
+            printfn "don't inline me"
+            ix1d <- ix1d + 1
+        f()
+        f()
+        f()
+        f()
+
+
+    let test1e(ix1e_NO: byref) =
+        ix1e_NO <- ix1e_NO + 1
+
+
+
+    let test1f() =
+        let mutable ix1f_NOT_IF_OPT = 1
+        let f () = 
+            printfn "don't inline me"
+            printfn "don't inline me"
+            printfn "don't inline me"
+            printfn "don't inline me"
+            printfn "don't inline me"
+            ix1f_NOT_IF_OPT <- ix1f_NOT_IF_OPT + 1
+        f() // immediate use of a function does get inlined
+
+    (*
+    []
+    type S = 
+       val mutable x : int
+       member this_NO.M() = [ (fun () -> this_NO.x <- this_NO.x + 1) ]
+*)
+
+    let test2() =
+        let mutable ix2 = 1
+        [ (fun () -> 
+                 let xaddr = &ix2
+                 xaddr )]
+
+
+    let test3() =
+        let mutable ix3 = 1
+        [ (fun () -> 
+                 let xaddr = &ix3
+                 xaddr <- 2 )]
+
+    let test4() =
+        let mutable ix4 = 1
+        [ { new obj() with override __.ToString() = (ix4 <- ix4 + 1); "" } ]
+
+    let test4b() =
+        let ix4b_NO = ref 1
+        [ { new obj() with override __.ToString() = (ix4b_NO := ix4b_NO.Value + 1); "" } ]
+
+
+    let mutable ix5_NO = 1
+    let test5() =
+        [ (fun () -> ix5_NO <- ix5_NO + 1) ]
+
+
+    let test6() =
+
+        let mutable ix6_NO = 1
+        let x = 3
+        ix6_NO <- 3
+        [ (fun () -> x) ]
+
+    let test7() =
+        let mutable ix7_NO = 1
+        let x = 3
+        let res = [ (fun () -> x) ]
+        ix7_NO <- 3
+        res
+
+module StringtTests =
+
+    let test1() =
+        let mutable sx1 = "1"
+        [ (fun () -> sx1 <- sx1 + "1")]
+
+    let test2() =
+        let mutable sx2 = "1"
+        [ (fun () -> 
+                 let xaddr = &sx2
+                 xaddr )]
+
+
+    let test3() =
+        let mutable sx3 = "1"
+        [ (fun () -> 
+                 let xaddr = &sx3
+                 xaddr <- "2" )]
+
+
+module NestedLambdas =
+
+    let test1() =
+
+        let mutable nlx1 = 1
+        [ (fun () -> [(fun () -> nlx1 <- nlx1 + 1)]) ]
+
+
+    let test2() =
+        [ (fun () -> 
+             let mutable nlx2 = 1
+             [(fun () -> nlx2 <- nlx2 + 1)]) ]
+
+
+module SeqExpr =
+
+    let test0() =
+        seq { let mutable nlx1 = 1
+              nlx1 <- nlx1 + 1
+              yield nlx1
+              yield nlx1 }
+
+
+    let test0b() =
+        seq { let nlx1 = ref 1
+              yield nlx1
+              yield nlx1 } // leaky escaping reference cells
+
+    let test1() =
+        seq { let mutable nlx1 = 1
+              let f() = nlx1 <- nlx1 + 1
+              yield f()
+              yield f() }
+
+    let test2() =
+        seq { for x in [1..10] do
+                  let mutable nlx1 = 1
+                  let f() =  
+                      nlx1 <- nlx1 + 1; 
+                      nlx1
+                  let g() = nlx1 
+                  yield f
+                  yield g }
+
+    let test3() =
+        let mutable seq3 = 1
+        seq { yield (seq { yield seq3 }) }
+
+
+module AsyncExpr =
+
+    let test0() =
+        async { let mutable nlx1 = 1
+                nlx1 <- 3
+                do! Async.Sleep 10
+                printfn "nlx1 = %d" nlx1
+                nlx1 <- nlx1 + 1 
+                printfn "nlx1 = %d" nlx1
+                do! Async.Sleep 10
+                printfn "nlx1 = %d" nlx1
+                }
+
+    let _ = test0() |> Async.RunSynchronously
+
+
+
+module TryCatch =
+    let foo o s = 
+         let mutable x_NO = 1
+         try 
+            o s x_NO
+         with exn ->
+            x_NO <- 5
+
+    let foo2 o s = 
+         let mutable x_NO = 1
+         try 
+            o s x_NO
+            x_NO <- 5
+         with exn ->
+            ()
+
+    let bar o s = 
+         let mutable x = 1
+         try
+            o ()
+         with exn -> 
+            s := (fun () -> x <- x + 1)
+
+module TryFinally =
+    let foo o s = 
+         let mutable x_NO = 1
+         try 
+            o s x_NO
+         finally
+            x_NO <- 5
+
+    let foo2 o s = 
+         let mutable x_NO = 1
+         try 
+            o s x_NO
+            x_NO <- 5
+         finally
+            s ()
+
+    let bar o s = 
+         let mutable x = 1
+         try
+            o ()
+         finally
+            s := (fun () -> x <- x + 1)
+
+
+module ForLoop =
+    let foo o s = 
+         let mutable x_NO = 1
+         for i in o do
+            x_NO <- x_NO + 1
+
+    let bar o s = 
+         let mutable x = 1
+         for i in o do
+            s := (fun () -> x <- x + 1)
+
+module WhileLoop =
+    let foo o s = 
+         let mutable x_NO = 1
+         while (s x_NO) do 
+            x_NO <- x_NO + 1
+
+    let bar o s = 
+         let mutable x = 1
+         while o x do
+            s := (fun () -> x <- x + 1)
+
+
+module ExitModule =
+    exit (if ExecTests.check() then 0 else 1)
diff --git a/tests/fsharpqa/Source/Conformance/Expressions/BindingExpressions/Binding/env.lst b/tests/fsharpqa/Source/Conformance/Expressions/BindingExpressions/Binding/env.lst
index 927a349f676..e912c777041 100644
--- a/tests/fsharpqa/Source/Conformance/Expressions/BindingExpressions/Binding/env.lst
+++ b/tests/fsharpqa/Source/Conformance/Expressions/BindingExpressions/Binding/env.lst
@@ -11,4 +11,5 @@ NoMT	SOURCE=in04.fsx FSIMODE=PIPE SCFLAGS="--warnaserror+ --test:ErrorRanges"
 NoMT	SOURCE=in05.fsx FSIMODE=PIPE SCFLAGS="--warnaserror+ --test:ErrorRanges --flaterrors" COMPILE_ONLY=1 # in05.fsx
 
 	SOURCE=AmbigLetBinding.fs	# AmbigLetBinding
-	SOURCE=W_TypeInferforGenericType.fs SCFLAGS="--test:ErrorRanges"	# W_TypeInferforGenericType.fs
\ No newline at end of file
+	SOURCE=W_TypeInferforGenericType.fs SCFLAGS="--test:ErrorRanges"	# W_TypeInferforGenericType.fs
+	SOURCE=MutableLocals01.fs SCFLAGS="--warnon:3180 --optimize+ --test:ErrorRanges"
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Conformance/Expressions/ControlFlowExpressions/TryCatch/TryCatch03.fs b/tests/fsharpqa/Source/Conformance/Expressions/ControlFlowExpressions/TryCatch/TryCatch03.fs
new file mode 100644
index 00000000000..3d235c60d43
--- /dev/null
+++ b/tests/fsharpqa/Source/Conformance/Expressions/ControlFlowExpressions/TryCatch/TryCatch03.fs
@@ -0,0 +1,26 @@
+type MyRec = { A : int; B : string }
+
+[]
+type NullType(i:int) = 
+    member __.X = i
+
+let updateRecd x =
+    try
+       { x with A = 42 }
+    with e ->
+       { A = 0; B = "success" }
+       
+if (updateRecd Unchecked.defaultof).B <> "success" then exit 1
+
+let touchType (x : NullType) =
+    try
+       x.X
+    with e ->
+       -1
+       
+if (touchType null) <> -1 then exit 1
+
+exit 0
+       
+
+
diff --git a/tests/fsharpqa/Source/Conformance/Expressions/ControlFlowExpressions/TryCatch/env.lst b/tests/fsharpqa/Source/Conformance/Expressions/ControlFlowExpressions/TryCatch/env.lst
index a469fb80afa..59763263ce8 100644
--- a/tests/fsharpqa/Source/Conformance/Expressions/ControlFlowExpressions/TryCatch/env.lst
+++ b/tests/fsharpqa/Source/Conformance/Expressions/ControlFlowExpressions/TryCatch/env.lst
@@ -1,4 +1,5 @@
 	SOURCE=TryCatch01.fs			# TryCatch01.fs
 	SOURCE=TryCatch02.fs			# TryCatch02.fs
+	SOURCE=TryCatch03.fs			# TryCatch03.fs
 
 	SOURCE=E_RethrowOutsideCatch01.fs	# E_RethrowOutsideCatch01.fs
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Conformance/Expressions/DataExpressions/ObjectExpressions/E_ObjExprWithSameInterface01.fs b/tests/fsharpqa/Source/Conformance/Expressions/DataExpressions/ObjectExpressions/E_ObjExprWithSameInterface01.fs
index f73ee06948e..45f0de9b487 100644
--- a/tests/fsharpqa/Source/Conformance/Expressions/DataExpressions/ObjectExpressions/E_ObjExprWithSameInterface01.fs
+++ b/tests/fsharpqa/Source/Conformance/Expressions/DataExpressions/ObjectExpressions/E_ObjExprWithSameInterface01.fs
@@ -1,6 +1,6 @@
 // #Regression #Conformance #DataExpressions #ObjectConstructors 
 // This was Dev10:854519 and Dev11:5525. The fix was to make this a compile error to avoid a runtime exception.
-//This type implements or inherits the same interface at different generic instantiations 'IQueue<'T>' and 'IQueue'\. This is not permitted in this version of F#\.$
+//This type implements the same interface at different generic instantiations 'IQueue<'T>' and 'IQueue'\. This is not permitted in this version of F#\.$
 
 type IQueue<'a> =
     abstract Addd: 'a -> IQueue<'a>
diff --git a/tests/fsharpqa/Source/Conformance/Expressions/ExpressionQuotations/Baselines/QuoteUtils.fs b/tests/fsharpqa/Source/Conformance/Expressions/ExpressionQuotations/Baselines/QuoteUtils.fs
index c6ac658ef26..cd48c1013e4 100644
--- a/tests/fsharpqa/Source/Conformance/Expressions/ExpressionQuotations/Baselines/QuoteUtils.fs
+++ b/tests/fsharpqa/Source/Conformance/Expressions/ExpressionQuotations/Baselines/QuoteUtils.fs
@@ -10,12 +10,12 @@ open System.Collections.Generic
 
 /// Match a quotation with an active pattern. Use of ExprShape means q should represent valid F# code.   
 let matchQuote q (|Pat|_|) =
-    let result = ref false 
-    let matchedFragment = ref None
+    let mutable result = false 
+    let mutable matchedFragment = None
     let rec checkForShape quote (|Pat|_|) = 
         let m = match quote with
-                | Pat v -> result := true
-                           matchedFragment := Some(quote)
+                | Pat v -> result <- true
+                           matchedFragment <- Some(quote)
                 | _ -> ()
         match quote with
         | ShapeVar v -> Expr.Var v
@@ -24,7 +24,7 @@ let matchQuote q (|Pat|_|) =
                                          let newExprs = List.map f exprs
                                          RebuildShapeCombination(o, newExprs)
     checkForShape q (|Pat|_|) |> ignore
-    if !result then matchedFragment.Value else None
+    if result then matchedFragment else None
     
 /// Compare a quotation to a string representation of its expected shape
 let checkQuote (q : Expr) (expectedShape : string) =
diff --git a/tests/fsharpqa/Source/Conformance/Expressions/ExpressionQuotations/Regressions/env.lst b/tests/fsharpqa/Source/Conformance/Expressions/ExpressionQuotations/Regressions/env.lst
index c4639f44c22..da54c9af316 100644
--- a/tests/fsharpqa/Source/Conformance/Expressions/ExpressionQuotations/Regressions/env.lst
+++ b/tests/fsharpqa/Source/Conformance/Expressions/ExpressionQuotations/Regressions/env.lst
@@ -61,8 +61,8 @@ ReqPP	SOURCE=QuotationRegressions10.fs SCFLAGS="-r:Test.PowerPack.Linq.dll"		# Q
 	SOURCE=NullArgChecks.fs			# NullArgChecks.fs
 
 	#These two tests require --optimize+ to cause the bug they're testing
-ReqPP	SOURCE=OptimizeClosureRecFunc01.fs ISCFLAGS=--optimize+ SCFLAGS="-r:Test.PowerPack.Linq.dll"		#OptimizeClosureRecFunc01.fs
-ReqPP	SOURCE=OptimizeClosureRecFunc02.fs ISCFLAGS=--optimize+ SCFLAGS="-r:Test.PowerPack.Linq.dll"		#OptimizeClosureRecFunc02.fs
+ReqPP	SOURCE=OptimizeClosureRecFunc01.fs SCFLAGS="--optimize+ -r:Test.PowerPack.Linq.dll"		#OptimizeClosureRecFunc01.fs
+ReqPP	SOURCE=OptimizeClosureRecFunc02.fs SCFLAGS="--optimize+ -r:Test.PowerPack.Linq.dll"		#OptimizeClosureRecFunc02.fs
 
 	SOURCE=E_DecomposeArray01.fs SCFLAGS="--test:ErrorRanges"		# E_DecomposeArray01.fs
 
@@ -91,4 +91,4 @@ ReqPP	SOURCE=OptimizeClosureRecFunc02.fs ISCFLAGS=--optimize+ SCFLAGS="-r:Test.P
 	SOURCE=QuoteWithSplice01.fs						# QuoteWithSplice01.fs
 	SOURCE=LiteralArrays01.fs						# LiteralArrays01.fs
 
-ReqENU	SOURCE=E_QuotationHoles01.fs		# E_QuotationHoles01.fs
\ No newline at end of file
+ReqENU	SOURCE=E_QuotationHoles01.fs		# E_QuotationHoles01.fs
diff --git a/tests/fsharpqa/Source/Conformance/InferenceProcedures/Generalization/LessRestrictive02.fs b/tests/fsharpqa/Source/Conformance/InferenceProcedures/Generalization/LessRestrictive02.fs
index b551d22f4bc..145e210f9e1 100644
--- a/tests/fsharpqa/Source/Conformance/InferenceProcedures/Generalization/LessRestrictive02.fs
+++ b/tests/fsharpqa/Source/Conformance/InferenceProcedures/Generalization/LessRestrictive02.fs
@@ -58,14 +58,14 @@ module Example_Chris =
         member this.For(elements : seq<'a>, forBody : ('a -> StatefulFunc<'state, unit>)) = 
             
             StatefulFunc(fun initialState ->
-                let state = ref initialState
+                let mutable state = initialState
                 
                 for e in elements do
-                    let (), updatedState = Run (forBody e) (!state)
-                    state := updatedState
+                    let (), updatedState = Run (forBody e) (state)
+                    state <- updatedState
             
                 // Return unit * finalState
-                (), !state
+                (), state
             )
             
         member this.Return(x : 'a) = 
diff --git a/tests/fsharpqa/Source/Conformance/InferenceProcedures/TypeInference/E_LeftToRightOverloadResolution01.fs b/tests/fsharpqa/Source/Conformance/InferenceProcedures/TypeInference/E_LeftToRightOverloadResolution01.fs
index 6b109f534af..9a89174ac7f 100644
--- a/tests/fsharpqa/Source/Conformance/InferenceProcedures/TypeInference/E_LeftToRightOverloadResolution01.fs
+++ b/tests/fsharpqa/Source/Conformance/InferenceProcedures/TypeInference/E_LeftToRightOverloadResolution01.fs
@@ -10,5 +10,5 @@ Array.iter (fun it -> System.Console.WriteLine(it)) array
 
 array |> Array.iter (fun it -> System.Console.WriteLine(it))
 
-//A unique overload for method 'WriteLine' could not be determined based on type information prior to this program point\. A type annotation may be needed\. Candidates: System\.Console\.WriteLine\(buffer: char \[\]\) : unit, System\.Console\.WriteLine\(format: string, params arg: obj \[\]\) : unit, System\.Console\.WriteLine\(value: bool\) : unit, System\.Console\.WriteLine\(value: char\) : unit, System\.Console\.WriteLine\(value: decimal\) : unit, System\.Console\.WriteLine\(value: float\) : unit, System\.Console\.WriteLine\(value: float32\) : unit, System\.Console\.WriteLine\(value: int\) : unit, System\.Console\.WriteLine\(value: int64\) : unit, System\.Console\.WriteLine\(value: obj\) : unit, System\.Console\.WriteLine\(value: string\) : unit, System\.Console\.WriteLine\(value: uint32\) : unit, System\.Console\.WriteLine\(value: uint64\) : unit$
-//A unique overload for method 'WriteLine' could not be determined based on type information prior to this program point\. A type annotation may be needed\. Candidates: System\.Console\.WriteLine\(buffer: char \[\]\) : unit, System\.Console\.WriteLine\(format: string, params arg: obj \[\]\) : unit, System\.Console\.WriteLine\(value: bool\) : unit, System\.Console\.WriteLine\(value: char\) : unit, System\.Console\.WriteLine\(value: decimal\) : unit, System\.Console\.WriteLine\(value: float\) : unit, System\.Console\.WriteLine\(value: float32\) : unit, System\.Console\.WriteLine\(value: int\) : unit, System\.Console\.WriteLine\(value: int64\) : unit, System\.Console\.WriteLine\(value: obj\) : unit, System\.Console\.WriteLine\(value: string\) : unit, System\.Console\.WriteLine\(value: uint32\) : unit, System\.Console\.WriteLine\(value: uint64\) : unit$
\ No newline at end of file
+//A unique overload for method 'WriteLine' could not be determined based on type information prior to this program point\. A type annotation may be needed\. Candidates: System\.Console\.WriteLine\(buffer: char \[\]\) : unit, System\.Console\.WriteLine\(format: string, \[\] arg: obj \[\]\) : unit, System\.Console\.WriteLine\(value: bool\) : unit, System\.Console\.WriteLine\(value: char\) : unit, System\.Console\.WriteLine\(value: decimal\) : unit, System\.Console\.WriteLine\(value: float\) : unit, System\.Console\.WriteLine\(value: float32\) : unit, System\.Console\.WriteLine\(value: int\) : unit, System\.Console\.WriteLine\(value: int64\) : unit, System\.Console\.WriteLine\(value: obj\) : unit, System\.Console\.WriteLine\(value: string\) : unit, System\.Console\.WriteLine\(value: uint32\) : unit, System\.Console\.WriteLine\(value: uint64\) : unit$
+//A unique overload for method 'WriteLine' could not be determined based on type information prior to this program point\. A type annotation may be needed\. Candidates: System\.Console\.WriteLine\(buffer: char \[\]\) : unit, System\.Console\.WriteLine\(format: string, \[\] arg: obj \[\]\) : unit, System\.Console\.WriteLine\(value: bool\) : unit, System\.Console\.WriteLine\(value: char\) : unit, System\.Console\.WriteLine\(value: decimal\) : unit, System\.Console\.WriteLine\(value: float\) : unit, System\.Console\.WriteLine\(value: float32\) : unit, System\.Console\.WriteLine\(value: int\) : unit, System\.Console\.WriteLine\(value: int64\) : unit, System\.Console\.WriteLine\(value: obj\) : unit, System\.Console\.WriteLine\(value: string\) : unit, System\.Console\.WriteLine\(value: uint32\) : unit, System\.Console\.WriteLine\(value: uint64\) : unit$
diff --git a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/E_MustBeIdent01.fs b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/E_MustBeIdent01.fs
index 1a37d88be02..7c9d079bbfa 100644
--- a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/E_MustBeIdent01.fs
+++ b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/E_MustBeIdent01.fs
@@ -1,6 +1,7 @@
-// #Regression #Conformance #LexicalAnalysis 
+// #Regression #Conformance #LexicalAnalysis
 // Verify error if preprocessor directive isn't a valid identifier
-//#if directive should be immediately followed by an identifier
+//Unexpected character '\*' in preprocessor expression
+//Incomplete preprocessor expression
 
 #if *COMPILED*
 exit 0
diff --git a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/ExtendedIfGrammar.fs b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/ExtendedIfGrammar.fs
new file mode 100644
index 00000000000..947c71b7617
--- /dev/null
+++ b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/ExtendedIfGrammar.fs
@@ -0,0 +1,170 @@
+let e0 : int =
+#if DEFINED
+    0
+#else
+    failwith "e0"
+#endif
+
+let e1 : int =
+#if UNDEFINED
+    failwith "e1"
+#else
+    0
+#endif
+
+let e2 : int =
+#if DEFINED && UNDEFINED
+    failwith "e2"
+#else
+    0
+#endif
+
+let e3 : int =
+#if UNDEFINED && DEFINED
+    failwith "e3"
+#else
+    0
+#endif
+
+let e4 : int =
+#if DEFINED || UNDEFINED
+    0
+#else
+    failwith "e4"
+#endif
+
+let e5 : int =
+#if UNDEFINED || DEFINED
+    0
+#else
+    failwith "e5"
+#endif
+
+let e6 : int =
+#if !UNDEFINED
+    0
+#else
+    failwith "e6"
+#endif
+
+let e7 :int =
+#if !DEFINED
+    failwith "e7"
+#else
+    0
+#endif
+
+let e8 : int =
+#if !UNDEFINED || DEFINED
+    0
+#else
+    failwith "e8"
+#endif
+
+let e9 : int =
+#if !DEFINED && DEFINED
+    failwith "e9"
+#else
+    0
+#endif
+
+let e10 : int =
+#if DEFINED && DEFINED && UNDEFINED
+    failwith "e10"
+#else
+    0
+#endif
+
+let e11 : int =
+#if UNDEFINED || UNDEFINED || DEFINED
+    0
+#else
+    failwith "e11"
+#endif
+
+let e12 : int =
+#if DEFINED || DEFINED && UNDEFINED
+    0
+#else
+    failwith "e12"
+#endif
+
+let e13 : int =
+#if UNDEFINED && DEFINED || DEFINED
+    0
+#else
+    failwith "e13"
+#endif
+
+let e14 : int =
+#if (DEFINED)
+    0
+#else
+    failwith "e14"
+#endif
+
+let e15 : int =
+#if (DEFINED || DEFINED) && UNDEFINED
+    failwith "e15"
+#else
+    0
+#endif
+
+let e16 : int =
+#if UNDEFINED && (DEFINED || DEFINED)
+    failwith "e16"
+#else
+    0
+#endif
+
+let e17 : int =
+#if DEFINED // A test comment
+    0
+#else
+    failwith "e17"
+#endif
+
+// When it comes to #if true/false are seen as identifiers not values
+let e18 : int =
+#if true
+    failwith "e18"
+#else
+    0
+#endif
+
+let e19 : int =
+#if false
+    failwith "e19"
+#else
+    0
+#endif
+
+let e20 : int =
+#if !!DEFINED
+    0
+#else
+    failwith "e20"
+#endif
+
+let e21 : int =
+#if !!!DEFINED
+    failwith "e21"
+#else
+    0
+#endif
+
+let e22 : int =
+#if !!UNDEFINED
+    failwith "e22"
+#else
+    0
+#endif
+
+let e23 : int =
+#if !!!UNDEFINED
+    0
+#else
+    failwith "e23"
+#endif
+
+exit 0
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/env.lst b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/env.lst
index db60a5ae6ce..8ab90626e01 100644
--- a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/env.lst
+++ b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/ConditionalCompilation/env.lst
@@ -19,4 +19,4 @@
 	SOURCE=FSharp01.fs	# FSharp01.fs
 	SOURCE=FSharp02.fs	# FSharp02.fs
 	SOURCE=OCaml01.fs	# OCaml01.fs
-
+	SOURCE=ExtendedIfGrammar.fs SCFLAGS="--define:DEFINED"	# ExtendedIfGrammar.fs
diff --git a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/IdentifiersAndKeywords/backtickmoduleandtypenames.fsx b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/IdentifiersAndKeywords/backtickmoduleandtypenames.fsx
new file mode 100644
index 00000000000..b578bcded92
--- /dev/null
+++ b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/IdentifiersAndKeywords/backtickmoduleandtypenames.fsx
@@ -0,0 +1,79 @@
+//
+open System
+open System.Reflection
+
+open Microsoft.FSharp.Quotations
+open Microsoft.FSharp.Quotations.Patterns
+open Microsoft.FSharp.Quotations.DerivedPatterns
+
+let failures = ref false
+let report_failure () = 
+  stderr.WriteLine " NO"; failures := true
+let test s b = stderr.Write(s:string);  if b then stderr.WriteLine " OK" else report_failure() 
+
+(*--------------------*)
+
+// Test cases for Github Issue # 10  module cannot contain ,
+
+// Comma in module name
+module ``,`` =
+    let x = 3
+
+// Lots of comma's in module name
+module ``,,,,,,,,,,,`` =
+    let x = 5
+
+// Lots of comma's and other characters in module name
+module ``One, 2, Three, 4, Five`` =
+    let x = 7
+
+// Nested modules with commas
+module ``Nested modules with commas`` =
+  module ``One, `` =
+    module ``Two, `` =
+      module ``Three, `` =
+        let x = 9
+
+module ``Comma in type name`` =
+    type ``,`` =
+        static member x = 13
+
+// Lots of comma's in type name
+module ``Lots of comma's in type name`` =
+    type ``,,,,,,,`` =
+        static member x = 15
+
+// Lots of comma's and other characters in type name
+module ``Lots of comma's and other characters in type name`` =
+    type ``One, 2, Three, 4, Five`` =
+        static member x = 17
+
+do 
+    let eval expr value = if (expr) = value then true else false
+
+    test "Comma in module name" (eval ``,``.x 3)
+    test "Lots of comma's in module name" (eval ``,,,,,,,,,,,``.x 5)
+    test "Lots of comma's and other characters in module name" (eval ``One, 2, Three, 4, Five``.x 7)
+    test "Nested modules with commas" (eval ``Nested modules with commas``.``One, ``.``Two, ``.``Three, ``.x 9)
+
+    test "Comma in type name" (eval ``Comma in type name``.``,``.x 13)
+    test "Lots of comma's in type name" (eval ``Lots of comma's in type name``.``,,,,,,,``.x 15)
+    test "Lots of comma's and other characters in type name" (eval ``Lots of comma's and other characters in type name``.``One, 2, Three, 4, Five``.x 17)
+
+    let eval expr value = (match expr with | PropertyGet (a, b, c) -> (if (b.GetGetMethod(true) :> MethodBase).Invoke(null, null) :?>int = value then true else false) | _ -> false)
+
+    test "Comma in module name from quotation"                                (eval <@@ ``,``.x @@> 3)
+    test "Lots of comma's in module name from quotation"                      (eval <@@ ``,,,,,,,,,,,``.x @@> 5)
+    test "Lots of comma's and other characters in module name from quotation" (eval <@@ ``One, 2, Three, 4, Five``.x @@> 7)
+    test "Nested modules with commas from quotation"                          (eval <@@ ``Nested modules with commas``.``One, ``.``Two, ``.``Three, ``.x @@> 9)
+
+    test "Comma in type name from quotation"                                  (eval <@@ ``Comma in type name``.``,``.x @@> 13)
+    test "Lots of comma's in type name from quotation"                        (eval <@@ ``Lots of comma's in type name``.``,,,,,,,``.x @@> 15)
+    test "Lots of comma's and other characters in type name from quotation"   (eval <@@ ``Lots of comma's and other characters in type name``.``One, 2, Three, 4, Five``.x @@> 17)
+
+let aa =
+  if !failures then (stdout.WriteLine "Test Failed"; exit 1) 
+
+do (stdout.WriteLine "Test Passed";
+    System.IO.File.WriteAllText("test.ok","ok");
+    exit 0)
diff --git a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/IdentifiersAndKeywords/env.lst b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/IdentifiersAndKeywords/env.lst
index 8c41b693340..72a1f57cd95 100644
--- a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/IdentifiersAndKeywords/env.lst
+++ b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/IdentifiersAndKeywords/env.lst
@@ -9,6 +9,10 @@
 	SOURCE=E_KeywordIdent01.fs						# E_KeywordIdent01.fs
 	SOURCE=E_ValidIdentifier03.fs  SCFLAGS="--test:ErrorRanges"		# E_ValidIdentifier03.fs
 	SOURCE=E_ValidIdentifier04.fs						# E_ValidIdentifier04.fs
+
+	SOURCE=backtickmoduleandtypenames.fsx				# backtickmoduleandtypenames.fsx
+NoMT	SOURCE=backtickmoduleandtypenames.fsx FSIMODE=EXEC COMPILE_ONLY=1  # backtickmoduleandtypenames.fsx  FSIMODE=EXEC COMPILE_ONLY=1
+
 	SOURCE=StructNotAllowDoKeyword.fs					# StructNotAllowDoKeyword.fs
 	SOURCE=E_MissingQualification.fs SCFLAGS="--test:ErrorRanges"		# E_MissingQualification.fs
 
diff --git a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/StringsAndCharacters/E_BogusLongUnicodeEscape.fs b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/StringsAndCharacters/E_BogusLongUnicodeEscape.fs
new file mode 100644
index 00000000000..60476dd8679
--- /dev/null
+++ b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/StringsAndCharacters/E_BogusLongUnicodeEscape.fs
@@ -0,0 +1,14 @@
+// #Regression #Conformance #LexicalAnalysis 
+#light
+
+// Verify error with malformed long unicode escape sequences
+
+let tooBigForChar  = '\U00024B62'
+let bogusString01 = "\U00110000"
+let bogusString02 = "\UFFFF0000"
+
+exit 1
+
+//This Unicode encoding is only valid in string literals
+//\\U00110000 is not a valid Unicode character escape sequence
+//\\UFFFF0000 is not a valid Unicode character escape sequence
diff --git a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/StringsAndCharacters/UnicodeString01.fs b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/StringsAndCharacters/UnicodeString01.fs
index 14102ec9bbf..3cce7e6fb8c 100644
--- a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/StringsAndCharacters/UnicodeString01.fs
+++ b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/StringsAndCharacters/UnicodeString01.fs
@@ -1,11 +1,29 @@
-// #Conformance #LexicalAnalysis 
-#light
-
 // Test string literals with short Unicode Literals
 
-let unicodeString = "\u2660 \u2663 \u2665 \u2666"
-let expectedResult = "♠ ♣ ♥ ♦"
+let mutable failure = false
+
+let checkStr (inputStr:string) expectedChars expectedStr =
+    let charCodes = inputStr.ToCharArray() |> Array.map int
+    if charCodes <> expectedChars then
+        printfn "Character encodings don't match"
+        printfn "  Expected %A" expectedChars
+        printfn "  Actual   %A" charCodes
+        false
+    else
+    match expectedStr with
+    | Some(exp) when exp <> inputStr ->
+        printfn "String representation doesn't match"
+        printfn "  Expected %s" exp
+        printfn "  Actual   %s" inputStr
+        false
+    | _ -> true
 
-if unicodeString <> expectedResult then exit 1
+let test (inputStr:string) expectedChars expectedStr =
+    failure <- (checkStr inputStr expectedChars expectedStr) && failure
+    
+test "\u2660\u2663\u2665\u2666" [| 0x2660; 0x2663; 0x2665; 0x2666 |] (Some("♠♣♥♦"))
+test "\uD800 \uDBFF \uDC00 \uDFFF" [| 0xD800; 32; 0xDBFF; 32; 0xDC00; 32; 0xDFFF |] None
+test "\u0000\u0000\uFFFE\uFFFD\uFFFC" [| 0; 0; 0xFFFE; 0xFFFD; 0xFFFC |] None
+test "\uD900\uD901\uD902" [| 0xD900; 0xD901; 0xD902 |] None
 
-exit 0
+exit (if failure then 1 else 0)
diff --git a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/StringsAndCharacters/UnicodeString02.fs b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/StringsAndCharacters/UnicodeString02.fs
index 326bc45369e..1b09c4c0cb4 100644
--- a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/StringsAndCharacters/UnicodeString02.fs
+++ b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/StringsAndCharacters/UnicodeString02.fs
@@ -1,11 +1,31 @@
-// #Conformance #LexicalAnalysis 
-#light
-
 // Test string literals with long Unicode Literals
 
-let unicodeString = "\U00002660 \U00002663 \U00002665 \U00002666"
-let expectedResult = "♠ ♣ ♥ ♦"
+let mutable failure = false
+
+let checkStr (inputStr:string) expectedChars expectedStr =
+    let charCodes = inputStr.ToCharArray() |> Array.map int
+    if charCodes <> expectedChars then
+        printfn "Character encodings don't match"
+        printfn "  Expected %A" expectedChars
+        printfn "  Actual   %A" charCodes
+        false
+    else
+    match expectedStr with
+    | Some(exp) when exp <> inputStr ->
+        printfn "String representation doesn't match"
+        printfn "  Expected %s" exp
+        printfn "  Actual   %s" inputStr
+        false
+    | _ -> true
 
-if unicodeString <> expectedResult then exit 1
+let test (inputStr:string) expectedChars expectedStr =
+    failure <- (checkStr inputStr expectedChars expectedStr) && failure
+    
+test "\U00002660\U00002663\U00002665\U00002666" [| 0x2660; 0x2663; 0x2665; 0x2666 |] (Some("♠♣♥♦"))
+test "\U0000D800 \U0000DBFF \U0000DC00 \U0000DFFF" [| 0xD800; 32; 0xDBFF; 32; 0xDC00; 32; 0xDFFF |] None
+test "\U00000000\U00000000\U0000FFFE\U0000FFFD\U0000FFFC" [| 0; 0; 0xFFFE; 0xFFFD; 0xFFFC |] None
+test "\U0000D900\U0000D901\U0000D902" [| 0xD900; 0xD901; 0xD902 |] None
+test "\U00010437" [| 0xD801; 0xDC37;|] (Some("𐐷"))
+test "\U00024B62" [| 0xD852 ; 0xDF62 |] (Some("𤭢"))
 
-exit 0
+exit (if failure then 1 else 0)
diff --git a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/StringsAndCharacters/env.lst b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/StringsAndCharacters/env.lst
index 2880802f925..4ba00768126 100644
--- a/tests/fsharpqa/Source/Conformance/LexicalAnalysis/StringsAndCharacters/env.lst
+++ b/tests/fsharpqa/Source/Conformance/LexicalAnalysis/StringsAndCharacters/env.lst
@@ -1,5 +1,5 @@
 	SOURCE=Backslash01.fs							# Backslash01.fs
-	SOURCE=Backslash02.fs							# Backslash02.fs
+NO_CI	SOURCE=Backslash02.fs							# Backslash02.fs
 
 	SOURCE=ByteChars01.fs							# ByteChars01.fs
 	SOURCE=ByteChars02.fs   SCFLAGS="--codepage:1252"			# ByteChars02.fs
@@ -7,7 +7,7 @@
 
 	SOURCE=ByteString01.fs							# ByteString01.fs
 	SOURCE=ByteString02.fs							# ByteString02.fs
-	SOURCE=ByteString03.fs							# ByteString03.fs
+NO_CI	SOURCE=ByteString03.fs							# ByteString03.fs
 
 	SOURCE=VerbatimString01.fs						# VerbatimString01.fs
 
@@ -20,6 +20,7 @@
 
 	SOURCE=UnicodeString01.fs		# UnicodeString01.fs
 	SOURCE=UnicodeString02.fs		# UnicodeString02.fs
+	SOURCE=E_BogusLongUnicodeEscape.fs SCFLAGS="--codepage:1252 --test:ErrorRanges"		# E_BogusLongUnicodeEscape.fs
 
 	SOURCE=E_ByteStrUnicodeChar01.fs	# E_ByteStrUnicodeChar01.fs
 	SOURCE=E_ByteCharUnicodeChar01.fs	# E_ByteCharUnicodeChar01.fs
@@ -28,7 +29,7 @@
 	SOURCE=UnicodeString03.fs						# UnicodeString03.fs
 
 	SOURCE=TripleQuote.fs							# TripleQuote.fs
-	SOURCE=TripleQuoteString01.fs						# TripleQuoteString01.fs
+NO_CI	SOURCE=TripleQuoteString01.fs						# TripleQuoteString01.fs
 	SOURCE=TripleQuoteString02.fs						# TripleQuoteString02.fs
 NoMT	SOURCE=TripleQuoteStringInFSI01.fsx  FSIMODE=PIPE  COMPILE_ONLY=1	# TripleQuoteStringInFSI01.fsx
 NoMT	SOURCE=TripleQuoteStringInFSI02.fsx  FSIMODE=FEED  COMPILE_ONLY=1	# TripleQuoteStringInFSI02.fsx
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/LetDoDeclarations/env.lst b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/LetDoDeclarations/env.lst
index ea48b0a211e..afedefe8632 100644
--- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/LetDoDeclarations/env.lst
+++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/LetDoDeclarations/env.lst
@@ -1,3 +1,3 @@
 # Tagging as NoMT in case WPF stuff are not available on the machine
 # Really, this test is not much about MT...
-NoMT,NOMONO	SOURCE=ImplicitLambda01.fs SCFLAGS="-r:PresentationCore.dll -r:PresentationFramework.dll -r:WindowsBase.dll -r:System.Xml.dll"	# ImplicitLambda01.fs
\ No newline at end of file
+NoMT,NOMONO	SOURCE=ImplicitLambda01.fs SCFLAGS="-r:System.Xaml.dll -r:UIAutomationTypes.dll -r:PresentationCore.dll -r:PresentationFramework.dll -r:WindowsBase.dll -r:System.Xml.dll"	# ImplicitLambda01.fs
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_byref_two_arguments_curried.fsx b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_byref_two_arguments_curried.fsx
index 839a3ea9efe..2f99a7564d3 100644
--- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_byref_two_arguments_curried.fsx
+++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_byref_two_arguments_curried.fsx
@@ -2,6 +2,6 @@
 // Regression test for FSHARP1.0:5580
 // disallow curried byref parameters
 // Out arguments - curried
-//Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional' or 'byref' arguments$
+//Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional', 'ReflectedDefinition' or 'byref' arguments$
 type Misc2() =
     static member M (foo : int byref) (bar : int byref) = foo <- 10
diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_optional_two_arguments_curried.fsx b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_optional_two_arguments_curried.fsx
index d624cbbddd2..20786eb74ec 100644
--- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_optional_two_arguments_curried.fsx
+++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_optional_two_arguments_curried.fsx
@@ -2,6 +2,6 @@
 // Regression test for FSHARP1.0:5580
 // disallow curried byref parameters
 // optional arguments - curried
-//Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional' or 'byref' arguments$
+//Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional', 'ReflectedDefinition' or 'byref' arguments$
 type Misc0() =
     static member M (?foo : int) (?bar : int) = 10
diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_out_two_arguments_curried.fsx b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_out_two_arguments_curried.fsx
index 35e14ae8970..4f167735666 100644
--- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_out_two_arguments_curried.fsx
+++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_out_two_arguments_curried.fsx
@@ -2,6 +2,6 @@
 // Regression test for FSHARP1.0:5580
 // disallow curried byref parameters
 // Out arguments - curried
-//Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional' or 'byref' arguments$
+//Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional', 'ReflectedDefinition' or 'byref' arguments$
 type Misc2() =
     static member M ([] foo : int byref) ([] bar : int byref) = foo <- 10
diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_paramarray_two_arguments_curried.fsx b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_paramarray_two_arguments_curried.fsx
index f7d4ef37625..fea11eebf66 100644
--- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_paramarray_two_arguments_curried.fsx
+++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/ClassTypes/MemberDeclarations/E_paramarray_two_arguments_curried.fsx
@@ -2,6 +2,6 @@
 // Regression test for FSHARP1.0:5580
 // disallow curried byref parameters
 // ParamArray arguments - non curried
-//Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional' or 'byref' arguments$
+//Methods with curried arguments cannot declare 'out', 'ParamArray', 'optional', 'ReflectedDefinition' or 'byref' arguments$
 type Misc0() = 
     static member M ([] args : string[]) ([] argc : int) = args.Length + argc
diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/ConsumeMultipleInterfaceFromCS.fs b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/ConsumeMultipleInterfaceFromCS.fs
index 8452697e5ef..258e97be58a 100644
--- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/ConsumeMultipleInterfaceFromCS.fs
+++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/ConsumeMultipleInterfaceFromCS.fs
@@ -1,5 +1,5 @@
 // #Conformance #ObjectOrientedTypes #InterfacesAndImplementations #ReqNOMT 
-#light
+#light	
 
 let mutable res = true
 let t = new T()
@@ -15,17 +15,28 @@ if (t.Home(0) <> 0) then
   System.Console.WriteLine("t.Home failed")
   res <- false
 
-if ( {new I_003 with 
-               member xxx.Home(i) = i
-               member xxx.Me(c:char) = 0
-               member xxx.Me(s:string) = 0
-      }.Home (
-        {new I_002 with 
-          member x.Me (s) = s
-        }.Me(0) )  <> 0 ) then
-            System.Console.WriteLine("I_003.Home failed")         
+// Check we can use an object expression inheriting from a C# type implementing multiple instantiations of an interface
+if (({new T() with 
+               member x.ToString() = "a"
+      } :> I_003).Home (4)  <> 0 ) then
+            System.Console.WriteLine("T.Home obj expr failed")         
             res <- false
   
+// Check we can create an object of a C# type implementing multiple instantiations of an interface
+if T().Home(4) <> 0 then
+            System.Console.WriteLine("T.Home failed")         
+            res <- false
+
+
+// Check we can inherit from a C# type implementing multiple instantiations of an interface
+type D() = 
+    inherit T()
+
+if (D() :> I_003).Home(5) <> 0 then
+            System.Console.WriteLine("D.Home failed")         
+            res <- false
+
+
 if (res = true) then
     exit 0
     
diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/E_ClassConsumeMultipleInterfaceFromCS.fs b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/E_ClassConsumeMultipleInterfaceFromCS.fs
new file mode 100644
index 00000000000..ed87e24dbda
--- /dev/null
+++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/E_ClassConsumeMultipleInterfaceFromCS.fs
@@ -0,0 +1,23 @@
+// #Conformance #ObjectOrientedTypes #InterfacesAndImplementations #ReqNOMT 
+// This type implements the same interface at different generic instantiations 'I_002\' and 'I_002\'\. This is not permitted in this version of F#\.
+#light	
+
+let mutable res = true
+
+// Check we can't implement an interface inheriting from multiple instantiations of an interface when defining an object expression inheriting from a C# class type
+type D() = 
+    inherit T()
+    interface I_003 with
+       member xxx.Home(i) = i
+
+if (D() :> I_003).Home(5) <> 5 then
+            System.Console.WriteLine("D.Home failed")         
+            res <- false
+
+
+if (res = true) then
+    exit 0
+    
+  
+exit 1
+
diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/E_ConsumeMultipleInterfaceFromCS.fs b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/E_ConsumeMultipleInterfaceFromCS.fs
index 3696ec6969f..ce206ece82f 100644
--- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/E_ConsumeMultipleInterfaceFromCS.fs
+++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/E_ConsumeMultipleInterfaceFromCS.fs
@@ -1,5 +1,6 @@
 // #Conformance #ObjectOrientedTypes #InterfacesAndImplementations #ReqNOMT 
-// This type implements or inherits the same interface at different generic instantiations 'I_002\' and 'I_002\'\. This is not permitted in this version of F#\.
+// This type implements the same interface at different generic instantiations 'I_002\' and 'I_002\'\. This is not permitted in this version of F#\.
+// This type implements the same interface at different generic instantiations 'I_002\' and 'I_002\'\. This is not permitted in this version of F#\.
 #light	
 
 let mutable res = true
@@ -16,6 +17,7 @@ if (t.Home(0) <> 0) then
   System.Console.WriteLine("t.Home failed")
   res <- false
 
+// Check we can't implement an interface inheriting from multiple instantiations of an interface when defining an object expression implementing a C# interface type 
 if ( {new I_003 with 
                member xxx.Home(i) = i
                member xxx.Me(c:char) = 0
@@ -27,6 +29,37 @@ if ( {new I_003 with
             System.Console.WriteLine("I_003.Home failed")         
             res <- false
   
+// Check we can't implement an interface inheriting from multiple instantiations of an interface when defining an object expression inheriting from a C# class type
+if (({new T() with 
+               member x.ToString() = "a"
+      interface I_003 with 
+               member xxx.Home(i) = i
+               member xxx.Me(c:char) = 0
+               member xxx.Me(s:string) = 0
+      } :> I_003).Home (
+        {new I_002 with 
+          member x.Me (s) = s
+        }.Me(0) )  <> 0 ) then
+            System.Console.WriteLine("T.Home obj expr failed")         
+            res <- false
+  
+// Check we can create an object of a C# type implementing multiple instantiations of an interface
+if T().Home(4) <> 0 then
+            System.Console.WriteLine("T.Home failed")         
+            res <- false
+
+
+// Check we can't implement an interface inheriting from multiple instantiations of an interface when defining an object expression inheriting from a C# class type
+type D() = 
+    inherit T()
+    interface I_003 with
+       member xxx.Home(i) = i
+
+if (D() :> I_003).Home(5) <> 5 then
+            System.Console.WriteLine("D.Home failed")         
+            res <- false
+
+
 if (res = true) then
     exit 0
     
diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/E_ImplementGenIFaceTwice01.fs b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/E_ImplementGenIFaceTwice01.fs
index 57ef2707ef0..10927e41457 100644
--- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/E_ImplementGenIFaceTwice01.fs
+++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/E_ImplementGenIFaceTwice01.fs
@@ -3,7 +3,7 @@
 
 // Verify error when trying to implement the same generic interface twice.
 // Regression for FSB 3574, PE Verification failure when implementing multiple generic interfaces (one generic, one specifc)
-//This type implements or inherits the same interface at different generic instantiations 'IA' and 'IA<'b>'\. This is not permitted in this version of F#
+//This type implements the same interface at different generic instantiations 'IA' and 'IA<'b>'\. This is not permitted in this version of F#
 
 type IA<'b> = 
   interface
diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/E_ImplementGenIFaceTwice02.fs b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/E_ImplementGenIFaceTwice02.fs
index 66dc07cb4a1..560cb715586 100644
--- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/E_ImplementGenIFaceTwice02.fs
+++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/E_ImplementGenIFaceTwice02.fs
@@ -1,7 +1,7 @@
 // #Regression #Conformance #ObjectOrientedTypes #InterfacesAndImplementations 
 // Verify error when trying to implement the same generic
 // interface twice
-//This type implements or inherits the same interface at different generic instantiations 'IFoo' and 'IFoo'\. This is not permitted in this version of F#
+//This type implements the same interface at different generic instantiations 'IFoo' and 'IFoo'\. This is not permitted in this version of F#
 
 type IFoo<'a> =
     interface
diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/MultipleInst01.fs b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/MultipleInst01.fs
index 37f2d6f31fd..057d2da039d 100644
--- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/MultipleInst01.fs
+++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/MultipleInst01.fs
@@ -1,7 +1,7 @@
 // #Regression #Conformance #ObjectOrientedTypes #InterfacesAndImplementations 
 // Regression test for FSHARP1.0:5540
 // It is forbidden to implement an interface at multiple instantiations
-//This type implements or inherits the same interface at different generic instantiations 'IA' and 'IA'\. This is not permitted in this version of F#\.$
+//This type implements the same interface at different generic instantiations 'IA' and 'IA'\. This is not permitted in this version of F#\.$
 
 type IA<'a> =
     interface 
diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/MultipleInst04.fs b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/MultipleInst04.fs
index 3a3b2f4b4e5..f1a2bc33753 100644
--- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/MultipleInst04.fs
+++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/MultipleInst04.fs
@@ -1,7 +1,7 @@
 // #Regression #Conformance #ObjectOrientedTypes #InterfacesAndImplementations 
 // Regression test for FSHARP1.0:5540
 // It is forbidden to implement an interface at multiple instantiations
-//This type implements or inherits the same interface at different generic instantiations 'IA' and 'IA'\. This is not permitted in this version of F#\.$
+//This type implements the same interface at different generic instantiations 'IA' and 'IA'\. This is not permitted in this version of F#\.$
 
 
 type IA<'a, 'b> =
diff --git a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/env.lst b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/env.lst
index 8aac44615a5..d41c7253450 100644
--- a/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/env.lst
+++ b/tests/fsharpqa/Source/Conformance/ObjectOrientedTypeDefinitions/InterfaceTypes/env.lst
@@ -30,7 +30,9 @@ NoMT	SOURCE=CallCSharpInterface.fs  PRECMD="\$CSC_PIPE /t:library ConsumeFromFS.
 
 	SOURCE=E_MultipleInterfaceInheritance.fs SCFLAGS="--test:ErrorRanges --flaterrors"											# E_MultipleInterfaceInheritance.fs
 
+NoMT	SOURCE=ConsumeMultipleInterfaceFromCS.fs  PRECMD="\$CSC_PIPE /t:library MultipleInterfaceInheritanceFromCS.cs" SCFLAGS="-r:MultipleInterfaceInheritanceFromCS.dll"	# ConsumeMultipleInterfaceFromCS.fs
 NoMT	SOURCE=E_ConsumeMultipleInterfaceFromCS.fs  PRECMD="\$CSC_PIPE /t:library MultipleInterfaceInheritanceFromCS.cs" SCFLAGS="-r:MultipleInterfaceInheritanceFromCS.dll --test:ErrorRanges"	# E_ConsumeMultipleInterfaceFromCS.fs
+NoMT	SOURCE=E_ClassConsumeMultipleInterfaceFromCS.fs  PRECMD="\$CSC_PIPE /t:library MultipleInterfaceInheritanceFromCS.cs" SCFLAGS="-r:MultipleInterfaceInheritanceFromCS.dll --test:ErrorRanges"	# E_ClassConsumeMultipleInterfaceFromCS.fs
 
 	SOURCE="E_ImplementGenIFaceTwice01.fs"		# E_ImplementGenIFaceTwice01.fs
 	SOURCE="E_ImplementGenIFaceTwice02.fs"		# E_ImplementGenIFaceTwice02.fs
diff --git a/tests/fsharpqa/Source/Conformance/PatternMatching/Simple/simplePatterns19.fs b/tests/fsharpqa/Source/Conformance/PatternMatching/Simple/simplePatterns19.fs
index 0888aa994ca..fcc0f9e5f69 100644
--- a/tests/fsharpqa/Source/Conformance/PatternMatching/Simple/simplePatterns19.fs
+++ b/tests/fsharpqa/Source/Conformance/PatternMatching/Simple/simplePatterns19.fs
@@ -4,10 +4,10 @@
 // Pattern match long unicode literals
 
 []
-let UnicodeString1 = "\U00000000\UFFFFFFFF"
+let UnicodeString1 = "\U00000000\U0002FFFF"
 
 []
-let UnicodeString2 = "\U11111111\U22222222"
+let UnicodeString2 = "\U00101111\U000F2222"
 
 let testStr x =
     match x with
@@ -18,9 +18,9 @@ let testStr x =
 if testStr "foo" <> 0 then exit 1
 
 if testStr UnicodeString1         <> 1 then exit 1
-if testStr "\U00000000\UFFFFFFFF" <> 1 then exit 1
+if testStr "\U00000000\U0002FFFF" <> 1 then exit 1
 
 if testStr UnicodeString2         <> 2 then exit 1
-if testStr "\U11111111\U22222222" <> 2 then exit 1
+if testStr "\U00101111\U000F2222" <> 2 then exit 1
 
 exit 0
diff --git a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Basic/RationalExponents01.fs b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Basic/RationalExponents01.fs
new file mode 100644
index 00000000000..79c649e564e
--- /dev/null
+++ b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Basic/RationalExponents01.fs
@@ -0,0 +1,35 @@
+// #Conformance #UnitsOfMeasure 
+// Rational exponents feature
+
+[]
+type kg
+
+[]
+type s
+
+[]
+type m
+
+// Simple fractions
+let test01() = 1.0
+let test02() = 2.0
+let test03() = sqrt (test01()) + test02()
+
+// Negative fractions
+let test04() = 4.0
+let test05() = 5.0
+let test06() = 1.0 / (test04() * test05()) + 3.0
+
+// More complex expressions
+let test07() = 2.0
+let test08() = 4.0<(s^6 kg^3)^(1/4)>
+let test09() = test07() * test08() + 3.0
+
+// Generics
+let test10(x:float<'u>) (y:float<'u^(1/2)>) = sqrt x + y
+let test11(x:float<'u^-(1/4)>) (y:float<'u^(3/4)>) : float = (x*x*x + 1.0/y) * x
+let test12(x:float<'u^(1/2)>) (y:float<'v^2>) :float<'u 'v> = x*x*sqrt y
+let test13() = test12 4.0 2.0 + 3.0<(kg s)^(1/2)>
+
+exit 0
+
diff --git a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Basic/env.lst b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Basic/env.lst
index 08156bb4172..3658811f482 100644
--- a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Basic/env.lst
+++ b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Basic/env.lst
@@ -16,6 +16,8 @@
 
 	SOURCE=SI.fs       COMPILE_ONLY=1			# SI.fs
 
+	SOURCE=RationalExponents01.fs       COMPILE_ONLY=1	# RationalExponents01.fs
+
 ReqPP	SOURCE=Quotation01.fs        SCFLAGS="-r:FSharp.PowerPack.Linq.dll"	# Quotation01.fs
 ReqPP	SOURCE=Quotation02.fs        SCFLAGS="-r:FSharp.PowerPack.Linq.dll"	# Quotation02.fs
 ReqPP	SOURCE=Quotation03.fs        SCFLAGS="-r:FSharp.PowerPack.Linq.dll"	# Quotation03.fs
diff --git a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Diagnostics/E_ParsingRationalExponents.fs b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Diagnostics/E_ParsingRationalExponents.fs
new file mode 100644
index 00000000000..95fdf4c6c15
--- /dev/null
+++ b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Diagnostics/E_ParsingRationalExponents.fs
@@ -0,0 +1,13 @@
+// #Regression #Conformance #UnitsOfMeasure #Diagnostics #RatExp
+#light
+//Unexpected integer literal in unit-of-measure expression
+//Unexpected symbol '\)' in binding\. Expected integer literal or other token
+//Unexpected infix operator in binding\. Expected integer literal, '-' or other token
+ 
+[] type kg
+[] type s
+
+// Parentheses are required
+let x2 = 2.0
+let x4 = 2.0
+let x5 = 2.0
diff --git a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Diagnostics/E_ZeroDenominator.fs b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Diagnostics/E_ZeroDenominator.fs
new file mode 100644
index 00000000000..1caa21641bb
--- /dev/null
+++ b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Diagnostics/E_ZeroDenominator.fs
@@ -0,0 +1,11 @@
+// #Regression #Conformance #UnitsOfMeasure #Diagnostics #RatExp
+//Denominator must not be 0 in unit-of-measure exponent
+//Denominator must not be 0 in unit-of-measure exponent
+#light
+ 
+[] type m
+
+let e1 = 2.0
+let e2 :float = 2.0<_>
+
+
diff --git a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Diagnostics/env.lst b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Diagnostics/env.lst
index 37d45c84e59..10f38bbc83b 100644
--- a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Diagnostics/env.lst
+++ b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Diagnostics/env.lst
@@ -9,6 +9,8 @@
 	SOURCE=E_CantBeUsedAsPrefixArgToAType05.fsx SCFLAGS="--test:ErrorRanges"	# E_CantBeUsedAsPrefixArgToAType05.fsx
 
 	SOURCE=E_UnexpectedTypeParameter01.fs         SCFLAGS="--test:ErrorRanges"	# E_UnexpectedTypeParameter01.fs
+	SOURCE=E_ZeroDenominator.fs                   SCFLAGS="--test:ErrorRanges"	# E_ZeroDenominator.fs
+	SOURCE=E_ParsingRationalExponents.fs          SCFLAGS="--test:ErrorRanges"	# E_ParsingRationalExponents.fs
 
 	SOURCE=W_UnitOfMeasureCodeLessGeneric01.fs    SCFLAGS="--test:ErrorRanges -a"	# W_UnitOfMeasureCodeLessGeneric01.fs
 
diff --git a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Parenthesis/E_Error07.fs b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Parenthesis/E_Error07.fs
deleted file mode 100644
index d5db1e677be..00000000000
--- a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Parenthesis/E_Error07.fs
+++ /dev/null
@@ -1,11 +0,0 @@
-// #Regression #Conformance #UnitsOfMeasure 
-// Regression test for FSHARP1.0:2662
-// Make sure we can use ( and ) in Units of Measure
-//Unexpected symbol '\(' in binding\. Expected integer literal, '-' or other token
-#light
-
-[] type Kg
-[] type m
-[] type s
-
-let v = 1.0< (s)^(2) >  //error FS0010: Unexpected symbol '(' in binding. Expected integer literal, '-' or other token
diff --git a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Parenthesis/E_Error08.fs b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Parenthesis/E_Error08.fs
deleted file mode 100644
index 5a38d0b6917..00000000000
--- a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Parenthesis/E_Error08.fs
+++ /dev/null
@@ -1,11 +0,0 @@
-// #Regression #Conformance #UnitsOfMeasure 
-// Regression test for FSHARP1.0:2662
-// Make sure we can use ( and ) in Units of Measure
-//Unexpected symbol '\(' in binding\. Expected integer literal, '-' or other token
-#light
-
-[] type Kg
-[] type m
-[] type s
-
-let velocity9 = 1.0  // Error - why?
diff --git a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Parenthesis/env.lst b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Parenthesis/env.lst
index 3dd4add6cfd..07058de7ec7 100644
--- a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Parenthesis/env.lst
+++ b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/Parenthesis/env.lst
@@ -7,8 +7,6 @@ SOURCE=E_Error03.fs SCFLAGS="--test:ErrorRanges"			# E_Error03.fs
 SOURCE=E_Error04.fs SCFLAGS="--test:ErrorRanges"			# E_Error04.fs
 SOURCE=E_Error05.fs SCFLAGS="--test:ErrorRanges"			# E_Error05.fs
 SOURCE=E_Error06.fs SCFLAGS="--test:ErrorRanges"			# E_Error06.fs
-SOURCE=E_Error07.fs SCFLAGS="--test:ErrorRanges"			# E_Error07.fs
-SOURCE=E_Error08.fs SCFLAGS="--test:ErrorRanges"			# E_Error08.fs
 
 SOURCE=E_IncompleteParens01.fs SCFLAGS="--test:ErrorRanges"		# E_IncompleteParens01.fs
 SOURCE=E_IncompleteParens02.fs SCFLAGS="--test:ErrorRanges"		# E_IncompleteParens02.fs
diff --git a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/TypeChecker/E_GenInterfaceWithDifferentGenInstantiations.fs b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/TypeChecker/E_GenInterfaceWithDifferentGenInstantiations.fs
index 9ae44c8d2e9..b948171d4d1 100644
--- a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/TypeChecker/E_GenInterfaceWithDifferentGenInstantiations.fs
+++ b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/TypeChecker/E_GenInterfaceWithDifferentGenInstantiations.fs
@@ -1,7 +1,7 @@
 // #Regression #Conformance #UnitsOfMeasure #TypeInference #TypeConstraints 
 // Regression test for FSHARP1.0:4782
 // It is illegal to implement or inherit the same interface at different generic instantiations
-//This type implements or inherits the same interface at different generic instantiations 'IA' and 'IA<'b>'\. This is not permitted in this version of F#
+//This type implements the same interface at different generic instantiations 'IA' and 'IA<'b>'\. This is not permitted in this version of F#
 
 [] type kg
 
diff --git a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/TypeChecker/W_LessGeneric01.fsx b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/TypeChecker/W_LessGeneric01.fsx
index e65f2a314fe..a0e07fc02dd 100644
--- a/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/TypeChecker/W_LessGeneric01.fsx
+++ b/tests/fsharpqa/Source/Conformance/UnitsOfMeasure/TypeChecker/W_LessGeneric01.fsx
@@ -2,9 +2,9 @@
 
 // Regression test for FSharp1.0:3579 - Problems in Units of Measure
 
-//      let avg = \(guess \+ other\) / 2
-//  ---------------------\^
-//This construct causes code to be less generic than indicated by the type annotations\. The unit-of-measure variable 'u has been constrained to be measure ''u \^ 2'\.$
+//  let fn \(x:float<'u>\) =
+//  ----------------\^\^
+//This construct causes code to be less generic than indicated by the type annotations\. The unit-of-measure variable 'u has been constrained to be measure '1'\.$
 //val loop : f:\('a -> 'a\) -> init:'a -> comp:\('a -> 'a -> bool\) -> 'a
 //val fn : x:float -> float
 
diff --git a/tests/fsharpqa/Source/Diagnostics/General/W_CreateIDisposable.fs b/tests/fsharpqa/Source/Diagnostics/General/W_CreateIDisposable.fs
new file mode 100644
index 00000000000..f37e3dd39d4
--- /dev/null
+++ b/tests/fsharpqa/Source/Diagnostics/General/W_CreateIDisposable.fs
@@ -0,0 +1,14 @@
+namespace Test
+open System.IO
+
+type Foo = 
+    static member Bar() =
+        use stream = File.OpenRead("foo")
+
+        use readerGood = new StreamReader(stream)
+        use readerBad1 = StreamReader(stream)
+        use readerBad2 = stream |> StreamReader 
+        ()        
+  
+//It is recommended that objects supporting the IDisposable interface are created using the syntax 'new Type\(args\)', rather than 'Type\(args\)' or 'Type' as a function value representing the constructor, to indicate that resources may be owned by the generated value
+//It is recommended that objects supporting the IDisposable interface are created using the syntax 'new Type\(args\)', rather than 'Type\(args\)' or 'Type' as a function value representing the constructor, to indicate that resources may be owned by the generated value
diff --git a/tests/fsharpqa/Source/Diagnostics/General/env.lst b/tests/fsharpqa/Source/Diagnostics/General/env.lst
index cc6eac8310c..b6d102b9e79 100644
--- a/tests/fsharpqa/Source/Diagnostics/General/env.lst
+++ b/tests/fsharpqa/Source/Diagnostics/General/env.lst
@@ -116,4 +116,6 @@ ReqPP	SOURCE=E_UnxpectedMeasureAnnotation01.fs  SCFLAGS="-r:FSharp.PowerPack.dll
 
 	SOURCE=E_OCamlCompatibility01.fs SCFLAGS="--test:ErrorRanges"	# E_OCamlCompatibility01.fs
 ReqPP	SOURCE=W_WebExtensionsNotInPowerPack01.fs SCFLAGS="--test:ErrorRanges -r:FSharp.PowerPack.dll" COMPILE_ONLY=1		# W_WebExtensionsNotInPowerPack01.fs
-	SOURCE=E_InvalidObjectExpression01.fs     SCFLAGS="--test:ErrorRanges"	#E_InvalidObjectExpression01.fs
\ No newline at end of file
+	SOURCE=E_InvalidObjectExpression01.fs     SCFLAGS="--test:ErrorRanges"	#E_InvalidObjectExpression01.fs
+
+	SOURCE=W_CreateIDisposable.fs  SCFLAGS="--test:ErrorRanges -a"	# W_CreateIDisposable.fs
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/E_load_badextension.fsx b/tests/fsharpqa/Source/InteractiveSession/Misc/E_load_badextension.fsx
new file mode 100644
index 00000000000..09e5e6cc62a
--- /dev/null
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/E_load_badextension.fsx
@@ -0,0 +1,5 @@
+#load "dummy.txt"
+
+()
+
+//The file extension of '.+\\dummy\.txt' is not recognized\. Source files must have extension \.fs, \.fsi, \.fsx, \.fsscript, \.ml or \.mli\.$
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/RelativeHashRResolution02_2.fsx b/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/RelativeHashRResolution02_2.fsx
new file mode 100644
index 00000000000..f3d918aa570
--- /dev/null
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/RelativeHashRResolution02_2.fsx
@@ -0,0 +1,6 @@
+#r "./lib.dll"
+
+module Foo =
+    let Y = 22
+    do
+        printfn "%O" (Lib.X())
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/RelativeHashRResolution03_2.fsx b/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/RelativeHashRResolution03_2.fsx
new file mode 100644
index 00000000000..578317e8545
--- /dev/null
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/RelativeHashRResolution03_2.fsx
@@ -0,0 +1,6 @@
+#r "lib.dll"
+
+module Foo =
+    let Y = 22
+    do
+        printfn "%O" (Lib.X())
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/RelativeHashRResolution05_2.fsx b/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/RelativeHashRResolution05_2.fsx
new file mode 100644
index 00000000000..578317e8545
--- /dev/null
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/RelativeHashRResolution05_2.fsx
@@ -0,0 +1,6 @@
+#r "lib.dll"
+
+module Foo =
+    let Y = 22
+    do
+        printfn "%O" (Lib.X())
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/bbb/RelativeHashRResolution01_2.fsx b/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/bbb/RelativeHashRResolution01_2.fsx
new file mode 100644
index 00000000000..e2c6124fb05
--- /dev/null
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/bbb/RelativeHashRResolution01_2.fsx
@@ -0,0 +1,6 @@
+#r "../lib.dll"
+
+module Foo =
+    let Y = 22
+    do
+        printfn "%O" (Lib.X())
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/bbb/RelativeHashRResolution04_1.fsx b/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/bbb/RelativeHashRResolution04_1.fsx
new file mode 100644
index 00000000000..700b7d91be3
--- /dev/null
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/bbb/RelativeHashRResolution04_1.fsx
@@ -0,0 +1,10 @@
+#if PIPED_FROM_TEST_DIR
+#load "aaa/bbb/RelativeHashRResolution04_2.fsx"
+#else
+#load "RelativeHashRResolution04_2.fsx"
+#endif
+
+printfn "%O" (Lib.X())
+printfn "%O" RelativeHashRResolution04_2.Foo.Y
+
+#q ;;
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/bbb/RelativeHashRResolution04_2.fsx b/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/bbb/RelativeHashRResolution04_2.fsx
new file mode 100644
index 00000000000..e2c6124fb05
--- /dev/null
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/bbb/RelativeHashRResolution04_2.fsx
@@ -0,0 +1,6 @@
+#r "../lib.dll"
+
+module Foo =
+    let Y = 22
+    do
+        printfn "%O" (Lib.X())
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/bbb/RelativeHashRResolution05_1.fsx b/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/bbb/RelativeHashRResolution05_1.fsx
new file mode 100644
index 00000000000..14f74062d39
--- /dev/null
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/aaa/bbb/RelativeHashRResolution05_1.fsx
@@ -0,0 +1,10 @@
+#if PIPED_FROM_TEST_DIR
+#load "./aaa/RelativeHashRResolution05_2.fsx"
+#else
+#load "../RelativeHashRResolution05_2.fsx"
+#endif
+
+printfn "%O" (Lib.X())
+printfn "%O" RelativeHashRResolution05_2.Foo.Y
+
+#q ;;
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/ccc/RelativeHashRResolution01_1.fsx b/tests/fsharpqa/Source/InteractiveSession/Misc/ccc/RelativeHashRResolution01_1.fsx
new file mode 100644
index 00000000000..207dcbe8577
--- /dev/null
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/ccc/RelativeHashRResolution01_1.fsx
@@ -0,0 +1,10 @@
+#if PIPED_FROM_TEST_DIR
+#load "aaa/bbb/RelativeHashRResolution01_2.fsx"
+#else
+#load "../aaa/bbb/RelativeHashRResolution01_2.fsx"
+#endif
+
+printfn "%O" (Lib.X())
+printfn "%O" RelativeHashRResolution01_2.Foo.Y
+
+#q ;;
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/ccc/RelativeHashRResolution02_1.fsx b/tests/fsharpqa/Source/InteractiveSession/Misc/ccc/RelativeHashRResolution02_1.fsx
new file mode 100644
index 00000000000..09fb3a5a8d8
--- /dev/null
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/ccc/RelativeHashRResolution02_1.fsx
@@ -0,0 +1,10 @@
+#if PIPED_FROM_TEST_DIR
+#load "./aaa/RelativeHashRResolution02_2.fsx"
+#else
+#load "../aaa/RelativeHashRResolution02_2.fsx"
+#endif
+
+printfn "%O" (Lib.X())
+printfn "%O" RelativeHashRResolution02_2.Foo.Y
+
+#q ;;
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/ccc/RelativeHashRResolution03_1.fsx b/tests/fsharpqa/Source/InteractiveSession/Misc/ccc/RelativeHashRResolution03_1.fsx
new file mode 100644
index 00000000000..90b4f08f8b2
--- /dev/null
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/ccc/RelativeHashRResolution03_1.fsx
@@ -0,0 +1,10 @@
+#if PIPED_FROM_TEST_DIR
+#load "aaa/RelativeHashRResolution03_2.fsx"
+#else
+#load "../aaa/RelativeHashRResolution03_2.fsx"
+#endif
+
+printfn "%O" (Lib.X())
+printfn "%O" RelativeHashRResolution03_2.Foo.Y
+
+#q ;;
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/dummy.txt b/tests/fsharpqa/Source/InteractiveSession/Misc/dummy.txt
new file mode 100644
index 00000000000..dd626a0f311
--- /dev/null
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/dummy.txt
@@ -0,0 +1 @@
+()
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/env.lst b/tests/fsharpqa/Source/InteractiveSession/Misc/env.lst
index 52b422a7969..40eeabb20c1 100644
--- a/tests/fsharpqa/Source/InteractiveSession/Misc/env.lst
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/env.lst
@@ -23,6 +23,7 @@ ReqENU	SOURCE=E_InterfaceCrossConstrained02.fsx   COMPILE_ONLY=1 FSIMODE=PIPE SC
 	SOURCE=E_type_id_equal_pipe.fsx            COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS="--nologo"	# E_type_id_equal_pipe.fsx
 	SOURCE=E_module_mutable_id_equal.fsx       COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS="--nologo"	# E_module_mutable_id_equal.fsx
 	SOURCE=E_let_id_equal_let_id_equal_n.fsx   COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS="--nologo"	# E_let_id_equal_let_id_equal_n.fsx
+	SOURCE=E_load_badextension.fsx             COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS="--nologo"   # E_load_badextension.fsx
 
 	SOURCE=EmptyList.fsx COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS="--nologo"	# EmptyList.fsx
 
@@ -99,3 +100,64 @@ NoMT	SOURCE=E_NoNoFrameworkWithFSCore.fs  COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS="-
 
 	SOURCE="ScriptTest\\LoadScriptResolution01.fsx"   SCFLAGS="--nologo"					# LoadScriptResolution01.fsx - fsc
 	SOURCE="ScriptTest\\LoadScriptResolution01.fsx"   COMPILE_ONLY=1 FSIMODE=FEED SCFLAGS="--nologo"	# LoadScriptResolution01.fsx - fsi
+
+#### relative paths used in #r references
+
+# create required reference library once
+	SOURCE=lib.fs COMPILE_ONLY=1 SCFLAGS="--nologo -a -o aaa\\lib.dll"			# RelativeHashRResolution_makelib
+
+# via FSI, invoking like `fsi.exe --exec path\script.fsx`
+	SOURCE=ccc\\RelativeHashRResolution01_1.fsx COMPILE_ONLY=1 FSIMODE=EXEC SCFLAGS="--nologo"			# RelativeHashRResolution01_exec
+	SOURCE=ccc\\RelativeHashRResolution02_1.fsx COMPILE_ONLY=1 FSIMODE=EXEC SCFLAGS="--nologo"			# RelativeHashRResolution02_exec
+	SOURCE=ccc\\RelativeHashRResolution03_1.fsx COMPILE_ONLY=1 FSIMODE=EXEC SCFLAGS="--nologo"			# RelativeHashRResolution03_exec
+	SOURCE=aaa\\bbb\\RelativeHashRResolution04_1.fsx COMPILE_ONLY=1 FSIMODE=EXEC SCFLAGS="--nologo"			# RelativeHashRResolution04_exec
+	SOURCE=aaa\\bbb\\RelativeHashRResolution05_1.fsx COMPILE_ONLY=1 FSIMODE=EXEC SCFLAGS="--nologo"			# RelativeHashRResolution05_exec
+
+# via FSI, invoking like `fsi.exe --exec ..\path\path\script.fsx`
+	SOURCE=..\\Misc\\ccc\\RelativeHashRResolution01_1.fsx COMPILE_ONLY=1 FSIMODE=EXEC SCFLAGS="--nologo"			# RelativeHashRResolution01_execrelative
+	SOURCE=..\\Misc\\ccc\\RelativeHashRResolution02_1.fsx COMPILE_ONLY=1 FSIMODE=EXEC SCFLAGS="--nologo"			# RelativeHashRResolution02_execrelative
+	SOURCE=..\\Misc\\ccc\\RelativeHashRResolution03_1.fsx COMPILE_ONLY=1 FSIMODE=EXEC SCFLAGS="--nologo"			# RelativeHashRResolution03_execrelative
+	SOURCE=..\\Misc\\aaa\\bbb\\RelativeHashRResolution04_1.fsx COMPILE_ONLY=1 FSIMODE=EXEC SCFLAGS="--nologo"			# RelativeHashRResolution04_execrelative
+	SOURCE=..\\Misc\\aaa\\bbb\\RelativeHashRResolution05_1.fsx COMPILE_ONLY=1 FSIMODE=EXEC SCFLAGS="--nologo"			# RelativeHashRResolution05_execrelative
+
+# via FSI, invoking like `fsi.exe --exec c:\full\path\script.fsx`
+	SOURCE="\$CWD\\ccc\\RelativeHashRResolution01_1.fsx" COMPILE_ONLY=1 FSIMODE=EXEC SCFLAGS="--nologo"			# RelativeHashRResolution01_execfull
+	SOURCE="\$CWD\\ccc\\RelativeHashRResolution02_1.fsx" COMPILE_ONLY=1 FSIMODE=EXEC SCFLAGS="--nologo"			# RelativeHashRResolution02_execfull
+	SOURCE="\$CWD\\ccc\\RelativeHashRResolution03_1.fsx" COMPILE_ONLY=1 FSIMODE=EXEC SCFLAGS="--nologo"			# RelativeHashRResolution03_execfull
+	SOURCE="\$CWD\\aaa\\bbb\\RelativeHashRResolution04_1.fsx" COMPILE_ONLY=1 FSIMODE=EXEC SCFLAGS="--nologo"			# RelativeHashRResolution04_execfull
+	SOURCE="\$CWD\\aaa\\bbb\\RelativeHashRResolution05_1.fsx" COMPILE_ONLY=1 FSIMODE=EXEC SCFLAGS="--nologo"			# RelativeHashRResolution05_execfull
+
+# via FSI, invoking like `fsi.exe < path\script.fsx`
+	SOURCE=ccc\\RelativeHashRResolution01_1.fsx COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS="--nologo --define:PIPED_FROM_TEST_DIR"			# RelativeHashRResolution01_pipe
+	SOURCE=ccc\\RelativeHashRResolution02_1.fsx COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS="--nologo --define:PIPED_FROM_TEST_DIR"			# RelativeHashRResolution02_pipe
+	SOURCE=ccc\\RelativeHashRResolution03_1.fsx COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS="--nologo --define:PIPED_FROM_TEST_DIR"			# RelativeHashRResolution03_pipe
+	SOURCE=aaa\\bbb\\RelativeHashRResolution04_1.fsx COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS="--nologo --define:PIPED_FROM_TEST_DIR"			# RelativeHashRResolution04_pipe
+	SOURCE=aaa\\bbb\\RelativeHashRResolution05_1.fsx COMPILE_ONLY=1 FSIMODE=PIPE SCFLAGS="--nologo --define:PIPED_FROM_TEST_DIR"			# RelativeHashRResolution05_pipe
+
+# via FSC, invoking like `fsc.exe path\script.fsx`
+	SOURCE=ccc\\RelativeHashRResolution01_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo"			# RelativeHashRResolution01_fsc
+	SOURCE=ccc\\RelativeHashRResolution02_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo"			# RelativeHashRResolution02_fsc
+	SOURCE=ccc\\RelativeHashRResolution03_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo"			# RelativeHashRResolution03_fsc
+	SOURCE=aaa\\bbb\\RelativeHashRResolution04_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo"			# RelativeHashRResolution04_fsc
+	SOURCE=aaa\\bbb\\RelativeHashRResolution05_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo"			# RelativeHashRResolution05_fsc
+
+# via FSC, invoking like `fsc.exe ..\path\path\script.fsx`
+	SOURCE=..\\Misc\\ccc\\RelativeHashRResolution01_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo"			# RelativeHashRResolution01_fscrelative
+	SOURCE=..\\Misc\\ccc\\RelativeHashRResolution02_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo"			# RelativeHashRResolution02_fscrelative
+	SOURCE=..\\Misc\\ccc\\RelativeHashRResolution03_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo"			# RelativeHashRResolution03_fscrelative
+	SOURCE=..\\Misc\\aaa\\bbb\\RelativeHashRResolution04_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo"			# RelativeHashRResolution04_fscrelative
+	SOURCE=..\\Misc\\aaa\\bbb\\RelativeHashRResolution05_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo"			# RelativeHashRResolution05_fscrelative
+
+# via FSC, invoking like `fsc.exe --simpleresolution path\script.fsx`
+	SOURCE=ccc\\RelativeHashRResolution01_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo --simpleresolution --noframework -r:\"%FSCOREDLLPATH%\""			# RelativeHashRResolution01_fscsimple
+	SOURCE=ccc\\RelativeHashRResolution02_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo --simpleresolution --noframework -r:\"%FSCOREDLLPATH%\""			# RelativeHashRResolution02_fscsimple
+	SOURCE=ccc\\RelativeHashRResolution03_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo --simpleresolution --noframework -r:\"%FSCOREDLLPATH%\""			# RelativeHashRResolution03_fscsimple
+	SOURCE=aaa\\bbb\\RelativeHashRResolution04_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo --simpleresolution --noframework -r:\"%FSCOREDLLPATH%\""			# RelativeHashRResolution04_fscsimple
+	SOURCE=aaa\\bbb\\RelativeHashRResolution05_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo --simpleresolution --noframework -r:\"%FSCOREDLLPATH%\""			# RelativeHashRResolution05_fscsimple
+
+# via FSC, invoking like `fsc.exe ..\path\path\script.fsx`
+	SOURCE=..\\Misc\\ccc\\RelativeHashRResolution01_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo --simpleresolution --noframework -r:\"%FSCOREDLLPATH%\""			# RelativeHashRResolution01_fscrelativesimple
+	SOURCE=..\\Misc\\ccc\\RelativeHashRResolution02_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo --simpleresolution --noframework -r:\"%FSCOREDLLPATH%\""			# RelativeHashRResolution02_fscrelativesimple
+	SOURCE=..\\Misc\\ccc\\RelativeHashRResolution03_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo --simpleresolution --noframework -r:\"%FSCOREDLLPATH%\""			# RelativeHashRResolution03_fscrelativesimple
+	SOURCE=..\\Misc\\aaa\\bbb\\RelativeHashRResolution04_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo --simpleresolution --noframework -r:\"%FSCOREDLLPATH%\""			# RelativeHashRResolution04_fscrelativesimple
+	SOURCE=..\\Misc\\aaa\\bbb\\RelativeHashRResolution05_1.fsx COMPILE_ONLY=1 SCFLAGS="--nologo --simpleresolution --noframework -r:\"%FSCOREDLLPATH%\""			# RelativeHashRResolution05_fscrelativesimple
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/keep.lst b/tests/fsharpqa/Source/InteractiveSession/Misc/keep.lst
new file mode 100644
index 00000000000..e202ae12c73
--- /dev/null
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/keep.lst
@@ -0,0 +1 @@
+aaa\lib.dll
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/InteractiveSession/Misc/lib.fs b/tests/fsharpqa/Source/InteractiveSession/Misc/lib.fs
new file mode 100644
index 00000000000..b73bc61fb99
--- /dev/null
+++ b/tests/fsharpqa/Source/InteractiveSession/Misc/lib.fs
@@ -0,0 +1,2 @@
+module Lib
+let X () = 42
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/MultiTargeting/InlineCoreResource_author.fs b/tests/fsharpqa/Source/MultiTargeting/InlineCoreResource_author.fs
new file mode 100644
index 00000000000..bfc62f97fc2
--- /dev/null
+++ b/tests/fsharpqa/Source/MultiTargeting/InlineCoreResource_author.fs
@@ -0,0 +1,7 @@
+module Test
+
+let inline init1 n f = Array.init n f
+let init2 n f = Array.init n f
+
+let inline reduce1 f = Array.reduce f
+let reduce2 f = Array.reduce f
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/MultiTargeting/InlineCoreResource_consumer.fsx b/tests/fsharpqa/Source/MultiTargeting/InlineCoreResource_consumer.fsx
new file mode 100644
index 00000000000..bc1a98e5904
--- /dev/null
+++ b/tests/fsharpqa/Source/MultiTargeting/InlineCoreResource_consumer.fsx
@@ -0,0 +1,15 @@
+#if INTERACTIVE
+#r "author.dll"
+#else
+module Foo
+#endif
+
+Test.init1 4 (fun _ -> 4.) |> printfn "%A"
+Test.init2 4 (fun _ -> 4.) |> printfn "%A"
+
+Test.reduce1 (fun acc n -> acc + n) [| 1 .. 10 |] |> printfn "%A"
+Test.reduce2 (fun acc n -> acc + n) [| 1 .. 10 |] |> printfn "%A"
+
+#if INTERACTIVE
+#q ;;
+#endif
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/MultiTargeting/MultiTargetMatrix.fsx b/tests/fsharpqa/Source/MultiTargeting/MultiTargetMatrix.fsx
new file mode 100644
index 00000000000..7061baf8a86
--- /dev/null
+++ b/tests/fsharpqa/Source/MultiTargeting/MultiTargetMatrix.fsx
@@ -0,0 +1,114 @@
+open System
+open System.IO
+open System.Diagnostics
+open System.Reflection
+
+module Helpers =
+
+    // runs a program, and exits the script if nonzero exit code is encountered
+    let private run exePath args =
+        let args = String.concat " " args
+        let psi = ProcessStartInfo(FileName = exePath, Arguments = args, CreateNoWindow = true, UseShellExecute = false, RedirectStandardError = true)
+        let p = Process.Start(psi)
+        match p.WaitForExit(10 * 60 * 1000) with
+        | false -> eprintfn "Process timed out"; exit 1
+        | true  ->
+            if p.ExitCode <> 0 then
+               eprintfn "%s %s" exePath args
+               eprintfn "%s" (p.StandardError.ReadToEnd())
+               exit p.ExitCode
+
+    let private authorCompile compilerPath runtime source =
+        run compilerPath ["-a"; "-o:author.dll"; "--noframework"; sprintf "\"-r:%s\"" runtime; source]
+
+    let private consumerCompile compilerPath runtime source =
+        run compilerPath ["-o:consumer.exe"; "--noframework"; sprintf "\"-r:%s\"" runtime; "-r:author.dll"; source]
+
+    let private consumerRunFsi fsiPath source =
+        run fsiPath ["--exec"; source]
+
+    // runs the consumer EXE, handling binding redirects automatically
+    let private consumerRunExe redirectVer =
+        if File.Exists("consumer.exe.config") then
+            File.Delete("consumer.exe.config")
+
+        let content = File.ReadAllText("consumer.exe.config.txt").Replace("{ver}", redirectVer)
+        File.WriteAllText("consumer.exe.config", content)    
+
+        run "consumer.exe" []
+
+    /// gets the version of the assembly at the specified path
+    let getVer dllPath =
+        let asm = Assembly.ReflectionOnlyLoadFrom(dllPath)
+        asm.GetName().Version.ToString()
+
+    /// runs through the end-to-end scenario of
+    ///  - Author uses [authorComiler] to build DLL targeting [authorRuntime] with source [authorSource]
+    ///  - Consumer uses [consumerCompiler] to build EXE ref'ing above DLL, building EXE targeting [consumerRuntime] with source [consumerSource]
+    ///  - Run the resulting EXE
+    let testExe authorCompiler authorRuntime consumerCompiler consumerRuntime authorSource consumerSource =
+        authorCompile authorCompiler authorRuntime authorSource
+        consumerCompile consumerCompiler consumerRuntime consumerSource
+        consumerRunExe (getVer consumerRuntime)
+
+    /// runs through the end-to-end scenario of
+    ///  - Author uses [authorComiler] to build DLL targeting [authorRuntime] with source [authorSource]
+    ///  - Consumer uses [consumerFsi] to #r above DLL and run script [consumerSource]
+    let testFsi authorCompiler authorRuntime consumerFsi authorSource consumerSource =
+        authorCompile authorCompiler authorRuntime authorSource
+        consumerRunFsi consumerFsi consumerSource
+
+module Test = 
+    let private env s =
+        match Environment.GetEnvironmentVariable(s) with
+        | var when not (String.IsNullOrWhiteSpace(var)) -> var
+        | _ -> failwithf "Required env var %s not defined" s
+
+    // paths to vPrevious of fsc.exe, fsi.exe, FSharp.Core.dll
+    let vPrevCompiler    = env "FSCVPREV"
+    let vPrevFsi         = Path.Combine(env "FSCVPREVBINPATH", "fsi.exe")
+    let vPrevRuntime     = env "FSCOREDLLVPREVPATH"
+
+    // paths to vCurrent of fsc.exe, fsi.exe, FSharp.Core.dll
+    let vCurrentCompiler = env "FSC"
+    let vCurrentFsi      = Path.Combine(env "FSCBINPATH", "fsi.exe")
+    let vCurrentRuntime  = env "FSCOREDLLPATH"
+
+    let cases =
+          //                  compiler/runtime of author     |  compiler/runtime of consumer
+        [ 0,  Helpers.testExe vPrevCompiler    vPrevRuntime     vCurrentCompiler vPrevRuntime
+          1,  Helpers.testExe vPrevCompiler    vPrevRuntime     vCurrentCompiler vCurrentRuntime
+          2,  Helpers.testExe vCurrentCompiler vPrevRuntime     vPrevCompiler    vPrevRuntime
+          3,  Helpers.testExe vCurrentCompiler vPrevRuntime     vCurrentCompiler vPrevRuntime
+          4,  Helpers.testExe vCurrentCompiler vPrevRuntime     vCurrentCompiler vCurrentRuntime
+          5,  Helpers.testExe vCurrentCompiler vCurrentRuntime  vCurrentCompiler vCurrentRuntime
+
+          //                  compiler/runtime of author     |  fsi of consumer
+          6,  Helpers.testFsi vPrevCompiler    vPrevRuntime     vCurrentFsi
+          7,  Helpers.testFsi vCurrentCompiler vPrevRuntime     vCurrentFsi
+          8,  Helpers.testFsi vCurrentCompiler vPrevRuntime     vPrevFsi
+          9,  Helpers.testFsi vCurrentCompiler vCurrentRuntime  vCurrentFsi
+         ]
+ 
+// parse command line args
+// final 'exclusions' arg allows for certain scenarios to be skipped if they are not expected to work
+let authorSource, consumerSource, exclusions =
+    match fsi.CommandLineArgs with
+    | [| _; arg1; arg2 |] -> arg1, arg2, [| |]
+    | [| _; arg1; arg2; arg3 |] -> arg1, arg2, (arg3.Split(',') |> Array.map int)
+    | args ->
+        eprintfn "Expecting args   [excluded cases], got args %A" args
+        exit 1
+
+// failsafe to make sure that excluded scenarios are revisited on new versions
+// i.e. exclusions valid for vN/vN-1 will probably no longer be needed for vN+1/vN
+if not ((Helpers.getVer Test.vCurrentRuntime).StartsWith("4.4.0")) then
+    eprintfn "Runtime version has changed, review exclusions lists for these tests"
+    exit 1
+
+Test.cases
+|> List.filter (fun (id, _) -> not (Array.contains id exclusions))
+|> List.iter (fun (id, testCase) ->
+    printfn "Case %d" id
+    testCase authorSource consumerSource
+)
diff --git a/tests/fsharpqa/Source/MultiTargeting/QuotedCommaTypeName_author.fs b/tests/fsharpqa/Source/MultiTargeting/QuotedCommaTypeName_author.fs
new file mode 100644
index 00000000000..6dc2e9f55c0
--- /dev/null
+++ b/tests/fsharpqa/Source/MultiTargeting/QuotedCommaTypeName_author.fs
@@ -0,0 +1,5 @@
+module Foo
+
+type ``one, two, three``() = class end
+
+let X = <@ ``one, two, three``() @>
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/MultiTargeting/QuotedCommaTypeName_consumer.fsx b/tests/fsharpqa/Source/MultiTargeting/QuotedCommaTypeName_consumer.fsx
new file mode 100644
index 00000000000..417380f8f91
--- /dev/null
+++ b/tests/fsharpqa/Source/MultiTargeting/QuotedCommaTypeName_consumer.fsx
@@ -0,0 +1,11 @@
+#if INTERACTIVE
+#r "author.dll"
+#else
+module Test
+#endif
+
+printfn "%A" Foo.X
+
+#if INTERACTIVE
+#q ;;
+#endif
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/MultiTargeting/consumer.exe.config.txt b/tests/fsharpqa/Source/MultiTargeting/consumer.exe.config.txt
new file mode 100644
index 00000000000..135c8d78ce3
--- /dev/null
+++ b/tests/fsharpqa/Source/MultiTargeting/consumer.exe.config.txt
@@ -0,0 +1,16 @@
+
+
+  
+    
+      
+        
+        
+      
+    
+  
+
diff --git a/tests/fsharpqa/Source/MultiTargeting/dummy.fs b/tests/fsharpqa/Source/MultiTargeting/dummy.fs
new file mode 100644
index 00000000000..1e2aa1c9e88
--- /dev/null
+++ b/tests/fsharpqa/Source/MultiTargeting/dummy.fs
@@ -0,0 +1,7 @@
+// Every testcase need a sourcefile, so this is a fake one.
+// Add some code so that you don't get the 'empty module' warning.
+
+if false then
+    printfn "Hello, World!"
+
+exit 0
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/MultiTargeting/env.lst b/tests/fsharpqa/Source/MultiTargeting/env.lst
index 1d1c672ab19..4a7e75349fe 100644
--- a/tests/fsharpqa/Source/MultiTargeting/env.lst
+++ b/tests/fsharpqa/Source/MultiTargeting/env.lst
@@ -1,6 +1,9 @@
-NOMONO	SOURCE=E_MissingReferenceToFSharpCore20.fs  SCFLAGS=" " ISCFLAGS="--noframework -r %WINDIR%\\Microsoft.NET\\Framework\\v2.0.50727\\mscorlib.dll"					# E_MissingReferenceToFSharpCore20.fs
-NOMONO	SOURCE=E_BadPathToFSharpCore.fs             SCFLAGS=" " ISCFLAGS="--noframework -r %WINDIR%\\Microsoft.NET\\Framework\\v2.0.50727\\mscorlib.dll -r I_DO_NOT_EXIST\\FSharp.Core.dll"	# E_BadPathToFSharpCore.fs
-NOMONO	SOURCE=E_BadPathToFSharpCore.fsx            SCFLAGS=" " ISCFLAGS="--noframework -r %WINDIR%\\Microsoft.NET\\Framework\\v2.0.50727\\mscorlib.dll -r I_DO_NOT_EXIST\\FSharp.Core.dll"	# E_BadPathToFSharpCore.fsx
+NOMONO,NOOPEN	SOURCE=E_MissingReferenceToFSharpCore20.fs   SCFLAGS="--noframework -r %WINDIR%\\Microsoft.NET\\Framework\\v2.0.50727\\mscorlib.dll"					# E_MissingReferenceToFSharpCore20.fs
+NOMONO	SOURCE=E_BadPathToFSharpCore.fs              SCFLAGS="--noframework -r %WINDIR%\\Microsoft.NET\\Framework\\v2.0.50727\\mscorlib.dll -r I_DO_NOT_EXIST\\FSharp.Core.dll"	# E_BadPathToFSharpCore.fs
+NOMONO	SOURCE=E_BadPathToFSharpCore.fsx             SCFLAGS="--noframework -r %WINDIR%\\Microsoft.NET\\Framework\\v2.0.50727\\mscorlib.dll -r I_DO_NOT_EXIST\\FSharp.Core.dll"	# E_BadPathToFSharpCore.fsx
 
 # FSharp.Core is checked in for this test to verify a particular error message related to it. It shouldn't be accidentally picked up by other tests since it isn't in the working directory for them
-NOMONO	SOURCE=E_UseBinaryIncompatibleLibrary.fs    SCFLAGS=" " ISCFLAGS="--noframework -r ..\\Common\\FSharp.Core.dll"	# E_UseBinaryIncompatibleLibrary.fs
+NOMONO	SOURCE=E_UseBinaryIncompatibleLibrary.fs     SCFLAGS="--noframework -r ..\\Common\\FSharp.Core.dll"	# E_UseBinaryIncompatibleLibrary.fs
+
+ReqOpen	SOURCE=dummy.fs  POSTCMD="\$FSI_PIPE --nologo --quiet --exec .\\MultiTargetMatrix.fsx   QuotedCommaTypeName_author.fs QuotedCommaTypeName_consumer.fsx 0,8"		#  QuotedCommaTypeName
+ReqOpen	SOURCE=dummy.fs  POSTCMD="\$FSI_PIPE --nologo --quiet --exec .\\MultiTargetMatrix.fsx   InlineCoreResource_author.fs InlineCoreResource_consumer.fsx"		#  InlineCoreResource
\ No newline at end of file
diff --git a/tests/fsharpqa/Source/Optimizations/AssemblyBoundary/env.lst b/tests/fsharpqa/Source/Optimizations/AssemblyBoundary/env.lst
index 54584603f5c..401e3a6f896 100644
--- a/tests/fsharpqa/Source/Optimizations/AssemblyBoundary/env.lst
+++ b/tests/fsharpqa/Source/Optimizations/AssemblyBoundary/env.lst
@@ -1,7 +1,7 @@
-	SOURCE=test01.fs ISCFLAGS="--optimize+" SCFLAGS="-r:lib01.dll" PRECMD="\$FSC_PIPE -a --optimize+ lib01.fs"	# test01.fs
-	SOURCE=test02.fs ISCFLAGS="--optimize+" SCFLAGS="-r:lib02.dll" PRECMD="\$FSC_PIPE -a --optimize+ lib02.fs"	# test02.fs
-	SOURCE=test03.fs ISCFLAGS="--optimize+" SCFLAGS="-r:lib03.dll" PRECMD="\$FSC_PIPE -a --optimize+ lib03.fs"	# test03.fs
-	SOURCE=test04.fs ISCFLAGS="--optimize+" SCFLAGS="-r:lib04.dll" PRECMD="\$FSC_PIPE -a --optimize+ lib04.fs"	# test04.fs
+NoMT	SOURCE=test01.fs SCFLAGS="--optimize+ -r:lib01.dll" PRECMD="\$FSC_PIPE -a --optimize+ lib01.fs"	# test01.fs
+NoMT	SOURCE=test02.fs SCFLAGS="--optimize+ -r:lib02.dll" PRECMD="\$FSC_PIPE -a --optimize+ lib02.fs"	# test02.fs
+NoMT	SOURCE=test03.fs SCFLAGS="--optimize+ -r:lib03.dll" PRECMD="\$FSC_PIPE -a --optimize+ lib03.fs"	# test03.fs
+NoMT	SOURCE=test04.fs SCFLAGS="--optimize+ -r:lib04.dll" PRECMD="\$FSC_PIPE -a --optimize+ lib04.fs"	# test04.fs
 
 	SOURCE=InlineWithPrivateValues01.fs SCFLAGS="-r:TypeLib01.dll" PRECMD="\$FSC_PIPE -a --optimize+ TypeLib01.fs"	# InlineWithPrivateValuesStruct
-	SOURCE=InlineWithPrivateValues01.fs SCFLAGS="-r:TypeLib02.dll" PRECMD="\$FSC_PIPE -a --optimize+ TypeLib02.fs"	# InlineWithPrivateValuesRef
\ No newline at end of file
+	SOURCE=InlineWithPrivateValues01.fs SCFLAGS="-r:TypeLib02.dll" PRECMD="\$FSC_PIPE -a --optimize+ TypeLib02.fs"	# InlineWithPrivateValuesRef
diff --git a/tests/fsharpqa/Source/Optimizations/ForLoop/env.lst b/tests/fsharpqa/Source/Optimizations/ForLoop/env.lst
index e0b1f32e8f3..39dba485c9f 100644
--- a/tests/fsharpqa/Source/Optimizations/ForLoop/env.lst
+++ b/tests/fsharpqa/Source/Optimizations/ForLoop/env.lst
@@ -1,24 +1,24 @@
 # Exclude the genuine CodeGen tests when doing MT runs
-NOMONO,NoMT	SOURCE=NoAllocationOfTuple01.fs ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd NoAllocationOfTuple01.dll"	# NoAllocationOfTuple01.fs
-NOMONO,NoMT	SOURCE=ForEachOnArray01.fs      ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ForEachOnArray01.dll"		# ForEachOnArray01.fs
-NOMONO,NoMT	SOURCE=ZeroToArrLength01.fs     ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ZeroToArrLength01.dll"	# ZeroToArrLength01.fs
-NOMONO,NoMT	SOURCE=ZeroToArrLength02.fs     ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ZeroToArrLength02.dll"	# ZeroToArrLength02.fs
+NOMONO,NoMT	SOURCE=NoAllocationOfTuple01.fs SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd NoAllocationOfTuple01.dll"	# NoAllocationOfTuple01.fs
+NOMONO,NoMT	SOURCE=ForEachOnArray01.fs      SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ForEachOnArray01.dll"		# ForEachOnArray01.fs
+NOMONO,NoMT	SOURCE=ZeroToArrLength01.fs     SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ZeroToArrLength01.dll"	# ZeroToArrLength01.fs
+NOMONO,NoMT	SOURCE=ZeroToArrLength02.fs     SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd ZeroToArrLength02.dll"	# ZeroToArrLength02.fs
 
-NOMONO,NoMT	SOURCE=NoIEnumerable01.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd NoIEnumerable01.dll"	# NoIEnumerable01.fsx
-NOMONO,NoMT	SOURCE=NoIEnumerable02.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd NoIEnumerable02.dll"	# NoIEnumerable02.fsx
-NOMONO,NoMT	SOURCE=NoIEnumerable03.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd NoIEnumerable03.dll"	# NoIEnumerable03.fsx
+NOMONO,NoMT	SOURCE=NoIEnumerable01.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd NoIEnumerable01.dll"	# NoIEnumerable01.fsx
+NOMONO,NoMT	SOURCE=NoIEnumerable02.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd NoIEnumerable02.dll"	# NoIEnumerable02.fsx
+NOMONO,NoMT	SOURCE=NoIEnumerable03.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd NoIEnumerable03.dll"	# NoIEnumerable03.fsx
 
-	SOURCE=NonTrivialBranchingBindingInEnd01.fs ISCFLAGS="--optimize+"	# NonTrivialBranchingBindingInEnd01.fs --optimize+
-	SOURCE=NonTrivialBranchingBindingInEnd01.fs ISCFLAGS="--optimize-"	# NonTrivialBranchingBindingInEnd01.fs --optimize-
+	SOURCE=NonTrivialBranchingBindingInEnd01.fs SCFLAGS="--optimize+"	# NonTrivialBranchingBindingInEnd01.fs --optimize+
+	SOURCE=NonTrivialBranchingBindingInEnd01.fs SCFLAGS="--optimize-"	# NonTrivialBranchingBindingInEnd01.fs --optimize-
 
-	SOURCE=NonTrivialBranchingBindingInEnd02.fs ISCFLAGS="--optimize+"	# NonTrivialBranchingBindingInEnd02.fs --optimize+
-	SOURCE=NonTrivialBranchingBindingInEnd02.fs ISCFLAGS="--optimize-"	# NonTrivialBranchingBindingInEnd02.fs --optimize-
+	SOURCE=NonTrivialBranchingBindingInEnd02.fs SCFLAGS="--optimize+"	# NonTrivialBranchingBindingInEnd02.fs --optimize+
+	SOURCE=NonTrivialBranchingBindingInEnd02.fs SCFLAGS="--optimize-"	# NonTrivialBranchingBindingInEnd02.fs --optimize-
 
-	SOURCE=NonTrivialBranchingBindingInEnd03.fs ISCFLAGS="--optimize+"	# NonTrivialBranchingBindingInEnd03.fs --optimize+
-	SOURCE=NonTrivialBranchingBindingInEnd03.fs ISCFLAGS="--optimize-"	# NonTrivialBranchingBindingInEnd03.fs --optimize-
+	SOURCE=NonTrivialBranchingBindingInEnd03.fs SCFLAGS="--optimize+"	# NonTrivialBranchingBindingInEnd03.fs --optimize+
+	SOURCE=NonTrivialBranchingBindingInEnd03.fs SCFLAGS="--optimize-"	# NonTrivialBranchingBindingInEnd03.fs --optimize-
 
-	SOURCE=NonTrivialBranchingBindingInEnd04.fs ISCFLAGS="--optimize+"	# NonTrivialBranchingBindingInEnd04.fs --optimize+
-	SOURCE=NonTrivialBranchingBindingInEnd04.fs ISCFLAGS="--optimize-"	# NonTrivialBranchingBindingInEnd04.fs --optimize-
+	SOURCE=NonTrivialBranchingBindingInEnd04.fs SCFLAGS="--optimize+"	# NonTrivialBranchingBindingInEnd04.fs --optimize+
+	SOURCE=NonTrivialBranchingBindingInEnd04.fs SCFLAGS="--optimize-"	# NonTrivialBranchingBindingInEnd04.fs --optimize-
 
-	SOURCE=NonTrivialBranchingBindingInEnd05.fs ISCFLAGS="--optimize+"	# NonTrivialBranchingBindingInEnd05.fs --optimize+
-	SOURCE=NonTrivialBranchingBindingInEnd05.fs ISCFLAGS="--optimize-"	# NonTrivialBranchingBindingInEnd05.fs --optimize-
+	SOURCE=NonTrivialBranchingBindingInEnd05.fs SCFLAGS="--optimize+"	# NonTrivialBranchingBindingInEnd05.fs --optimize+
+	SOURCE=NonTrivialBranchingBindingInEnd05.fs SCFLAGS="--optimize-"	# NonTrivialBranchingBindingInEnd05.fs --optimize-
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare01.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare01.il.bsl
index 71f46645b36..c7674b1fb31 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare01.il.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare01.il.bsl
@@ -13,7 +13,7 @@
 .assembly extern FSharp.Core
 {
   .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:
-  .ver 4:0:0:0
+  .ver 4:4:0:9055
 }
 .assembly Compare01
 {
@@ -21,7 +21,7 @@
                                                                                                       int32,
                                                                                                       int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) 
 
-  // --- The following custom attribute is added automatically, do not uncomment -------
+  // 
   //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) 
 
   .hash algorithm 0x00008004
@@ -29,20 +29,20 @@
 }
 .mresource public FSharpSignatureData.Compare01
 {
-  // Offset: 0x00000000 Length: 0x00000239
+  // Offset: 0x00000000 Length: 0x0000023F
 }
 .mresource public FSharpOptimizationData.Compare01
 {
-  // Offset: 0x00000240 Length: 0x000000B2
+  // Offset: 0x00000248 Length: 0x000000B2
 }
 .module Compare01.dll
-// MVID: {4BEB29DE-04A0-F88E-A745-0383DE29EB4B}
+// MVID: {54400E31-04A0-F88E-A745-0383310E4054}
 .imagebase 0x00400000
 .file alignment 0x00000200
 .stackreserve 0x00100000
 .subsystem 0x0003       // WINDOWS_CUI
 .corflags 0x00000001    //  ILONLY
-// Image base: 0x003F0000
+// Image base: 0x00AE0000
 
 
 // =============== CLASS MEMBERS DECLARATION ===================
@@ -57,60 +57,46 @@
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
     .method public static void  f4() cil managed
     {
-      // Code size       54 (0x36)
+      // 
       .maxstack  4
       .locals init ([0] int32 x,
-               [1] class [mscorlib]System.Tuple`2 t1,
-               [2] class [mscorlib]System.Tuple`2 t2,
-               [3] int32 i,
-               [4] int32 V_4)
+               [1] int32 i,
+               [2] int32 V_2)
       .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
-      .line 5,5 : 8,25 
+      .line 5,5 : 8,25 'C:\\Users\\latkin\\Source\\Repos\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Compare01.fsx'
       IL_0000:  nop
       IL_0001:  ldc.i4.1
       IL_0002:  stloc.0
-      .line 6,6 : 8,22 
-      IL_0003:  ldc.i4.1
-      IL_0004:  ldc.i4.2
-      IL_0005:  newobj     instance void class [mscorlib]System.Tuple`2::.ctor(!0,
-                                                                                            !1)
-      IL_000a:  stloc.1
-      .line 7,7 : 8,22 
-      IL_000b:  ldc.i4.1
-      IL_000c:  ldc.i4.3
-      IL_000d:  newobj     instance void class [mscorlib]System.Tuple`2::.ctor(!0,
-                                                                                            !1)
-      IL_0012:  stloc.2
-      .line 9,9 : 8,32 
-      IL_0013:  ldc.i4.0
-      IL_0014:  stloc.3
-      IL_0015:  br.s       IL_002d
-
-      .line 10,10 : 12,30 
+      .line 9,9 : 8,32 ''
+      IL_0003:  ldc.i4.0
+      IL_0004:  stloc.1
+      IL_0005:  br.s       IL_001a
+
+      .line 10,10 : 12,30 ''
+      IL_0007:  ldc.i4.1
+      IL_0008:  ldc.i4.1
+      IL_0009:  cgt
+      IL_000b:  stloc.2
+      IL_000c:  ldloc.2
+      IL_000d:  brfalse.s  IL_0013
+
+      IL_000f:  ldloc.2
+      IL_0010:  nop
+      IL_0011:  br.s       IL_0015
+
+      IL_0013:  ldc.i4.m1
+      IL_0014:  nop
+      IL_0015:  stloc.0
+      IL_0016:  ldloc.1
       IL_0017:  ldc.i4.1
-      IL_0018:  ldc.i4.1
-      IL_0019:  cgt
-      IL_001b:  stloc.s    V_4
-      IL_001d:  ldloc.s    V_4
-      IL_001f:  brfalse.s  IL_0026
-
-      IL_0021:  ldloc.s    V_4
-      IL_0023:  nop
-      IL_0024:  br.s       IL_0028
-
-      IL_0026:  ldc.i4.m1
-      IL_0027:  nop
-      IL_0028:  stloc.0
-      IL_0029:  ldloc.3
-      IL_002a:  ldc.i4.1
-      IL_002b:  add
-      IL_002c:  stloc.3
-      .line 9,9 : 21,29 
-      IL_002d:  ldloc.3
-      IL_002e:  ldc.i4     0x989681
-      IL_0033:  blt.s      IL_0017
-
-      IL_0035:  ret
+      IL_0018:  add
+      IL_0019:  stloc.1
+      .line 9,9 : 21,29 ''
+      IL_001a:  ldloc.1
+      IL_001b:  ldc.i4     0x989681
+      IL_0020:  blt.s      IL_0007
+
+      IL_0022:  ret
     } // end of method CompareMicroPerfAndCodeGenerationTests::f4
 
   } // end of class CompareMicroPerfAndCodeGenerationTests
@@ -125,4 +111,4 @@
 
 // =============================================================
 
-// *********** DISASSEMBLY COMPLETE ***********************
+// 
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare01.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare01.il.netfx4.bsl
index e7254fb4a57..c7674b1fb31 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare01.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare01.il.netfx4.bsl
@@ -1,5 +1,5 @@
 
-//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.16774
+//  Microsoft (R) .NET Framework IL Disassembler.  Version 4.0.30319.1
 //  Copyright (c) Microsoft Corporation.  All rights reserved.
 
 
@@ -13,7 +13,7 @@
 .assembly extern FSharp.Core
 {
   .publickeytoken = (B0 3F 5F 7F 11 D5 0A 3A )                         // .?_....:
-  .ver 4:0:0:0
+  .ver 4:4:0:9055
 }
 .assembly Compare01
 {
@@ -21,7 +21,7 @@
                                                                                                       int32,
                                                                                                       int32) = ( 01 00 02 00 00 00 00 00 00 00 00 00 00 00 00 00 ) 
 
-  // --- The following custom attribute is added automatically, do not uncomment -------
+  // 
   //  .custom instance void [mscorlib]System.Diagnostics.DebuggableAttribute::.ctor(valuetype [mscorlib]System.Diagnostics.DebuggableAttribute/DebuggingModes) = ( 01 00 03 00 00 00 00 00 ) 
 
   .hash algorithm 0x00008004
@@ -29,20 +29,20 @@
 }
 .mresource public FSharpSignatureData.Compare01
 {
-  // Offset: 0x00000000 Length: 0x00000249
+  // Offset: 0x00000000 Length: 0x0000023F
 }
 .mresource public FSharpOptimizationData.Compare01
 {
-  // Offset: 0x00000250 Length: 0x000000B2
+  // Offset: 0x00000248 Length: 0x000000B2
 }
 .module Compare01.dll
-// MVID: {4DAC3A2E-04A0-F88E-A745-03832E3AAC4D}
+// MVID: {54400E31-04A0-F88E-A745-0383310E4054}
 .imagebase 0x00400000
 .file alignment 0x00000200
 .stackreserve 0x00100000
 .subsystem 0x0003       // WINDOWS_CUI
 .corflags 0x00000001    //  ILONLY
-// Image base: 0x0000000000360000
+// Image base: 0x00AE0000
 
 
 // =============== CLASS MEMBERS DECLARATION ===================
@@ -57,60 +57,46 @@
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
     .method public static void  f4() cil managed
     {
-      // Code size       54 (0x36)
+      // 
       .maxstack  4
       .locals init ([0] int32 x,
-               [1] class [mscorlib]System.Tuple`2 t1,
-               [2] class [mscorlib]System.Tuple`2 t2,
-               [3] int32 i,
-               [4] int32 V_4)
+               [1] int32 i,
+               [2] int32 V_2)
       .language '{AB4F38C9-B6E6-43BA-BE3B-58080B2CCCE3}', '{994B45C4-E6E9-11D2-903F-00C04FA302A1}', '{5A869D0B-6611-11D3-BD2A-0000F80849BD}'
-      .line 5,5 : 8,25 
+      .line 5,5 : 8,25 'C:\\Users\\latkin\\Source\\Repos\\visualfsharp\\tests\\fsharpqa\\Source\\Optimizations\\GenericComparison\\Compare01.fsx'
       IL_0000:  nop
       IL_0001:  ldc.i4.1
       IL_0002:  stloc.0
-      .line 6,6 : 8,22 
-      IL_0003:  ldc.i4.1
-      IL_0004:  ldc.i4.2
-      IL_0005:  newobj     instance void class [mscorlib]System.Tuple`2::.ctor(!0,
-                                                                                            !1)
-      IL_000a:  stloc.1
-      .line 7,7 : 8,22 
-      IL_000b:  ldc.i4.1
-      IL_000c:  ldc.i4.3
-      IL_000d:  newobj     instance void class [mscorlib]System.Tuple`2::.ctor(!0,
-                                                                                            !1)
-      IL_0012:  stloc.2
-      .line 9,9 : 8,32 
-      IL_0013:  ldc.i4.0
-      IL_0014:  stloc.3
-      IL_0015:  br.s       IL_002d
-
-      .line 10,10 : 12,30 
+      .line 9,9 : 8,32 ''
+      IL_0003:  ldc.i4.0
+      IL_0004:  stloc.1
+      IL_0005:  br.s       IL_001a
+
+      .line 10,10 : 12,30 ''
+      IL_0007:  ldc.i4.1
+      IL_0008:  ldc.i4.1
+      IL_0009:  cgt
+      IL_000b:  stloc.2
+      IL_000c:  ldloc.2
+      IL_000d:  brfalse.s  IL_0013
+
+      IL_000f:  ldloc.2
+      IL_0010:  nop
+      IL_0011:  br.s       IL_0015
+
+      IL_0013:  ldc.i4.m1
+      IL_0014:  nop
+      IL_0015:  stloc.0
+      IL_0016:  ldloc.1
       IL_0017:  ldc.i4.1
-      IL_0018:  ldc.i4.1
-      IL_0019:  cgt
-      IL_001b:  stloc.s    V_4
-      IL_001d:  ldloc.s    V_4
-      IL_001f:  brfalse.s  IL_0026
-
-      IL_0021:  ldloc.s    V_4
-      IL_0023:  nop
-      IL_0024:  br.s       IL_0028
-
-      IL_0026:  ldc.i4.m1
-      IL_0027:  nop
-      IL_0028:  stloc.0
-      IL_0029:  ldloc.3
-      IL_002a:  ldc.i4.1
-      IL_002b:  add
-      IL_002c:  stloc.3
-      .line 9,9 : 21,29 
-      IL_002d:  ldloc.3
-      IL_002e:  ldc.i4     0x989681
-      IL_0033:  blt.s      IL_0017
-
-      IL_0035:  ret
+      IL_0018:  add
+      IL_0019:  stloc.1
+      .line 9,9 : 21,29 ''
+      IL_001a:  ldloc.1
+      IL_001b:  ldc.i4     0x989681
+      IL_0020:  blt.s      IL_0007
+
+      IL_0022:  ret
     } // end of method CompareMicroPerfAndCodeGenerationTests::f4
 
   } // end of class CompareMicroPerfAndCodeGenerationTests
@@ -125,4 +111,4 @@
 
 // =============================================================
 
-// *********** DISASSEMBLY COMPLETE ***********************
+// 
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare02.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare02.il.bsl
index 90f519c43ea..1eedd451395 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare02.il.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare02.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare02.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare02.il.netfx4.bsl
index bf52e2402c1..1eedd451395 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare02.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare02.il.netfx4.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare03.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare03.il.bsl
index 0efca179315..453560cee32 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare03.il.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare03.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare03.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare03.il.netfx4.bsl
index b44451fb9a7..6dd8efdf8a1 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare03.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare03.il.netfx4.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare04.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare04.il.bsl
index 6aa7995e004..f59a521fb36 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare04.il.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare04.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare04.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare04.il.netfx4.bsl
index 36c3a2f0a40..725a9d176df 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare04.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare04.il.netfx4.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare05.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare05.il.bsl
index 7323d3fc971..2ebcac02111 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare05.il.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare05.il.bsl
@@ -55,7 +55,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit Key
+    .class auto autochar serializable sealed nested public beforefieldinit Key
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare05.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare05.il.netfx4.bsl
index 9739729ece2..eb67a265a4a 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare05.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare05.il.netfx4.bsl
@@ -55,7 +55,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit Key
+    .class auto autochar serializable sealed nested public beforefieldinit Key
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare07.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare07.il.bsl
index ff7e5009f03..095a8ea8996 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare07.il.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare07.il.bsl
@@ -55,7 +55,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit GenericKey`1
+    .class auto autochar serializable sealed nested public beforefieldinit GenericKey`1
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1>,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare07.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare07.il.netfx4.bsl
index c69002b8ed0..d3f94c4eee7 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare07.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare07.il.netfx4.bsl
@@ -55,7 +55,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit GenericKey`1
+    .class auto autochar serializable sealed nested public beforefieldinit GenericKey`1
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1>,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare10.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare10.il.bsl
index b74156c9dbd..2ffe9c75cd7 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare10.il.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare10.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare10.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare10.il.netfx4.bsl
index c7334c58e0b..50bdd64b311 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare10.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare10.il.netfx4.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare11.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare11.il.bsl
index ec2b676820d..4ee86ddfc2c 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare11.il.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare11.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare11.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare11.il.netfx4.bsl
index 451be841e19..a430262e469 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare11.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Compare11.il.netfx4.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals01.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals01.il.bsl
index bcf7760050f..f0bf7897bb6 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals01.il.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals01.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals01.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals01.il.netfx4.bsl
index 547f5b33145..7567c7b78fa 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals01.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals01.il.netfx4.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.bsl
index 1778919c32c..ab6e654781e 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.netfx4.bsl
index 2e7c493987a..e201bb7c396 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals02.il.netfx4.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.bsl
index f31e4807c1c..4563c4fde26 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.netfx4.bsl
index f8957e92d99..45bd80745ce 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals03.il.netfx4.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals04.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals04.il.bsl
index 11b892174f8..3e750cdac18 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals04.il.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals04.il.bsl
@@ -55,7 +55,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit Key
+    .class auto autochar serializable sealed nested public beforefieldinit Key
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals04.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals04.il.netfx4.bsl
index e9fccebef5c..897868f7839 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals04.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals04.il.netfx4.bsl
@@ -55,7 +55,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit Key
+    .class auto autochar serializable sealed nested public beforefieldinit Key
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals06.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals06.il.bsl
index 68a1f3f742f..5c33b7d6841 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals06.il.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals06.il.bsl
@@ -55,7 +55,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit GenericKey`1
+    .class auto autochar serializable sealed nested public beforefieldinit GenericKey`1
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1>,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals06.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals06.il.netfx4.bsl
index ae1f2d82191..d9504cae2c9 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals06.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals06.il.netfx4.bsl
@@ -55,7 +55,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit GenericKey`1
+    .class auto autochar serializable sealed nested public beforefieldinit GenericKey`1
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1>,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals09.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals09.il.bsl
index 476a47f47db..f9b7382d804 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals09.il.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals09.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals09.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals09.il.netfx4.bsl
index f6201f7881d..e48cd004d36 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals09.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Equals09.il.netfx4.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash01.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash01.il.bsl
index 1cf8199ae57..efe6de5d65c 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash01.il.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash01.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash01.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash01.il.netfx4.bsl
index c238b7fa123..6529970fc42 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash01.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash01.il.netfx4.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash02.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash02.il.bsl
index b30c33b6690..aa623715818 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash02.il.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash02.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash02.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash02.il.netfx4.bsl
index a5efeb03f90..64f5ab4c3af 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash02.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash02.il.netfx4.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.bsl
index fcc24d632e1..d85c561f050 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.netfx4.bsl
index c2909361b50..de4d8301225 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash03.il.netfx4.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.bsl
index 78e7ac8aaf9..bd19f56e316 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.netfx4.bsl
index 5f99c69b57e..920e9b3624e 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash04.il.netfx4.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash05.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash05.il.bsl
index 9a6e8539dfc..0374b8f1a77 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash05.il.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash05.il.bsl
@@ -55,7 +55,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit Key
+    .class auto autochar serializable sealed nested public beforefieldinit Key
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash05.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash05.il.netfx4.bsl
index aece9e0c173..7dd7f57d48a 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash05.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash05.il.netfx4.bsl
@@ -55,7 +55,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit Key
+    .class auto autochar serializable sealed nested public beforefieldinit Key
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash06.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash06.il.bsl
index d2b316fa2c3..d7b14a26e50 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash06.il.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash06.il.bsl
@@ -55,7 +55,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit Key
+    .class auto autochar serializable sealed nested public beforefieldinit Key
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash06.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash06.il.netfx4.bsl
index 78392b3ebbc..7dff8797881 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash06.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash06.il.netfx4.bsl
@@ -55,7 +55,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit Key
+    .class auto autochar serializable sealed nested public beforefieldinit Key
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash09.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash09.il.bsl
index 504d97b9376..09b53dea9ce 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash09.il.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash09.il.bsl
@@ -55,7 +55,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit GenericKey`1
+    .class auto autochar serializable sealed nested public beforefieldinit GenericKey`1
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1>,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash09.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash09.il.netfx4.bsl
index c1e73e25dab..340d96ae54c 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash09.il.netfx4.bsl
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash09.il.netfx4.bsl
@@ -55,7 +55,7 @@
          extends [mscorlib]System.Object
   {
     .custom instance void [FSharp.Core]Microsoft.FSharp.Core.CompilationMappingAttribute::.ctor(valuetype [FSharp.Core]Microsoft.FSharp.Core.SourceConstructFlags) = ( 01 00 07 00 00 00 00 00 ) 
-    .class auto autochar serializable nested public beforefieldinit GenericKey`1
+    .class auto autochar serializable sealed nested public beforefieldinit GenericKey`1
            extends [mscorlib]System.Object
            implements class [mscorlib]System.IEquatable`1>,
                       [mscorlib]System.Collections.IStructuralEquatable,
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash12.il.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash12.il.bsl
index 4de65734895..bcfd607b9b3 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash12.il.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash12.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash12.il.netfx4.bsl b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash12.il.netfx4.bsl
index 3f27ce3eb53..487646776d3 100644
Binary files a/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash12.il.netfx4.bsl and b/tests/fsharpqa/Source/Optimizations/GenericComparison/Hash12.il.netfx4.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/GenericComparison/env.lst b/tests/fsharpqa/Source/Optimizations/GenericComparison/env.lst
index 5bca37fcdcc..5f92b0a00f0 100644
--- a/tests/fsharpqa/Source/Optimizations/GenericComparison/env.lst
+++ b/tests/fsharpqa/Source/Optimizations/GenericComparison/env.lst
@@ -1,41 +1,41 @@
-NoMT				SOURCE=Compare08.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare08.dll"	# Compare08.fs
-NoMT				SOURCE=Compare09.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare09.dll"	# Compare09.fs
+NoMT				SOURCE=Compare08.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare08.dll"	# Compare08.fs
+NoMT				SOURCE=Compare09.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare09.dll"	# Compare09.fs
 
 
-NoMT				SOURCE=Hash07.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash07.dll"		# Hash07.fs
-NoMT				SOURCE=Hash10.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash10.dll"		# Hash10.fs
-NoMT				SOURCE=Hash11.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash11.dll"		# Hash11.fs
+NoMT				SOURCE=Hash07.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash07.dll"		# Hash07.fs
+NoMT				SOURCE=Hash10.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash10.dll"		# Hash10.fs
+NoMT				SOURCE=Hash11.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash11.dll"		# Hash11.fs
 
 
 ##########
 ##########
 
-NoMT	SOURCE=Compare01.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare01.dll NetFx40"	# Compare01.fs - NetFx40
-NoMT	SOURCE=Compare02.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare02.dll NetFx40"	# Compare02.fs - NetFx40
-NoMT	SOURCE=Compare03.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare03.dll NetFx40"  	# Compare03.fs - NetFx40
-NoMT	SOURCE=Compare04.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare04.dll NetFx40"	# Compare04.fs - NetFx40
-NoMT	SOURCE=Compare05.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare05.dll NetFx40"	# Compare05.fs - NetFx40
-NoMT	SOURCE=Compare06.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare06.dll NetFx40"	# Compare06.fs - NetFx40
-NoMT	SOURCE=Compare07.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare07.dll NetFx40"	# Compare07.fs - NetFx40
-NoMT	SOURCE=Compare10.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare10.dll NetFx40"	# Compare10.fs - NetFx40
-NoMT	SOURCE=Compare11.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare11.dll NetFx40"	# Compare11.fs - NetFx40
+NoMT	SOURCE=Compare01.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare01.dll NetFx40"	# Compare01.fs - NetFx40
+NoMT	SOURCE=Compare02.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare02.dll NetFx40"	# Compare02.fs - NetFx40
+NoMT	SOURCE=Compare03.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare03.dll NetFx40"  	# Compare03.fs - NetFx40
+NoMT	SOURCE=Compare04.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare04.dll NetFx40"	# Compare04.fs - NetFx40
+NoMT	SOURCE=Compare05.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare05.dll NetFx40"	# Compare05.fs - NetFx40
+NoMT	SOURCE=Compare06.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare06.dll NetFx40"	# Compare06.fs - NetFx40
+NoMT	SOURCE=Compare07.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare07.dll NetFx40"	# Compare07.fs - NetFx40
+NoMT	SOURCE=Compare10.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare10.dll NetFx40"	# Compare10.fs - NetFx40
+NoMT	SOURCE=Compare11.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Compare11.dll NetFx40"	# Compare11.fs - NetFx40
 
-NoMT	SOURCE=Equals01.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals01.dll NetFx40"	# Equals01.fs - NetFx40
-NoMT	SOURCE=Equals02.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals02.dll NetFx40"	# Equals02.fs - NetFx40
-NoMT	SOURCE=Equals03.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals03.dll NetFx40"	# Equals03.fs - NetFx40
-NoMT	SOURCE=Equals04.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals04.dll NetFx40"	# Equals04.fs - NetFx40
-NoMT	SOURCE=Equals05.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals05.dll NetFx40"	# Equals05.fs - NetFx40
-NoMT	SOURCE=Equals06.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals06.dll NetFx40"	# Equals06.fs - NetFx40
-NoMT	SOURCE=Equals07.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals07.dll NetFx40"	# Equals07.fs - NetFx40
-NoMT	SOURCE=Equals08.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals08.dll NetFx40"	# Equals08.fs - NetFx40
-NoMT	SOURCE=Equals09.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals09.dll NetFx40"	# Equals09.fs - NetFx40
+NoMT	SOURCE=Equals01.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals01.dll NetFx40"	# Equals01.fs - NetFx40
+NoMT	SOURCE=Equals02.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals02.dll NetFx40"	# Equals02.fs - NetFx40
+NoMT	SOURCE=Equals03.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals03.dll NetFx40"	# Equals03.fs - NetFx40
+NoMT	SOURCE=Equals04.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals04.dll NetFx40"	# Equals04.fs - NetFx40
+NoMT	SOURCE=Equals05.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals05.dll NetFx40"	# Equals05.fs - NetFx40
+NoMT	SOURCE=Equals06.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals06.dll NetFx40"	# Equals06.fs - NetFx40
+NoMT	SOURCE=Equals07.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals07.dll NetFx40"	# Equals07.fs - NetFx40
+NoMT	SOURCE=Equals08.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals08.dll NetFx40"	# Equals08.fs - NetFx40
+NoMT	SOURCE=Equals09.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Equals09.dll NetFx40"	# Equals09.fs - NetFx40
 
-NoMT	SOURCE=Hash01.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash01.dll NetFx40"		# Hash01.fs - NetFx40
-NoMT	SOURCE=Hash02.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash02.dll NetFx40"		# Hash02.fs - NetFx40
-NoMT	SOURCE=Hash03.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash03.dll NetFx40"		# Hash03.fs - NetFx40
-NoMT	SOURCE=Hash04.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash04.dll NetFx40"		# Hash04.fs - NetFx40
-NoMT	SOURCE=Hash05.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash05.dll NetFx40"		# Hash05.fs - NetFx40
-NoMT	SOURCE=Hash06.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash06.dll NetFx40"		# Hash06.fs - NetFx40
-NoMT	SOURCE=Hash08.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash08.dll NetFx40"		# Hash08.fs - NetFx40
-NoMT	SOURCE=Hash09.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash09.dll NetFx40"		# Hash09.fs - NetFx40
-NoMT	SOURCE=Hash12.fsx ISCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash12.dll NetFx40"		# Hash12.fs - NetFx40
+NoMT	SOURCE=Hash01.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash01.dll NetFx40"		# Hash01.fs - NetFx40
+NoMT	SOURCE=Hash02.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash02.dll NetFx40"		# Hash02.fs - NetFx40
+NoMT,NoCrossVer	SOURCE=Hash03.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash03.dll NetFx40"		# Hash03.fs - NetFx40
+NoMT,NoCrossVer	SOURCE=Hash04.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash04.dll NetFx40"		# Hash04.fs - NetFx40
+NoMT	SOURCE=Hash05.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash05.dll NetFx40"		# Hash05.fs - NetFx40
+NoMT	SOURCE=Hash06.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash06.dll NetFx40"		# Hash06.fs - NetFx40
+NoMT	SOURCE=Hash08.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash08.dll NetFx40"		# Hash08.fs - NetFx40
+NoMT	SOURCE=Hash09.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash09.dll NetFx40"		# Hash09.fs - NetFx40
+NoMT	SOURCE=Hash12.fsx SCFLAGS="-a -g --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Hash12.dll NetFx40"		# Hash12.fs - NetFx40
diff --git a/tests/fsharpqa/Source/Optimizations/Inlining/CompareIL.cmd b/tests/fsharpqa/Source/Optimizations/Inlining/CompareIL.cmd
deleted file mode 100644
index 617bd9d38c1..00000000000
--- a/tests/fsharpqa/Source/Optimizations/Inlining/CompareIL.cmd
+++ /dev/null
@@ -1,7 +0,0 @@
-REM == %1 --> assembly
-REM == %2 --> token that identify the method
-
-ildasm /TEXT /NOBAR "%~nx1" >"%~n1.il"
-IF NOT ERRORLEVEL 0 exit /b 1
-
-fsi --debug- --nologo --quiet --exec Comparer.fsx "%~n1.il.bsl" "%~n1.il" "%~2"
diff --git a/tests/fsharpqa/Source/Optimizations/Inlining/Comparer.fsx b/tests/fsharpqa/Source/Optimizations/Inlining/Comparer.fsx
deleted file mode 100644
index 783b3d4661d..00000000000
--- a/tests/fsharpqa/Source/Optimizations/Inlining/Comparer.fsx
+++ /dev/null
@@ -1,81 +0,0 @@
-open System
-open System.Text.RegularExpressions
-open System.IO
-
-module M =
-    type State = | Before
-                 | Entered
-                 | Exited
-
-    // Read IL into an array (only lines between the specified token)
-    let File2ListWithinTokens (filename:string, token:string) = 
-        use s = new StreamReader(filename)
-        let mutable l = []
-        let mutable state = Before
-        while not s.EndOfStream do
-            let line = s.ReadLine()            
-            
-            match state with
-            | Before -> 
-                let pattern = @"\s+\.method.+" + token + ".*"
-                if Regex.IsMatch(line, pattern) then 
-                    state <- Entered
-                    l <- List.append l ( line :: [])
-            | Entered ->  
-                let pattern = @"\s+}.+" + token + ".*"
-                l <- List.append l ( line :: [])
-                if Regex.IsMatch(line, pattern) then 
-                    state <- Exited   
-            | Exited -> ()
-        l
-
-let fn1 = fsi.CommandLineArgs.[1]
-let fn2 = fsi.CommandLineArgs.[2]
-let tok = fsi.CommandLineArgs.[3]
-
-// Read file into an array
-let File2List (filename:string) = 
-    use s = new StreamReader(filename)
-    let mutable l = []
-    while not s.EndOfStream do
-        l <- List.append l ( s.ReadLine() :: [])
-    l
-
-let f1 = File2List fn1
-let f2 = M.File2ListWithinTokens(fn2, tok)
-
-if f1.Length <> f2.Length then 
-    printfn "WARNING: Files have different lengths %d %d" f1.Length f2.Length
-
-let mutable i = 0
-let compare (f1:string list) (f2:string list) =
-    List.forall2 (fun (a:string) (b:string) ->
-        let aa = Regex.Replace(a, @"(.*\.line[^']*)('.+)", "$1")
-        let bb = Regex.Replace(b, @"(.*\.line[^']*)('.+)", "$1")
-
-        let aa = Regex.Replace(aa, @"(.*\.ver )(.+)", "$1")
-        let bb = Regex.Replace(bb, @"(.*\.ver )(.+)", "$1")
-
-        let aa = Regex.Replace(aa, @"(.*\.publickeytoken )(.+)", "$1")
-        let bb = Regex.Replace(bb, @"(.*\.publickeytoken )(.+)", "$1")
-
-        let aa = Regex.Replace(aa, @"'(\w+@\d+)-\d+'", "$1")
-        let bb = Regex.Replace(bb, @"'(\w+@\d+)-\d+'", "$1")
-
-        let aa = Regex.Replace(aa, @"^\s+", "")
-        let bb = Regex.Replace(bb, @"^\s+", "")
-
-        i <- i+1
-        if ((if Regex.IsMatch(aa, @"^[ \t]*//") then "//" else aa) = (if Regex.IsMatch(bb, @"^[ \t]*//") then "//" else bb)) then
-            true 
-        else
-            use s = new StreamWriter(fn2 + ".cmp")
-            f1 |> List.iter (fun l -> s.WriteLine(l))
-            printfn "Files differ at line %d:" i
-            printfn "\t>> %s" a
-            printfn "\t<< %s" b
-            printfn "Files being compared: '%s' and '%s.cmp'" fn1 fn2
-            false
-    ) f1 f2
-
-exit (if compare f1 f2 then 0 else 1)
diff --git a/tests/fsharpqa/Source/Optimizations/Inlining/Match01.il.bsl b/tests/fsharpqa/Source/Optimizations/Inlining/Match01.il.bsl
index 5e3565a62c2..cb0675b225e 100644
Binary files a/tests/fsharpqa/Source/Optimizations/Inlining/Match01.il.bsl and b/tests/fsharpqa/Source/Optimizations/Inlining/Match01.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/Inlining/Match02.il.bsl b/tests/fsharpqa/Source/Optimizations/Inlining/Match02.il.bsl
index 6b332eecdb9..0337fcfc8e3 100644
Binary files a/tests/fsharpqa/Source/Optimizations/Inlining/Match02.il.bsl and b/tests/fsharpqa/Source/Optimizations/Inlining/Match02.il.bsl differ
diff --git a/tests/fsharpqa/Source/Optimizations/Inlining/env.lst b/tests/fsharpqa/Source/Optimizations/Inlining/env.lst
index 3c712467d87..36d62b41f3d 100644
--- a/tests/fsharpqa/Source/Optimizations/Inlining/env.lst
+++ b/tests/fsharpqa/Source/Optimizations/Inlining/env.lst
@@ -1,2 +1,2 @@
-	SOURCE=Match01.fs ISCFLAGS="-a --optimize+" COMPILE_ONLY=1 POSTCMD="CompareIL.cmd Match01.dll fm"	# Match01.fs
-	SOURCE=Match02.fs ISCFLAGS="-a --optimize+" COMPILE_ONLY=1 POSTCMD="CompareIL.cmd Match02.dll testmethod"	# Match02.fs
+NoMT	SOURCE=Match01.fs SCFLAGS="-a --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Match01.dll"	# Match01.fs
+NoMT	SOURCE=Match02.fs SCFLAGS="-a --optimize+" COMPILE_ONLY=1 POSTCMD="..\\CompareIL.cmd Match02.dll"	# Match02.fs
diff --git a/tests/fsharpqa/Source/Printing/ParamArrayInSignatures.fsx b/tests/fsharpqa/Source/Printing/ParamArrayInSignatures.fsx
new file mode 100644
index 00000000000..712a9f5ed34
--- /dev/null
+++ b/tests/fsharpqa/Source/Printing/ParamArrayInSignatures.fsx
@@ -0,0 +1,13 @@
+// #Regression #NoMT #Printing 
+// Regression test for https://github.com/Microsoft/visualfsharp/issues/109
+
+// pretty printing signatures with params arguments
+//type Heterogeneous =
+//  class
+//    static member Echo : \[\] args:obj \[\] -> obj \[\]
+//  end
+
+type Heterogeneous =
+    static member Echo([] args: obj[]) = args
+
+#q;;
diff --git a/tests/fsharpqa/Source/Printing/SignatureWithOptionalArgs01.fs b/tests/fsharpqa/Source/Printing/SignatureWithOptionalArgs01.fs
index 370f45156ac..f34ca54b6b8 100644
--- a/tests/fsharpqa/Source/Printing/SignatureWithOptionalArgs01.fs
+++ b/tests/fsharpqa/Source/Printing/SignatureWithOptionalArgs01.fs
@@ -24,14 +24,14 @@ type AsyncTimer(f, ?delay ) =
   member t.Start() =
     let rec run() =
       async
-        { let curr_does_again = ref false
-          let curr_delay = ref None
+        { let mutable curr_does_again = false
+          let mutable curr_delay = None
           do lock t (fun _ -> 
-                curr_does_again := does_again 
-                curr_delay := t.Delay
+                curr_does_again <- does_again 
+                curr_delay <- t.Delay
               )
           if !curr_does_again then
-            match !curr_delay with
+            match curr_delay with
             | Some d -> 
                 do f()
                 do! Async.Sleep d
diff --git a/tests/fsharpqa/Source/Printing/env.lst b/tests/fsharpqa/Source/Printing/env.lst
index 8f7c5375ac9..3876450f7d1 100644
--- a/tests/fsharpqa/Source/Printing/env.lst
+++ b/tests/fsharpqa/Source/Printing/env.lst
@@ -32,3 +32,4 @@ ReqENU	SOURCE=LazyValues03NetFx4.fsx COMPILE_ONLY=1 SCFLAGS="--nologo" FSIMODE=P
 
 	SOURCE=WidthForAFormatter.fs								# WidthForAFormatter.fs
 	SOURCE=ToStringOnCollections.fs								# ToStringOnCollections.fs
+	SOURCE=ParamArrayInSignatures.fsx SCFLAGS="--nologo" COMPILE_ONLY=1 FSIMODE=PIPE								# ParamArrayInSignatures.fsx
diff --git a/tests/fsharpqa/Source/XmlDoc/Basic/env.lst b/tests/fsharpqa/Source/XmlDoc/Basic/env.lst
index 233ebd40489..2b2e4f81e63 100644
--- a/tests/fsharpqa/Source/XmlDoc/Basic/env.lst
+++ b/tests/fsharpqa/Source/XmlDoc/Basic/env.lst
@@ -2,5 +2,6 @@
 	SOURCE=xmlDoc002.fs SCFLAGS="-r:System.Xml.dll --doc:xmlDoc002.xml --define:WITHXMLVERIFICATION"	# xmlDoc002.fs
 	SOURCE=xmlDoc003.fs SCFLAGS="-r:System.Xml.dll --doc:xmlDoc003.xml --define:WITHXMLVERIFICATION"	# xmlDoc003.fs
 	SOURCE=xmlDoc004.fs SCFLAGS="-r:System.Xml.dll --doc:xmlDoc004.xml --define:WITHXMLVERIFICATION"	# xmlDoc004.fs
+	SOURCE=xmlDoc005.fs SCFLAGS="-r:System.Xml.dll --doc:xmlDoc005.xml --define:WITHXMLVERIFICATION"	# xmlDoc005.fs
 	SOURCE=XMLDocOnEnum01.fs SCFLAGS="-r:System.Xml.dll --doc:XMLDocOnEnum01.xml --define:WITHXMLVERIFICATION"	# XMLDocOnEnum01.fs
 
diff --git a/tests/fsharpqa/Source/XmlDoc/Basic/xmlDoc005.fs b/tests/fsharpqa/Source/XmlDoc/Basic/xmlDoc005.fs
new file mode 100644
index 00000000000..4fa8dbecaca
--- /dev/null
+++ b/tests/fsharpqa/Source/XmlDoc/Basic/xmlDoc005.fs
@@ -0,0 +1,49 @@
+// #Regression #XMLDoc
+// Verify that XmlDoc names are generated, but no empty members are generated re: issue #148
+//
+
+#light 
+
+namespace MyRather.MyDeep.MyNamespace 
+open System.Xml
+
+/// class1
+type Class1() = 
+    /// x
+    member this.X = "X"
+
+type Class2() =
+    member this.Y = "Y"
+    
+///testModule
+module MyModule =
+
+    let check (xml:XmlDocument) name xmlDoc =
+        let foundDoc = ((xml.SelectSingleNode ("/doc/members/member[@name='" + name + "']")).SelectSingleNode "summary").InnerText.Trim()
+        if xmlDoc <> foundDoc then
+            printfn "%s: generated xmlDoc <%s> differs from excpected <%s>" name foundDoc xmlDoc
+        xmlDoc = foundDoc
+    
+    let hasEmptyMembers (xml:XmlDocument) =
+        let node = xml.SelectSingleNode ("/doc/members/member[@name='']")
+        if node <> null then
+            printfn "Empty member name entries found." 
+        node <> null
+        
+    let test =
+        let myname = System.Reflection.Assembly.GetExecutingAssembly().Location
+        let xmlname = System.IO.Path.ChangeExtension(myname, "xml")
+
+
+#if WITHXMLVERIFICATION
+        let xml = new XmlDocument()
+        xml.Load xmlname
+        if    check xml "P:MyRather.MyDeep.MyNamespace.Class1.X" "x"
+           && check xml "T:MyRather.MyDeep.MyNamespace.Class1" "class1"
+           && not(hasEmptyMembers xml)
+        then 0 else 1
+#else
+        0
+#endif
+
+    test |> exit
diff --git a/tests/fsharpqa/Source/XmlDoc/UnitOfMeasure/UnitOfMeasure01.fs b/tests/fsharpqa/Source/XmlDoc/UnitOfMeasure/UnitOfMeasure01.fs
index 624b54bea59..52a947c0818 100644
--- a/tests/fsharpqa/Source/XmlDoc/UnitOfMeasure/UnitOfMeasure01.fs
+++ b/tests/fsharpqa/Source/XmlDoc/UnitOfMeasure/UnitOfMeasure01.fs
@@ -21,16 +21,24 @@ let test =
     xml.Load(xmlname)
 
     let a1 = xml.GetElementsByTagName("summary").Item(0).FirstChild.Value = "This is B"
-    if not a1 then printfn "a1: expected: This is B"; exit 1
+    if not a1 then 
+        printfn "a1: expected: This is B" 
+        exit 1
 
     let a2 = xml.GetElementsByTagName("summary").Item(1).FirstChild.Value = "This is A"
-    if not a2 then printfn "a2: expected: This is A"; exit 1
-
-    let a3 = xml.GetElementsByTagName("member").Item(1).Attributes.Item(0).Value = "M:UnitOfMeasure01.B(System.Single)"
-    if not a3 then printfn "a3: expected: M:UnitOfMeasure01.B(System.Single)"; exit 1
-
-    let a4 = xml.GetElementsByTagName("member").Item(2).Attributes.Item(0).Value = "M:UnitOfMeasure01.A(System.Double)"
-    if not a4 then printfn "a4: expected: M:UnitOfMeasure01.A(System.Double)"; exit 1
+    if not a2 then 
+        printfn "a2: expected: This is A"
+        exit 1
+
+    let a3 = xml.GetElementsByTagName("member").Item(0).Attributes.Item(0).Value = "M:UnitOfMeasure01.B(System.Single)"
+    if not a3 then 
+        printfn "a3: expected: M:UnitOfMeasure01.B(System.Single)"
+        exit 1
+
+    let a4 = xml.GetElementsByTagName("member").Item(1).Attributes.Item(0).Value = "M:UnitOfMeasure01.A(System.Double)"
+    if not a4 then 
+        printfn "a4: expected: M:UnitOfMeasure01.A(System.Double)" 
+        exit 1
 #endif
     0
 
diff --git a/tests/fsharpqa/Source/XmlDoc/UnitOfMeasure/UnitOfMeasure02.fs b/tests/fsharpqa/Source/XmlDoc/UnitOfMeasure/UnitOfMeasure02.fs
index b15a211583d..19477c5d3b8 100644
--- a/tests/fsharpqa/Source/XmlDoc/UnitOfMeasure/UnitOfMeasure02.fs
+++ b/tests/fsharpqa/Source/XmlDoc/UnitOfMeasure/UnitOfMeasure02.fs
@@ -24,16 +24,24 @@ let test =
     xml.Load(xmlname)
 
     let a1 = xml.GetElementsByTagName("summary").Item(0).FirstChild.Value = "This is B"
-    if not a1 then printfn "a1: expected: This is B"; exit 1
+    if not a1 then 
+        printfn "a1: expected: This is B" 
+        exit 1
 
     let a2 = xml.GetElementsByTagName("summary").Item(1).FirstChild.Value = "This is A"
-    if not a2 then printfn "a2: expected: This is A"; exit 1
+    if not a2 then 
+        printfn "a2: expected: This is A" 
+        exit 1
     
-    let a3 = xml.GetElementsByTagName("member").Item(1).Attributes.Item(0).Value = "M:UnitOfMeasure02.B(System.Int32,System.Int32)"
-    if not a3 then printfn "a3: expected: M:UnitOfMeasure02.B(System.Int32,System.Int32)"; exit 1
-
-    let a4 = xml.GetElementsByTagName("member").Item(2).Attributes.Item(0).Value = "M:UnitOfMeasure02.A(System.Double)"
-    if not a4 then printfn "a4: expected: M:UnitOfMeasure02.A(System.Double)"; exit 1
+    let a3 = xml.GetElementsByTagName("member").Item(0).Attributes.Item(0).Value = "M:UnitOfMeasure02.B(System.Int32,System.Int32)"
+    if not a3 then 
+        printfn "a3: expected: M:UnitOfMeasure02.B(System.Int32,System.Int32)" 
+        exit 1
+
+    let a4 = xml.GetElementsByTagName("member").Item(1).Attributes.Item(0).Value = "M:UnitOfMeasure02.A(System.Double)"
+    if not a4 then 
+        printfn "a4: expected: M:UnitOfMeasure02.A(System.Double)" 
+        exit 1
 #endif
     0
 
diff --git a/tests/fsharpqa/Source/run.pl b/tests/fsharpqa/Source/run.pl
index eb34cab5d80..b8bfdbedf0f 100644
--- a/tests/fsharpqa/Source/run.pl
+++ b/tests/fsharpqa/Source/run.pl
@@ -83,7 +83,7 @@
 # Check for any global compiler flags
 my $ISCFLAGS = $ENV{ISCFLAGS};
 unless( defined($ISCFLAGS) ){
-  $ISCFLAGS = "-g --optimize";
+  $ISCFLAGS = " ";
 }
 
 # Filter out flags that don't make sense in FSI (e.g. --standalone)
@@ -313,7 +313,22 @@
       RunCommand("Marking exe with /LARGEADDRESSAWARE...","editbin.exe /LARGEADDRESSAWARE $targetName");
   }
 
-  $ExitCode = RunCommand("Running","$ENV{SIMULATOR_PIPE} $targetName $param");
+  my $sim = "";
+  if (defined($ENV{SIMULATOR_PIPE})) {
+    # replace known tokens
+    $_ = $ENV{SIMULATOR_PIPE};
+    s/^\$FSC_PIPE/$FSC_PIPE/;
+    s/^\$FSI_PIPE/$FSI_PIPE/;
+    s/^\$FSI32_PIPE/$FSI32_PIPE/;
+    s/\$ISCFLAGS/$ISCFLAGS/;
+    s/^\$CSC_PIPE/$CSC_PIPE/;
+    s/^\$VBC_PIPE/$VBC_PIPE/;
+    s/\$PLATFORM/$ENV{PLATFORM}/;
+    
+    $sim = $_;
+  }
+
+  $ExitCode = RunCommand("Running","$sim $targetName $param");
   my($DeltaTime) = time() - $StartTime;
 
   LogTime($Sources, $CompileTime, $DeltaTime) if ($TimeTests);
@@ -459,8 +474,12 @@ sub RunCommand {
 # GetSrc -- Find the source file to build
 #
 sub GetSrc() {
+  my $cwd = cwd();
+  
   # The environment SOURCE var usually defines what to compile
-  my $source = $ENV{SOURCE};
+  $_ = $ENV{SOURCE};
+  s/\$CWD/$cwd/;
+  my $source = $_;
   return($source) if defined($source);
 
   # Or if there's only one source file in the directory
diff --git a/tests/fsharpqa/Source/test.lst b/tests/fsharpqa/Source/test.lst
index a1e447ee807..d8948a6d9b9 100644
--- a/tests/fsharpqa/Source/test.lst
+++ b/tests/fsharpqa/Source/test.lst
@@ -6,31 +6,31 @@
 # ReqNOCov	-- skip this test/suite if we are doing a code coverate run
 # ReqENU	-- skip this test/suite if we are running on non-ENU (useful to exclude hard-to-localize tests)
 
-CodeGen01,NoMT				CodeGen\EmittedIL\AsyncExpressionStepping
-CodeGen01,NoMT				CodeGen\EmittedIL\AttributeTargets
-CodeGen01,NoMT				CodeGen\EmittedIL\CCtorDUWithMember
-CodeGen01,NoMT				CodeGen\EmittedIL\CompiledNameAttribute
-CodeGen01,NoMT,Smoke				CodeGen\EmittedIL\ComputationExpressions
-CodeGen01,NoMT				CodeGen\EmittedIL\DoNotBoxStruct
-CodeGen01,NoMT				CodeGen\EmittedIL\GeneratedIterators
-CodeGen01,NoMT				CodeGen\EmittedIL\InequalityComparison
-CodeGen01,NoMT				CodeGen\EmittedIL\ListExpressionStepping
-CodeGen01,NoMT				CodeGen\EmittedIL\MethodImplAttribute
-CodeGen01,NoMT				CodeGen\EmittedIL\Misc
-CodeGen01,NoMT				CodeGen\EmittedIL\Mutation
-CodeGen01,NoMT				CodeGen\EmittedIL\Operators
-CodeGen01,NoMT				CodeGen\EmittedIL\QueryExpressionStepping
-CodeGen01,NoMT				CodeGen\EmittedIL\SeqExpressionStepping
-CodeGen01,NoMT				CodeGen\EmittedIL\SeqExpressionTailCalls
-CodeGen01,NoMT				CodeGen\EmittedIL\SerializableAttribute
-CodeGen01,NoMT				CodeGen\EmittedIL\StaticInit
-CodeGen01,NoMT				CodeGen\EmittedIL\SteppingMatch
-CodeGen01,NoMT				CodeGen\EmittedIL\TailCalls
-CodeGen01,NoMT				CodeGen\EmittedIL\TestFunctions
-CodeGen01,NoMT				CodeGen\EmittedIL\Tuples
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\AsyncExpressionStepping
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\AttributeTargets
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\CCtorDUWithMember
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\CompiledNameAttribute
+CodeGen01,NoMT,CodeGen,Smoke				CodeGen\EmittedIL\ComputationExpressions
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\DoNotBoxStruct
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\GeneratedIterators
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\InequalityComparison
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\ListExpressionStepping
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\MethodImplAttribute
+CodeGen01,NoMT,CodeGen,Smoke				CodeGen\EmittedIL\Misc
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\Mutation
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\Operators
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\QueryExpressionStepping
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\SeqExpressionStepping
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\SeqExpressionTailCalls
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\SerializableAttribute
+CodeGen01,NoMT,CodeGen,Smoke				CodeGen\EmittedIL\StaticInit
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\SteppingMatch
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\TailCalls
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\TestFunctions
+CodeGen01,NoMT,CodeGen				CodeGen\EmittedIL\Tuples
 NoHostedCompiler,CodeGen01,NoMT		CodeGen\EmittedIL\TypeProviders
-CodeGen01,NoMT				CodeGen\StringEncoding
-CodeGen01,NoMT				CodeGen\Structure
+CodeGen01,NoMT,CodeGen				CodeGen\StringEncoding
+CodeGen01,NoMT,CodeGen				CodeGen\Structure
 
 
 CompilerOptions01,NoMT				CompilerOptions\fsc\checked
@@ -301,12 +301,12 @@ Misc01			Libraries\Core\Unchecked
 
 Misc02			Libraries\Portable
 Misc02			Misc
-Misc02			MultiTargeting
+Misc02,Smoke			MultiTargeting
 Misc02			OCamlCompat
-Misc02			Optimizations\AssemblyBoundary
-Misc02			Optimizations\ForLoop
-Misc02			Optimizations\GenericComparison
-Misc02			Optimizations\Inlining
+Misc02,CodeGen			Optimizations\AssemblyBoundary
+Misc02,CodeGen			Optimizations\ForLoop
+Misc02,CodeGen			Optimizations\GenericComparison
+Misc02,CodeGen			Optimizations\Inlining
 Misc02,NoMT		Printing
 Misc02			..\..\..\testsprivate\fsharpqa\Source\RealWorld\UnitsOfMeasure
 Misc02			..\..\..\testsprivate\fsharpqa\Source\RealWorld\Agents
diff --git a/tests/fsharpqa/testenv/bin/.gitignore b/tests/fsharpqa/testenv/bin/.gitignore
index cbc4ff68a76..e766b8d9231 100644
--- a/tests/fsharpqa/testenv/bin/.gitignore
+++ b/tests/fsharpqa/testenv/bin/.gitignore
@@ -2,4 +2,6 @@ FSharp.Compiler.*
 FSharp.Core.*
 HostedCompilerServer.*
 ILComparer.*
-diff.*
\ No newline at end of file
+diff.*
+x86
+AMD64
\ No newline at end of file
diff --git a/tests/fsharpqa/testenv/bin/ExecAssembly.fsx b/tests/fsharpqa/testenv/bin/ExecAssembly.fsx
deleted file mode 100644
index fe07717ade7..00000000000
--- a/tests/fsharpqa/testenv/bin/ExecAssembly.fsx
+++ /dev/null
@@ -1,23 +0,0 @@
-// This script is used for Multitargeting testing.
-// The common scenario is:
-// 1- Testing against Dev10/NetFx4
-// 2- Compile foo.fs targeting NetFx2.0
-// 3- Execute foo.exe binding to the NetFx 4.0 
-// Since fsi.exe is 4.0 only, feeling this script to fsi would be running in a 4.0 process
-// and the 2.0 assembly (foo.exe) would be executed binding to 4.0
-
-// Create a new App Domain
-// AppDomainSetup object ensures the AppDomain's current directory is the current test directory
-// else we may run into issues with Assembly.Load/ExecuteAssembly not using the same current directory as the test expects
-let mutable setup = new System.AppDomainSetup()
-setup.ApplicationBase <- System.Environment.CurrentDirectory
-let appdomain = System.AppDomain.CreateDomain("F# targeting NetFx 4.0", null, setup, System.Security.PermissionSet(System.Security.Permissions.PermissionState.Unrestricted))
-
-// Set the assembly to be loaded and executed. It will be a command line argument...
-let assemblyundertest = fsi.CommandLineArgs.[1]
-
-// Execute the assembly
-let rv = appdomain.ExecuteAssembly(assemblyundertest);
-
-// Return exit code to the automation harness
-exit rv
diff --git a/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx b/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx
index 8aefa2cecd9..1b3b05f6487 100644
--- a/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx
+++ b/tests/fsharpqa/testenv/bin/KnownFailRewriter.fsx
@@ -78,7 +78,7 @@ module VSInfo =
         o <> null
         
     let IsFSharpDev12Installed () = 
-        let o = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\12.0\Setup\F#", "ProductDir", null)
+        let o = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\Setup\F#", "ProductDir", null)
         o <> null
 
     let IsFSharp2008Installed () = 
@@ -100,7 +100,7 @@ module FSharpInfo =
 
     // Are we running a CHK build?
     let IsFSharpCompilerDebug () = 
-        let o = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FSharp\3.1\Runtime\v4.0", null, null)
+        let o = Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\FSharp\4.0\Runtime\v4.0", null, null)
         if o <> null then
             let path = System.IO.Path.Combine( o :?> string, "FSharp.Compiler.dll")
             let asm = System.Reflection.Assembly.LoadFrom(path)
diff --git a/tests/fsharpqa/testenv/bin/elevate.fsx b/tests/fsharpqa/testenv/bin/elevate.fsx
new file mode 100644
index 00000000000..7ffcc624a69
--- /dev/null
+++ b/tests/fsharpqa/testenv/bin/elevate.fsx
@@ -0,0 +1,18 @@
+// simple elevation script - runs the specified command line as admin
+// usage: fsi --exec elevate.fsx  [args]
+
+open System
+open System.Diagnostics
+
+let program = fsi.CommandLineArgs.[1]
+let args = fsi.CommandLineArgs |> Seq.skip 2 |> String.concat " "
+let startInfo = ProcessStartInfo(FileName = program, Arguments = args, Verb = "runas")
+let proc = new Process(StartInfo = startInfo)
+
+printfn "Elevating: %s %s" program args
+try
+    proc.Start() |> ignore
+    if proc.WaitForExit(30*60*1000) then
+        Environment.Exit(proc.ExitCode)
+with e -> eprintfn "%s" (e.ToString())
+Environment.Exit(1)
diff --git a/tests/fsharpqa/testenv/bin/runall.pl b/tests/fsharpqa/testenv/bin/runall.pl
index fc593259de4..1c6c1c0cc52 100644
--- a/tests/fsharpqa/testenv/bin/runall.pl
+++ b/tests/fsharpqa/testenv/bin/runall.pl
@@ -2785,6 +2785,7 @@ sub get_env_file
 		if (/^\s*(\w+)\s*=/)
 		{
 		    my $var = uc($1);
+
 		    $sublist[$envnum][4]{$var} = $';
 		    if ($' =~ /%(\w+)%/)
 		    {
@@ -2794,7 +2795,17 @@ sub get_env_file
 			# Modified by apardoe to correct Perl hash behavior change from build 314 to 616.
 			$sublist[$envnum][4]{uc($1)} and $sublist[$envnum][4]{$var} = $sublist[$envnum][4]{uc($1)};
 			$envlist[$envnum][4]{uc($1)} and $sublist[$envnum][4]{$var} = $envlist[$envnum][4]{uc($1)};
-		    }                    
+		    }
+
+            if($var eq "FSIMODE")
+            {
+                $sublist[$envnum][1] = $sublist[$envnum][1] . ",FSI,NoMT";
+            }
+            
+            if($var eq "SCFLAGS" && $sublist[$envnum][4]{$var} =~ /--noframework\b/)
+            {
+                $sublist[$envnum][1] = $sublist[$envnum][1] . ",NoCrossVer,NoMT";
+            }
 		} else {
 		    print_noise("Bad assignment '$_', skipping...\n", 1);
 		    next ENV_LINE;
diff --git a/tests/fsharpqa/testenv/src/ExecAssembly/00README.txt b/tests/fsharpqa/testenv/src/ExecAssembly/00README.txt
deleted file mode 100644
index 320447fb6e5..00000000000
--- a/tests/fsharpqa/testenv/src/ExecAssembly/00README.txt
+++ /dev/null
@@ -1,3 +0,0 @@
-This is a tool used for MultiTargeting testing.
-It takes an assembly and executes it.
-
diff --git a/tests/fsharpqa/testenv/src/ExecAssembly/ExecAssembly.cs b/tests/fsharpqa/testenv/src/ExecAssembly/ExecAssembly.cs
deleted file mode 100644
index c8d7918771b..00000000000
--- a/tests/fsharpqa/testenv/src/ExecAssembly/ExecAssembly.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-using System;
-using System.Reflection;
-
-class C
-{
-    static int Main(string[] args)
-    {
-        // Create a new App Domain
-        var appdomain = AppDomain.CreateDomain("F# targeting NetFx 2.0");
-
-        // Set the assembly to be loaded and executed. It will be a command line argument...
-        var assemblyundertest = args[0];
-
-        // Execute the assembly
-        var rv = appdomain.ExecuteAssembly(assemblyundertest);
-
-        // Return exit code to the automation harness
-        return rv;
-    }
-}
\ No newline at end of file
diff --git a/tests/fsharpqa/testenv/src/ExecAssembly/ExecAssembly.fsproj b/tests/fsharpqa/testenv/src/ExecAssembly/ExecAssembly.fsproj
new file mode 100644
index 00000000000..c3634fa6f1d
--- /dev/null
+++ b/tests/fsharpqa/testenv/src/ExecAssembly/ExecAssembly.fsproj
@@ -0,0 +1,140 @@
+
+
+  
+  
+    Debug
+    AnyCPU
+    2.0
+    04c27c52-ecd5-43d2-84d0-40d190640fc0
+    Exe
+    FSharp.Test.ExecAssembly
+    ExecAssembly
+    v4.5
+    true
+    True
+    ..\..\..\..\..\$(Configuration)\net40\bin
+    4.4.0.0
+    ExecAssembly
+  
+  
+    true
+    full
+    false
+    false
+    bin\Debug\
+    DEBUG;TRACE
+    3
+    AnyCPU
+    bin\Debug\ExecAssembly.XML
+    true
+  
+  
+    pdbonly
+    true
+    true
+    bin\Release\
+    TRACE
+    3
+    AnyCPU
+    bin\Release\ExecAssembly.XML
+    true
+  
+  
+    true
+    full
+    false
+    false
+    bin\Debug\
+    DEBUG;TRACE
+    3
+    x86
+    bin\Debug\ExecAssembly.XML
+    true
+  
+  
+    pdbonly
+    true
+    true
+    bin\Release\
+    TRACE
+    3
+    x86
+    bin\Release\ExecAssembly.XML
+    true
+  
+  
+    true
+    full
+    false
+    false
+    bin\Debug\
+    DEBUG;TRACE
+    3
+    x64
+    bin\Debug\ExecAssembly.XML
+    false
+  
+  
+    pdbonly
+    true
+    true
+    bin\Release\
+    TRACE
+    3
+    x64
+    bin\Release\ExecAssembly.XML
+    false
+  
+  
+    
+    
+    
+    
+  
+  
+    
+      True
+    
+  
+   
+    
+      True
+    
+  
+  
+    
+  
+  
+    
+  
+  
+    
+  
+  
+    11
+  
+  
+    
+      
+        $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets
+      
+    
+    
+      
+        $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets
+      
+      
+          $(OpenDrop)
+          $(OpenDrop)\Microsoft.FSharp.targets
+      
+    
+  
+  
+  
+
\ No newline at end of file
diff --git a/tests/fsharpqa/testenv/src/ExecAssembly/Program.fs b/tests/fsharpqa/testenv/src/ExecAssembly/Program.fs
new file mode 100644
index 00000000000..913b0e7000b
--- /dev/null
+++ b/tests/fsharpqa/testenv/src/ExecAssembly/Program.fs
@@ -0,0 +1,32 @@
+open System
+open System.Security
+open System.Security.Permissions
+
+(*
+   This program loads a specified .NET exe and runs it in a dedicated appdomain.
+   Useful for 2 types of tests:
+   - The exe is build against .NET 2
+     - Use this to force it to run in .NET 4+ environment
+   - The exe is built against an earlier version of FSharp.Core
+     - Use this to force it to run with binding to latest FSharp.Core
+     
+  Usage: ExecAssembly  [optional args for exe]
+*)
+
+[]
+let main args =
+    let setup = AppDomainSetup(ApplicationBase = Environment.CurrentDirectory)
+    let name = "App domain with F# vLatest and .NET vLatest"
+    let appDomain = AppDomain.CreateDomain(name, null, setup, PermissionSet(PermissionState.Unrestricted))
+
+    let assemblyUnderTest = args.[0]
+    let exeArgs = args.[1..]
+    
+    try
+        exit (appDomain.ExecuteAssembly(assemblyUnderTest, exeArgs))
+    with
+    | :? BadImageFormatException as e ->
+            printfn "%O" e
+            printfn ""
+            printfn "Is the loaded assembly built for the same platform (x86/x64) as ExecAssembly?"
+            exit 1
\ No newline at end of file
diff --git a/tests/fsharpqa/testenv/src/ExecAssembly/build20.cmd b/tests/fsharpqa/testenv/src/ExecAssembly/build20.cmd
deleted file mode 100644
index e07f0f09722..00000000000
--- a/tests/fsharpqa/testenv/src/ExecAssembly/build20.cmd
+++ /dev/null
@@ -1,17 +0,0 @@
-REM ==
-REM == Make sure you are using a 2.0 or 3.5 C# compiler
-REM == The intent here is to build a 2.0 assembly!
-REM == 
-
-IF NOT EXIST x86 mkdir x86
-csc /o+ /debug- /platform:x86 /out:x86\ExecAssembly20.exe ExecAssembly.cs
-
-IF NOT EXIST AMD64 mkdir AMD64
-csc /o+ /debug- /platform:x64 /out:AMD64\ExecAssembly20.exe ExecAssembly.cs
-
-IF NOT EXIST IA64 mkdir IA64
-csc /o+ /debug- /platform:Itanium /out:IA64\ExecAssembly20.exe ExecAssembly.cs
-
-@ECHO Now you should checkout the binaries under testenv\bin\ and
-@ECHO replace them with these one you just built!
-
diff --git a/tests/fsharpqa/testenv/src/ExecAssembly/closed/App.config b/tests/fsharpqa/testenv/src/ExecAssembly/closed/App.config
new file mode 100644
index 00000000000..2da6fd3ac61
--- /dev/null
+++ b/tests/fsharpqa/testenv/src/ExecAssembly/closed/App.config
@@ -0,0 +1,19 @@
+
+
+     
+        
+    
+    
+      
+        
+          
+          
+        
+      
+    
+
\ No newline at end of file
diff --git a/tests/fsharpqa/testenv/src/ExecAssembly/open/App.config b/tests/fsharpqa/testenv/src/ExecAssembly/open/App.config
new file mode 100644
index 00000000000..244c0243fa1
--- /dev/null
+++ b/tests/fsharpqa/testenv/src/ExecAssembly/open/App.config
@@ -0,0 +1,19 @@
+
+
+     
+        
+    
+    
+      
+        
+          
+          
+        
+      
+    
+
\ No newline at end of file
diff --git a/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/Compiler.fs b/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/Compiler.fs
index 9cf04457823..0aa7ac3bb42 100644
--- a/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/Compiler.fs
+++ b/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/Compiler.fs
@@ -50,9 +50,9 @@ type FscCompiler() =
         }
 
     /// converts short and long issue types to the same CompilationIssue reprsentation
-    let convert (issue : Microsoft.FSharp.Compiler.Build.ErrorOrWarning) : CompilationIssue = 
+    let convert issue : CompilationIssue = 
         match issue with
-        | Microsoft.FSharp.Compiler.Build.ErrorOrWarning.Short(isError, text) -> 
+        | Microsoft.FSharp.Compiler.CompileOps.ErrorOrWarning.Short(isError, text) -> 
             {
                 Location = emptyLocation
                 Code = ""
@@ -61,7 +61,7 @@ type FscCompiler() =
                 Text = text
                 Type = if isError then CompilationIssueType.Error else CompilationIssueType.Warning
             }
-        | Microsoft.FSharp.Compiler.Build.ErrorOrWarning.Long(isError, details) ->
+        | Microsoft.FSharp.Compiler.CompileOps.ErrorOrWarning.Long(isError, details) ->
             let loc, file = 
                 match details.Location with
                 | Some l when not l.IsEmpty -> 
diff --git a/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/FSharp.Compiler.Hosted.fsproj b/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/FSharp.Compiler.Hosted.fsproj
index 186da1ffa62..089587ca086 100644
--- a/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/FSharp.Compiler.Hosted.fsproj
+++ b/tests/fsharpqa/testenv/src/FSharp.Compiler.Hosted/FSharp.Compiler.Hosted.fsproj
@@ -15,7 +15,7 @@
     ..\..\..\..\..\$(Configuration)\net40\bin
     $(OtherFlags) --delaysign+ --keyfile:"..\..\bin\msft.pubkey"
     $(OtherFlags) --delaysign+ --keyfile:"..\..\..\..\..\src\fsharp\msft.pubkey"
-    4.3.1.0
+    4.4.0.0
     FSharp.Compiler.Hosted
   
   
diff --git a/tests/fsharpqa/testenv/src/HostedCompilerServer/App.config b/tests/fsharpqa/testenv/src/HostedCompilerServer/App.config
index 8e15646352e..f888c777ac1 100644
--- a/tests/fsharpqa/testenv/src/HostedCompilerServer/App.config
+++ b/tests/fsharpqa/testenv/src/HostedCompilerServer/App.config
@@ -3,4 +3,8 @@
      
         
     
+    
+        
+        
+    
 
\ No newline at end of file
diff --git a/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj b/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj
index f810dff85d2..8683f6b3886 100644
--- a/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj
+++ b/tests/fsharpqa/testenv/src/HostedCompilerServer/HostedCompilerServer.fsproj
@@ -13,7 +13,7 @@
     true
     True
     ..\..\..\..\..\$(Configuration)\net40\bin
-    4.3.1.0
+    4.4.0.0
     HostedCompilerServer
   
   
diff --git a/tests/fsharpqa/testenv/src/ILComparer/ILComparer.fsproj b/tests/fsharpqa/testenv/src/ILComparer/ILComparer.fsproj
index 0196722b531..256fc7b80fc 100644
--- a/tests/fsharpqa/testenv/src/ILComparer/ILComparer.fsproj
+++ b/tests/fsharpqa/testenv/src/ILComparer/ILComparer.fsproj
@@ -13,7 +13,7 @@
     true
     True
     ..\..\..\..\..\$(Configuration)\net40\bin
-    4.3.1.0
+    4.4.0.0
     HostedCompilerServer
   
   
diff --git a/tests/fsharpqa/testenv/src/ILComparer/Program.fs b/tests/fsharpqa/testenv/src/ILComparer/Program.fs
index 63375c70d22..d7abc7929a2 100644
--- a/tests/fsharpqa/testenv/src/ILComparer/Program.fs
+++ b/tests/fsharpqa/testenv/src/ILComparer/Program.fs
@@ -19,7 +19,7 @@ let main (argv : string array) =
     let f1 = File2List fn1
     let f2 = File2List fn2
 
-    let i = ref 0
+    let mutable i = 0
     let compare (f1:string list) (f2:string list) =
         try
             List.forall2 (fun (a:string) (b:string) ->
@@ -47,11 +47,11 @@ let main (argv : string array) =
                 let aa = Regex.Replace(aa, @"^\s+", "")
                 let bb = Regex.Replace(bb, @"^\s+", "")
 
-                i := !i + 1
+                i <- i + 1
                 if ((if Regex.IsMatch(aa, @"^[ \t]*//") then "//" else aa) = (if Regex.IsMatch(bb, @"^[ \t]*//") then "//" else bb)) then
                     true
                 else
-                    printfn "Files differ at line %d:" !i
+                    printfn "Files differ at line %d:" i
                     printfn "\t>> %s" a
                     printfn "\t<< %s" b
                     false
diff --git a/tests/fsharpqa/testenv/src/diff/diff.fsproj b/tests/fsharpqa/testenv/src/diff/diff.fsproj
index 04e149662a1..ea81676500f 100644
--- a/tests/fsharpqa/testenv/src/diff/diff.fsproj
+++ b/tests/fsharpqa/testenv/src/diff/diff.fsproj
@@ -13,7 +13,7 @@
     true
     True
     ..\..\..\..\..\$(Configuration)\net40\bin
-    4.3.1.0
+    4.4.0.0
     HostedCompilerServer
   
   
diff --git a/tests/test.lst b/tests/test.lst
index b4f33d76151..74821b95473 100644
--- a/tests/test.lst
+++ b/tests/test.lst
@@ -10,7 +10,7 @@
 
 Core01,Smoke		fsharp\core\access
 Core01		fsharp\core\apporder
-Core01		fsharp\core\array
+Core01,Smoke		fsharp\core\array
 Core01		fsharp\core\attributes
 Core01		fsharp\core\comprehensions
 Core01		fsharp\core\control
@@ -31,7 +31,7 @@ Core02		fsharp\core\fsi-shadowcopy
 Core02		fsharp\core\genericmeasures
 Core02		fsharp\core\hiding
 Core03		fsharp\core\innerpoly
-Core03		fsharp\core\int32
+Core03,Smoke		fsharp\core\int32
 Core03		fsharp\core\internalsvisible
 Core03		fsharp\core\interop
 Core03		fsharp\core\lazy
@@ -59,7 +59,7 @@ Core05		fsharp\core\pinvoke
 Core05		fsharp\core\printf
 Core05		fsharp\core\printing
 Core05		fsharp\core\queriesCustomQueryOps
-Core06		fsharp\core\queriesLeafExpressionConvert
+Core06,CoreQuotes		fsharp\core\queriesLeafExpressionConvert
 Core06		fsharp\core\queriesNullableOperators
 Core06		fsharp\core\queriesOverIEnumerable
 Core06		fsharp\core\queriesOverIQueryable
@@ -144,6 +144,7 @@ Samples07		..\testsprivate\fsharp\samples\XBoxLiveLogViewer
 Samples07		..\testsprivate\fsharp\samples\XNA\WindowsXNAGame
 Samples07		..\testsprivate\fsharp\samples\XNA\XBox360Game
 
+TypeProviders01,Smoke		fsharp\typeProviders\helloWorld
 TypeProviders01		..\testsprivate\fsharp\typeProviders\builtin\DbmlFile
 TypeProviders01		fsharp\typeProviders\builtin\EdmxFile
 TypeProviders01		fsharp\typeProviders\builtin\ODataService
@@ -152,7 +153,6 @@ TypeProviders01		fsharp\typeProviders\builtin\SqlEntityConnection
 TypeProviders01		fsharp\typeProviders\builtin\WsdlService
 TypeProviders01		fsharp\typeProviders\diamondAssembly
 TypeProviders01		fsharp\typeProviders\globalNamespace
-TypeProviders01,Smoke		fsharp\typeProviders\helloWorld
 TypeProviders01		fsharp\typeProviders\helloWorldCSharp
 TypeProviders01		fsharp\typeProviders\negTests
 TypeProviders01		fsharp\typeProviders\splitAssembly
@@ -178,6 +178,6 @@ Misc02		fsharp\regression\tuple-bug-1
 Misc02		fsharp\tools\bundle
 Misc02		fsharp\tools\eval
 Misc02		..\testsprivate\fsharp\tools\queries
-Misc02		fsharp\typecheck\misc
-Misc02		fsharp\typecheck\sigs
-Misc02		fsharp\typecheck\full-rank-arrays
+Misc02,TypeChecker		fsharp\typecheck\misc
+Misc02,TypeChecker		fsharp\typecheck\sigs
+Misc02,TypeChecker		fsharp\typecheck\full-rank-arrays
diff --git a/vsintegration/src/Deployment.sln b/vsintegration/src/Deployment.sln
index e7050e58eb6..f322743e9af 100644
--- a/vsintegration/src/Deployment.sln
+++ b/vsintegration/src/Deployment.sln
@@ -1,7 +1,7 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 2013
-VisualStudioVersion = 12.0.30501.0
+# Visual Studio 14
+VisualStudioVersion = 14.0.22512.0
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EnableOpenSource", "deployment\EnableOpenSource\EnableOpenSource.csproj", "{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}"
 EndProject
@@ -83,395 +83,911 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlDocAttributeWithLongComm
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "XmlDocAttributeWithNullComment", "unittests\Resources.MockTypeProviders\XmlDocAttributeWithNullComment\XmlDocAttributeWithNullComment.csproj", "{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}"
 EndProject
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Build", "..\..\src\fsharp\FSharp.Build\FSharp.Build.fsproj", "{702A7979-BCF9-4C41-853E-3ADFC9897890}"
+EndProject
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Fsc", "..\..\src\fsharp\Fsc\Fsc.fsproj", "{C94C257C-3C0A-4858-B5D8-D746498D1F08}"
+EndProject
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Data.TypeProviders", "..\..\src\fsharp\FSharp.Data.TypeProviders\FSharp.Data.TypeProviders.fsproj", "{CB7D20C4-6506-406D-9144-5342C3595F03}"
+EndProject
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FSharp.Compiler.Interactive.Settings", "..\..\src\fsharp\FSharp.Compiler.Interactive.Settings\FSharp.Compiler.Interactive.Settings.fsproj", "{649FA588-F02E-457C-9FCF-87E46407481E}"
+EndProject
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "FsiAnyCPU", "..\..\src\fsharp\fsiAnyCpu\FsiAnyCPU.fsproj", "{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}"
+EndProject
+Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "Fsi", "..\..\src\fsharp\fsi\Fsi.fsproj", "{D0E98C0D-490B-4C61-9329-0862F6E87645}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
+		Debug|x86 = Debug|x86
 		Proto|Any CPU = Proto|Any CPU
+		Proto|x86 = Proto|x86
 		Release|Any CPU = Release|Any CPU
+		Release|x86 = Release|x86
 		VSDebug|Any CPU = VSDebug|Any CPU
+		VSDebug|x86 = VSDebug|x86
 		VSRelease|Any CPU = VSRelease|Any CPU
+		VSRelease|x86 = VSRelease|x86
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Debug|x86.Build.0 = Debug|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Proto|Any CPU.ActiveCfg = Release|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Proto|Any CPU.Build.0 = Release|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Proto|x86.Build.0 = Proto|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Release|x86.ActiveCfg = Release|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Release|x86.Build.0 = Release|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.VSDebug|x86.Build.0 = VSDebug|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.Debug|x86.Build.0 = Debug|Any CPU
 		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.Proto|Any CPU.ActiveCfg = Release|Any CPU
 		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.Proto|Any CPU.Build.0 = Release|Any CPU
+		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.Proto|x86.Build.0 = Proto|Any CPU
 		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.Release|x86.ActiveCfg = Release|Any CPU
+		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.Release|x86.Build.0 = Release|Any CPU
 		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{CE3EB47C-F7E7-4A5A-9F92-29A22DE218C6}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Debug|x86.Build.0 = Debug|Any CPU
 		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Proto|Any CPU.ActiveCfg = Release|Any CPU
 		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Proto|Any CPU.Build.0 = Release|Any CPU
+		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Proto|x86.Build.0 = Proto|Any CPU
 		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Release|Any CPU.Build.0 = Release|Any CPU
+		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Release|x86.ActiveCfg = Release|Any CPU
+		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.Release|x86.Build.0 = Release|Any CPU
 		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{15A57828-F9F5-4FB4-8E1E-AE7622A10F70}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.Debug|x86.Build.0 = Debug|Any CPU
 		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.Proto|Any CPU.ActiveCfg = Release|Any CPU
 		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.Proto|Any CPU.Build.0 = Release|Any CPU
+		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.Proto|x86.Build.0 = Proto|Any CPU
 		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.Release|Any CPU.Build.0 = Release|Any CPU
+		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.Release|x86.ActiveCfg = Release|Any CPU
+		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.Release|x86.Build.0 = Release|Any CPU
 		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{5B739CF3-1116-4EB4-B598-6C16BEA81CE5}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{DB374A0C-7560-479F-9B21-D37C81F7624F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{DB374A0C-7560-479F-9B21-D37C81F7624F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DB374A0C-7560-479F-9B21-D37C81F7624F}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{DB374A0C-7560-479F-9B21-D37C81F7624F}.Debug|x86.Build.0 = Debug|Any CPU
 		{DB374A0C-7560-479F-9B21-D37C81F7624F}.Proto|Any CPU.ActiveCfg = Release|Any CPU
 		{DB374A0C-7560-479F-9B21-D37C81F7624F}.Proto|Any CPU.Build.0 = Release|Any CPU
+		{DB374A0C-7560-479F-9B21-D37C81F7624F}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{DB374A0C-7560-479F-9B21-D37C81F7624F}.Proto|x86.Build.0 = Proto|Any CPU
 		{DB374A0C-7560-479F-9B21-D37C81F7624F}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{DB374A0C-7560-479F-9B21-D37C81F7624F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DB374A0C-7560-479F-9B21-D37C81F7624F}.Release|x86.ActiveCfg = Release|Any CPU
+		{DB374A0C-7560-479F-9B21-D37C81F7624F}.Release|x86.Build.0 = Release|Any CPU
 		{DB374A0C-7560-479F-9B21-D37C81F7624F}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{DB374A0C-7560-479F-9B21-D37C81F7624F}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{DB374A0C-7560-479F-9B21-D37C81F7624F}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{DB374A0C-7560-479F-9B21-D37C81F7624F}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{DB374A0C-7560-479F-9B21-D37C81F7624F}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{DB374A0C-7560-479F-9B21-D37C81F7624F}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{DB374A0C-7560-479F-9B21-D37C81F7624F}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{DB374A0C-7560-479F-9B21-D37C81F7624F}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.Debug|x86.Build.0 = Debug|Any CPU
 		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.Proto|Any CPU.ActiveCfg = Release|Any CPU
 		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.Proto|Any CPU.Build.0 = Release|Any CPU
+		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.Proto|x86.Build.0 = Proto|Any CPU
 		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.Release|Any CPU.Build.0 = Release|Any CPU
+		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.Release|x86.ActiveCfg = Release|Any CPU
+		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.Release|x86.Build.0 = Release|Any CPU
 		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{2FACEE44-48BD-40B5-A2EE-B54A0C9BB7C4}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.Debug|x86.Build.0 = Debug|Any CPU
 		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.Proto|Any CPU.ActiveCfg = Release|Any CPU
 		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.Proto|Any CPU.Build.0 = Release|Any CPU
+		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.Proto|x86.Build.0 = Proto|Any CPU
 		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.Release|x86.ActiveCfg = Release|Any CPU
+		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.Release|x86.Build.0 = Release|Any CPU
 		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{604F0DAA-2D33-48DD-B162-EDF0B672803D}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.Debug|x86.Build.0 = Debug|Any CPU
 		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.Proto|Any CPU.ActiveCfg = Release|Any CPU
 		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.Proto|Any CPU.Build.0 = Release|Any CPU
+		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.Proto|x86.Build.0 = Proto|Any CPU
 		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.Release|x86.ActiveCfg = Release|Any CPU
+		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.Release|x86.Build.0 = Release|Any CPU
 		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{01678CDA-A11F-4DEE-9344-2EDF91CF1AE7}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{493D19F9-35A4-4D0B-9B25-CA948823B709}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{493D19F9-35A4-4D0B-9B25-CA948823B709}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{493D19F9-35A4-4D0B-9B25-CA948823B709}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{493D19F9-35A4-4D0B-9B25-CA948823B709}.Debug|x86.Build.0 = Debug|Any CPU
 		{493D19F9-35A4-4D0B-9B25-CA948823B709}.Proto|Any CPU.ActiveCfg = Release|Any CPU
 		{493D19F9-35A4-4D0B-9B25-CA948823B709}.Proto|Any CPU.Build.0 = Release|Any CPU
+		{493D19F9-35A4-4D0B-9B25-CA948823B709}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{493D19F9-35A4-4D0B-9B25-CA948823B709}.Proto|x86.Build.0 = Proto|Any CPU
 		{493D19F9-35A4-4D0B-9B25-CA948823B709}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{493D19F9-35A4-4D0B-9B25-CA948823B709}.Release|Any CPU.Build.0 = Release|Any CPU
+		{493D19F9-35A4-4D0B-9B25-CA948823B709}.Release|x86.ActiveCfg = Release|Any CPU
+		{493D19F9-35A4-4D0B-9B25-CA948823B709}.Release|x86.Build.0 = Release|Any CPU
 		{493D19F9-35A4-4D0B-9B25-CA948823B709}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{493D19F9-35A4-4D0B-9B25-CA948823B709}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{493D19F9-35A4-4D0B-9B25-CA948823B709}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{493D19F9-35A4-4D0B-9B25-CA948823B709}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{493D19F9-35A4-4D0B-9B25-CA948823B709}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{493D19F9-35A4-4D0B-9B25-CA948823B709}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{493D19F9-35A4-4D0B-9B25-CA948823B709}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{493D19F9-35A4-4D0B-9B25-CA948823B709}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{530DF8CA-7996-407A-B533-D0C2873257AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{530DF8CA-7996-407A-B533-D0C2873257AF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{530DF8CA-7996-407A-B533-D0C2873257AF}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{530DF8CA-7996-407A-B533-D0C2873257AF}.Debug|x86.Build.0 = Debug|Any CPU
 		{530DF8CA-7996-407A-B533-D0C2873257AF}.Proto|Any CPU.ActiveCfg = Release|Any CPU
 		{530DF8CA-7996-407A-B533-D0C2873257AF}.Proto|Any CPU.Build.0 = Release|Any CPU
+		{530DF8CA-7996-407A-B533-D0C2873257AF}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{530DF8CA-7996-407A-B533-D0C2873257AF}.Proto|x86.Build.0 = Proto|Any CPU
 		{530DF8CA-7996-407A-B533-D0C2873257AF}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{530DF8CA-7996-407A-B533-D0C2873257AF}.Release|Any CPU.Build.0 = Release|Any CPU
+		{530DF8CA-7996-407A-B533-D0C2873257AF}.Release|x86.ActiveCfg = Release|Any CPU
+		{530DF8CA-7996-407A-B533-D0C2873257AF}.Release|x86.Build.0 = Release|Any CPU
 		{530DF8CA-7996-407A-B533-D0C2873257AF}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{530DF8CA-7996-407A-B533-D0C2873257AF}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{530DF8CA-7996-407A-B533-D0C2873257AF}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{530DF8CA-7996-407A-B533-D0C2873257AF}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{530DF8CA-7996-407A-B533-D0C2873257AF}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{530DF8CA-7996-407A-B533-D0C2873257AF}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{530DF8CA-7996-407A-B533-D0C2873257AF}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{530DF8CA-7996-407A-B533-D0C2873257AF}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.Debug|x86.Build.0 = Debug|Any CPU
 		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.Proto|Any CPU.ActiveCfg = Release|Any CPU
 		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.Proto|Any CPU.Build.0 = Release|Any CPU
+		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.Proto|x86.Build.0 = Proto|Any CPU
 		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.Release|Any CPU.Build.0 = Release|Any CPU
+		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.Release|x86.ActiveCfg = Release|Any CPU
+		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.Release|x86.Build.0 = Release|Any CPU
 		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
-		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Proto|Any CPU.ActiveCfg = Release|Any CPU
-		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Proto|Any CPU.Build.0 = Release|Any CPU
-		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.Release|Any CPU.Build.0 = Release|Any CPU
-		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
-		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
-		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
-		{4D7BE558-E6BF-44DA-8CE2-46AA6E0DC2E7}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{98ABDE09-9E08-49C7-B006-FB3CB5365B54}.VSRelease|x86.Build.0 = VSRelease|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 = Proto|Any CPU
 		{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.Proto|x86.Build.0 = Proto|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
 		{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.Debug|x86.Build.0 = Debug|Any CPU
 		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.Proto|x86.Build.0 = Proto|Any CPU
 		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{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
 		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{991DCF75-C2EB-42B6-9A0D-AA1D2409D519}.VSRelease|x86.Build.0 = VSRelease|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
+		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Debug|x86.Build.0 = Debug|Any CPU
 		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Proto|x86.Build.0 = Proto|Any CPU
 		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Release|x86.ActiveCfg = Release|Any CPU
+		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.Release|x86.Build.0 = Release|Any CPU
 		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{DED3BBD7-53F4-428A-8C9F-27968E768605}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{DED3BBD7-53F4-428A-8C9F-27968E768605}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DED3BBD7-53F4-428A-8C9F-27968E768605}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{DED3BBD7-53F4-428A-8C9F-27968E768605}.Debug|x86.Build.0 = Debug|Any CPU
 		{DED3BBD7-53F4-428A-8C9F-27968E768605}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{DED3BBD7-53F4-428A-8C9F-27968E768605}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{DED3BBD7-53F4-428A-8C9F-27968E768605}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{DED3BBD7-53F4-428A-8C9F-27968E768605}.Proto|x86.Build.0 = Proto|Any CPU
 		{DED3BBD7-53F4-428A-8C9F-27968E768605}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{DED3BBD7-53F4-428A-8C9F-27968E768605}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DED3BBD7-53F4-428A-8C9F-27968E768605}.Release|x86.ActiveCfg = Release|Any CPU
+		{DED3BBD7-53F4-428A-8C9F-27968E768605}.Release|x86.Build.0 = Release|Any CPU
 		{DED3BBD7-53F4-428A-8C9F-27968E768605}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{DED3BBD7-53F4-428A-8C9F-27968E768605}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{DED3BBD7-53F4-428A-8C9F-27968E768605}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{DED3BBD7-53F4-428A-8C9F-27968E768605}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{DED3BBD7-53F4-428A-8C9F-27968E768605}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{DED3BBD7-53F4-428A-8C9F-27968E768605}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{DED3BBD7-53F4-428A-8C9F-27968E768605}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{DED3BBD7-53F4-428A-8C9F-27968E768605}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.Debug|x86.Build.0 = Debug|Any CPU
 		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.Proto|x86.Build.0 = Proto|Any CPU
 		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.Release|x86.ActiveCfg = Release|Any CPU
+		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.Release|x86.Build.0 = Release|Any CPU
 		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{A437A6EC-5323-47C2-8F86-E2CAC54FF152}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.Debug|x86.Build.0 = Debug|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.Proto|x86.Build.0 = Proto|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.Release|x86.ActiveCfg = Release|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.Release|x86.Build.0 = Release|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.Debug|x86.Build.0 = Debug|Any CPU
 		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.Proto|Any CPU.ActiveCfg = Release|Any CPU
 		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.Proto|Any CPU.Build.0 = Release|Any CPU
+		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.Proto|x86.Build.0 = Proto|Any CPU
 		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.Release|Any CPU.Build.0 = Release|Any CPU
+		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.Release|x86.ActiveCfg = Release|Any CPU
+		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.Release|x86.Build.0 = Release|Any CPU
 		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{65E0E82A-EACE-4787-8994-888674C2FE87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{65E0E82A-EACE-4787-8994-888674C2FE87}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{65E0E82A-EACE-4787-8994-888674C2FE87}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{65E0E82A-EACE-4787-8994-888674C2FE87}.Debug|x86.Build.0 = Debug|Any CPU
 		{65E0E82A-EACE-4787-8994-888674C2FE87}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{65E0E82A-EACE-4787-8994-888674C2FE87}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{65E0E82A-EACE-4787-8994-888674C2FE87}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{65E0E82A-EACE-4787-8994-888674C2FE87}.Proto|x86.Build.0 = Proto|Any CPU
 		{65E0E82A-EACE-4787-8994-888674C2FE87}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{65E0E82A-EACE-4787-8994-888674C2FE87}.Release|Any CPU.Build.0 = Release|Any CPU
+		{65E0E82A-EACE-4787-8994-888674C2FE87}.Release|x86.ActiveCfg = Release|Any CPU
+		{65E0E82A-EACE-4787-8994-888674C2FE87}.Release|x86.Build.0 = Release|Any CPU
 		{65E0E82A-EACE-4787-8994-888674C2FE87}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{65E0E82A-EACE-4787-8994-888674C2FE87}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{65E0E82A-EACE-4787-8994-888674C2FE87}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{65E0E82A-EACE-4787-8994-888674C2FE87}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{65E0E82A-EACE-4787-8994-888674C2FE87}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{65E0E82A-EACE-4787-8994-888674C2FE87}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{65E0E82A-EACE-4787-8994-888674C2FE87}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{65E0E82A-EACE-4787-8994-888674C2FE87}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.Debug|x86.Build.0 = Debug|Any CPU
 		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.Proto|Any CPU.ActiveCfg = Release|Any CPU
 		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.Proto|Any CPU.Build.0 = Release|Any CPU
+		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.Proto|x86.Build.0 = Proto|Any CPU
 		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.Release|x86.ActiveCfg = Release|Any CPU
+		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.Release|x86.Build.0 = Release|Any CPU
 		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Debug|x86.Build.0 = Debug|Any CPU
 		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Proto|Any CPU.ActiveCfg = Release|Any CPU
 		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Proto|Any CPU.Build.0 = Release|Any CPU
+		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Proto|x86.Build.0 = Proto|Any CPU
 		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Release|x86.ActiveCfg = Release|Any CPU
+		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.Release|x86.Build.0 = Release|Any CPU
 		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{FCFB214C-462E-42B3-91CA-FC557EFEE74F}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.Debug|x86.Build.0 = Debug|Any CPU
 		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.Proto|x86.Build.0 = Proto|Any CPU
 		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.Release|x86.ActiveCfg = Release|Any CPU
+		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.Release|x86.Build.0 = Release|Any CPU
 		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.Debug|x86.Build.0 = Debug|Any CPU
 		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.Proto|x86.Build.0 = Proto|Any CPU
 		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.Release|x86.ActiveCfg = Release|Any CPU
+		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.Release|x86.Build.0 = Release|Any CPU
 		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{D9D95330-3626-4199-B7AF-17B8E4AF6D87}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.Debug|x86.Build.0 = Debug|Any CPU
 		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.Proto|x86.Build.0 = Proto|Any CPU
 		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.Release|Any CPU.Build.0 = Release|Any CPU
+		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.Release|x86.ActiveCfg = Release|Any CPU
+		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.Release|x86.Build.0 = Release|Any CPU
 		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{1A8DBF70-4178-4AE3-AF5F-39DDD5692210}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.Debug|x86.Build.0 = Debug|Any CPU
 		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.Proto|x86.Build.0 = Proto|Any CPU
 		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.Release|Any CPU.Build.0 = Release|Any CPU
+		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.Release|x86.ActiveCfg = Release|Any CPU
+		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.Release|x86.Build.0 = Release|Any CPU
 		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{FBD4B354-DC6E-4032-8EC7-C81D8DFB1AF7}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.Debug|x86.Build.0 = Debug|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.Proto|x86.Build.0 = Proto|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.Release|x86.ActiveCfg = Release|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.Release|x86.Build.0 = Release|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{DA39AD38-4A58-47BF-9215-E49768295169}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{DA39AD38-4A58-47BF-9215-E49768295169}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{DA39AD38-4A58-47BF-9215-E49768295169}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{DA39AD38-4A58-47BF-9215-E49768295169}.Debug|x86.Build.0 = Debug|Any CPU
 		{DA39AD38-4A58-47BF-9215-E49768295169}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{DA39AD38-4A58-47BF-9215-E49768295169}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{DA39AD38-4A58-47BF-9215-E49768295169}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{DA39AD38-4A58-47BF-9215-E49768295169}.Proto|x86.Build.0 = Proto|Any CPU
 		{DA39AD38-4A58-47BF-9215-E49768295169}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{DA39AD38-4A58-47BF-9215-E49768295169}.Release|Any CPU.Build.0 = Release|Any CPU
+		{DA39AD38-4A58-47BF-9215-E49768295169}.Release|x86.ActiveCfg = Release|Any CPU
+		{DA39AD38-4A58-47BF-9215-E49768295169}.Release|x86.Build.0 = Release|Any CPU
 		{DA39AD38-4A58-47BF-9215-E49768295169}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{DA39AD38-4A58-47BF-9215-E49768295169}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{DA39AD38-4A58-47BF-9215-E49768295169}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{DA39AD38-4A58-47BF-9215-E49768295169}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{DA39AD38-4A58-47BF-9215-E49768295169}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{DA39AD38-4A58-47BF-9215-E49768295169}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{DA39AD38-4A58-47BF-9215-E49768295169}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{DA39AD38-4A58-47BF-9215-E49768295169}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.Debug|x86.Build.0 = Debug|Any CPU
 		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.Proto|x86.Build.0 = Proto|Any CPU
 		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.Release|x86.ActiveCfg = Release|Any CPU
+		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.Release|x86.Build.0 = Release|Any CPU
 		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{8C2439BD-0E49-4929-A8B1-29CEE228191E}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{F47196DC-186D-4055-BAF2-658282A12F33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{F47196DC-186D-4055-BAF2-658282A12F33}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{F47196DC-186D-4055-BAF2-658282A12F33}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{F47196DC-186D-4055-BAF2-658282A12F33}.Debug|x86.Build.0 = Debug|Any CPU
 		{F47196DC-186D-4055-BAF2-658282A12F33}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{F47196DC-186D-4055-BAF2-658282A12F33}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{F47196DC-186D-4055-BAF2-658282A12F33}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{F47196DC-186D-4055-BAF2-658282A12F33}.Proto|x86.Build.0 = Proto|Any CPU
 		{F47196DC-186D-4055-BAF2-658282A12F33}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F47196DC-186D-4055-BAF2-658282A12F33}.Release|Any CPU.Build.0 = Release|Any CPU
+		{F47196DC-186D-4055-BAF2-658282A12F33}.Release|x86.ActiveCfg = Release|Any CPU
+		{F47196DC-186D-4055-BAF2-658282A12F33}.Release|x86.Build.0 = Release|Any CPU
 		{F47196DC-186D-4055-BAF2-658282A12F33}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{F47196DC-186D-4055-BAF2-658282A12F33}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{F47196DC-186D-4055-BAF2-658282A12F33}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{F47196DC-186D-4055-BAF2-658282A12F33}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{F47196DC-186D-4055-BAF2-658282A12F33}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{F47196DC-186D-4055-BAF2-658282A12F33}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{F47196DC-186D-4055-BAF2-658282A12F33}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{F47196DC-186D-4055-BAF2-658282A12F33}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{D4C88934-5893-467E-A55C-A11ECD6479FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{D4C88934-5893-467E-A55C-A11ECD6479FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D4C88934-5893-467E-A55C-A11ECD6479FE}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{D4C88934-5893-467E-A55C-A11ECD6479FE}.Debug|x86.Build.0 = Debug|Any CPU
 		{D4C88934-5893-467E-A55C-A11ECD6479FE}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{D4C88934-5893-467E-A55C-A11ECD6479FE}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{D4C88934-5893-467E-A55C-A11ECD6479FE}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{D4C88934-5893-467E-A55C-A11ECD6479FE}.Proto|x86.Build.0 = Proto|Any CPU
 		{D4C88934-5893-467E-A55C-A11ECD6479FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{D4C88934-5893-467E-A55C-A11ECD6479FE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D4C88934-5893-467E-A55C-A11ECD6479FE}.Release|x86.ActiveCfg = Release|Any CPU
+		{D4C88934-5893-467E-A55C-A11ECD6479FE}.Release|x86.Build.0 = Release|Any CPU
 		{D4C88934-5893-467E-A55C-A11ECD6479FE}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{D4C88934-5893-467E-A55C-A11ECD6479FE}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{D4C88934-5893-467E-A55C-A11ECD6479FE}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{D4C88934-5893-467E-A55C-A11ECD6479FE}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{D4C88934-5893-467E-A55C-A11ECD6479FE}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{D4C88934-5893-467E-A55C-A11ECD6479FE}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{D4C88934-5893-467E-A55C-A11ECD6479FE}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{D4C88934-5893-467E-A55C-A11ECD6479FE}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.Debug|x86.Build.0 = Debug|Any CPU
 		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.Proto|x86.Build.0 = Proto|Any CPU
 		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.Release|x86.ActiveCfg = Release|Any CPU
+		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.Release|x86.Build.0 = Release|Any CPU
 		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{6AFF752D-E991-4A08-9ED2-5BF46B0E0F8B}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.Debug|x86.Build.0 = Debug|Any CPU
 		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.Proto|x86.Build.0 = Proto|Any CPU
 		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.Release|x86.ActiveCfg = Release|Any CPU
+		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.Release|x86.Build.0 = Release|Any CPU
 		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{0B9CDEAF-EE8F-45E0-A4E0-34A8ED6DD09E}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.Debug|x86.Build.0 = Debug|Any CPU
 		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.Proto|x86.Build.0 = Proto|Any CPU
 		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.Release|x86.ActiveCfg = Release|Any CPU
+		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.Release|x86.Build.0 = Release|Any CPU
 		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{004982C6-93EA-4E70-B4F0-BE7D7219926A}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{243A81AC-A954-4601-833A-60EEEFB00FCD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{243A81AC-A954-4601-833A-60EEEFB00FCD}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{243A81AC-A954-4601-833A-60EEEFB00FCD}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{243A81AC-A954-4601-833A-60EEEFB00FCD}.Debug|x86.Build.0 = Debug|Any CPU
 		{243A81AC-A954-4601-833A-60EEEFB00FCD}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{243A81AC-A954-4601-833A-60EEEFB00FCD}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{243A81AC-A954-4601-833A-60EEEFB00FCD}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{243A81AC-A954-4601-833A-60EEEFB00FCD}.Proto|x86.Build.0 = Proto|Any CPU
 		{243A81AC-A954-4601-833A-60EEEFB00FCD}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{243A81AC-A954-4601-833A-60EEEFB00FCD}.Release|Any CPU.Build.0 = Release|Any CPU
+		{243A81AC-A954-4601-833A-60EEEFB00FCD}.Release|x86.ActiveCfg = Release|Any CPU
+		{243A81AC-A954-4601-833A-60EEEFB00FCD}.Release|x86.Build.0 = Release|Any CPU
 		{243A81AC-A954-4601-833A-60EEEFB00FCD}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{243A81AC-A954-4601-833A-60EEEFB00FCD}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{243A81AC-A954-4601-833A-60EEEFB00FCD}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{243A81AC-A954-4601-833A-60EEEFB00FCD}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{243A81AC-A954-4601-833A-60EEEFB00FCD}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{243A81AC-A954-4601-833A-60EEEFB00FCD}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{243A81AC-A954-4601-833A-60EEEFB00FCD}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{243A81AC-A954-4601-833A-60EEEFB00FCD}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.Debug|x86.Build.0 = Debug|Any CPU
 		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.Proto|x86.Build.0 = Proto|Any CPU
 		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.Release|x86.ActiveCfg = Release|Any CPU
+		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.Release|x86.Build.0 = Release|Any CPU
 		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{B4595EB6-053A-400E-AA1B-7727F1BC900F}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.Debug|x86.Build.0 = Debug|Any CPU
 		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.Proto|x86.Build.0 = Proto|Any CPU
 		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.Release|Any CPU.Build.0 = Release|Any CPU
+		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.Release|x86.ActiveCfg = Release|Any CPU
+		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.Release|x86.Build.0 = Release|Any CPU
 		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{A559D7E8-7EFD-473A-B618-A10B41AB523B}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.Debug|x86.Build.0 = Debug|Any CPU
 		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.Proto|x86.Build.0 = Proto|Any CPU
 		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.Release|Any CPU.Build.0 = Release|Any CPU
+		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.Release|x86.ActiveCfg = Release|Any CPU
+		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.Release|x86.Build.0 = Release|Any CPU
 		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{AC85EE6D-033C-45F9-B8BA-884BC22EC6D9}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
 		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.Debug|x86.Build.0 = Debug|Any CPU
 		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
 		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.Proto|x86.Build.0 = Proto|Any CPU
 		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.Release|Any CPU.Build.0 = Release|Any CPU
+		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.Release|x86.ActiveCfg = Release|Any CPU
+		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.Release|x86.Build.0 = Release|Any CPU
 		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
 		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.VSDebug|x86.Build.0 = VSDebug|Any CPU
 		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
 		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{956BBE41-ABD1-4DBA-9F3B-BA1C9821C98C}.VSRelease|x86.Build.0 = VSRelease|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.Debug|x86.Build.0 = Debug|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.Proto|x86.Build.0 = Proto|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.Release|Any CPU.Build.0 = Release|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.Release|x86.ActiveCfg = Release|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.Release|x86.Build.0 = Release|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.VSDebug|x86.Build.0 = VSDebug|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{702A7979-BCF9-4C41-853E-3ADFC9897890}.VSRelease|x86.Build.0 = VSRelease|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.Debug|x86.Build.0 = Debug|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.Proto|x86.Build.0 = Proto|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.Release|Any CPU.Build.0 = Release|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.Release|x86.ActiveCfg = Release|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.Release|x86.Build.0 = Release|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.VSDebug|x86.Build.0 = VSDebug|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{C94C257C-3C0A-4858-B5D8-D746498D1F08}.VSRelease|x86.Build.0 = VSRelease|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.Debug|x86.Build.0 = Debug|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.Proto|x86.Build.0 = Proto|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.Release|Any CPU.Build.0 = Release|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.Release|x86.ActiveCfg = Release|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.Release|x86.Build.0 = Release|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.VSDebug|x86.Build.0 = VSDebug|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{CB7D20C4-6506-406D-9144-5342C3595F03}.VSRelease|x86.Build.0 = VSRelease|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.Debug|x86.Build.0 = Debug|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.Proto|x86.Build.0 = Proto|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.Release|x86.ActiveCfg = Release|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.Release|x86.Build.0 = Release|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.VSDebug|x86.Build.0 = VSDebug|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{649FA588-F02E-457C-9FCF-87E46407481E}.VSRelease|x86.Build.0 = VSRelease|Any CPU
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Debug|Any CPU.ActiveCfg = Debug|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Debug|Any CPU.Build.0 = Debug|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Debug|x86.ActiveCfg = Debug|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Debug|x86.Build.0 = Debug|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Proto|Any CPU.ActiveCfg = Proto|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Proto|x86.ActiveCfg = Proto|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Proto|x86.Build.0 = Proto|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Release|Any CPU.ActiveCfg = Release|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Release|Any CPU.Build.0 = Release|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Release|x86.ActiveCfg = Release|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.Release|x86.Build.0 = Release|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.VSDebug|Any CPU.ActiveCfg = VSDebug|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.VSDebug|Any CPU.Build.0 = VSDebug|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.VSDebug|x86.ActiveCfg = VSDebug|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.VSDebug|x86.Build.0 = VSDebug|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.VSRelease|Any CPU.ActiveCfg = VSRelease|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.VSRelease|Any CPU.Build.0 = VSRelease|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.VSRelease|x86.ActiveCfg = VSRelease|x86
+		{8B3E283D-B5FE-4055-9D80-7E3A32F3967B}.VSRelease|x86.Build.0 = VSRelease|x86
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.Debug|x86.ActiveCfg = Debug|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.Debug|x86.Build.0 = Debug|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.Proto|Any CPU.ActiveCfg = Proto|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.Proto|Any CPU.Build.0 = Proto|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.Proto|x86.ActiveCfg = Proto|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.Proto|x86.Build.0 = Proto|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.Release|Any CPU.Build.0 = Release|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.Release|x86.ActiveCfg = Release|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.Release|x86.Build.0 = Release|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.VSDebug|Any CPU.ActiveCfg = VSDebug|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.VSDebug|Any CPU.Build.0 = VSDebug|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.VSDebug|x86.ActiveCfg = VSDebug|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.VSDebug|x86.Build.0 = VSDebug|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.VSRelease|Any CPU.ActiveCfg = VSRelease|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.VSRelease|Any CPU.Build.0 = VSRelease|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.VSRelease|x86.ActiveCfg = VSRelease|Any CPU
+		{D0E98C0D-490B-4C61-9329-0862F6E87645}.VSRelease|x86.Build.0 = VSRelease|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/vsintegration/src/Salsa/Salsa.fsproj b/vsintegration/src/Salsa/Salsa.fsproj
index 79bfd2a2462..ed9bed811b9 100644
--- a/vsintegration/src/Salsa/Salsa.fsproj
+++ b/vsintegration/src/Salsa/Salsa.fsproj
@@ -1,9 +1,8 @@
 
 
-
+
   
     ..\..\..\src
-    Microsoft.VisualStudio.Shell.12.0
     FSharp
     true
   
@@ -36,37 +35,31 @@
     
     
     
-    
-      true
-    
-    
-      true
-    
-    
-      true
-    
-    
+
+    
+    
+    
+    
+    
     
     
     
     
     
-    
-    
+    
     
     
     
-    
     
-    
+    
     
     
     
     
-    
+    
     
-    
-    
+    
+    
     
         True
         $(NUnitLibDir)\nunit.framework.dll
diff --git a/vsintegration/src/Salsa/VsMocks.fs b/vsintegration/src/Salsa/VsMocks.fs
index ddf580daec8..1226e1ee7a6 100644
--- a/vsintegration/src/Salsa/VsMocks.fs
+++ b/vsintegration/src/Salsa/VsMocks.fs
@@ -64,7 +64,7 @@ module internal VsMocks =
 
     type VsFileChangeEx() = 
         let fileToEvents = new Dictionary()
-        let Canonicalize (filename:string) = Internal.Utilities.FileSystem.Path.SafeGetFullPath(filename)
+        let Canonicalize (filename:string) = System.IO.Path.GetFullPath(filename)
         
         member c.AddedFile(file) =
 //            printfn "VsMocks.VsFileChangeEx: Added file %s " file
@@ -834,7 +834,7 @@ module internal VsMocks =
     // IVsTextView ---------------------------------------------------------------------------------------------------------        
     let createTextView() : IVsTextView = Vs.DelegateTextView(Vs.MakeTextView())
     let setFileText (filename:string) (tv:IVsTextView) (lines:string array) (recolorizeLines:int->int->unit) (getColorStateAtStartOfLine:int->int) = 
-        let filename = Internal.Utilities.FileSystem.Path.SafeGetFullPath(filename)
+        let filename = System.IO.Path.GetFullPath(filename)
         let inner = getInner tv
         let lineCount = lines.Length
         let getLineCount() = Some(ok, lines.Length)
@@ -1222,39 +1222,6 @@ module internal VsMocks =
             member this.UnadviseFileChange(vscookie) = nothing()
         }
 
-#if NOT_YET_NEEDED
-    let vsExtensibility3 =
-        { new IVsExtensibility3 with
-            member this.GetProperties(pParent, pdispPropObj, ppProperties) = err(__LINE__)
-            member this.RunWizardFile(bstrWizFilename,  hwndOwner,  vContextParams,  pResult) = err(__LINE__)
-            member this.EnterAutomationFunction() = err(__LINE__)
-            member this.ExitAutomationFunction() = err(__LINE__)
-            member this.IsInAutomationFunction(pfInAutoFunc) = err(__LINE__)
-            member this.GetUserControl( fUserControl) = err(__LINE__)
-            member this.SetUserControl( fUserControl) = err(__LINE__)
-            member this.SetUserControlUnlatched( fUserControl) = err(__LINE__)
-            member this.LockServer( vb) = err(__LINE__)
-            member this.GetLockCount( pCount) = err(__LINE__)
-            member this.TestForShutdown( fShutdown) = err(__LINE__)
-            member this.GetGlobalsObject( extractFrom,  ppGlobals) = err(__LINE__)
-            member this.GetConfigMgr( pIVsProject,  itemid,  ppCfgMgr) = err(__LINE__)
-            member this.FireMacroReset() = err(__LINE__)
-            member this.GetDocumentFromDocCookie( lDocCookie,  ppDoc) = err(__LINE__)
-            member this.IsMethodDisabled( pGUID,  dispid) = err(__LINE__)
-            member this. SetSuppressUI( In) = err(__LINE__)
-            member this.GetSuppressUI( pOut) = err(__LINE__)
-            member this.FireProjectsEvent_ItemAdded( project) = err(__LINE__)
-            member this.FireProjectsEvent_ItemRemoved( project) = err(__LINE__)
-            member this.FireProjectsEvent_ItemRenamed( project,  oldName) = err(__LINE__)
-            member this.FireProjectItemsEvent_ItemAdded( projectItem) = err(__LINE__)
-            member this.FireProjectItemsEvent_ItemRemoved( projectItem) = err(__LINE__)
-            member this.FireProjectItemsEvent_ItemRenamed( projectItem,  oldName) = err(__LINE__)
-            member this.IsFireCodeModelEventNeeded( vbNeeded) = err(__LINE__)
-            member this.RunWizardFileEx( bstrWizFilename,  hwndOwner,  vContextParams,  vCustomParams,  pResult) = err(__LINE__)
-            member this.FireCodeModelEvent3( dispid,  pParent,  pElement,  changeKind) = err(__LINE__)
-        }
-#endif
-
     let vsSolution =
         { new IVsSolution with
             member x.GetProjectEnum(grfEnumFlags, rguidEnumOnlyThisType, ppenum) = err(__LINE__)
@@ -1566,9 +1533,6 @@ module internal VsMocks =
         sp.AddService(typeof, box(vsTaskList()), false) 
         sp.AddService(typeof, box vsMonitorSelection, false) 
         sp.AddService(typeof, box vsFileChangeManager, false)
-#if NOT_YET_NEEDED
-        sp.AddService(typeof, box vsExtensibility3, false)
-#endif        
         sp.AddService(typeof, box vsSolution, false)
         sp.AddService(typeof, box vsSolutionBuildManager, false)
         sp.AddService(typeof, box vsRunningDocumentTable, false)
@@ -1635,7 +1599,11 @@ module internal VsActual =
     open Microsoft.VisualStudio.Text
 
     let vsInstallDir =
+#if VS_VERSION_DEV12
         let key = @"SOFTWARE\Microsoft\VisualStudio\12.0"
+#else
+        let key = @"SOFTWARE\Microsoft\VisualStudio\14.0"
+#endif
         let hklm = Microsoft.Win32.RegistryKey.OpenBaseKey(Microsoft.Win32.RegistryHive.LocalMachine, Microsoft.Win32.RegistryView.Registry32)
         let rkey = hklm.OpenSubKey(key)
         rkey.GetValue("InstallDir") :?> string
@@ -1651,11 +1619,7 @@ module internal VsActual =
 
         // copy this private assembly next to unit tests, otherwise assembly loader cannot find it
         let neededLocalAssem = vsInstallDir + @"\PrivateAssemblies\Microsoft.VisualStudio.Platform.VSEditor.Interop.dll"
-#if FX_ATLEAST_45
-        let curDir = System.IO.Path.GetDirectoryName((new System.Uri(System.Reflection.Assembly.Load("nunit.util").CodeBase)).LocalPath)
-#else
-        let curDir = System.IO.Path.GetDirectoryName((new System.Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase)).LocalPath)
-#endif
+        let curDir = System.IO.Path.GetDirectoryName((new System.Uri(System.Reflection.Assembly.Load("nunit.util").EscapedCodeBase)).LocalPath)
         let localCopy = System.IO.Path.Combine(curDir, System.IO.Path.GetFileName(neededLocalAssem))
         System.IO.File.Copy(neededLocalAssem, localCopy, true)
         
@@ -1682,4 +1646,4 @@ module internal VsActual =
 
     let exportProvider = new CompositionContainer(new AggregateCatalog(CreateEditorCatalog()), true, null)
     let iTextBufferFactoryService = exportProvider.GetExportedValue()
-    let createTextBuffer(text:string) = iTextBufferFactoryService .CreateTextBuffer(text, iTextBufferFactoryService .TextContentType)
\ No newline at end of file
+    let createTextBuffer(text:string) = iTextBufferFactoryService .CreateTextBuffer(text, iTextBufferFactoryService .TextContentType)
diff --git a/vsintegration/src/Salsa/salsa.fs b/vsintegration/src/Salsa/salsa.fs
index c1fc3ca7e4f..fb9c5fc3436 100644
--- a/vsintegration/src/Salsa/salsa.fs
+++ b/vsintegration/src/Salsa/salsa.fs
@@ -230,9 +230,9 @@ module internal Salsa =
                  sources = capturedSources |> Array.toList }
             let Canonicalize (filename:string) = 
                 if System.IO.Path.IsPathRooted(filename) then
-                    Internal.Utilities.FileSystem.Path.SafeGetFullPath(filename)
+                    System.IO.Path.GetFullPath(filename)
                 else
-                    Internal.Utilities.FileSystem.Path.SafeGetFullPath(System.IO.Path.Combine(System.IO.Path.GetDirectoryName(project.FullPath),filename))
+                    System.IO.Path.GetFullPath(System.IO.Path.Combine(System.IO.Path.GetDirectoryName(project.FullPath),filename))
             { flags = result.flags 
               sources = result.sources |> List.map Canonicalize }
             
@@ -262,7 +262,7 @@ module internal Salsa =
         let AreSame f1 f2 = 
             let result = 
                    System.String.Compare(f1,f2,StringComparison.CurrentCultureIgnoreCase)=0
-                || System.String.Compare(Internal.Utilities.FileSystem.Path.SafeGetFullPath(f1),Internal.Utilities.FileSystem.Path.SafeGetFullPath(f2),StringComparison.CurrentCultureIgnoreCase)=0
+                || System.String.Compare(System.IO.Path.GetFullPath(f1),System.IO.Path.GetFullPath(f2),StringComparison.CurrentCultureIgnoreCase)=0
             result                                    
 
     type MSBuildProjectSite(projectfile,configurationFunc,platformFunc) = 
@@ -1236,7 +1236,7 @@ module internal Salsa =
                 // Full check.                    
                 let sink = new AuthoringSink(BackgroundRequestReason.FullTypeCheck, 0, 0, maxErrors) 
                 let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
-                let pr = project.Solution.Vs.LanguageService.CreateBackgroundRequest(0,0,new TokenInfo(),file.CombinedLines, snapshot, MethodTipMiscellany.Typing, Internal.Utilities.FileSystem.Path.SafeGetFullPath(file.Filename), BackgroundRequestReason.FullTypeCheck, view,sink,null,file.Source.ChangeCount,false)
+                let pr = project.Solution.Vs.LanguageService.CreateBackgroundRequest(0,0,new TokenInfo(),file.CombinedLines, snapshot, MethodTipMiscellany.Typing, System.IO.Path.GetFullPath(file.Filename), BackgroundRequestReason.FullTypeCheck, view,sink,null,file.Source.ChangeCount,false)
                 pr.ResultSink.add_OnErrorAdded(
                     OnErrorAddedHandler(fun path subcategory msg context severity -> 
                                 project.Errors <- new Error(path, subcategory, msg, context, severity) :: project.Errors))
@@ -1266,7 +1266,7 @@ module internal Salsa =
                     let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
                     let pr = project.Solution.Vs.LanguageService.CreateBackgroundRequest(
                                                     cursor.line-1, cursor.col-1, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing,
-                                                    Internal.Utilities.FileSystem.Path.SafeGetFullPath(file.Filename),
+                                                    System.IO.Path.GetFullPath(file.Filename),
                                                     parseReason, view, sink, null, file.Source.ChangeCount, false)
                                                    
                     file.ExecuteBackgroundRequestForScope(pr,canRetryAfterWaiting=true)
@@ -1323,7 +1323,7 @@ module internal Salsa =
                     let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
                     let pr = project.Solution.Vs.LanguageService.CreateBackgroundRequest(
                                                     cursor.line-1, cursor.col-1, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing,
-                                                    Internal.Utilities.FileSystem.Path.SafeGetFullPath(file.Filename),
+                                                    System.IO.Path.GetFullPath(file.Filename),
                                                     BackgroundRequestReason.MatchBraces, view, sink, null, file.Source.ChangeCount, false)
                                                    
                     file.ExecuteBackgroundRequestForScope(pr,canRetryAfterWaiting=false)
@@ -1350,7 +1350,7 @@ module internal Salsa =
                         let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
                         let pr = project.Solution.Vs.LanguageService.CreateBackgroundRequest(
                                                         cursor.line-1, cursor.col-1, ti, file.CombinedLines, snapshot, MethodTipMiscellany.ExplicitlyInvokedViaCtrlShiftSpace,
-                                                        Internal.Utilities.FileSystem.Path.SafeGetFullPath(file.Filename),
+                                                        System.IO.Path.GetFullPath(file.Filename),
                                                         BackgroundRequestReason.MethodTip, view, sink, null, file.Source.ChangeCount, false)
                                                    
                         file.ExecuteBackgroundRequestForScope(pr,canRetryAfterWaiting=true)
@@ -1447,7 +1447,7 @@ module internal Salsa =
                   let ti   = new TokenInfo ()
                   let sink = new AuthoringSink (BackgroundRequestReason.Goto, row, col, maxErrors)
                   let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
-                  let pr   = project.Solution.Vs.LanguageService.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, Internal.Utilities.FileSystem.Path.SafeGetFullPath file.Filename, BackgroundRequestReason.Goto, view, sink, null, file.Source.ChangeCount, false)
+                  let pr   = project.Solution.Vs.LanguageService.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, System.IO.Path.GetFullPath file.Filename, BackgroundRequestReason.Goto, view, sink, null, file.Source.ChangeCount, false)
                   file.ExecuteBackgroundRequestForScope(pr,canRetryAfterWaiting=true)
               (currentAuthoringScope :?> FSharpScope).GotoDefinition (view, row, col)
                  
@@ -1459,7 +1459,7 @@ module internal Salsa =
                 let ti   = new TokenInfo ()
                 let sink = new AuthoringSink (BackgroundRequestReason.Goto, row, col, maxErrors)
                 let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
-                let pr   = project.Solution.Vs.LanguageService.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, Internal.Utilities.FileSystem.Path.SafeGetFullPath file.Filename, BackgroundRequestReason.QuickInfo, view, sink, null, file.Source.ChangeCount, false)
+                let pr   = project.Solution.Vs.LanguageService.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, System.IO.Path.GetFullPath file.Filename, BackgroundRequestReason.QuickInfo, view, sink, null, file.Source.ChangeCount, false)
                 file.ExecuteBackgroundRequestForScope(pr,canRetryAfterWaiting=true)
               let keyword = ref None
               let span = new Microsoft.VisualStudio.TextManager.Interop.TextSpan(iStartIndex=col,iStartLine=row,iEndIndex=col,iEndLine=row)
@@ -1475,7 +1475,7 @@ module internal Salsa =
               let ti   = new TokenInfo ()
               let sink = new AuthoringSink (BackgroundRequestReason.FullTypeCheck, row, col, maxErrors)
               let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
-              let pr   = project.Solution.Vs.LanguageService.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, Internal.Utilities.FileSystem.Path.SafeGetFullPath file.Filename, BackgroundRequestReason.FullTypeCheck, view, sink, null, file.Source.ChangeCount, false)
+              let pr   = project.Solution.Vs.LanguageService.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, System.IO.Path.GetFullPath file.Filename, BackgroundRequestReason.FullTypeCheck, view, sink, null, file.Source.ChangeCount, false)
               project.Solution.Vs.LanguageService.ExecuteBackgroundRequest(pr, file.Source) 
               match project.Solution.Vs.LanguageService.UntypedParseScope with
               | Some(scope) ->
@@ -1498,7 +1498,7 @@ module internal Salsa =
               let ti   = new TokenInfo ()
               let sink = new AuthoringSink (BackgroundRequestReason.FullTypeCheck, row, col, maxErrors)
               let snapshot = VsActual.createTextBuffer(file.CombinedLines).CurrentSnapshot 
-              let pr   = project.Solution.Vs.LanguageService.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, Internal.Utilities.FileSystem.Path.SafeGetFullPath file.Filename, BackgroundRequestReason.FullTypeCheck, view, sink, null, file.Source.ChangeCount, false)
+              let pr   = project.Solution.Vs.LanguageService.CreateBackgroundRequest(row, col, ti, file.CombinedLines, snapshot, MethodTipMiscellany.Typing, System.IO.Path.GetFullPath file.Filename, BackgroundRequestReason.FullTypeCheck, view, sink, null, file.Source.ChangeCount, false)
               project.Solution.Vs.LanguageService.ExecuteBackgroundRequest(pr, file.Source) 
               match project.Solution.Vs.LanguageService.UntypedParseScope with
               | Some(scope) ->
diff --git a/vsintegration/src/Templates/ConsoleProjectTemplates/ConsoleProjectTemplates.csproj b/vsintegration/src/Templates/ConsoleProjectTemplates/ConsoleProjectTemplates.csproj
index 90027f2e228..e9594121774 100644
--- a/vsintegration/src/Templates/ConsoleProjectTemplates/ConsoleProjectTemplates.csproj
+++ b/vsintegration/src/Templates/ConsoleProjectTemplates/ConsoleProjectTemplates.csproj
@@ -1,8 +1,8 @@
 
 
-
+
   
-    12.0
+    14.0
     11.0
     $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
     
diff --git a/vsintegration/src/Templates/ConsoleProjectTemplates/ProjectTemplates/ConsoleApplication/AssemblyInfo.fs b/vsintegration/src/Templates/ConsoleProjectTemplates/ProjectTemplates/ConsoleApplication/AssemblyInfo.fs
index b8f71aa6256..88f285659f4 100644
--- a/vsintegration/src/Templates/ConsoleProjectTemplates/ProjectTemplates/ConsoleApplication/AssemblyInfo.fs
+++ b/vsintegration/src/Templates/ConsoleProjectTemplates/ProjectTemplates/ConsoleApplication/AssemblyInfo.fs
@@ -4,9 +4,9 @@ open System.Reflection
 open System.Runtime.CompilerServices
 open System.Runtime.InteropServices
 
-(* General Information about an assembly is controlled through the following 
-set of attributes. Change these attribute values to modify the information
-associated with an assembly. *)
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
 []
 []
 []
@@ -16,24 +16,24 @@ associated with an assembly. *)
 []
 []
 
-(* Setting ComVisible to false makes the types in this assembly not visible 
-to COM components.  If you need to access a type in this assembly from 
-COM, set the ComVisible attribute to true on that type. *)
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
 []
 
 // The following GUID is for the ID of the typelib if this project is exposed to COM
 []
 
-(* Version information for an assembly consists of the following four values:
-
-      Major Version
-      Minor Version 
-      Build Number
-      Revision
-
-You can specify all the values or you can default the Build and Revision Numbers 
-by using the '*' as shown below:
-[] *)
+// Version information for an assembly consists of the following four values:
+// 
+//       Major Version
+//       Minor Version 
+//       Build Number
+//       Revision
+// 
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// []
 []
 []
 
diff --git a/vsintegration/src/Templates/ConsoleProjectTemplates/ProjectTemplates/ConsoleApplication/ConsoleApplication.fsproj b/vsintegration/src/Templates/ConsoleProjectTemplates/ProjectTemplates/ConsoleApplication/ConsoleApplication.fsproj
index 4be2f4de384..55cdac4928e 100644
--- a/vsintegration/src/Templates/ConsoleProjectTemplates/ProjectTemplates/ConsoleApplication/ConsoleApplication.fsproj
+++ b/vsintegration/src/Templates/ConsoleProjectTemplates/ProjectTemplates/ConsoleApplication/ConsoleApplication.fsproj
@@ -1,5 +1,5 @@
-
-
+
+
   
   
     Debug
@@ -12,7 +12,7 @@
     v$targetframeworkversion$
     true
     $if$ ($targetframeworkversion$ >= 4.0)
-    4.3.1.0
+    4.4.0.0
     $else$
     2.3.0.0
     $endif$
diff --git a/vsintegration/src/Templates/ItemTemplates/ItemTemplates.csproj b/vsintegration/src/Templates/ItemTemplates/ItemTemplates.csproj
index 2e923793c98..aa810e0a57d 100644
--- a/vsintegration/src/Templates/ItemTemplates/ItemTemplates.csproj
+++ b/vsintegration/src/Templates/ItemTemplates/ItemTemplates.csproj
@@ -1,8 +1,8 @@
 
 
-
+
   
-    12.0
+    14.0
     11.0
     $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
     
@@ -69,51 +69,45 @@
     prompt
     4
   
-  
-  
-    
-   
   
     
-      Visual F%252523 Items\Code
+      Code
       Designer
     
     
-      Visual F%252523 Items\Code
+      Code
       Designer
     
     
-      Visual F%252523 Items\Data
+      Data
       Designer
     
     
-      Visual F%252523 Items\Code
+      Code
       Designer
     
     
-      Visual F%252523 Items\Data
+      Data
       Designer
     
     
-      Visual F%252523 Items\Data
+      Data
       Designer
     
     
-      Visual F%252523 Items\Data
+      Data
       Designer
     
     
-      Visual F%252523 Items\General
+      General
       Designer
     
     
-      Visual F%252523 Items\General
+      General
       Designer
     
     
-      Visual F%252523 Items\General
+      General
       Designer
     
   
diff --git a/vsintegration/src/Templates/LibraryProjectTemplates/LibraryProjectTemplates.csproj b/vsintegration/src/Templates/LibraryProjectTemplates/LibraryProjectTemplates.csproj
index 9430277d786..cc2507bd280 100644
--- a/vsintegration/src/Templates/LibraryProjectTemplates/LibraryProjectTemplates.csproj
+++ b/vsintegration/src/Templates/LibraryProjectTemplates/LibraryProjectTemplates.csproj
@@ -1,8 +1,8 @@
 
 
-
+
   
-    12.0
+    14.0
     11.0
     $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
     
diff --git a/vsintegration/src/Templates/LibraryProjectTemplates/ProjectTemplates/Library/AssemblyInfo.fs b/vsintegration/src/Templates/LibraryProjectTemplates/ProjectTemplates/Library/AssemblyInfo.fs
index b8f71aa6256..88f285659f4 100644
--- a/vsintegration/src/Templates/LibraryProjectTemplates/ProjectTemplates/Library/AssemblyInfo.fs
+++ b/vsintegration/src/Templates/LibraryProjectTemplates/ProjectTemplates/Library/AssemblyInfo.fs
@@ -4,9 +4,9 @@ open System.Reflection
 open System.Runtime.CompilerServices
 open System.Runtime.InteropServices
 
-(* General Information about an assembly is controlled through the following 
-set of attributes. Change these attribute values to modify the information
-associated with an assembly. *)
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
 []
 []
 []
@@ -16,24 +16,24 @@ associated with an assembly. *)
 []
 []
 
-(* Setting ComVisible to false makes the types in this assembly not visible 
-to COM components.  If you need to access a type in this assembly from 
-COM, set the ComVisible attribute to true on that type. *)
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
 []
 
 // The following GUID is for the ID of the typelib if this project is exposed to COM
 []
 
-(* Version information for an assembly consists of the following four values:
-
-      Major Version
-      Minor Version 
-      Build Number
-      Revision
-
-You can specify all the values or you can default the Build and Revision Numbers 
-by using the '*' as shown below:
-[] *)
+// Version information for an assembly consists of the following four values:
+// 
+//       Major Version
+//       Minor Version 
+//       Build Number
+//       Revision
+// 
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// []
 []
 []
 
diff --git a/vsintegration/src/Templates/LibraryProjectTemplates/ProjectTemplates/Library/Library.fsproj b/vsintegration/src/Templates/LibraryProjectTemplates/ProjectTemplates/Library/Library.fsproj
index 1afb6f8d25f..2da03fa91e0 100644
--- a/vsintegration/src/Templates/LibraryProjectTemplates/ProjectTemplates/Library/Library.fsproj
+++ b/vsintegration/src/Templates/LibraryProjectTemplates/ProjectTemplates/Library/Library.fsproj
@@ -1,5 +1,5 @@
-
-
+
+
   
   
     Debug
@@ -11,10 +11,11 @@
     $safeprojectname$
     v$targetframeworkversion$
     $if$ ($targetframeworkversion$ >= 4.0)
-    4.3.1.0
+    4.4.0.0
     $else$
     2.3.0.0
     $endif$
+    true
   
   
     true
diff --git a/vsintegration/src/Templates/NetCore259ProjectTemplates/NetCore259ProjectTemplates.csproj b/vsintegration/src/Templates/NetCore259ProjectTemplates/NetCore259ProjectTemplates.csproj
index 1baf6b16e66..b19ccb88850 100644
--- a/vsintegration/src/Templates/NetCore259ProjectTemplates/NetCore259ProjectTemplates.csproj
+++ b/vsintegration/src/Templates/NetCore259ProjectTemplates/NetCore259ProjectTemplates.csproj
@@ -1,8 +1,8 @@
 
 
-
+
   
-    12.0
+    14.0
     11.0
     $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
     
diff --git a/vsintegration/src/Templates/NetCore259ProjectTemplates/ProjectTemplates/NETCorePortableLibrary/AssemblyInfo.fs b/vsintegration/src/Templates/NetCore259ProjectTemplates/ProjectTemplates/NETCorePortableLibrary/AssemblyInfo.fs
index aa8eebe5dc7..d4f0ec0fc43 100644
--- a/vsintegration/src/Templates/NetCore259ProjectTemplates/ProjectTemplates/NETCorePortableLibrary/AssemblyInfo.fs
+++ b/vsintegration/src/Templates/NetCore259ProjectTemplates/ProjectTemplates/NETCorePortableLibrary/AssemblyInfo.fs
@@ -5,9 +5,9 @@ open System.Reflection
 open System.Runtime.CompilerServices
 open System.Runtime.InteropServices
 
-(* General Information about an assembly is controlled through the following 
-set of attributes. Change these attribute values to modify the information
-associated with an assembly. *)
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
 []
 []
 []
@@ -18,16 +18,16 @@ associated with an assembly. *)
 []
 []
 
-(* Version information for an assembly consists of the following four values:
-
-      Major Version
-      Minor Version 
-      Build Number
-      Revision
-
-You can specify all the values or you can default the Build and Revision Numbers 
-by using the '*' as shown below:
-[] *)
+// Version information for an assembly consists of the following four values:
+// 
+//       Major Version
+//       Minor Version 
+//       Build Number
+//       Revision
+// 
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// []
 []
 []
 
diff --git a/vsintegration/src/Templates/NetCore259ProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj b/vsintegration/src/Templates/NetCore259ProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj
index e68950f639d..08951b6ad49 100644
--- a/vsintegration/src/Templates/NetCore259ProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj
+++ b/vsintegration/src/Templates/NetCore259ProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj
@@ -1,5 +1,5 @@
 
-
+
   
   
     Debug
@@ -12,7 +12,8 @@
     v4.5
     Profile259
     netcore
-    3.259.3.1
+    3.259.4.0
+    true
   
   
     true
diff --git a/vsintegration/src/Templates/NetCore78ProjectTemplates/NetCore78ProjectTemplates.csproj b/vsintegration/src/Templates/NetCore78ProjectTemplates/NetCore78ProjectTemplates.csproj
index 07bc798e1cf..b3a861630be 100644
--- a/vsintegration/src/Templates/NetCore78ProjectTemplates/NetCore78ProjectTemplates.csproj
+++ b/vsintegration/src/Templates/NetCore78ProjectTemplates/NetCore78ProjectTemplates.csproj
@@ -1,8 +1,8 @@
 
 
-
+
   
-    12.0
+    14.0
     11.0
     $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
     
diff --git a/vsintegration/src/Templates/NetCore78ProjectTemplates/ProjectTemplates/NetCorePortableLibrary/AssemblyInfo.fs b/vsintegration/src/Templates/NetCore78ProjectTemplates/ProjectTemplates/NetCorePortableLibrary/AssemblyInfo.fs
index aa8eebe5dc7..d4f0ec0fc43 100644
--- a/vsintegration/src/Templates/NetCore78ProjectTemplates/ProjectTemplates/NetCorePortableLibrary/AssemblyInfo.fs
+++ b/vsintegration/src/Templates/NetCore78ProjectTemplates/ProjectTemplates/NetCorePortableLibrary/AssemblyInfo.fs
@@ -5,9 +5,9 @@ open System.Reflection
 open System.Runtime.CompilerServices
 open System.Runtime.InteropServices
 
-(* General Information about an assembly is controlled through the following 
-set of attributes. Change these attribute values to modify the information
-associated with an assembly. *)
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
 []
 []
 []
@@ -18,16 +18,16 @@ associated with an assembly. *)
 []
 []
 
-(* Version information for an assembly consists of the following four values:
-
-      Major Version
-      Minor Version 
-      Build Number
-      Revision
-
-You can specify all the values or you can default the Build and Revision Numbers 
-by using the '*' as shown below:
-[] *)
+// Version information for an assembly consists of the following four values:
+// 
+//       Major Version
+//       Minor Version 
+//       Build Number
+//       Revision
+// 
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// []
 []
 []
 
diff --git a/vsintegration/src/Templates/NetCore78ProjectTemplates/ProjectTemplates/NetCorePortableLibrary/PortableLibrary.fsproj b/vsintegration/src/Templates/NetCore78ProjectTemplates/ProjectTemplates/NetCorePortableLibrary/PortableLibrary.fsproj
index 94641d6caec..30f9f88b795 100644
--- a/vsintegration/src/Templates/NetCore78ProjectTemplates/ProjectTemplates/NetCorePortableLibrary/PortableLibrary.fsproj
+++ b/vsintegration/src/Templates/NetCore78ProjectTemplates/ProjectTemplates/NetCorePortableLibrary/PortableLibrary.fsproj
@@ -1,5 +1,5 @@
 
-
+
   
   
     Debug
@@ -12,7 +12,8 @@
     v4.5
     Profile78
     netcore
-    3.78.3.1
+    3.78.4.0
+    true
   
   
     true
diff --git a/vsintegration/src/Templates/NetCoreProjectTemplates/NetCoreProjectTemplates.csproj b/vsintegration/src/Templates/NetCoreProjectTemplates/NetCoreProjectTemplates.csproj
index 8c3c4820e69..0c0aad560f9 100644
--- a/vsintegration/src/Templates/NetCoreProjectTemplates/NetCoreProjectTemplates.csproj
+++ b/vsintegration/src/Templates/NetCoreProjectTemplates/NetCoreProjectTemplates.csproj
@@ -1,8 +1,8 @@
 
 
-
+
   
-    12.0
+    14.0
     11.0
     $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
     
diff --git a/vsintegration/src/Templates/NetCoreProjectTemplates/ProjectTemplates/NETCorePortableLibrary/AssemblyInfo.fs b/vsintegration/src/Templates/NetCoreProjectTemplates/ProjectTemplates/NETCorePortableLibrary/AssemblyInfo.fs
index aa8eebe5dc7..d4f0ec0fc43 100644
--- a/vsintegration/src/Templates/NetCoreProjectTemplates/ProjectTemplates/NETCorePortableLibrary/AssemblyInfo.fs
+++ b/vsintegration/src/Templates/NetCoreProjectTemplates/ProjectTemplates/NETCorePortableLibrary/AssemblyInfo.fs
@@ -5,9 +5,9 @@ open System.Reflection
 open System.Runtime.CompilerServices
 open System.Runtime.InteropServices
 
-(* General Information about an assembly is controlled through the following 
-set of attributes. Change these attribute values to modify the information
-associated with an assembly. *)
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
 []
 []
 []
@@ -18,16 +18,16 @@ associated with an assembly. *)
 []
 []
 
-(* Version information for an assembly consists of the following four values:
-
-      Major Version
-      Minor Version 
-      Build Number
-      Revision
-
-You can specify all the values or you can default the Build and Revision Numbers 
-by using the '*' as shown below:
-[] *)
+// Version information for an assembly consists of the following four values:
+// 
+//       Major Version
+//       Minor Version 
+//       Build Number
+//       Revision
+// 
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// []
 []
 []
 
diff --git a/vsintegration/src/Templates/NetCoreProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj b/vsintegration/src/Templates/NetCoreProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj
index 4da953f2ba3..f3dcf3c47fd 100644
--- a/vsintegration/src/Templates/NetCoreProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj
+++ b/vsintegration/src/Templates/NetCoreProjectTemplates/ProjectTemplates/NETCorePortableLibrary/PortableLibrary.fsproj
@@ -1,5 +1,5 @@
-
-
+
+
   
   
     Debug
@@ -12,7 +12,8 @@
     v4.5
     Profile7
     netcore
-    3.3.1.0
+    3.7.4.0
+    true
   
   
     true
diff --git a/vsintegration/src/Templates/PortableLibraryProjectTemplates/PortableLibraryProjectTemplates.csproj b/vsintegration/src/Templates/PortableLibraryProjectTemplates/PortableLibraryProjectTemplates.csproj
index 174a85854dd..f3cdbc0e434 100644
--- a/vsintegration/src/Templates/PortableLibraryProjectTemplates/PortableLibraryProjectTemplates.csproj
+++ b/vsintegration/src/Templates/PortableLibraryProjectTemplates/PortableLibraryProjectTemplates.csproj
@@ -1,8 +1,8 @@
 
 
-
+
   
-    12.0
+    14.0
     11.0
     $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
     
diff --git a/vsintegration/src/Templates/PortableLibraryProjectTemplates/ProjectTemplates/PortableLibrary/AssemblyInfo.fs b/vsintegration/src/Templates/PortableLibraryProjectTemplates/ProjectTemplates/PortableLibrary/AssemblyInfo.fs
index aa8eebe5dc7..d4f0ec0fc43 100644
--- a/vsintegration/src/Templates/PortableLibraryProjectTemplates/ProjectTemplates/PortableLibrary/AssemblyInfo.fs
+++ b/vsintegration/src/Templates/PortableLibraryProjectTemplates/ProjectTemplates/PortableLibrary/AssemblyInfo.fs
@@ -5,9 +5,9 @@ open System.Reflection
 open System.Runtime.CompilerServices
 open System.Runtime.InteropServices
 
-(* General Information about an assembly is controlled through the following 
-set of attributes. Change these attribute values to modify the information
-associated with an assembly. *)
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
 []
 []
 []
@@ -18,16 +18,16 @@ associated with an assembly. *)
 []
 []
 
-(* Version information for an assembly consists of the following four values:
-
-      Major Version
-      Minor Version 
-      Build Number
-      Revision
-
-You can specify all the values or you can default the Build and Revision Numbers 
-by using the '*' as shown below:
-[] *)
+// Version information for an assembly consists of the following four values:
+// 
+//       Major Version
+//       Minor Version 
+//       Build Number
+//       Revision
+// 
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// []
 []
 []
 
diff --git a/vsintegration/src/Templates/PortableLibraryProjectTemplates/ProjectTemplates/PortableLibrary/PortableLibrary.fsproj b/vsintegration/src/Templates/PortableLibraryProjectTemplates/ProjectTemplates/PortableLibrary/PortableLibrary.fsproj
index fe584d57bde..e74e930f7a9 100644
--- a/vsintegration/src/Templates/PortableLibraryProjectTemplates/ProjectTemplates/PortableLibrary/PortableLibrary.fsproj
+++ b/vsintegration/src/Templates/PortableLibraryProjectTemplates/ProjectTemplates/PortableLibrary/PortableLibrary.fsproj
@@ -1,5 +1,5 @@
-
-
+
+
   
   
     Debug
@@ -11,7 +11,8 @@
     $safeprojectname$
     v4.0
     Profile47
-    2.3.5.1
+    3.47.4.0
+    true
   
   
     true
diff --git a/vsintegration/src/Templates/ProjectTemplates/ProjectTemplates.csproj b/vsintegration/src/Templates/ProjectTemplates/ProjectTemplates.csproj
index ae7e7aaa220..f312dcd6dab 100644
--- a/vsintegration/src/Templates/ProjectTemplates/ProjectTemplates.csproj
+++ b/vsintegration/src/Templates/ProjectTemplates/ProjectTemplates.csproj
@@ -1,8 +1,8 @@
 
 
-
+
   
-    12.0
+    14.0
     11.0
     $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
     
diff --git a/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/AssemblyInfo.fs b/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/AssemblyInfo.fs
index 4c04052ace8..ef8c57897bf 100644
--- a/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/AssemblyInfo.fs
+++ b/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/AssemblyInfo.fs
@@ -4,9 +4,9 @@ open System.Reflection
 open System.Runtime.CompilerServices
 open System.Runtime.InteropServices
 
-(* General Information about an assembly is controlled through the following 
-set of attributes. Change these attribute values to modify the information
-associated with an assembly. *)
+// General Information about an assembly is controlled through the following 
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
 []
 []
 []
@@ -16,24 +16,24 @@ associated with an assembly. *)
 []
 []
 
-(* Setting ComVisible to false makes the types in this assembly not visible 
-to COM components.  If you need to access a type in this assembly from 
-COM, set the ComVisible attribute to true on that type. *)
+// Setting ComVisible to false makes the types in this assembly not visible 
+// to COM components.  If you need to access a type in this assembly from 
+// COM, set the ComVisible attribute to true on that type.
 []
 
 // The following GUID is for the ID of the typelib if this project is exposed to COM
 []
 
-(* Version information for an assembly consists of the following four values:
-
-      Major Version
-      Minor Version 
-      Build Number
-      Revision
-
-You can specify all the values or you can default the Build and Revision Numbers 
-by using the '*' as shown below:
-[] *)
+// Version information for an assembly consists of the following four values:
+// 
+//       Major Version
+//       Minor Version 
+//       Build Number
+//       Revision
+// 
+// You can specify all the values or you can default the Build and Revision Numbers 
+// by using the '*' as shown below:
+// []
 []
 []
 
diff --git a/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/SilverlightLibrary.fsproj b/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/SilverlightLibrary.fsproj
index ecaa7dbfc26..fa952b868c4 100644
--- a/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/SilverlightLibrary.fsproj
+++ b/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/SilverlightLibrary.fsproj
@@ -1,5 +1,5 @@
-
-
+
+
   
   
     Debug
@@ -18,7 +18,8 @@
     false
     true
     false
-    2.3.5.1
+    3.47.4.0
+    true
   
   
     true
diff --git a/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/fsSilverlightLibrary.vstemplate b/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/fsSilverlightLibrary.vstemplate
index 7e78c338c07..941cfe34e6b 100644
--- a/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/fsSilverlightLibrary.vstemplate
+++ b/vsintegration/src/Templates/SilverlightProjectTemplates/ProjectTemplates/SilverlightLibrary/fsSilverlightLibrary.vstemplate
@@ -28,7 +28,7 @@
   
 
   
-    Microsoft.VisualStudio.Silverlight, Version=12.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a
+    Microsoft.VisualStudio.Silverlight, Version=14.0.0.0, Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a
     Microsoft.VisualStudio.Silverlight.SilverlightClasslibraryTemplateWizard  
   
 
diff --git a/vsintegration/src/Templates/SilverlightProjectTemplates/SilverlightProjectTemplates.csproj b/vsintegration/src/Templates/SilverlightProjectTemplates/SilverlightProjectTemplates.csproj
index 1b997a0c016..c12ab0ad15b 100644
--- a/vsintegration/src/Templates/SilverlightProjectTemplates/SilverlightProjectTemplates.csproj
+++ b/vsintegration/src/Templates/SilverlightProjectTemplates/SilverlightProjectTemplates.csproj
@@ -1,8 +1,8 @@
 
 
-
+
   
-    12.0
+    14.0
     11.0
     $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
     
diff --git a/vsintegration/src/Templates/TutorialProjectTemplates/ProjectTemplates/Tutorial/Tutorial.fsproj b/vsintegration/src/Templates/TutorialProjectTemplates/ProjectTemplates/Tutorial/Tutorial.fsproj
index 2edcdea6e41..fc034f3d262 100644
--- a/vsintegration/src/Templates/TutorialProjectTemplates/ProjectTemplates/Tutorial/Tutorial.fsproj
+++ b/vsintegration/src/Templates/TutorialProjectTemplates/ProjectTemplates/Tutorial/Tutorial.fsproj
@@ -1,5 +1,5 @@
-
-
+
+
   
   
     Debug
@@ -12,10 +12,11 @@
     v$targetframeworkversion$
     true
     $if$ ($targetframeworkversion$ >= 4.0)
-    4.3.1.0
+    4.4.0.0
     $else$
     2.3.0.0
     $endif$
+    true
   
   
     true
diff --git a/vsintegration/src/Templates/TutorialProjectTemplates/TutorialProjectTemplates.csproj b/vsintegration/src/Templates/TutorialProjectTemplates/TutorialProjectTemplates.csproj
index 92403c19ea1..7727cff9e5b 100644
--- a/vsintegration/src/Templates/TutorialProjectTemplates/TutorialProjectTemplates.csproj
+++ b/vsintegration/src/Templates/TutorialProjectTemplates/TutorialProjectTemplates.csproj
@@ -1,8 +1,8 @@
 
 
-
+
   
-    12.0
+    14.0
     11.0
     $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
     
diff --git a/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.csproj b/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.csproj
index 48ee98115af..3ac0e3bb809 100644
--- a/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.csproj
+++ b/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.csproj
@@ -1,8 +1,8 @@
 
 
-
+
   
-    12.0
+    14.0
     11.0
     $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
     
@@ -71,6 +71,12 @@
       Designer
     
   
+  
+    
+      PreserveNewest
+      true
+    
+  
   
     
       Always
@@ -95,29 +101,53 @@
     
   
   
+    
+      {649FA588-F02E-457C-9FCF-87E46407481E}
+      FSharp.Compiler.Interactive.Settings
+      BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
+      DebugSymbolsProjectOutputGroup%3b
+      false
+    
     
       {D5870CF0-ED51-4CBC-B3D7-6F56DA84AC06}
       FSharp.Compiler.Server.Shared
-      BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
+      BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
       DebugSymbolsProjectOutputGroup%3b
+      false
     
     
       {2E4D67B4-522D-4CF7-97E4-BA940F0B18F3}
       FSharp.Compiler
-      BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
+      BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
       DebugSymbolsProjectOutputGroup%3b
+      false
     
     
       {DED3BBD7-53F4-428A-8C9F-27968E768605}
       FSharp.Core
-      BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
+      BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
       DebugSymbolsProjectOutputGroup%3b
     
     
       {A437A6EC-5323-47C2-8F86-E2CAC54FF152}
       FSharp.LanguageService.Compiler
-      BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
+      BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
+      DebugSymbolsProjectOutputGroup%3b
+      false
+    
+    
+      {8B3E283D-B5FE-4055-9D80-7E3A32F3967B}
+      FsiAnyCPU
+      BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
+      DebugSymbolsProjectOutputGroup%3b
+      false
+    
+    
+      {D0E98C0D-490B-4C61-9329-0862F6E87645}
+      Fsi
+      BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
       DebugSymbolsProjectOutputGroup%3b
+      false
     
     
       {65e0e82a-eace-4787-8994-888674c2fe87}
@@ -126,38 +156,44 @@
     
       {1C5C163C-37EA-4A3C-8CCC-0D34B74BF8EF}
       FSharp.LanguageService.Base
-      BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
+      BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
       DebugSymbolsProjectOutputGroup%3b
+      false
     
     
       {EE85AAB7-CDA0-4C4E-BDA0-A64CCC413E3F}
       FSharp.LanguageService
-      BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
+      BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
       DebugSymbolsProjectOutputGroup%3b
+      false
     
     
       {B700E38B-F8C0-4E49-B5EC-DB7B7AC0C4E7}
       ProjectSystem.Base
-      BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
+      BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
       DebugSymbolsProjectOutputGroup%3b
+      false
     
     
       {6196B0F8-CAEA-4CF1-AF82-1B520F77FE44}
       ProjectSystem
-      BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
+      BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
       DebugSymbolsProjectOutputGroup%3b
+      false
     
     
       {FCFB214C-462E-42B3-91CA-FC557EFEE74F}
       FSharp.PropertiesPages
-      BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
+      BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
       DebugSymbolsProjectOutputGroup%3b
+      false
     
     
       {991DCF75-C2EB-42B6-9A0D-AA1D2409D519}
       FSHarp.VS.FSI
-      BuiltProjectOutputGroup%3bBuiltProjectOutputGroupDependencies%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
+      BuiltProjectOutputGroup%3bGetCopyToOutputDirectoryItems%3bSatelliteDllsProjectOutputGroup%3b
       DebugSymbolsProjectOutputGroup%3b
+      false
     
   
   
diff --git a/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.pkgdef b/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.pkgdef
index 04f6584a0a4..415561b4105 100644
--- a/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.pkgdef
+++ b/vsintegration/src/deployment/EnableOpenSource/EnableOpenSource.pkgdef
@@ -3,86 +3,86 @@
 "name"="FSharp.Compiler"
 "publicKeyToken"="b03f5f7f11d50a3a"
 "culture"="neutral"
-"oldVersion"="4.3.0.0-4.3.1.0"
-"newVersion"="4.3.1.9055"
+"oldVersion"="4.3.0.0-4.4.0.0"
+"newVersion"="4.4.0.9055"
 "codeBase"="$PackageFolder$\FSharp.Compiler.dll"
 
 [$RootKey$\RuntimeConfiguration\dependentAssembly\bindingRedirection\{091CE614-9F5C-46F6-82ED-2BCEC3740C54}]
 "name"="FSharp.Compiler.Server.Shared"
 "publicKeyToken"="b03f5f7f11d50a3a"
 "culture"="neutral"
-"oldVersion"="4.3.0.0-4.3.1.0"
-"newVersion"="4.3.1.9055"
+"oldVersion"="4.3.0.0-4.4.0.0"
+"newVersion"="4.4.0.9055"
 "codeBase"="$PackageFolder$\FSharp.Compiler.Server.Shared.dll"
 
 [$RootKey$\RuntimeConfiguration\dependentAssembly\bindingRedirection\{4D79C9FC-8AB8-476D-8526-E55B2AF6C6B7}]
 "name"="FSharp.Core"
 "publicKeyToken"="b03f5f7f11d50a3a"
 "culture"="neutral"
-"oldVersion"="2.3.5.1-4.3.1.9055"
-"newVersion"="4.3.1.9055"
+"oldVersion"="2.3.0.0-4.4.0.0"
+"newVersion"="4.4.0.9055"
 "codeBase"="$PackageFolder$\FSharp.Core.dll"
 
 [$RootKey$\RuntimeConfiguration\dependentAssembly\bindingRedirection\{2DB67780-3B09-41E5-A8DC-92AF2E1665BD}]
 "name"="FSharp.Editor"
 "publicKeyToken"="b03f5f7f11d50a3a"
 "culture"="neutral"
-"oldVersion"="12.0.0.0"
-"newVersion"="12.0.0.9055"
+"oldVersion"="12.0.0.0-14.0.0.0"
+"newVersion"="14.0.0.9055"
 "codeBase"="$PackageFolder$\FSharp.Editor.dll"
 
 [$RootKey$\RuntimeConfiguration\dependentAssembly\bindingRedirection\{EBAA5FAC-BE56-4693-82AB-0FD093861AAE}]
 "name"="FSharp.LanguageService"
 "publicKeyToken"="b03f5f7f11d50a3a"
 "culture"="neutral"
-"oldVersion"="12.0.0.0"
-"newVersion"="12.0.0.9055"
+"oldVersion"="12.0.0.0-14.0.0.0"
+"newVersion"="14.0.0.9055"
 "codeBase"="$PackageFolder$\FSharp.LanguageService.dll"
 
 [$RootKey$\RuntimeConfiguration\dependentAssembly\bindingRedirection\{B1E0C67D-87CD-4EA5-A9BC-0D8210A876E7}]
 "name"="FSharp.LanguageService.Base"
 "publicKeyToken"="b03f5f7f11d50a3a"
 "culture"="neutral"
-"oldVersion"="12.0.0.0"
-"newVersion"="12.0.0.9055"
+"oldVersion"="12.0.0.0-14.0.0.0"
+"newVersion"="14.0.0.9055"
 "codeBase"="$PackageFolder$\FSharp.LanguageService.Base.dll"
 
 [$RootKey$\RuntimeConfiguration\dependentAssembly\bindingRedirection\{C9555D76-CA9E-484F-9C53-ED10598E2A48}]
 "name"="FSharp.LanguageService.Compiler"
 "publicKeyToken"="b03f5f7f11d50a3a"
 "culture"="neutral"
-"oldVersion"="12.0.0.0"
-"newVersion"="12.0.0.9055"
+"oldVersion"="12.0.0.0-14.0.0.0"
+"newVersion"="14.0.0.9055"
 "codeBase"="$PackageFolder$\FSharp.LanguageService.Compiler.dll"
 
 [$RootKey$\RuntimeConfiguration\dependentAssembly\bindingRedirection\{892D5910-A99B-4591-9A90-6FBA6E7EFB83}]
 "name"="FSharp.VS.FSI"
 "publicKeyToken"="b03f5f7f11d50a3a"
 "culture"="neutral"
-"oldVersion"="12.0.0.0"
-"newVersion"="12.0.0.9055"
+"oldVersion"="12.0.0.0-14.0.0.0"
+"newVersion"="14.0.0.9055"
 "codeBase"="$PackageFolder$\FSharp.VS.FSI.dll"
 
 [$RootKey$\RuntimeConfiguration\dependentAssembly\bindingRedirection\{01E671A2-D375-4F61-AAB1-FC4A360B7566}]
 "name"="FSharp.ProjectSystem.FSharp"
 "publicKeyToken"="b03f5f7f11d50a3a"
 "culture"="neutral"
-"oldVersion"="12.0.0.0"
-"newVersion"="12.0.0.9055"
+"oldVersion"="12.0.0.0-14.0.0.0"
+"newVersion"="14.0.0.9055"
 "codeBase"="$PackageFolder$\FSharp.ProjectSystem.FSharp.dll"
 
 [$RootKey$\RuntimeConfiguration\dependentAssembly\bindingRedirection\{1FD3D46E-E558-4000-AB74-60745B18F991}]
 "name"="FSharp.ProjectSystem.Base"
 "publicKeyToken"="b03f5f7f11d50a3a"
 "culture"="neutral"
-"oldVersion"="12.0.0.0"
-"newVersion"="12.0.0.9055"
+"oldVersion"="12.0.0.0-14.0.0.0"
+"newVersion"="14.0.0.9055"
 "codeBase"="$PackageFolder$\FSharp.ProjectSystem.Base.dll"
 
 [$RootKey$\RuntimeConfiguration\dependentAssembly\bindingRedirection\{666BAAE7-BC0E-4B74-8048-09567E0862E6}]
 "name"="FSharp.ProjectSystem.PropertyPages"
 "publicKeyToken"="b03f5f7f11d50a3a"
 "culture"="neutral"
-"oldVersion"="12.0.0.0"
-"newVersion"="12.0.0.9055"
+"oldVersion"="12.0.0.0-14.0.0.0"
+"newVersion"="14.0.0.9055"
 "codeBase"="$PackageFolder$\FSharp.ProjectSystem.PropertyPages.dll"
diff --git a/vsintegration/src/deployment/EnableOpenSource/source.extension.vsixmanifest b/vsintegration/src/deployment/EnableOpenSource/source.extension.vsixmanifest
index 0b67c098323..9c1b3125956 100644
--- a/vsintegration/src/deployment/EnableOpenSource/source.extension.vsixmanifest
+++ b/vsintegration/src/deployment/EnableOpenSource/source.extension.vsixmanifest
@@ -2,12 +2,13 @@
 
 
   
-    
+    
     Microsoft.VisualFSharpTools.EnableOpenSource
     Enable FSharp.VS.FSI. 
+    License.txt
   
   
-    
+    
   
   
     
@@ -17,7 +18,7 @@
     
     
     
-    
+    
     
     
     
@@ -25,5 +26,8 @@
     
     
     
+    
+    
+    
   
 
\ No newline at end of file
diff --git a/vsintegration/src/deployment/VWDExpressDeployTemplates/VWDExpressDeployTemplates.csproj b/vsintegration/src/deployment/VWDExpressDeployTemplates/VWDExpressDeployTemplates.csproj
index 474c4ed6272..f68c1113768 100644
--- a/vsintegration/src/deployment/VWDExpressDeployTemplates/VWDExpressDeployTemplates.csproj
+++ b/vsintegration/src/deployment/VWDExpressDeployTemplates/VWDExpressDeployTemplates.csproj
@@ -1,8 +1,8 @@
 
 
-
+
   
-    12.0
+    14.0
     11.0
     $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
     
diff --git a/vsintegration/src/deployment/VWDExpressDeployTemplates/extension.vsixlangpack b/vsintegration/src/deployment/VWDExpressDeployTemplates/extension.vsixlangpack
new file mode 100644
index 00000000000..d29ada3f50e
--- /dev/null
+++ b/vsintegration/src/deployment/VWDExpressDeployTemplates/extension.vsixlangpack
@@ -0,0 +1,8 @@
+
+
+	
+		
+		Visual F# Tools Templates
+		Deploy Visual F# Tools templates to Visual Studio Express for Web
+	
+
diff --git a/vsintegration/src/deployment/VWDExpressDeployTemplates/extension.vsixmanifest b/vsintegration/src/deployment/VWDExpressDeployTemplates/extension.vsixmanifest
new file mode 100644
index 00000000000..f7adca70a87
--- /dev/null
+++ b/vsintegration/src/deployment/VWDExpressDeployTemplates/extension.vsixmanifest
@@ -0,0 +1,19 @@
+
+
+
+  
+    
+    Visual F# Tools Templates
+    Deploy Visual F# Tools templates to Visual Studio Express for Web
+  
+  
+    
+  
+  
+    
+  
+  
+    
+    
+  
+
\ No newline at end of file
diff --git a/vsintegration/src/deployment/VWDExpressDeployTemplates/source.extension.vsixmanifest b/vsintegration/src/deployment/VWDExpressDeployTemplates/source.extension.vsixmanifest
index 6975540f792..6a45c95fad9 100644
--- a/vsintegration/src/deployment/VWDExpressDeployTemplates/source.extension.vsixmanifest
+++ b/vsintegration/src/deployment/VWDExpressDeployTemplates/source.extension.vsixmanifest
@@ -2,12 +2,12 @@
 
 
   
-    
-    VWDExpressDeployTemplates
-    Deploy FSharp in the box templates to Visual Web Dev Express
+    
+    Visual F# Tools Templates
+    Deploy Visual F# Tools templates to Visual Studio Express for Web
   
   
-    
+    
   
   
     
diff --git a/vsintegration/src/deployment/VsProDeployTemplates/VsProDeployTemplates.csproj b/vsintegration/src/deployment/VsProDeployTemplates/VsProDeployTemplates.csproj
index a9a20eca264..b37eb11d74e 100644
--- a/vsintegration/src/deployment/VsProDeployTemplates/VsProDeployTemplates.csproj
+++ b/vsintegration/src/deployment/VsProDeployTemplates/VsProDeployTemplates.csproj
@@ -1,8 +1,8 @@
 
 
-
+
   
-    12.0
+    14.0
     11.0
     $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
     
diff --git a/vsintegration/src/deployment/VsProDeployTemplates/extension.vsixlangpack b/vsintegration/src/deployment/VsProDeployTemplates/extension.vsixlangpack
new file mode 100644
index 00000000000..2713dabad21
--- /dev/null
+++ b/vsintegration/src/deployment/VsProDeployTemplates/extension.vsixlangpack
@@ -0,0 +1,8 @@
+
+
+	
+		
+		Visual F# Tools Templates
+		Deploy Visual F# Tools templates to Visual Studio
+	
+
diff --git a/vsintegration/src/deployment/VsProDeployTemplates/extension.vsixmanifest b/vsintegration/src/deployment/VsProDeployTemplates/extension.vsixmanifest
new file mode 100644
index 00000000000..a63cb9f0644
--- /dev/null
+++ b/vsintegration/src/deployment/VsProDeployTemplates/extension.vsixmanifest
@@ -0,0 +1,19 @@
+
+
+
+  
+    
+    Visual F# Tools Templates
+    Deploy Visual F# Tools templates to Visual Studio
+  
+  
+    
+  
+  
+    
+  
+  
+    
+    
+  
+
\ No newline at end of file
diff --git a/vsintegration/src/deployment/VsProDeployTemplates/source.extension.vsixmanifest b/vsintegration/src/deployment/VsProDeployTemplates/source.extension.vsixmanifest
index 94e802360c5..365ff73f7ab 100644
--- a/vsintegration/src/deployment/VsProDeployTemplates/source.extension.vsixmanifest
+++ b/vsintegration/src/deployment/VsProDeployTemplates/source.extension.vsixmanifest
@@ -2,12 +2,12 @@
 
 
   
-    
-    Visual FSharp Tools Templates For VSPro
-    Deploy FSharp in the box templates to VsPro and up
+    
+    Visual F# Tools Templates
+    Deploy Visual F# Tools templates to Visual Studio
   
   
-    
+    
   
   
     
diff --git a/vsintegration/src/deployment/WDExpressDeployTemplates/WDExpressDeployTemplates.csproj b/vsintegration/src/deployment/WDExpressDeployTemplates/WDExpressDeployTemplates.csproj
index a0834626427..0313d686266 100644
--- a/vsintegration/src/deployment/WDExpressDeployTemplates/WDExpressDeployTemplates.csproj
+++ b/vsintegration/src/deployment/WDExpressDeployTemplates/WDExpressDeployTemplates.csproj
@@ -1,8 +1,8 @@
 
 
-
+
   
-    12.0
+    14.0
     11.0
     $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)
     
diff --git a/vsintegration/src/deployment/WDExpressDeployTemplates/extension.vsixlangpack b/vsintegration/src/deployment/WDExpressDeployTemplates/extension.vsixlangpack
new file mode 100644
index 00000000000..ffaa41af62c
--- /dev/null
+++ b/vsintegration/src/deployment/WDExpressDeployTemplates/extension.vsixlangpack
@@ -0,0 +1,9 @@
+
+
+	
+		
+		Visual F# Tools Templates
+		Deploy Visual F# Tools templates to Visual Studio Express for Windows Desktop
+	
+
+
diff --git a/vsintegration/src/deployment/WDExpressDeployTemplates/extension.vsixmanifest b/vsintegration/src/deployment/WDExpressDeployTemplates/extension.vsixmanifest
new file mode 100644
index 00000000000..c3ebeb2050f
--- /dev/null
+++ b/vsintegration/src/deployment/WDExpressDeployTemplates/extension.vsixmanifest
@@ -0,0 +1,19 @@
+
+
+
+  
+    
+    Visual F# Tools Templates
+    Deploy Visual F# Tools templates to Visual Studio Express for Windows Desktop
+  
+  
+    
+  
+  
+    
+  
+  
+    
+    
+  
+
\ No newline at end of file
diff --git a/vsintegration/src/deployment/WDExpressDeployTemplates/source.extension.vsixmanifest b/vsintegration/src/deployment/WDExpressDeployTemplates/source.extension.vsixmanifest
index b7e67c4a740..daaac841f2d 100644
--- a/vsintegration/src/deployment/WDExpressDeployTemplates/source.extension.vsixmanifest
+++ b/vsintegration/src/deployment/WDExpressDeployTemplates/source.extension.vsixmanifest
@@ -2,12 +2,12 @@
 
 
   
-    
-    WDExpressDeployTemplates
-    Deploy FSharp in the box templates toWindows Desktop Express
+    
+    Visual F# Tools Templates
+    Deploy Visual F# Tools templates to Visual Studio Express for Windows Desktop
   
   
-    
+    
   
   
     
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/DefinitionLocationAttribute.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/DefinitionLocationAttribute.csproj
index d242a5cad3f..9e0c9941525 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/DefinitionLocationAttribute.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttribute/DefinitionLocationAttribute.csproj
@@ -1,6 +1,6 @@
 
 
-
+
   
     ..\..\..\..\..\src
     CSharp
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/DefinitionLocationAttributeFileDoesnotExist.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/DefinitionLocationAttributeFileDoesnotExist.csproj
index 41c552a00a1..945708f3afc 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/DefinitionLocationAttributeFileDoesnotExist.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeFileDoesnotExist/DefinitionLocationAttributeFileDoesnotExist.csproj
@@ -1,6 +1,6 @@
 
 
-
+
   
     ..\..\..\..\..\src
     CSharp
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/DefinitionLocationAttributeLineDoesnotExist.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/DefinitionLocationAttributeLineDoesnotExist.csproj
index 46b2a18be1a..7ac6782145a 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/DefinitionLocationAttributeLineDoesnotExist.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeLineDoesnotExist/DefinitionLocationAttributeLineDoesnotExist.csproj
@@ -1,6 +1,6 @@
 
 
-
+
   
     ..\..\..\..\..\src
     CSharp
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/DefinitionLocationAttributeWithSpaceInTheType.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/DefinitionLocationAttributeWithSpaceInTheType.csproj
index 335db19c7e1..1168b555fa5 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/DefinitionLocationAttributeWithSpaceInTheType.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DefinitionLocationAttributeWithSpaceInTheType/DefinitionLocationAttributeWithSpaceInTheType.csproj
@@ -1,6 +1,6 @@
 
 
-
+
   
     ..\..\..\..\..\src
     CSharp
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fs b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fs
index b82da3d6492..306444e2cac 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fs
@@ -209,6 +209,29 @@ module TypeProviderThatThrowsErrorsModule =
 type TypeProviderThatThrowsErrors() = 
     inherit TypeProviderForNamespaces(TypeProviderThatThrowsErrorsModule.rootNamespace, TypeProviderThatThrowsErrorsModule.types)
 
+open System.ComponentModel
+type TPBaseTy() =
+    [] 
+    []
+    member this.DoNotShowHidden = ()
+
+    []
+    member this.DoNotShowObsolete = ()
+
+    member this.ShowThisProp = ()
+
+[]
+type HiddenMembersInBaseClassProvider() as this = 
+    inherit TypeProviderForNamespaces()
+    let namespaceName = "HiddenMembersInBaseClass"    
+    let thisAssembly  = System.Reflection.Assembly.GetExecutingAssembly()
+
+    let typeT = ProvidedTypeDefinition(thisAssembly, namespaceName, "HiddenBaseMembersTP", Some typeof)
+    let types = [ typeT ]
+
+    do
+        this.AddNamespace(namespaceName,types)
+
 module TypeProviderForTestingTuplesErasureModule = 
     type private Marker = interface end
     let assembly = typeof.Assembly
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj
index d2fdabb9623..ba1fced5c11 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/DummyProviderForLanguageServiceTesting.fsproj
@@ -1,6 +1,6 @@
 
 
-
+
   
     ..\..\..\..\..\src
     FSharp
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fs b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fs
index 82c59297daf..ecdced32403 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fs
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fs
@@ -1429,6 +1429,13 @@ module Local =
                              failwith (sprintf "Unknown type '%s' in namespace '%s' (contains %s)" typeName namespaceName typenames)    
         }
 
+// Used by unit testing to check that invalidation handlers are being disconnected
+module GlobalCountersForInvalidation = 
+    let mutable invalidationHandlersAdded = 0
+    let mutable invalidationHandlersRemoved = 0
+    let GetInvalidationHandlersAdded() = invalidationHandlersAdded
+    let GetInvalidationHandlersRemoved() = invalidationHandlersRemoved
+
 
 type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list)>) =
     let otherNamespaces = ResizeArray>()
@@ -1440,6 +1447,26 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list()    
+    let invalidateP = invalidateE.Publish
+    let invalidatePCounting = 
+            { new obj() with
+                  member x.ToString() = ""
+              interface IEvent 
+              interface IDelegateEvent with 
+                member e.AddHandler(d) = 
+                    GlobalCountersForInvalidation.invalidationHandlersAdded <- GlobalCountersForInvalidation.invalidationHandlersAdded + 1
+                    invalidateP.AddHandler(d)
+                member e.RemoveHandler(d) = 
+                    GlobalCountersForInvalidation.invalidationHandlersRemoved <- GlobalCountersForInvalidation.invalidationHandlersRemoved + 1
+                    invalidateP.RemoveHandler(d)
+              interface System.IObservable with 
+                member e.Subscribe(observer) = 
+                   GlobalCountersForInvalidation.invalidationHandlersAdded <- GlobalCountersForInvalidation.invalidationHandlersAdded + 1
+                   let d = invalidateP.Subscribe(observer)
+                   { new System.IDisposable with 
+                        member x.Dispose() = 
+                            GlobalCountersForInvalidation.invalidationHandlersRemoved <- GlobalCountersForInvalidation.invalidationHandlersRemoved + 1
+                            d.Dispose() } }
 
     new (namespaceName:string,types:list) = new TypeProviderForNamespaces([(namespaceName,types)])
     new () = new TypeProviderForNamespaces([])
@@ -1450,7 +1477,7 @@ type TypeProviderForNamespaces(namespacesAndTypes : list<(string * list]
-        override this.Invalidate = invalidateE.Publish
+        override this.Invalidate = invalidatePCounting
         override this.GetNamespaces() = Array.copy providedNamespaces.Value
         member __.GetInvokerExpression(methodBase, parameters) = 
             match methodBase with
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fsi b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fsi
index b599683a3a7..75eb5eba6dd 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fsi
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/DummyProviderForLanguageServiceTesting/TypeProviderEmit.fsi
@@ -280,4 +280,10 @@ type TypeProviderForNamespaces =
     member Invalidate : unit -> unit
 
     interface ITypeProvider
+
+// Used by unit testing to check that invalidation handlers are being disconnected
+module GlobalCountersForInvalidation = 
+    val GetInvalidationHandlersAdded : unit -> int
+    val GetInvalidationHandlersRemoved : unit -> int
+
 #endif
\ No newline at end of file
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/EditorHideMethodsAttribute.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/EditorHideMethodsAttribute.csproj
index c8c0daa8bd8..c2d69d9f971 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/EditorHideMethodsAttribute.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/EditorHideMethodsAttribute/EditorHideMethodsAttribute.csproj
@@ -1,6 +1,6 @@
 
 
-
+
   
     ..\..\..\..\..\src
     CSharp
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/EmptyAssembly/EmptyAssembly.fsproj b/vsintegration/src/unittests/Resources.MockTypeProviders/EmptyAssembly/EmptyAssembly.fsproj
index 64a8e069fd8..38bbf4b2595 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/EmptyAssembly/EmptyAssembly.fsproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/EmptyAssembly/EmptyAssembly.fsproj
@@ -1,6 +1,6 @@
 
 
-
+
   
     ..\..\..\..\..\src
     FSharp
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/XmlDocAttributeWithAdequateComment.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/XmlDocAttributeWithAdequateComment.csproj
index 0d2aa6f1380..0d4e803f3ec 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/XmlDocAttributeWithAdequateComment.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithAdequateComment/XmlDocAttributeWithAdequateComment.csproj
@@ -1,6 +1,6 @@
 
 
-
+
   
     ..\..\..\..\..\src
     CSharp
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/XmlDocAttributeWithEmptyComment.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/XmlDocAttributeWithEmptyComment.csproj
index 5143f13c11a..cc04d3b8bd7 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/XmlDocAttributeWithEmptyComment.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithEmptyComment/XmlDocAttributeWithEmptyComment.csproj
@@ -1,6 +1,6 @@
 
 
-
+
   
     ..\..\..\..\..\src
     CSharp
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/XmlDocAttributeWithLocalizedComment.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/XmlDocAttributeWithLocalizedComment.csproj
index 9813fb7b31d..669d00728c8 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/XmlDocAttributeWithLocalizedComment.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLocalizedComment/XmlDocAttributeWithLocalizedComment.csproj
@@ -1,6 +1,6 @@
 
 
-
+
   
     ..\..\..\..\..\src
     CSharp
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/XmlDocAttributeWithLongComment.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/XmlDocAttributeWithLongComment.csproj
index 1fd69848be3..66bb3f66c7c 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/XmlDocAttributeWithLongComment.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithLongComment/XmlDocAttributeWithLongComment.csproj
@@ -1,6 +1,6 @@
 
 
-
+
   
     ..\..\..\..\..\src
     CSharp
diff --git a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/XmlDocAttributeWithNullComment.csproj b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/XmlDocAttributeWithNullComment.csproj
index 84ec886b5d9..72aaf40ab92 100644
--- a/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/XmlDocAttributeWithNullComment.csproj
+++ b/vsintegration/src/unittests/Resources.MockTypeProviders/XmlDocAttributeWithNullComment/XmlDocAttributeWithNullComment.csproj
@@ -1,6 +1,6 @@
 
 
-
+
   
     ..\..\..\..\..\src
     CSharp
diff --git a/vsintegration/src/unittests/Tests.LanguageService.Colorizer.fs b/vsintegration/src/unittests/Tests.LanguageService.Colorizer.fs
index e0238c328f9..83e7c65b18e 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.Colorizer.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.Colorizer.fs
@@ -985,7 +985,35 @@ let z = __LINE__(*Test3*)
         check "(*If*)" TokenType.Comment
         check "(*Else*)" TokenType.Comment
         check "(*Endif*)" TokenType.Comment
-        
+
+    /// FEATURE: Preprocessor extended grammar basic check.
+    /// FEATURE:  More extensive grammar test is done in compiler unit tests
+    []
+    member public this.``Preprocessor.ExtendedIfGrammar.Basic01``() =
+        this.VerifyColorizerAtStartOfMarker(
+            fileContents = """
+                #if UNDEFINED || !UNDEFINED // Extended #if
+                let x = "activeCode"
+                #else
+                let x = "inactiveCode"
+                #endif
+                """,
+            marker = "activeCode",
+            tokenType = TokenType.String)
+
+    []
+    member public this.``Preprocessor.ExtendedIfGrammar.Basic02``() =
+        this.VerifyColorizerAtStartOfMarker(
+            fileContents = """
+                #if UNDEFINED || !UNDEFINED // Extended #if
+                let x = "activeCode"
+                #else
+                let x = "inactiveCode"
+                #endif
+                """,
+            marker = "inactiveCode",
+            tokenType = TokenType.InactiveCode)
+
     /// #else / #endif in multiline strings is ignored
     []
     member public this.``Preprocessor.DirectivesInString``() =
@@ -1040,7 +1068,7 @@ let z = __LINE__(*Test3*)
                                      "#endif"]
         let (_, _, file) = this.CreateSingleFileProject(code)
         MoveCursorToStartOfMarker(file, "!!COMPILED")
-        AssertEqual(TokenType.Operator, GetTokenTypeAtCursor(file))
+        AssertEqual(TokenType.Identifier, GetTokenTypeAtCursor(file))
 
 
     // This was an off-by-one bug in the replacement Colorizer
diff --git a/vsintegration/src/unittests/Tests.LanguageService.Completion.fs b/vsintegration/src/unittests/Tests.LanguageService.Completion.fs
index 0c2504eb303..46d88738032 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.Completion.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.Completion.fs
@@ -474,6 +474,148 @@ type AutoCompletionListTests() as this  =
                 "type B() = inherit A(System.String.)"
             ]
         AssertCtrlSpaceCompleteContains code "System.String." ["Empty"] ["Array"; "Collections"]
+    
+    []
+    []
+    member public this.``ObjectInitializer.CompletionForProperties``() =
+        let typeDef1 = 
+            [
+                "type A() = "
+                "   member val SettableProperty = 1 with get,set"
+                "   member val AnotherSettableProperty = 1 with get,set"
+                "   member val NonSettableProperty = 1"
+            ]
+        AssertCtrlSpaceCompleteContains (typeDef1 @ ["A((**))"]) "A((**)" ["SettableProperty"; "AnotherSettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef1 @ ["A(S = 1)"]) "A(S" ["SettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef1 @ ["A(S = 1)"]) "A(S = 1" [] ["SettableProperty"; "NonSettableProperty"] // neg test
+        AssertCtrlSpaceCompleteContains (typeDef1 @ ["A(S = 1,)"]) "A(S = 1," ["AnotherSettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef1 @ ["new A((**))"]) "A((**)" ["SettableProperty"; "AnotherSettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef1 @ ["new A(S = 1)"]) "A(S" ["SettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef1 @ ["new A(S = 1)"]) "A(S = 1" [] ["SettableProperty"; "NonSettableProperty"] // neg test
+        AssertCtrlSpaceCompleteContains (typeDef1 @ ["new A(S = 1,)"]) "A(S = 1," ["AnotherSettableProperty"] ["NonSettableProperty"] 
+
+        let typeDef2 = 
+            [
+                "type A<'a>() = "
+                "   member val SettableProperty = 1 with get,set"
+                "   member val AnotherSettableProperty = 1 with get,set"
+                "   member val NonSettableProperty = 1"
+            ]
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A((**))"]) "A((**)" ["SettableProperty"; "AnotherSettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A(S = 1)"]) "A(S" ["SettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A(S = 1)"]) "A(S = 1" [] ["SettableProperty"; "NonSettableProperty"] // neg test
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A(S = 1,)"]) "A(S = 1," ["AnotherSettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["new A<_>((**))"]) "A<_>((**)" ["SettableProperty"; "AnotherSettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["new A<_>(S = 1)"]) "A<_>(S" ["SettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["new A<_>(S = 1)"]) "A<_>(S = 1" [] ["SettableProperty"; "NonSettableProperty"] // neg test
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["new A<_>(S = 1,)"]) "A<_>(S = 1," ["AnotherSettableProperty"] ["NonSettableProperty"] 
+
+        let typeDef3 = 
+            [
+                "module M ="
+                "   type A() = "
+                "       member val SettableProperty = 1 with get,set"
+                "       member val AnotherSettableProperty = 1 with get,set"
+                "       member val NonSettableProperty = 1"
+            ]
+        AssertCtrlSpaceCompleteContains (typeDef3 @ ["M.A((**))"]) "A((**)" ["SettableProperty"; "AnotherSettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef3 @ ["M.A(S = 1)"]) "A(S" ["SettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef3 @ ["M.A(S = 1)"]) "A(S = 1" [] ["NonSettableProperty"; "SettableProperty"] // neg test 
+        AssertCtrlSpaceCompleteContains (typeDef3 @ ["M.A(S = 1,)"]) "A(S = 1," ["AnotherSettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef3 @ ["new M.A((**))"]) "A((**)" ["SettableProperty"; "AnotherSettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef3 @ ["new M.A(S = 1)"]) "A(S" ["SettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef3 @ ["new M.A(S = 1)"]) "A(S = 1" [] ["NonSettableProperty"; "SettableProperty"] // neg test 
+        AssertCtrlSpaceCompleteContains (typeDef3 @ ["new M.A(S = 1,)"]) "A(S = 1," ["AnotherSettableProperty"] ["NonSettableProperty"] 
+
+        let typeDef4 = 
+            [
+                "module M ="
+                "   type A<'a, 'b>() = "
+                "       member val SettableProperty = 1 with get,set"
+                "       member val AnotherSettableProperty = 1 with get,set"
+                "       member val NonSettableProperty = 1"
+            ]
+        AssertCtrlSpaceCompleteContains (typeDef4 @ ["M.A((**))"]) "A((**)" ["SettableProperty"; "AnotherSettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef4 @ ["M.A(S = 1)"]) "A(S" ["SettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef4 @ ["M.A(S = 1)"]) "A(S = 1" [] ["SettableProperty"; "NonSettableProperty"] // neg test
+        AssertCtrlSpaceCompleteContains (typeDef4 @ ["M.A(S = 1,)"]) "A(S = 1," ["AnotherSettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef4 @ ["new M.A<_, _>((**))"]) "A<_, _>((**)" ["SettableProperty"; "AnotherSettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef4 @ ["new M.A<_, _>(S = 1)"]) "A<_, _>(S" ["SettableProperty"] ["NonSettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef4 @ ["new M.A<_, _>(S = 1)"]) "A<_, _>(S = 1" [] ["NonSettableProperty"; "SettableProperty"] 
+        AssertCtrlSpaceCompleteContains (typeDef4 @ ["new M.A<_, _>(S = 1,)"]) "A<_, _>(S = 1," ["AnotherSettableProperty"] ["NonSettableProperty"] 
+
+    []
+    []
+    member public this.``ObjectInitializer.CompletionForSettableExtensionProperties``() =
+        let typeDef = 
+            [
+                "type A() = member this.SetXYZ(v: int) = ()"
+                "module Ext = type A with member this.XYZ with set(v) = this.SetXYZ(v)"
+
+            ]
+
+        AssertCtrlSpaceCompleteContains (typeDef @ ["open Ext"; "A((**))"]) "A((**)" ["XYZ"] [] // positive
+        AssertCtrlSpaceCompleteContains (typeDef @ ["A((**))"]) "A((**)" [] ["XYZ"] // negative
+
+    []
+    []
+    member public this.``ObjectInitializer.CompletionForNamedParameters``() =
+        let typeDef1 = 
+            [
+                "type A = "
+                "   static member Run(xyz: int, zyx: string) = 1"
+            ]
+        AssertCtrlSpaceCompleteContains (typeDef1 @ ["A.Run()"]) ".Run(" ["xyz"; "zyx"] [] 
+        AssertCtrlSpaceCompleteContains (typeDef1 @ ["A.Run(x = 1)"]) ".Run(x" ["xyz"] [] 
+        AssertCtrlSpaceCompleteContains (typeDef1 @ ["A.Run(x = 1,)"]) ".Run(x = 1," ["xyz"; "zyx"] [] 
+
+        let typeDef2 = 
+            [
+                "type A = "
+                "   static member Run<'T>(xyz: 'T, zyx: string) = 1"
+            ]
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A.Run()"]) ".Run(" ["xyz"; "zyx"] [] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A.Run(x = 1)"]) ".Run(x" ["xyz"] [] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A.Run(x = 1,)"]) ".Run(x = 1," ["xyz"; "zyx"] [] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A.Run<_>()"]) ".Run<_>(" ["xyz"; "zyx"] [] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A.Run<_>(x = 1)"]) ".Run<_>(x" ["xyz"] [] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A.Run<_>(x = 1,)"]) ".Run<_>(x = 1," ["xyz"; "zyx"] [] 
+    
+    []
+    []
+    member public this.``ObjectInitializer.CompletionForSettablePropertiesInReturnValue``() =
+        let typeDef1 = 
+            [
+                "type A0() = member val Settable0 = 1 with get,set"
+                "type A() = "
+                "   member val Settable = 1 with get,set"
+                "   member val NonSettable = 1"
+                "   static member Run(): A0 =  Unchecked.defaultof<_>"
+                "   static member Run(a: string): A =  Unchecked.defaultof<_>"
+            ]
+        AssertCtrlSpaceCompleteContains (typeDef1 @ ["A.Run()"]) ".Run(" ["Settable"; "Settable0"] ["NonSettable"] 
+        AssertCtrlSpaceCompleteContains (typeDef1 @ ["A.Run(S = 1)"]) ".Run(S" ["Settable"; "Settable0"] ["NonSettable"] 
+        AssertCtrlSpaceCompleteContains (typeDef1 @ ["A.Run(S = 1,)"]) ".Run(S = 1," ["Settable"; "Settable0"] ["NonSettable"]  
+        AssertCtrlSpaceCompleteContains (typeDef1 @ ["A.Run(Settable = 1,)"]) ".Run(Settable = 1," ["Settable0"] ["NonSettable"]  
+
+        let typeDef2 = 
+            [
+                "type A0() = member val Settable0 = 1 with get,set"
+                "type A() = "
+                "   member val Settable = 1 with get,set"
+                "   member val NonSettable = 1"
+                "   static member Run<'T>(): A0 = Unchecked.defaultof<_>"
+                "   static member Run(a: int): A = Unchecked.defaultof<_>"
+            ]
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A.Run()"]) ".Run(" ["Settable"; "Settable0"] ["NonSettable"] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A.Run(S = 1)"]) ".Run(S" ["Settable"; "Settable0"] ["NonSettable"] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A.Run(S = 1,)"]) ".Run(S = 1," ["Settable"; "Settable0"] ["NonSettable"] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A.Run(Settable = 1,)"]) ".Run(Settable = 1," ["Settable0"] ["NonSettable"] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A.Run<_>()"]) ".Run<_>(" ["Settable"; "Settable0"] ["NonSettable"] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A.Run<_>(S = 1)"]) ".Run<_>(S" ["Settable"; "Settable0"] ["NonSettable"] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A.Run<_>(S = 1,)"]) ".Run<_>(S = 1," ["Settable"; "Settable0"] ["NonSettable"] 
+        AssertCtrlSpaceCompleteContains (typeDef2 @ ["A.Run<_>(Settable = 1,)"]) ".Run<_>(Settable = 1," ["Settable0"] ["NonSettable"] 
+
 
     []
     []
@@ -4559,10 +4701,8 @@ let x = query { for bbbb in abbbbc(*D0*) do
         // (ItemName, isUnique, isPrefix)
         // isUnique=true means it will be selected on ctrl-space invocation
         // isPrefix=true means it will be selected, instead of just outlined
-        AssertEqual(Some ("choose", false, true),  Match "c")
-        AssertEqual(Some ("collect", false, true), Match "co")
-        AssertEqual(Some ("concat", true, true),   Match "con")
-        AssertEqual(Some ("Cons", true, true),     Match "cons")
+        AssertEqual(Some ("empty", false, true),  Match "e")
+        AssertEqual(Some ("empty", true, true), Match "em")
       
     []
     member public this.``BestMatch.Bug5131``() = 
@@ -4628,7 +4768,7 @@ let x = query { for bbbb in abbbbc(*D0*) do
         Assert.IsTrue(completions.Length>0)
         this.CloseSolution(solution)
         let project,solution = OpenExistingProject(this.VS, dir, projName)
-        let file = List.nth (GetOpenFiles(project)) 0
+        let file = List.item 0 (GetOpenFiles(project))
         MoveCursorToEndOfMarker(file,"x.")
         let completions = time1 AutoCompleteAtCursor file "Time of first autocomplete."
         // printf "Completions=%A\n" completions
diff --git a/vsintegration/src/unittests/Tests.LanguageService.ErrorList.fs b/vsintegration/src/unittests/Tests.LanguageService.ErrorList.fs
index 48df42ff7f3..f079b969627 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.ErrorList.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.ErrorList.fs
@@ -273,7 +273,7 @@ let x =
         CheckErrorList content <|
             fun errors ->
                 Assert.AreEqual(1, List.length errors)
-                assertContains errors "A unique overload for method 'WriteLine' could not be determined based on type information prior to this program point. A type annotation may be needed. Candidates: System.Console.WriteLine(buffer: char []) : unit, System.Console.WriteLine(format: string, params arg: obj []) : unit, System.Console.WriteLine(value: obj) : unit, System.Console.WriteLine(value: string) : unit"
+                assertContains errors "A unique overload for method 'WriteLine' could not be determined based on type information prior to this program point. A type annotation may be needed. Candidates: System.Console.WriteLine(buffer: char []) : unit, System.Console.WriteLine(format: string, [] arg: obj []) : unit, System.Console.WriteLine(value: obj) : unit, System.Console.WriteLine(value: string) : unit"
 
     []
     member public this.``InvalidMethodOverload2``() = 
@@ -468,7 +468,7 @@ but here has type
         // dummy Type Provider exposes a parametric type (N1.T) that takes 2 static params (string * int) 
         // but here as you can see it's give (string)
         let fileContent = """type foo = N1.T< const "Hello World">"""
-        let expectedStr = "The static parameter 'ParamIgnored' of the provided type 'T' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. 'T'."
+        let expectedStr = "The static parameter 'ParamIgnored' of the provided type or method 'T' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. 'T'."
        
         this.VerifyErrorListContainedExpectedString(fileContent,expectedStr,
             addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
@@ -579,14 +579,6 @@ but here has type
         TakeCoffeeBreak(this.VS) // Wait for the background compiler to catch up.
         VerifyErrorListContainedExpectedStr("nonexistent",project)
 
-    []
-    member public this.``ErrorReporting.WrongPreprocessorIf``() =  
-        let fileContent = """
-            #light
-            #if !!!!COMPILED
-            #endif"""
-        this.VerifyErrorListContainedExpectedString(fileContent,"#if")
-
     []
     member public this.``BackgroundComplier``() = 
         this.VerifyErrorListCountAtOpenProject(
diff --git a/vsintegration/src/unittests/Tests.LanguageService.General.fs b/vsintegration/src/unittests/Tests.LanguageService.General.fs
index 7e26f534e90..bcb558cfc65 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.General.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.General.fs
@@ -65,7 +65,7 @@ type GeneralTests() =
 
     let publicTypesInAsm(asmfile : string) =
         printfn "Validating assembly '%s'" asmfile
-        let codeBase = (new Uri(Assembly.GetExecutingAssembly().CodeBase)).LocalPath |> Path.GetDirectoryName
+        let codeBase = (new Uri(Assembly.GetExecutingAssembly().EscapedCodeBase)).LocalPath |> Path.GetDirectoryName
         let asm = Assembly.LoadFrom(Path.Combine(codeBase, asmfile))
 
         // For public types that have ComVisible, validate that the constructor is internal
@@ -167,7 +167,7 @@ type GeneralTests() =
         let lsbase = publicTypesInAsm @"FSharp.LanguageService.Base.dll"
         Assert.AreEqual(0, lsbase)
         let psbase = publicTypesInAsm @"FSharp.ProjectSystem.Base.dll"
-        Assert.AreEqual(14, psbase)
+        Assert.AreEqual(17, psbase)
         let fsi = publicTypesInAsm @"FSharp.VS.FSI.dll"
         Assert.AreEqual(1, fsi)
 
@@ -175,7 +175,7 @@ type GeneralTests() =
     member public this.``PublicSurfaceArea.DotNetReflectionAndTypeProviders``() =
         let tp = publicTypesInAsm @"FSharp.Data.TypeProviders.dll"
         Assert.AreEqual(1, tp)  // the 'DataProviders' type that is decorated with [] must be public\
-        let curDir = (new Uri(Assembly.GetExecutingAssembly().CodeBase)).LocalPath |> Path.GetDirectoryName
+        let curDir = (new Uri(Assembly.GetExecutingAssembly().EscapedCodeBase)).LocalPath |> Path.GetDirectoryName
         let script = """
 open Microsoft.FSharp.Core.CompilerServices
 
diff --git a/vsintegration/src/unittests/Tests.LanguageService.ParameterInfo.fs b/vsintegration/src/unittests/Tests.LanguageService.ParameterInfo.fs
index 00c6173489b..10353c4cd10 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.ParameterInfo.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.ParameterInfo.fs
@@ -1604,12 +1604,16 @@ We really need to rewrite some code paths here to use the real parse tree rather
         | :? NoParamInfo -> ()
 
     []
-    member public this.``LocationOfParams.TypeProviders.BasicWithinExpr``() =        
-        this.TestParameterInfoLocationOfParams("""
-            let f() =
-                let r = id( ^N1.T^^< "fo$o"^, ParamIgnored=42 ^> )
-                r    """, 
-            additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+    member public this.``LocationOfParams.TypeProviders.BasicWithinExpr``() =
+        try
+            this.TestParameterInfoLocationOfParams("""
+                let f() =
+                    let r = id( ^N1.T^^< "fo$o"^, ParamIgnored=42 ^> )
+                    r    """, 
+                additionalReferenceAssemblies = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
+            failwith "unexpected param info for invalid use of constructorless type"
+        with
+        | :? NoParamInfo -> ()
 
     []
     member public this.``LocationOfParams.TypeProviders.BasicWithinExpr.DoesNotInterfereWithOuterFunction``() =        
@@ -1741,7 +1745,7 @@ We really need to rewrite some code paths here to use the real parse tree rather
                 )
             |> Seq.tryFind(fun (i, _) -> i = 2)
         match overloadWithTwoParamsOpt with
-        | Some(_, [_;(_name, display, _description)]) -> Assert.IsTrue(display.Contains("params args"))
+        | Some(_, [_;(_name, display, _description)]) -> Assert.IsTrue(display.Contains("[] args"))
         | x -> Assert.Fail(sprintf "Expected overload not found, current result %A" x)
 
     (* DotNet functions for multi-parameterinfo tests -------------------------------------------------- *)
diff --git a/vsintegration/src/unittests/Tests.LanguageService.QuickInfo.fs b/vsintegration/src/unittests/Tests.LanguageService.QuickInfo.fs
index d426ee49d7a..3285025ffe5 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.QuickInfo.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.QuickInfo.fs
@@ -204,6 +204,16 @@ type QuickInfoTests() =
             atStart = true,
             f = (fun ((text, _), _) -> printfn "actual %s" text; Assert.IsFalse(text.Contains "member Print1"))
             )
+
+    []
+    member public this.``QuickInfo.HideBaseClassMembersTP``() =
+        let fileContents = "type foo = HiddenMembersInBaseClass.HiddenBaseMembersTP(*Marker*)"
+        
+        this.AssertQuickInfoContainsAtStartOfMarker(
+            fileContents,
+            marker = "MembersTP(*Marker*)",
+            expected = "type HiddenBaseMembersTP =\n  inherit TPBaseTy\n  member ShowThisProp : unit",
+            addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])
     
     []
     member public this.``QuickInfo.OverriddenMethods``() =
@@ -466,7 +476,7 @@ type QuickInfoTests() =
         let fileContents = """ 
                                 let t = "a".Split('c')"""
 
-        this.AssertQuickInfoContainsAtEndOfMarker (fileContents, "Spl", "params separator")
+        this.AssertQuickInfoContainsAtEndOfMarker (fileContents, "Spl", "[] separator")
 
     []
     []
@@ -919,7 +929,7 @@ type QuickInfoTests() =
                 type A() =
                     static member Foo([] a : int[]) = ()
                 let r = A.Foo(42)""" ,
-            "type A","params a:"    )
+            "type A","[] a:"    )
 
     []
     member public this.``ParamsArrayArgument.OnMethod``() =        
@@ -928,7 +938,7 @@ type QuickInfoTests() =
                 type A() =
                     static member Foo([] a : int[]) = ()
                 let r = A.Foo(42)""" ,
-            "A.Foo","params a:"    )
+            "A.Foo","[] a:"    )
           
     []
     member public this.``Regression.AccessorMutator.Bug4903e``() =        
@@ -2585,7 +2595,7 @@ query."
                                 /// use Set as the type name of UoM
                                 type Set
 
-                                let v1 = [1.0 .. 2.0 .. 5.0] |> Seq.nth 1
+                                let v1 = [1.0 .. 2.0 .. 5.0] |> Seq.item 1
 
                                 (if v1 = 3.0 then 0 else 1) |> ignore
     
@@ -2856,7 +2866,7 @@ query."
     
                                 myString "myString"(*Marker8*)
                                 |> Seq.filter (fun c -> int c > 75)
-                                |> Seq.nth 0
+                                |> Seq.item 0
                                 |> (=) 'e'(*Marker6*)
                                 |> ignore"""
         this.VerifyQuickInfoDoesNotContainAnyAtStartOfMarker fileContent "(*Marker1*)" "BigInteger"
@@ -2942,7 +2952,7 @@ query."
                                Ex1(value(*Marker6*) = v) -> ()
 
                              //Static parameters of type providers
-                             let provType = N1.T
+                             type provType = N1.T
                              """
 
         this.AssertQuickInfoContainsAtStartOfMarker (fileContent, "(*Marker1*)", "x1 param!")
diff --git a/vsintegration/src/unittests/Tests.LanguageService.Script.fs b/vsintegration/src/unittests/Tests.LanguageService.Script.fs
index b019a44a9ec..ae7cdaaa73f 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.Script.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.Script.fs
@@ -567,11 +567,12 @@ type ScriptTests() as this =
 
     []
     []
-    // 'Microsoft.TeamFoundation.Diff' is located via AssemblyFoldersEx
+
+    // 'Microsoft.VisualStudio.QualityTools.Common.dll' is resolved via AssemblyFoldersEx over recent VS releases
     member public this.``Fsx.NoError.HashR.ResolveFromAssemblyFoldersEx``() =  
         let fileContent = """
             #light
-            #r "Microsoft.TeamFoundation.Diff"
+            #r "Microsoft.VisualStudio.QualityTools.Common.dll"
             """
         this.VerifyFSXNoErrorList(fileContent)
 
@@ -592,7 +593,81 @@ type ScriptTests() as this =
         let code = ["#light";"#r @\"" + fullyqualifiepathtoddll + "\""]
         let (project, _) = createSingleFileFsxFromLines code
         AssertNoErrorsOrWarnings(project)
- 
+
+    []
+    []
+    member public this.``Fsx.NoError.HashR.RelativePath1``() = 
+        use _guard = this.UsingNewVS()  
+        let solution = this.CreateSolution()
+        let project = CreateProject(solution,"testproject")    
+        let file1 = AddFileFromText(project,"lib.fs",
+                                    ["module Lib"
+                                     "let X = 42"
+                                     ])
+        
+        let bld = Build(project)
+
+        let script1Dir = Path.Combine(ProjectDirectory(project), "ccc")
+        let script1Path = Path.Combine(script1Dir, "Script1.fsx")
+        let script2Dir = Path.Combine(ProjectDirectory(project), "aaa\\bbb")
+        let script2Path = Path.Combine(script2Dir, "Script2.fsx")
+        
+        Directory.CreateDirectory(script1Dir) |> ignore
+        Directory.CreateDirectory(script2Dir) |> ignore
+        File.Move(bld.ExecutableOutput, Path.Combine(ProjectDirectory(project), "aaa\\lib.exe"))
+
+        let script1 = File.WriteAllLines(script1Path,
+                                      ["#load \"../aaa/bbb/Script2.fsx\""
+                                       "printfn \"%O\" Lib.X"
+                                       ])
+        let script2 = File.WriteAllLines(script2Path,
+                                      ["#r \"../lib.exe\""
+                                       ])
+                                       
+        let script1 = OpenFile(project, script1Path)   
+        TakeCoffeeBreak(this.VS)
+        
+        MoveCursorToEndOfMarker(script1,"#load")
+        let ans = GetSquiggleAtCursor(script1)
+        AssertNoSquiggle(ans)
+
+    []
+    []
+    member public this.``Fsx.NoError.HashR.RelativePath2``() = 
+        use _guard = this.UsingNewVS()  
+        let solution = this.CreateSolution()
+        let project = CreateProject(solution,"testproject")    
+        let file1 = AddFileFromText(project,"lib.fs",
+                                    ["module Lib"
+                                     "let X = 42"
+                                     ])
+        
+        let bld = Build(project)
+
+        let script1Dir = Path.Combine(ProjectDirectory(project), "ccc")
+        let script1Path = Path.Combine(script1Dir, "Script1.fsx")
+        let script2Dir = Path.Combine(ProjectDirectory(project), "aaa")
+        let script2Path = Path.Combine(script2Dir, "Script2.fsx")
+        
+        Directory.CreateDirectory(script1Dir) |> ignore
+        Directory.CreateDirectory(script2Dir) |> ignore
+        File.Move(bld.ExecutableOutput, Path.Combine(ProjectDirectory(project), "aaa\\lib.exe"))
+
+        let script1 = File.WriteAllLines(script1Path,
+                                      ["#load \"../aaa/Script2.fsx\""
+                                       "printfn \"%O\" Lib.X"
+                                       ])
+        let script2 = File.WriteAllLines(script2Path,
+                                      ["#r \"lib.exe\""
+                                       ])
+                                       
+        let script1 = OpenFile(project, script1Path)   
+        TakeCoffeeBreak(this.VS)
+        
+        MoveCursorToEndOfMarker(script1,"#load")
+        let ans = GetSquiggleAtCursor(script1)
+        AssertNoSquiggle(ans)
+
      /// FEATURE: #load in an .fsx file will include that file in the 'build' of the .fsx.
     []
     member public this.``Fsx.NoError.HashLoad.Simple``() =  
@@ -902,11 +977,11 @@ type ScriptTests() as this =
 
     []
     []
-    member public this.``Fsx.HashR_QuickInfo.ResolveFromAssemblyFoldersEx``() =  
-        let fileContent = """#r "Microsoft.TeamFoundation.Diff" """     // 'Microsoft.TeamFoundation.Diff' is located via AssemblyFoldersEx
-        let marker = "#r \"Microsoft.Tea"
-        this.AssertQuickInfoContainsAtEndOfMarkerInFsxFile fileContent marker "Found by AssemblyFoldersEx registry key"
-        this.AssertQuickInfoContainsAtEndOfMarkerInFsxFile fileContent marker "Microsoft.TeamFoundation.Diff"
+    member public this.``Fsx.HashR_QuickInfo.ResolveFromAssemblyFoldersEx``() = 
+        let fileContent = """#r "Microsoft.VisualStudio.QualityTools.Common.dll" """     // 'Microsoft.VisualStudio.QualityTools.Common.dll' is located via AssemblyFoldersEx
+        let marker = "#r \"Microsoft.Vis"
+        this.AssertQuickInfoContainsAtEndOfMarkerInFsxFile fileContent marker "Microsoft.VisualStudio.QualityTools.Common, Version="
+        this.AssertQuickInfoContainsAtEndOfMarkerInFsxFile fileContent marker "Microsoft.VisualStudio.QualityTools.Common.dll"
 
     []
     []
@@ -1297,31 +1372,24 @@ type ScriptTests() as this =
         use _guard = this.UsingNewVS()
         let solution = this.CreateSolution()
         let project = CreateProject(solution,"testproject")
-#if FX_ATLEAST_45
-        PlaceIntoProjectFileBeforeImport
-            (project, @"
-                
-                    
-                    
-                        True
-                    
-                    
-                        True
-                    
-                ")
+        let fsVersion =
+#if VS_VERSION_DEV12
+            "4.3.1.0"
 #else
+            "4.4.0.0"
+#endif
         PlaceIntoProjectFileBeforeImport
-            (project, @"
+            (project, sprintf @"
                 
                     
-                    
+                    
                         True
                     
-                    
+                    
                         True
                     
-                ")
-#endif
+                " fsVersion fsVersion)
+
         let fsx = AddFileFromTextEx(project,"Script.fsx","Script.fsx",BuildAction.Compile,
                                       ["let x = fsi.CommandLineArgs"])
         let build = time1 Build project "Time to build project" 
@@ -1561,16 +1629,30 @@ type ScriptTests() as this =
         let totalDisposalsMeth = providerCounters.GetMethod("GetTotalDisposals")
         Assert.IsNotNull(totalDisposalsMeth, "totalDisposalsMeth should not be null")
 
+        let providerCounters2 = providerAssembly.GetType("Microsoft.FSharp.TypeProvider.Emit.GlobalCountersForInvalidation")
+        Assert.IsNotNull(providerCounters2, "provider counters #2 module should not be null")
+        let totalInvaldiationHandlersAddedMeth = providerCounters2.GetMethod("GetInvalidationHandlersAdded")
+        Assert.IsNotNull(totalInvaldiationHandlersAddedMeth, "totalInvaldiationHandlersAddedMeth should not be null")
+        let totalInvaldiationHandlersRemovedMeth = providerCounters2.GetMethod("GetInvalidationHandlersRemoved")
+        Assert.IsNotNull(totalInvaldiationHandlersRemovedMeth, "totalInvaldiationHandlersRemovedMeth should not be null")
+
         let totalCreations() = totalCreationsMeth.Invoke(null, [| |]) :?> int
         let totalDisposals() = totalDisposalsMeth.Invoke(null, [| |]) :?> int
+        let totalInvaldiationHandlersAdded() = totalInvaldiationHandlersAddedMeth.Invoke(null, [| |]) :?> int
+        let totalInvaldiationHandlersRemoved() = totalInvaldiationHandlersRemovedMeth.Invoke(null, [| |]) :?> int
 
          
         let startCreations = totalCreations()
         let startDisposals = totalDisposals()
+        let startInvaldiationHandlersAdded = totalInvaldiationHandlersAdded()
+        let startInvaldiationHandlersRemoved =  totalInvaldiationHandlersRemoved()
         let countCreations() = totalCreations() - startCreations
         let countDisposals() = totalDisposals() - startDisposals
+        let countInvaldiationHandlersAdded() = totalInvaldiationHandlersAdded() - startInvaldiationHandlersAdded
+        let countInvaldiationHandlersRemoved() = totalInvaldiationHandlersRemoved() - startInvaldiationHandlersRemoved
 
         Assert.IsTrue(startCreations >= startDisposals, "Check0")
+        Assert.IsTrue(startInvaldiationHandlersAdded >= startInvaldiationHandlersRemoved, "Check0")
         for i in 1 .. 50 do 
             let solution = this.CreateSolution()
             let project = CreateProject(solution,"testproject" + string (i % 20))    
@@ -1599,15 +1681,18 @@ type ScriptTests() as this =
                 // there should be some roots to project builds still present
                 if i >= 3 then 
                     Assert.IsTrue(i >= countDisposals() + 3, "Check4a, i >= countDisposals() + 3, iteration " + string i + ", i = " + string i + ", countDisposals() = " + string (countDisposals()))
+                    printfn "Check4a2, i = %d, countInvaldiationHandlersRemoved() = %d" i (countInvaldiationHandlersRemoved())
 
             // If we forcefully clear out caches and force a collection, then we can say much stronger things...
             if clearing then 
                 ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients(this.VS)
                 Assert.IsTrue((i = countDisposals()), "Check4b, countCreations() = countDisposals(), iteration " + string i)
+                Assert.IsTrue(countInvaldiationHandlersAdded() - countInvaldiationHandlersRemoved() = 0, "Check4b2, all invlidation handlers removed, iteration " + string i)
         
         Assert.IsTrue(countCreations() = 50, "Check5, at end, countCreations() = 50")
         ClearLanguageServiceRootCachesAndCollectAndFinalizeAllTransients(this.VS)
-        Assert.IsTrue(countDisposals() = 50, "Check6b, at end, countDisposals() = 50 when clearing")
+        Assert.IsTrue(countDisposals() = 50, "Check6b, at end, countDisposals() = 50 after explicit clearing")
+        Assert.IsTrue(countInvaldiationHandlersAdded() - countInvaldiationHandlersRemoved() = 0, "Check6b2, at end, all invalidation handlers removed after explicit cleraring")
 
     []
     []
diff --git a/vsintegration/src/unittests/Tests.LanguageService.Squiggles.fs b/vsintegration/src/unittests/Tests.LanguageService.Squiggles.fs
index f2834837739..2c5db4199be 100644
--- a/vsintegration/src/unittests/Tests.LanguageService.Squiggles.fs
+++ b/vsintegration/src/unittests/Tests.LanguageService.Squiggles.fs
@@ -364,7 +364,7 @@ type X() =
             fileContents = "type foo = N1.T<",
             marker = "N1",
             expectedSquiggle= (Microsoft.VisualStudio.FSharp.LanguageService.Severity.Error,
-                              "The static parameter 'Param1' of the provided type 'T' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. 'T'."),
+                              "The static parameter 'Param1' of the provided type or method 'T' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. 'T'."),
             addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])      
 
     []
@@ -375,7 +375,7 @@ type X() =
             fileContents = "type foo = N1.T<\"foo\",",
             marker = "N1",
             expectedSquiggle= (Microsoft.VisualStudio.FSharp.LanguageService.Severity.Error,
-                              "The static parameter 'ParamIgnored' of the provided type 'T' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. 'T'."),
+                              "The static parameter 'ParamIgnored' of the provided type or method 'T' requires a value. Static parameters to type providers may be optionally specified using named arguments, e.g. 'T'."),
             addtlRefAssy = [System.IO.Path.Combine(System.Environment.CurrentDirectory,@"UnitTestsResources\MockTypeProviders\DummyProviderForLanguageServiceTesting.dll")])      
 
     []
@@ -854,17 +854,13 @@ type X() =
     member public this.``Squiggles.HashIfWithoutIdent``() =
         this.TestSquiggle true [ "#if"; "#endif" ] "if" "#if directive should be immediately followed by an identifier"
 
-    []
-    member public this.``Squiggles.HashIfWrongExpr``() =
-        this.TestSquiggle true [ "#if !IDENT"; "#endif" ] "if" "#if directive should be immediately followed by an identifier"
-
     []
     member public this.``Squiggles.HashIfWithMultilineComment``() =
         this.TestSquiggle true [ "#if IDENT (* aaa *)"; "#endif" ] "(* aaa" "Expected single line comment or end of line"
 
     []
     member public this.``Squiggles.HashIfWithUnexpected``() =
-        this.TestSquiggle true [ "#if IDENT whatever"; "#endif" ] "whatever" "Expected single line comment or end of line"
+        this.TestSquiggle true [ "#if IDENT whatever"; "#endif" ] "whatever" "Incomplete preprocessor expression"
 
      // FEATURE: Touching a depended-upon file will cause a intellisense to update in the currently edited file.
     []
diff --git a/vsintegration/src/unittests/Tests.ProjectSystem.MultiTargeting.fs b/vsintegration/src/unittests/Tests.ProjectSystem.MultiTargeting.fs
index f22e0c102aa..10ead201e2e 100644
--- a/vsintegration/src/unittests/Tests.ProjectSystem.MultiTargeting.fs
+++ b/vsintegration/src/unittests/Tests.ProjectSystem.MultiTargeting.fs
@@ -29,7 +29,7 @@ type MultiTargeting() =
     member private this.prepTest(projFile) =
         let dirName = Path.GetDirectoryName(projFile)
         let libDirName = Directory.CreateDirectory(Path.Combine(dirName, "lib")).FullName
-        let codeBase = (new Uri(Assembly.GetExecutingAssembly().CodeBase)).LocalPath |> Path.GetDirectoryName
+        let codeBase = (new Uri(Assembly.GetExecutingAssembly().EscapedCodeBase)).LocalPath |> Path.GetDirectoryName
         let refLibPath = Path.Combine(libDirName, "FSharp.Core.Unittests.dll")
         File.Copy(Path.Combine(codeBase, "FSharp.Core.Unittests.dll"), refLibPath)
         File.AppendAllText(projFile, TheTests.FsprojTextWithProjectReferencesAndOtherFlags([], [refLibPath], [], null, "", "v2.0"))
@@ -73,7 +73,7 @@ type MultiTargeting() =
             use project = TheTests.CreateProject(projFile, "true", ccn, sp)
             
             let validate (fn : System.Runtime.Versioning.FrameworkName) eR eS =
-                let (name, runtime, sku) = project.DetermineRuntimeAndSKU(fn.ToString())
+                let (runtime, sku) = project.DetermineRuntimeAndSKU(fn.ToString())
                 Assert.AreEqual(eR, runtime)
                 Assert.AreEqual(eS, sku)
             validate (new System.Runtime.Versioning.FrameworkName(".NETFramework", new System.Version(4, 0))) "v4.0" ".NETFramework,Version=v4.0"
@@ -154,7 +154,7 @@ type MultiTargeting() =
             let refLibPath = this.prepTest(projFile)
             use project = TheTests.CreateProject(projFile, "true", ccn, sp)
             let fn = new System.Runtime.Versioning.FrameworkName(".NETFramework", new System.Version(4, 0))
-            project.FixupAppConfigOnTargetFXChange(fn.ToString()) |> ignore
+            project.FixupAppConfigOnTargetFXChange(fn.ToString(), "4.3.0.0", false) |> ignore
             let appFile = Path.Combine((Path.GetDirectoryName projFile), "app.config")
             let appText = System.IO.File.ReadAllText(appFile)
             Assert.IsTrue(appText.Contains(""))
diff --git a/vsintegration/src/unittests/Tests.ProjectSystem.Project.fs b/vsintegration/src/unittests/Tests.ProjectSystem.Project.fs
index 0c202470525..9f35257c3c0 100644
--- a/vsintegration/src/unittests/Tests.ProjectSystem.Project.fs
+++ b/vsintegration/src/unittests/Tests.ProjectSystem.Project.fs
@@ -148,7 +148,7 @@ type Project() =
         let compileItems = [@"Folder\foo.fs"; @"bar.fs"; ]
         this.MakeProjectAndDoWithProjectFile(compileItems, [], "", (fun project fileName ->
             this.EnsureCausesNotification(project, fun() ->
-                let f = Internal.Utilities.FileSystem.Path.SafeGetFullPath(Path.Combine(project.ProjectFolder, @"..\qux.fs"))
+                let f = System.IO.Path.GetFullPath(Path.Combine(project.ProjectFolder, @"..\qux.fs"))
                 project.AddLinkedItem(project, [| f |], Array.create 1 (new VSADDRESULT())) |> ValidateOK
             )
             let expect = Tree("References", ANYTREE,
@@ -170,7 +170,7 @@ type Project() =
         this.MakeProjectAndDoWithProjectFile(compileItems, [], "", (fun project fileName ->
             let folder = TheTests.FindNodeWithCaption(project, "Folder")
             this.EnsureCausesNotification(project, fun() ->
-                let f = Internal.Utilities.FileSystem.Path.SafeGetFullPath(Path.Combine(project.ProjectFolder, @"..\qux.fs"))
+                let f = System.IO.Path.GetFullPath(Path.Combine(project.ProjectFolder, @"..\qux.fs"))
                 project.AddLinkedItem(folder, [| f |], Array.create 1 (new VSADDRESULT())) |> ValidateOK
             )
             let expect = Tree("References", ANYTREE,
@@ -193,7 +193,7 @@ type Project() =
             this.EnsureCausesNotification(project, fun() ->
                 // Note: this is not the same code path as the UI, but it is close
                 project.MoveNewlyAddedFileToBottomOfGroup (fun () ->
-                    let f = Internal.Utilities.FileSystem.Path.SafeGetFullPath(Path.Combine(project.ProjectFolder, @"..\qux.resx"))
+                    let f = System.IO.Path.GetFullPath(Path.Combine(project.ProjectFolder, @"..\qux.resx"))
                     project.AddLinkedItem(project, [| f |], Array.create 1 (new VSADDRESULT())) |> ValidateOK
                 )
             )
diff --git a/vsintegration/src/unittests/Tests.ProjectSystem.References.fs b/vsintegration/src/unittests/Tests.ProjectSystem.References.fs
index 412482649af..01c83a940d4 100644
--- a/vsintegration/src/unittests/Tests.ProjectSystem.References.fs
+++ b/vsintegration/src/unittests/Tests.ProjectSystem.References.fs
@@ -23,16 +23,20 @@ type References() =
     inherit TheTests()
 
     //TODO: look for a way to remove the helper functions
-    static let Net35RefAssemPathOnThisMachine() =
+    static let Net35RefAssemPath () =
         let key = @"SOFTWARE\Microsoft\.NETFramework\AssemblyFolders\Microsoft .NET Framework 3.5 Reference Assemblies"
         let hklm = Registry.LocalMachine
         let rkey = hklm.OpenSubKey(key)
-        rkey.GetValue("") :?> string
-    static let Net20AssemExPathOnThisMachine() =
+        let path = rkey.GetValue("") :?> string
+        if String.IsNullOrEmpty(path) then None
+        else Some(path)
+    static let Net20AssemExPath () =
         let key = @"SOFTWARE\Microsoft\.NETFramework\v2.0.50727\AssemblyFoldersEx\Public Assemblies (Common Files)"
         let hklm = Registry.LocalMachine
         let rkey = hklm.OpenSubKey(key)
-        rkey.GetValue("") :?> string
+        let path = rkey.GetValue("") :?> string
+        if String.IsNullOrEmpty(path) then None
+        else Some(path)
 
     /////////////////////////////////
     // project helpers
@@ -173,20 +177,23 @@ type References() =
 
     []
     member public this.``ReferenceResolution.Bug4423.LoadedFsProj.WorksWithFilenames``() =
-        let edte = Path.Combine(Net20AssemExPathOnThisMachine(), "EnvDTE80.dll")
-        let ssmw = Path.Combine(Net35RefAssemPathOnThisMachine(), "System.ServiceModel.Web.dll")
-        this.MakeProjectAndDo(["doesNotMatter.fs"], [edte; ssmw], "", "v3.5", (fun project ->
-            let expectedRefInfo = [ edte, true 
-                                    ssmw, true ]
-            let refContainer = GetReferenceContainerNode(project)
-            let actualRefInfo = [
-                let r = ref(refContainer.FirstChild :?> ReferenceNode)
-                while !r <> null do
-                    yield ((!r).Caption, ((!r).CanShowDefaultIcon()))
-                    r := (!r).NextSibling :?> ReferenceNode
-                ]
-            AssertEqual expectedRefInfo actualRefInfo
-            ))
+        match (Net20AssemExPath(), Net35RefAssemPath()) with
+        | Some(net20), Some(net35) ->
+          let edte = Path.Combine(net20, "EnvDTE80.dll")
+          let ssmw = Path.Combine(net35, "System.ServiceModel.Web.dll")
+          this.MakeProjectAndDo(["doesNotMatter.fs"], [edte; ssmw], "", "v3.5", (fun project ->
+              let expectedRefInfo = [ edte, true 
+                                      ssmw, true ]
+              let refContainer = GetReferenceContainerNode(project)
+              let actualRefInfo = [
+                  let r = ref(refContainer.FirstChild :?> ReferenceNode)
+                  while !r <> null do
+                      yield ((!r).Caption, ((!r).CanShowDefaultIcon()))
+                      r := (!r).NextSibling :?> ReferenceNode
+                  ]
+              AssertEqual expectedRefInfo actualRefInfo
+              ))
+        |_ -> ()
 
     []
     member public this.``ReferenceResolution.Bug4423.LoadedFsProj.WeirdCases``() =
@@ -226,65 +233,79 @@ type References() =
 
     []
     member public this.``ReferenceResolution.Bug4423.FxAssembly.NetTab.AddDuplicate1``() =
-        try
-            this.ReferenceResolutionHelper(AddReferenceDialogTab.DotNetTab, 
-                                           Path.Combine(Net35RefAssemPathOnThisMachine(), "System.ServiceModel.Web.dll"), 
-                                           @"whatever, expectation does not matter, will throw before then",
-                                           "v3.5",
-                                           ["System.ServiceModel.Web"])  // assembly name
-            Assert.Fail("adding a duplicate reference should have failed")
-        with e ->                                           
-            TheTests.HelpfulAssertMatches ' ' "A reference to '.*' \\(with assembly name '.*'\\) could not be added. A reference to the component '.*' with the same assembly name already exists in the project." e.Message
-
+        match Net35RefAssemPath() with
+        | Some(net35) ->
+            try
+                this.ReferenceResolutionHelper(AddReferenceDialogTab.DotNetTab, 
+                                               Path.Combine(net35, "System.ServiceModel.Web.dll"), 
+                                               @"whatever, expectation does not matter, will throw before then",
+                                               "v3.5",
+                                               ["System.ServiceModel.Web"])  // assembly name
+                Assert.Fail("adding a duplicate reference should have failed")
+            with e ->                                           
+                TheTests.HelpfulAssertMatches ' ' "A reference to '.*' \\(with assembly name '.*'\\) could not be added. A reference to the component '.*' with the same assembly name already exists in the project." e.Message
+        | _ -> ()
 
     // see 5491 []
     member public this.``ReferenceResolution.Bug4423.FxAssembly.NetTab.AddDuplicate2``() =
-        try
-            this.ReferenceResolutionHelper(AddReferenceDialogTab.DotNetTab, 
-                                           Path.Combine(Net35RefAssemPathOnThisMachine(), "System.ServiceModel.Web.dll"), 
-                                           @"whatever, expectation does not matter, will throw before then",
-                                           "v3.5",
-                                           ["System.ServiceModel.Web.dll"]) // filename
-            Assert.Fail("adding a duplicate reference should have failed")
-        with e ->                                           
-            TheTests.HelpfulAssertMatches ' ' "A reference to '.*' could not be added. A reference to the component '.*' already exists in the project." e.Message
+        match Net35RefAssemPath() with
+        | Some(net35) ->
+            try
+                this.ReferenceResolutionHelper(AddReferenceDialogTab.DotNetTab, 
+                                               Path.Combine(net35, "System.ServiceModel.Web.dll"), 
+                                               @"whatever, expectation does not matter, will throw before then",
+                                               "v3.5",
+                                               ["System.ServiceModel.Web.dll"]) // filename
+                Assert.Fail("adding a duplicate reference should have failed")
+            with e ->                                           
+                TheTests.HelpfulAssertMatches ' ' "A reference to '.*' could not be added. A reference to the component '.*' already exists in the project." e.Message
+        | _ -> ()
 
     []
     member public this.``ReferenceResolution.Bug4423.FxAssembly.NetTab``() =
-        this.ReferenceResolutionHelper(AddReferenceDialogTab.DotNetTab, 
-                                       Path.Combine(Net35RefAssemPathOnThisMachine(), "System.ServiceModel.Web.dll"), 
-                                       // TODO the intent here is to match whatever C# does; below is a snapshot from July 7, 2009
-                                       @"")
+        match Net35RefAssemPath() with
+        | Some(net35) ->
+            this.ReferenceResolutionHelper(AddReferenceDialogTab.DotNetTab, 
+                                           Path.Combine(net35, "System.ServiceModel.Web.dll"), 
+                                           // TODO the intent here is to match whatever C# does; below is a snapshot from July 7, 2009
+                                           @"")
+        | _ -> ()
 
     []
     member public this.``ReferenceResolution.Bug4423.FxAssembly.BrowseTab.SameVersion``() =
-        let sysCoreRefAssemPath = Path.Combine(Net35RefAssemPathOnThisMachine(), "System.ServiceModel.Web.dll")
-        let dirName = Path.GetTempPath()
-        let copy = Path.Combine(dirName, "System.ServiceModel.Web.dll")
-        try
-            File.Copy(sysCoreRefAssemPath, copy, true)
-            this.ReferenceResolutionHelper(AddReferenceDialogTab.BrowseTab, 
-                                           copy,
-                                           // TODO the intent here is to match whatever C# does; below is a snapshot from July 7, 2009
-                                           @"")
-        finally
-            File.Delete(copy)
+        match Net35RefAssemPath() with
+        | Some(net35) ->
+            let sysCoreRefAssemPath = Path.Combine(net35, "System.ServiceModel.Web.dll")
+            let dirName = Path.GetTempPath()
+            let copy = Path.Combine(dirName, "System.ServiceModel.Web.dll")
+            try
+                File.Copy(sysCoreRefAssemPath, copy, true)
+                this.ReferenceResolutionHelper(AddReferenceDialogTab.BrowseTab, 
+                                               copy,
+                                               // TODO the intent here is to match whatever C# does; below is a snapshot from July 7, 2009
+                                               @"")
+            finally
+                File.Delete(copy)
+        | _ -> ()
 
     []
     member public this.``ReferenceResolution.Bug4423.FxAssembly.BrowseTab.DifferentVersion``() =
-        let sysCoreRefAssemPath = Path.Combine(Net35RefAssemPathOnThisMachine(), "System.ServiceModel.Web.dll")
-        let dirName = Path.GetTempPath()
-        let copy = Path.Combine(dirName, "System.ServiceModel.Web.dll")
-        try
-            File.Copy(sysCoreRefAssemPath, copy, true)
-            this.ReferenceResolutionHelper(AddReferenceDialogTab.BrowseTab, 
-                                           copy,
-                                           // TODO the intent here is to match whatever C# does; below is a snapshot from July 7, 2009
-                                           @"",
-                                           "v4.0",  // TargetFramework is 4.0, but browsing to 3.5 reference assembly
-                                           [])
-        finally
-            File.Delete(copy)
+        match Net35RefAssemPath() with
+        | Some(net35) ->
+            let sysCoreRefAssemPath = Path.Combine(net35, "System.ServiceModel.Web.dll")
+            let dirName = Path.GetTempPath()
+            let copy = Path.Combine(dirName, "System.ServiceModel.Web.dll")
+            try
+                File.Copy(sysCoreRefAssemPath, copy, true)
+                this.ReferenceResolutionHelper(AddReferenceDialogTab.BrowseTab, 
+                                               copy,
+                                               // TODO the intent here is to match whatever C# does; below is a snapshot from July 7, 2009
+                                               @"",
+                                               "v4.0",  // TargetFramework is 4.0, but browsing to 3.5 reference assembly
+                                               [])
+            finally
+                File.Delete(copy)
+        | _ -> ()
     
     []
     member public this.``ReferenceResolution.NonFxAssembly.SeveralCandidates``() =
@@ -328,107 +349,115 @@ type References() =
         
     []
     member public this.``ReferenceResolution.Bug4423.NonFxAssembly.NetTab``() =
-        this.ReferenceResolutionHelper(AddReferenceDialogTab.DotNetTab, 
-                                       Path.Combine(Net20AssemExPathOnThisMachine(), "EnvDTE80.dll"),
-                               (* TODO, no NoPIA support yet, so *)
-                                       @"")
-                               (* instead of below
-                                       // TODO the intent here is to match whatever C# does; below is a snapshot from July 7, 2009
-                                       @""
-                                     + @"\s*True"
-                                     + @"\s*")
-                               *)
+        match Net20AssemExPath() with
+        | Some(net20) ->
+          this.ReferenceResolutionHelper(AddReferenceDialogTab.DotNetTab, Path.Combine(net20, "EnvDTE80.dll"),
+                                 (* TODO, no NoPIA support yet, so *)
+                                         @"")
+                                 (* instead of below
+                                         // TODO the intent here is to match whatever C# does; below is a snapshot from July 7, 2009
+                                         @""
+                                       + @"\s*True"
+                                       + @"\s*")
+                                 *)
+        | _ -> ()
 
     []
     member public this.``ReferenceResolution.Bug4423.NonFxAssembly.BrowseTab.SameVersion``() =
-        let envDte80RefAssemPath = Path.Combine(Net20AssemExPathOnThisMachine(), "EnvDTE80.dll")
-        let dirName = Path.GetTempPath()
-        let copy = Path.Combine(dirName, "EnvDTE80.dll")
-        try
-            File.Copy(envDte80RefAssemPath, copy, true)
-            this.ReferenceResolutionHelper(AddReferenceDialogTab.BrowseTab, 
-                                           copy,
-                                   (*
-                                   For other cases, we mimic C#, but C# has a bug in this case.  Correct result is
-                                   *)
-                                           @""
-                                         // TODO no NoPIA support yet: + @"\s*True"
-                                         + @"\s*\.\.\\EnvDTE80.dll"
-                                         + @"\s*")
-                                   (* whereas C# has this: 
-                                           // TODO the intent here is to match whatever C# does; below is a snapshot from July 7, 2009
-                                           @""
-                                         + @"\s*False"
-                                         + @"\s*True"
-                                         + (sprintf @"\s*%s" (Regex.Escape copy))
-                                         + @"\s*")
-                                   *)
-        finally
-            File.Delete(copy)
+        match Net20AssemExPath() with
+        | Some(net20) ->
+          let envDte80RefAssemPath = Path.Combine(net20, "EnvDTE80.dll")
+          let dirName = Path.GetTempPath()
+          let copy = Path.Combine(dirName, "EnvDTE80.dll")
+          try
+              File.Copy(envDte80RefAssemPath, copy, true)
+              this.ReferenceResolutionHelper(AddReferenceDialogTab.BrowseTab, 
+                                             copy,
+                                     (*
+                                     For other cases, we mimic C#, but C# has a bug in this case.  Correct result is
+                                     *)
+                                             @""
+                                           // TODO no NoPIA support yet: + @"\s*True"
+                                           + @"\s*\.\.\\EnvDTE80.dll"
+                                           + @"\s*")
+                                     (* whereas C# has this: 
+                                             // TODO the intent here is to match whatever C# does; below is a snapshot from July 7, 2009
+                                             @""
+                                           + @"\s*False"
+                                           + @"\s*True"
+                                           + (sprintf @"\s*%s" (Regex.Escape copy))
+                                           + @"\s*")
+                                     *)
+          finally
+              File.Delete(copy)
+        | _ -> ()
 
     []
     member public this.``ReferenceResolution.Bug650591.AutomationReference.Add.FullPath``() = 
-        let invoker = 
-            {
-                new Microsoft.Internal.VisualStudio.Shell.Interop.IVsInvokerPrivate with
-                    member this.Invoke(invokable) = invokable.Invoke()
-            }
-        let log = 
-            {
-                new Microsoft.VisualStudio.Shell.Interop.IVsActivityLog with
-                    member this.LogEntry(_, _, _) = VSConstants.S_OK
-                    member this.LogEntryGuid(_, _, _, _) = VSConstants.S_OK
-                    member this.LogEntryGuidHr(_, _, _, _, _) = VSConstants.S_OK
-                    member this.LogEntryGuidHrPath(_, _, _, _, _, _) = VSConstants.S_OK
-                    member this.LogEntryGuidPath(_, _, _, _, _) = VSConstants.S_OK
-                    member this.LogEntryHr(_, _, _, _) = VSConstants.S_OK
-                    member this.LogEntryHrPath(_, _, _, _, _) = VSConstants.S_OK
-                    member this.LogEntryPath(_, _, _, _) = VSConstants.S_OK
-            }
-        let mocks = 
-            [
-                typeof.GUID, box invoker
-                typeof.GUID, box log
-            ] |> dict
-        let mockProvider = 
-            {
-                new Microsoft.VisualStudio.OLE.Interop.IServiceProvider with
-                    member this.QueryService(guidService, riid, punk) =
-                        match mocks.TryGetValue guidService with
-                        | true, v -> 
-                            punk <- System.Runtime.InteropServices.Marshal.GetIUnknownForObject(v)
-                            VSConstants.S_OK
-                        | _ ->
-                            punk <- IntPtr.Zero
-                            VSConstants.E_NOINTERFACE
-            }
-
-        let _ = Microsoft.VisualStudio.Shell.ServiceProvider.CreateFromSetSite(mockProvider)
-        let envDte80RefAssemPath = Path.Combine(Net20AssemExPathOnThisMachine(), "EnvDTE80.dll")
-        let dirName = Path.GetTempPath()
-        let copy = Path.Combine(dirName, "EnvDTE80.dll")
-        try
-            File.Copy(envDte80RefAssemPath, copy, true)
-            this.MakeProjectAndDo
-                (
-                    ["DoesNotMatter.fs"], 
-                    [], 
-                    "",
-                    fun proj -> 
-                        let refContainer = GetReferenceContainerNode(proj)
-                        let automationRefs = refContainer.Object :?> Automation.OAReferences
-                        automationRefs.Add(copy) |> ignore
-                        SaveProject(proj)
-                        let fsprojFileText = File.ReadAllText(proj.FileName)
-                        printfn "%s" fsprojFileText
-                        let expectedFsProj = 
-                            @""
-                            + @"\s*\.\.\\EnvDTE80.dll"
-                            + @"\s*"
-                        TheTests.HelpfulAssertMatches '<' expectedFsProj fsprojFileText
-                )
-        finally
-            File.Delete(copy)
+        match Net20AssemExPath() with
+        | Some(net20) ->
+          let invoker = 
+              {
+                  new Microsoft.Internal.VisualStudio.Shell.Interop.IVsInvokerPrivate with
+                      member this.Invoke(invokable) = invokable.Invoke()
+              }
+          let log = 
+              {
+                  new Microsoft.VisualStudio.Shell.Interop.IVsActivityLog with
+                      member this.LogEntry(_, _, _) = VSConstants.S_OK
+                      member this.LogEntryGuid(_, _, _, _) = VSConstants.S_OK
+                      member this.LogEntryGuidHr(_, _, _, _, _) = VSConstants.S_OK
+                      member this.LogEntryGuidHrPath(_, _, _, _, _, _) = VSConstants.S_OK
+                      member this.LogEntryGuidPath(_, _, _, _, _) = VSConstants.S_OK
+                      member this.LogEntryHr(_, _, _, _) = VSConstants.S_OK
+                      member this.LogEntryHrPath(_, _, _, _, _) = VSConstants.S_OK
+                      member this.LogEntryPath(_, _, _, _) = VSConstants.S_OK
+              }
+          let mocks = 
+              [
+                  typeof.GUID, box invoker
+                  typeof.GUID, box log
+              ] |> dict
+          let mockProvider = 
+              {
+                  new Microsoft.VisualStudio.OLE.Interop.IServiceProvider with
+                      member this.QueryService(guidService, riid, punk) =
+                          match mocks.TryGetValue guidService with
+                          | true, v -> 
+                              punk <- System.Runtime.InteropServices.Marshal.GetIUnknownForObject(v)
+                              VSConstants.S_OK
+                          | _ ->
+                              punk <- IntPtr.Zero
+                              VSConstants.E_NOINTERFACE
+              }
+  
+          let _ = Microsoft.VisualStudio.Shell.ServiceProvider.CreateFromSetSite(mockProvider)
+          let envDte80RefAssemPath = Path.Combine(net20, "EnvDTE80.dll")
+          let dirName = Path.GetTempPath()
+          let copy = Path.Combine(dirName, "EnvDTE80.dll")
+          try
+              File.Copy(envDte80RefAssemPath, copy, true)
+              this.MakeProjectAndDo
+                  (
+                      ["DoesNotMatter.fs"], 
+                      [], 
+                      "",
+                      fun proj -> 
+                          let refContainer = GetReferenceContainerNode(proj)
+                          let automationRefs = refContainer.Object :?> Automation.OAReferences
+                          automationRefs.Add(copy) |> ignore
+                          SaveProject(proj)
+                          let fsprojFileText = File.ReadAllText(proj.FileName)
+                          printfn "%s" fsprojFileText
+                          let expectedFsProj = 
+                              @""
+                              + @"\s*\.\.\\EnvDTE80.dll"
+                              + @"\s*"
+                          TheTests.HelpfulAssertMatches '<' expectedFsProj fsprojFileText
+                  )
+          finally
+              File.Delete(copy)
+        | _ -> ()
 
     /// Create a dummy project named 'Test', build it, and then call k with the full path to the resulting exe
     member public this.CreateDummyTestProjectBuildItAndDo(k : string -> unit) =
@@ -450,7 +479,7 @@ type References() =
             let expectedFsprojRegex = @""
                                          + @"\s*Test.exe"  // in this directory
                                          + @"\s*"
-            this.MakeProjectAndDo(["bar.fs"], [], "", null, (fun project ->
+            this.MakeProjectAndDo(["bar.fs"], [], "", "v4.5", (fun project ->
                 let exeCopy = Path.Combine(project.ProjectFolder, "Test.exe")
                 File.Copy(exe, exeCopy, true)                
                 Assert.IsTrue(File.Exists exeCopy, "failed to build exe")
@@ -487,7 +516,7 @@ type References() =
             let expectedFsprojRegex = @""
                                          + @"\s*\.\.\\.*?"  // the point is, some path start with "..\", since both projects are rooted somewhere in the temp directory (where unit tests create them)
                                          + @"\s*"
-            this.MakeProjectAndDo(["bar.fs"], [], "", null, (fun project ->
+            this.MakeProjectAndDo(["bar.fs"], [], "", "v4.5", (fun project ->
                 let selectorData = new VSCOMPONENTSELECTORDATA(``type`` = VSCOMPONENTTYPE.VSCOMPONENTTYPE_File, bstrFile = exe)
                 let refContainer = GetReferenceContainerNode(project)
                 refContainer.AddReferenceFromSelectorData(selectorData) |> Assert.IsNotNull
@@ -530,7 +559,7 @@ type References() =
         DoWithTempFile "Test.fsproj"(fun projFile ->
             let dirName = Path.GetDirectoryName(projFile)
             let libDirName = Directory.CreateDirectory(Path.Combine(dirName, "lib")).FullName
-            let codeBase = (new Uri(Assembly.GetExecutingAssembly().CodeBase)).LocalPath |> Path.GetDirectoryName
+            let codeBase = (new Uri(Assembly.GetExecutingAssembly().EscapedCodeBase)).LocalPath |> Path.GetDirectoryName
             let refLibPath = Path.Combine(libDirName, "nunit.core.dll")
             File.Copy(Path.Combine(codeBase, "nunit.core.dll"), refLibPath)
             File.AppendAllText(projFile, TheTests.SimpleFsprojText([], [refLibPath], ""))
@@ -545,7 +574,7 @@ type References() =
                 let l = new List()
                 project.FindNodesOfType(l)
                 l.[0]
-            let mscorlibPath = (new Uri("".GetType().Assembly.CodeBase)).LocalPath
+            let mscorlibPath = (new Uri("".GetType().Assembly.EscapedCodeBase)).LocalPath
             let selectorData = new VSCOMPONENTSELECTORDATA(``type`` = VSCOMPONENTTYPE.VSCOMPONENTTYPE_ComPlus, bstrFile = mscorlibPath)
             refContainer.AddReferenceFromSelectorData(selectorData) |> Assert.IsNotNull
             let l = new List()
diff --git a/vsintegration/src/unittests/Tests.ProjectSystem.UpToDate.fs b/vsintegration/src/unittests/Tests.ProjectSystem.UpToDate.fs
index 032dc6b3282..72fa6922f1c 100644
--- a/vsintegration/src/unittests/Tests.ProjectSystem.UpToDate.fs
+++ b/vsintegration/src/unittests/Tests.ProjectSystem.UpToDate.fs
@@ -327,6 +327,58 @@ type UpToDate() =
             Assert.IsFalse(config.IsFastUpToDateCheckEnabled())
             ))
 
+    []
+    member public this.UTDOptionsFlags () =
+        this.MakeProjectAndDo(["file1.fs"], [], "", (fun project ->
+            let configNameDebugx86 = ConfigCanonicalName("Debug", "x86")
+            let debugConfigx86 = project.ConfigProvider.GetProjectConfiguration(configNameDebugx86)            
+            let buildableConfig = 
+                match debugConfigx86.get_BuildableProjectCfg() with
+                | 0, bc -> bc
+                | _ -> failwith "get_BuildableProjectCfg failed"
+
+            let testFlag flag expected =            
+                let supported = Array.zeroCreate 1
+                let ready = Array.zeroCreate 1
+                buildableConfig.QueryStartUpToDateCheck(flag, supported, ready) |> ignore
+                Assert.IsTrue(supported.[0] = expected)
+                Assert.IsTrue(ready.[0] = expected)
+
+            [ VSConstants.VSUTDCF_DTEEONLY, 1
+              VSConstants.VSUTDCF_PACKAGE, 0
+              VSConstants.VSUTDCF_PRIVATE, 1
+              VSConstants.VSUTDCF_REBUILD, 1 ]
+            |> List.iter (fun (flag, expected) -> testFlag flag expected)
+          ))
+
+    []
+    member public this.UTDOptionsFlagsUTDDisabled () =
+        this.MakeProjectAndDo(["file1.fs"], [],  @"
+                
+                    true
+                
+            ", (fun project ->
+            let configNameDebugx86 = ConfigCanonicalName("Debug", "x86")
+            let debugConfigx86 = project.ConfigProvider.GetProjectConfiguration(configNameDebugx86)            
+            let buildableConfig = 
+                match debugConfigx86.get_BuildableProjectCfg() with
+                | 0, bc -> bc
+                | _ -> failwith "get_BuildableProjectCfg failed"
+
+            let testFlag flag expected =            
+                let supported = Array.zeroCreate 1
+                let ready = Array.zeroCreate 1
+                buildableConfig.QueryStartUpToDateCheck(flag, supported, ready) |> ignore
+                Assert.AreEqual(supported.[0], expected)
+                Assert.AreEqual(ready.[0], expected)
+
+            [ VSConstants.VSUTDCF_DTEEONLY, 1
+              VSConstants.VSUTDCF_PACKAGE, 0
+              VSConstants.VSUTDCF_PRIVATE, 0
+              VSConstants.VSUTDCF_REBUILD, 0 ]
+            |> List.iter (fun (flag, expected) -> testFlag flag expected)
+          ))
+
 []
 type ``UpToDate PreserveNewest`` () = 
 
@@ -367,7 +419,7 @@ type ``UpToDate PreserveNewest`` () =
 
         let ``a newer version of output file is ok`` =
             let u, logs = test ("before.doc", Some before) ("after.doc", Some now)
-            Assert.True(u)
+            Assert.IsTrue(u)
             logs |> AssertEqual []
 
         let ``stale output file -> not up-to-date and log`` =
diff --git a/vsintegration/src/unittests/Tests.Watson.fs b/vsintegration/src/unittests/Tests.Watson.fs
index 3f202302915..0f2775ecdf1 100644
--- a/vsintegration/src/unittests/Tests.Watson.fs
+++ b/vsintegration/src/unittests/Tests.Watson.fs
@@ -27,7 +27,7 @@ type Check =
         try 
             try
 #if DEBUG
-                Microsoft.FSharp.Compiler.Build.FullCompiler.showAssertForUnexpectedException := false
+                Microsoft.FSharp.Compiler.CompileOps.FullCompiler.showAssertForUnexpectedException := false
 #endif
                 if (File.Exists("watson-test.fs")) then
                     File.Delete("watson-test.fs")
@@ -37,13 +37,13 @@ type Check =
             with 
             | :? 'TException as e -> 
                 let msg = e.ToString();
-                if msg.Contains("ReportTime") || msg.Contains("TypecheckOneInput") then ()
+                if msg.Contains("ReportTime") || msg.Contains("TypeCheckOneInput") then ()
                 else
                     printfn "%s" msg
                     Assert.Fail("The correct callstack was not reported to watson.")
         finally               
 #if DEBUG
-            Microsoft.FSharp.Compiler.Build.FullCompiler.showAssertForUnexpectedException := true
+            Microsoft.FSharp.Compiler.CompileOps.FullCompiler.showAssertForUnexpectedException := true 
 #endif
         File.Delete("watson-test.fs")
 
diff --git a/vsintegration/src/unittests/Unittests.dll.config b/vsintegration/src/unittests/Unittests.dll.config
index c27b1df90ff..67a0d2d2c1b 100644
--- a/vsintegration/src/unittests/Unittests.dll.config
+++ b/vsintegration/src/unittests/Unittests.dll.config
@@ -5,12 +5,6 @@
         
     
     
-        
-            
-                
-                
-            
-        
         
           
             
@@ -25,12 +19,16 @@
                 
             
             
-                
-                            
+                
+                
+            
+            
+                
+                
             
             
               
-              
+              
             
         
     
diff --git a/vsintegration/src/unittests/Unittests.fsproj b/vsintegration/src/unittests/Unittests.fsproj
index d3c348eb351..e11d850b810 100644
--- a/vsintegration/src/unittests/Unittests.fsproj
+++ b/vsintegration/src/unittests/Unittests.fsproj
@@ -1,16 +1,14 @@
 
 
-
+
   
     ..\..\..\src
-    Microsoft.VisualStudio.Shell.12.0
     FSharp
     true
   
   
   
     Debug
-    x86
     2.0
     {EE85AAB7-CDA0-4C4E-BDA0-A64DDDD13E3F}
     Library
@@ -18,6 +16,7 @@
     Unittests.fsi
     LIBRARY
     58;75
+    x86
   
   
     
@@ -81,23 +80,16 @@
     
     
     
-    
-      true
-    
-    
-      true
-    
-    
-      true
-    
-    
-    
+    
+    
+    
+    
     
     
     
     
     
-    
+    
     
     
     
@@ -107,7 +99,7 @@
     
     
     
-    
+    
     
     
     
@@ -123,6 +115,7 @@
     
       {ffde9e47-9675-4498-b540-69b2583dd600}
       Fsc
+      True
     
     
       {DED3BBD7-53F4-428A-8C9F-27968E768605}
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Editor/FSharp.Editor.fsproj b/vsintegration/src/vs/FsPkgs/FSharp.Editor/FSharp.Editor.fsproj
index 0318f49b3ee..ffa38583711 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Editor/FSharp.Editor.fsproj
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Editor/FSharp.Editor.fsproj
@@ -1,10 +1,8 @@
 
 
-
+
   
     ..\..\..\..\..\src
-    Microsoft.VisualStudio.Shell.12.0
-    Microsoft.VisualStudio.Package.LanguageService.12.0
     FSharp
     true
   
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Editor/extension.vsixmanifest b/vsintegration/src/vs/FsPkgs/FSharp.Editor/extension.vsixmanifest
index fa911cede9f..19668d52ab2 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Editor/extension.vsixmanifest
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Editor/extension.vsixmanifest
@@ -4,11 +4,11 @@
   
     Microsoft Visual FSharp Editor Extensions
     Microsoft Corporation
-    12.0
+    14.0
     Microsoft Visual FSharp Editor Extensions
     1033
     
-      
+      
         Pro
         VWDExpress
         WDExpress
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/CodeWindowManager.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/CodeWindowManager.cs
index b14a4b2125d..133efea4066 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/CodeWindowManager.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/CodeWindowManager.cs
@@ -14,7 +14,6 @@
 using Microsoft.VisualStudio.FSharp.LanguageService.Resources;
 
 namespace Microsoft.VisualStudio.FSharp.LanguageService {
-    /// 
     /// 
     /// CodeWindowManager provides a default implementation of the VSIP interface IVsCodeWindowManager
     /// and manages the LanguageService, Source, ViewFilter, and DocumentProperties objects associated
@@ -42,7 +41,6 @@ public class CodeWindowManager : IVsCodeWindowManager {
         DocumentProperties properties;
 #endif
 
-        /// 
         /// 
         /// The CodeWindowManager is constructed by the base LanguageService class when VS calls
         /// the IVsLanguageInfo.GetCodeWindowManager method.  You can override CreateCodeWindowManager
@@ -58,14 +56,12 @@ internal CodeWindowManager(LanguageService service, IVsCodeWindow codeWindow, IS
 #endif
         }
 
-        /// 
         ~CodeWindowManager() {
 #if	LANGTRACE
             Trace.WriteLine("~CodeWindowManager");
 #endif
         }
 
-        /// 
         /// Closes all view filters, and the document properties window
         internal void Close() {
 #if	LANGTRACE
@@ -93,17 +89,14 @@ void CloseFilters() {
             }
         }
 
-        /// 
         /// Returns the LanguageService object that created this code window manager
         internal LanguageService LanguageService {
             get { return this.service; }
         }
-        /// 
         /// returns the Source object associated with the IVsTextLines buffer for this code window
         internal ISource Source {
             get { return this.source; }
         }
-        /// 
         /// 
         /// Returns the ViewFilter for the given view or null if no matching filter is found.
         /// 
@@ -118,7 +111,6 @@ internal ViewFilter GetFilter(IVsTextView view) {
         }
 
 #if DOCUMENT_PROPERTIES
-        /// 
         /// Returns the DocumentProperties, if any.  You can update this property if you want to 
         /// change the document properties on the fly.
         internal DocumentProperties Properties {
@@ -132,19 +124,15 @@ internal DocumentProperties Properties {
             }
         }
 #endif
-        /// 
         /// Return the optional TypeAndMemberDropdownBars object for the drop down combos
         internal TypeAndMemberDropdownBars DropDownHelper {
             get { return this.dropDownHelper; }
         }
-        /// 
         /// Return the IVsCodeWindow associated with this code window manager.
         internal IVsCodeWindow CodeWindow {
             get { return this.codeWindow; }
         }
       
-        #region IVsCodeWindowManager methods
-        /// 
         /// Install the optional TypeAndMemberDropdownBars, and primary and secondary view filters
         public virtual int AddAdornments() {
 #if	LANGTRACE
@@ -182,7 +170,6 @@ public virtual int AddAdornments() {
             return NativeMethods.S_OK;
         }
 
-        /// 
         /// Remove drop down combos, view filters, and notify the LanguageService that the Source and
         /// CodeWindowManager is now closed
         public virtual int RemoveAdornments() {
@@ -212,7 +199,6 @@ public virtual int RemoveAdornments() {
             return NativeMethods.S_OK;
         }
 
-        /// 
         /// Install a new view filter for the given view. This method calls your
         /// CreateViewFilter method.
         public virtual int OnNewView(IVsTextView newView) {
@@ -224,11 +210,9 @@ public virtual int OnNewView(IVsTextView newView) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual void OnKillFocus(IVsTextView textView) {
         }
 
-        /// 
         /// Refresh the document properties
         public virtual void OnSetFocus(IVsTextView textView) {
 #if DOCUMENT_PROPERTIES
@@ -237,13 +221,11 @@ public virtual void OnSetFocus(IVsTextView textView) {
             }
 #endif
         }
-        #endregion
 
     }
 
 
 
-    /// 
     /// 
     /// Represents the two drop down bars on the top of a text editor window that allow 
     /// types and type members to be selected by name.
@@ -274,14 +256,12 @@ internal abstract class TypeAndMemberDropdownBars : IVsDropdownBarClient {
         const int DropClasses = 0;
         const int DropMethods = 1;
 
-        /// 
         protected TypeAndMemberDropdownBars(LanguageService languageService) {
             this.languageService = languageService;
             this.dropDownTypes = new ArrayList();
             this.dropDownMembers = new ArrayList();
         }
 
-        /// 
         public void Done() { //TODO: use IDisposable pattern
             if (this.imageList != null) {
                 imageList.Dispose();
@@ -301,7 +281,6 @@ internal void SynchronizeDropdowns(IVsTextView textView, int line, int col) {
 
 
 
-        /// 
         /// 
         /// This method is called to update the drop down bars to match the current contents of the text editor window. 
         /// It is called during OnIdle when the caret position changes.  You can provide new drop down members here.
@@ -320,7 +299,6 @@ internal void SynchronizeDropdowns(IVsTextView textView, int line, int col) {
 
 
         // IVsDropdownBarClient methods
-        /// 
         public virtual int GetComboAttributes(int combo, out uint entries, out uint entryType, out IntPtr iList) {
             entries = 0;
             entryType = 0;
@@ -341,7 +319,6 @@ private enum DropDownItemType {
             HasImage = 4
         }
 
-        /// 
         public virtual int GetComboTipText(int combo, out string text) {
             if (combo == TypeAndMemberDropdownBars.DropClasses)
                 text = SR.GetString(SR.ComboTypesTip);
@@ -350,7 +327,6 @@ public virtual int GetComboTipText(int combo, out string text) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int GetEntryAttributes(int combo, int entry, out uint fontAttrs) {
             fontAttrs = (uint)DROPDOWNFONTATTR.FONTATTR_PLAIN;
             DropDownMember member = GetMember(combo, entry);
@@ -360,7 +336,6 @@ public virtual int GetEntryAttributes(int combo, int entry, out uint fontAttrs)
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int GetEntryImage(int combo, int entry, out int imgIndex) {
             // this happens during drawing and has to be fast 
             imgIndex = -1;
@@ -371,7 +346,6 @@ public virtual int GetEntryImage(int combo, int entry, out int imgIndex) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int GetEntryText(int combo, int entry, out string text) {
             text = null;
             DropDownMember member = GetMember(combo, entry);
@@ -381,12 +355,10 @@ public virtual int GetEntryText(int combo, int entry, out string text) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int OnComboGetFocus(int combo) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public DropDownMember GetMember(int combo, int entry) {
             if (combo == TypeAndMemberDropdownBars.DropClasses) {
                 if (this.dropDownTypes != null && entry >= 0 && entry < this.dropDownTypes.Count)
@@ -398,7 +370,6 @@ public DropDownMember GetMember(int combo, int entry) {
             return null;
         }
 
-        /// 
         public virtual int OnItemChosen(int combo, int entry) {
             DropDownMember member = GetMember(combo, entry);
             if (!Object.ReferenceEquals(member,null)) {
@@ -417,11 +388,9 @@ public virtual int OnItemChosen(int combo, int entry) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         [DllImport("user32.dll")]
         static extern void SetFocus(IntPtr hwnd);
 
-        /// 
         public int OnItemSelected(int combo, int index) {
             //nop
             return NativeMethods.S_OK;
@@ -433,7 +402,6 @@ public int SetDropdownBar(IVsDropdownBar bar) {
         }
     }
 
-    /// 
     internal class DropDownMember : IComparable {
 
         private string label;
@@ -441,7 +409,6 @@ internal class DropDownMember : IComparable {
         private int glyph;
         private DROPDOWNFONTATTR fontAttr;
 
-        /// 
         public string Label {
             get {
                 return this.label;
@@ -451,7 +418,6 @@ public string Label {
             }
         }
 
-        /// 
         public TextSpan Span {
             get {
                 return this.span;
@@ -460,7 +426,6 @@ public TextSpan Span {
                 this.span = value;
             }
         }
-        /// 
         public int Glyph {
             get {
                 return this.glyph;
@@ -469,7 +434,6 @@ public int Glyph {
                 this.glyph = value;
             }
         }
-        /// 
         public DROPDOWNFONTATTR FontAttr {
             get {
                 return this.fontAttr;
@@ -479,7 +443,6 @@ public DROPDOWNFONTATTR FontAttr {
             }
         }
 
-        /// 
         public DropDownMember(string label, TextSpan span, int glyph, DROPDOWNFONTATTR fontAttribute) {
             if (label == null) {
                 throw new ArgumentNullException("label");
@@ -490,14 +453,12 @@ public DropDownMember(string label, TextSpan span, int glyph, DROPDOWNFONTATTR f
             this.FontAttr = fontAttribute;
         }
 
-        /// 
         public int CompareTo(object obj) {
             // if this overload is used then it assumes a case-sensitive current culture comparison
             // which allows for case-senstive languages to work
             return CompareTo(obj, StringComparison.CurrentCulture);
         }
 
-        /// 
         public int CompareTo(object obj, StringComparison stringComparison)
         {
             if (obj is DropDownMember)
@@ -508,7 +469,6 @@ public int CompareTo(object obj, StringComparison stringComparison)
         }
 
         // Omitting Equals violates FxCop rule: IComparableImplementationsOverrideEquals.
-        /// 
         public override bool Equals(Object obj) {
             if (!(obj is DropDownMember))
                 return false;
@@ -516,7 +476,6 @@ public override bool Equals(Object obj) {
         }
 
         // Omitting getHashCode violates FxCop rule: EqualsOverridesRequireGetHashCodeOverride.
-        /// 
         public override int GetHashCode() {
             return this.Label.GetHashCode();
         }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Colorizer.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Colorizer.cs
index 2b8c3895366..c6c175a780b 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Colorizer.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Colorizer.cs
@@ -46,7 +46,6 @@ public virtual void Resume()
     }
 
 #if COLORABLE_ITEM
-    /// 
     [CLSCompliant(false)]
     [System.Runtime.InteropServices.ComVisible(true)]
     public class ColorableItem : IVsColorableItem, IVsHiColorItem, IVsMergeableUIItem {
@@ -55,7 +54,6 @@ public class ColorableItem : IVsColorableItem, IVsHiColorItem, IVsMergeableUIIte
         Color hiForeColor, hiBackColor;
         FONTFLAGS fontFlags;
 
-        /// 
         internal ColorableItem(string name, string displayName, COLORINDEX foreColor, COLORINDEX backColor, Color hiForeColor, Color hiBackColor, FONTFLAGS fontFlags) {
             this.name = name;
             this.displayName = displayName;
@@ -66,27 +64,20 @@ internal ColorableItem(string name, string displayName, COLORINDEX foreColor, CO
             this.hiBackColor = hiBackColor;
         }
 
-    #region IVsColorableItem methods
-        /// 
         public virtual int GetDefaultColors(COLORINDEX[] foreColor, COLORINDEX[] backColor) {
             if (foreColor != null) foreColor[0] = this.foreColor;
             if (backColor != null) backColor[0] = this.backColor;
             return NativeMethods.S_OK;
         }
-        /// 
         public virtual int GetDefaultFontFlags(out uint fontFlags) {
             fontFlags = (uint)this.fontFlags;
             return NativeMethods.S_OK;
         }
-        /// 
         public virtual int GetDisplayName(out string name) {
             name = this.displayName;
             return NativeMethods.S_OK;
         }
-        #endregion
 
-    #region IVsHiColorItem methods
-        /// 
         public virtual int GetColorData(int cdElement, out uint crColor) 
         {
             crColor = 0;
@@ -126,18 +117,13 @@ private uint ColorToRgb(Color color)
 
             return (uint)(red | (green << 8) | (blue << 16));
         }
-        #endregion
 
 
-    #region IVsMergeableUIItem Members
-
-        /// 
         public virtual int GetCanonicalName(out string name) {
             name = this.name;
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int GetDescription(out string desc) {
             // The reason this is not implemented is because the core text editor
             // doesn't use it.
@@ -145,13 +131,11 @@ public virtual int GetDescription(out string desc) {
             return NativeMethods.E_NOTIMPL;
         }
 
-        /// 
         public virtual int GetMergingPriority(out int priority) {
             priority = -1;
             return NativeMethods.E_NOTIMPL;
         }
 
-        #endregion
     }
 #endif
 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/DocumentProperties.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/DocumentProperties.cs
index 472e90ef7cd..5631aa73433 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/DocumentProperties.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/DocumentProperties.cs
@@ -24,7 +24,6 @@ internal abstract class DocumentProperties : LocalizableProperties, ISelectionCo
         internal IVsTrackSelectionEx tracker;
         private bool visible;
 
-        /// 
         protected DocumentProperties(CodeWindowManager mgr) {
             this.mgr = mgr;
             this.visible = true;
@@ -43,7 +42,6 @@ public bool Visible {
             set { if (this.visible != value) { this.visible = value; Refresh(); } }
         }
 
-        /// 
         /// 
         /// Call this method when you want the document properties window updated with new information.
         /// 
@@ -64,7 +62,6 @@ public CodeWindowManager GetCodeWindowManager() {
             return this.mgr;
         }
 
-        /// 
         public void Close() {
             if (this.tracker != null && this.visible)
                 NativeMethods.ThrowOnFailure(tracker.OnSelectChange(null));
@@ -72,10 +69,6 @@ public void Close() {
             this.Dispose(true);
         }
 
-        #region IDisposable Members
-
-
-        /// 
         public void Dispose() {
             Dispose(true);
             // This object will be cleaned up by the Dispose method.
@@ -84,7 +77,6 @@ public void Dispose() {
         }
 
 
-        /// 
         protected virtual void Dispose(bool disposing) {
             // If disposing equals true, dispose all managed 
             // and unmanaged resources.
@@ -96,31 +88,24 @@ protected virtual void Dispose(bool disposing) {
             this.mgr = null;
         }
 
-        /// 
         ~DocumentProperties() {
             Dispose(false);
         }
-        #endregion
 
-        #region ISelectionContainer methods.
-        /// 
         public virtual int CountObjects(uint flags, out uint pc) {
             pc = this.visible ? (uint)1 : (uint)0;
             return NativeMethods.S_OK;
         }
-        /// 
         public virtual int GetObjects(uint flags, uint count, object[] ppUnk) {
             if (count == 1) {
                 ppUnk[0] = this;
             }
             return NativeMethods.S_OK;
         }
-        /// 
         public virtual int SelectObjects(uint sel, object[] selobj, uint flags) {
             // nop
             return NativeMethods.S_OK;
         }
-    #endregion
     }
 
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/DocumentTask.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/DocumentTask.cs
index a1e15a25b98..b661234869e 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/DocumentTask.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/DocumentTask.cs
@@ -184,7 +184,6 @@ internal static void DoOnUIThread(Action callback)
 
     // DocumentTask is associated with an IVsTextLineMarker in a specified document and 
     // implements Navigate() to jump to that marker.
-    /// 
     [CLSCompliant(false)]
     [System.Runtime.InteropServices.ComVisible(true)]
 #if DEBUG
@@ -201,7 +200,6 @@ public class DocumentTask : ErrorTask, IVsTextMarkerClient, IDisposable, ICompar
         IVsTextLines buffer;
         MARKERTYPE markerType;
 
-        /// 
         internal DocumentTask(IServiceProvider site, IVsTextLines buffer, MARKERTYPE markerType, TextSpan span, string fileName, string subcategory) {
             this.site = site;
             this.fileName = fileName;
@@ -214,7 +212,6 @@ internal DocumentTask(IServiceProvider site, IVsTextLines buffer, MARKERTYPE mar
             this.markerType = markerType;
         }
 
-        /// 
         ~DocumentTask() {
             Dispose();
         }
@@ -266,25 +263,21 @@ public bool IsBuildTask {
             }
         }
 
-        /// 
         public bool IsMarkerValid {
             get {
                 return this.markerValid;
             }
         }
 
-        /// 
         public IServiceProvider Site {
             get { return this.site; }
         }
 
-        /// 
         public void Dispose() {
             Dispose(true);
             GC.SuppressFinalize(this);
         }
 
-        /// 
         protected virtual void Dispose(bool disposing) {
             if (this.textLineMarker != null) {
                 NativeMethods.ThrowOnFailure(textLineMarker.Invalidate());
@@ -350,7 +343,6 @@ public int CompareTo(DocumentTask other)
             return 1;
         }
 
-        /// 
         // It is important that this function not throw an exception.
         protected override void OnNavigate(EventArgs e) {
             try {
@@ -397,7 +389,6 @@ protected override void OnNavigate(EventArgs e) {
             }
         }
 
-        /// 
         protected override void OnRemoved(EventArgs e) {
             if (this.textLineMarker != null) {
                 NativeMethods.ThrowOnFailure(textLineMarker.Invalidate());
@@ -406,7 +397,6 @@ protected override void OnRemoved(EventArgs e) {
             base.OnRemoved(e);
         }
 
-        /// 
         public TextSpan Span {
             get {
                 if (textLineMarker != null) {
@@ -418,45 +408,35 @@ public TextSpan Span {
             }
         }
 
-        /// 
         public IVsTextLineMarker TextLineMarker {
             get { return this.textLineMarker; }
         }
 
-        #region IVsTextMarkerClient methods
-
         /*---------------------------------------------------------
             IVsTextMarkerClient
         -----------------------------------------------------------*/
-        /// 
         public virtual void MarkerInvalidated() {
             this.markerValid = false;
         }
 
-        /// 
         public virtual void OnBufferSave(string fileName) {
         }
 
-        /// 
         public virtual void OnBeforeBufferClose() {
         }
 
-        /// 
         public virtual void OnAfterSpanReload() {
         }
 
-        /// 
         public virtual int OnAfterMarkerChange(IVsTextMarker marker) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int GetTipText(IVsTextMarker marker, string[] tipText) {
             if (this.Text != null && this.Text.Length > 0) tipText[0] = this.Text;
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int GetMarkerCommandInfo(IVsTextMarker marker, int item, string[] text, uint[] commandFlags) {
             // Returning S_OK results in error message appearing in editor's
             // context menu when you right click over the error message.
@@ -467,11 +447,9 @@ public virtual int GetMarkerCommandInfo(IVsTextMarker marker, int item, string[]
             return NativeMethods.E_NOTIMPL;
         }
 
-        /// 
         public virtual int ExecMarkerCommand(IVsTextMarker marker, int item) {
             return NativeMethods.S_OK;
         }
-        #endregion
 
         int IVsProvideUserContext.GetUserContext(out IVsUserContext ppctx)
         {
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/EditArray.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/EditArray.cs
index 89efa97e6a5..04dfdff8535 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/EditArray.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/EditArray.cs
@@ -8,7 +8,6 @@
 using Microsoft.VisualStudio.FSharp.LanguageService.Resources;
 
 namespace Microsoft.VisualStudio.FSharp.LanguageService {
-    /// 
     /// 
     /// This class encapsulates one atomic edit operation.
     /// Add these to an EditArray then when you are ready call ApplyEdits().
@@ -19,7 +18,6 @@ internal class EditSpan {
         int lineCount;
         int lengthOfLastLine;
 
-        /// 
         /// 
         /// Construct a new edit span object
         /// 
@@ -34,18 +32,15 @@ internal EditSpan(TextSpan toReplace, string insertText) {
             this.lineCount = -1;
         }
 
-        /// 
         internal TextSpan Span {
             get { return this.span; }
             set { this.span = value; }
         }
-        /// 
         internal string Text {
             get { return this.text; }
             set { this.text = value; this.lineCount = -1; }
         }
 
-        /// 
         /// 
         /// Returns the number of lines in the new text being inserted.
         /// 
@@ -57,7 +52,6 @@ internal int LineCount {
             }
         }
 
-        /// 
         /// 
         /// Returns the length of the last line of text being inserted.
         /// 
@@ -89,7 +83,6 @@ void CalcLines() {
 
     }
 
-    /// 
     /// 
     /// This class encapsulates a batch edit operation.  The reason this class exists is because
     /// performing thousands of tiny edits on a large document can be pretty slow, so the best thing
@@ -111,7 +104,6 @@ internal class EditArray : IEnumerable, IDisposable {
         CompoundAction ca;
         CompoundViewAction cva;
 
-        /// 
         /// 
         /// This constructor takes a view and will use CompoundViewAction to make the updates
         /// and it will update the current selection accordingly.
@@ -167,7 +159,6 @@ public void Dispose() {
             Dispose(true);
         }
 
-        /// 
         /// 
         /// Return the number of edits in the array.
         /// 
@@ -177,21 +168,18 @@ internal int Count {
             }
         }
 
-        /// 
         internal IVsTextView TextView {
             get {
                 return this.view;
             }
         }
 
-        /// 
         internal ISource Source {
             get {
                 return this.source;
             }
         }
 
-        /// 
         public override string ToString() {
             StringBuilder s=new StringBuilder();
             for (int i = this.editList.Count - 1; i >= 0; i--) {
@@ -202,7 +190,6 @@ public override string ToString() {
             return s.ToString();
         }
 
-        /// 
         /// 
         /// Add a new atomic edit to the array.  The edits cannot intersect each other.  
         /// The spans in each edit must be based on the current state of the buffer, 
@@ -472,7 +459,6 @@ void UpdateSelection(ArrayList edits) {
             }
         }
 
-        /// 
         internal void ApplyEdits() {
             try {
                 if (this.editList.Count == 0) return;
@@ -528,7 +514,6 @@ void Apply() {
             this.editList.Clear(); // done!
         }
 
-        /// 
         /// Allows enumeration of EditSpan objects
         public IEnumerator GetEnumerator() {
             return editList.GetEnumerator();
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/EditorFactory.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/EditorFactory.cs
deleted file mode 100644
index 3161ed2e90b..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/EditorFactory.cs
+++ /dev/null
@@ -1,611 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-using System;
-using System.Globalization;
-using Microsoft.VisualStudio.Shell.Interop;
-using Microsoft.VisualStudio.TextManager.Interop;
-using Microsoft.VisualStudio.OLE.Interop;
-using Microsoft.VisualStudio.Shell;
-using System.Runtime.InteropServices;
-using System.Collections;
-using System.Collections.Specialized;
-using System.IO;
-using Microsoft.Win32;
-using IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider;
-using IServiceProvider = System.IServiceProvider;
-using System.Diagnostics;
-
-// WARNING: Do not activate this code without reviewing the use of Marshal.Release(). It looks like there's a leak in the exception case.
-// WARNING: Also review Marshal.GetIUnknownForObject
-
-#if NEVER
-namespace Microsoft.VisualStudio.FSharp.LanguageService {
-
-    /// 
-    /// 
-    /// You must inherit from this class and simply add a [ComVisible] and 
-    /// [GuidAttribute] and then specify the EditorFactoryGuid, EditorFactoryGuid 
-    /// and EditorName variables in your Registration class.
-    /// This base class provides a default editor factory implementation
-    /// that hosts the Visual Studio Core editor.  
-    /// 
-    [CLSCompliant(false), ComVisible(true)]
-    public class EditorFactory : IVsEditorFactory {
-        Microsoft.VisualStudio.Shell.Package package;
-        IServiceProvider site;
-
-        /// 
-        public static readonly Guid GuidVSBufferDetectLangSid = new Guid(0x17F375AC, 0xC814, 0x11D1, 0x88, 0xAD, 0x00, 0x00, 0xF8, 0x75, 0x79, 0xD2);
-
-        __PROMPTONLOADFLAGS promptFlags = __PROMPTONLOADFLAGS.codepageNoPrompt;
-
-        /// 
-        public class EditorInfo {
-            private string name;
-            private Guid guid;
-            private int priority;
-            private EditorInfo next;
-
-            /// 
-            public string Name {
-                get { return name; }
-                set { name = value; }
-            }
-
-            /// 
-            public Guid Guid {
-                get { return guid; }
-                set { guid = value; }
-            }
-
-            /// 
-            public int Priority {
-                get { return priority; }
-                set { priority = value; }
-            }
-
-            /// 
-            public EditorInfo Next {
-                get { return next; }
-                set { next = value; }
-            }
-        }
-
-        // all registered editors.
-        static Hashtable editors;  // extension -> EditorInfo
-
-        // Registered exenstions for this editor under HKLM\Software\Microsoft\Visual Studio\9.0\Editors\\{" + this.GetType().GUID.ToString() + "}\\Extensions
-        StringDictionary editorExtensions; // string -> string
-
-        // all known extensions under HKLM\Software\Microsoft\Visual Studio\9.0\Language Services\Extensions
-        static StringDictionary languageExtensions; // string -> language service guid.
-
-        /// 
-        public EditorFactory(Microsoft.VisualStudio.Shell.Package package) {
-            this.package = package;
-            this.site = package;
-        }
-
-        /// 
-        public EditorFactory() { }
-
-        /// 
-        ~EditorFactory() {
-            site = null;
-#if LANGTRACE
-            Trace.WriteLine("~EditorFactory");
-#endif
-        }
-
-        /// 
-        protected IServiceProvider GetSite() {
-            return this.site;
-        }
-        /// 
-        protected Microsoft.VisualStudio.Shell.Package GetPackage() {
-            return this.package;
-        }
-
-        /// 
-        /// Returns true if the given extension is one of our registered extensions
-        public virtual bool IsRegisteredExtension(string extension) {
-            return GetEditorExtensions().ContainsKey(extension);
-        }
-
-        /// 
-        /// Return list of file extensions registered for this editor factory under 
-        /// HKLM\Software\Microsoft\Visual Studio\9.0\Editors\\{" + this.GetType().GUID.ToString() + "}\\Extensions
-        /// 
-        public virtual string[] GetExtensions() {
-            ArrayList list = new ArrayList(this.GetEditorExtensions().Keys);
-            return (string[])list.ToArray(typeof(string));
-        }
-
-        /// 
-        /// Returns the guid of the language service registered for this file extension
-        /// HKLM\Software\Microsoft\Visual Studio\9.0\Language Services\Extensions
-        public virtual string GetLanguageService(string fileExtension) {
-            return GetLanguageExtensions(this.site)[fileExtension] as string;
-        }
-
-        /// 
-        public virtual __PROMPTONLOADFLAGS CodePagePrompt {
-            get { return this.promptFlags; }
-            set { this.promptFlags = value; }
-        }
-
-        bool CheckAllFileTypes() {
-            return GetEditorExtensions().ContainsKey("*");
-        }
-
-        // Return your language service Guid here, this is used to set the language service on the 
-        // IVsTextLines buffer returned from CreateEditorInstance.
-        /// 
-        public virtual Guid GetLanguageServiceGuid() {
-            return Guid.Empty;
-        }
-
-        /// 
-        /// Returns the guid of the highest priority editor registered for this extension.
-        /// This will also pick up user defined file extension to editor associations
-        public virtual Guid GetRegisteredEditor(string extension) {
-            EditorInfo ei = GetRegisteredEditorInfo(extension);
-            if (ei != null) {
-                return ei.Guid;
-            }
-            return Guid.Empty;
-        }
-
-        /// 
-        /// Returns the guid of the highest priority editor registered for this extension.
-        /// This will also pick up user defined file extension to editor associations.
-        /// You can then access all registered editors via the .Next property.
-        public virtual EditorInfo GetRegisteredEditorInfo(string extension) {
-            string key = extension.ToUpperInvariant();
-            return (EditorInfo)GetEditors(this.site)[key];
-        }
-
-        /// 
-        /// Returns the guid of the editor that the user has defined for this file extension or
-        /// Guid.Empty if none is found
-        public Guid GetUserDefinedEditor(string extension) {
-            StringDictionary map = this.GetFileExtensionMappings();
-            object v = map[extension];
-            if (v != null) {
-                return GetGuid(v.ToString());
-            }
-            return Guid.Empty;
-        }
-
-        /// Returns true if the file extension is one that you registered for this editor
-        /// factory, or your have registered the "*" extension and (this file type matches your 
-        /// GetLanguageServiceGuid() or there is no other language service registered for this file extension).
-        bool IsFileExtensionWeShouldEditAnyway(string ext) {
-
-            if (!this.CheckAllFileTypes())
-                return false;// you did not register "*".
-
-            Guid langSid = GetLanguageServiceGuid();
-
-            string guid = this.GetLanguageService(ext);
-            if (!string.IsNullOrEmpty(guid)) {
-                // There is a language service associated with this file extension, see if it is ours or not.
-                if (GetGuid(guid) != langSid) {
-                    // Then it is not our extension.
-                    return false;
-                }
-            }
-            return true;
-        }
-
-        static Guid GetGuid(string value) {
-            // we want to ignore badly registered guids.
-            try {
-                Guid guid = new Guid(value);
-                return guid;
-            } catch (FormatException) {
-                // ignore badly registered file extensions
-                return Guid.Empty;
-            }
-        }
-
-        /// 
-        // This method is called when the user has not explicitly requested your editor
-        // and if the file extension doesn't match an explicit extension you registered,
-        // and if you have registered the extension "*" to determine if this file is 
-        // really something you want to take over or not.  If you return false then VS
-        // will find the next best editor in the list.
-        public virtual bool IsOurFileFormat(string moniker) {
-            return true;
-        }
-
-        #region IVsEditorFactory
-
-        /// 
-        /// 
-        /// This method checks to see if the specified file is one that your editor supports
-        /// and if so, creates the core text editor and associated your language service 
-        /// with it.  To figure out if the file is one that your editor supports it performs
-        /// the following check:
-        /// 
-        /// 
-        /// Call IsRegisteredExtension to see if the file extension is explicitly 
-        /// registered to your editor.      
-        /// 
-        /// 
-        /// Call GetUserDefinedEditor to see if the user has explicitly mapped the
-        /// extension to your editor.
-        /// 
-        /// 
-        /// If your editor registered the "*" extension, then it also calls 
-        /// IsFileExtensionWeShouldEditAnyway and IsOurFileFormat to let you sniff
-        /// the file and see if you think it contains stuff that your editor recognizes
-        /// 
-        /// 
-        /// If all this is true then it goes ahead with the next step which is to
-        /// get an IVsTextLines buffer and set it up as follows:
-        /// 
-        /// 
-        /// If existingDocData is non-null then it checks to see if it can get an
-        /// IVsTextLines buffer from this docData, and if not, returns VS_E_INCOMPATIBLEDOCDATA.
-        /// Otherwise it creates a new VsTextBufferClass.
-        /// 
-        /// Calls IVsUserData.SetData on the IVsTextLines buffer with any code page prompt
-        /// flags you have provided via the CodePagePrompt property.
-        /// 
-        /// 
-        /// Calls SetLanguageServiceID to pass in your language service Guid and 
-        /// sets the GuidVSBufferDetectLangSid IVsUserData to false to stop the core
-        /// text editor from looking up a different language service.
-        /// 
-        /// Lastly it calls CreateEditorView to create the docView.
-        /// 
-        public virtual int CreateEditorInstance(uint createDocFlags, string moniker, string physicalView, IVsHierarchy pHier, uint itemid, IntPtr existingDocData, out IntPtr docView, out IntPtr docData, out string editorCaption, out Guid cmdUI, out int cancelled) {
-            docView = IntPtr.Zero;
-            docData = IntPtr.Zero;
-            editorCaption = null;
-            cmdUI = Guid.Empty;
-            cancelled = 0;
-            int hr = NativeMethods.S_OK;
-
-            if (this.promptFlags == __PROMPTONLOADFLAGS.codepagePrompt && existingDocData != IntPtr.Zero) {
-                //since we are trying to open with encoding just return
-                hr = (int)NativeMethods.VS_E_INCOMPATIBLEDOCDATA;
-                goto cleanup;
-            }
-
-            bool takeover = false;
-            if (!string.IsNullOrEmpty(moniker)) {
-                string ext = FilePathUtilities.GetFileExtension(moniker);
-                docData = IntPtr.Zero;
-                docView = IntPtr.Zero;
-                editorCaption = null;
-
-                bool openSpecific = (createDocFlags & (uint)__VSCREATEEDITORFLAGS2.CEF_OPENSPECIFIC) != 0;
-
-                bool isOurs = IsRegisteredExtension(ext);
-                bool isUserDefined = (GetUserDefinedEditor(ext) == this.GetType().GUID);
-
-                // If this file extension belongs to a different language service, then we should not open it,
-                // unless the user specifically requested our editor in the Open With... dialog.
-                if (!isOurs && !isUserDefined && !this.IsFileExtensionWeShouldEditAnyway(ext) && !openSpecific) {
-                    return (int)NativeMethods.VS_E_UNSUPPORTEDFORMAT;
-                }
-
-                takeover = (CheckAllFileTypes() && !isOurs);
-                if (takeover && !isOurs && !isUserDefined && !openSpecific) {
-                    if (!IsOurFileFormat(moniker)) {
-                        return (int)NativeMethods.VS_E_UNSUPPORTEDFORMAT;
-                    }
-                }
-            }
-
-            IVsTextLines buffer = null;
-            if (existingDocData != IntPtr.Zero) {
-                object dataObject = Marshal.GetObjectForIUnknown(existingDocData);
-                buffer = dataObject as IVsTextLines;
-                if (buffer == null) {
-                    IVsTextBufferProvider bp = dataObject as IVsTextBufferProvider;
-                    if (bp != null) {
-                        NativeMethods.ThrowOnFailure(bp.GetTextBuffer(out buffer));
-                    }
-                }
-                if (buffer == null) {
-                    // unknown docData type then, so we have to force VS to close the other editor.
-                    hr = (int)NativeMethods.VS_E_INCOMPATIBLEDOCDATA;
-                    goto cleanup;
-                }
-
-            } else {
-                // Create a new IVsTextLines buffer.
-                Type textLinesType = typeof(IVsTextLines);
-                Guid riid = textLinesType.GUID;
-                Guid clsid = typeof(VsTextBufferClass).GUID;
-                buffer = (IVsTextLines)package.CreateInstance(ref clsid, ref riid, textLinesType);
-                if (!string.IsNullOrEmpty(moniker)) {
-                    IVsUserData iud = buffer as IVsUserData;
-                    if (iud != null) {
-                        Guid GUID_VsBufferMoniker = typeof(IVsUserData).GUID;
-                        // Must be set in time for language service GetColorizer call in case the colorizer
-                        // is file name dependent.
-                        NativeMethods.ThrowOnFailure(iud.SetData(ref GUID_VsBufferMoniker, moniker));
-                    }
-                }
-                IObjectWithSite ows = buffer as IObjectWithSite;
-                if (ows != null) {
-                    ows.SetSite(this.site.GetService(typeof(IOleServiceProvider)));
-                }
-            }
-
-            if (this.promptFlags == __PROMPTONLOADFLAGS.codepagePrompt && buffer is IVsUserData) {
-                IVsUserData iud = (IVsUserData)buffer;
-                Guid GUID_VsBufferEncodingPromptOnLoad = new Guid(0x99ec03f0, 0xc843, 0x4c09, 0xbe, 0x74, 0xcd, 0xca, 0x51, 0x58, 0xd3, 0x6c);
-                NativeMethods.ThrowOnFailure(iud.SetData(ref GUID_VsBufferEncodingPromptOnLoad, (uint)this.CodePagePrompt));
-            }
-
-            Guid langSid = GetLanguageServiceGuid();
-            if (langSid != Guid.Empty) {
-                Guid vsCoreSid = new Guid("{8239bec4-ee87-11d0-8c98-00c04fc2ab22}");
-                Guid currentSid;
-                NativeMethods.ThrowOnFailure(buffer.GetLanguageServiceID(out currentSid));
-                if (currentSid == langSid) {
-                    // We may have recently closed the editor on this buffer and for some
-                    // reason VS loses our colorizer, so we need to reset it.
-                    NativeMethods.ThrowOnFailure(buffer.SetLanguageServiceID(ref vsCoreSid));
-                } else if (currentSid != vsCoreSid) {
-                    // Some other language service has it, so return VS_E_INCOMPATIBLEDOCDATA
-                    hr = (int)NativeMethods.VS_E_INCOMPATIBLEDOCDATA;
-                    goto cleanup;
-                }
-                NativeMethods.ThrowOnFailure(buffer.SetLanguageServiceID(ref langSid));
-                takeover = true;
-            }
-
-            if (takeover) {
-                IVsUserData vud = (IVsUserData)buffer;
-                Guid bufferDetectLang = GuidVSBufferDetectLangSid;
-                NativeMethods.ThrowOnFailure(vud.SetData(ref bufferDetectLang, false));
-            }
-
-            if (existingDocData != IntPtr.Zero) {
-                docData = existingDocData;
-                Marshal.AddRef(docData);
-            } else {
-                docData = Marshal.GetIUnknownForObject(buffer);                
-            }
-            docView = CreateEditorView(moniker, buffer, physicalView, out editorCaption, out cmdUI);
-
-            if (docView == IntPtr.Zero) {
-                // We couldn't create the view, so return this special error code so
-                // VS can try another editor factory.
-                hr = (int)NativeMethods.VS_E_UNSUPPORTEDFORMAT;
-            }
-
-        cleanup:
-            if (docView == IntPtr.Zero) {
-                if (existingDocData != docData && docData != IntPtr.Zero) {
-                    Marshal.Release(docData);
-                    docData = IntPtr.Zero;
-                }
-            }
-            return hr;
-        }
-
-        /// 
-        /// Return docView IUnknown COM object.
-        public virtual IntPtr CreateEditorView(string moniker, IVsTextLines buffer, string physicalView, out string editorCaption, out Guid cmdUI) {
-            Type tcw = typeof(IVsCodeWindow);
-            Guid riid = tcw.GUID;
-            Guid clsid = typeof(VsCodeWindowClass).GUID;
-            IntPtr docView = IntPtr.Zero;
-            IVsCodeWindow window = (IVsCodeWindow)package.CreateInstance(ref clsid, ref riid, tcw);
-
-            NativeMethods.ThrowOnFailure(window.SetBuffer(buffer));
-            NativeMethods.ThrowOnFailure(window.SetBaseEditorCaption(null));
-            NativeMethods.ThrowOnFailure(window.GetEditorCaption(READONLYSTATUS.ROSTATUS_Unknown, out editorCaption));
-
-            Guid CMDUIGUID_TextEditor = new Guid(0x8B382828, 0x6202, 0x11d1, 0x88, 0x70, 0x00, 0x00, 0xF8, 0x75, 0x79, 0xD2);
-            cmdUI = CMDUIGUID_TextEditor;
-            docView = Marshal.GetIUnknownForObject(window);
-
-            return docView;
-        }
-
-        /// 
-        /// The default implementation supports LOGVIEWID_Code, LOGVIEWID_TextView,
-        /// LOGVIEWID_Debugging, and LOGVIEWID_Primary returning null for
-        /// the physicalView string.
-        public virtual int MapLogicalView(ref Guid logicalView, out string physicalView) {
-            physicalView = null;
-            // The default suppo
-            if (logicalView == NativeMethods.LOGVIEWID_Code ||
-                logicalView == NativeMethods.LOGVIEWID_TextView ||
-                logicalView == NativeMethods.LOGVIEWID_Debugging ||
-                logicalView == NativeMethods.LOGVIEWID_Primary) {
-                physicalView = null;
-                return NativeMethods.S_OK;
-            }
-            return NativeMethods.E_NOTIMPL;
-        }
-
-        /// 
-        public virtual int SetSite(Microsoft.VisualStudio.OLE.Interop.IServiceProvider psp) {
-            this.site = new ServiceProvider(psp);
-            return NativeMethods.S_OK;
-        }
-
-        StringDictionary GetEditorExtensions() {
-            if (this.editorExtensions != null)
-                return this.editorExtensions;
-
-            Guid ourGuid = this.GetType().GUID;
-            StringDictionary map = new StringDictionary();
-            Hashtable editors = GetEditors(this.site);
-            foreach (string ext in editors.Keys) {
-                EditorInfo ei = (EditorInfo)editors[ext];
-                while (ei != null) {
-                    if (ei.Guid == ourGuid) {
-                        map[ext] = ext;
-                        break;
-                    }
-                    ei = ei.Next;
-                }
-            }
-            return this.editorExtensions = map;
-        }
-
-        static StringDictionary GetLanguageExtensions(IServiceProvider site) {
-            if (EditorFactory.languageExtensions != null)
-                return EditorFactory.languageExtensions;
-
-            StringDictionary extensions = new StringDictionary();
-            ILocalRegistry3 localRegistry = site.GetService(typeof(SLocalRegistry)) as ILocalRegistry3;
-            string root = null;
-            if (localRegistry != null) {
-                NativeMethods.ThrowOnFailure(localRegistry.GetLocalRegistryRoot(out root));
-            }
-            using (RegistryKey rootKey = Registry.LocalMachine.OpenSubKey(root)) {
-                if (rootKey != null) {
-
-                    string relpath = "Languages\\File Extensions";
-                    using (RegistryKey key = rootKey.OpenSubKey(relpath, false)) {
-                        if (key != null) {
-                            foreach (string ext in key.GetSubKeyNames()) {
-                                using (RegistryKey extkey = key.OpenSubKey(ext, false)) {
-                                    if (extkey != null) {
-                                        string fe = ext;
-                                        string guid = extkey.GetValue(null) as string; // get default value
-                                        if (!extensions.ContainsKey(fe)) {
-                                            extensions.Add(fe, guid);
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            return EditorFactory.languageExtensions = extensions;
-        }
-
-        static Hashtable GetEditors(IServiceProvider site) {
-            if (EditorFactory.editors != null)
-                return EditorFactory.editors;
-
-            Hashtable editors = new Hashtable();
-            ILocalRegistry3 localRegistry = site.GetService(typeof(SLocalRegistry)) as ILocalRegistry3;
-            string root = null;
-            if (localRegistry == null) {
-                return editors;
-            }
-            NativeMethods.ThrowOnFailure(localRegistry.GetLocalRegistryRoot(out root));
-            using (RegistryKey rootKey = Registry.LocalMachine.OpenSubKey(root)) {
-                if (rootKey != null) {
-                    RegistryKey editorsKey = rootKey.OpenSubKey("Editors", false);
-                    if (editorsKey != null) {
-                        using (editorsKey) {
-                            foreach (string editorGuid in editorsKey.GetSubKeyNames()) {
-                                Guid guid = GetGuid(editorGuid);
-                                using (RegistryKey editorKey = editorsKey.OpenSubKey(editorGuid, false)) {
-                                    object value = editorKey.GetValue(null);
-                                    string name = (value != null) ? value.ToString() : editorGuid.ToString();
-                                    RegistryKey extensions = editorKey.OpenSubKey("Extensions", false);
-                                    if (extensions != null) {
-                                        foreach (string s in extensions.GetValueNames()) {
-                                            if (!string.IsNullOrEmpty(s)) {
-                                                EditorInfo ei = new EditorInfo();
-                                                ei.Name = name;
-                                                ei.Guid = guid;
-                                                object obj = extensions.GetValue(s);
-                                                if (obj is int) {
-                                                    ei.Priority = (int)obj;
-                                                }
-                                                string ext = (s == "*") ? s : "." + s;
-                                                AddEditorInfo(editors, ext, ei);
-                                            }
-                                        }
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            return EditorFactory.editors = editors;
-        }
-
-        static void AddEditorInfo(Hashtable editors, string ext, EditorInfo ei) {
-            ext = ext.ToUpperInvariant();
-            EditorInfo other = (EditorInfo)editors[ext];
-            if (other != null) {
-                EditorInfo previous = null;
-                while (other != null && other.Priority > ei.Priority) {
-                    previous = other;
-                    other = other.Next;
-                }
-                if (previous == null) {
-                    editors[ext] = ei;
-                    ei.Next = other;
-                } else {
-                    ei.Next = previous.Next;
-                    previous.Next = ei;
-                }
-            } else {
-                editors[ext] = ei;
-            }
-        }
-
-        StringDictionary GetFileExtensionMappings() {
-            ILocalRegistry3 localRegistry = site.GetService(typeof(SLocalRegistry)) as ILocalRegistry3;
-            string root = null;
-            if (localRegistry != null) {
-                NativeMethods.ThrowOnFailure(localRegistry.GetLocalRegistryRoot(out root));
-            }
-            StringDictionary map = new StringDictionary();
-            RegistryKey key = Registry.CurrentUser.OpenSubKey(root + "\\Default Editors", false);
-            if (key != null) {
-                using (key) {
-                    foreach (string name in key.GetSubKeyNames()) {
-                        using (RegistryKey extkey = key.OpenSubKey(name, false)) {
-                            if (extkey != null) {
-                                object obj = extkey.GetValue("Custom");
-                                if (obj is string) {
-                                    string ext = "." + name;
-                                    map[ext] = obj.ToString(); // extension -> editor.
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-
-            // Also pick up the "default editors" information
-            key = Registry.CurrentUser.OpenSubKey(root + "\\Default Editors", false);
-            if (key != null) {
-                using (key) {
-                    foreach (string name in key.GetSubKeyNames()) {
-                        using (RegistryKey extkey = key.OpenSubKey(name, false)) {
-                            if (extkey != null) {
-                                object obj = extkey.GetValue("Custom");
-                                if (obj is string) {
-                                    string ext = "." + name;
-                                    map[ext] = obj.ToString(); // extension -> editor.
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            return map;
-        }
-
-        /// 
-        public virtual int Close() {
-            this.site = null;
-            this.package = null;
-            return NativeMethods.S_OK;
-        }
-        #endregion
-    }
-}
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/EditorView.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/EditorView.cs
index 8d89d525c48..e837b57f14b 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/EditorView.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/EditorView.cs
@@ -17,7 +17,6 @@
 
 namespace Microsoft.VisualStudio.FSharp.LanguageService {
 
-    /// 
     /// 
     /// This class View provides an abstract base class for simple editor views
     /// that follow the VS simple embedding model.
@@ -45,34 +44,27 @@ namespace Microsoft.VisualStudio.FSharp.LanguageService {
 
         internal SimpleEditorView() {}
 
-        /// 
         protected IServiceProvider Site {
             get { return this.site; }
             set { this.site = value; }
         }
-        /// 
         protected IVsTextLines Buffer {
             get { return this.buffer; }
             set { this.buffer = value; }
         }
-        /// 
         protected IOleComponentManager ComponentManager {
             get { return this.componentManager; }
             set { this.componentManager = value; }
         }
-        /// 
         protected uint ComponentId {
             get { return this.componentID; }
             set { this.componentID = value; }
         }
 
-        /// 
         protected SimpleEditorView(IVsTextLines buffer) {
             this.buffer = buffer;
         }
 
-        #region IOleCommandTarget methods
-        /// 
         /// 
         /// Override this method to provide custom command status, 
         /// e.g. (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED
@@ -91,7 +83,6 @@ protected virtual int QueryCommandStatus(ref Guid guidCmdGroup, uint cmdId) {
             }
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
-        /// 
         /// 
         /// Override this method to intercept the IOleCommandTarget::Exec call.
         /// 
@@ -110,7 +101,6 @@ protected virtual int ExecCommand(ref Guid guidCmdGroup, uint cmdId, uint cmdExe
             }
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
-        /// 
         /// 
         /// This method is called when IOleCommandTarget.Exec is called with 
         /// nCmdexecopt equal to MAKELONG(OLECMDEXECOPT_SHOWHELP, VSCmdOptQueryParameterList).
@@ -122,7 +112,6 @@ protected virtual int QueryParameterList(ref Guid guidCmdGroup, uint id, uint op
 #endif
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
-        /// 
         /// 
         /// 
         /// IOleCommandTarget implementation
@@ -136,7 +125,6 @@ public virtual int QueryStatus(ref Guid guidCmdGroup, uint cmds, OLECMD[] prgCmd
 
             return 0;
         }
-        /// 
         /// 
         public virtual int Exec(ref Guid guidCmdGroup, uint id, uint options, IntPtr pvaIn, IntPtr pvaOut) {
             ushort lo = (ushort)(options & (uint)0xffff);
@@ -157,32 +145,23 @@ public virtual int Exec(ref Guid guidCmdGroup, uint id, uint options, IntPtr pva
             }
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
-        #endregion
 
 
-        #region IVsWindowPane methods
-
-        /// 
         public virtual int ClosePane() {
             return this.componentManager.FRevokeComponent(this.componentID);
         }
-        /// 
         public abstract int CreatePaneWindow(IntPtr hwndParent, int x, int y, int cx, int cy, out IntPtr hwnd);
-        /// 
         public virtual int GetDefaultSize(SIZE[] size) {
             size[0].cx = 100;
             size[0].cy = 100;
             return NativeMethods.S_OK;
         }
-        /// 
         public virtual int LoadViewState(Microsoft.VisualStudio.OLE.Interop.IStream stream) {
             return NativeMethods.S_OK;
         }
-        /// 
         public virtual int SaveViewState(Microsoft.VisualStudio.OLE.Interop.IStream stream) {
             return NativeMethods.S_OK;
         }
-        /// 
         public virtual int SetSite(Microsoft.VisualStudio.OLE.Interop.IServiceProvider site) {
             this.site = new ServiceProvider(site);
 
@@ -218,300 +197,56 @@ public virtual int SetSite(Microsoft.VisualStudio.OLE.Interop.IServiceProvider s
             }
             return NativeMethods.S_OK;
         }
-        /// 
         public virtual int TranslateAccelerator(MSG[] msg) {
             return (int)NativeMethods.S_FALSE;
         }
-        #endregion 
 
-        #region IVsToolboxUser methods
-        /// 
         public virtual int IsSupported(Microsoft.VisualStudio.OLE.Interop.IDataObject data) {
             return (int)NativeMethods.S_FALSE;
         }
-        /// 
         public virtual int ItemPicked(Microsoft.VisualStudio.OLE.Interop.IDataObject data) {
             return NativeMethods.S_OK;
         }
-        #endregion
 
-        #region IVsStatusbarUser methods
-        /// 
         public virtual int SetInfo() {
             return NativeMethods.S_OK;
         }
-        #endregion
 
-            #region IVsWindowPaneCommit methods
-        /// 
         public virtual int CommitPendingEdit(out int fCommitFailed) {
             fCommitFailed = 0;
             return NativeMethods.S_OK;
         }
-            #endregion
 
-            #region IOleComponent Methods
-        /// 
         public virtual int FDoIdle(uint grfidlef) {
             return 0;
         }
-        /// 
         public virtual void Terminate() {
         }
-        /// 
         public virtual int FPreTranslateMessage(MSG[] msg) {
             return 0;
         }
-        /// 
         public virtual void OnEnterState(uint uStateID, int fEnter) {
         }
-        /// 
         public virtual void OnAppActivate(int fActive, uint dwOtherThreadID) {
         }
-        /// 
         public virtual void OnLoseActivation() {
         }
-        /// 
         public virtual void OnActivationChange(Microsoft.VisualStudio.OLE.Interop.IOleComponent pic, int fSameComponent, OLECRINFO[] pcrinfo, int fHostIsActivating, OLECHOSTINFO[] pchostinfo, uint dwReserved) {
         }
-        /// 
         public virtual int FContinueMessageLoop(uint uReason, IntPtr pvLoopData, MSG[] pMsgPeeked) {
             return 1;
         }
-        /// 
         public virtual int FQueryTerminate(int fPromptUser) {
             return 1;
         }
-        /// 
         public virtual IntPtr HwndGetWindow(uint dwWhich, uint dwReserved) {
             return IntPtr.Zero;
         }
-        /// 
         public virtual int FReserved1(uint reserved, uint message, IntPtr wParam, IntPtr lParam) {
             return 1;
         }
-            #endregion 
     }
 
-#if CUT
-
-    /// 
-    /// 
-    /// This class View provides an abstract base class for custom editor views that
-    /// support Ole Inplace activation (ActiveX controls).
-    /// 
-    [CLSCompliant(false)]
-    [System.Runtime.InteropServices.ComVisible(true)]
-    public abstract class OleEditorView : SimpleEditorView, IOleCommandTarget, IVsWindowPane, IVsToolboxUser, IVsStatusbarUser, IOleObject, IOleInPlaceActiveObject, IOleInPlaceObject, IOleInPlaceComponent
-        //IServiceProvider,
-        //IOleDocumentView,
-        //IOleDocument,
-        //IOleInPlaceUIWindow,
-        //IVsMultiViewDocumentView,
-        //IVsFindTarget,
-        //IVsWindowFrameNotify,
-        //IVsCodeWindow,
-        //IVsWindowPaneCommit,
-        //IVsBroadcastMessageEvents,
-        //IVsDocOutlineProvider,
-        //IVsDebuggerEvents,
-        // ??? VxDTE::IExtensibleObject,
-        //IVsBackForwardNavigation
-        // ??? public IVsTextLinesEvents,
-        // ??? public ISelectionContainer,
-        // ??? public IVsTextBufferDataEvents,
-        {
-        internal EventSinkCollection eventSinks = new EventSinkCollection();
-        /// 
-        protected IOleComponentUIManager pCompUIMgr;
-        /// 
-        protected IOleInPlaceComponentSite pIPCompSite;
-        /// 
-        protected IOleClientSite pClientSite;
-        /// 
-        protected Hashtable monikers = new Hashtable();
-        /// 
-        protected OleEditorView(IVsTextLines buffer) : base(buffer) {
-        }
-    
-        #region IOleObject methods
-        /// 
-        public virtual void Advise(IAdviseSink sink, out uint cookie) {
-            cookie = eventSinks.Add(sink);
-        }
-        /// 
-        public virtual void Close(uint dwSaveOption) {
-        }
-        /// 
-        public virtual int DoVerb(int iVerb, MSG[] msg, IOleClientSite site, int index, IntPtr hwndParent, RECT[] posRect) {
-            return NativeMethods.S_OK;
-        }
-        /// 
-        public virtual void EnumAdvise(out IEnumSTATDATA ppEnumAdvise) {
-            ppEnumAdvise = null;
-        }
-        /// 
-        public virtual int EnumVerbs(out IEnumOLEVERB ppEnumVerbs) {
-            ppEnumVerbs = null;
-            return NativeMethods.S_OK;
-        }
-        /// 
-        public virtual void GetClientSite(out IOleClientSite site) {
-            site = this.pClientSite;
-        }
-        /// 
-        public virtual void GetClipboardData(uint reserved, out Microsoft.VisualStudio.OLE.Interop.IDataObject obj) {
-            obj = null;
-        }
-        /// 
-        public virtual void GetExtent(uint dwDrawAspect, SIZEL[] size) {
-        }
-        /// 
-        public virtual int GetMiscStatus(uint dwAspect, out uint status) {
-            status = 0;
-            return NativeMethods.S_OK;
-        }
-        /// 
-        public virtual void GetMoniker(uint iAssign, uint whichMoniker, out IMoniker moniker) {
-            object key = (object)whichMoniker;
-
-            moniker = (IMoniker)monikers[key];
-        }
-        /// 
-        public virtual void GetUserClassID(out Guid pClsid) {
-            pClsid = this.GetType().GUID;
-        }
-        /// 
-        public virtual int GetUserType(uint formOfType, IntPtr userType) {
-            return NativeMethods.S_OK;
-        }
-        /// 
-        public virtual int InitFromData(Microsoft.VisualStudio.OLE.Interop.IDataObject data, int fCreation, uint reserved) {
-            return NativeMethods.S_OK;
-        }
-        /// 
-        public virtual int IsUpToDate() {
-            return NativeMethods.S_OK;
-        }
-        /// 
-        public virtual void SetClientSite(IOleClientSite site) {
-            this.pClientSite = site;
-        }
-        /// 
-        public virtual void SetColorScheme(LOGPALETTE[] logicalPalette) {
-        }
-        /// 
-        public virtual void SetExtent(uint drawAspect, SIZEL[] size) {
-        }
-        /// 
-        public virtual void SetHostNames(string containerApp, string containerObj) {
-        }
-        /// 
-        public virtual void SetMoniker(uint whichMoniker, IMoniker moniker) {
-            object key = (object)whichMoniker;
-
-            if (monikers.Contains(key)) monikers.Remove(key);
-
-            monikers.Add(key, moniker);
-        }
-        /// 
-        public virtual void Unadvise(uint dwCookie) {
-            eventSinks.RemoveAt(dwCookie);
-        }
-        /// 
-        public virtual int Update() {
-            return NativeMethods.S_OK;
-        }
-        #endregion 
-    
-
-        #region IOleInPlaceActiveObject
-        /// 
-        public virtual void EnableModeless(int fEnable) {
-        }
-        /// 
-        public virtual void OnDocWindowActivate(int fActivate) {
-        }
-        /// 
-        public virtual void OnFrameWindowActivate(int fActivate) {
-        }
-        /// 
-        public virtual void ResizeBorder(RECT[] border, ref Guid iid, IOleInPlaceUIWindow window, int fFrameWindow) {
-        }
-        #endregion 
-
-
-
-        #region IOleInPlaceObject methods
-        /// 
-        public virtual void ContextSensitiveHelp(int fEnterHelp) {
-        }
-        /// 
-        public virtual void GetWindow(out IntPtr hwnd) {
-            hwnd = IntPtr.Zero;
-        }
-        /// 
-        public virtual void InPlaceDeactivate() {
-        }
-        /// 
-        public virtual void ReactivateAndUndo() {
-        }
-        /// 
-        public virtual void SetObjectRects(RECT[] posRect, RECT[] clipRect) {
-        }
-        /// 
-        public virtual void UIDeactivate() {
-        }
-        #endregion 
-
-        #region IOleInPlaceComponent methods
-
-
-        /// 
-        public virtual int FQueryClose(int fPromptUser) {
-            return 0;
-        }
-        /// 
-        public virtual int GetCntrContextMenu(uint dwRoleActiveObject, ref Guid clsidActiveObject, int nMenuIdActiveObject, POINTS[] pos, out Guid clsidCntr, OLEMENUID[] menuid, out uint pgrf) {
-            clsidCntr = Guid.Empty;
-            pgrf = 0;
-            return NativeMethods.S_OK;
-        }
-        /// 
-        public virtual int GetCntrHelp(ref uint pdwRole, ref Guid pclsid, POINT posMouse, uint dwHelpCmd, string pszHelpFileIn, out string pwsHelpFileOut, uint dwDataIn, out uint dwDataOut) {
-            pwsHelpFileOut = pszHelpFileIn;
-            dwDataOut = dwDataIn;
-            return NativeMethods.S_OK;
-        }
-        /// 
-        public virtual int GetCntrMessage(ref uint pdwRolw, ref Guid clsid, string titleIn, string textIn, string helpFileIn, out string titleOut, out string textOut, out string helpFileOut, ref uint dwHelpContextId, OLEMSGBUTTON[] msgbutton, OLEMSGDEFBUTTON[] msgdefbutton, OLEMSGICON[] msgicon, ref int sysAlert) {
-            titleOut = titleIn;
-            textOut = textIn;
-            helpFileOut = helpFileIn;
-            return NativeMethods.S_OK;
-        }
-        void IOleInPlaceComponent.OnEnterState(uint dwStateId, int fEnter) {
-            ((IOleComponent)this).OnEnterState(dwStateId, fEnter);
-        }
-        /// 
-        public virtual int OnWindowActivate(uint windowType, int fActivate) {
-            return NativeMethods.S_OK;
-        }
-        /// 
-        public virtual int TranslateCntrAccelerator(MSG[] msg) {
-            return NativeMethods.S_OK;
-        }
-        /// 
-        public virtual int UseComponentUIManager(uint dwCompRole, out uint pgrfCompFlags, IOleComponentUIManager pCompUIMgr, IOleInPlaceComponentSite pIPCompSite) {
-            pgrfCompFlags = 0;
-            this.pCompUIMgr = pCompUIMgr;
-            this.pIPCompSite = pIPCompSite;
-            return NativeMethods.S_OK;
-        }
-        #endregion
-    }
-#endif
-    /// 
     /// 
     /// This class wraps a managed WinForm control and uses that as the editor window.
     /// 
@@ -520,19 +255,16 @@ public virtual int UseComponentUIManager(uint dwCompRole, out uint pgrfCompFlags
     public class EditorControl : SimpleEditorView {
         Control control;
         
-        /// 
         internal EditorControl(IServiceProvider site, IVsTextLines buffer, Control ctrl) : base(buffer) {
             this.control = ctrl;
             this.Site = site;
         }
 
-        /// 
         protected Control Control {
             get { return this.control; }
             set { this.control = value; }
         }
 
-        /// 
         public override int ClosePane() {
             if (control != null) {
                 control.Dispose();
@@ -541,7 +273,6 @@ public override int ClosePane() {
 
             return base.ClosePane();
         }
-        /// 
         public override int CreatePaneWindow(IntPtr hwndParent, int x, int y, int cx, int cy, out IntPtr hwnd) {
             control.SuspendLayout();
             control.Left = x;
@@ -562,26 +293,20 @@ public override int CreatePaneWindow(IntPtr hwndParent, int x, int y, int cx, in
             hwnd = control.Handle;
             return NativeMethods.S_OK;
         }
-        /// 
         public override int CommitPendingEdit(out int fCommitFailed) {
             fCommitFailed = 0;
             return NativeMethods.S_OK;
         }
-        /// 
         public override int FDoIdle(uint grfidlef) {
             return 0;
         }
-        /// 
         public override void OnAppActivate(int fActive, uint dwOtherThreadID) {
         }
-        /// 
         public override int FQueryTerminate(int fPromptUser) {
             return 1;
         }
-        /// 
         public override void OnLoseActivation() {
         }
-        /// 
         public override IntPtr HwndGetWindow(uint dwWhich, uint dwReserved) {
             return control.Handle;
         }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/ExpansionProvider.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/ExpansionProvider.cs
index a08bd3fa905..03d32e457f8 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/ExpansionProvider.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/ExpansionProvider.cs
@@ -20,29 +20,24 @@
 
 namespace Microsoft.VisualStudio.FSharp.LanguageService {
 
-    /// 
     internal class DefaultFieldValue {
         private string field;
         private string value;
 
-        /// 
         internal DefaultFieldValue(string field, string value) {
             this.field = field;
             this.value = value;
         }
 
-        /// 
         internal string Field {
             get { return this.field; }
         }
 
-        /// 
         internal string Value {
             get { return this.value; }
         }
     }
 
-    /// 
     [CLSCompliant(false)]
     [System.Runtime.InteropServices.ComVisible(true)]
     public class ExpansionProvider : IDisposable, IVsExpansionClient {
@@ -57,7 +52,6 @@ public class ExpansionProvider : IDisposable, IVsExpansionClient {
         string titleToInsert;
         string pathToInsert;
 
-        /// 
         internal ExpansionProvider(ISource src) {
             if (src == null){
                 throw new ArgumentNullException("src");
@@ -77,14 +71,12 @@ internal ExpansionProvider(ISource src) {
             }
         }
 
-        /// 
         ~ExpansionProvider() {
 #if LANGTRACE
             Trace.WriteLine("~ExpansionProvider");
 #endif
         }
 
-        /// 
         public virtual void Dispose() {
             EndTemplateEditing(true);
             this.source = null;
@@ -93,41 +85,34 @@ public virtual void Dispose() {
             GC.SuppressFinalize(this);
         }
 
-        /// 
         internal ISource Source {
             get { return this.source; }
         }
 
-        /// 
         internal IVsTextView TextView {
             get { return this.view; }
         }
 
-        /// 
         internal IVsExpansion Expansion {
             get { return this.vsExpansion; }
         }
 
-        /// 
         internal IVsExpansionSession ExpansionSession {
             get { return this.expansionSession; }
         }
 
-        /// 
         internal virtual bool HandleQueryStatus(ref Guid guidCmdGroup, uint nCmdId, out int hr) {
             // in case there's something to conditinally support later on...
             hr = 0;
             return false;
         }
 
-        /// 
         internal virtual bool InTemplateEditingMode {
             get {
                 return this.expansionActive;
             }
         }
 
-        /// 
         internal virtual TextSpan GetExpansionSpan() {
             if (this.expansionSession == null){
                 throw new System.InvalidOperationException(SR.GetString(SR.NoExpansionSession));
@@ -141,7 +126,6 @@ internal virtual TextSpan GetExpansionSpan() {
         }
 
 
-        /// 
         internal virtual bool HandlePreExec(ref Guid guidCmdGroup, uint nCmdId, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut) {
             if (!this.expansionActive || this.expansionSession == null) {
 				return false;
@@ -201,7 +185,6 @@ internal virtual bool HandlePreExec(ref Guid guidCmdGroup, uint nCmdId, uint nCm
             return false;
         }
 
-        /// 
         internal virtual bool HandlePostExec(ref Guid guidCmdGroup, uint nCmdId, uint nCmdexecopt, bool commit, IntPtr pvaIn, IntPtr pvaOut) {
             if (guidCmdGroup == typeof(VsCommands2K).GUID) {
                 VsCommands2K cmd = (VsCommands2K)nCmdId;
@@ -222,7 +205,6 @@ internal virtual bool HandlePostExec(ref Guid guidCmdGroup, uint nCmdId, uint nC
             return false;
         }
 
-        /// 
         internal virtual bool DisplayExpansionBrowser(IVsTextView view, string prompt, string[] types, bool includeNullType, string[] kinds, bool includeNullKind) {
             if (this.expansionActive) this.EndTemplateEditing(true);
 
@@ -258,7 +240,6 @@ internal virtual bool DisplayExpansionBrowser(IVsTextView view, string prompt, s
             return false;
         }
 
-        /// 
         internal virtual bool InsertSpecificExpansion(IVsTextView view, XmlElement snippet, TextSpan pos, string relativePath) {
             if (this.expansionActive) this.EndTemplateEditing(true);
 
@@ -295,7 +276,6 @@ bool IsCompletorActive(IVsTextView view){
             return false;
         }
 
-        /// 
         internal virtual bool InsertNamedExpansion(IVsTextView view, string title, string path, TextSpan pos, bool showDisambiguationUI) {
 
             if (this.source.IsCompletorActive) {
@@ -319,7 +299,6 @@ internal virtual bool InsertNamedExpansion(IVsTextView view, string title, strin
             return false;
         }
 
-        /// 
         /// Returns S_OK if match found, S_FALSE if expansion UI is shown, and error otherwise
         internal virtual int FindExpansionByShortcut(IVsTextView view, string shortcut, TextSpan span, bool showDisambiguationUI, out string title, out string path) {
             if (this.expansionActive) this.EndTemplateEditing(true);
@@ -337,7 +316,6 @@ internal virtual int FindExpansionByShortcut(IVsTextView view, string shortcut,
             return hr;
         }
 
-        /// 
         public virtual IVsExpansionFunction GetExpansionFunction(XmlElement xmlFunctionNode, string fieldName) {
             string functionName = null;
             ArrayList rgFuncParams = new ArrayList();
@@ -413,7 +391,6 @@ public virtual IVsExpansionFunction GetExpansionFunction(XmlElement xmlFunctionN
             return null;
         }
 
-        /// 
         internal virtual void PrepareTemplate(string title, string path) {            
             if (title == null)
                 throw new System.ArgumentNullException("title");
@@ -436,7 +413,6 @@ void SetFieldDefault(string field, string value) {
             this.fieldDefaults.Add(new DefaultFieldValue(field, value));
         }
 
-        /// 
         internal virtual void BeginTemplateEditing(int line, int col) {
             if (!this.expansionPrepared) {
                 throw new System.InvalidOperationException(SR.GetString(SR.TemplateNotPrepared));
@@ -463,7 +439,6 @@ internal virtual void BeginTemplateEditing(int line, int col) {
             this.titleToInsert = null;
         }
 
-        /// 
         internal virtual void EndTemplateEditing(bool leaveCaret) {
             if (!this.expansionActive || this.expansionSession == null) {
                 this.expansionActive = false;
@@ -475,7 +450,6 @@ internal virtual void EndTemplateEditing(bool leaveCaret) {
             this.expansionActive = false;
         }
 
-        /// 
         internal virtual bool GetFieldSpan(string field, out TextSpan pts) {
             if (this.expansionSession == null) {
                 throw new System.InvalidOperationException(SR.GetString(SR.NoExpansionSession));
@@ -491,7 +465,6 @@ internal virtual bool GetFieldSpan(string field, out TextSpan pts) {
             }
         }
 
-        /// 
         internal virtual bool GetFieldValue(string field, out string value) {
             if (this.expansionSession == null) {
                 throw new System.InvalidOperationException(SR.GetString(SR.NoExpansionSession));
@@ -504,16 +477,12 @@ internal virtual bool GetFieldValue(string field, out string value) {
             return value != null;
         }
 
-        #region IVsExpansionClient Members
-
-        /// 
         public int EndExpansion() {
             this.expansionActive = false;
             this.expansionSession = null;
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int FormatSpan(IVsTextLines buffer, TextSpan[] ts) {
             if (this.source.GetTextLines() != buffer) {
                 throw new System.ArgumentException(SR.GetString(SR.UnknownBuffer), "buffer");
@@ -536,7 +505,6 @@ public virtual int FormatSpan(IVsTextLines buffer, TextSpan[] ts) {
             return rc;
         }
 
-        /// 
         public virtual int IsValidKind(IVsTextLines buffer, TextSpan[] ts, string bstrKind, out int /*BOOL*/ fIsValid)
         {
             fIsValid = 0;
@@ -549,7 +517,6 @@ public virtual int IsValidKind(IVsTextLines buffer, TextSpan[] ts, string bstrKi
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int IsValidType(IVsTextLines buffer, TextSpan[] ts, string[] rgTypes, int iCountTypes, out int /*BOOL*/ fIsValid)
         {
             fIsValid = 0;
@@ -561,7 +528,6 @@ public virtual int IsValidType(IVsTextLines buffer, TextSpan[] ts, string[] rgTy
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int OnItemChosen(string pszTitle, string pszPath) {
             TextSpan ts;
             view.GetCaretPos(out ts.iStartLine, out ts.iStartIndex);
@@ -587,18 +553,15 @@ public virtual int OnItemChosen(string pszTitle, string pszPath) {
             return hr;
         }
 
-        /// 
         public virtual int PositionCaretForEditing(IVsTextLines pBuffer, TextSpan[] ts) {
             // NOP
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int OnAfterInsertion(IVsExpansionSession session) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int OnBeforeInsertion(IVsExpansionSession session) {
             if (session == null)
                 return NativeMethods.E_UNEXPECTED;
@@ -622,21 +585,21 @@ public virtual int OnBeforeInsertion(IVsExpansionSession session) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int GetExpansionFunction(MSXML.IXMLDOMNode xmlFunctionNode, string fieldName, out IVsExpansionFunction func) {
 
             XmlDocument doc = new XmlDocument();
-            doc.LoadXml(xmlFunctionNode.xml);
-            func = GetExpansionFunction(doc.DocumentElement, fieldName);
+            doc.XmlResolver = null;
+            using(StringReader stream = new StringReader(xmlFunctionNode.xml))
+            using (XmlReader reader = XmlReader.Create(stream, new XmlReaderSettings() { DtdProcessing = DtdProcessing.Prohibit, XmlResolver = null }))
+            {
+                doc.Load(reader);
+                func = GetExpansionFunction(doc.DocumentElement, fieldName);
+            }
             return NativeMethods.S_OK;
         }
-
-        #endregion
-
     }
 
 
-    /// 
     [CLSCompliant(false)]
     [System.Runtime.InteropServices.ComVisible(true)]
     public abstract class ExpansionFunction : IVsExpansionFunction {
@@ -645,50 +608,41 @@ public abstract class ExpansionFunction : IVsExpansionFunction {
         string[] args;
         string[] list;
 
-        /// 
         /// You must construct this object with an ExpansionProvider
         private ExpansionFunction() {
         }
 
-        /// 
         internal ExpansionFunction(ExpansionProvider provider) {
             this.provider = provider;
         }
 
-        /// 
         public ExpansionProvider ExpansionProvider {
             get { return this.provider; }
         }
 
-        /// 
         public string[] Arguments {
             get { return this.args; }
             set { this.args = value; }
         }
 
-        /// 
         public string FieldName {
             get { return this.fieldName; }
             set { this.fieldName = value; }
         }
 
-        /// 
         public abstract string GetCurrentValue();
 
-        /// 
         public virtual string GetDefaultValue() {
             // This must call GetCurrentValue sincs during initialization of the snippet
             // VS will call GetDefaultValue and not GetCurrentValue.
             return GetCurrentValue();
         }
 
-        /// 
         /// Override this method if you want intellisense drop support on a list of possible values.
         public virtual string[] GetIntellisenseList() {
             return null;
         }
 
-        /// 
         /// 
         /// Gets the value of the specified argument, resolving any fields referenced in the argument.
         /// In the substitution, "$$" is replaced with "$" and any floating '$' signs are left unchanged,
@@ -760,7 +714,6 @@ public string GetArgument(int index) {
             return arg;
         }
 
-        /// 
         public bool GetFieldValue(string name, out string value) {
             value = null;
             if (this.provider != null && this.provider.ExpansionSession != null) {
@@ -770,7 +723,6 @@ public bool GetFieldValue(string name, out string value) {
             return false;
         }
 
-        /// 
         public TextSpan GetSelection() {
             TextSpan result = new TextSpan();
             ExpansionProvider provider = this.ExpansionProvider;
@@ -781,9 +733,6 @@ public TextSpan GetSelection() {
             return result;
         }
 
-        #region IVsExpansionFunction Members
-
-        /// 
         public virtual int FieldChanged(string bstrField, out int fRequeryValue) {
             // Returns true if we care about this field changing.
             // We care if the field changes if one of the arguments refers to it.
@@ -800,7 +749,6 @@ public virtual int FieldChanged(string bstrField, out int fRequeryValue) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public int GetCurrentValue(out string bstrValue, out int hasDefaultValue) {
             try {
                 bstrValue = this.GetCurrentValue();
@@ -811,7 +759,6 @@ public int GetCurrentValue(out string bstrValue, out int hasDefaultValue) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public int GetDefaultValue(out string bstrValue, out int hasCurrentValue) {
             try {
                 bstrValue = this.GetDefaultValue();
@@ -822,7 +769,6 @@ public int GetDefaultValue(out string bstrValue, out int hasCurrentValue) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int GetFunctionType(out uint pFuncType) {
             if (this.list == null) {
                 this.list = this.GetIntellisenseList();
@@ -831,7 +777,6 @@ public virtual int GetFunctionType(out uint pFuncType) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int GetListCount(out int iListCount) {
             if (this.list == null) {
                 this.list = this.GetIntellisenseList();
@@ -844,7 +789,6 @@ public virtual int GetListCount(out int iListCount) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int GetListText(int iIndex, out string ppszText) {
             if (this.list == null) {
                 this.list = this.GetIntellisenseList();
@@ -857,13 +801,10 @@ public virtual int GetListText(int iIndex, out string ppszText) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int ReleaseFunction() {
             this.provider = null;
             return NativeMethods.S_OK;
         }
-
-        #endregion
     }
 
     // todo: for some reason VsExpansionManager is wrong.
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj
index 4b9551d419f..5efb2bd274e 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/FSharp.LanguageService.Base.csproj
@@ -1,10 +1,8 @@
 
 
-
+
   
     ..\..\..\..\..\..\src
-    Microsoft.VisualStudio.Shell.12.0
-    Microsoft.VisualStudio.Package.LanguageService.12.0
     CSharp
     true
   
@@ -40,12 +38,8 @@
   
   
   
-    
-      true
-    
-    
-      true
-    
+    
+    
     
     
     
@@ -58,24 +52,24 @@
     
     
     
-    
+    
     
     
     
     
     
-    
+    
     
     
     
     
     
-    
-    
-    
-    
-    
-    
+    
+    
+    
+    
+    
+    
     
       {DED3BBD7-53F4-428A-8C9F-27968E768605}
       FSharp.Core
@@ -94,7 +88,6 @@
     
     
     
-    
     
     
     
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/LanguageService.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/LanguageService.cs
index c003821d2ef..21e05ad9594 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/LanguageService.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/LanguageService.cs
@@ -58,7 +58,7 @@ public abstract class LanguageService : IDisposable, IVsLanguageInfo, IVsLanguag
         IObjectWithSite, IVsDebuggerEvents,
         IVsFormatFilterProvider,
         ILanguageServiceTestHelper
-    { //, IVsOutliningCapableLanguage {
+    {
 
         private IServiceProvider site;
         private ArrayList codeWindowManagers;
@@ -164,7 +164,6 @@ internal Guid GetLanguageServiceGuid()
             return this.GetType().GUID;
         }
 
-        #region IVsProvideColorableItems
         public virtual int GetItemCount(out int count)
         {
             count = 0;
@@ -176,9 +175,7 @@ public virtual int GetColorableItem(int index, out IVsColorableItem item)
             item = null;
             return NativeMethods.E_NOTIMPL;
         }
-        #endregion
 
-        #region IVsLanguageContextProvider
         int IVsLanguageContextProvider.UpdateLanguageContext(uint dwHint, IVsTextLines buffer, TextSpan[] ptsSelection, object ptr)
         {
             if (ptr != null && ptr is IVsUserContext && buffer is IVsTextBuffer)
@@ -212,8 +209,6 @@ internal void SetUserContextDirty(string fileName)
             }
         }
 
-        #endregion
-
         internal virtual int UpdateLanguageContext(LanguageContextHint hint, IVsTextLines buffer, TextSpan[] ptsSelection, IVsUserContext context)
         {
             // From the docs: Any failure code: means the implementer is "passing" on this opportunity to provide context and the text editor will fall back to other mechanisms.
@@ -566,7 +561,6 @@ internal virtual ExpansionProvider CreateExpansionProvider(ISource src)
             return new ExpansionProvider(src);
         }
 
-        #region IVsLanguageInfo methods
         // GetCodeWindowManager -- this gives us the VsCodeWindow which is what we need to
         // add adornments and so forth.
         public int GetCodeWindowManager(IVsCodeWindow codeWindow, out IVsCodeWindowManager mgr)
@@ -616,9 +610,6 @@ public virtual int GetFileExtensions(out string extensions)
             return NativeMethods.S_OK;
         }
 
-        #endregion
-
-        #region IVsLanguageDebugInfo methods
         public abstract int GetLanguageID(IVsTextBuffer buffer, int line, int col, out Guid langId);
 
         public virtual int GetLocationOfName(string name, out string pbstrMkDoc, TextSpan[] spans)
@@ -698,9 +689,7 @@ public virtual int ResolveName(string name, uint flags, out IVsEnumDebugName ppN
         }
 
         public abstract int ValidateBreakpointLocation(IVsTextBuffer buffer, int line, int col, TextSpan[] pCodeSpan);
-        #endregion
 
-        /// 
         internal object GetService(Type serviceType)
         {
             if (this.site != null)
@@ -710,7 +699,6 @@ internal object GetService(Type serviceType)
             return null;
         }
 
-        #region Microsoft.VisualStudio.OLE.Interop.IServiceProvider methods
         public virtual int QueryService(ref Guid guidService, ref Guid iid, out IntPtr obj)
         {
             obj = IntPtr.Zero;
@@ -723,7 +711,6 @@ public virtual int QueryService(ref Guid guidService, ref Guid iid, out IntPtr o
             }
             return (int)NativeMethods.E_UNEXPECTED;
         }
-        #endregion
 
         // Override this method if you want to insert your own view filter
         // into the command chain.  
@@ -1009,7 +996,6 @@ internal void BackgroundRequestThread()
         }
 
 
-        #region IObjectWithSite
         public void GetSite(ref Guid iid, out IntPtr ptr)
         {
             IntPtr pUnk = Marshal.GetIUnknownForObject(this.site);
@@ -1037,17 +1023,6 @@ public void SetSite(object site)
             Microsoft.VisualStudio.Shell.Package pkg = (Microsoft.VisualStudio.Shell.Package)this.site.GetService(typeof(Microsoft.VisualStudio.Shell.Package));
             this.lcid = pkg.GetProviderLocale();
         }
-        #endregion
-
-#if IVsOutliningCapableLanguage                 
-        public virtual void CollapseToDefinitions(IVsTextLines buffer, IVsOutliningSession session) {
-            Source source = this.GetSource(buffer);
-            source.CollapseAllHiddenRegions(session);
-        }
-#endif
-
-
-        #region IVsDebuggerEvents Members
 
         public virtual int OnModeChange(DBGMODE dbgmodeNew)
         {
@@ -1055,9 +1030,6 @@ public virtual int OnModeChange(DBGMODE dbgmodeNew)
             return NativeMethods.S_OK;
         }
 
-        #endregion
-
-
         /// Return true if the given encoding information is invalid for your language service
         /// Default always returns false.  If you return true, then also return an error
         /// message to display to the user.
@@ -1115,7 +1087,6 @@ internal virtual int CurFileExtensionFormat(string fileName)
             return -1;
         }
 
-        #region IVsFormatFilterProvider Members
         int IVsFormatFilterProvider.QueryInvalidEncoding(uint format, out string pbstrMessage)
         {
             if (QueryInvalidEncoding((__VSTFF)format, out pbstrMessage))
@@ -1161,10 +1132,6 @@ int IVsFormatFilterProvider.GetFormatFilterList(out string pbstrFilterList)
             return NativeMethods.S_OK;
         }
 
-        #endregion
-
-        #region ILanguageServiceTestHelper
-
         /// 
         /// Version number will increment to indicate a change in the semantics of preexisting methods. 
         /// 
@@ -1173,7 +1140,6 @@ int ILanguageServiceTestHelper.GetSemanticsVersion()
             return 3;
         }
 
-        #endregion
     } // end class LanguageService
 
     internal class BackgroundRequestAsyncResult
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/NativeMethods.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/NativeMethods.cs
index 1a476e26661..ca333cf9613 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/NativeMethods.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/NativeMethods.cs
@@ -14,38 +14,25 @@ namespace Microsoft.VisualStudio.FSharp.LanguageService {
     using System.Text;
     using System.Globalization;
 
-    /// 
     // This class is shared between assemblies
     [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
     internal static class NativeMethods {
 
-        /// 
         public static IntPtr InvalidIntPtr = ((IntPtr)((int)(-1)));
 
         // IIDS
-        /// 
         public static readonly Guid IID_IServiceProvider = typeof(Microsoft.VisualStudio.OLE.Interop.IServiceProvider).GUID;
-        /// 
         public static readonly Guid IID_IObjectWithSite = typeof(IObjectWithSite).GUID;
-        /// 
         public static readonly Guid IID_IUnknown = new Guid("{00000000-0000-0000-C000-000000000046}");                    
 
-        /// 
         public static readonly Guid GUID_PropertyBrowserToolWindow = new Guid(unchecked((int)0xeefa5220), unchecked((short)0xe298), (short)0x11d0, new byte[]{ 0x8f, 0x78, 0x0, 0xa0, 0xc9, 0x11, 0x0, 0x57 });
-        /// 
         public static readonly Guid GUID_VSStandardCommandSet97 = new Guid("{5efc7975-14bc-11cf-9b2b-00aa00573819}");
 
-        /// 
         public static readonly Guid CLSID_HtmDocData = new Guid(unchecked((int)0x62C81794), unchecked((short)0xA9EC), (short)0x11D0, new byte[] {0x81, 0x98, 0x0, 0xa0, 0xc9, 0x1b, 0xbe, 0xe3});
-        /// 
         public static readonly Guid CLSID_HtmedPackage = new Guid(unchecked((int)0x1B437D20), unchecked((short)0xF8FE), (short)0x11D2, new byte[] {0xA6, 0xAE, 0x00, 0x10, 0x4B, 0xCC, 0x72, 0x69});
-        /// 
         public static readonly Guid CLSID_HtmlLanguageService = new Guid(unchecked((int)0x58E975A0), unchecked((short)0xF8FE), (short)0x11D2, new byte[] {0xA6, 0xAE, 0x00, 0x10, 0x4B, 0xCC, 0x72, 0x69});
-        /// 
         public static readonly Guid GUID_HtmlEditorFactory = new Guid("{C76D83F8-A489-11D0-8195-00A0C91BBEE3}");
-        /// 
         public static readonly Guid GUID_TextEditorFactory = new Guid("{8B382828-6202-11d1-8870-0000F87579D2}");
-        /// 
         public static readonly Guid GUID_HTMEDAllowExistingDocData = new Guid(unchecked((int)0x5742d216), unchecked((short)0x8071), (short)0x4779, new byte[] {0xbf, 0x5f, 0xa2, 0x4d, 0x5f, 0x31, 0x42, 0xba});
         
         /// GUID for the environment package.
@@ -80,11 +67,8 @@ internal static class NativeMethods {
         /// GUID of the general output pane inside the output window.
         public static readonly Guid GUID_OutWindowGeneralPane = new Guid("{3c24d581-5591-4884-a571-9fe89915cd64}");
         // Guids for GetOutputPane.
-        /// 
         public static readonly Guid BuildOrder = new Guid("2032b126-7c8d-48ad-8026-0e0348004fc0");
-        /// 
         public static readonly Guid BuildOutput = new Guid("1BD8A850-02D1-11d1-BEE7-00A0C913D1F8");
-        /// 
         public static readonly Guid DebugOutput = new Guid("FC076020-078A-11D1-A7DF-00A0C9110051");
         
         //--------------------------------------------------------------------
@@ -171,23 +155,19 @@ internal static class NativeMethods {
         /// 
         public static readonly Guid GUID_SolutionPage   = new Guid("{9A341D97-5A64-11d3-BFF9-00C04F990235}");
  
-       /// 
         [ComImport,System.Runtime.InteropServices.Guid("5EFC7974-14BC-11CF-9B2B-00AA00573819")]
         public class OleComponentUIManager {
         }
 
-        /// 
         [ComImport,System.Runtime.InteropServices.Guid("8E7B96A8-E33D-11D0-A6D5-00C04FB67F6A")]
         public class VsTextBuffer {
         }
 
         // HRESULTS
-        /// 
         public static bool Succeeded(int hr) {
             return(hr >= 0);
         }
 
-        /// 
         public static bool Failed(int hr) {
             return(hr < 0);
         }
@@ -211,21 +191,17 @@ public static int ThrowOnFailure(int hr, params int[] expectedHRFailure)
         }
 
         // packing
-        /// 
         public static int SignedHIWORD(int n) {
             return (int)(short)((n >> 16) & 0xffff);
         }
 
-        /// 
         public static int SignedLOWORD(int n) {
             return (int)(short)(n & 0xFFFF);
         }
 
-        /// 
         public const int
         CLSCTX_INPROC_SERVER  = 0x1;
 
-        /// 
         public const int
         S_FALSE =   0x00000001,
         S_OK =      0x00000000,
@@ -263,7 +239,6 @@ public const int
         E_ACCESSDENIED = unchecked((int)0x80070005),
         E_PENDING = unchecked((int)0x8000000A); 
 
-        /// 
         public const int
         VS_E_UNSUPPORTEDFORMAT = unchecked((int)0x80041FEB),
         VS_E_INCOMPATIBLEDOCDATA = unchecked((int)0x80041FEA),
@@ -293,13 +268,11 @@ public enum VSTASKBITMAP
             BMP_USER = -5
         };
 
-        /// 
         public const int
         OLECLOSE_SAVEIFDIRTY = 0,
         OLECLOSE_NOSAVE = 1,
         OLECLOSE_PROMPTSAVE = 2;
 
-        /// 
         public const int
         OLEIVERB_PRIMARY = 0,
         OLEIVERB_SHOW = -1,
@@ -310,7 +283,6 @@ public const int
         OLEIVERB_DISCARDUNDOSTATE = -6,
         OLEIVERB_PROPERTIES = -7;                
 
-        /// 
         public const int 
         OLE_E_OLEVERB = unchecked((int)0x80040000),
         OLE_E_ADVF = unchecked((int)0x80040001),
@@ -332,7 +304,6 @@ public const int
         OLE_E_CANTCONVERT = unchecked((int)0x80040011),
         OLE_E_NOSTORAGE = unchecked((int)0x80040012);
 
-        /// 
         public const int 
         DISP_E_UNKNOWNINTERFACE = unchecked((int)0x80020001),
         DISP_E_MEMBERNOTFOUND = unchecked((int)0x80020003),
@@ -382,7 +353,6 @@ public const int
                 OFN_DONTADDTORECENT =      unchecked((int)0x02000000),
                 OFN_FORCESHOWHIDDEN =      unchecked((int)0x10000000);
 
-                /// 
         public const uint
         VSITEMID_NIL               = unchecked((uint)-1),
         VSITEMID_ROOT              = unchecked((uint)-2), 
@@ -391,13 +361,11 @@ public const uint
         public const uint VSCOOKIE_NIL               = 0;
 
         // for ISelectionContainer flags
-        /// 
         public const uint
         ALL = 0x1,
         SELECTED = 0x2;
 
         // for IVsSelectionEvents flags
-        /// 
         public const uint
         UndoManager = 0x0,
         WindowFrame = 0x1,
@@ -407,29 +375,20 @@ public const uint
         UserContext = 0x5;
 
         // for READONLYSTATUS
-        /// 
         public const int
         ROSTATUS_NotReadOnly = 0x0,
         ROSTATUS_ReadOnly = 0x1,
         ROSTATUS_Unknown = unchecked((int)0xFFFFFFFF);
 
-        /// 
         public const int
         IEI_DoNotLoadDocData = 0x10000000;
 
-        /// 
         public static readonly Guid LOGVIEWID_Any             = new Guid(0xffffffff, 0xffff, 0xffff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff );
-        /// 
         public static readonly Guid LOGVIEWID_Primary         = Guid.Empty;
-        /// 
         public static readonly Guid LOGVIEWID_Debugging       = new Guid("{7651a700-06e5-11d1-8ebd-00a0c90f26ea}");
-        /// 
         public static readonly Guid LOGVIEWID_Code            = new Guid("{7651a701-06e5-11d1-8ebd-00a0c90f26ea}");
-        /// 
         public static readonly Guid LOGVIEWID_Designer        = new Guid("{7651a702-06e5-11d1-8ebd-00a0c90f26ea}");
-        /// 
         public static readonly Guid LOGVIEWID_TextView        = new Guid("{7651a703-06e5-11d1-8ebd-00a0c90f26ea}");
-        /// 
         public static readonly Guid LOGVIEWID_UserChooseView  = new Guid("{7651a704-06e5-11d1-8ebd-00a0c90f26ea}");
 
         /// Command Group GUID for commands that only apply to the UIHierarchyWindow.
@@ -477,7 +436,6 @@ public enum VSSELELEMID
             SEID_LastWindowFrame    = 7
         }
 
-        /// 
                 public const int
                 CB_SETDROPPEDWIDTH = 0x0160,
 
@@ -753,20 +711,17 @@ public const int
                 PSNRET_INVALID = 1,
                 PSNRET_INVALID_NOCHANGEPAGE = 2;
 
-                /// 
         public const int 
         PSN_APPLY = ((0-200)-2),
         PSN_KILLACTIVE = ((0-200)-1),
         PSN_RESET = ((0-200)-3),
         PSN_SETACTIVE = ((0-200)-0);
 
-        /// 
         public const int 
         GMEM_MOVEABLE = 0x0002,
         GMEM_ZEROINIT = 0x0040,
         GMEM_DDESHARE = 0x2000;
 
-        /// 
         public const int
         SWP_NOACTIVATE = 0x0010,
         SWP_NOZORDER = 0x0004,
@@ -774,23 +729,19 @@ public const int
         SWP_NOMOVE = 0x0002,
         SWP_FRAMECHANGED = 0x0020;
 
-        /// 
         public const int
         TVM_SETINSERTMARK = (0x1100 + 26),
         TVM_GETEDITCONTROL = (0x1100 + 15);
 
-        /// 
         public const int
         FILE_ATTRIBUTE_READONLY = 0x00000001;
 
-        /// 
         public const uint
         CEF_CLONEFILE   = 0x00000001,   // Mutually exclusive w/_OPENFILE
         CEF_OPENFILE    = 0x00000002,   // Mutually exclusive w/_CLONEFILE
         CEF_SILENT      = 0x00000004,   // Editor factory should create editor silently
         CEF_OPENASNEW   = 0x00000008;   // Editor factory should perform necessary fixups
 
-        /// 
         public const int cmdidToolsOptions    = 264;
 
         public const int 
@@ -848,65 +799,40 @@ public const int
             OPAQUE = 2,
             FW_BOLD = 700;
 
-        /// 
         [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
         public class LOGFONT {
-            /// 
             public int lfHeight;
-            /// 
             public int lfWidth;
-            /// 
             public int lfEscapement;
-            /// 
             public int lfOrientation;
-            /// 
             public int lfWeight;
-            /// 
             public byte lfItalic;
-            /// 
             public byte lfUnderline;
-            /// 
             public byte lfStrikeOut;
-            /// 
             public byte lfCharSet;
-            /// 
             public byte lfOutPrecision;
-            /// 
             public byte lfClipPrecision;
-            /// 
             public byte lfQuality;
-            /// 
             public byte lfPitchAndFamily;
-            /// 
             [MarshalAs(UnmanagedType.ByValTStr, SizeConst=32)]
             public string   lfFaceName;
         }
 
-        /// 
         [StructLayout(LayoutKind.Sequential)]
         public struct NMHDR
         {
-            /// 
             public IntPtr hwndFrom;
-            /// 
             public int idFrom;
-            /// 
             public int code;
         }
 
-        /// 
         [StructLayout(LayoutKind.Sequential)]
         public struct RECT {
-            /// 
             public int left;
-            /// 
             public int top;
-            /// 
             public int right;
-            /// 
             public int bottom;
 
-            /// 
             public RECT(int left, int top, int right, int bottom) {
                 this.left = left;
                 this.top = top;
@@ -914,7 +840,6 @@ public RECT(int left, int top, int right, int bottom) {
                 this.bottom = bottom;
             }
 
-            /// 
             public RECT(System.Drawing.Rectangle r)
             {
                 this.left = r.Left;
@@ -924,26 +849,20 @@ public RECT(System.Drawing.Rectangle r)
             }
         }
 
-        /// 
         [StructLayout(LayoutKind.Sequential)]
         public class POINT {
-            /// 
             public int x;
-            /// 
             public int y;
 
-            /// 
             public POINT() {
             }
 
-            /// 
             public POINT(int x, int y) {
                 this.x = x;
                 this.y = y;
             }
         }
         
-        /// 
         /// 
         /// Helper class for setting the text parameters to OLECMDTEXT structures.
         /// 
@@ -952,24 +871,19 @@ public sealed class OLECMDTEXT {
             // Private constructor to avoid creation of objects from this class.
             private OLECMDTEXT() {}
 
-            /// 
             /// 
             /// Flags for the OLE command text
             /// 
             public enum OLECMDTEXTF
             {
-                /// 
                 /// No flag
                 OLECMDTEXTF_NONE        = 0,
-                /// 
                 /// The name of the command is required.
                 OLECMDTEXTF_NAME = 1,
-                /// 
                 /// A description of the status is required.
                 OLECMDTEXTF_STATUS = 2
             }
 
-            /// 
             /// 
             /// Gets the flags of the OLECMDTEXT structure
             /// 
@@ -988,7 +902,6 @@ public static OLECMDTEXTF GetFlags(IntPtr pCmdTextInt)
                 return OLECMDTEXTF.OLECMDTEXTF_NONE;
             }
 
-            /// 
             /// 
             /// Accessing the text of this structure is very cumbersome.  Instead, you may
             /// use this method to access an integer pointer of the structure.
@@ -1017,7 +930,6 @@ public static string GetText(IntPtr pCmdTextInt) {
                 return s.ToString();
             }
 
-            /// 
             /// 
             /// Accessing the text of this structure is very cumbersome.  Instead, you may
             /// use this method to access an integer pointer of the structure.
@@ -1054,57 +966,36 @@ public static void SetText(IntPtr pCmdTextInt, string text) {
             }
         }
 
-        /// 
         /// 
         /// OLECMDF enums for IOleCommandTarget
         /// 
         public enum tagOLECMDF {
-            /// 
             OLECMDF_SUPPORTED    = 1, 
-            /// 
             OLECMDF_ENABLED      = 2, 
-            /// 
             OLECMDF_LATCHED      = 4, 
-            /// 
             OLECMDF_NINCHED      = 8,
-            /// 
             OLECMDF_INVISIBLE    = 16
         }
 
-        /// 
         /// 
         /// Constants for stream usage.
         /// 
         public sealed class StreamConsts {
-            /// 
             public const   int LOCK_WRITE = 0x1;
-            /// 
             public const   int LOCK_EXCLUSIVE = 0x2;
-            /// 
             public const   int LOCK_ONLYONCE = 0x4;
-            /// 
             public const   int STATFLAG_DEFAULT = 0x0;
-            /// 
             public const   int STATFLAG_NONAME = 0x1;
-            /// 
             public const   int STATFLAG_NOOPEN = 0x2;
-            /// 
             public const   int STGC_DEFAULT = 0x0;
-            /// 
             public const   int STGC_OVERWRITE = 0x1;
-            /// 
             public const   int STGC_ONLYIFCURRENT = 0x2;
-            /// 
             public const   int STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE = 0x4;
-            /// 
             public const   int STREAM_SEEK_SET = 0x0;
-            /// 
             public const   int STREAM_SEEK_CUR = 0x1;
-            /// 
             public const   int STREAM_SEEK_END = 0x2;
         }
 
-        /// 
         /// 
         /// This class implements a managed Stream object on top
         /// of a COM IStream
@@ -1117,7 +1008,6 @@ internal sealed class DataStreamFromComStream : Stream, IDisposable {
             private string creatingStack;
             #endif
 
-            /// 
             public DataStreamFromComStream(Microsoft.VisualStudio.OLE.Interop.IStream comStream) : base() {
                 this.comStream = comStream;
 
@@ -1126,7 +1016,6 @@ public DataStreamFromComStream(Microsoft.VisualStudio.OLE.Interop.IStream comStr
                 #endif
             }
 
-            /// 
             public override long Position {
                 get {
                     return Seek(0, SeekOrigin.Current);
@@ -1137,28 +1026,24 @@ public override long Position {
                 }
             }
 
-            /// 
             public override bool CanWrite {
                 get {
                     return true;
                 }
             }
 
-            /// 
             public override bool CanSeek {
                 get {
                     return true;
                 }
             }
 
-            /// 
             public override bool CanRead {
                 get {
                     return true;
                 }
             }
 
-            /// 
             public override long Length {
                 get {
                     long curPos = this.Position;
@@ -1188,7 +1073,6 @@ protected override void Dispose(bool disposing) {
                 }
             }
 
-            /// 
             public override void Flush() {
                 if (comStream != null) {
                     try {
@@ -1199,7 +1083,6 @@ public override void Flush() {
                 }
             }
 
-            /// 
             public override int Read(byte[] buffer, int index, int count) {
                 uint bytesRead;
                 byte[] b = buffer;
@@ -1218,14 +1101,12 @@ public override int Read(byte[] buffer, int index, int count) {
                 return (int)bytesRead;
             }
 
-            /// 
             public override void SetLength(long value) {
                 ULARGE_INTEGER ul = new ULARGE_INTEGER();
                 ul.QuadPart = (ulong)value;
                 comStream.SetSize(ul);
             }
 
-            /// 
             public override long Seek(long offset, SeekOrigin origin) {
                 LARGE_INTEGER l = new LARGE_INTEGER();
                 ULARGE_INTEGER[] ul = new ULARGE_INTEGER[1];
@@ -1235,7 +1116,6 @@ public override long Seek(long offset, SeekOrigin origin) {
                 return (long)ul[0].QuadPart;
             }
 
-            /// 
             public override void Write(byte[] buffer, int index, int count) {
                 uint bytesWritten;
 
@@ -1259,7 +1139,6 @@ public override void Write(byte[] buffer, int index, int count) {
                 }
             }
 
-            /// 
             ~DataStreamFromComStream() {
                 #if DEBUG
                 if (comStream != null) {
@@ -1271,7 +1150,6 @@ public override void Write(byte[] buffer, int index, int count) {
             }
         }
 
-        /// 
         /// 
         /// Class that encapsulates a connection point cookie for COM event handling.
         /// 
@@ -1284,7 +1162,6 @@ public sealed class ConnectionPointCookie : IDisposable {
             private Type   eventInterface;
             #endif
 
-            /// 
             /// 
             /// Creates a connection point to of the given interface type.
             /// which will call on a managed code sink that implements that interface.
@@ -1292,7 +1169,6 @@ public sealed class ConnectionPointCookie : IDisposable {
             public ConnectionPointCookie(object source, object sink, Type eventInterface) : this(source, sink, eventInterface, true){
             }
 
-            /// 
             ~ConnectionPointCookie(){
                 #if DEBUG
                 System.Diagnostics.Debug.Assert(connectionPoint == null || cookie == 0, "We should never finalize an active connection point. (Interface = " + eventInterface.FullName + "), allocating code (see stack) is responsible for unhooking the ConnectionPoint by calling Disconnect.  Hookup Stack =\r\n" +  callStack);
@@ -1326,7 +1202,6 @@ private void Dispose(bool disposing) {
                 }
             }
 
-            /// 
             /// 
             /// Creates a connection point to of the given interface type.
             /// which will call on a managed code sink that implements that interface.
@@ -1382,7 +1257,6 @@ public ConnectionPointCookie(object source, object sink, Type eventInterface, bo
             }
         }
 
-        /// 
         /// 
         /// This method takes a file URL and converts it to an absolute path.  The trick here is that
         /// if there is a '#' in the path, everything after this is treated as a fragment.  So
@@ -1395,7 +1269,6 @@ public static string GetAbsolutePath(string fileName) {
             return uri.LocalPath + uri.Fragment;
         }
 
-        /// 
         /// 
         /// This method takes a file URL and converts it to a local path.  The trick here is that
         /// if there is a '#' in the path, everything after this is treated as a fragment.  So
@@ -1423,7 +1296,6 @@ public static string GetLocalPathUnescaped(string url) {
             }
         }
 
-        /// 
         /// 
         /// Please use this "approved" method to compare file names.
         /// 
@@ -1439,86 +1311,64 @@ public static bool IsSamePath(string file1, string file2) {
             return file1 == file2;
         }
 
-        /// 
         [ComImport(),Guid("9BDA66AE-CA28-4e22-AA27-8A7218A0E3FA"), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
         public interface IEventHandler {
 
             // converts the underlying codefunction into an event handler for the given event
             // if the given event is NULL, then the function will handle no events
-            /// 
             [PreserveSig]
             int AddHandler(string bstrEventName); 
 
-            /// 
             [PreserveSig]
             int RemoveHandler(string bstrEventName);
-            /// 
 
             IVsEnumBSTR GetHandledEvents();
-            /// 
 
             bool HandlesEvent(string bstrEventName);
         }
 
-        /// 
         [ComImport(),Guid("A55CCBCC-7031-432d-B30A-A68DE7BDAD75"), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
         public interface IParameterKind {
-            /// 
 
             void SetParameterPassingMode(PARAMETER_PASSING_MODE ParamPassingMode);
-            /// 
             void SetParameterArrayDimensions(int uDimensions);
-            /// 
             int GetParameterArrayCount();
-            /// 
             int GetParameterArrayDimensions(int uIndex);
-            /// 
             int GetParameterPassingMode();
         }
 
-        /// 
         public enum PARAMETER_PASSING_MODE
         {
-            /// 
             cmParameterTypeIn = 1,
-            /// 
             cmParameterTypeOut = 2,
-            /// 
             cmParameterTypeInOut = 3
         } 
 
-        /// 
         [
         ComImport, Guid("3E596484-D2E4-461a-A876-254C4F097EBB"),
         InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)
         ]
         public interface IMethodXML
         {
-            /// 
             // Generate XML describing the contents of this function's body.
             void GetXML (ref string pbstrXML);
             
             // Parse the incoming XML with respect to the CodeModel XML schema and
             // use the result to regenerate the body of the function.
-            /// 
             [PreserveSig]
             int SetXML (string pszXML);
             
             // This is really a textpoint
-            /// 
             [PreserveSig]
             int GetBodyPoint([MarshalAs(UnmanagedType.Interface)]out object bodyPoint);
         }
 
-        /// 
         [ComImport(),Guid("EA1A87AD-7BC5-4349-B3BE-CADC301F17A3"), InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]
         public interface IVBFileCodeModelEvents {
             
-            /// 
             [PreserveSig]
             int StartEdit(); 
             
-            /// 
             [PreserveSig]
             int EndEdit();
         }
@@ -1556,14 +1406,11 @@ public interface ICodeClassBase {
         [DllImport("User32", CharSet=CharSet.Auto)]
         public static extern bool PostMessage(IntPtr hwnd, int msg, IntPtr wparam, IntPtr lparam);
 
-        /// 
         public static IntPtr GetNativeWndProc(System.Windows.Forms.Control control) {
             IntPtr handle = control.Handle;
             return GetWindowLong(new HandleRef(control, handle), GWL_WNDPROC);
         }
-        /// 
         public const int GWL_WNDPROC = (-4);
-        /// 
         //GetWindowLong won't work correctly for 64-bit: we should use GetWindowLongPtr instead.  On
         //32-bit, GetWindowLongPtr is just #defined as GetWindowLong.  GetWindowLong really should 
         //take/return int instead of IntPtr/HandleRef, but since we're running this only for 32-bit
@@ -1584,11 +1431,9 @@ public static IntPtr GetWindowLong(HandleRef hWnd, int nIndex)
         [SuppressMessage("Microsoft.Interoperability", "CA1400:PInvokeEntryPointsShouldExist")]
         [DllImport(ExternDll.User32, CharSet = CharSet.Auto, EntryPoint = "GetWindowLongPtr")]
         public static extern IntPtr GetWindowLongPtr64(HandleRef hWnd, int nIndex);
-        /// 
         [DllImport("user32.dll", CharSet = CharSet.Unicode, EntryPoint = "SetWindowLong")]
         public static extern int SetWindowLong(IntPtr hWnd, short nIndex, int value);
 
-        /// 
         /// 
         /// Changes the parent window of the specified child window.
         /// 
@@ -1737,22 +1582,16 @@ public static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter,
         [DllImport("Kernel32", ExactSpelling=true, CharSet=CharSet.Unicode)]
         public static extern int WideCharToMultiByte(int codePage, int flags, [MarshalAs(UnmanagedType.LPWStr)]string wideStr, int chars, [In,Out]byte[] pOutBytes, int bufferBytes, IntPtr defaultChar, IntPtr pDefaultUsed);
 
-        /// 
         [DllImport("user32.dll", EntryPoint = "IsDialogMessageA", SetLastError = true, CharSet = CharSet.Ansi, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
         public static extern bool IsDialogMessageA(IntPtr hDlg, ref MSG msg);
-        /// 
         [DllImport("user32.dll")]
         public static extern void SetFocus(IntPtr hwnd);
-        /// 
         [DllImport("user32.dll")]
         public static extern IntPtr GetFocus();
-        /// 
         [DllImport("user32.dll")]
         public static extern bool InvalidateRect(IntPtr hwnd, IntPtr rect, bool erase);
-        /// 
         [DllImport("user32.dll", CharSet = CharSet.Unicode, EntryPoint = "GetClientRect")]
         public static extern int GetClientRect(IntPtr hWnd, ref RECT rect);
-        /// 
         [DllImport("user32.dll", CharSet = CharSet.Auto)]
         public extern static IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);
 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Preferences.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Preferences.cs
index f9728aa375a..e34ce651df9 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Preferences.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Preferences.cs
@@ -20,17 +20,12 @@
 using IServiceProvider = System.IServiceProvider;
 
 namespace Microsoft.VisualStudio.FSharp.LanguageService {
-    /// 
     internal enum IndentingStyle {
-        /// 
         None,
-        /// 
         Block,
-        /// 
         Smart
     }
 
-    /// 
     /// 
     /// LanguagePreferences encapsulates the standard General and Tab settings for a language service
     /// and provides a way of getting and setting the values.  It is expected that you
@@ -74,7 +69,6 @@ public class LanguagePreferences : IVsTextManagerEvents2, IDisposable {
         _HighlightMatchingBraceFlags braceFlags;
         string name;
 
-        /// 
         /// 
         /// Gets the language preferences.
         /// 
@@ -84,16 +78,13 @@ internal LanguagePreferences(IServiceProvider site, Guid langSvc, string name) {
             this.name = name;
         }
 
-        /// 
         internal LanguagePreferences() { }
 
-        /// 
         protected string LanguageName {
             get { return this.name; }
             set { this.name = value; }
         }
 
-        /// 
         /// 
         /// This property is not public for a reason. If it were public it would
         /// get called during LoadSettingsFromStorage which will break it.  
@@ -104,20 +95,17 @@ protected IServiceProvider Site {
             set { this.site = value; }
         }
 
-        /// 
         public IServiceProvider GetSite() {
             return this.site;
         }
 
         // Our base language service perferences (from Babel originally)
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool EnableCodeSense {
             get { return this.enableCodeSense; }
             set { this.enableCodeSense = value; }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool EnableMatchBraces {
             get {
@@ -126,77 +114,66 @@ public bool EnableMatchBraces {
             set { this.enableMatchBraces = value; }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool EnableQuickInfo {
             get { return this.enableQuickInfo; }
             set { this.enableQuickInfo = value; }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool EnableShowMatchingBrace {
             get { return this.enableShowMatchingBrace; }
             set { this.enableShowMatchingBrace = value; }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool EnableMatchBracesAtCaret {
             get { return this.enableMatchBracesAtCaret; }
             set { this.enableMatchBracesAtCaret = value; }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public int MaxErrorMessages {
             get { return this.maxErrorMessages; }
             set { this.maxErrorMessages = value; }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public int CodeSenseDelay {
             get { return this.codeSenseDelay; }
             set { this.codeSenseDelay = value; }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool EnableAsyncCompletion {
             get { return this.enableAsyncCompletion; }
             set { this.enableAsyncCompletion = value; }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool EnableFormatSelection {
             get { return this.enableFormatSelection; }
             set { this.enableFormatSelection = value; }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool EnableCommenting {
             get { return this.enableCommenting; }
             set { this.enableCommenting = value; }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public int MaxRegionTime {
             get { return this.maxRegionTime; }
             set { this.maxRegionTime = value; }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public _HighlightMatchingBraceFlags HighlightMatchingBraceFlags {
             get { return this.braceFlags; }
             set { this.braceFlags = value; }
         }
 
-        /// 
         public virtual void Init() {
             ILocalRegistry3 localRegistry = site.GetService(typeof(SLocalRegistry)) as ILocalRegistry3;
             string root = null;
@@ -219,18 +196,15 @@ public virtual void Init() {
             localRegistry = null;
         }
 
-        /// 
         public virtual void InitUserPreferences(RegistryKey key, string name) {
             this.GetLanguagePreferences();
         }
-        /// 
         public int GetIntegerValue(RegistryKey key, string name, int def) {
             object o = key.GetValue(name);
             if (o is int) return (int)o;
             if (o is string) return int.Parse((string)o, CultureInfo.InvariantCulture);
             return def;
         }
-        /// 
         public bool GetBooleanValue(RegistryKey key, string name, bool def) {
             object o = key.GetValue(name);
             if (o is int) return ((int)o != 0);
@@ -238,7 +212,6 @@ public bool GetBooleanValue(RegistryKey key, string name, bool def) {
             return def;
         }
 
-        /// 
         public virtual void InitMachinePreferences(RegistryKey key, string name) {
             using (RegistryKey keyLanguage = key.OpenSubKey("languages\\language services\\" + name, false)) {
                 if (keyLanguage != null) {
@@ -259,70 +232,60 @@ public virtual void InitMachinePreferences(RegistryKey key, string name) {
             }
         }
 
-        /// 
         public virtual void Dispose() {
             Disconnect();
             site = null;
         }
 
         // General tab
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool AutoListMembers {
             get { return prefs.fAutoListMembers != 0; }
             set { prefs.fAutoListMembers = (uint)(value ? 1 : 0); }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool HideAdvancedMembers {
             get { return prefs.fHideAdvancedAutoListMembers != 0; }
             set { prefs.fHideAdvancedAutoListMembers = (uint)(value ? 1 : 0); }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool ParameterInformation {
             get { return prefs.fAutoListParams != 0; }
             set { prefs.fAutoListParams = (uint)(value ? 1 : 0); }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool VirtualSpace {
             get { return prefs.fVirtualSpace != 0; }
             set { prefs.fVirtualSpace = (uint)(value ? 1 : 0); }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool WordWrap {
             get { return prefs.fWordWrap != 0; }
             set { prefs.fWordWrap = (uint)(value ? 1 : 0); }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool WordWrapGlyphs {
             get { return (int)prefs.fWordWrapGlyphs != 0; }
             set { prefs.fWordWrapGlyphs = (uint)(value ? 1 : 0); }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool CutCopyBlankLines {
             get { return (int)prefs.fCutCopyBlanks != 0; }
             set { prefs.fCutCopyBlanks = (uint)(value ? 1 : 0); }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool LineNumbers {
             get { return prefs.fLineNumbers != 0; }
             set { prefs.fLineNumbers = (uint)(value ? 1 : 0); }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool EnableLeftClickForURLs {
             get { return prefs.fHotURLs != 0; }
@@ -330,48 +293,41 @@ public bool EnableLeftClickForURLs {
         }
 
         // Tabs tab
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         internal IndentingStyle IndentStyle {
             get { return (IndentingStyle)prefs.IndentStyle; }
             set { prefs.IndentStyle = (vsIndentStyle)value; }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public int TabSize {
             get { return (int)prefs.uTabSize; }
             set { prefs.uTabSize = (uint)value; }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public int IndentSize {
             get { return (int)prefs.uIndentSize; }
             set { prefs.uIndentSize = (uint)value; }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool InsertTabs {
             get { return prefs.fInsertTabs != 0; }
             set { prefs.fInsertTabs = (uint)(value ? 1 : 0); }
         }
 
-        /// 
         [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
         public bool ShowNavigationBar {
             get { return (int)prefs.fDropdownBar != 0; }
             set { prefs.fDropdownBar = (uint)(value ? 1 : 0); }
         }
 
-        /// 
         public bool AutoOutlining {
             get { return this.autoOutlining; }
             set { this.autoOutlining = value; }
         }
 
-        /// 
         public virtual void GetLanguagePreferences() {
             IVsTextManager textMgr = site.GetService(typeof(SVsTextManager)) as IVsTextManager;
             if (textMgr != null) {
@@ -389,7 +345,6 @@ public virtual void GetLanguagePreferences() {
             }
         }
 
-        /// 
         public virtual void Apply() {
             IVsTextManager2 textMgr2 = site.GetService(typeof(SVsTextManager)) as IVsTextManager2;
             if (textMgr2 != null) {
@@ -418,37 +373,27 @@ private void Disconnect() {
             }
         }
 
-        #region IVsTextManagerEvents2 Members
-
-        /// 
         public virtual int OnRegisterMarkerType(int iMarkerType) {
             return NativeMethods.S_OK;
         }
-        /// 
         public virtual int OnRegisterView(IVsTextView view) {
             return NativeMethods.S_OK;
         }
-        /// 
         public virtual int OnUnregisterView(IVsTextView view) {
             return NativeMethods.S_OK;
         }
-        /// 
         public virtual int OnReplaceAllInFilesBegin() {
             return NativeMethods.S_OK;
         }
-        /// 
         public virtual int OnReplaceAllInFilesEnd() {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int OnUserPreferencesChanged2(VIEWPREFERENCES2[] viewPrefs, FRAMEPREFERENCES2[] framePrefs, LANGPREFERENCES2[] langPrefs, FONTCOLORPREFERENCES2[] fontColorPrefs) {
             if (langPrefs != null && langPrefs.Length > 0 && langPrefs[0].guidLang == this.langSvc) {
                 this.prefs = langPrefs[0];
             }
             return NativeMethods.S_OK;
         }
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Properties/AssemblyInfo.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Properties/AssemblyInfo.cs
index c967b77ca3a..70761862c06 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Properties/AssemblyInfo.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Properties/AssemblyInfo.cs
@@ -36,7 +36,7 @@
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
 
-[assembly:AssemblyVersion("12.0.0.9055")]       // The assembly version for THE OSS BUILD
-[assembly:AssemblyFileVersion("12.0.0.9055")]
+[assembly:AssemblyVersion("14.0.0.9055")]       // The assembly version for THE OSS BUILD
+[assembly:AssemblyFileVersion("14.0.0.9055")]
 
 [assembly: CLSCompliant(true)]
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Source.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Source.cs
index f569ee77355..31e4c3f4702 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Source.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Source.cs
@@ -622,8 +622,6 @@ void AddDirty(TextSpan span)
         public abstract string OriginalFilename { get; }
 #endif
 
-        #region Reformatting
-
         /// 
         /// This method formats the given span using the given EditArray. The default behavior does nothing.  
         /// So you need to override this method if you want formatting to work.  
@@ -634,10 +632,6 @@ public void ReformatSpan(EditArray mgr, TextSpan span)
         {
         }
 
-        #endregion
-
-        #region Commenting
-
         // Implemented in Source.fs
         /// Implement this method to provide different comment delimiters.
         public abstract CommentInfo GetCommentFormat();
@@ -774,10 +768,6 @@ public TextSpan UncommentBlock(TextSpan span, string blockStart, string blockEnd
             return result;
         }
 
-
-        #endregion
-
-        #region IVsTextLinesEvents
         public void OnChangeLineText(TextLineChange[] lineChange, int last)
         {
             TextSpan span = new TextSpan();
@@ -794,7 +784,6 @@ public void OnChangeLineText(TextLineChange[] lineChange, int last)
         public void OnChangeLineAttributes(int firstLine, int lastLine)
         {
         }
-        #endregion
 
 
         //===================================================================================
@@ -1974,7 +1963,6 @@ public bool OutliningEnabled
             }
         }
 
-        #region IVsHiddenTextClient
         public void OnHiddenRegionChange(IVsHiddenRegion region, HIDDEN_REGION_EVENT evt, int fBufferModifiable)
         {
         }
@@ -2012,14 +2000,8 @@ public int MakeBaseSpanVisible(IVsHiddenRegion region, TextSpan[] span)
         public void OnBeforeSessionEnd()
         {
         }
-        #endregion
-
-        #region IVsUserDataEvents Members
 
         public abstract void OnUserDataChange(ref Guid riidKey, object vtNewValue);
-
-        #endregion
-
     }
 
     /// 
@@ -2267,7 +2249,6 @@ public char OnAutoComplete()
             return '\0';
         }
 
-        #region IVsCompletionSet
         //--------------------------------------------------------------------------
         //IVsCompletionSet methods
         //--------------------------------------------------------------------------
@@ -2451,9 +2432,6 @@ public void Dismiss()
             this.displayed = false;
             this.Close();
         }
-        #endregion
-
-        #region IVsCompletionSetEx Members
 
         public int CompareItems(string bstrSoFar, string bstrOther, int lCharactersToCompare, out int plResult)
         {
@@ -2496,8 +2474,6 @@ public int OnCommitComplete()
             }
             return NativeMethods.S_OK;
         }
-
-        #endregion
     }
 
     //-------------------------------------------------------------------------------------
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/UnsafeNativeMethods.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/UnsafeNativeMethods.cs
index 6eeeb38c3d5..e82f2a84e22 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/UnsafeNativeMethods.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/UnsafeNativeMethods.cs
@@ -216,14 +216,6 @@ internal static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter,
         [DllImport("shell32.dll", EntryPoint = "DragQueryFileW", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
         public static extern uint DragQueryFile(IntPtr hDrop, uint iFile, char[] lpszFile, uint cch);
 
-        ///////////// UNUSED
-
-#if false
-        [DllImport(ExternDll.Oleaut32, PreserveSig=false)]
-        public static extern UCOMITypeLib LoadRegTypeLib(ref Guid clsid, int majorVersion, int minorVersion, int lcid);
-
-        #endif
-        
     }
 }
 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Utilities.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Utilities.cs
index e09b8bd5436..6b493b36543 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Utilities.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/Utilities.cs
@@ -29,31 +29,26 @@ internal static void RaiseComError(int hr, string message)
         }
     }
 
-    /// 
     internal sealed class TextSpanHelper
     {
 
         private TextSpanHelper() { }
 
-        /// 
         /// Returns true if the first span starts after the start of the second span.
         internal static bool StartsAfterStartOf(TextSpan span1, TextSpan span2)
         {
             return (span1.iStartLine > span2.iStartLine || (span1.iStartLine == span2.iStartLine && span1.iStartIndex >= span2.iStartIndex));
         }
-        /// 
         /// Returns true if the first span starts after the end of the second span.
         internal static bool StartsAfterEndOf(TextSpan span1, TextSpan span2)
         {
             return (span1.iStartLine > span2.iEndLine || (span1.iStartLine == span2.iEndLine && span1.iStartIndex >= span2.iEndIndex));
         }
-        /// 
         /// Returns true if the first span starts before the start of the second span.
         internal static bool StartsBeforeStartOf(TextSpan span1, TextSpan span2)
         {
             return !StartsAfterStartOf(span1, span2);
         }
-        /// 
         /// Returns true if the first span starts before the end of the second span.
         internal static bool StartsBeforeEndOf(TextSpan span1, TextSpan span2)
         {
@@ -61,33 +56,28 @@ internal static bool StartsBeforeEndOf(TextSpan span1, TextSpan span2)
                 (span1.iStartLine == span2.iEndLine && span1.iStartIndex < span2.iEndIndex));
         }
 
-        /// 
         /// Returns true if the first span ends before the start of the second span.
         internal static bool EndsBeforeStartOf(TextSpan span1, TextSpan span2)
         {
             return (span1.iEndLine < span2.iStartLine || (span1.iEndLine == span2.iStartLine && span1.iEndIndex <= span2.iStartIndex));
         }
-        /// 
         /// Returns true if the first span starts before the end of the second span.
         internal static bool EndsBeforeEndOf(TextSpan span1, TextSpan span2)
         {
             return (span1.iEndLine < span2.iEndLine || (span1.iEndLine == span2.iEndLine && span1.iEndIndex <= span2.iEndIndex));
         }
-        /// 
         /// Returns true if the first span ends after the start of the second span.
         internal static bool EndsAfterStartOf(TextSpan span1, TextSpan span2)
         {
             return (span1.iEndLine > span2.iStartLine ||
                 (span1.iEndLine == span2.iStartLine && span1.iEndIndex > span2.iStartIndex));
         }
-        /// 
         /// Returns true if the first span starts after the end of the second span.
         internal static bool EndsAfterEndOf(TextSpan span1, TextSpan span2)
         {
             return !EndsBeforeEndOf(span1, span2);
         }
 
-        /// 
         internal static TextSpan Merge(TextSpan span1, TextSpan span2)
         {
             TextSpan span = new TextSpan();
@@ -116,23 +106,19 @@ internal static TextSpan Merge(TextSpan span1, TextSpan span2)
 
             return span;
         }
-        /// 
         internal static bool IsPositive(TextSpan span)
         {
             return (span.iStartLine < span.iEndLine || (span.iStartLine == span.iEndLine && span.iStartIndex <= span.iEndIndex));
         }
-        /// 
         internal static void Clear(ref TextSpan span)
         {
             span.iStartLine = span.iEndLine = 0;
             span.iStartIndex = span.iEndIndex = 0;
         }
-        /// 
         internal static bool IsEmpty(TextSpan span)
         {
             return (span.iStartLine == span.iEndLine) && (span.iStartIndex == span.iEndIndex);
         }
-        /// 
         internal static void MakePositive(ref TextSpan span)
         {
             if (!IsPositive(span))
@@ -150,7 +136,6 @@ internal static void MakePositive(ref TextSpan span)
 
             return;
         }
-        /// 
         /// Pins the text span to valid line bounds returned from IVsTextLines.
         internal static void Normalize(ref  TextSpan span, IVsTextLines textLines)
         {
@@ -177,14 +162,12 @@ internal static void Normalize(ref  TextSpan span, IVsTextLines textLines)
             span.iEndIndex = Math.Min(span.iEndIndex, lineLength);
         }
 
-        /// 
         internal static bool IsSameSpan(TextSpan span1, TextSpan span2)
         {
             return span1.iStartLine == span2.iStartLine && span1.iStartIndex == span2.iStartIndex && span1.iEndLine == span2.iEndLine && span1.iEndIndex == span2.iEndIndex;
         }
 
         // Returns true if the given position is to left of textspan.
-        /// 
         internal static bool IsBeforeStartOf(TextSpan span, int line, int col)
         {
             if (line < span.iStartLine || (line == span.iStartLine && col < span.iStartIndex))
@@ -195,7 +178,6 @@ internal static bool IsBeforeStartOf(TextSpan span, int line, int col)
         }
 
         // Returns true if the given position is to right of textspan.
-        /// 
         internal static bool IsAfterEndOf(TextSpan span, int line, int col)
         {
             if (line > span.iEndLine || (line == span.iEndLine && col > span.iEndIndex))
@@ -206,7 +188,6 @@ internal static bool IsAfterEndOf(TextSpan span, int line, int col)
         }
 
         // Returns true if the given position is at the edge or inside the span.
-        /// 
         internal static bool ContainsInclusive(TextSpan span, int line, int col)
         {
             if (line > span.iStartLine && line < span.iEndLine)
@@ -225,7 +206,6 @@ internal static bool ContainsInclusive(TextSpan span, int line, int col)
         }
 
         // Returns true if the given position is purely inside the span.
-        /// 
         internal static bool ContainsExclusive(TextSpan span, int line, int col)
         {
             if (line > span.iStartLine && line < span.iEndLine)
@@ -244,7 +224,6 @@ internal static bool ContainsExclusive(TextSpan span, int line, int col)
         }
 
         //returns true is span1 is Embedded in span2
-        /// 
         internal static bool IsEmbedded(TextSpan span1, TextSpan span2)
         {
             return (!TextSpanHelper.IsSameSpan(span1, span2) &&
@@ -252,7 +231,6 @@ internal static bool IsEmbedded(TextSpan span1, TextSpan span2)
                     TextSpanHelper.EndsBeforeEndOf(span1, span2));
         }
 
-        /// 
         internal static bool Intersects(TextSpan span1, TextSpan span2)
         {
             return TextSpanHelper.StartsBeforeEndOf(span1, span2) &&
@@ -261,7 +239,6 @@ internal static bool Intersects(TextSpan span1, TextSpan span2)
 
         // This method simulates what VS does in debug mode so that we can catch the
         // errors in managed code before they go to the native debug assert.
-        /// 
         internal static bool ValidSpan(ISource src, TextSpan span)
         {
             if (!ValidCoord(src, span.iStartLine, span.iStartIndex))
@@ -277,7 +254,6 @@ internal static bool ValidSpan(ISource src, TextSpan span)
             return true;
         }
 
-        /// 
         internal static bool ValidCoord(ISource src, int line, int pos)
         {
             // validate line
@@ -315,112 +291,62 @@ internal static bool ValidCoord(ISource src, int line, int pos)
         }
     }
 
-    /// 
     internal struct Variant
     {
 
-        /// 
         internal enum VariantType
         {
-            /// 
             VT_EMPTY = 0,
-            /// 
             VT_NULL = 1,
-            /// 
             VT_I2 = 2,
-            /// 
             VT_I4 = 3,
-            /// 
             VT_R4 = 4,
-            /// 
             VT_R8 = 5,
-            /// 
             VT_CY = 6,
-            /// 
             VT_DATE = 7,
-            /// 
             VT_BSTR = 8,
-            /// 
             VT_DISPATCH = 9,
-            /// 
             VT_ERROR = 10,
-            /// 
             VT_BOOL = 11,
-            /// 
             VT_VARIANT = 12,
-            /// 
             VT_UNKNOWN = 13,
-            /// 
             VT_DECIMAL = 14,
-            /// 
             VT_I1 = 16,
-            /// 
             VT_UI1 = 17,
-            /// 
             VT_UI2 = 18,
-            /// 
             VT_UI4 = 19,
-            /// 
             VT_I8 = 20,
-            /// 
             VT_UI8 = 21,
-            /// 
             VT_INT = 22,
-            /// 
             VT_UINT = 23,
-            /// 
             VT_VOID = 24,
-            /// 
             VT_HRESULT = 25,
-            /// 
             VT_PTR = 26,
-            /// 
             VT_SAFEARRAY = 27,
-            /// 
             VT_CARRAY = 28,
-            /// 
             VT_USERDEFINED = 29,
-            /// 
             VT_LPSTR = 30,
-            /// 
             VT_LPWSTR = 31,
-            /// 
             VT_FILETIME = 64,
-            /// 
             VT_BLOB = 65,
-            /// 
             VT_STREAM = 66,
-            /// 
             VT_STORAGE = 67,
-            /// 
             VT_STREAMED_OBJECT = 68,
-            /// 
             VT_STORED_OBJECT = 69,
-            /// 
             VT_BLOB_OBJECT = 70,
-            /// 
             VT_CF = 71,
-            /// 
             VT_CLSID = 72,
-            /// 
             VT_VECTOR = 0x1000,
-            /// 
             VT_ARRAY = 0x2000,
-            /// 
             VT_BYREF = 0x4000,
-            /// 
             VT_RESERVED = 0x8000,
-            /// 
             VT_ILLEGAL = 0xffff,
-            /// 
             VT_ILLEGALMASKED = 0xfff,
-            /// 
             VT_TYPEMASK = 0xfff
         };
 
         private ushort vt;
 
-        /// 
         internal VariantType Vt
         {
             get
@@ -435,7 +361,6 @@ internal VariantType Vt
 
         private long value;
 
-        /// 
         internal long Value
         {
             get
@@ -448,7 +373,6 @@ internal long Value
             }
         }
 
-        /// 
         internal static Variant ToVariant(IntPtr ptr)
         {
             // Marshal.GetObjectForNativeVariant is doing way too much work.
@@ -471,7 +395,6 @@ internal static Variant ToVariant(IntPtr ptr)
             return new Variant();
         }
 
-        /// 
         internal char ToChar()
         {
             if (this.Vt == VariantType.VT_UI2)
@@ -484,10 +407,8 @@ internal char ToChar()
 
     }
 
-    /// 
     internal sealed class FilePathUtilities
     {
-        /// 
         /// 
         /// Get path for text buffer.
         /// 
@@ -503,7 +424,6 @@ internal static string GetFilePath(IVsTextLines textLines)
             return GetFilePathInternal(textLines);
         }
 
-        /// 
         /// 
         /// Get file path for an object that is implementing IVsUserData.
         /// 
@@ -555,7 +475,6 @@ internal static string GetFilePathInternal(object obj)
             return fname;
         }
 
-        /// 
         /// This method returns the file extension in lower case, including the "."
         /// and trims any blanks or null characters from the string.  Null's can creep in via
         /// interop if we get a badly formed BSTR
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/ViewFilter.cs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/ViewFilter.cs
index 306939f82fd..f60ca03fabe 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/ViewFilter.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.Base/ViewFilter.cs
@@ -20,7 +20,6 @@
 using Microsoft.VisualStudio.FSharp.LanguageService; 
 
 namespace Microsoft.VisualStudio.FSharp.LanguageService {
-    /// 
     /// 
     /// ViewFilter provides a default implementation of IVsTextViewFilter providing a
     /// handling of the following VS commands:
@@ -64,16 +63,19 @@ public class ViewFilter : IVsTextViewFilter, IVsTextViewEvents, IOleCommandTarge
         private IntPtr pvaChar;
         private bool gotEnterKey;
         private bool snippetBound;
-        private VsCommands gotoCmd; 
+        private VsCommands gotoCmd;
+        private readonly Guid guidInteractive = new Guid("8B9BF77B-AF94-4588-8847-2EB2BFFD29EB");
+        private readonly uint cmdIDDebugSelection = 0x01;
 
-        /// 
         protected bool SnippetBound {
             get { return snippetBound; }
             set { snippetBound = value; }
         }
+
         private NativeMethods.ConnectionPointCookie expansionEvents;
-#if FX_ATLEAST_45
+
         private Microsoft.VisualStudio.Shell.Package projectSystemPackage = null;
+
         private Microsoft.VisualStudio.Shell.Package GetProjectSystemPackage()
         {
             // Ideally the FsiToolWindow would be a part of the language service, but right now its code lives in the
@@ -89,8 +91,7 @@ private Microsoft.VisualStudio.Shell.Package GetProjectSystemPackage()
             }
             return this.projectSystemPackage;
         }
-#endif
-        /// 
+
         internal ViewFilter(CodeWindowManager mgr, IVsTextView view) {
             this.pvaChar = IntPtr.Zero;
             this.mgr = mgr;
@@ -111,7 +112,6 @@ internal ViewFilter(CodeWindowManager mgr, IVsTextView view) {
             }
         }
 
-        /// 
         ~ViewFilter() {
             Dispose();
 #if LANGTRACE
@@ -119,7 +119,6 @@ internal ViewFilter(CodeWindowManager mgr, IVsTextView view) {
 #endif
         }
 
-        /// 
         public virtual void Dispose() {
             this.textView = null;
             this.service = null;
@@ -133,7 +132,6 @@ public virtual void Dispose() {
             GC.SuppressFinalize(this); // REVIEW: Why this?
         }
 
-        /// 
         public virtual void Close() {
 #if LANGTRACE
             Trace.WriteLine("ViewFilter::Close");
@@ -160,33 +158,25 @@ public virtual void Close() {
         }
         const int SizeOfVariant = 16;
 
-        #region IVsExpansionEvents Members
-
-        /// 
         public virtual int OnAfterSnippetsKeyBindingChange(uint dwCmdGuid, uint dwCmdId, int fBound) {
             this.snippetBound = fBound == 0 ? false : true;
             return VSConstants.S_OK;
         }
 
-        /// 
         public virtual int OnAfterSnippetsUpdate() {
             return VSConstants.S_OK;
         }
 
-        #endregion
-        /// 
         /// Returnt the CodeWindowManager that created this view filter.
         public CodeWindowManager CodeWindowManager {
             get { return this.mgr; }
         }
 
-        /// 
         /// Return the Source object encapsulating the text buffer.
         internal ISource Source {
             get { return this.source; }
         }
 
-        /// 
         /// Get or set the TextTipData object used for displaying tool tips.
         public TextTipData TextTipData {
             get {
@@ -198,25 +188,21 @@ public TextTipData TextTipData {
             set { this.textTipData = value; }
         }
 
-        /// 
         /// Return the IVsTextView associated with this filter.
         public IVsTextView TextView {
             get { return this.textView; }
         }
 
-		/// 
-		public virtual bool IsExpansionUIActive {
-			get {
-				IVsTextViewEx tve = this.textView as IVsTextViewEx;
-				if (tve != null && tve.IsExpansionUIActive() == VSConstants.S_OK) {
-					return true;
-				}
-				return false;
-			}
-		}
-
-        #region IVsTextViewFilter methods
-        /// 
+        public virtual bool IsExpansionUIActive {
+            get {
+                IVsTextViewEx tve = this.textView as IVsTextViewEx;
+                if (tve != null && tve.IsExpansionUIActive() == VSConstants.S_OK) {
+                    return true;
+                }
+                return false;
+            }
+        }
+
         /// Returns the result of Source.GetWordExtent.
         public virtual int GetWordExtent(int line, int index, uint flags, TextSpan[] span) {
             Debug.Assert(line >= 0 && index >= 0);
@@ -239,7 +225,6 @@ public virtual int GetWordExtent(int line, int index, uint flags, TextSpan[] spa
             return NativeMethods.S_OK;
         }
 
-        /// 
         /// 
         /// If Preferences.EnableQuickInfo is true then this method kicks of a parse with the 
         /// reason BackgroundRequestReason.QuickInfo to find information about the current token.  If the
@@ -295,7 +280,6 @@ internal void GetDataTipResponse(BackgroundRequest req)
             }
         }
 
-        /// 
         public virtual int GetPairExtents(int line, int index, TextSpan[] span) {
             Debug.Assert(line >= 0 && index >= 0);
             // This call from VS does not support returning E_PENDING.
@@ -305,36 +289,27 @@ public virtual int GetPairExtents(int line, int index, TextSpan[] span) {
             TextSpanHelper.MakePositive(ref span[0]);
             return NativeMethods.S_OK;
         }
-        #endregion
 
-        #region IVsTextViewEvents methods
-        /// 
         public virtual void OnChangeCaretLine(IVsTextView view, int line, int col) {
         }
 
-        /// 
         public virtual void OnChangeScrollInfo(IVsTextView view, int iBar, int iMinUnit, int iMaxUnits, int iVisibleUnits, int iFirstVisibleUnit) {
         }
 
-        /// 
         public virtual void OnKillFocus(IVsTextView view) {
             this.service.OnActiveViewLostFocus(view);
             this.mgr.OnKillFocus(view);
         }
 
-        /// 
         public virtual void OnSetBuffer(IVsTextView view, IVsTextLines buffer) {
             Debug.Assert(buffer == this.mgr.Source.GetTextLines());
         }
 
-        /// 
         public virtual void OnSetFocus(IVsTextView view) {
             this.service.OnActiveViewChanged(view);
             if (this.mgr != null) this.mgr.OnSetFocus(view); // is null during shutdown.
         }
-        #endregion
 
-        /// 
         /// 
         /// Override this method to intercept the IOleCommandTarget::QueryStatus call.
         /// 
@@ -344,100 +319,115 @@ public virtual void OnSetFocus(IVsTextView view) {
         /// OLECMDF_ENABLED | OLECMDF_SUPPORTED.  
         /// Return E_FAIL if want to delegate to the next command target.
         /// 
-        protected virtual int QueryCommandStatus(ref Guid guidCmdGroup, uint nCmdId) {
+        protected virtual int QueryCommandStatus(ref Guid guidCmdGroup, uint nCmdId)
+        {
             ExpansionProvider ep = GetExpansionProvider();
-            if (ep != null && ep.InTemplateEditingMode) {
+            if (ep != null && ep.InTemplateEditingMode)
+            {
                 int hr = 0;
                 if (ep.HandleQueryStatus(ref guidCmdGroup, nCmdId, out hr))
                     return hr;
             }
-            if (guidCmdGroup == typeof(VsCommands).GUID) {
+            if (guidCmdGroup == typeof(VsCommands).GUID)
+            {
                 VsCommands cmd = (VsCommands)nCmdId;
 
-                switch (cmd) {
-                    case VsCommands.GotoDefn:
-                    case VsCommands.GotoDecl:
-                    case VsCommands.GotoRef:
-                    case VsCommands.Goto:
-                        return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
+                switch (cmd)
+                {
+                case VsCommands.GotoDefn:
+                case VsCommands.GotoDecl:
+                case VsCommands.GotoRef:
+                case VsCommands.Goto:
+                    return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
                 }
-            } else if (guidCmdGroup == typeof(VsCommands2K).GUID) {
+            }
+            else if (guidCmdGroup == typeof(VsCommands2K).GUID)
+            {
                 VsCommands2K cmd = (VsCommands2K)nCmdId;
 
-                switch (cmd) {
-                    case VsCommands2K.FORMATDOCUMENT:
-                        if (this.CanReformat())
-                            return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
-                        break;
-                    case VsCommands2K.FORMATSELECTION:
-                        if (this.CanReformat())
-                            return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
-                        break;
-
-                    case VsCommands2K.COMMENT_BLOCK:
-                    case VsCommands2K.UNCOMMENT_BLOCK:
-                        if (this.commentSupported)
-                            return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
-                        break;
-
-                    case VsCommands2K.SHOWMEMBERLIST:
-                    case VsCommands2K.COMPLETEWORD:
-                    case VsCommands2K.PARAMINFO:
+                switch (cmd)
+                {
+                case VsCommands2K.FORMATDOCUMENT:
+                    if (this.CanReformat())
                         return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
+                    break;
+                case VsCommands2K.FORMATSELECTION:
+                    if (this.CanReformat())
+                        return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
+                    break;
 
-                    case VsCommands2K.QUICKINFO:
-                        if (this.service.Preferences.EnableQuickInfo) {
-                            return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
-                        }
-                        break;
+                case VsCommands2K.COMMENT_BLOCK:
+                case VsCommands2K.UNCOMMENT_BLOCK:
+                    if (this.commentSupported)
+                        return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
+                    break;
 
-                    //                    case VsCommands2K.HANDLEIMEMESSAGE:
-                    //                        return 0;
-
-                    // Let the core editor handle this.  Stop outlining also removes user
-                    // defined hidden sections so it is handy to keep this enabled.
-                    //                    case VsCommands2K.OUTLN_STOP_HIDING_ALL: 
-                    //                        int rc = (int)OLECMDF.OLECMDF_SUPPORTED;
-                    //                        if (this.source.OutliningEnabled) {
-                    //                            rc |= (int)OLECMDF.OLECMDF_ENABLED;
-                    //                        }
-                    //                        return rc;
+                case VsCommands2K.SHOWMEMBERLIST:
+                case VsCommands2K.COMPLETEWORD:
+                case VsCommands2K.PARAMINFO:
+                    return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
 
-                    case VsCommands2K.OUTLN_START_AUTOHIDING:
-                        if (this.source.OutliningEnabled) {
-                            return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
-                        }
+                case VsCommands2K.QUICKINFO:
+                    if (this.service.Preferences.EnableQuickInfo)
+                    {
                         return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
-                        
-                    case VsCommands2K.OUTLN_STOP_HIDING_ALL: //"stop outlining" on context menu
-                        if (this.source.OutliningEnabled) {
-                            return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
-                        }
+                    }
+                    break;
+
+                //                    case VsCommands2K.HANDLEIMEMESSAGE:
+                //                        return 0;
+
+                // Let the core editor handle this.  Stop outlining also removes user
+                // defined hidden sections so it is handy to keep this enabled.
+                //                    case VsCommands2K.OUTLN_STOP_HIDING_ALL: 
+                //                        int rc = (int)OLECMDF.OLECMDF_SUPPORTED;
+                //                        if (this.source.OutliningEnabled) {
+                //                            rc |= (int)OLECMDF.OLECMDF_ENABLED;
+                //                        }
+                //                        return rc;
+
+                case VsCommands2K.OUTLN_START_AUTOHIDING:
+                    if (this.source.OutliningEnabled)
+                    {
                         return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
+                    }
+                    return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
+
+                case VsCommands2K.OUTLN_STOP_HIDING_ALL: //"stop outlining" on context menu
+                    if (this.source.OutliningEnabled)
+                    {
+                        return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
+                    }
+                    return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
                 }
             }
-#if FX_ATLEAST_45
             else if (guidCmdGroup == Microsoft.VisualStudio.VSConstants.VsStd11)
             {
                 if (nCmdId == (uint)Microsoft.VisualStudio.VSConstants.VSStd11CmdID.ExecuteSelectionInInteractive)
                 {
-                    string selection;
-                    this.textView.GetSelectedText(out selection);
-                    if (selection == "")
-                        return (int)OLECMDF.OLECMDF_SUPPORTED;
-                    else
-                        return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
+                    return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
                 }
                 else if (nCmdId == (uint)Microsoft.VisualStudio.VSConstants.VSStd11CmdID.ExecuteLineInInteractive)
                 {
-                    return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
+                    return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED | (int)OLECMDF.OLECMDF_DEFHIDEONCTXTMENU;
                 }
             }
-#endif
+            else if (guidCmdGroup == guidInteractive)
+            {
+                if (nCmdId == cmdIDDebugSelection)
+                {
+                    var dbgState = Interactive.Hooks.GetDebuggerState(GetProjectSystemPackage());
+
+                    if (dbgState == Interactive.FsiDebuggerState.AttachedNotToFSI)
+                        return (int)OLECMDF.OLECMDF_INVISIBLE;
+                    else
+                        return (int)OLECMDF.OLECMDF_SUPPORTED | (int)OLECMDF.OLECMDF_ENABLED;
+                }
+            }
+
             return (int)NativeMethods.E_FAIL; // delegate to next command target.
         }
 
-        /// 
         /// 
         /// The parameter list of a command is queried by calling Exec with the LOWORD
         /// of nCmdexecopt set to OLECMDEXECOPT_SHOWHELP (instead of the more usual
@@ -465,7 +455,6 @@ protected virtual int QueryParameterList(ref Guid guidCmdGroup, uint nCmdId, uin
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
 
-        /// 
         public virtual bool HandlePreExec(ref Guid guidCmdGroup, uint nCmdId, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut) {
             
             this.wasCompletionActive = this.Source.IsCompletorActive;
@@ -550,25 +539,31 @@ public virtual bool HandlePreExec(ref Guid guidCmdGroup, uint nCmdId, uint nCmde
 
                 }
             }
-#if FX_ATLEAST_45
             else if (guidCmdGroup == Microsoft.VisualStudio.VSConstants.VsStd11)
             {
                 if (nCmdId == (uint)Microsoft.VisualStudio.VSConstants.VSStd11CmdID.ExecuteSelectionInInteractive)
                 {
-                    Microsoft.VisualStudio.FSharp.Interactive.Hooks.OnMLSend(GetProjectSystemPackage(), false, null, null);
+                    Interactive.Hooks.OnMLSend(GetProjectSystemPackage(), Interactive.FsiEditorSendAction.ExecuteSelection, null, null);
                     return true;
                 }
                 else if (nCmdId == (uint)Microsoft.VisualStudio.VSConstants.VSStd11CmdID.ExecuteLineInInteractive)
                 {
-                    Microsoft.VisualStudio.FSharp.Interactive.Hooks.OnMLSend(GetProjectSystemPackage(), true, null, null);
+                    Interactive.Hooks.OnMLSend(GetProjectSystemPackage(), Interactive.FsiEditorSendAction.ExecuteLine, null, null);
                     return true;
                 }
             }
-#endif
+            else if (guidCmdGroup == guidInteractive)
+            {
+                if (nCmdId == cmdIDDebugSelection)
+                {
+                    Interactive.Hooks.OnMLSend(GetProjectSystemPackage(), Interactive.FsiEditorSendAction.DebugSelection, null, null);
+                    return true;
+                }
+            }
+
             return false;
         }
 
-        /// 
         /// This method hooks up HandleSmartIndent and Source.OnCommand.  
         public virtual void HandlePostExec(ref Guid guidCmdGroup, uint nCmdId, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut, bool bufferWasChanged) {
 
@@ -646,7 +641,6 @@ public virtual void HandlePostExec(ref Guid guidCmdGroup, uint nCmdId, uint nCmd
         [DllImport("oleaut32", PreserveSig = false)]
         static extern void VariantClear(IntPtr pObject);
 
-        /// 
         /// 
         /// Override this method to intercept the IOleCommandTarget::Exec call.
         /// 
@@ -711,7 +705,6 @@ protected virtual int InnerExec(ref Guid guidCmdGroup, uint nCmdId, uint nCmdexe
             return this.nextTarget.Exec(ref guidCmdGroup, nCmdId, nCmdexecopt, pvaIn, pvaOut);
         }
 
-        /// 
         public virtual void OnAutoComplete() {
             this.autoCompletedNothing = false;
             this.autoCompleteTypeChar = false;
@@ -733,7 +726,6 @@ public virtual void OnAutoComplete() {
             this.autoCompleted = true;
         }
 
-        /// 
         // Executes a VsCommands2K.TYPECHAR command on the current command chain.
         public int TypeChar(char ch) {
 
@@ -755,7 +747,6 @@ public int TypeChar(char ch) {
             return rc;
         }
 
-        /// 
         /// Override this method if you want to support smart indenting.
         /// This will only be called if Preferences.Indenting == IndentingStyle.Smart which is
         /// only available if you set your language service registry key ShowSmartIndent to 1.
@@ -763,8 +754,6 @@ public virtual bool HandleSmartIndent() {
             return false;
         }
 
-        #region IOleCommandTarget methods
-        /// 
         /// 
         int IOleCommandTarget.QueryStatus(ref Guid guidCmdGroup, uint cCmds, OLECMD[] prgCmds, IntPtr pCmdText) {
             for (uint i = 0; i < cCmds; i++) {
@@ -788,7 +777,6 @@ int IOleCommandTarget.QueryStatus(ref Guid guidCmdGroup, uint cCmds, OLECMD[] pr
             return NativeMethods.S_OK;
         }
 
-        /// 
         /// 
         int IOleCommandTarget.Exec(ref Guid guidCmdGroup, uint nCmdId, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut) {
 
@@ -825,9 +813,7 @@ int IOleCommandTarget.Exec(ref Guid guidCmdGroup, uint nCmdId, uint nCmdexecopt,
             }
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
-        #endregion
 
-        /// 
         /// This method is called to handle the VsCommands2K.QUICKINFO command.
         public virtual void HandleQuickInfo(int line, int col) {
             // Get the tip text at that location. 
@@ -879,7 +865,6 @@ void HandleQuickInfoResponse(BackgroundRequest req){
             textTipData.Update(fullText, iPos, iLength, this.textView);
         }
 
-        /// 
         /// This method checks to see if the IVsDebugger is running, and if so, 
         /// calls it to get additional information about the current token and returns a combined result.
         /// You can return an HRESULT here like TipSuccesses2.TIP_S_NODEFAULTTIP.
@@ -939,7 +924,6 @@ public virtual int GetFullDataTipText(string textValue, TextSpan ts, out string
 
         }
 
-        /// 
         /// Creates the TextTipData object and returns it
         public virtual TextTipData CreateTextTipData() {
             // create it 
@@ -947,7 +931,6 @@ public virtual TextTipData CreateTextTipData() {
 
         }
 
-        /// 
         /// Handles VsCommands.GotoDefn, VsCommands.GotoDecl and VsCommands.GotoRef by
         /// calling OnSyncGoto on the Source object and opening the text editor on the resulting
         /// URL, then scrolling to the resulting span.
@@ -1030,12 +1013,10 @@ private void ShowErrorMessageBox(string message)
             NativeMethods.ThrowOnFailure(hr);
         }
 
-        /// 
         public virtual ExpansionProvider GetExpansionProvider() {
             return this.source.GetExpansionProvider();
         }
 
-        /// 
         public virtual void ShowContextMenu(int menuId, Guid groupGuid, IOleCommandTarget target) {
             IVsUIShell uiShell = this.service.GetService(typeof(SVsUIShell)) as IVsUIShell;
             if (uiShell != null && !this.service.IsMacroRecordingOn()) { // disable context menu while recording macros.
@@ -1051,10 +1032,7 @@ public virtual void ShowContextMenu(int menuId, Guid groupGuid, IOleCommandTarge
             uiShell = null;
         }
 
-        #region CommentSelection
-
         // Special View filter command handling.
-        /// 
         public virtual void CommentSelection() {
             if (this.service == null) return;
 
@@ -1064,7 +1042,6 @@ public virtual void CommentSelection() {
             NativeMethods.ThrowOnFailure(this.textView.SetSelection(span.iStartLine, span.iStartIndex, span.iEndLine, span.iEndIndex));
         }
 
-        /// 
         /// Returns the current selection, adjusted to become a positive text span
         public TextSpan GetSelection() {
             //get text range
@@ -1076,7 +1053,6 @@ public TextSpan GetSelection() {
             return aspan[0];
         }
 
-        /// 
         public virtual void UncommentSelection() {
             //get text range
             TextSpan span = GetSelection();
@@ -1086,12 +1062,7 @@ public virtual void UncommentSelection() {
             NativeMethods.ThrowOnFailure(textView.SetSelection(span.iStartLine, span.iStartIndex, span.iEndLine, span.iEndIndex));
 
         }
-        #endregion
-
-
-        #region Reformat
 
-        /// 
         public virtual void ReformatDocument() {
             if (this.CanReformat()) {
                 Debug.Assert(this.source != null);
@@ -1105,7 +1076,6 @@ public virtual void ReformatDocument() {
             }
         }
 
-        /// 
         public virtual void ReformatSelection() {
             if (this.CanReformat()) {
                 Debug.Assert(this.source != null);
@@ -1125,7 +1095,6 @@ public virtual void ReformatSelection() {
             }
         }
 
-        /// 
         /// This method returns true if the FormatDocument and FormatSelection commands
         /// are to be enabled.  Default returns false if debugging, otherwise it returns
         /// the result for Preferences.EnableFormatSelection.
@@ -1134,12 +1103,8 @@ public virtual bool CanReformat() {
             if (this.service.IsDebugging) return false;
             return this.service.Preferences.EnableFormatSelection;
         }
-
-        #endregion
-
     }
 
-    /// 
     /// This class provides a default implementation of IVsTextTipData for
     /// use in the IVsTextTipWindow for displaying tool tips.
     [CLSCompliant(false)]
@@ -1151,7 +1116,6 @@ public class TextTipData : IVsTextTipData {
         string text;
         bool isWindowUp;
 
-        /// 
         internal TextTipData(IServiceProvider site) {
             if (site == null)
                 throw new System.ArgumentNullException("site");
@@ -1173,7 +1137,6 @@ internal TextTipData(IServiceProvider site) {
                 NativeMethods.ThrowOnFailure(textTipWindow.SetTextTipData(this));
         }
 
-        /// 
         public void Close(IVsTextView textView) {
             if (this.textTipWindow != null) {
                 if (this.isWindowUp)
@@ -1183,10 +1146,8 @@ public void Close(IVsTextView textView) {
             }
         }
 
-        /// 
         public bool IsActive() { return this.isWindowUp; }
 
-        /// 
         public void Update(string textValue, int pos, int len, IVsTextView textView) {
             if (textView == null) return;
 
@@ -1201,7 +1162,6 @@ public void Update(string textValue, int pos, int len, IVsTextView textView) {
             this.isWindowUp = true;
         }
 
-        /// 
         public void CheckCaretPosition(IVsTextView textView)
         {
             if (textView == null) return;
@@ -1220,8 +1180,6 @@ public void CheckCaretPosition(IVsTextView textView)
         }
 
         ////////////////////////////////////////////////////////////////////////////////
-        #region IVsTextTipData
-        /// 
         public virtual int GetTipText(string[] pbstrText, out int pfFontData) {
             pfFontData = 0; // TODO: Do whatever formatting we might want...
             if (pbstrText == null || pbstrText.Length == 0)
@@ -1232,26 +1190,21 @@ public virtual int GetTipText(string[] pbstrText, out int pfFontData) {
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual int GetTipFontInfo(int iChars, uint[] pdwFontInfo) {
             return NativeMethods.E_NOTIMPL;
         }
 
-        /// 
         public virtual int GetContextStream(out int piPos, out int piLen) {
             piPos = this.pos;
             piLen = this.len;
             return NativeMethods.S_OK;
         }
 
-        /// 
         public virtual void OnDismiss() {
             this.isWindowUp = false;
         }
 
-        /// 
         public virtual void UpdateView() {
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.fsproj b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.fsproj
index 2af5e936c72..2ecbe93801b 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.fsproj
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/FSharp.LanguageService.fsproj
@@ -1,10 +1,8 @@
 
 
-
+
   
     ..\..\..\..\..\src
-    Microsoft.VisualStudio.Shell.12.0
-    Microsoft.VisualStudio.Package.LanguageService.12.0
     FSharp
     true
   
@@ -59,26 +57,22 @@
     
     
     
-    
-      true
-    
-    
-      true
-    
+    
+    
     
     
     
     
     
-    
+    
     
     
     
     
-    
     
-    
-    
+    
+    
+    
     
     
     
@@ -92,17 +86,16 @@
     
     
     
-    
-    
-    
-    
-    
-    
-    
-    
+    
+    
+    
+    
+    
+    
+    
+    
+    
     
-    
-    
     
       {DED3BBD7-53F4-428A-8C9F-27968E768605}
       FSharp.Core
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Project.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Project.fs
index 8e73098c38d..79552d9d509 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Project.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/Project.fs
@@ -150,7 +150,7 @@ type internal Artifacts() =
                 | Some(site) -> 
 #if DEBUG
                     site.SourceFilesOnDisk() |> Seq.iter (fun src -> 
-                        Debug.Assert(Internal.Utilities.FileSystem.Path.SafeGetFullPath(src) = src, "SourceFilesOnDisk reported a filename that was not in canonical format")
+                        Debug.Assert(System.IO.Path.GetFullPath(src) = src, "SourceFilesOnDisk reported a filename that was not in canonical format")
                     )
 #endif
                     if site.SourceFilesOnDisk() |> Array.exists (fun src -> System.StringComparer.OrdinalIgnoreCase.Equals(src,filename)) then
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/SecurityIconForTypeProviders.ico b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/SecurityIconForTypeProviders.ico
index cb2e47c1a44..4d9fb2f6ab7 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/SecurityIconForTypeProviders.ico and b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/SecurityIconForTypeProviders.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/servicem.fs b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/servicem.fs
index 1d7dc8676a5..f88334f7bbb 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/servicem.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.LanguageService/servicem.fs
@@ -1854,10 +1854,11 @@ and []
             VSConstants.S_OK
 
         override x.GetColorableItem(index, item: IVsColorableItem byref) =
-                if (index < 1) then 
-                    raise (Error.ArgumentOutOfRange "index")
-                item <- colorableItems.[index - 1]
-                VSConstants.S_OK
+                if (index < 1) || (index > colorableItems.Length) then 
+                    VSConstants.E_INVALIDARG
+                else
+                    item <- colorableItems.[index - 1]
+                    VSConstants.S_OK
 
     /// Respond to changes to documents in the Running Document Table.
     interface IVsRunningDocTableEvents with
@@ -1932,64 +1933,10 @@ module FSharpIntellisenseProvider =
 
         member x.Name = filename
 
-#if UNUSED
-module Setup = 
-    /// This attribute adds a intellisense provider for a specific language 
-    /// type. 
-    /// For Example:
-    ///   [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0Exp\Languages\IntellisenseProviders\
-    ///         [Custom_Provider]
-    /// 
-    []
-    type ProvideIntellisenseProviderAttribute(provider:Type, providerName:string, addItemLanguageName:string, defaultExtension:string, shortLanguageName:string, templateFolderName:string) =
-        inherit RegistrationAttribute() 
-        let mutable additionalExtensions : Option = None
-
-        /// Private function to get the provider base key name
-        let providerRegKey() = String.Format(CultureInfo.InvariantCulture, @"Languages\IntellisenseProviders\{0}", [| box providerName |])
-        
-            /// Gets the Type of the intellisense provider.
-        member x.Provider = provider
-            /// Get the Guid representing the generator type
-        member x.ProviderGuid = provider.GUID
-            /// Get the ProviderName
-        member x.ProviderName = providerName
-            /// Get item language
-        member x.AddItemLanguageName = addItemLanguageName
-            /// Get the Default extension
-        member x.DefaultExtension = defaultExtension
-            /// Get the short language name
-        member x.ShortLanguageName = shortLanguageName
-            /// Get the tempalte folder name
-        member x.TemplateFolderName = templateFolderName
-            /// Get/Set Additional extensions
-        member x.AdditionalExtensions 
-            with get() = additionalExtensions
-            and set v = additionalExtensions <- Some(v)
-            ///     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.
-        override x.Register(context:RegistrationAttribute.RegistrationContext) =
-            Check.ArgumentNotNull context "context"
-            use childKey = context.CreateKey(providerRegKey())
-            let mutable providerGuid = provider.GUID
-            childKey.SetValue("GUID", providerGuid.ToString("B"))
-            childKey.SetValue("AddItemLanguageName", addItemLanguageName)
-            childKey.SetValue("DefaultExtension", defaultExtension)
-            childKey.SetValue("ShortLanguageName", shortLanguageName)
-            childKey.SetValue("TemplateFolderName", templateFolderName)
-            match additionalExtensions with 
-            | None | Some "" -> ()
-            | Some(s) ->  childKey.SetValue("AdditionalExtensions", s)
-
-            /// 
-            /// Unregister this file extension.
-            /// 
-            /// 
-        override x.Unregister(context:RegistrationAttribute.RegistrationContext) =
-            if (null <> context) then
-                context.RemoveKey(providerRegKey())
-#endif
+// Workaround to access non-public settings persistence type.
+// GetService( ) with this will work as long as the GUID matches the real type.
+[]
+type internal SVsSettingsPersistenceManager = class end
 
 []
 type FSharpPackage() as self =
@@ -2015,12 +1962,41 @@ type FSharpPackage() as self =
     let callback = new ServiceCreatorCallback(CreateIfEnabled)
     
     let mutable mgr : IOleComponentManager = null
-    
+
+#if !VS_VERSION_DEV12
+    let fsharpSpecificProfileSettings =
+        [| "TextEditor.F#.Insert Tabs", box false
+           "TextEditor.F#.Brace Completion", box true
+           "TextEditor.F#.Make URLs Hot", box false
+           "TextEditor.F#.Indent Style", box 1u |]
+#endif
+
     override self.Initialize() =
         UIThread.CaptureSynchronizationContext()
+        self.EstablishDefaultSettingsIfMissing()
         (self :> IServiceContainer).AddService(typeof, callback, true)
         base.Initialize()
 
+    /// In case custom VS profile settings for F# are not applied, explicitly set them here.
+    /// e.g. 'keep tabs' is the text editor default, but F# requires 'insert spaces'.
+    /// We specify our customizations in the General profile for VS, but we have found that in some cases
+    /// those customizations are incorrectly ignored.
+    member private this.EstablishDefaultSettingsIfMissing() =
+#if VS_VERSION_DEV12
+        ()  // ISettingsManager only implemented for VS 14.0+
+#else
+        match this.GetService(typeof) with
+        | :? Microsoft.VisualStudio.Settings.ISettingsManager as settingsManager ->
+            for settingName,defaultValue in fsharpSpecificProfileSettings do
+                // Only take action if the setting has no current custom value
+                // If cloud-synced settings have already been applied or the user has made an explicit change, do nothing
+                match settingsManager.TryGetValue(settingName) with
+                | Microsoft.VisualStudio.Settings.GetValueResult.Missing, _ ->
+                    settingsManager.SetValueAsync(settingName, defaultValue, false) |> ignore
+                | _ -> ()
+        | _ -> ()
+#endif
+
     member self.RegisterForIdleTime() =
         mgr <- (self.GetService(typeof) :?> IOleComponentManager)
         if (componentID = 0u && mgr <> null) then
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyInfo.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyInfo.cs
index 44f2b5c5d96..ff097aea26a 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyInfo.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyInfo.cs
@@ -3,6 +3,7 @@
 using System;
 using System.Reflection;
 using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
 
 /* F# additions: begin. */
 [assembly:AssemblyDescription("FSharp.ProjectSystem.Base.dll")]
@@ -12,6 +13,7 @@
 [assembly:AssemblyProduct("Microsoft\x00ae F#")]
 [assembly:AssemblyConfiguration("")]
 [assembly:AssemblyCulture("")]
+[assembly:ComVisible(false)]
 
 /* Make internals visible to other project system DLLs */
 [assembly:System.Runtime.CompilerServices.InternalsVisibleTo("FSharp.ProjectSystem.FSharp, PublicKey=002400000480000094000000060200000024000052534131000400000100010007D1FA57C4AED9F0A32E84AA0FAEFD0DE9E8FD6AEC8F87FB03766C834C99921EB23BE79AD9D5DCC1DD9AD236132102900B723CF980957FC4E177108FC607774F29E8320E92EA05ECE4E821C0A5EFE8F1645C4C0C93C1AB99285D622CAA652C1DFAD63D745D6F2DE5F17E5EAF0FC4963D261C8A12436518206DC093344D5AD293")]
@@ -21,6 +23,6 @@
 /* F# additions: end */
 
 #if STAMP_OSS_VERSION
-[assembly:AssemblyVersion("12.0.0.9055")]       // The assembly version for THE OSS BUILD
-[assembly:AssemblyFileVersion("12.0.0.9055")]
+[assembly:AssemblyVersion("14.0.0.9055")]       // The assembly version for THE OSS BUILD
+[assembly:AssemblyFileVersion("14.0.0.9055")]
 #endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyReferenceNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyReferenceNode.cs
index 85348732d9b..150827f5089 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyReferenceNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/AssemblyReferenceNode.cs
@@ -48,21 +48,18 @@ private struct AssemblyMSBuildProjectionInfo
             public bool? WantSpecificVersion;  // null -> nothing in .fsproj, true/false mean serialize that value to .fsproj
         }
 
-        #region fields
         private string myAssemblyPath = String.Empty;
         private FileChangeManager myFileChangeListener;
         private bool myIsDisposed = false;
         private AssemblyResolvedInfo resolvedInfo;
         private AssemblyMSBuildProjectionInfo msbuildProjectionInfo;
         private bool fsprojIncludeHasFilename = false;
-        #endregion
 
-        #region properties
         /// 
         /// The name of the assembly this reference represents.
         /// 
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public System.Reflection.AssemblyName AssemblyName
+        public System.Reflection.AssemblyName AssemblyName
         {
             get
             {
@@ -75,7 +72,7 @@ private struct AssemblyMSBuildProjectionInfo
         /// machine. It can be different from the AssemblyName property because it can
         /// be more specific.
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public System.Reflection.AssemblyName ResolvedAssembly
+        public System.Reflection.AssemblyName ResolvedAssembly
         {
             get { return this.resolvedInfo.ResolvedAssemblyName; }
         }
@@ -120,7 +117,7 @@ public override string Caption
         }
 
         private Automation.OAAssemblyReference assemblyRef;
-        /*internal, but public for FSharp.Project.dll*/ public override object Object
+        public override object Object
         {
             get
             {
@@ -131,9 +128,6 @@ public override string Caption
                 return assemblyRef;
             }
         }
-        #endregion
-
-        #region ctors
 
         internal static AssemblyReferenceNode CreateFromProjectFile(ProjectNode root, ProjectElement element, BuildResult buildResult)
         { return new AssemblyReferenceNode(root, element, buildResult); }
@@ -201,9 +195,6 @@ private AssemblyReferenceNode(int dummy, ProjectNode root, string assemblyName)
 
             this.InitializeFileChangeEvents();
         }
-        #endregion
-
-        #region methods
 
         internal static bool IsFSharpCoreReference(ReferenceNode node)
         {
@@ -283,10 +274,7 @@ private void InitializeAssemblyName(string assemblyName)
                 }
             }
         }
-        /// 
-        /// Closes the node.
-        /// 
-        /// 
+
         public override int Close()
         {
             try
@@ -325,7 +313,7 @@ private bool IsSpecialFSharpCoreReference
             get { return ProjectMgr.CanUseTargetFSharpCoreReference && IsFSharpCoreReference(this) && ContainsUsagesOfTargetFSharpCoreVersionProperty(this); }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override NodeProperties CreatePropertiesObject()
+        public override NodeProperties CreatePropertiesObject()
         {
             if (IsSpecialFSharpCoreReference)
             {
@@ -338,7 +326,7 @@ private bool IsSpecialFSharpCoreReference
         /// 
         /// Links a reference node to the project and hierarchy.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override void BindReferenceData()
+        public override void BindReferenceData()
         {
             // BindReferenceData only happens for newly created AssemblyReferenceNodes (as opposed to loaded from fsproj)
             Debug.Assert(this.resolvedInfo.WasSuccessfullyResolved, "assembly was not resolved, we should not be trying to link a node to put in .fsproj file");
@@ -383,10 +371,6 @@ private bool IsSpecialFSharpCoreReference
             // LBXML_KEY_REFERENCE_EXTENSION       "ExecutableExtension"
         }
 
-        /// 
-        /// Disposes the node
-        /// 
-        /// 
         protected override void Dispose(bool disposing)
         {
             if (this.myIsDisposed)
@@ -440,7 +424,7 @@ public override void Remove(bool removeFromStorage)
 	    /// Determines if this is node a valid node for painting the default reference icon.
 	    /// 
 	    /// 
-	    public /*protected, but public for FSharp.Project.dll*/ override bool CanShowDefaultIcon()
+	    public override bool CanShowDefaultIcon()
  	    {
 		    if (String.IsNullOrEmpty(this.myAssemblyPath) || !File.Exists(this.myAssemblyPath))
 		    {
@@ -474,7 +458,7 @@ public void DoOneOffResolve()
             var result = this.ProjectMgr.Build(MsBuildTarget.ResolveAssemblyReferences);
             this.ResolveReference(result);
         }
-        internal /*protected, but public for FSharp.Project.dll*/ override void ResolveReference(BuildResult buildResult)
+        internal override void ResolveReference(BuildResult buildResult)
         {
             Debug.Assert(this.ItemNode != null && this.ItemNode.Item != null, "called ResolveReference before initializing ItemNode");
             this.ResolveFromBuiltProject(MSBuildItem.GetEvaluatedInclude(this.ItemNode.Item), buildResult);
@@ -687,7 +671,7 @@ private void OnAssemblyReferenceChangedOnDisk(object sender, FileChangedOnDiskEv
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override Guid GetBrowseLibraryGuid()
+        public override Guid GetBrowseLibraryGuid()
         {
             return VSConstants.guidCOMPLUSLibrary;
         }
@@ -707,6 +691,5 @@ public override object GetProperty(int propId)
         }
 #endif
 
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Attributes.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Attributes.cs
index d91bf63f071..f0ff1a0d960 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Attributes.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Attributes.cs
@@ -24,18 +24,13 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     [AttributeUsage(AttributeTargets.Class | AttributeTargets.Enum | AttributeTargets.Property | AttributeTargets.Field)]
     internal sealed class PropertyPageTypeConverterAttribute : Attribute
     {
-        #region fields
         Type converterType;
-        #endregion
 
-        #region ctors
         public PropertyPageTypeConverterAttribute(Type type)
         {
             this.converterType = type;
         } 
-        #endregion
 
-        #region properties
         public Type ConverterType
         {
             get
@@ -43,24 +38,18 @@ public Type ConverterType
                 return this.converterType;
             }
         } 
-        #endregion
     }
 
     [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field, Inherited = false, AllowMultiple = false)]
     internal sealed class LocDisplayNameAttribute : DisplayNameAttribute
     {
-        #region fields
         string name;
-        #endregion
 
-        #region ctors
         public LocDisplayNameAttribute(string name)
         {
             this.name = name;
         } 
-        #endregion
 
-        #region properties
         public override string DisplayName
         {
             get
@@ -74,6 +63,5 @@ public override string DisplayName
                 return result;
             }
         } 
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFileItem.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFileItem.cs
index 9fd2aa1c4d1..97fe3a10d87 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFileItem.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFileItem.cs
@@ -26,15 +26,11 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAFileItem : OAProjectItem
     {
-        #region ctors
         internal OAFileItem(OAProject project, FileNode node)
             : base(project, node)
         {
         }
 
-        #endregion
-
-        #region overridden methods
         /// 
         /// Returns the dirty state of the document.
         /// 
@@ -307,9 +303,6 @@ public override bool get_IsOpen(string viewKind)
             });
         }
 
-        /// 
-        /// Gets the ProjectItems for the object.
-        /// 
         public override ProjectItems ProjectItems
         {
             get
@@ -324,10 +317,6 @@ public override ProjectItems ProjectItems
             }
         }
 
-
-        #endregion
-
-        #region helpers
         /// 
         /// Saves or Save As the  file
         /// 
@@ -432,7 +421,6 @@ private void DoSave(bool isCalledFromSaveAs, string fileName)
                 }
             });
         }
-        #endregion
 
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFolderItem.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFolderItem.cs
index bbf73082ccc..b71ca971303 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFolderItem.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAFolderItem.cs
@@ -24,15 +24,11 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAFolderItem : OAProjectItem
     {
-        #region ctors
         internal OAFolderItem(OAProject project, FolderNode node)
             : base(project, node)
         {
         }
 
-        #endregion
-
-        #region overridden methods
         public override ProjectItems Collection
         {
             get
@@ -51,6 +47,5 @@ public override ProjectItems ProjectItems
                 return this.Collection;
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANavigableProjectItems.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANavigableProjectItems.cs
index 3e32fb4b96b..47636562833 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANavigableProjectItems.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANavigableProjectItems.cs
@@ -24,17 +24,14 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OANavigableProjectItems : EnvDTE.ProjectItems
     {
-        #region fields
         private OAProject project;
         private IList items;
         private HierarchyNode nodeWithItems;
-        #endregion
 
-        #region properties
         /// 
-        /// Defines an /*internal, but public for FSharp.Project.dll*/ public list of project items
+        /// Defines an public list of project items
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public IList Items
+        public IList Items
         {
             get
             {
@@ -45,7 +42,7 @@ public class OANavigableProjectItems : EnvDTE.ProjectItems
         /// 
         /// Defines a relationship to the associated project.
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public OAProject Project
+        public OAProject Project
         {
             get
             {
@@ -56,16 +53,14 @@ public class OANavigableProjectItems : EnvDTE.ProjectItems
         /// 
         /// Defines the node that contains the items
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public HierarchyNode NodeWithItems
+        public HierarchyNode NodeWithItems
         {
             get
             {
                 return this.nodeWithItems;
             }
         }
-        #endregion
 
-        #region ctor
         /// 
         /// Constructor.
         /// 
@@ -90,9 +85,6 @@ internal OANavigableProjectItems(OAProject project, IList it
             this.project = project;
             this.nodeWithItems = nodeWithItems;
         }
-        #endregion
-
-        #region EnvDTE.ProjectItems
 
         /// 
         /// Gets a value indicating the number of objects in the collection.
@@ -105,9 +97,6 @@ public virtual int Count
             }
         }
 
-        /// 
-        /// Gets the immediate parent object of a ProjectItems collection.
-        /// 
         public virtual object Parent
         {
             get
@@ -232,10 +221,6 @@ public virtual EnvDTE.ProjectItem Item(object index)
             return null;
         }
 
-        /// 
-        /// Returns an enumeration for items in a collection. 
-        /// 
-        /// An IEnumerator for this object.
         public virtual IEnumerator GetEnumerator()
         {
             if (this.items == null)
@@ -251,14 +236,11 @@ public virtual IEnumerator GetEnumerator()
             }
         }
 
-        #endregion
-
-        #region virtual methods
         /// 
         /// Retrives a list of items associated with the current node.
         /// 
         /// A List of project items
-        public /*protected, but public for FSharp.Project.dll*/ IList GetListOfProjectItems()
+        public IList GetListOfProjectItems()
         {
             return UIThread.DoOnUIThread(delegate() {
                 List list = new List();
@@ -277,6 +259,5 @@ public virtual IEnumerator GetEnumerator()
                 return list;
             });
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANestedProjectItem.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANestedProjectItem.cs
deleted file mode 100644
index d14fd4516c5..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANestedProjectItem.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if UNUSED_NESTED_PROJECTS
-using System;
-using Microsoft.VisualStudio.Shell.Interop;
-using Microsoft.VisualStudio.Shell;
-using System.Runtime.InteropServices;
-using System.Collections.Generic;
-using System.Collections;
-using System.Diagnostics;
-using System.Runtime.Serialization;
-using System.Reflection;
-using IServiceProvider = System.IServiceProvider;
-using Microsoft.VisualStudio.OLE.Interop;
-using System.Diagnostics.CodeAnalysis;
-using Microsoft.VisualStudio.Fsharp.ProjectSystem;
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
-{
-    [SuppressMessage("Microsoft.Interoperability", "CA1405:ComVisibleTypeBaseTypesShouldBeComVisible")]
-    [ComVisible(true), CLSCompliant(false)]
-    public class OANestedProjectItem : OAProjectItem
-    {
-        #region fields
-        EnvDTE.Project nestedProject = null;
-        #endregion
-
-        #region ctors
-        internal OANestedProjectItem(OAProject project, NestedProjectNode node)
-            : base(project, node)
-        {
-            object nestedproject = null;
-            if (ErrorHandler.Succeeded(node.NestedHierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out nestedproject)))
-            {
-                this.nestedProject = nestedproject as EnvDTE.Project;
-            }
-        }
-
-        #endregion
-
-        #region overridden methods
-        /// 
-        /// Returns the collection of project items defined in the nested project
-        /// 
-        public override EnvDTE.ProjectItems ProjectItems
-        {
-            get
-            {
-                if (this.nestedProject != null)
-                {
-                    return this.nestedProject.ProjectItems;
-                }
-                return null;
-            }
-        }
-
-        /// 
-        /// Returns the nested project.
-        /// 
-        public override EnvDTE.Project SubProject
-        {
-            get
-            {
-                return this.nestedProject;
-            }
-        }
-        #endregion
-    }
-}
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANullProperty.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANullProperty.cs
index eadfd214372..3fa2e5b1b32 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANullProperty.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OANullProperty.cs
@@ -21,19 +21,12 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [CLSCompliant(false), ComVisible(true)]
     public class OANullProperty : EnvDTE.Property
     {
-        #region fields
         private OAProperties parent;
-        #endregion
-
-        #region ctors
 
         internal OANullProperty(OAProperties parent)
         {
             this.parent = parent;
         }
-        #endregion
-
-        #region EnvDTE.Property
 
         public object Application
         {
@@ -97,6 +90,5 @@ public object Value
             get { return String.Empty; }
             set { }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProject.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProject.cs
index ea37bb417be..fcdc5b87a1c 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProject.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProject.cs
@@ -22,39 +22,19 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAProject : EnvDTE.Project, EnvDTE.ISupportVSProperties
     {
-        #region fields
         private ProjectNode project;
-#if UNUSED_NESTED_PROJECTS
-        Automation.OASolutionFolder solutionFolder;
-#endif
         EnvDTE.ConfigurationManager configurationManager;
-        #endregion
 
-        #region properties
         public ProjectNode Project
         {
             get { return this.project; }
         }
-        #endregion
 
-        #region ctor
         internal OAProject(ProjectNode project)
         {
             this.project = project;
-
-#if UNUSED_NESTED_PROJECTS
-            if (project is ProjectContainerNode)
-            {
-                this.solutionFolder = new Automation.OASolutionFolder((ProjectContainerNode)project);
-            }
-#endif
         }
-        #endregion
 
-        #region EnvDTE.Project
-        /// 
-        /// Gets or sets the name of the object. 
-        /// 
         public virtual string Name
         {
             get
@@ -449,18 +429,14 @@ public virtual void Delete()
                 }
             });
         }
-        #endregion
 
-        #region ISupportVSProperties methods
         /// 
         /// For use by F# tooling only. 
         /// 
         public virtual void NotifyPropertiesDelete()
         {
         }
-        #endregion
 
-        #region private methods
         /// 
         /// Saves or Save Asthe project.
         /// 
@@ -588,6 +564,5 @@ private void DoSave(bool isCalledFromSaveAs, string fileName)
                 }
             });
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItem.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItem.cs
index e193f233613..b2b695a6c4a 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItem.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItem.cs
@@ -22,13 +22,10 @@ public class OAProjectItem : EnvDTE.ProjectItem
          where T : HierarchyNode
     {
 
-        #region fields
         private T node;
         private OAProject project;
-        #endregion
 
-        #region properties
-        public /*protected, but public for FSharp.Project.dll*/ T Node
+        public T Node
         {
             get
             {
@@ -39,24 +36,19 @@ public class OAProjectItem : EnvDTE.ProjectItem
         /// 
         /// Returns the automation project
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ OAProject Project
+        public OAProject Project
         {
             get
             {
                 return this.project;
             }
         }
-        #endregion
 
-        #region ctors
         internal OAProjectItem(OAProject project, T node)
         {
             this.node = node;
             this.project = project;
         }
-        #endregion
-
-        #region EnvDTE.ProjectItem
 
         /// 
         /// Gets the requested Extender if it is available for this object
@@ -298,9 +290,6 @@ public virtual bool IsDirty
             }
         }
 
-        /// 
-        /// Gets or sets the name of the object.
-        /// 
         public virtual string Name
         {
             get
@@ -489,7 +478,5 @@ public virtual EnvDTE.Window Open(string ViewKind)
         {
             throw new NotImplementedException();
         }
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItems.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItems.cs
index 2746e29360d..ee1b98ecd6d 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItems.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProjectItems.cs
@@ -28,14 +28,11 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAProjectItems : OANavigableProjectItems
     {
-        #region ctor
         internal OAProjectItems(OAProject project, HierarchyNode nodeWithItems)
             : base(project, nodeWithItems)
         {
         }
-        #endregion
 
-        #region EnvDTE.ProjectItems
         /// 
         /// Creates a new project item from an existing item template file and adds it to the project. 
         /// 
@@ -192,16 +189,13 @@ public override EnvDTE.ProjectItem AddFromFile(string fileName)
             return this.AddItem(fileName, VSADDITEMOPERATION.VSADDITEMOP_OPENFILE);
         }
 
-        #endregion
-
-        #region helper methods
         /// 
         /// Adds an item to the project.
         /// 
         /// The full path of the item to add.
         /// The VSADDITEMOPERATION to use when adding the item.
         /// A ProjectItem object. 
-        public /*protected, but public for FSharp.Project.dll*/ virtual EnvDTE.ProjectItem AddItem(string path, VSADDITEMOPERATION op)
+        public virtual EnvDTE.ProjectItem AddItem(string path, VSADDITEMOPERATION op)
         {
             return UIThread.DoOnUIThread(delegate() {
                 if (this.Project == null || this.Project.Project == null || this.Project.Project.Site == null || this.Project.Project.IsClosed)
@@ -247,7 +241,7 @@ public override EnvDTE.ProjectItem AddFromFile(string fileName)
         /// The VSADDRESULT returned by the Add methods
         /// The full path of the item added.
         /// A ProjectItem object.
-        public /*protected, but public for FSharp.Project.dll*/ virtual EnvDTE.ProjectItem EvaluateAddResult(VSADDRESULT result, string path)
+        public virtual EnvDTE.ProjectItem EvaluateAddResult(VSADDRESULT result, string path)
         {
             return UIThread.DoOnUIThread(delegate() {
                 if (result == VSADDRESULT.ADDRESULT_Success)
@@ -261,12 +255,6 @@ public override EnvDTE.ProjectItem AddFromFile(string fileName)
                         {
                             item = new OAFileItem(this.Project, nodeAdded as FileNode);
                         }
-#if UNUSED_NESTED_PROJECTS
-                        else if (nodeAdded is NestedProjectNode)
-                        {
-                            item = new OANestedProjectItem(this.Project, nodeAdded as NestedProjectNode);
-                        }
-#endif
                         else
                         {
                             item = new OAProjectItem(this.Project, nodeAdded);
@@ -313,7 +301,5 @@ private static string GetTemplateNoZip(string fileName)
 
             return Path.Combine(components);
         }
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperties.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperties.cs
index 50bda5edb6e..662f2a50419 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperties.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperties.cs
@@ -25,12 +25,9 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [CLSCompliant(false), ComVisible(true)]
     public class OAProperties : EnvDTE.Properties
     {
-        #region fields
         private NodeProperties target;
         private Dictionary properties = new Dictionary(StringComparer.OrdinalIgnoreCase);
-        #endregion
 
-        #region properties
         /// 
         /// Defines the NodeProperties object that contains the defines the properties.
         /// 
@@ -63,9 +60,7 @@ public HierarchyNode Node
                 return this.properties;
             }
         }
-        #endregion
 
-        #region ctor
         internal OAProperties(NodeProperties target)
         {
             System.Diagnostics.Debug.Assert(target != null);
@@ -73,9 +68,7 @@ internal OAProperties(NodeProperties target)
             this.target = target;
             this.AddPropertiesFromType(target.GetType());
         }
-        #endregion
 
-        #region EnvDTE.Properties
         /// 
         /// For use by F# tooling only.
         /// 
@@ -170,21 +163,17 @@ public virtual EnvDTE.Property Item(object index)
 
             throw new ArgumentException(SR.GetString(SR.InvalidParameter, CultureInfo.CurrentUICulture), "index");
         }
-        /// 
-        /// Gets the immediate parent object of a Properties collection.
-        /// 
+
         public virtual object Parent
         {
             get { return null; }
         }
-        #endregion
 
-        #region methods
         /// 
         /// Add properties to the collection of properties filtering only those properties which are com-visible and AutomationBrowsable
         /// 
         /// The type of NodeProperties the we should filter on
-        public /*protected, but public for FSharp.Project.dll*/ void AddPropertiesFromType(Type targetType)
+        public void AddPropertiesFromType(Type targetType)
         {
             Debug.Assert(targetType != null);
 
@@ -202,20 +191,15 @@ public virtual object Parent
                 }
             }
         }
-        #endregion
 
-        #region virtual methods
         /// 
         /// Creates a new OAProperty object and adds it to the current list of properties
         /// 
         /// The property to be associated with an OAProperty object
-        public /*protected, but public for FSharp.Project.dll*/ virtual void AddProperty(PropertyInfo propertyInfo)
+        public virtual void AddProperty(PropertyInfo propertyInfo)
         {
             this.properties.Add(propertyInfo.Name, new OAProperty(this, propertyInfo));
         }
-        #endregion
-
-        #region helper methods
 
         private bool IsInMap(PropertyInfo propertyInfo)
         {
@@ -263,6 +247,5 @@ private bool IsComVisible(PropertyInfo propertyInfo)
             }
             return true;
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperty.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperty.cs
index 796ee8995d0..d13fe1286b6 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperty.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAProperty.cs
@@ -19,21 +19,15 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [CLSCompliant(false), ComVisible(true)]
     public class OAProperty : EnvDTE.Property
     {
-        #region fields
         private OAProperties parent;
         private PropertyInfo pi;
-        #endregion
-
-        #region ctors
 
         internal OAProperty(OAProperties parent, PropertyInfo pi)
         {
             this.parent = parent;
             this.pi = pi;
         }
-        #endregion
 
-        #region EnvDTE.Property
         /// 
         /// For use by F# tooling only.
         /// 
@@ -202,6 +196,5 @@ public object Value
                 }
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceFolderItem.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceFolderItem.cs
index 8c12f3f749c..fabbc91edc4 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceFolderItem.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceFolderItem.cs
@@ -23,15 +23,11 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAReferenceFolderItem : OAProjectItem
     {
-        #region ctors
         internal OAReferenceFolderItem(OAProject project, ReferenceContainerNode node)
             : base(project, node)
         {
         }
 
-        #endregion
-
-        #region overridden methods
         /// 
         /// Returns the project items collection of all the references defined for this project.
         /// 
@@ -43,10 +39,6 @@ public override EnvDTE.ProjectItems ProjectItems
             }
         }
 
-
-        #endregion
-
-        #region Helper methods
         private List GetListOfProjectItems()
         {
             List list = new List();
@@ -60,6 +52,5 @@ public override EnvDTE.ProjectItems ProjectItems
 
             return list;
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceItem.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceItem.cs
index 3f36e326f03..b94ac07995c 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceItem.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OAReferenceItem.cs
@@ -23,15 +23,11 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAReferenceItem : OAProjectItem
     {
-        #region ctors
         internal OAReferenceItem(OAProject project, ReferenceNode node)
             : base(project, node)
         {
         }
 
-        #endregion
-
-        #region overridden methods
         /// 
         /// Not implemented. If called throws invalid operation exception.
         ///     
@@ -51,9 +47,6 @@ public override EnvDTE.Window Open(string viewKind)
             throw new InvalidOperationException();
         }
 
-        /// 
-        /// Gets or sets the name of the object.
-        /// 
         public override string Name
         {
             get
@@ -87,6 +80,5 @@ public override EnvDTE.ProjectItems Collection
                 return null;
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OASolutionFolder.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OASolutionFolder.cs
deleted file mode 100644
index 98ecaa960e2..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/OASolutionFolder.cs
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if UNUSED_NESTED_PROJECTS
-
-using System;
-using Microsoft.VisualStudio.Shell.Interop;
-using Microsoft.VisualStudio.Shell;
-using System.Runtime.InteropServices;
-using System.Collections.Generic;
-using System.Collections;
-using System.Diagnostics;
-using System.Runtime.Serialization;
-using System.Reflection;
-using IServiceProvider = System.IServiceProvider;
-using Microsoft.VisualStudio.OLE.Interop;
-using System.Globalization;
-using Microsoft.VisualStudio.FSharp.ProjectSystem;
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
-{
-    [ComVisible(true), CLSCompliant(false)]
-    public class OASolutionFolder : EnvDTE80.SolutionFolder
-        where T : HierarchyNode
-    {
-        bool hidden = false;
-        T node;
-
-        internal OASolutionFolder(T associatedNode)
-        {
-            if (associatedNode == null)
-            {
-                throw new ArgumentNullException("associatedNode");
-            }
-
-            Debug.Assert(associatedNode.ProjectMgr is ProjectContainerNode, "Expecting obejct of type" + typeof(ProjectContainerNode).Name);
-
-            if (!(associatedNode.ProjectMgr is ProjectContainerNode))
-                throw new ArgumentException(SR.GetString(SR.InvalidParameter, CultureInfo.CurrentUICulture), "associatedNode");
-
-            this.node = associatedNode;
-        }
-
-
-        #region SolutionFolder Members
-
-        public virtual EnvDTE.Project AddFromFile(string fileName)
-        {
-            ProjectContainerNode projectContainer = (ProjectContainerNode)this.node.ProjectMgr;
-            ProjectElement newElement = new ProjectElement(projectContainer, fileName, ProjectFileConstants.SubProject);
-            NestedProjectNode newNode = projectContainer.AddExistingNestedProject(newElement, __VSCREATEPROJFLAGS.CPF_NOTINSLNEXPLR | __VSCREATEPROJFLAGS.CPF_SILENT | __VSCREATEPROJFLAGS.CPF_OPENFILE);
-            if (newNode == null)
-                return null;
-            // Now that the sub project was created, get its extensibility object so we can return it
-            object newProject = null;
-            if (ErrorHandler.Succeeded(newNode.NestedHierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out newProject)))
-                return newProject as EnvDTE.Project;
-            else
-                return null;
-        }
-
-        public virtual EnvDTE.Project AddFromTemplate(string fileName, string destination, string projectName)
-        {
-            bool isVSTemplate = Utilities.IsTemplateFile(fileName);
-
-            NestedProjectNode newNode = null;
-            if (isVSTemplate)
-            {
-                // Get the wizard to run, we will get called again and use the alternate code path
-                ProjectElement newElement = new ProjectElement(this.node.ProjectMgr, System.IO.Path.Combine(destination, projectName), ProjectFileConstants.SubProject);
-                newElement.SetMetadata(ProjectFileConstants.Template, fileName);
-                ((ProjectContainerNode)this.node.ProjectMgr).RunVsTemplateWizard(newElement, false);
-            }
-            else
-            {
-                if ((String.IsNullOrEmpty(System.IO.Path.GetExtension(projectName))))
-                {
-                    string targetExtension = System.IO.Path.GetExtension(fileName);
-                    projectName = System.IO.Path.ChangeExtension(projectName, targetExtension);
-                }
-
-                ProjectContainerNode projectContainer = (ProjectContainerNode)this.node.ProjectMgr;
-                newNode = projectContainer.AddNestedProjectFromTemplate(fileName, destination, projectName, null, __VSCREATEPROJFLAGS.CPF_NOTINSLNEXPLR | __VSCREATEPROJFLAGS.CPF_SILENT | __VSCREATEPROJFLAGS.CPF_CLONEFILE);
-            }
-            if (newNode == null)
-                return null;
-
-            // Now that the sub project was created, get its extensibility object so we can return it
-            object newProject = null;
-            if (ErrorHandler.Succeeded(newNode.NestedHierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out newProject)))
-                return newProject as EnvDTE.Project;
-            else
-                return null;
-        }
-
-        public virtual EnvDTE.Project AddSolutionFolder(string Name)
-        {
-            throw new NotImplementedException();
-        }
-
-        public virtual EnvDTE.Project Parent
-        {
-            get
-            {
-                throw new NotImplementedException();
-            }
-        }
-
-        public virtual bool Hidden
-        {
-            get
-            {
-                return hidden;
-            }
-            set
-            {
-                hidden = value;
-            }
-        }
-
-        public virtual EnvDTE.DTE DTE 
-        {
-            get
-            {
-                return (EnvDTE.DTE)this.node.ProjectMgr.Site.GetService(typeof(EnvDTE.DTE));
-            }
-        }
-
-        #endregion
-    }
-
-}
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAAssemblyReference.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAAssemblyReference.cs
index d51e03e4caf..407e33b9491 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAAssemblyReference.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAAssemblyReference.cs
@@ -20,7 +20,6 @@ internal OAAssemblyReference(AssemblyReferenceNode assemblyReference) :
         {
         }
 
-        #region Reference override
         public override int BuildNumber
         {
             get
@@ -155,6 +154,5 @@ public override string Version
                 return BaseReferenceNode.ResolvedAssembly.Version.ToString();
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OABuildManager.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OABuildManager.cs
index 6874d174d50..c95ad0b562b 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OABuildManager.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OABuildManager.cs
@@ -24,8 +24,6 @@ internal OABuildManager(ProjectNode project)
         }
 
 
-        #region BuildManager Members
-
         public string BuildDesignTimeOutput(string bstrOutputMoniker)
         {
             throw new NotImplementedException();
@@ -53,16 +51,10 @@ public object Parent
             get { throw new NotImplementedException(); }
         }
 
-        #endregion
-
-        #region _dispBuildManagerEvents_Event Members
-
         public event _dispBuildManagerEvents_DesignTimeOutputDeletedEventHandler DesignTimeOutputDeleted;
 
         public event _dispBuildManagerEvents_DesignTimeOutputDirtyEventHandler DesignTimeOutputDirty;
 
-        #endregion
-
         private void OnDesignTimeOutputDeleted(object sender, EventArgs args)
         {
             if (DesignTimeOutputDeleted == null)
@@ -97,8 +89,6 @@ private static string GetOutputMoniker(object sender)
             return moniker;
         }
 
-        #region IEventSource<_dispBuildManagerEvents> Members
-
         void IEventSource<_dispBuildManagerEvents>.OnSinkAdded(_dispBuildManagerEvents sink)
         {
             DesignTimeOutputDeleted += new _dispBuildManagerEvents_DesignTimeOutputDeletedEventHandler(sink.DesignTimeOutputDeleted);
@@ -110,7 +100,5 @@ void IEventSource<_dispBuildManagerEvents>.OnSinkRemoved(_dispBuildManagerEvents
             DesignTimeOutputDeleted -= new _dispBuildManagerEvents_DesignTimeOutputDeletedEventHandler(sink.DesignTimeOutputDeleted);
             DesignTimeOutputDirty -= new _dispBuildManagerEvents_DesignTimeOutputDirtyEventHandler(sink.DesignTimeOutputDirty);
         }
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAComReference.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAComReference.cs
index e1c4f3fe22c..753d243418e 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAComReference.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAComReference.cs
@@ -19,7 +19,6 @@ internal OAComReference(ComReferenceNode comReference) :
         {
         }
 
-        #region Reference override
         public override string Culture
         {
             get
@@ -68,6 +67,5 @@ public override string Version
                 return version.ToString();
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAProjectReference.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAProjectReference.cs
index 15cce0bbcb9..1fc9327dbc5 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAProjectReference.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAProjectReference.cs
@@ -23,7 +23,6 @@ internal OAProjectReference(ProjectReferenceNode projectReference) :
         {
         }
 
-        #region Reference override
         public override string Culture
         {
             get { return string.Empty; }
@@ -82,6 +81,5 @@ public override string Version
         {
             get { return string.Empty; }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferenceBase.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferenceBase.cs
index 591263c5825..b0411b1b9ef 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferenceBase.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferenceBase.cs
@@ -19,25 +19,18 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     public class OAReferenceBase : Reference
         where RefType : ReferenceNode
     {
-        #region fields
         private RefType referenceNode;
-        #endregion
 
-        #region ctors
         internal OAReferenceBase(RefType referenceNode)
         {
             this.referenceNode = referenceNode;
         }
-        #endregion
 
-        #region properties
-        public /*protected, but public for FSharp.Project.dll*/ RefType BaseReferenceNode
+        public RefType BaseReferenceNode
         {
             get { return referenceNode; }
         }
-        #endregion
 
-        #region Reference Members
         public virtual int BuildNumber
         {
             get { return 0; }
@@ -200,6 +193,5 @@ public virtual object get_Extender(string ExtenderName)
                 return ((ReferenceNodeProperties)referenceNode.NodeProperties).Extender(ExtenderName);
             });
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferences.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferences.cs
index fb380df68cb..c53fd860688 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferences.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAReferences.cs
@@ -34,7 +34,6 @@ internal OAReferences(ReferenceContainerNode containerNode)
             container.OnChildRemoved += new EventHandler(OnReferenceRemoved);
         }
 
-        #region Private Members
         private Reference AddFromSelectorData(VSCOMPONENTSELECTORDATA selector)
         {
             ReferenceNode refNode = container.AddReferenceFromSelectorData(selector);
@@ -57,9 +56,6 @@ private Reference FindByName(string stringIndex)
             }
             return null;
         }
-        #endregion
-
-        #region References Members
 
         public Reference Add(string bstrPath)
         {
@@ -258,15 +254,10 @@ public object Parent
             }
         }
 
-        #endregion
-
-        #region _dispReferencesEvents_Event Members
         public event _dispReferencesEvents_ReferenceAddedEventHandler ReferenceAdded;
         public event _dispReferencesEvents_ReferenceChangedEventHandler ReferenceChanged;
         public event _dispReferencesEvents_ReferenceRemovedEventHandler ReferenceRemoved;
-        #endregion
 
-        #region Callbacks for the HierarchyNode events
         private void OnReferenceAdded(object sender, HierarchyNodeEventArgs args)
         {
             // Validate the parameters.
@@ -336,9 +327,7 @@ private void OnReferenceRemoved(object sender, HierarchyNodeEventArgs args)
                 ReferenceRemoved(reference);
             }
         }
-        #endregion
 
-        #region IEventSource<_dispReferencesEvents> Members
         void IEventSource<_dispReferencesEvents>.OnSinkAdded(_dispReferencesEvents sink)
         {
             ReferenceAdded += new _dispReferencesEvents_ReferenceAddedEventHandler(sink.ReferenceAdded);
@@ -352,6 +341,5 @@ void IEventSource<_dispReferencesEvents>.OnSinkRemoved(_dispReferencesEvents sin
             ReferenceChanged -= new _dispReferencesEvents_ReferenceChangedEventHandler(sink.ReferenceChanged);
             ReferenceRemoved -= new _dispReferencesEvents_ReferenceRemovedEventHandler(sink.ReferenceRemoved);
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProject.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProject.cs
index e1215b4517f..18904cacd9a 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProject.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProject.cs
@@ -24,19 +24,13 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAVSProject : VSProject
     {
-        #region fields
         private ProjectNode project;
         private OAVSProjectEvents events;
-        #endregion
 
-        #region ctors
         internal OAVSProject(ProjectNode project)
         {
             this.project = project;
         }
-        #endregion
-
-        #region VSProject Members
 
         public ProjectItem AddWebReference(string bstrUrl)
         {
@@ -168,8 +162,6 @@ public bool WorkOffline
                 throw new NotImplementedException();
             }
         }
-
-        #endregion
     }
 
     /// 
@@ -179,18 +171,12 @@ public bool WorkOffline
     [ComVisible(true), CLSCompliant(false)]
     public class OAVSProjectEvents : VSProjectEvents
     {
-        #region fields
         private OAVSProject vsProject;
-        #endregion
 
-        #region ctors
         internal OAVSProjectEvents(OAVSProject vsProject)
         {
             this.vsProject = vsProject;
         }
-        #endregion
-
-        #region VSProjectEvents Members
 
         public BuildManagerEvents BuildManagerEvents
         {
@@ -216,8 +202,6 @@ public ReferencesEvents ReferencesEvents
                 return vsProject.References as ReferencesEvents;
             }
         }
-
-        #endregion
     }
 
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProjectItem.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProjectItem.cs
index 73c9f80f38b..d6b1902fae5 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProjectItem.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Automation/VSProject/OAVSProjectItem.cs
@@ -25,18 +25,12 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem.Automation
     [ComVisible(true), CLSCompliant(false)]
     public class OAVSProjectItem : VSProjectItem
     {
-        #region fields
         private FileNode fileNode;
-        #endregion
 
-        #region ctors
         internal OAVSProjectItem(FileNode fileNode)
         {
             this.FileNode = fileNode;
         }
-        #endregion
-
-        #region VSProjectItem Members
 
         public virtual Project ContainingProject
         {
@@ -55,17 +49,8 @@ public virtual DTE DTE
 
         public virtual void RunCustomTool()
         {
-#if SINGLE_FILE_GENERATOR
-            this.FileNode.RunGenerator();
-#endif
         }
 
-        #endregion
-
-        #region public properties
-        /// 
-        /// File Node property
-        /// 
         public FileNode FileNode
         {
             get
@@ -77,7 +62,5 @@ public FileNode FileNode
                 fileNode = value;
             }
         }
-        #endregion
-
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/BuildDependency.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/BuildDependency.cs
index d2efa7c89a7..7159034c3d5 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/BuildDependency.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/BuildDependency.cs
@@ -23,7 +23,6 @@ public BuildDependency(ProjectNode projectMgr, Guid projectReference)
             this.projectMgr = projectMgr;
         }
 
-        #region IVsBuildDependency methods
         public int get_CanonicalName(out string canonicalName)
         {
             canonicalName = null;
@@ -73,9 +72,6 @@ public int get_ReferredProject(out object unknownProject)
             return (unknownProject == null) ? VSConstants.S_FALSE : VSConstants.S_OK;
         }
 
-        #endregion
-
-        #region helper methods
         private IVsHierarchy GetReferencedHierarchy()
         {
             IVsHierarchy hierarchy = null;
@@ -89,7 +85,5 @@ private IVsHierarchy GetReferencedHierarchy()
 
         }
 
-        #endregion
-
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ComReferenceNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ComReferenceNode.cs
index 9a46f493137..f1600d14264 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ComReferenceNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ComReferenceNode.cs
@@ -35,7 +35,6 @@ private enum RegKind
         [ DllImport( "oleaut32.dll", CharSet = CharSet.Unicode, PreserveSig = false )]
         private static extern void LoadTypeLibEx(string strTypeLibName, RegKind regKind, [ MarshalAs( UnmanagedType.Interface )] out object typeLib );
 
-        #region fields
         private string typeName;
         private Guid typeGuid;
         private string projectRelativeFilePath;
@@ -43,9 +42,7 @@ [ DllImport( "oleaut32.dll", CharSet = CharSet.Unicode, PreserveSig = false )]
         private string minorVersionNumber;
         private string majorVersionNumber;
         private readonly int lcid;
-        #endregion
 
-        #region properties
         public override string Caption
         {
             get { return this.typeName; }
@@ -104,7 +101,7 @@ public int MinorVersionNumber
             }
         }
         private Automation.OAComReference comReference;
-        /*internal, but public for FSharp.Project.dll*/ public override object Object
+        public override object Object
         {
             get
             {
@@ -115,12 +112,7 @@ public int MinorVersionNumber
                 return comReference;
             }
         }
-        #endregion
 
-        #region ctors
-        /// 
-        /// Constructor for the ComReferenceNode. 
-        /// 
         internal ComReferenceNode(ProjectNode root, ProjectElement element)
             : base(root, element)
         {
@@ -213,13 +205,10 @@ internal ComReferenceNode(ProjectNode root, string filePath)
             }
         }
 
-        #endregion
-
-        #region methods
         /// 
         /// Links a reference node to the project and hierarchy.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override void BindReferenceData()
+        public override void BindReferenceData()
         {
             Debug.Assert(this.ItemNode != null, "The AssemblyName field has not been initialized");
 
@@ -240,7 +229,7 @@ internal ComReferenceNode(ProjectNode root, string filePath)
         /// Checks if a reference is already added. The method parses all references and compares the the FinalItemSpec and the Guid.
         /// 
         /// true if the assembly has already been added.
-        public /*protected, but public for FSharp.Project.dll*/ override bool IsAlreadyAdded(out ReferenceNode existingNode)
+        public override bool IsAlreadyAdded(out ReferenceNode existingNode)
         {
             ReferenceContainerNode referencesFolder = this.ProjectMgr.FindChild(ReferenceContainerNode.ReferencesNodeVirtualName) as ReferenceContainerNode;
             Debug.Assert(referencesFolder != null, "Could not find the References node");
@@ -268,7 +257,7 @@ internal ComReferenceNode(ProjectNode root, string filePath)
         /// Determines if this is node a valid node for painting the default reference icon.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanShowDefaultIcon()
+        public override bool CanShowDefaultIcon()
         {
             return !String.IsNullOrEmpty(this.installedFilePath);
         }
@@ -380,7 +369,5 @@ private void SetInstalledFilePath()
                 }
             }
         }
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigProvider.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigProvider.cs
index 19160614c1a..288564c63ce 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigProvider.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigProvider.cs
@@ -30,18 +30,15 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     [ComVisible(true)]
     public class ConfigProvider : IVsCfgProvider2, IVsProjectCfgProvider, IVsExtensibleObject
     {
-        #region fields
         private ProjectNode project;
         private EventSinkCollection cfgEventSinks = new EventSinkCollection();
         private List, string>> newCfgProps = new List, string>>();
         private Dictionary configurationsList = new Dictionary();
-        #endregion
 
-        #region Properties
         /// 
         /// The associated project.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ ProjectNode ProjectMgr
+        public ProjectNode ProjectMgr
         {
             get
             {
@@ -65,16 +62,11 @@ public virtual List, string>> NewConfi
             }
         }
 
-        #endregion
-
-        #region ctors
         internal ConfigProvider(ProjectNode manager)
         {
             this.project = manager;
         }
-        #endregion
 
-        #region methods
         /// 
         /// Creates new Project Configuartion objects based on the configuration name.
         /// 
@@ -99,9 +91,6 @@ internal virtual ProjectConfig CreateProjectConfiguration(ConfigCanonicalName ca
             return new ProjectConfig(this.project, canonicalName);
         }
 
-        #endregion
-
-        #region IVsProjectCfgProvider methods
         /// 
         /// Provides access to the IVsProjectCfg interface implemented on a project's configuration object. 
         /// 
@@ -162,11 +151,8 @@ public virtual int get_UsesIndependentConfigurations(out int usesIndependentConf
             usesIndependentConfigurations = 1;
             return VSConstants.S_OK;
         }
-        #endregion
 
 
-
-        #region IVsCfgProvider2 methods
         /// 
         /// Copies an existing configuration name or creates a new one. 
         /// 
@@ -690,9 +676,6 @@ public virtual int AdviseCfgProviderEvents(IVsCfgProviderEvents sink, out uint c
             cookie = this.cfgEventSinks.Add(sink);
             return VSConstants.S_OK;
         }
-        #endregion
-
-#region IVsExtensibleObject Members
 
         /// 
         /// Proved access to an IDispatchable object being a list of configuration properties
@@ -717,9 +700,7 @@ public virtual int GetAutomationObject(string configurationName, out object conf
             return VSConstants.S_OK;
 
         }
-        #endregion
 
-#region helper methods
         /// 
         /// Called when a new configuration name was added.
         /// 
@@ -880,7 +861,6 @@ private static int GetPlatforms(uint celt, string[] names, uint[] actual, string
 
             return VSConstants.S_OK;
         }
-        #endregion
 
         /// 
         /// Get all the configurations in the project.
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigurationProperties.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigurationProperties.cs
index 2bedbb1e7d7..bb973d03208 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigurationProperties.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ConfigurationProperties.cs
@@ -24,18 +24,12 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     public class ProjectConfigProperties : 
          VSLangProj.ProjectConfigurationProperties
     {
-        #region fields
         private ProjectConfig projectConfig;
-        #endregion
 
-        #region ctors
         internal ProjectConfigProperties(ProjectConfig projectConfig)
         {
             this.projectConfig = projectConfig;
         }
-        #endregion
-
-        #region IProjectConfigProperties Members
 
         public virtual string OutputPath
         {
@@ -49,8 +43,6 @@ public virtual string OutputPath
             }
         }
 
-        #endregion
-        #region VSLangProj.ProjectConfigurationProperties
         public string __id
         {
             get { return UIThread.DoOnUIThread(() => projectConfig.ConfigName); }
@@ -336,7 +328,6 @@ public string RemoteDebugMachine
             get { return UIThread.DoOnUIThread(() => projectConfig.RemoteDebugMachine); }
             set { UIThread.DoOnUIThread(() => { projectConfig.RemoteDebugMachine = value; }); }
         }
-        #endregion
 
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DataObject.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DataObject.cs
index ee937d49399..d97619ec958 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DataObject.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DataObject.cs
@@ -34,7 +34,6 @@ internal enum tagTYMED
 
         internal sealed class DataCacheEntry : IDisposable
         {
-                #region fields
                 /// 
                 /// Defines an object that will be a mutex for this object for synchronizing thread calls.
                 /// 
@@ -47,10 +46,8 @@ internal sealed class DataCacheEntry : IDisposable
                 private DATADIR dataDir;
 
                 private bool isDisposed;
-                #endregion
 
-                #region properties
-                /*internal, but public for FSharp.Project.dll*/ public FORMATETC Format
+                public FORMATETC Format
                 {
                         get
                         {
@@ -58,7 +55,7 @@ internal sealed class DataCacheEntry : IDisposable
                         }
                 }
 
-                /*internal, but public for FSharp.Project.dll*/ public long Data
+                public long Data
                 {
                         get
                         {
@@ -67,7 +64,7 @@ internal sealed class DataCacheEntry : IDisposable
                 }
 
                 [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-                /*internal, but public for FSharp.Project.dll*/ public DATADIR DataDir
+                public DATADIR DataDir
                 {
                         get
                         {
@@ -75,19 +72,16 @@ internal sealed class DataCacheEntry : IDisposable
                         }
                 }
 
-                #endregion
-
                 /// 
                 /// The IntPtr is data allocated that should be removed. It is allocated by the ProcessSelectionData method.
                 /// 
-                /*internal, but public for FSharp.Project.dll*/ public DataCacheEntry(FORMATETC fmt, IntPtr data, DATADIR dir)
+                public DataCacheEntry(FORMATETC fmt, IntPtr data, DATADIR dir)
                 {
                         this.format = fmt;
                         this.data = (long)data;
                         this.dataDir = dir;
                 }
 
-                #region Dispose
                 ~DataCacheEntry()
                 {
                         Dispose(false);
@@ -128,7 +122,6 @@ private void Dispose(bool disposing)
                                 }
                         }
                 }
-                #endregion
         }
 
         /// 
@@ -137,28 +130,25 @@ private void Dispose(bool disposing)
         /// 
         internal sealed class DataObject : IDataObject
         {
-                #region fields
-                /*internal, but public for FSharp.Project.dll*/ public const int DATA_S_SAMEFORMATETC = 0x00040130;
+                public const int DATA_S_SAMEFORMATETC = 0x00040130;
 
-                /*internal, but public for FSharp.Project.dll*/ public static readonly int DATA_E_FORMATETC = ForceCast(0x80040064);
+                public static readonly int DATA_E_FORMATETC = ForceCast(0x80040064);
 
                 EventSinkCollection map;
 
                 ArrayList entries;
-                #endregion
 
-                /*internal, but public for FSharp.Project.dll*/ public DataObject()
+                public DataObject()
                 {
                         this.map = new EventSinkCollection();
                         this.entries = new ArrayList();
                 }
 
-                /*internal, but public for FSharp.Project.dll*/ public void SetData(FORMATETC format, IntPtr data)
+                public void SetData(FORMATETC format, IntPtr data)
                 {
                         this.entries.Add(new DataCacheEntry(format, data, DATADIR.DATADIR_SET));
                 }
 
-                #region IDataObject methods
                 int IDataObject.DAdvise(FORMATETC[] e, uint adv, IAdviseSink sink, out uint cookie)
                 {
                         STATDATA sdata = new STATDATA();
@@ -237,32 +227,28 @@ int IDataObject.QueryGetData(FORMATETC[] fmt)
                 void IDataObject.SetData(FORMATETC[] fmt, STGMEDIUM[] m, int fRelease)
                 {
                 }
-                #endregion
 
-                #region static methods
-                /*internal, but public for FSharp.Project.dll*/ public static int ForceCast(uint i)
+                public static int ForceCast(uint i)
                 {
                         unchecked { return (int)i; }
                 }
 
-                /*internal, but public for FSharp.Project.dll*/ public static uint ForceCast(int i)
+                public static uint ForceCast(int i)
                 {
                         unchecked { return (uint)i; }
                 }
-
-                #endregion
         }
 
         [SecurityPermissionAttribute(SecurityAction.Demand, Flags = SecurityPermissionFlag.UnmanagedCode)]
         internal static class DragDropHelper
         {
 #pragma warning disable 414
-                /*internal, but public for FSharp.Project.dll*/ internal static readonly ushort CF_VSREFPROJECTS = 0;
-                /*internal, but public for FSharp.Project.dll*/ internal static readonly ushort CF_VSSTGPROJECTS = 0;
-                /*internal, but public for FSharp.Project.dll*/ internal static readonly ushort CF_VSREFPROJECTITEMS = 0;
-                /*internal, but public for FSharp.Project.dll*/ internal static readonly ushort CF_VSSTGPROJECTITEMS = 0;
-                /*internal, but public for FSharp.Project.dll*/ internal static readonly ushort CF_PROJECTCLIPDESCRIPTOR = 0;
-                /*internal, but public for FSharp.Project.dll*/ internal static readonly ushort CF_VSPROJECTCLIPDESCRIPTOR = 0;
+                internal static readonly ushort CF_VSREFPROJECTS = 0;
+                internal static readonly ushort CF_VSSTGPROJECTS = 0;
+                internal static readonly ushort CF_VSREFPROJECTITEMS = 0;
+                internal static readonly ushort CF_VSSTGPROJECTITEMS = 0;
+                internal static readonly ushort CF_PROJECTCLIPDESCRIPTOR = 0;
+                internal static readonly ushort CF_VSPROJECTCLIPDESCRIPTOR = 0;
 #pragma warning restore 414
 
                 static DragDropHelper()
@@ -414,7 +400,7 @@ public static string GetSourceProjectPath(Microsoft.VisualStudio.OLE.Interop.IDa
                 /// 
                 /// 
                 /// 
-                /*internal, but public for FSharp.Project.dll*/ public static string GetData(IntPtr dropHandle)
+                public static string GetData(IntPtr dropHandle)
                 {
                         IntPtr data = UnsafeNativeMethods.GlobalLock(dropHandle);
                         try
@@ -437,7 +423,7 @@ public static string GetSourceProjectPath(Microsoft.VisualStudio.OLE.Interop.IDa
                         return null;
                 }
 
-                /*internal, but public for FSharp.Project.dll*/ public static void FillFormatEtc(ref FORMATETC template, ushort clipFormat, ref FORMATETC result)
+                public static void FillFormatEtc(ref FORMATETC template, ushort clipFormat, ref FORMATETC result)
                 {
                         if (clipFormat != 0)
                         {
@@ -450,7 +436,7 @@ public static string GetSourceProjectPath(Microsoft.VisualStudio.OLE.Interop.IDa
                         }
                 }
 
-                /*internal, but public for FSharp.Project.dll*/ public static void OleCopyFormatEtc(ref FORMATETC src, ref FORMATETC dest)
+                public static void OleCopyFormatEtc(ref FORMATETC src, ref FORMATETC dest)
                 {
                         dest.cfFormat = src.cfFormat;
                         dest.ptd = Marshal.AllocCoTaskMem(Marshal.SizeOf(src.ptd));
@@ -460,7 +446,7 @@ public static string GetSourceProjectPath(Microsoft.VisualStudio.OLE.Interop.IDa
                         dest.tymed = src.tymed;
                 }
 
-                /*internal, but public for FSharp.Project.dll*/ public static IntPtr CopyHGlobal(IntPtr data)
+                public static IntPtr CopyHGlobal(IntPtr data)
                 {
                         IntPtr src = UnsafeNativeMethods.GlobalLock(data);
                         int size = UnsafeNativeMethods.GlobalSize(data);
@@ -491,7 +477,7 @@ public static string GetSourceProjectPath(Microsoft.VisualStudio.OLE.Interop.IDa
                         return ptr;
                 }
 
-                /*internal, but public for FSharp.Project.dll*/ public static void CopyStringToHGlobal(string s, IntPtr data, int bufferSize)
+                public static void CopyStringToHGlobal(string s, IntPtr data, int bufferSize)
                 {
                         Int16 nullTerminator = 0;
                         int dwSize = Marshal.SizeOf(nullTerminator);
@@ -529,7 +515,6 @@ void IEnumSTATDATA.Clone(out IEnumSTATDATA clone)
                 int IEnumSTATDATA.Next(uint celt, STATDATA[] d, out uint fetched)
                 {
                         uint rc = 0;
-                        //uint size = (fetched != null) ? fetched[0] : 0;
                         for (uint i = 0; i < celt; i++)
                         {
                                 if (e.MoveNext())
@@ -588,7 +573,6 @@ void IEnumFORMATETC.Clone(out IEnumFORMATETC clone)
                 int IEnumFORMATETC.Next(uint celt, FORMATETC[] d, uint[] fetched)
                 {
                         uint rc = 0;
-                        //uint size = (fetched != null) ? fetched[0] : 0;
                         for (uint i = 0; i < celt; i++)
                         {
                                 if (e.MoveNext())
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DependentFileNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DependentFileNode.cs
deleted file mode 100644
index 7807dc77049..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DependentFileNode.cs
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if UNUSED_DEPENDENT_FILES
-using System;
-using System.Runtime.InteropServices;
-using System.Collections;
-using System.Collections.Generic;
-using System.IO;
-using System.Windows.Forms;
-using System.Diagnostics;
-using System.Globalization;
-using System.Text;
-using System.Threading;
-using Microsoft.VisualStudio.Shell;
-using Microsoft.VisualStudio.Shell.Interop;
-using Microsoft.VisualStudio.OLE.Interop;
-using Microsoft.VisualStudio.TextManager.Interop;
-using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants;
-using VsCommands = Microsoft.VisualStudio.VSConstants.VSStd97CmdID;
-using VsCommands2K = Microsoft.VisualStudio.VSConstants.VSStd2KCmdID;
-using MSBuild = Microsoft.Build.BuildEngine;
-using System.Diagnostics.CodeAnalysis;
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem
-{
-    /// 
-    /// Defines the logic for all dependent file nodes (solution explorer icon, commands etc.)
-    /// 
-    [CLSCompliant(false)]
-    [ComVisible(true)]
-    public class DependentFileNode : FileNode
-    {
-        #region fields
-        /// 
-        /// Defines if the node has a name relation to its parent node
-        /// e.g. Form1.ext and Form1.resx are name related (until first occurence of extention separator)
-        /// 
-        #endregion
-
-        #region Properties
-        public override int ImageIndex
-        {
-            get { return (this.CanShowDefaultIcon() ? (int)ProjectNode.ImageName.DependentFile : (int) ProjectNode.ImageName.MissingFile); }
-        }
-        #endregion
-
-        #region ctor
-        /// 
-        /// Constructor for the DependentFileNode
-        /// 
-        /// Root of the hierarchy
-        /// Associated project element
-        internal DependentFileNode(ProjectNode root, ProjectElement element)
-            : base(root, element)
-        {
-            this.HasParentNodeNameRelation = false;
-        }
-
-
-        #endregion
-
-        #region overridden methods
-        /// 
-        /// Disable rename
-        /// 
-        /// new label
-        /// E_NOTIMPLE in order to tell the call that we do not support rename
-        public override string GetEditLabel()
-        {
-            throw new NotImplementedException();
-        }
-
-        /// 
-        /// Gets a handle to the icon that should be set for this node
-        /// 
-        /// Whether the folder is open, ignored here.
-        /// Handle to icon for the node
-        public override object GetIconHandle(bool open)
-        {
-            return this.ProjectMgr.ImageHandler.GetIconHandle(this.ImageIndex);
-        }
-
-        /// 
-        /// Disable certain commands for dependent file nodes 
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText, ref QueryStatusResult result)
-        {
-            if (cmdGroup == VsMenus.guidStandardCommandSet97)
-            {
-                switch ((VsCommands)cmd)
-                {
-                    case VsCommands.Copy:
-                    case VsCommands.Paste:
-                    case VsCommands.Cut:
-                    case VsCommands.Rename:
-                        result |= QueryStatusResult.NOTSUPPORTED;
-                        return VSConstants.S_OK;
-
-                    case VsCommands.ViewCode:
-                    case VsCommands.Open:
-                    case VsCommands.OpenWith:
-                        result |= QueryStatusResult.SUPPORTED | QueryStatusResult.ENABLED;
-                        return VSConstants.S_OK;
-                }
-            }
-            else if (cmdGroup == VsMenus.guidStandardCommandSet2K)
-            {
-                if ((VsCommands2K)cmd == VsCommands2K.EXCLUDEFROMPROJECT)
-                {
-                    result |= QueryStatusResult.NOTSUPPORTED;
-                    return VSConstants.S_OK;
-                }
-            }
-            else
-            {
-                return (int)OleConstants.OLECMDERR_E_UNKNOWNGROUP;
-            }
-            return base.QueryStatusOnNode(cmdGroup, cmd, pCmdText, ref result);
-        }
-
-        /// 
-        /// DependentFileNodes node cannot be dragged.
-        /// 
-        /// null
-        public /*protected, but public for FSharp.Project.dll*/ override StringBuilder PrepareSelectedNodesForClipBoard()
-        {
-            return null;
-        }
-
-        public /*protected, but public for FSharp.Project.dll*/ override NodeProperties CreatePropertiesObject()
-        {
-            return new DependentFileNodeProperties(this);
-        }
-
-        /// 
-        /// Redraws the state icon if the node is not excluded from source control.
-        /// 
-        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Scc")]
-        public /*protected, but public for FSharp.Project.dll*/ override void UpdateSccStateIcons()
-        {
-            if (!this.ExcludeNodeFromScc)
-            {
-                this.Parent.ReDraw(UIHierarchyElement.SccState);
-            }
-        }
-        #endregion
-
-    }
-}
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DocumentManager.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DocumentManager.cs
index 5a8e6d6648f..615720b49f2 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DocumentManager.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/DocumentManager.cs
@@ -27,28 +27,20 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     /// 
     internal abstract class DocumentManager
     {
-        #region fields
         private HierarchyNode node = null;
-        #endregion
 
-        #region properties
-        public /*protected, but public for FSharp.Project.dll*/ HierarchyNode Node
+        public HierarchyNode Node
         {
             get
             {
                 return this.node;
             }
         }
-        #endregion
         
-        #region ctors
-        public /*protected, but public for FSharp.Project.dll*/ DocumentManager(HierarchyNode node)
+        public DocumentManager(HierarchyNode node)
         {
             this.node = node;
         }
-        #endregion
-
-        #region virtual methods
 
         /// 
         /// Open a document using the standard editor. This method has no implementation since a document is abstract in this context
@@ -139,13 +131,10 @@ public virtual void Save(bool saveIfDirty)
             }
         }
 
-        #endregion
-
-        #region helper methods
         /// 
         /// Get document properties from RDT
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public void GetDocInfo(
+        public void GetDocInfo(
             out bool isOpen,     // true if the doc is opened
             out bool isDirty,    // true if the doc is dirty
             out bool isOpenedByUs, // true if opened by our project
@@ -186,7 +175,7 @@ public virtual void Save(bool saveIfDirty)
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ string GetOwnerCaption()
+        public string GetOwnerCaption()
         {
             Debug.Assert(this.node != null, "No node has been initialized for the document manager");
 
@@ -196,7 +185,7 @@ public virtual void Save(bool saveIfDirty)
             return (pvar as string);
         }
         
-        public /*protected, but public for FSharp.Project.dll*/ void CloseWindowFrame(ref IVsWindowFrame windowFrame)
+        public void CloseWindowFrame(ref IVsWindowFrame windowFrame)
         {
             if (windowFrame != null)
             {
@@ -211,7 +200,7 @@ public virtual void Save(bool saveIfDirty)
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ string GetFullPathForDocument()
+        public string GetFullPathForDocument()
         {
             string fullPath = String.Empty;
 
@@ -224,9 +213,6 @@ public virtual void Save(bool saveIfDirty)
             return fullPath;
         }
 
-        #endregion
-
-        #region static methods
         /// 
         /// Updates the caption for all windows associated to the document.
         /// 
@@ -349,6 +335,5 @@ public static void RenameDocument(IServiceProvider site, string oldName, string
                 }
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileChangeManager.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileChangeManager.cs
index 5ca5e388f3f..5defa3824f3 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileChangeManager.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileChangeManager.cs
@@ -17,7 +17,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     /// 
     internal class FileChangeManager : IVsFileChangeEvents
     {
-        #region nested objects
         /// 
         /// Defines a data structure that can link a item moniker to the item and its file change cookie.
         /// 
@@ -36,7 +35,7 @@ private struct ObservedItemInfo
             /// 
             /// Defines the nested project item that is to be reloaded.
             /// 
-            /*internal, but public for FSharp.Project.dll*/ public uint ItemID
+            public uint ItemID
             {
                 get
                 {
@@ -52,7 +51,7 @@ private struct ObservedItemInfo
             /// 
             /// Defines the file change cookie that is returned when listenning on file changes on the nested project item.
             /// 
-            /*internal, but public for FSharp.Project.dll*/ public uint FileChangeCookie
+            public uint FileChangeCookie
             {
                 get
                 {
@@ -65,9 +64,7 @@ private struct ObservedItemInfo
                 }
             }
         }
-        #endregion
 
-        #region Fields
         /// 
         /// Event that is raised when one of the observed file names have changed on disk.
         /// 
@@ -84,24 +81,14 @@ private struct ObservedItemInfo
         /// 
         private Dictionary observedItems = new Dictionary();
 
-        /// 
-        /// Has Disposed already been called?
-        /// 
         private bool disposed;
-        #endregion
 
-        #region Constructor
-        /// 
-        /// Overloaded ctor.
-        /// 
-        /*internal, but public for FSharp.Project.dll*/ public FileChangeManager(IServiceProvider serviceProvider)
+        public FileChangeManager(IServiceProvider serviceProvider)
         {
-            #region input validation
             if (serviceProvider == null)
             {
                 throw new ArgumentNullException("serviceProvider");
             }
-            #endregion
 
             this.fileChangeService = (IVsFileChangeEx)serviceProvider.GetService(typeof(SVsFileChangeEx));
 
@@ -111,12 +98,7 @@ private struct ObservedItemInfo
                 throw new InvalidOperationException();
             }
         }
-        #endregion
 
-        #region IDisposable Members
-        /// 
-        /// Disposes resources.
-        /// 
         public void Dispose()
         {
             // Don't dispose more than once
@@ -136,9 +118,7 @@ public void Dispose()
             // Clean the observerItems list
             this.observedItems.Clear();
         }
-        #endregion
 
-        #region IVsFileChangeEvents Members
         /// 
         /// Called when one of the file have changed on disk.
         /// 
@@ -173,14 +153,12 @@ int IVsFileChangeEvents.DirectoryChanged(string directory)
         {
             return VSConstants.S_OK;
         }
-        #endregion
 
-        #region helpers    
         /// 
         /// Observe when the given file is updated on disk. In this case we do not care about the item id that represents the file in the hierarchy.
         /// 
         /// File to observe.
-        /*internal, but public for FSharp.Project.dll*/ public void ObserveItem(string fileName)
+        public void ObserveItem(string fileName)
         {
             this.ObserveItem(fileName, VSConstants.VSITEMID_NIL);
         }
@@ -190,14 +168,12 @@ int IVsFileChangeEvents.DirectoryChanged(string directory)
         /// 
         /// File to observe.
         /// The item id of the item to observe.
-        /*internal, but public for FSharp.Project.dll*/ public void ObserveItem(string fileName, uint id)
+        public void ObserveItem(string fileName, uint id)
         {
-            #region Input validation
             if (String.IsNullOrEmpty(fileName))
             {
                 throw new ArgumentException(SR.GetString(SR.InvalidParameter, CultureInfo.CurrentUICulture), "fileName");
             }
-            #endregion
 
             string fullFileName = Utilities.CanonicalizeFileName(fileName);
             if (!this.observedItems.ContainsKey(fullFileName))
@@ -220,14 +196,12 @@ int IVsFileChangeEvents.DirectoryChanged(string directory)
         /// 
         /// File to ignore observing.
         /// Flag indicating whether or not to ignore changes (1 to ignore, 0 to stop ignoring).
-        /*internal, but public for FSharp.Project.dll*/ public void IgnoreItemChanges(string fileName, bool ignore)
+        public void IgnoreItemChanges(string fileName, bool ignore)
         {
-            #region Input validation
             if (String.IsNullOrEmpty(fileName))
             {
                 throw new ArgumentException(SR.GetString(SR.InvalidParameter, CultureInfo.CurrentUICulture), "fileName");
             }
-            #endregion
 
             string fullFileName = Utilities.CanonicalizeFileName(fileName);
             if (this.observedItems.ContainsKey(fullFileName))
@@ -241,14 +215,12 @@ int IVsFileChangeEvents.DirectoryChanged(string directory)
         /// Stop observing when the file is updated on disk.
         /// 
         /// File to stop observing.
-        /*internal, but public for FSharp.Project.dll*/ public void StopObservingItem(string fileName)
+        public void StopObservingItem(string fileName)
         {
-            #region Input validation
             if (String.IsNullOrEmpty(fileName))
             {
                 throw new ArgumentException(SR.GetString(SR.InvalidParameter, CultureInfo.CurrentUICulture), "fileName");
             }
-            #endregion
 
             string fullFileName = Utilities.CanonicalizeFileName(fileName);
 
@@ -266,6 +238,5 @@ int IVsFileChangeEvents.DirectoryChanged(string directory)
                 ErrorHandler.ThrowOnFailure(this.fileChangeService.UnadviseFileChange(itemInfo.FileChangeCookie));
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileDocumentManager.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileDocumentManager.cs
index 17b23909e3a..c6e7ac9937e 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileDocumentManager.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileDocumentManager.cs
@@ -27,15 +27,10 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     /// 
     internal class FileDocumentManager : DocumentManager
     {
-        #region ctors
-
         public FileDocumentManager(FileNode node)
             : base(node)
         {
         }
-        #endregion
-
-        #region overriden methods
 
         /// 
         /// Open a file using the standard editor
@@ -71,9 +66,6 @@ public override int OpenWithSpecific(uint editorFlags, ref Guid editorType, stri
             return this.Open(newFile, openWith, editorFlags, ref editorType, physicalView, ref logicalView, docDataExisting, out windowFrame, windowFrameAction);
         }
 
-        #endregion
-
-        #region public methods
         /// 
         /// Open a file in a document window with a std editor
         /// 
@@ -142,9 +134,6 @@ public int Open(bool newFile, bool openWith, Guid logicalView, Guid fallbackLogi
             return returnValue;
         }
 
-        #endregion
-
-        #region virtual methods
         /// 
         /// Open a file in a document window
         /// 
@@ -162,10 +151,6 @@ public virtual int Open(bool newFile, bool openWith, ref Guid logicalView, IntPt
             return this.Open(newFile, openWith, 0, ref editorType, null, ref logicalView, docDataExisting, out windowFrame, windowFrameAction);
         }
 
-        #endregion
-
-        #region helper methods
-
         private int Open(bool newFile, bool openWith, uint editorFlags, ref Guid editorType, string physicalView, ref Guid logicalView, IntPtr docDataExisting, out IVsWindowFrame windowFrame, WindowFrameShowAction windowFrameAction)
         {
             windowFrame = null;
@@ -189,7 +174,7 @@ private int Open(bool newFile, bool openWith, uint editorFlags, ref Guid editorT
                 this.Node.OnInvalidateItems(this.Node.Parent);
 
                 // Bail since we are not able to open the item
-                // Do not return an error code otherwise an /*internal, but public for FSharp.Project.dll*/ public error message is shown. The scenario for this operation
+                // Do not return an error code otherwise an public error message is shown. The scenario for this operation
                 // normally is already a reaction to a dialog box telling that the item has been removed.
                 return VSConstants.S_FALSE;
             }
@@ -270,8 +255,5 @@ private int Open(bool newFile, bool openWith, uint editorFlags, ref Guid editorT
 
             return returnValue;
         }
-
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileNode.cs
index 6979ab1cb91..5a326688a94 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FileNode.cs
@@ -72,11 +72,8 @@ public static void Try(Action stepWithEffect, Action compensatingEffect, Action
     [ComVisible(true)]
     public class FileNode : HierarchyNode
     {
-        #region static fiels
         private static Dictionary extensionIcons;
-        #endregion
 
-        #region overriden Properties
         /// 
         /// overwrites of the generic hierarchyitem.
         /// 
@@ -155,9 +152,7 @@ public override string Url
 
             }
         }
-        #endregion
 
-        #region ctor
         static FileNode()
         {
             // Build the dictionary with the mapping between some well known extensions
@@ -215,19 +210,9 @@ internal FileNode(ProjectNode root, ProjectElement element, uint? hierarchyId =
             } 
         } 
 
-        #endregion
-
-        #region overridden methods
-
-        public /*protected, but public for FSharp.Project.dll*/ override NodeProperties CreatePropertiesObject()
+        public override NodeProperties CreatePropertiesObject()
         {
-#if SINGLE_FILE_GENERATOR
-            ISingleFileGenerator generator = this.CreateSingleFileGenerator();
-
-            return generator == null ? new FileNodeProperties(this) : new SingleFileGeneratorNodeProperties(this);
-#else
             return new FileNodeProperties(this);
-#endif
         }
 
         public override object GetIconHandle(bool open)
@@ -373,7 +358,7 @@ public override string GetMkDocument()
         /// Delete the item corresponding to the specified path from storage.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override void DeleteFromStorage(string path)
+        public override void DeleteFromStorage(string path)
         {
             if (FSSafe.File.SafeExists(path))
             {
@@ -385,7 +370,7 @@ public override string GetMkDocument()
         /// 
         /// Rename the underlying document based on the change the user just made to the edit label.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ int SetEditLabel(string label, string relativePath)
+        public int SetEditLabel(string label, string relativePath)
         {
             int returnValue = VSConstants.S_OK;
             uint oldId = this.ID;
@@ -427,12 +412,7 @@ public override string GetMkDocument()
             string oldrelPath = this.ItemNode.GetMetadata(ProjectFileConstants.Include);
 
             RenameDocument(oldName, newName);
-#if UNUSED_DEPENDENT_FILES
-                                if (this is DependentFileNode)
-                                {
-                                        OnInvalidateItems(this.Parent);
-                                }
-#endif
+
             // Return S_FALSE if the hierarchy item id has changed.  This forces VS to flush the stale
             // hierarchy item id.
             if (returnValue == (int)VSConstants.S_OK || returnValue == (int)VSConstants.S_FALSE || returnValue == VSConstants.OLE_E_PROMPTSAVECANCELLED)
@@ -461,7 +441,7 @@ internal override DocumentManager GetDocumentManager()
         /// node delegate to the project and a folder/project node to itself.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override HierarchyNode GetDragTargetHandlerNode()
+        public override HierarchyNode GetDragTargetHandlerNode()
         {
             Debug.Assert(this.ProjectMgr != null, " The project manager is null for the filenode");
             HierarchyNode handlerNode = this;
@@ -472,7 +452,7 @@ internal override DocumentManager GetDocumentManager()
             return handlerNode;
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
+        public override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
         {
             if (this.ProjectMgr == null || this.ProjectMgr.IsClosed)
             {
@@ -500,29 +480,6 @@ internal override DocumentManager GetDocumentManager()
                 }
             }
 
-            // Exec on special filenode commands
-            if (cmdGroup == VsMenus.guidStandardCommandSet2K)
-            {
-#if SINGLE_FILE_GENERATOR
-                switch ((VsCommands2K)cmd)
-                {
-                    case VsCommands2K.RUNCUSTOMTOOL:
-                        {
-                            try
-                            {
-                                this.RunGenerator();
-                                return VSConstants.S_OK;
-                            }
-                            catch (Exception e)
-                            {
-                                Trace.WriteLine("Running Custom Tool failed : " + e.Message);
-                                throw;
-                            }
-                        }
-                }
-#endif
-            }
-
             return base.ExecCommandOnNode(cmdGroup, cmd, nCmdexecopt, pvaIn, pvaOut);
         }
 
@@ -541,7 +498,6 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
                         return VSConstants.S_OK;
 
                     case VsCommands.ViewCode:
-                    //case VsCommands.Delete: goto case VsCommands.OpenWith;
                     case VsCommands.Open:
                     case VsCommands.OpenWith:
                         result |= QueryStatusResult.SUPPORTED | QueryStatusResult.ENABLED;
@@ -555,16 +511,6 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
                     result |= QueryStatusResult.SUPPORTED | QueryStatusResult.ENABLED;
                     return VSConstants.S_OK;
                 }
-#if SINGLE_FILE_GENERATOR
-                if ((VsCommands2K)cmd == VsCommands2K.RUNCUSTOMTOOL)
-                {
-                    if (string.IsNullOrEmpty(this.ItemNode.GetMetadata(ProjectFileConstants.DependentUpon)) && (this.NodeProperties is SingleFileGeneratorNodeProperties))
-                    {
-                        result |= QueryStatusResult.SUPPORTED | QueryStatusResult.ENABLED;
-                        return VSConstants.S_OK;
-                    }
-                }
-#endif
             }
             else
             {
@@ -574,7 +520,7 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
         }
 
 
-        public /*protected, but public for FSharp.Project.dll*/ override void DoDefaultAction()
+        public override void DoDefaultAction()
         {
             CCITracing.TraceCall();
             FileDocumentManager manager = this.GetDocumentManager() as FileDocumentManager;
@@ -588,7 +534,7 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
         /// A pointer to the document in the rdt
         /// The new file path to the document
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override int AfterSaveItemAs(IntPtr docData, string newFilePath)
+        public override int AfterSaveItemAs(IntPtr docData, string newFilePath)
         {
             if (String.IsNullOrEmpty(newFilePath))
             {
@@ -694,7 +640,7 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
         /// Determines if this is node a valid node for painting the default file icon.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanShowDefaultIcon()
+        public override bool CanShowDefaultIcon()
         {
             string moniker = this.GetMkDocument();
 
@@ -706,9 +652,6 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
             return true;
         }
 
-        #endregion
-
-#region virtual methods
         public virtual string FileName
         {
             get
@@ -726,7 +669,7 @@ public virtual string FileName
         /// 
         /// true if user should be presented for UI in case the file is not present
         /// true if file is on disk
-        public /*protected, but public for FSharp.Project.dll*/ virtual bool IsFileOnDisk(bool showMessage)
+        public virtual bool IsFileOnDisk(bool showMessage)
         {
             bool fileExist = IsFileOnDisk(this.Url);
 
@@ -749,7 +692,7 @@ public virtual string FileName
         /// 
         /// Url representing the file
         /// True if the file exist
-        public /*protected, but public for FSharp.Project.dll*/ virtual bool IsFileOnDisk(string path)
+        public virtual bool IsFileOnDisk(string path)
         {
             return FSSafe.File.SafeExists(path);
         }
@@ -762,7 +705,7 @@ public virtual string FileName
         /// The new parent id of the item.
         /// The newly added FileNode.
         /// While a new node will be used to represent the item, the underlying MSBuild item will be the same and as a result file properties saved in the project file will not be lost.
-        public /*protected, but public for FSharp.Project.dll*/ virtual FileNode RenameFileNode(string oldFileName, string newFileName, uint newParentId)
+        public virtual FileNode RenameFileNode(string oldFileName, string newFileName, uint newParentId)
         {
             if (string.Compare(oldFileName, newFileName, StringComparison.Ordinal) == 0)
             {
@@ -874,7 +817,7 @@ public virtual string FileName
         /// Rename all childnodes
         /// 
         /// The newly added Parent node.
-        public /*protected, but public for FSharp.Project.dll*/ virtual void RenameChildNodes(FileNode parentNode)
+        public virtual void RenameChildNodes(FileNode parentNode)
         {
             foreach (HierarchyNode child in GetChildNodes())
             {
@@ -914,7 +857,7 @@ public virtual string FileName
         /// 
         ///  The file that failed to be renamed.
         /// The original filenamee
-        public /*protected, but public for FSharp.Project.dll*/ virtual void RecoverFromRenameFailure(string fileThatFailed, string originalFileName)
+        public virtual void RecoverFromRenameFailure(string fileThatFailed, string originalFileName)
         {
             // TODO does this do anything useful?  did it ever change in the first place?
             if (this.ItemNode != null && !String.IsNullOrEmpty(originalFileName))
@@ -924,7 +867,7 @@ public virtual string FileName
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
+        public override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
         {
             if (deleteOperation == __VSDELETEITEMOPERATION.DELITEMOP_DeleteFromStorage)
             {
@@ -938,22 +881,11 @@ public virtual string FileName
         /// 
         /// Previous name in storage
         /// New name in storage
-        public /*protected, but public for FSharp.Project.dll*/ virtual void RenameInStorage(string oldName, string newName)
+        public virtual void RenameInStorage(string oldName, string newName)
         {
             File.Move(oldName, newName);
         }
 
-#if SINGLE_FILE_GENERATOR
-        /// 
-        /// factory method for creating single file generators.
-        /// 
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual ISingleFileGenerator CreateSingleFileGenerator()
-        {
-            return new SingleFileGenerator(this.ProjectMgr);
-        }
-#endif
-
         /// 
         /// This method should be overridden to provide the list of special files and associated flags for source control.
         /// 
@@ -962,7 +894,7 @@ public virtual string FileName
         /// The flags that are associated to the files.
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Scc")]
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "scc")]
-        public /*protected, but public for FSharp.Project.dll*/ override void GetSccSpecialFiles(string sccFile, IList files, IList flags)
+        public override void GetSccSpecialFiles(string sccFile, IList files, IList flags)
         {
             if (this.ExcludeNodeFromScc)
             {
@@ -985,14 +917,10 @@ public virtual string FileName
             }
         }
 
-        #endregion
-
-#region Helper methods
         /// 
         /// Get's called to rename the eventually running document this hierarchyitem points to
         /// 
         /// returns FALSE if the doc can not be renamed
-        /*internal, but public for FSharp.Project.dll*/
         public bool RenameDocument(string oldName, string newName)
         {
             IVsRunningDocumentTable pRDT = this.GetService(typeof(IVsRunningDocumentTable)) as IVsRunningDocumentTable;
@@ -1120,50 +1048,6 @@ private void RenameCaseOnlyChange(string newFileName)
             uiWindow.ExpandItem(this.ProjectMgr.InteropSafeIVsUIHierarchy, this.ID, EXPANDFLAGS.EXPF_SelectItem);
         }
 
-        #endregion
-
-#region SingleFileGenerator Support methods
-#if SINGLE_FILE_GENERATOR
-        /// 
-        /// Event handler for the Custom tool property changes
-        /// 
-        /// FileNode sending it
-        /// Node event args
-        /*internal, but public for FSharp.Project.dll*/
-        internal virtual void OnCustomToolChanged(object sender, HierarchyNodeEventArgs e)
-        {
-            this.RunGenerator();
-        }
-
-        /// 
-        /// Event handler for the Custom tool namespce property changes
-        /// 
-        /// FileNode sending it
-        /// Node event args
-        /*internal, but public for FSharp.Project.dll*/
-        internal virtual void OnCustomToolNameSpaceChanged(object sender, HierarchyNodeEventArgs e)
-        {
-            this.RunGenerator();
-        }
-#endif
-        #endregion
-
-#region helpers
-#if SINGLE_FILE_GENERATOR
-        /// 
-        /// Runs a generator.
-        /// 
-        /*internal, but public for FSharp.Project.dll*/
-        public void RunGenerator()
-        {
-            ISingleFileGenerator generator = this.CreateSingleFileGenerator();
-            if (generator != null)
-            {
-                generator.RunGenerator(this.Url);
-            }
-        }
-#endif
-
         /// 
         /// Update the ChildNodes after the parent node has been renamed
         /// 
@@ -1187,6 +1071,5 @@ private List GetChildNodes()
             }
             return childNodes;
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FolderNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FolderNode.cs
index 033ccd97645..dd803192cf4 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FolderNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/FolderNode.cs
@@ -25,7 +25,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     [ComVisible(true)]
     public class FolderNode : HierarchyNode
     {
-        #region ctors
         /// 
         /// Constructor for the FolderNode
         /// 
@@ -37,9 +36,7 @@ internal FolderNode(ProjectNode root, string relativePath, ProjectElement elemen
         {
             this.VirtualNodeName = relativePath.TrimEnd('\\');
         }
-        #endregion
 
-        #region overridden properties
         /// 
         /// This relates to the SCC glyph
         /// 
@@ -51,15 +48,13 @@ public override VsStateIcon StateIconIndex
                 return VsStateIcon.STATEICON_NOSTATEICON;
             }
         }
-        #endregion
 
-        #region overridden methods
-        public /*protected, but public for FSharp.Project.dll*/ override NodeProperties CreatePropertiesObject()
+        public override NodeProperties CreatePropertiesObject()
         {
             return new FolderNodeProperties(this);
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override void DeleteFromStorage(string path)
+        public override void DeleteFromStorage(string path)
         {
             this.DeleteFolder(path);
         }
@@ -182,7 +177,7 @@ public override string GetMkDocument()
         /// 
         /// The list of files to be placed under source control.
         /// The flags that are associated to the files.
-        public /*protected, but public for FSharp.Project.dll*/ override void GetSccFiles(System.Collections.Generic.IList files, System.Collections.Generic.IList flags)
+        public override void GetSccFiles(System.Collections.Generic.IList files, System.Collections.Generic.IList flags)
         {
             return;
         }
@@ -195,7 +190,7 @@ public override string GetMkDocument()
         /// The flags that are associated to the files.
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Scc")]
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "scc")]
-        public /*protected, but public for FSharp.Project.dll*/ override void GetSccSpecialFiles(string sccFile, IList files, IList flags)
+        public override void GetSccSpecialFiles(string sccFile, IList files, IList flags)
         {
             if (this.ExcludeNodeFromScc)
             {
@@ -216,23 +211,12 @@ public override string GetMkDocument()
             {
                 throw new ArgumentException(SR.GetString(SR.InvalidParameter, CultureInfo.CurrentUICulture), "sccFile");
             }
-
-            // Get the file node for the file passed in.
-            FileNode node = this.FindChild(sccFile) as FileNode;
-
-#if UNUSED_DEPENDENT_FILES
-            // Dependents do not participate directly in scc.
-            if (node != null && !(node is DependentFileNode))
-            {
-                node.GetSccSpecialFiles(sccFile, files, flags);
-            }
-#endif
         }
 
         /// 
         /// Recursevily walks the folder nodes and redraws the state icons
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override void UpdateSccStateIcons()
+        public override void UpdateSccStateIcons()
         {
             for (HierarchyNode child = this.FirstChild; child != null; child = child.NextSibling)
             {
@@ -267,6 +251,12 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
                     result |= QueryStatusResult.SUPPORTED | QueryStatusResult.ENABLED;
                     return VSConstants.S_OK;
                 }
+                if ((VsCommands2K) cmd == VsMenus.OpenFolderInExplorerCmdId)
+                {
+                    result |= QueryStatusResult.SUPPORTED;
+                    result |= CanOpenFolderInExplorer()? QueryStatusResult.ENABLED : QueryStatusResult.INVISIBLE;
+                    return VSConstants.S_OK;
+                }
             }
             else
             {
@@ -275,7 +265,32 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
             return base.QueryStatusOnNode(cmdGroup, cmd, pCmdText, ref result);
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
+        public bool CanOpenFolderInExplorer()
+        {
+            return Directory.Exists(this.Url);
+        }
+
+        public void OpenFolderInExplorer()
+        {
+            if (CanOpenFolderInExplorer())
+                Process.Start(this.Url);
+        }
+
+        public override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
+        {
+            if (cmdGroup == VsMenus.guidStandardCommandSet2K)
+            {
+                if ((VsCommands2K) cmd == VsMenus.OpenFolderInExplorerCmdId)
+                {
+                    OpenFolderInExplorer();
+                    return VSConstants.S_OK;
+                }
+            }
+
+            return base.ExecCommandOnNode(cmdGroup, cmd, nCmdexecopt, pvaIn, pvaOut);
+        }
+
+        public override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
         {
             if (deleteOperation == __VSDELETEITEMOPERATION.DELITEMOP_DeleteFromStorage)
             {
@@ -284,9 +299,6 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
             return false;
         }
 
-        #endregion
-
-        #region virtual methods
         /// 
         /// Override if your node is not a file system folder so that
         /// it does nothing or it deletes it from your storage location.
@@ -374,9 +386,7 @@ public virtual void RenameDirectory(string newPath)
                 Directory.Move(this.Url, newPath);
             }
         }
-        #endregion
 
-        #region helper methods
         private void RenameFolder(string newName)
         {
             // Do the rename (note that we only do the physical rename if the leaf name changed)
@@ -433,7 +443,5 @@ private int ShowFileOrFolderAlreadExistsErrorMessage(string newPath)
                 throw new InvalidOperationException(errorMessage);
             }
         }
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GlobalPropertyHandler.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GlobalPropertyHandler.cs
deleted file mode 100644
index b2e48a93e0f..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GlobalPropertyHandler.cs
+++ /dev/null
@@ -1,2 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GlobalSuppressions.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GlobalSuppressions.cs
index 650cd150977..5dd47c30cbb 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GlobalSuppressions.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/GlobalSuppressions.cs
@@ -34,23 +34,11 @@
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.HierarchyNode.#Remove(System.Boolean)")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.HierarchyNode.#SaveItem(Microsoft.VisualStudio.Shell.Interop.VSSAVEFLAGS,System.String,System.UInt32,System.IntPtr,System.Int32&)")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ImageHandler.#GetIconHandle(System.Int32)")]
-#if UNUSED_NESTED_PROJECTS
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#Init(System.String,System.String,System.String,Microsoft.VisualStudio.Shell.Interop.__VSCREATEPROJFLAGS)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#IsItemDirty(System.UInt32,System.IntPtr,System.Int32&)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#LockRDTEntry()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#RenameNestedProjectInParentProject(System.String)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#SaveItem(Microsoft.VisualStudio.Shell.Interop.VSSAVEFLAGS,System.String,System.UInt32,System.IntPtr,System.Int32&)")]
-#endif
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.OleServiceProvider.#QueryService(System.Guid&,System.Guid&,System.IntPtr&)")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectConfig.#.ctor(Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectNode,System.String)")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectConfig.#DebugLaunch(System.UInt32)")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectConfig.#Microsoft.VisualStudio.Shell.Interop.IVsProjectFlavorCfg.get_CfgType(System.Guid&,System.IntPtr&)")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectConfig.#SetConfigurationProperty(System.String,System.String)")]
-#if UNUSED_NESTED_PROJECTS
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#CloseChildren()")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#GetNestedHierarchy(System.UInt32,System.Guid&,System.IntPtr&,System.UInt32&)")]
-[assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#OpenChildren()")]
-#endif
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectElement.#ItemName")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectElement.#SetMetadata(System.String,System.String)")]
 [assembly: SuppressMessage("Microsoft.Security", "CA2122:DoNotIndirectlyExposeMethodsWithLinkDemands", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectFactory.#CreateProject(System.String,System.String,System.String,System.UInt32,System.Guid&,System.IntPtr&,System.Int32&)")]
@@ -139,27 +127,9 @@
 [assembly: SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.IDEBuildLogger.#ShutdownLogger()", MessageId = "")]
 [assembly: SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.IDEBuildLogger.#get_WarningString()", MessageId = "")]
 [assembly: SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ImageHandler.#.ctor(System.Windows.Forms.ImageList)", MessageId = "")]
-#if UNUSED_NESTED_PROJECTS
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#DelegateGetPropertyToNested(System.Int32)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsHierarchy.GetProperty(System.UInt32,System.Int32,System.Object@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#GetIconHandle(System.Boolean)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsHierarchy.GetProperty(System.UInt32,System.Int32,System.Object@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#Init(System.String,System.String,System.String,Microsoft.VisualStudio.Shell.Interop.__VSCREATEPROJFLAGS)", MessageId = "")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#InitializeInstanceGuid()", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsHierarchy.GetGuidProperty(System.UInt32,System.Int32,System.Guid@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#InitializeInstanceGuid()", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsHierarchy.SetGuidProperty(System.UInt32,System.Int32,System.Guid@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#InitImageHandler()", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsHierarchy.GetProperty(System.UInt32,System.Int32,System.Object@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#OnChanged(System.Int32)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsProject3.GetMkDocument(System.UInt32,System.String@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#SaveItem(Microsoft.VisualStudio.Shell.Interop.VSSAVEFLAGS,System.String,System.UInt32,System.IntPtr,System.Int32&)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsUIShell.SaveDocDataToFile(Microsoft.VisualStudio.Shell.Interop.VSSAVEFLAGS,System.Object,System.String,System.String@,System.Int32@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode.#SetDocCookieOnNestedHier(System.UInt32)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsHierarchy.SetProperty(System.UInt32,System.Int32,System.Object)")]
-#endif
 [assembly: SuppressMessage("Microsoft.Design", "CA1034:NestedTypesShouldNotBeVisible", Scope = "type", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.OleServiceProvider+ServiceCreatorCallback", MessageId = "")]
 [assembly: SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.OleServiceProvider+ServiceData.#.ctor(System.Type,System.Object,Microsoft.VisualStudio.FSharp.ProjectSystem.OleServiceProvider+ServiceCreatorCallback,System.Boolean)", MessageId = "")]
 [assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectConfig.#IsFlavorDirty(Microsoft.VisualStudio.Shell.Interop._PersistStorageType)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IPersistXMLFragment.IsFragmentDirty(System.UInt32,System.Int32@)")]
-#if UNUSED_NESTED_PROJECTS
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#ReloadNestedProjectNode(Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsFireSolutionEvents.FireOnAfterLoadProject(Microsoft.VisualStudio.Shell.Interop.IVsHierarchy)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#ReloadNestedProjectNode(Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsSolution.CloseSolutionElement(System.UInt32,Microsoft.VisualStudio.Shell.Interop.IVsHierarchy,System.UInt32)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#ReloadNestedProjectNode(Microsoft.VisualStudio.FSharp.ProjectSystem.NestedProjectNode)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsSolution.GetProjectOfUniqueName(System.String,Microsoft.VisualStudio.Shell.Interop.IVsHierarchy@)")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#RunVsTemplateWizard(Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectElement,System.Boolean)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsDetermineWizardTrust.OnWizardCompleted")]
-[assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectContainerNode.#RunVsTemplateWizard(Microsoft.VisualStudio.FSharp.ProjectSystem.ProjectElement,System.Boolean)", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsDetermineWizardTrust.OnWizardInitiated(System.String,System.Guid@)")]
-#endif
 [assembly: SuppressMessage("Microsoft.Usage", "CA2208:InstantiateArgumentExceptionsCorrectly", Scope = "member", Target = "Microsoft.VisualStudio.Package.ProjectNode.#AddFolderFromOtherProject(System.String,Microsoft.VisualStudio.Package.HierarchyNode)", MessageId = "")]
 [assembly: SuppressMessage("Microsoft.Usage", "CA1806:DoNotIgnoreMethodResults", Scope = "member", Target = "Microsoft.VisualStudio.Package.ProjectNode.#AddItemWithSpecific(System.UInt32,Microsoft.VisualStudio.Shell.Interop.VSADDITEMOPERATION,System.String,System.UInt32,System.String[],System.IntPtr,System.UInt32,System.Guid&,System.String,System.Guid&,Microsoft.VisualStudio.Shell.Interop.VSADDRESULT[])", MessageId = "Microsoft.VisualStudio.Shell.Interop.IVsFileChangeEx.IgnoreFile(System.UInt32,System.String,System.Int32)")]
 [assembly: SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode", Scope = "member", Target = "Microsoft.VisualStudio.Package.ProjectNode.#AddReferenceCouldNotBeAddedErrorMessage(System.String)", MessageId = "")]
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/HierarchyNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/HierarchyNode.cs
index e82ed83c232..075e89c2216 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/HierarchyNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/HierarchyNode.cs
@@ -37,9 +37,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     public abstract class HierarchyNode :
         IVsUIHierarchy,
         IVsPersistHierarchyItem,
-#if IMPLEMENT_IVSPERSISTHIERARCHYITEM2
-        IVsPersistHierarchyItem2,
-#endif
         Microsoft.VisualStudio.OLE.Interop.IOleCommandTarget,
         IVsHierarchyDropDataSource2,
         IVsHierarchyDropDataSource,
@@ -48,7 +45,6 @@ public abstract class HierarchyNode :
         IVsSetTargetFrameworkWorkerCallback,
         IVsProjectResources,
         IDisposable
-    //, IVsBuildStatusCallback 
     {
 
         // for good debugger experience
@@ -56,20 +52,18 @@ public override string ToString()
         {
             return string.Format("\"{0}\" ({1})", this.Caption, this.GetType());
         }
-        #region nested types
+
         /// 
         /// DropEffect as defined in oleidl.h
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public enum DropEffect
+        public enum DropEffect
         {
             None,
             Copy = 1,
             Move = 2,
             Link = 4
         };
-        #endregion
 
-        #region Events
         internal event EventHandler OnChildAdded
         {
             add { onChildAdded += value; }
@@ -80,18 +74,14 @@ internal event EventHandler OnChildRemoved
             add { onChildRemoved += value; }
             remove { onChildRemoved -= value; }
         }
-        #endregion
 
-        #region static/const fields
         public static readonly Guid SolutionExplorer = new Guid(EnvDTE.Constants.vsWindowKindSolutionExplorer);
         public const int NoImage = -1;
 #if DEBUG
         /*Available only in debug build for FSharp.Project.dll*/ 
         public static int LastTracedProperty = 0;
 #endif
-        #endregion
 
-        #region fields
         private EventSinkCollection hierarchyEventSinks = new EventSinkCollection();
         private ProjectNode projectMgr;
         private ProjectElement itemNode;
@@ -115,44 +105,22 @@ internal event EventHandler OnChildRemoved
         private List itemsDraggedOrCutOrCopied;
         private bool sourceDraggedOrCutOrCopied;
 
-        /// 
-        /// Has the object been disposed.
-        /// 
-        /// We will not specify a property for isDisposed, rather it is expected that the a private flag is defined
-        /// on all subclasses. We do not want get in a situation where the base class's dipose is not called because a child sets the flag through the property.
         private bool isDisposed;
-        #endregion
 
-        #region abstract properties
-        /// 
-        /// The URL of the node.
-        /// 
-        /// 
         public abstract string Url
         {
             get;
         }
 
-        /// 
-        /// The Caption of the node.
-        /// 
-        /// 
         public abstract string Caption
         {
             get;
         }
 
-        /// 
-        /// The item type guid associated to a node.
-        /// 
-        /// 
         public abstract Guid ItemTypeGuid
         {
             get;
         }
-        #endregion
-
-        #region virtual properties
 
         public virtual bool IsNonMemberItem
         {
@@ -262,13 +230,10 @@ public virtual NodeProperties NodeProperties
         /// Returns an object that is a special view over this object; this is the value
         /// returned by the Object property of the automation objects.
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public virtual object Object
+        public virtual object Object
         {
             get { return this; }
         }
-        #endregion
-
-        #region properties
 
         internal OleServiceProvider OleServiceProvider
         {
@@ -471,7 +436,7 @@ public bool HasParentNodeNameRelation
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ bool SourceDraggedOrCutOrCopied
+        public bool SourceDraggedOrCutOrCopied
         {
             get
             {
@@ -483,16 +448,13 @@ public bool HasParentNodeNameRelation
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ List ItemsDraggedOrCutOrCopied
+        public List ItemsDraggedOrCutOrCopied
         {
             get
             {
                 return this.itemsDraggedOrCutOrCopied;
             }
         }
-        #endregion
-
-        #region ctors
 
         internal HierarchyNode()
         {
@@ -526,15 +488,13 @@ internal HierarchyNode(ProjectNode root)
             : this(root, new ProjectElement(root, null, true))
         {
         }
-        #endregion
 
-        #region virtual methods
         /// 
         /// Creates an object derived from NodeProperties that will be used to expose properties
         /// spacific for this object to the property browser.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual NodeProperties CreatePropertiesObject()
+        public virtual NodeProperties CreatePropertiesObject()
         {
             return null;
         }
@@ -560,8 +520,6 @@ public virtual void AddChild(HierarchyNode node)
                 throw new ArgumentNullException("node");
             }
 
-            var map = this.projectMgr.ItemIdMap;
-
             // make sure the node is in the map.
             Object nodeWithSameID = this.projectMgr.ItemIdMap[node.hierarchyId];
             if (!Object.ReferenceEquals(node, nodeWithSameID as HierarchyNode))
@@ -1067,7 +1025,7 @@ public virtual string GetRelationNameExtension()
         /// 
         /// Close open document frame for a specific node.
         ///  
-        public /*protected, but public for FSharp.Project.dll*/ void CloseDocumentWindow(HierarchyNode node)
+        public void CloseDocumentWindow(HierarchyNode node)
         {
             // We walk the RDT looking for all running documents attached to this hierarchy and itemid. There
             // are cases where there may be two different editors (not views) open on the same document.
@@ -1127,7 +1085,7 @@ public virtual string GetRelationNameExtension()
         /// Redraws the state icon if the node is not excluded from source control.
         /// 
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Scc")]
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void UpdateSccStateIcons()
+        public virtual void UpdateSccStateIcons()
         {
             if (!this.ExcludeNodeFromScc)
             {
@@ -1143,7 +1101,7 @@ public virtual string GetRelationNameExtension()
         /// items to let its parent accept the drop
         /// 
         /// HierarchyNode that accept the drop handling
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual HierarchyNode GetDragTargetHandlerNode()
+        public virtual HierarchyNode GetDragTargetHandlerNode()
         {
             return this;
         }
@@ -1152,7 +1110,7 @@ public virtual string GetRelationNameExtension()
         /// Add a new Folder to the project hierarchy.
         /// 
         /// S_OK if succeeded, otherwise an error
-        public /*protected, but public for FSharp.Project.dll*/ virtual int AddNewFolder()
+        public virtual int AddNewFolder()
         {
             // Check out the project file.
             if (!this.ProjectMgr.QueryEditProjectFile(false))
@@ -1234,7 +1192,7 @@ internal virtual int AddItemToHierarchy(HierarchyAddType addType)
         /// 
         /// Overwritten in subclasses
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual void DoDefaultAction()
+        public virtual void DoDefaultAction()
         {
             CCITracing.TraceCall();
         }
@@ -1243,7 +1201,7 @@ internal virtual int AddItemToHierarchy(HierarchyAddType addType)
         /// Handles the exclude from project command.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual int ExcludeFromProject()
+        public virtual int ExcludeFromProject()
         {
             Debug.Assert(this.ProjectMgr != null, "The project item " + this.ToString() + " has not been initialised correctly. It has a null ProjectMgr");
             this.Remove(false);
@@ -1254,7 +1212,7 @@ internal virtual int AddItemToHierarchy(HierarchyAddType addType)
         /// Handles the Show in Designer command.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual int ShowInDesigner(IList selectedNodes)
+        public virtual int ShowInDesigner(IList selectedNodes)
         {
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
@@ -1266,7 +1224,7 @@ internal virtual int AddItemToHierarchy(HierarchyAddType addType)
         /// A stringbuilder.
         /// This method has to be public since seleceted nodes will call it.
         [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "ClipBoard")]
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual StringBuilder PrepareSelectedNodesForClipBoard()
+        public virtual StringBuilder PrepareSelectedNodesForClipBoard()
         {
             Debug.Assert(this.ProjectMgr != null, " No project mananager available for this node " + ToString());
             Debug.Assert(this.ProjectMgr.ItemsDraggedOrCutOrCopied != null, " The itemsdragged list should have been initialized prior calling this method");
@@ -1312,7 +1270,7 @@ internal virtual int AddItemToHierarchy(HierarchyAddType addType)
         /// Returns the Cannonical Name
         /// 
         /// Cannonical Name
-        public /*protected, but public for FSharp.Project.dll*/ virtual string GetCanonicalName()
+        public virtual string GetCanonicalName()
         {
             return this.GetMkDocument();
         }
@@ -1333,7 +1291,7 @@ internal virtual DocumentManager GetDocumentManager()
         /// list of selected nodes.
         /// contains the location (x,y) at which to show the menu.
         [SuppressMessage("Microsoft.Naming", "CA1720:IdentifiersShouldNotContainTypeNames", MessageId = "pointer")]
-        public /*protected, but public for FSharp.Project.dll*/ virtual int DisplayContextMenu(IList selectedNodes, IntPtr pointerToVariant)
+        public virtual int DisplayContextMenu(IList selectedNodes, IntPtr pointerToVariant)
         {
             if (selectedNodes == null || selectedNodes.Count == 0 || pointerToVariant == IntPtr.Zero)
             {
@@ -1384,7 +1342,7 @@ internal virtual DocumentManager GetDocumentManager()
         /// The context menu ID.
         /// The GUID of the menu group.
         /// The location at which to show the menu.
-        public /*protected, but public for FSharp.Project.dll*/ virtual int ShowContextMenu(int menuId, Guid menuGroup, POINTS points)
+        public virtual int ShowContextMenu(int menuId, Guid menuGroup, POINTS points)
         {
             IVsUIShell shell = this.projectMgr.Site.GetService(typeof(SVsUIShell)) as IVsUIShell;
 
@@ -1399,7 +1357,6 @@ internal virtual DocumentManager GetDocumentManager()
             return shell.ShowContextMenu(0, ref menuGroup, menuId, pnts, (Microsoft.VisualStudio.OLE.Interop.IOleCommandTarget)this);
         }
 
-        #region initiation of command execution
         /// 
         /// Handles command execution.
         /// 
@@ -1412,7 +1369,7 @@ internal virtual DocumentManager GetDocumentManager()
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cmdexecopt")]
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "n")]
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "pva")]
-        public /*protected, but public for FSharp.Project.dll*/ virtual int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
+        public virtual int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
         {
             if (this.projectMgr == null || this.projectMgr.IsClosed)
             {
@@ -1671,9 +1628,6 @@ internal virtual int InternalExecCommand(Guid cmdGroup, uint cmdId, uint cmdExec
             return returnValue;
         }
 
-        #endregion
-
-        #region query command handling
         /// 
         /// Handles menus originating from IOleCommandTarget.
         /// 
@@ -1800,7 +1754,7 @@ internal virtual int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText,
         /// The command to be executed.
         /// A QueryStatusResult describing the status of the menu.
         [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "InCurrent")]
-        public /*protected, but public for FSharp.Project.dll*/ virtual bool DisableCmdInCurrentMode(Guid commandGroup, uint command)
+        public virtual bool DisableCmdInCurrentMode(Guid commandGroup, uint command)
         {
             if (this.ProjectMgr == null || this.ProjectMgr.IsClosed)
             {
@@ -2025,8 +1979,7 @@ internal virtual QueryStatusResult QueryStatusSelectionOnNodes(IList
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual bool CanShowDefaultIcon()
+        public virtual bool CanShowDefaultIcon()
         {
             return false;
         }
@@ -2046,7 +1999,7 @@ internal virtual QueryStatusResult QueryStatusSelectionOnNodes(IListA pointer to the rdt
         /// The newName of the item
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual int AfterSaveItemAs(IntPtr docData, string newName)
+        public virtual int AfterSaveItemAs(IntPtr docData, string newName)
         {
             throw new NotImplementedException();
         }
@@ -2054,7 +2007,7 @@ internal virtual QueryStatusResult QueryStatusSelectionOnNodes(IList
         /// The method that does the cleanup.
         /// 
-        /// Is the Dispose called by some /*internal, but public for FSharp.Project.dll*/ public member, or it is called by from GC.
+        /// Is the Dispose called by some public member, or it is called by from GC.
         protected virtual void Dispose(bool disposing)
         {
             if (this.isDisposed)
@@ -2080,7 +2033,7 @@ protected virtual void Dispose(bool disposing)
         /// 
         /// The files to which an array of VSADDFILEFLAGS has to be specified.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual VSADDFILEFLAGS[] GetAddFileFlags(string[] files)
+        public virtual VSADDFILEFLAGS[] GetAddFileFlags(string[] files)
         {
             if (files == null || files.Length == 0)
             {
@@ -2102,7 +2055,7 @@ protected virtual void Dispose(bool disposing)
         /// 
         /// The files to which an array of VSADDFILEFLAGS has to be specified.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual VSQUERYADDFILEFLAGS[] GetQueryAddFileFlags(string[] files)
+        public virtual VSQUERYADDFILEFLAGS[] GetQueryAddFileFlags(string[] files)
         {
             if (files == null || files.Length == 0)
             {
@@ -2124,7 +2077,7 @@ protected virtual void Dispose(bool disposing)
         /// 
         /// The files to which an array of VSREMOVEFILEFLAGS has to be specified.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual VSREMOVEFILEFLAGS[] GetRemoveFileFlags(string[] files)
+        public virtual VSREMOVEFILEFLAGS[] GetRemoveFileFlags(string[] files)
         {
             if (files == null || files.Length == 0)
             {
@@ -2146,7 +2099,7 @@ protected virtual void Dispose(bool disposing)
         /// 
         /// The files to which an array of VSQUERYREMOVEFILEFLAGS has to be specified.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual VSQUERYREMOVEFILEFLAGS[] GetQueryRemoveFileFlags(string[] files)
+        public virtual VSQUERYREMOVEFILEFLAGS[] GetQueryRemoveFileFlags(string[] files)
         {
             if (files == null || files.Length == 0)
             {
@@ -2169,7 +2122,7 @@ protected virtual void Dispose(bool disposing)
         /// The list of files to be placed under source control.
         /// The flags that are associated to the files.
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Scc")]
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void GetSccFiles(IList files, IList flags)
+        public virtual void GetSccFiles(IList files, IList flags)
         {
             if (this.ExcludeNodeFromScc)
             {
@@ -2188,11 +2141,7 @@ protected virtual void Dispose(bool disposing)
 
             files.Add(this.GetMkDocument());
 
-#if UNUSED_DEPENDENT_FILES
-            tagVsSccFilesFlags flagsToAdd = (this.firstChild != null && (this.firstChild is DependentFileNode)) ? tagVsSccFilesFlags.SFF_HasSpecialFiles : tagVsSccFilesFlags.SFF_NoFlags;
-#else
             tagVsSccFilesFlags flagsToAdd = tagVsSccFilesFlags.SFF_NoFlags;
-#endif
 
             flags.Add(flagsToAdd);
         }
@@ -2205,7 +2154,7 @@ protected virtual void Dispose(bool disposing)
         /// The flags that are associated to the files.
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Scc")]
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "scc")]
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void GetSccSpecialFiles(string sccFile, IList files, IList flags)
+        public virtual void GetSccSpecialFiles(string sccFile, IList files, IList flags)
         {
             if (this.ExcludeNodeFromScc)
             {
@@ -2227,45 +2176,15 @@ protected virtual void Dispose(bool disposing)
         /// Delete the item corresponding to the specified path from storage.
         /// 
         /// Url of the item to delete
-        public /*protected, but public for FSharp.Project.dll*/ virtual void DeleteFromStorage(string path)
-        {
-        }
-
-#if IMPLEMENT_IVSPERSISTHIERARCHYITEM2
-        /// 
-        /// Determines whether a file change should be ignored or not.
-        /// 
-        /// Flag indicating whether or not to ignore changes (true to ignore changes).
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual int IgnoreItemFileChanges(bool ignoreFlag)
-        {
-            return VSConstants.E_NOTIMPL;
-        }
-
-        /// 
-        /// Called to determine whether a project item is reloadable. 
-        /// 
-        /// True if the project item is reloadable.
-        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Reloadable")]
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual bool IsItemReloadable()
-        {
-            return false;
-        }
-
-        /// 
-        /// Reloads an item.
-        /// 
-        /// Reserved parameter defined at the IVsPersistHierarchyItem2::ReloadItem parameter.
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual int ReloadItem(uint reserved)
+        public virtual void DeleteFromStorage(string path)
         {
-            return VSConstants.E_NOTIMPL;
         }
-#endif
 
         /// 
         /// Handle the Copy operation to the clipboard
         /// This method is typically overriden on the project node
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual int CopyToClipboard()
+        public virtual int CopyToClipboard()
         {
             return VSConstants.E_NOTIMPL;
         }
@@ -2274,7 +2193,7 @@ protected virtual void Dispose(bool disposing)
         /// Handle the Cut operation to the clipboard
         /// This method is typically overriden on the project node
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual int CutToClipboard()
+        public virtual int CutToClipboard()
         {
             return VSConstants.E_NOTIMPL;
         }
@@ -2283,7 +2202,7 @@ protected virtual void Dispose(bool disposing)
         /// Handle the paste from Clipboard command.
         /// This method is typically overriden on the project node
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual int PasteFromClipboard(HierarchyNode targetNode)
+        public virtual int PasteFromClipboard(HierarchyNode targetNode)
         {
             return VSConstants.E_NOTIMPL;
         }
@@ -2292,7 +2211,7 @@ protected virtual void Dispose(bool disposing)
         /// Determines if the paste command should be allowed.
         /// This method is typically overriden on the project node
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual bool AllowPasteCommand()
+        public virtual bool AllowPasteCommand()
         {
             return false;
         }
@@ -2302,21 +2221,13 @@ protected virtual void Dispose(bool disposing)
         /// This method is typically overriden on the project node
         /// 
         /// true for register, false for unregister
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void RegisterClipboardNotifications(bool value)
+        public virtual void RegisterClipboardNotifications(bool value)
         {
             return;
         }
-        #endregion
-
-        #region public methods
 
         public void OnItemAdded(HierarchyNode parent, HierarchyNode child)
         {
-            if (null != parent.onChildAdded)
-            {
-                HierarchyNodeEventArgs args = new HierarchyNodeEventArgs(child);
-                parent.onChildAdded(parent, args);
-            }
             if (parent == null)
             {
                 throw new ArgumentNullException("parent");
@@ -2327,10 +2238,15 @@ public void OnItemAdded(HierarchyNode parent, HierarchyNode child)
                 throw new ArgumentNullException("child");
             }
 
-            HierarchyNode foo;
-            foo = this.projectMgr == null ? this : this.projectMgr;
+            if (parent.onChildAdded != null)
+            {
+                HierarchyNodeEventArgs args = new HierarchyNodeEventArgs(child);
+                parent.onChildAdded(parent, args);
+            }
+
+            var root = this.projectMgr ?? this;
 
-            if (foo == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
+            if (root == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
             {
                 return;
             }
@@ -2343,7 +2259,7 @@ public void OnItemAdded(HierarchyNode parent, HierarchyNode child)
 
             HierarchyNode prev = child.PreviousSibling;
             uint prevId = (prev != null) ? prev.hierarchyId : VSConstants.VSITEMID_NIL;
-            foreach (IVsHierarchyEvents sink in foo.hierarchyEventSinks)
+            foreach (IVsHierarchyEvents sink in root.hierarchyEventSinks)
             {
                 int result = sink.OnItemAdded(parent.hierarchyId, prevId, child.hierarchyId);
                 if (ErrorHandler.Failed(result) && result != VSConstants.E_NOTIMPL)
@@ -2357,10 +2273,9 @@ public void OnItemAdded(HierarchyNode parent, HierarchyNode child)
 
         public void OnItemDeleted()
         {
-            HierarchyNode foo;
-            foo = this.projectMgr == null ? this : this.projectMgr;
+            var root = this.projectMgr ?? this;
 
-            if (foo == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
+            if (root == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
             {
                 return;
             }
@@ -2370,14 +2285,14 @@ public void OnItemDeleted()
                 this.projectMgr.ExtensibilityEventsHelper.FireItemRemoved(this);
             }
 
-            if (foo.hierarchyEventSinks.Count > 0)
+            if (root.hierarchyEventSinks.Count > 0)
             {
                 // Note that in some cases (deletion of project node for example), an Advise
                 // may be removed while we are iterating over it. To get around this problem we
                 // take a snapshot of the advise list and walk that.
                 List clonedSink = new List();
 
-                foreach (IVsHierarchyEvents anEvent in foo.hierarchyEventSinks)
+                foreach (IVsHierarchyEvents anEvent in root.hierarchyEventSinks)
                 {
                     clonedSink.Add(anEvent);
                 }
@@ -2400,15 +2315,14 @@ public void OnItemsAppended(HierarchyNode parent)
                 throw new ArgumentNullException("parent");
             }
 
-            HierarchyNode foo;
-            foo = this.projectMgr == null ? this : this.projectMgr;
+            var root = this.projectMgr ?? this;
 
-            if (foo == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
+            if (root == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
             {
                 return;
             }
 
-            foreach (IVsHierarchyEvents sink in foo.hierarchyEventSinks)
+            foreach (IVsHierarchyEvents sink in root.hierarchyEventSinks)
             {
                 int result = sink.OnItemsAppended(parent.hierarchyId);
 
@@ -2427,14 +2341,15 @@ public void OnPropertyChanged(HierarchyNode node, int propid, uint flags)
             {
                 throw new ArgumentNullException("node");
             }
-            HierarchyNode foo;
-            foo = this.projectMgr == null ? this : this.projectMgr;
-            if (foo == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
+
+            var root = this.projectMgr ?? this;
+            
+            if (root == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
             {
                 return;
             }
 
-            foreach (IVsHierarchyEvents sink in foo.hierarchyEventSinks)
+            foreach (IVsHierarchyEvents sink in root.hierarchyEventSinks)
             {
                 int result = sink.OnPropertyChanged(node.hierarchyId, propid, flags);
 
@@ -2452,14 +2367,15 @@ public void OnInvalidateItems(HierarchyNode parent)
             {
                 throw new ArgumentNullException("parent");
             }
-            HierarchyNode foo;
-            foo = this.projectMgr == null ? this : this.projectMgr;
-            if (foo == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
+
+            var root = this.projectMgr ?? this;
+
+            if (root == this.projectMgr && (this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents) != 0)
             {
                 return;
             }
 
-            foreach (IVsHierarchyEvents sink in foo.hierarchyEventSinks)
+            foreach (IVsHierarchyEvents sink in root.hierarchyEventSinks)
             {
                 int result = sink.OnInvalidateItems(parent.hierarchyId);
 
@@ -2536,10 +2452,6 @@ public object GetService(Type type)
             return this.projectMgr.Site.GetService(type);
         }
 
-
-        #endregion
-
-        #region IDisposable
         /// 
         /// The IDispose interface Dispose method for disposing the object determinastically.
         /// 
@@ -2549,10 +2461,6 @@ public void Dispose()
             GC.SuppressFinalize(this);
         }
 
-        #endregion
-
-        #region IVsHierarchy methods
-
         public virtual int AdviseHierarchyEvents(IVsHierarchyEvents sink, out uint cookie)
         {
             cookie = this.hierarchyEventSinks.Add(sink) + 1;
@@ -2761,9 +2669,6 @@ public int Unused4()
         {
             return VSConstants.E_NOTIMPL;
         }
-        #endregion
-
-        #region IVsUIHierarchy methods
 
         public virtual int ExecCommand(uint itemId, ref Guid guidCmdGroup, uint nCmdId, uint nCmdExecOpt, IntPtr pvain, IntPtr p)
         {
@@ -2774,7 +2679,6 @@ public virtual int QueryStatusCommand(uint itemId, ref Guid guidCmdGroup, uint c
         {
             return this.QueryStatusSelection(guidCmdGroup, cCmds, cmds, pCmdText, CommandOrigin.UiHierarchy);
         }
-        #endregion
 
         /// 
         /// Determines whether the hierarchy item changed. 
@@ -2935,89 +2839,6 @@ public virtual int SaveItem(VSSAVEFLAGS saveFlag, string silentSaveAsName, uint
             return returnCode;
         }
 
-        #region IVsPersistHierarchyItem2 methods
-#if IMPLEMENT_IVSPERSISTHIERARCHYITEM2
-        /// 
-        /// Flag indicating that changes to a file can be ignored when item is saved or reloaded. 
-        /// 
-        /// Specifies the item id from VSITEMID.
-        /// Flag indicating whether or not to ignore changes (1 to ignore, 0 to stop ignoring).
-        /// If the method succeeds, it returns S_OK. If it fails, it returns an error code.
-        public virtual int IgnoreItemFileChanges(uint itemId, int ignoreFlag)
-        {
-            if (this.ProjectMgr == null || this.ProjectMgr.IsClosed)
-            {
-                return VSConstants.E_FAIL;
-            }
-
-            HierarchyNode n = this.ProjectMgr.NodeFromItemId(itemId);
-            if (n != null)
-            {
-                return n.IgnoreItemFileChanges(ignoreFlag == 0 ? false : true);
-            }
-            else
-            {
-                return VSConstants.E_INVALIDARG;
-            }
-        }
-
-        /// 
-        /// Called to determine whether a project item is reloadable before calling ReloadItem. 
-        /// 
-        /// Item identifier of an item in the hierarchy. Valid values are VSITEMID_NIL, VSITEMID_ROOT and VSITEMID_SELECTION.
-        /// A flag indicating that the project item is reloadable (1 for reloadable, 0 for non-reloadable).
-        /// If the method succeeds, it returns S_OK. If it fails, it returns an error code. 
-        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Reloadable")]
-        public virtual int IsItemReloadable(uint itemId, out int isReloadable)
-        {
-            isReloadable = 0;
-
-            if (this.ProjectMgr == null || this.ProjectMgr.IsClosed)
-            {
-                return VSConstants.E_FAIL;
-            }
-
-            HierarchyNode n = this.ProjectMgr.NodeFromItemId(itemId);
-            if (n != null)
-            {
-                isReloadable = (n.IsItemReloadable()) ? 1 : 0;
-                return VSConstants.S_OK;
-            }
-            else
-            {
-                return VSConstants.E_INVALIDARG;
-            }
-        }
-
-        /// 
-        /// Called to reload a project item. 
-        /// 
-        /// Specifies itemid from VSITEMID.
-        /// Reserved.
-        /// If the method succeeds, it returns S_OK. If it fails, it returns an error code. 
-        public virtual int ReloadItem(uint itemId, uint reserved)
-        {
-        #region precondition
-            if (this.ProjectMgr == null || this.ProjectMgr.IsClosed)
-            {
-                return VSConstants.E_FAIL;
-            }
-            #endregion
-
-            HierarchyNode n = this.ProjectMgr.NodeFromItemId(itemId);
-            if (n != null)
-            {
-                return n.ReloadItem(reserved);
-            }
-            else
-            {
-                return VSConstants.E_INVALIDARG;
-            }
-        }
-#endif
-        #endregion
-
-        #region IOleCommandTarget methods
         /// 
         /// CommandTarget.Exec is called for most major operations if they are NOT UI based. Otherwise IVSUInode::exec is called first
         /// 
@@ -3034,9 +2855,6 @@ public virtual int QueryStatus(ref Guid guidCmdGroup, uint cCmds, OLECMD[] prgCm
         {
             return this.QueryStatusSelection(guidCmdGroup, cCmds, prgCmds, pCmdText, CommandOrigin.OleCommandTarget);
         }
-        #endregion
-
-        #region IVsHierarchyDeleteHandler methods
 
         public virtual int DeleteItem(uint delItemOp, uint itemId)
         {
@@ -3091,9 +2909,6 @@ public virtual int QueryDeleteItem(uint delItemOp, uint itemId, out int candelet
 
             return VSConstants.S_OK;
         }
-        #endregion
-
-        #region IVsHierarchyDropDataSource2 methods
 
         public virtual int GetDropInfo(out uint pdwOKEffects, out Microsoft.VisualStudio.OLE.Interop.IDataObject ppDataObject, out IDropSource ppDropSource)
         {
@@ -3114,9 +2929,6 @@ public virtual int OnBeforeDropNotify(Microsoft.VisualStudio.OLE.Interop.IDataOb
             fCancelDrop = 0;
             return VSConstants.E_NOTIMPL;
         }
-        #endregion
-
-        #region IVsHierarchyDropDataTarget methods
 
         public virtual int DragEnter(Microsoft.VisualStudio.OLE.Interop.IDataObject pDataObject, uint grfKeyState, uint itemid, ref uint pdwEffect)
         {
@@ -3137,10 +2949,8 @@ public virtual int Drop(Microsoft.VisualStudio.OLE.Interop.IDataObject pDataObje
         {
             return VSConstants.E_NOTIMPL;
         }
-        #endregion
 
-        #region helper methods
-        /*internal, but public for FSharp.Project.dll*/ public HierarchyNode FindChild(string name)
+        public HierarchyNode FindChild(string name)
         {
             if (String.IsNullOrEmpty(name))
             {
@@ -3175,7 +2985,7 @@ public virtual int Drop(Microsoft.VisualStudio.OLE.Interop.IDataObject pDataObje
         /// 
         /// The type of hierachy node being serched for
         /// A list of nodes of type T
-        /*internal, but public for FSharp.Project.dll*/ public void FindNodesOfType(List nodes)
+        public void FindNodesOfType(List nodes)
             where T : HierarchyNode
         {
             for (HierarchyNode n = this.FirstChild; n != null; n = n.NextSibling)
@@ -3190,11 +3000,10 @@ public virtual int Drop(Microsoft.VisualStudio.OLE.Interop.IDataObject pDataObje
             }
         }
 
-        /*internal, but public for FSharp.Project.dll*/ public void InstantiateItemsDraggedOrCutOrCopiedList()
+        public void InstantiateItemsDraggedOrCutOrCopiedList()
         {
             this.itemsDraggedOrCutOrCopied = new List();
         }
-        #endregion
 
         // Support for multitargeting.
 
@@ -3276,7 +3085,6 @@ internal static string GetFrameworkVersionString(System.Runtime.Versioning.Frame
 
         // This is called back from IVsTrackProjectRetargeting::OnSetTargetFramework
         // to actually set the target framework.
-
         public int UpdateTargetFramework(
             IVsHierarchy hier,
             string currentTargetFrameworkMoniker,
@@ -3301,67 +3109,61 @@ string newTargetFrameworkMoniker
             projectMgr.BuildProject.SetProperty(ProjectFileConstants.TargetFrameworkVersion, HierarchyNode.GetFrameworkVersionString(frameworkName));
             projectMgr.BuildProject.SetProperty(ProjectFileConstants.TargetFrameworkProfile, frameworkName.Profile);
 
-#if FX_ATLEAST_45
-            // update FSharp.Core only if we are addressing '.NETFramework' as opposed to e.g. Silverlight or Portable
-            if (frameworkName.Identifier == ".NETFramework")
-            {
-                var hasCompatibleFsCore = 
-                    (oldFrameworkName.Version.Major >= 4 && frameworkName.Version.Major >= 4) || (oldFrameworkName.Version.Major < 4 && frameworkName.Version.Major < 4);
+            string targetFSharpCoreVersion = projectMgr.BuildProject.GetPropertyValue(ProjectFileConstants.TargetFSharpCoreVersion);
+            bool autoGenerateBindingRedirects;
+            bool.TryParse(projectMgr.BuildProject.GetPropertyValue("AutoGenerateBindingRedirects"), out autoGenerateBindingRedirects);
 
-                if (!hasCompatibleFsCore)
-                {
-                    var newVersion =
-                        frameworkName.Version.Major >= 4
-                        ?
-#if FX_ATLEAST_45
-                        new Version(4, 3, 0, 0)
-#else
-                        new Version(4, 0, 0, 0)
-#endif
-                        :
 #if FX_ATLEAST_45
-                        new Version(2, 3, 0, 0)
-#else
-                        new Version(2, 0, 0, 0)
-#endif
-                        ;
-
-                    if (projectMgr.CanUseTargetFSharpCoreReference)
-                    {
-                        // this project controls version of FSharp.Core with project level property TargetFSharpCoreVersion- set it
-                        projectMgr.SetProjectProperty(ProjectFileConstants.TargetFSharpCoreVersion, newVersion.ToString());
-                    }
-                    else
-                    {
-                        // project doesn't use TargetFSharpCoreVersion - fix the reference explicitly
-                        var fsCoreName = new System.Reflection.AssemblyName(string.Format("FSharp.Core, Culture=neutral, PublicKeyToken={0}", Utilities.FsCorePublicKeyToken));
+            // In reality for FSharp.Core compatibility with .NetFramework selection looks like this:
+            // 2 is incompatible with 4
+            // 4.0 is incompatible with 4.5
+            // 4.5 is compatible with 4.5.1 and 4.5.2 and 4.6
+            var lower = oldFrameworkName.Version < frameworkName.Version ? oldFrameworkName.Version : frameworkName.Version;
+            var upper = oldFrameworkName.Version < frameworkName.Version ? frameworkName.Version : oldFrameworkName.Version;
+            var hasIncompatibleFsCore = (lower.Major != upper.Major) || (lower.Major == 4 && (lower.Minor < 5 && upper.Minor >= 5));
+                
+            if (hasIncompatibleFsCore)
+            {
+                var newVersion =
+                    frameworkName.Version.Major >= 4 ?
+                    ( frameworkName.Version.Minor < 5 ? new Version(4, 3, 0, 0) : new Version(4, 4, 0, 0) ) : new Version(2, 3, 0, 0);
+                targetFSharpCoreVersion = newVersion.ToString();
+
+                if (projectMgr.CanUseTargetFSharpCoreReference)
+                {
+                    // this project controls version of FSharp.Core with project level property TargetFSharpCoreVersion- set it
+                    projectMgr.SetProjectProperty(ProjectFileConstants.TargetFSharpCoreVersion, targetFSharpCoreVersion);
+                }
+                else
+                {
+                    // project doesn't use TargetFSharpCoreVersion - fix the reference explicitly
+                    var fsCoreName = new System.Reflection.AssemblyName(string.Format("FSharp.Core, Culture=neutral, PublicKeyToken={0}", Utilities.FsCorePublicKeyToken));
 
-                        var vsProj = (VSLangProj.VSProject)projectMgr.Object;
+                    var vsProj = (VSLangProj.VSProject)projectMgr.Object;
 
-                        var references = vsProj.References;
+                    var references = vsProj.References;
 
-                        // replace existing fscore with one that has matching version with current target framework
-                        var existingFsCore =
-                            Microsoft.VisualStudio.FSharp.LanguageService.UIThread.DoOnUIThread(
-                                () => references
-                                    .OfType()
-                                    .FirstOrDefault(r => r.Name == fsCoreName.Name && r.PublicKeyToken == Utilities.FsCorePublicKeyToken && r.Culture == fsCoreName.CultureName)
-                                );
+                    // replace existing fscore with one that has matching version with current target framework
+                    var existingFsCore =
+                        Microsoft.VisualStudio.FSharp.LanguageService.UIThread.DoOnUIThread(
+                            () => references
+                                .OfType()
+                                .FirstOrDefault(r => r.Name == fsCoreName.Name && r.PublicKeyToken == Utilities.FsCorePublicKeyToken && r.Culture == fsCoreName.CultureName)
+                            );
 
-                        if (existingFsCore != null)
+                    if (existingFsCore != null)
+                    {
+                        Microsoft.VisualStudio.FSharp.LanguageService.UIThread.DoOnUIThread(() =>
                         {
-                            Microsoft.VisualStudio.FSharp.LanguageService.UIThread.DoOnUIThread(() =>
-                            {
-                                // save copyLocal value - after calling existingFsCore.Remove() becomes invalid and can raise exceptions
-                                var copyLocal = existingFsCore.CopyLocal;
-                                existingFsCore.Remove();
-                                fsCoreName.Version = newVersion;
-
-                                // stores assembly FQN
-                                var newRef = references.Add(fsCoreName.FullName);
-                                newRef.CopyLocal = copyLocal;
-                            });
-                        }
+                            // save copyLocal value - after calling existingFsCore.Remove() becomes invalid and can raise exceptions
+                            var copyLocal = existingFsCore.CopyLocal;
+                            existingFsCore.Remove();
+                            fsCoreName.Version = newVersion;
+
+                            // stores assembly FQN
+                            var newRef = references.Add(fsCoreName.FullName);
+                            newRef.CopyLocal = copyLocal;
+                        });
                     }
                 }
             }
@@ -3369,7 +3171,7 @@ string newTargetFrameworkMoniker
 
             try
             {
-                this.projectMgr.FixupAppConfigOnTargetFXChange(newTargetFrameworkMoniker);
+                this.projectMgr.FixupAppConfigOnTargetFXChange(newTargetFrameworkMoniker, targetFSharpCoreVersion, autoGenerateBindingRedirects);
             }
             catch(Exception e)
             {
@@ -3380,112 +3182,76 @@ string newTargetFrameworkMoniker
             return VSConstants.S_OK;
         }
 
-
-        #region IVsProjectResources methods
-
         private int CreateResourceDocDataHelper(FileNode f, uint itemidResource, out IVsPersistDocData persistDocData, out IVsTextLines textLines)
         {
-            int hr = VSConstants.E_FAIL;
-
-            /*
-            Guid CLSID_VsTextBuffer = new Guid("{8E7B96A8-E33D-11d0-A6D5-00C04FB67F6A}");
-            Guid iid = VSConstants.IID_IUnknown;
-            IntPtr docData = IntPtr.Zero;
-            */
-
-            IVsTextLines buffer;
             Type textLinesType = typeof(IVsTextLines);
             Guid riid = textLinesType.GUID;
             Guid clsid = typeof(VsTextBufferClass).GUID;
-            IntPtr docData = IntPtr.Zero;
 
             persistDocData = null;
             textLines = null;
 
-            try
-            {
-                /*
-                ILocalRegistry localReg = this.projectMgr.GetService(typeof(SLocalRegistry)) as ILocalRegistry;
-                hr = localReg.CreateInstance(CLSID_VsTextBuffer, null, ref iid, (uint)CLSCTX.CLSCTX_INPROC_SERVER, out docData);
-
-                if (!ErrorHandler.Succeeded(hr))
-                {
-                    return hr;
-                }
-                */
-
-                buffer = (IVsTextLines)this.projectMgr.Package.CreateInstance(ref clsid, ref riid, textLinesType);
+            var buffer = (IVsTextLines)this.projectMgr.Package.CreateInstance(ref clsid, ref riid, textLinesType);
 
-                if (buffer == null)
-                {
-                    return VSConstants.E_FAIL;
-                }
-
-                docData = Marshal.GetIUnknownForObject(buffer);
+            if (buffer == null)
+            {
+                return VSConstants.E_FAIL;
+            }
 
-                // persistDocData = Marshal.GetObjectForIUnknown(docData) as IVsPersistDocData;
-                persistDocData = buffer as IVsPersistDocData;
+            var docData = Marshal.GetIUnknownForObject(buffer);
 
-                if (persistDocData == null)
-                {
-                    return VSConstants.E_FAIL;
-                }
+            persistDocData = buffer as IVsPersistDocData;
 
-                IObjectWithSite siteObject = persistDocData as IObjectWithSite;
-                IOleServiceProvider site = GetService(typeof(IOleServiceProvider)) as IOleServiceProvider;
-                if (siteObject != null && site != null)
-                {
-                    siteObject.SetSite(site);
-                }
-                else
-                {
-                    // We need to set the site, and if we cannot, we need to fail
-                    Debug.Assert(false, "Cannot set site on VsTextBuffer!");
-                    return VSConstants.E_FAIL;
-                }
+            if (persistDocData == null)
+            {
+                return VSConstants.E_FAIL;
+            }
 
-                IVsRunningDocumentTable rdt = this.GetService(typeof(SVsRunningDocumentTable)) as IVsRunningDocumentTable;
-                if (rdt == null)
-                {
-                    Debug.Assert(false, "Cannot get RDT?");
-                    return VSConstants.E_FAIL;
-                }
+            var siteObject = persistDocData as IObjectWithSite;
+            var site = GetService(typeof(IOleServiceProvider)) as IOleServiceProvider;
+            if (siteObject != null && site != null)
+            {
+                siteObject.SetSite(site);
+            }
+            else
+            {
+                // We need to set the site, and if we cannot, we need to fail
+                Debug.Assert(false, "Cannot set site on VsTextBuffer!");
+                return VSConstants.E_FAIL;
+            }
 
-                string path = f.Url;
-                uint cookie = 0;
+            var rdt = this.GetService(typeof(SVsRunningDocumentTable)) as IVsRunningDocumentTable;
+            if (rdt == null)
+            {
+                Debug.Assert(false, "Cannot get RDT?");
+                return VSConstants.E_FAIL;
+            }
 
-                hr = rdt.RegisterAndLockDocument(
-                    (uint)(_VSRDTFLAGS.RDT_ReadLock | _VSRDTFLAGS.RDT_EditLock),
-                    path,
-                    this,
-                    itemidResource,
-                    docData,
-                    out cookie);
+            string path = f.Url;
+            uint cookie;
 
-                if (!ErrorHandler.Succeeded(hr))
-                {
-                    return hr;
-                }
+            var hr = rdt.RegisterAndLockDocument(
+                (uint)(_VSRDTFLAGS.RDT_ReadLock | _VSRDTFLAGS.RDT_EditLock),
+                path,
+                this,
+                itemidResource,
+                docData,
+                out cookie);
 
-                hr = persistDocData.LoadDocData(path);
+            if (!ErrorHandler.Succeeded(hr))
+            {
+                return hr;
+            }
 
-                if (!ErrorHandler.Succeeded(hr))
-                {
-                    return hr;
-                }
+            hr = persistDocData.LoadDocData(path);
 
-                textLines = buffer;
-            }
-            finally
+            if (!ErrorHandler.Succeeded(hr))
             {
-                /*
-                if (docData != IntPtr.Zero)
-                {
-                    Marshal.Release(docData);
-                }
-                */
+                return hr;
             }
 
+            textLines = buffer;
+
             return hr;
         }
 
@@ -3512,7 +3278,5 @@ public int GetResourceItem(uint itemidDocument, string pszCulture, uint grfPRF,
         {
             throw new NotImplementedException();
         }
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/IDEBuildLogger.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/IDEBuildLogger.cs
index 772a80e1a3d..53de71edfee 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/IDEBuildLogger.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/IDEBuildLogger.cs
@@ -21,7 +21,11 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
 {
     public static class LoggingConstants
     {
+#if VS_VERSION_DEV12
         public const string DefaultVSRegistryRoot = @"Software\Microsoft\VisualStudio\12.0";
+#else
+        public const string DefaultVSRegistryRoot = @"Software\Microsoft\VisualStudio\14.0";
+#endif
         public const string BuildVerbosityRegistrySubKey = @"General";
         public const string BuildVerbosityRegistryValue = "MSBuildLoggerVerbosity";
         public const string UpToDateVerbosityRegistryValue = "U2DCheckVerbosity";
@@ -32,13 +36,9 @@ public static class LoggingConstants
     [ComVisible(true)]
     public sealed class IDEBuildLogger : Logger
     {
-        #region fields
         // TODO: Remove these constants when we have a version that supports getting the verbosity using automation.
         private string buildVerbosityRegistryRoot = LoggingConstants.DefaultVSRegistryRoot;
         // TODO: Re-enable this constants when we have a version that suppoerts getting the verbosity using automation.
-        //private const string EnvironmentCategory = "Environment";
-        //private const string ProjectsAndSolutionSubCategory = "ProjectsAndSolution";
-        //private const string BuildAndRunPage = "BuildAndRun";
 
 		private int currentIndent;
 		private IVsOutputWindowPane outputWindowPane;
@@ -51,9 +51,6 @@ public sealed class IDEBuildLogger : Logger
         private TaskReporter taskReporter;
         private bool haveCachedRegistry = false;
 
-		#endregion
-
-		#region properties
 		public string WarningString
 		{
 			get { return this.warningString; }
@@ -74,7 +71,7 @@ public bool IsLogTaskDone
 		/// enable the logger to retrive the verbosity from
 		/// the correct registry hive.
 		/// 
-		/*internal, but public for FSharp.Project.dll*/ public string BuildVerbosityRegistryRoot
+		public string BuildVerbosityRegistryRoot
 		{
 			get { return buildVerbosityRegistryRoot; }
 			set { buildVerbosityRegistryRoot = value; }
@@ -82,7 +79,7 @@ public bool IsLogTaskDone
 		/// 
 		/// Set to null to avoid writing to the output window
 		/// 
-		/*internal, but public for FSharp.Project.dll*/ public IVsOutputWindowPane OutputWindowPane
+		public IVsOutputWindowPane OutputWindowPane
 		{
 			get { return outputWindowPane; }
 			set { outputWindowPane = value; }
@@ -93,12 +90,7 @@ internal TaskReporter TaskReporter
             get { return taskReporter; }
             set { taskReporter = value; }
         }
-		#endregion
 
-		#region ctors
-		/// 
-		/// Constructor.  Inititialize member data.
-		/// 
 		internal IDEBuildLogger(IVsOutputWindowPane output, TaskProvider taskProvider, IVsHierarchy hierarchy)
 		{
 			if (taskProvider == null)
@@ -114,12 +106,7 @@ internal IDEBuildLogger(IVsOutputWindowPane output, TaskProvider taskProvider, I
 			Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure(hierarchy.GetSite(out site));
 			this.serviceProvider = new ServiceProvider(site);
 		}
-		#endregion
 
-		#region overridden methods
-		/// 
-		/// Overridden from the Logger class.
-		/// 
 		public override void Initialize(IEventSource eventSource)
 		{
 			if (null == eventSource)
@@ -141,9 +128,7 @@ public override void Initialize(IEventSource eventSource)
             eventSource.WarningRaised += new BuildWarningEventHandler(WarningHandler);
             eventSource.MessageRaised += new BuildMessageEventHandler(MessageHandler);
         }
-		#endregion
 
-		#region event delegates
 		/// 
 		/// This is the delegate for error events.
 		/// 
@@ -652,9 +637,6 @@ private void CustomHandler(object sender, CustomBuildEventArgs buildEvent)
             }
 		}
 
-		#endregion
-
-		#region helpers
 		/// 
 		/// This method takes a MessageImportance and returns true if messages
 		/// at importance i should be loggeed.  Otherwise return false.
@@ -810,7 +792,6 @@ private void SetVerbosity()
             //EnvDTE.DTE dte = this.serviceProvider.GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
             //EnvDTE.Properties properties = dte.get_Properties(EnvironmentCategory, ProjectsAndSolutionSubCategory);
         }
-		#endregion
     }
 
     /// 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ImageHandler.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ImageHandler.cs
index 033cfcf2dbe..93ffde6ae45 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ImageHandler.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ImageHandler.cs
@@ -71,10 +71,6 @@ public void Close()
             }
         }
 
-        /// 
-        /// Add an image to the ImageHandler.
-        /// 
-        /// the image object to be added.
         public void AddImage(Image image)
         {
             if (null == image)
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Interfaces.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Interfaces.cs
index bb31fad5b9f..9ca66031977 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Interfaces.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Interfaces.cs
@@ -3,15 +3,7 @@
 using System;
 using System.Runtime.InteropServices;
 using System.Collections.Generic;
-using System.IO;
-using System.Windows.Forms;
-using System.Diagnostics;
-using System.Globalization;
-using System.Text;
-using System.Threading;
-using Microsoft.VisualStudio.Shell;
 using Microsoft.VisualStudio.Shell.Interop;
-using Microsoft.VisualStudio.OLE.Interop;
 using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants;
 using VsCommands = Microsoft.VisualStudio.VSConstants.VSStd97CmdID;
 using VsCommands2K = Microsoft.VisualStudio.VSConstants.VSStd2KCmdID;
@@ -24,7 +16,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     /// 
     /// This interface defines the rules for handling build dependency on a project container.
     /// 
-    /// Normally this should be an /*internal, but public for FSharp.Project.dll*/ public interface but since it shouldbe available for the aggregator it must be made public.
     [ComVisible(true)]
     [CLSCompliant(false)]
     public interface IBuildDependencyOnProjectContainer
@@ -49,7 +40,6 @@ bool BuildNestedProjectsOnBuild
     /// 
     /// Interface for manipulating build dependency
     /// 
-    /// Normally this should be an /*internal, but public for FSharp.Project.dll*/ public interface but since it shouldbe available for the aggregator it must be made public.
     [ComVisible(true)]
     [CLSCompliant(false)]
     public interface IBuildDependencyUpdate
@@ -57,7 +47,6 @@ public interface IBuildDependencyUpdate
         /// 
         /// Defines a container for storing BuildDependencies
         /// 
-
         IVsBuildDependency[] BuildDependencies
         {
             get;
@@ -80,8 +69,6 @@ IVsBuildDependency[] BuildDependencies
     /// 
     /// Provides access to the reference data container.
     /// 
-    /// Normally this should be an /*internal, but public for FSharp.Project.dll*/ public interface but since it should be available for
-    /// the aggregator it must be made public.
     [ComVisible(true)]
     public interface IReferenceContainerProvider
     {
@@ -91,8 +78,6 @@ public interface IReferenceContainerProvider
     /// 
     /// Defines a container for manipulating references
     /// 
-    /// Normally this should be an /*internal, but public for FSharp.Project.dll*/ public interface but since it should be available for
-    /// the aggregator it must be made public.
     [ComVisible(true)]
     public interface IReferenceContainer
     {
@@ -126,7 +111,6 @@ public interface IProjectEvents
     [ComVisible(true)]
     public interface IProjectEventsListener
     {
-
         /// 
         /// Is the object a project events listener.
         /// 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/LocalizableProperties.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/LocalizableProperties.cs
index d9eaca41b42..580a35835e6 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/LocalizableProperties.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/LocalizableProperties.cs
@@ -27,7 +27,6 @@ internal LocalizableProperties()
         {
         }
 
-        #region ICustomTypeDescriptor
         public virtual AttributeCollection GetAttributes() 
         {
             AttributeCollection col = TypeDescriptor.GetAttributes(this, true);
@@ -107,7 +106,5 @@ public virtual string GetClassName()
         {
             return this.GetType().FullName;
         }
-
-        #endregion ICustomTypeDescriptor
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Microsoft.VisualStudio.Package.Project.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Microsoft.VisualStudio.Package.Project.cs
index 861b5435b2a..34ae4e47c5f 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Microsoft.VisualStudio.Package.Project.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Microsoft.VisualStudio.Package.Project.cs
@@ -50,156 +50,156 @@ protected override string GetLocalizedString(string value)
             return SR.GetString(value, CultureInfo.CurrentUICulture);
         }
     }
-    /*internal, but public for FSharp.Project.dll*/ public sealed class SR
+    public sealed class SR
     {
-        /*internal, but public for FSharp.Project.dll*/ public const string AddToNullProjectError = "AddToNullProjectError";
-        /*internal, but public for FSharp.Project.dll*/ public const string Advanced = "Advanced";
-        /*internal, but public for FSharp.Project.dll*/ public const string AssemblyReferenceAlreadyExists = "AssemblyReferenceAlreadyExists";
-        /*internal, but public for FSharp.Project.dll*/ public const string AttributeLoad = "AttributeLoad";
-        /*internal, but public for FSharp.Project.dll*/ public const string BuildAction = "BuildAction";
-        /*internal, but public for FSharp.Project.dll*/ public const string BuildActionDescription = "BuildActionDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string BuildCaption = "BuildCaption";
-        /*internal, but public for FSharp.Project.dll*/ public const string BuildVerbosity = "BuildVerbosity";
-        /*internal, but public for FSharp.Project.dll*/ public const string BuildVerbosityDescription = "BuildVerbosityDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string BuildEventError = "BuildEventError";
-        /*internal, but public for FSharp.Project.dll*/ public const string CancelQueryEdit = "CancelQueryEdit";
-        /*internal, but public for FSharp.Project.dll*/ public const string CannotAddFileThatIsOpenInEditor = "CannotAddFileThatIsOpenInEditor";
-        /*internal, but public for FSharp.Project.dll*/ public const string CannotAddItemToProjectWithWildcards = "CannotAddItemToProjectWithWildcards";
-        /*internal, but public for FSharp.Project.dll*/ public const string CanNotSaveFileNotOpeneInEditor = "CanNotSaveFileNotOpeneInEditor";
-        /*internal, but public for FSharp.Project.dll*/ public const string CannotStartLibraries = "CannotStartLibraries";
-        /*internal, but public for FSharp.Project.dll*/ public const string cli1 = "cli1";
-        /*internal, but public for FSharp.Project.dll*/ public const string Compile = "Compile";
-        /*internal, but public for FSharp.Project.dll*/ public const string ConfirmExtensionChange = "ConfirmExtensionChange";
-        /*internal, but public for FSharp.Project.dll*/ public const string Content = "Content";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyAlways = "CopyAlways";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyIfNewer = "CopyIfNewer";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyToLocal = "CopyToLocal";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyToLocalDescription = "CopyToLocalDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyToOutputDirectory = "CopyToOutputDirectory";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyToOutputDirectoryDescription = "CopyToOutputDirectoryDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string CustomTool = "CustomTool";
-        /*internal, but public for FSharp.Project.dll*/ public const string CustomToolDescription = "CustomToolDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string CustomToolNamespace = "CustomToolNamespace";
-        /*internal, but public for FSharp.Project.dll*/ public const string CustomToolNamespaceDescription = "CustomToolNamespaceDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string DetailsImport = "DetailsImport";
-        /*internal, but public for FSharp.Project.dll*/ public const string DetailsUserImport = "DetailsUserImport";
-        /*internal, but public for FSharp.Project.dll*/ public const string DetailsItem = "DetailsItem";
-        /*internal, but public for FSharp.Project.dll*/ public const string DetailsItemLocation = "DetailsItemLocation";
-        /*internal, but public for FSharp.Project.dll*/ public const string DetailsProperty = "DetailsProperty";
-        /*internal, but public for FSharp.Project.dll*/ public const string DetailsTarget = "DetailsTarget";
-        /*internal, but public for FSharp.Project.dll*/ public const string DetailsUsingTask = "DetailsUsingTask";
-        /*internal, but public for FSharp.Project.dll*/ public const string Detailed = "Detailed";
-        /*internal, but public for FSharp.Project.dll*/ public const string Diagnostic = "Diagnostic";
-        /*internal, but public for FSharp.Project.dll*/ public const string DirectoryExistError = "DirectoryExistError";
-        /*internal, but public for FSharp.Project.dll*/ public const string DoNotCopy = "DoNotCopy";
-        /*internal, but public for FSharp.Project.dll*/ public const string EditorViewError = "EditorViewError";
-        /*internal, but public for FSharp.Project.dll*/ public const string EmbeddedResource = "EmbeddedResource";
-        /*internal, but public for FSharp.Project.dll*/ public const string Error = "Error";
-        /*internal, but public for FSharp.Project.dll*/ public const string ErrorInvalidFileName = "ErrorInvalidFileName";
-        /*internal, but public for FSharp.Project.dll*/ public const string ErrorInvalidProjectName = "ErrorInvalidProjectName";
-        /*internal, but public for FSharp.Project.dll*/ public const string ErrorReferenceCouldNotBeAdded = "ErrorReferenceCouldNotBeAdded";
-        /*internal, but public for FSharp.Project.dll*/ public const string ErrorMsBuildRegistration = "ErrorMsBuildRegistration";
-        /*internal, but public for FSharp.Project.dll*/ public const string ErrorSaving = "ErrorSaving";
-        /*internal, but public for FSharp.Project.dll*/ public const string Exe = "Exe";
-        /*internal, but public for FSharp.Project.dll*/ public const string ExpectedObjectOfType = "ExpectedObjectOfType";
-        /*internal, but public for FSharp.Project.dll*/ public const string FailedToGetService = "FailedToGetService";
-        /*internal, but public for FSharp.Project.dll*/ public const string FailedToRetrieveProperties = "FailedToRetrieveProperties";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileNameCannotContainALeadingPeriod = "FileNameCannotContainALeadingPeriod";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileCannotBeRenamedToAnExistingFile = "FileCannotBeRenamedToAnExistingFile";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileAlreadyExistsAndCannotBeRenamed = "FileAlreadyExistsAndCannotBeRenamed";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileAlreadyExists = "FileAlreadyExists";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileAlreadyExistsCaption = "FileAlreadyExistsCaption";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileAlreadyInProject = "FileAlreadyInProject";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileAlreadyInProjectCaption = "FileAlreadyInProjectCaption";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileCopyError = "FileCopyError";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileName = "FileName";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileNameDescription = "FileNameDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileOrFolderAlreadyExists = "FileOrFolderAlreadyExists";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileOrFolderCannotBeFound = "FileOrFolderCannotBeFound";
-        /*internal, but public for FSharp.Project.dll*/ public const string FileProperties = "FileProperties";
-        /*internal, but public for FSharp.Project.dll*/ public const string FolderName = "FolderName";
-        /*internal, but public for FSharp.Project.dll*/ public const string FolderNameDescription = "FolderNameDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string FolderProperties = "FolderProperties";
-        /*internal, but public for FSharp.Project.dll*/ public const string FullPath = "FullPath";
-        /*internal, but public for FSharp.Project.dll*/ public const string FullPathDescription = "FullPathDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string ItemDoesNotExistInProjectDirectory = "ItemDoesNotExistInProjectDirectory";
-        /*internal, but public for FSharp.Project.dll*/ public const string InvalidAutomationObject = "InvalidAutomationObject";
-        /*internal, but public for FSharp.Project.dll*/ public const string InvalidLoggerType = "InvalidLoggerType";
-        /*internal, but public for FSharp.Project.dll*/ public const string InvalidParameter = "InvalidParameter";
-        /*internal, but public for FSharp.Project.dll*/ public const string Library = "Library";
-        /*internal, but public for FSharp.Project.dll*/ public const string LinkedItemsAreNotSupported = "LinkedItemsAreNotSupported";
-        /*internal, but public for FSharp.Project.dll*/ public const string Minimal = "Minimal";
-        /*internal, but public for FSharp.Project.dll*/ public const string Misc = "Misc";
-        /*internal, but public for FSharp.Project.dll*/ public const string None = "None";
-        /*internal, but public for FSharp.Project.dll*/ public const string NoWildcardsInProject = "NoWildcardsInProject";
-        /*internal, but public for FSharp.Project.dll*/ public const string NoZeroImpactProjects = "NoZeroImpactProjects";
-        /*internal, but public for FSharp.Project.dll*/ public const string Normal = "Normal";
-        /*internal, but public for FSharp.Project.dll*/ public const string NestedProjectFailedToReload = "NestedProjectFailedToReload";
-        /*internal, but public for FSharp.Project.dll*/ public const string OutputPath = "OutputPath";
-        /*internal, but public for FSharp.Project.dll*/ public const string OutputPathDescription = "OutputPathDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string PasteFailed = "PasteFailed";
-        /*internal, but public for FSharp.Project.dll*/ public const string ParameterMustBeAValidGuid = "ParameterMustBeAValidGuid";
-        /*internal, but public for FSharp.Project.dll*/ public const string ParameterMustBeAValidItemId = "ParameterMustBeAValidItemId";
-        /*internal, but public for FSharp.Project.dll*/ public const string ParameterCannotBeNullOrEmpty = "ParameterCannotBeNullOrEmpty";
-        /*internal, but public for FSharp.Project.dll*/ public const string PathTooLong = "PathTooLong";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectContainsCircularReferences = "ProjectContainsCircularReferences";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectReferencesDifferentFramework = "ProjectReferencesDifferentFramework";
-        /*internal, but public for FSharp.Project.dll*/ public const string Program = "Program";
-        /*internal, but public for FSharp.Project.dll*/ public const string Project = "Project";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectFile = "ProjectFile";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectFileDescription = "ProjectFileDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectFolder = "ProjectFolder";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectFolderDescription = "ProjectFolderDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectProperties = "ProjectProperties";
-        /*internal, but public for FSharp.Project.dll*/ public const string Quiet = "Quiet";
-        /*internal, but public for FSharp.Project.dll*/ public const string QueryReloadNestedProject = "QueryReloadNestedProject";
-        /*internal, but public for FSharp.Project.dll*/ public const string ReferenceCouldNotBeAdded = "ReferenceCouldNotBeAdded";
-        /*internal, but public for FSharp.Project.dll*/ public const string ReferenceAlreadyExists = "ReferenceAlreadyExists";
-        /*internal, but public for FSharp.Project.dll*/ public const string ReferenceWithAssemblyNameAlreadyExists = "ReferenceWithAssemblyNameAlreadyExists";
-        /*internal, but public for FSharp.Project.dll*/ public const string ReferencesNodeName = "ReferencesNodeName";
-        /*internal, but public for FSharp.Project.dll*/ public const string ReferenceProperties = "ReferenceProperties";
-        /*internal, but public for FSharp.Project.dll*/ public const string RefName = "RefName";
-        /*internal, but public for FSharp.Project.dll*/ public const string RefNameDescription = "RefNameDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string RenameFolder = "RenameFolder";
-        /*internal, but public for FSharp.Project.dll*/ public const string RTL = "RTL";
-        /*internal, but public for FSharp.Project.dll*/ public const string SaveCaption = "SaveCaption";
-        /*internal, but public for FSharp.Project.dll*/ public const string SaveModifiedDocuments = "SaveModifiedDocuments";
-        /*internal, but public for FSharp.Project.dll*/ public const string SaveOfProjectFileOutsideCurrentDirectory = "SaveOfProjectFileOutsideCurrentDirectory";
-        /*internal, but public for FSharp.Project.dll*/ public const string SpecificVersion = "SpecificVersion";
-        /*internal, but public for FSharp.Project.dll*/ public const string SpecificVersionDescription = "SpecificVersionDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string StandardEditorViewError = "StandardEditorViewError";
-        /*internal, but public for FSharp.Project.dll*/ public const string URL = "URL";
-        /*internal, but public for FSharp.Project.dll*/ public const string UseOfDeletedItemError = "UseOfDeletedItemError";
-        /*internal, but public for FSharp.Project.dll*/ public const string v1 = "v1";
-        /*internal, but public for FSharp.Project.dll*/ public const string v11 = "v11";
-        /*internal, but public for FSharp.Project.dll*/ public const string v2 = "v2";
-        /*internal, but public for FSharp.Project.dll*/ public const string Warning = "Warning";
-        /*internal, but public for FSharp.Project.dll*/ public const string WinExe = "WinExe";
-        /*internal, but public for FSharp.Project.dll*/ public const string UpgradeCannotOpenProjectFileForEdit = "UpgradeCannotOpenProjectFileForEdit";
-        /*internal, but public for FSharp.Project.dll*/ public const string UpgradeNoNeedToUpgradeAfterCheckout = "UpgradeNoNeedToUpgradeAfterCheckout";        
-        /*internal, but public for FSharp.Project.dll*/ public const string InvalidOutputPath = "InvalidOutputPath";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectRefOnlyExeOrDll = "ProjectRefOnlyExeOrDll";
-        /*internal, but public for FSharp.Project.dll*/ public const string CannotBuildWhenBuildInProgress = "CannotBuildWhenBuildInProgress";
-        /*internal, but public for FSharp.Project.dll*/ public const string WorkingDirectoryNotExists = "WorkingDirectoryNotExists";
-        /*internal, but public for FSharp.Project.dll*/ public const string CannotLoadUnknownTargetFrameworkProject = "CannotLoadUnknownTargetFrameworkProject";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProductName = "ProductName";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectReferencesHigherVersionWarning = "ProjectReferencesHigherVersionWarning";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectConversionNotRequired = "ProjectConversionNotRequired";
-        /*internal, but public for FSharp.Project.dll*/ public const string ConversionNotRequired = "ConversionNotRequired";
-        /*internal, but public for FSharp.Project.dll*/ public const string ErrorMakingProjectBackup = "ErrorMakingProjectBackup";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectBackupSuccessful = "ProjectBackupSuccessful";
-        /*internal, but public for FSharp.Project.dll*/ public const string BackupNameConflict = "BackupNameConflict";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectContainsLinkedFile = "ProjectContainsLinkedFile";
-        /*internal, but public for FSharp.Project.dll*/ public const string ErrorMakingBackup = "ErrorMakingBackup";
-        /*internal, but public for FSharp.Project.dll*/ public const string BackupSuccessful = "BackupSuccessful";
-        /*internal, but public for FSharp.Project.dll*/ public const string Identity = "Identity";
-        /*internal, but public for FSharp.Project.dll*/ public const string IdentityDescription = "IdentityDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string Path = "Path";
-        /*internal, but public for FSharp.Project.dll*/ public const string PathDescription = "PathDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string Version = "Version";
-        /*internal, but public for FSharp.Project.dll*/ public const string VersionDescription = "VersionDescription";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyOf = "CopyOf";
-        /*internal, but public for FSharp.Project.dll*/ public const string CopyOf2 = "CopyOf2";
+        public const string AddToNullProjectError = "AddToNullProjectError";
+        public const string Advanced = "Advanced";
+        public const string AssemblyReferenceAlreadyExists = "AssemblyReferenceAlreadyExists";
+        public const string AttributeLoad = "AttributeLoad";
+        public const string BuildAction = "BuildAction";
+        public const string BuildActionDescription = "BuildActionDescription";
+        public const string BuildCaption = "BuildCaption";
+        public const string BuildVerbosity = "BuildVerbosity";
+        public const string BuildVerbosityDescription = "BuildVerbosityDescription";
+        public const string BuildEventError = "BuildEventError";
+        public const string CancelQueryEdit = "CancelQueryEdit";
+        public const string CannotAddFileThatIsOpenInEditor = "CannotAddFileThatIsOpenInEditor";
+        public const string CannotAddItemToProjectWithWildcards = "CannotAddItemToProjectWithWildcards";
+        public const string CanNotSaveFileNotOpeneInEditor = "CanNotSaveFileNotOpeneInEditor";
+        public const string CannotStartLibraries = "CannotStartLibraries";
+        public const string cli1 = "cli1";
+        public const string Compile = "Compile";
+        public const string ConfirmExtensionChange = "ConfirmExtensionChange";
+        public const string Content = "Content";
+        public const string CopyAlways = "CopyAlways";
+        public const string CopyIfNewer = "CopyIfNewer";
+        public const string CopyToLocal = "CopyToLocal";
+        public const string CopyToLocalDescription = "CopyToLocalDescription";
+        public const string CopyToOutputDirectory = "CopyToOutputDirectory";
+        public const string CopyToOutputDirectoryDescription = "CopyToOutputDirectoryDescription";
+        public const string CustomTool = "CustomTool";
+        public const string CustomToolDescription = "CustomToolDescription";
+        public const string CustomToolNamespace = "CustomToolNamespace";
+        public const string CustomToolNamespaceDescription = "CustomToolNamespaceDescription";
+        public const string DetailsImport = "DetailsImport";
+        public const string DetailsUserImport = "DetailsUserImport";
+        public const string DetailsItem = "DetailsItem";
+        public const string DetailsItemLocation = "DetailsItemLocation";
+        public const string DetailsProperty = "DetailsProperty";
+        public const string DetailsTarget = "DetailsTarget";
+        public const string DetailsUsingTask = "DetailsUsingTask";
+        public const string Detailed = "Detailed";
+        public const string Diagnostic = "Diagnostic";
+        public const string DirectoryExistError = "DirectoryExistError";
+        public const string DoNotCopy = "DoNotCopy";
+        public const string EditorViewError = "EditorViewError";
+        public const string EmbeddedResource = "EmbeddedResource";
+        public const string Error = "Error";
+        public const string ErrorInvalidFileName = "ErrorInvalidFileName";
+        public const string ErrorInvalidProjectName = "ErrorInvalidProjectName";
+        public const string ErrorReferenceCouldNotBeAdded = "ErrorReferenceCouldNotBeAdded";
+        public const string ErrorMsBuildRegistration = "ErrorMsBuildRegistration";
+        public const string ErrorSaving = "ErrorSaving";
+        public const string Exe = "Exe";
+        public const string ExpectedObjectOfType = "ExpectedObjectOfType";
+        public const string FailedToGetService = "FailedToGetService";
+        public const string FailedToRetrieveProperties = "FailedToRetrieveProperties";
+        public const string FileNameCannotContainALeadingPeriod = "FileNameCannotContainALeadingPeriod";
+        public const string FileCannotBeRenamedToAnExistingFile = "FileCannotBeRenamedToAnExistingFile";
+        public const string FileAlreadyExistsAndCannotBeRenamed = "FileAlreadyExistsAndCannotBeRenamed";
+        public const string FileAlreadyExists = "FileAlreadyExists";
+        public const string FileAlreadyExistsCaption = "FileAlreadyExistsCaption";
+        public const string FileAlreadyInProject = "FileAlreadyInProject";
+        public const string FileAlreadyInProjectCaption = "FileAlreadyInProjectCaption";
+        public const string FileCopyError = "FileCopyError";
+        public const string FileName = "FileName";
+        public const string FileNameDescription = "FileNameDescription";
+        public const string FileOrFolderAlreadyExists = "FileOrFolderAlreadyExists";
+        public const string FileOrFolderCannotBeFound = "FileOrFolderCannotBeFound";
+        public const string FileProperties = "FileProperties";
+        public const string FolderName = "FolderName";
+        public const string FolderNameDescription = "FolderNameDescription";
+        public const string FolderProperties = "FolderProperties";
+        public const string FullPath = "FullPath";
+        public const string FullPathDescription = "FullPathDescription";
+        public const string ItemDoesNotExistInProjectDirectory = "ItemDoesNotExistInProjectDirectory";
+        public const string InvalidAutomationObject = "InvalidAutomationObject";
+        public const string InvalidLoggerType = "InvalidLoggerType";
+        public const string InvalidParameter = "InvalidParameter";
+        public const string Library = "Library";
+        public const string LinkedItemsAreNotSupported = "LinkedItemsAreNotSupported";
+        public const string Minimal = "Minimal";
+        public const string Misc = "Misc";
+        public const string None = "None";
+        public const string NoWildcardsInProject = "NoWildcardsInProject";
+        public const string NoZeroImpactProjects = "NoZeroImpactProjects";
+        public const string Normal = "Normal";
+        public const string NestedProjectFailedToReload = "NestedProjectFailedToReload";
+        public const string OutputPath = "OutputPath";
+        public const string OutputPathDescription = "OutputPathDescription";
+        public const string PasteFailed = "PasteFailed";
+        public const string ParameterMustBeAValidGuid = "ParameterMustBeAValidGuid";
+        public const string ParameterMustBeAValidItemId = "ParameterMustBeAValidItemId";
+        public const string ParameterCannotBeNullOrEmpty = "ParameterCannotBeNullOrEmpty";
+        public const string PathTooLong = "PathTooLong";
+        public const string ProjectContainsCircularReferences = "ProjectContainsCircularReferences";
+        public const string ProjectReferencesDifferentFramework = "ProjectReferencesDifferentFramework";
+        public const string Program = "Program";
+        public const string Project = "Project";
+        public const string ProjectFile = "ProjectFile";
+        public const string ProjectFileDescription = "ProjectFileDescription";
+        public const string ProjectFolder = "ProjectFolder";
+        public const string ProjectFolderDescription = "ProjectFolderDescription";
+        public const string ProjectProperties = "ProjectProperties";
+        public const string Quiet = "Quiet";
+        public const string QueryReloadNestedProject = "QueryReloadNestedProject";
+        public const string ReferenceCouldNotBeAdded = "ReferenceCouldNotBeAdded";
+        public const string ReferenceAlreadyExists = "ReferenceAlreadyExists";
+        public const string ReferenceWithAssemblyNameAlreadyExists = "ReferenceWithAssemblyNameAlreadyExists";
+        public const string ReferencesNodeName = "ReferencesNodeName";
+        public const string ReferenceProperties = "ReferenceProperties";
+        public const string RefName = "RefName";
+        public const string RefNameDescription = "RefNameDescription";
+        public const string RenameFolder = "RenameFolder";
+        public const string RTL = "RTL";
+        public const string SaveCaption = "SaveCaption";
+        public const string SaveModifiedDocuments = "SaveModifiedDocuments";
+        public const string SaveOfProjectFileOutsideCurrentDirectory = "SaveOfProjectFileOutsideCurrentDirectory";
+        public const string SpecificVersion = "SpecificVersion";
+        public const string SpecificVersionDescription = "SpecificVersionDescription";
+        public const string StandardEditorViewError = "StandardEditorViewError";
+        public const string URL = "URL";
+        public const string UseOfDeletedItemError = "UseOfDeletedItemError";
+        public const string v1 = "v1";
+        public const string v11 = "v11";
+        public const string v2 = "v2";
+        public const string Warning = "Warning";
+        public const string WinExe = "WinExe";
+        public const string UpgradeCannotOpenProjectFileForEdit = "UpgradeCannotOpenProjectFileForEdit";
+        public const string UpgradeNoNeedToUpgradeAfterCheckout = "UpgradeNoNeedToUpgradeAfterCheckout";        
+        public const string InvalidOutputPath = "InvalidOutputPath";
+        public const string ProjectRefOnlyExeOrDll = "ProjectRefOnlyExeOrDll";
+        public const string CannotBuildWhenBuildInProgress = "CannotBuildWhenBuildInProgress";
+        public const string WorkingDirectoryNotExists = "WorkingDirectoryNotExists";
+        public const string CannotLoadUnknownTargetFrameworkProject = "CannotLoadUnknownTargetFrameworkProject";
+        public const string ProductName = "ProductName";
+        public const string ProjectReferencesHigherVersionWarning = "ProjectReferencesHigherVersionWarning";
+        public const string ProjectConversionNotRequired = "ProjectConversionNotRequired";
+        public const string ConversionNotRequired = "ConversionNotRequired";
+        public const string ErrorMakingProjectBackup = "ErrorMakingProjectBackup";
+        public const string ProjectBackupSuccessful = "ProjectBackupSuccessful";
+        public const string BackupNameConflict = "BackupNameConflict";
+        public const string ProjectContainsLinkedFile = "ProjectContainsLinkedFile";
+        public const string ErrorMakingBackup = "ErrorMakingBackup";
+        public const string BackupSuccessful = "BackupSuccessful";
+        public const string Identity = "Identity";
+        public const string IdentityDescription = "IdentityDescription";
+        public const string Path = "Path";
+        public const string PathDescription = "PathDescription";
+        public const string Version = "Version";
+        public const string VersionDescription = "VersionDescription";
+        public const string CopyOf = "CopyOf";
+        public const string CopyOf2 = "CopyOf2";
 
         static SR loader = null;
         ResourceManager resources;
@@ -218,7 +218,7 @@ private static Object InternalSyncObject
             }
         }
 
-        /*internal, but public for FSharp.Project.dll*/ public SR()
+        public SR()
         {
             resources = new System.Resources.ResourceManager("Microsoft.VisualStudio.Package.Project", this.GetType().Assembly);
         }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/AutomationExtenderManager.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/AutomationExtenderManager.cs
index 6146d045160..76fa0385c92 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/AutomationExtenderManager.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/AutomationExtenderManager.cs
@@ -408,17 +408,9 @@ private static Hashtable GetExtenders(ObjectExtenders extensionMgr, string catID
         
     }
     
-    /// 
-    /// 
-    ///    [To be supplied.]
-    /// 
     [ComImport, Guid("aade1f59-6ace-43d1-8fca-42af3a5c4f3c"),InterfaceTypeAttribute(ComInterfaceType.InterfaceIsDual)]
     internal interface  AutomationExtMgr_IFilterProperties {
    
-           /// 
-           /// 
-           ///    [To be supplied.]
-           /// 
            [return: System.Runtime.InteropServices.MarshalAs(UnmanagedType.I4)]
            [PreserveSig]                             
            int IsPropertyHidden(string name, [Out]out vsFilterProperties propertyHidden);
@@ -451,7 +443,6 @@ internal ExtendedObjectWrapper(object baseObject, Hashtable extenderList, Dictio
         }
 
 
-        /// 
         /// 
         ///     Creates the extended descriptors for an object given a list of extenders
         ///     and property names.
@@ -481,7 +472,6 @@ private Hashtable CreateExtendedProperties(Hashtable extenderList) {
             return extenders;
         }
 
-        /// 
         /// 
         ///     Retrieves an array of member attributes for the given object.
         /// 
@@ -489,7 +479,6 @@ AttributeCollection ICustomTypeDescriptor.GetAttributes() {
             return TypeDescriptor.GetAttributes(baseObject);
         }
 
-        /// 
         /// 
         ///     Retrieves the class name for this object.  If null is returned,
         ///     the type name is used.
@@ -498,7 +487,6 @@ string ICustomTypeDescriptor.GetClassName() {
             return TypeDescriptor.GetClassName(baseObject);
         }
 
-        /// 
         /// 
         ///     Retrieves the name for this object.  If null is returned,
         ///     the default is used.
@@ -507,40 +495,23 @@ string ICustomTypeDescriptor.GetComponentName() {
             return TypeDescriptor.GetComponentName(baseObject);
         }
 
-        /// 
-        /// 
-        ///      Retrieves the type converter for this object.
-        /// 
         TypeConverter ICustomTypeDescriptor.GetConverter() {
             return TypeDescriptor.GetConverter(baseObject);
         }
 
-        /// 
-        /// 
-        ///     Retrieves the default event.
-        /// 
         EventDescriptor ICustomTypeDescriptor.GetDefaultEvent() {
             return null;
         }
 
 
-        /// 
-        /// 
-        ///     Retrieves the default property.
-        /// 
         PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty() {
             return TypeDescriptor.GetDefaultProperty(baseObject);
         }
 
-        /// 
-        /// 
-        ///      Retrieves the an editor for this object.
-        /// 
         object ICustomTypeDescriptor.GetEditor(Type editorBaseType) {
             return TypeDescriptor.GetEditor(baseObject, editorBaseType);
         }
 
-        /// 
         /// 
         ///     Retrieves an array of events that the given component instance
         ///     provides.  This may differ from the set of events the class
@@ -551,7 +522,6 @@ EventDescriptorCollection ICustomTypeDescriptor.GetEvents() {
             return TypeDescriptor.GetEvents(baseObject);
         }
 
-        /// 
         /// 
         ///     Retrieves an array of events that the given component instance
         ///     provides.  This may differ from the set of events the class
@@ -563,7 +533,6 @@ EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[] attributes
             return TypeDescriptor.GetEvents(baseObject, attributes);
         }
 
-        /// 
         /// 
         ///     Retrieves an array of properties that the given component instance
         ///     provides.  This may differ from the set of properties the class
@@ -574,7 +543,6 @@ PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties() {
             return ((ICustomTypeDescriptor)this).GetProperties(new Attribute[0]);
         }
 
-        /// 
         /// 
         ///     Retrieves an array of properties that the given component instance
         ///     provides.  This may differ from the set of properties the class
@@ -774,7 +742,6 @@ internal FilteredObjectWrapper(object baseObject) {
             this.filteredProps = new Hashtable();
         }
         
-        /// 
         /// 
         ///     Filters the given property with the given member attribute.  We only
         ///     support filtering by adding a single attribute here.
@@ -783,7 +750,6 @@ internal void FilterProperty(PropertyDescriptor prop, Attribute attr) {
             filteredProps[prop] = attr;
         }
 
-        /// 
         /// 
         ///     Retrieves an array of member attributes for the given object.
         /// 
@@ -791,7 +757,6 @@ AttributeCollection ICustomTypeDescriptor.GetAttributes() {
             return TypeDescriptor.GetAttributes(baseObject);
         }
 
-        /// 
         /// 
         ///     Retrieves the class name for this object.  If null is returned,
         ///     the type name is used.
@@ -800,7 +765,6 @@ string ICustomTypeDescriptor.GetClassName() {
             return TypeDescriptor.GetClassName(baseObject);
         }
 
-        /// 
         /// 
         ///     Retrieves the name for this object.  If null is returned,
         ///     the default is used.
@@ -809,39 +773,22 @@ string ICustomTypeDescriptor.GetComponentName() {
             return TypeDescriptor.GetComponentName(baseObject);
         }
 
-        /// 
-        /// 
-        ///      Retrieves the type converter for this object.
-        /// 
         TypeConverter ICustomTypeDescriptor.GetConverter() {
             return TypeDescriptor.GetConverter(baseObject);
         }
 
-        /// 
-        /// 
-        ///     Retrieves the default event.
-        /// 
         EventDescriptor ICustomTypeDescriptor.GetDefaultEvent() {
             return null;
         }
 
-        /// 
-        /// 
-        ///     Retrieves the default property.
-        /// 
         PropertyDescriptor ICustomTypeDescriptor.GetDefaultProperty() {
             return TypeDescriptor.GetDefaultProperty(baseObject);
         }
 
-        /// 
-        /// 
-        ///      Retrieves the an editor for this object.
-        /// 
         object ICustomTypeDescriptor.GetEditor(Type editorBaseType) {
             return TypeDescriptor.GetEditor(baseObject, editorBaseType);
         }
 
-        /// 
         /// 
         ///     Retrieves an array of events that the given component instance
         ///     provides.  This may differ from the set of events the class
@@ -852,7 +799,6 @@ EventDescriptorCollection ICustomTypeDescriptor.GetEvents() {
             return TypeDescriptor.GetEvents(baseObject);
         }
 
-        /// 
         /// 
         ///     Retrieves an array of events that the given component instance
         ///     provides.  This may differ from the set of events the class
@@ -864,7 +810,6 @@ EventDescriptorCollection ICustomTypeDescriptor.GetEvents(Attribute[] attributes
             return TypeDescriptor.GetEvents(baseObject, attributes);
         }
 
-        /// 
         /// 
         ///     Retrieves an array of properties that the given component instance
         ///     provides.  This may differ from the set of properties the class
@@ -875,7 +820,6 @@ PropertyDescriptorCollection ICustomTypeDescriptor.GetProperties() {
             return ((ICustomTypeDescriptor)this).GetProperties(new Attribute[0]);
         }
 
-        /// 
         /// 
         ///     Retrieves an array of properties that the given component instance
         ///     provides.  This may differ from the set of properties the class
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/ConnectionPointContainer.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/ConnectionPointContainer.cs
index f8103180496..a0bc0db2eca 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/ConnectionPointContainer.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/ConnectionPointContainer.cs
@@ -43,7 +43,6 @@ internal void AddEventSource(IEventSource source)
             connectionPoints.Add(typeof(SinkType).GUID, new ConnectionPoint(this, source));
         }
 
-        #region IConnectionPointContainer Members
         void IConnectionPointContainer.EnumConnectionPoints(out IEnumConnectionPoints ppEnum)
         {
             throw new NotImplementedException();
@@ -52,7 +51,6 @@ void IConnectionPointContainer.FindConnectionPoint(ref Guid riid, out IConnectio
         {
             ppCP = connectionPoints[riid];
         }
-        #endregion
     }
 
     internal class ConnectionPoint : IConnectionPoint
@@ -62,7 +60,7 @@ internal class ConnectionPoint : IConnectionPoint
         private uint nextCookie;
         private ConnectionPointContainer container;
         private IEventSource source;
-        /*internal, but public for FSharp.Project.dll*/ public ConnectionPoint(ConnectionPointContainer container, IEventSource source)
+        public ConnectionPoint(ConnectionPointContainer container, IEventSource source)
         {
             if (null == container)
             {
@@ -77,7 +75,7 @@ internal class ConnectionPoint : IConnectionPoint
             sinks = new Dictionary();
             nextCookie = 1;
         }
-        #region IConnectionPoint Members
+
         public void Advise(object pUnkSink, out uint pdwCookie)
         {
             SinkType sink = pUnkSink as SinkType;
@@ -113,6 +111,5 @@ public void Unadvise(uint dwCookie)
             sinks.Remove(dwCookie);
             source.OnSinkRemoved(sink);
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/ExternDll.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/ExternDll.cs
index cbe0fddcd67..bb905099e8b 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/ExternDll.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/ExternDll.cs
@@ -6,21 +6,21 @@ internal static class ExternDll {
 #if FEATURE_PAL
 
  #if !PLATFORM_UNIX
-        /*internal, but public for FSharp.Project.dll*/ public const String DLLPREFIX = "";
-        /*internal, but public for FSharp.Project.dll*/ public const String DLLSUFFIX = ".dll";
+        public const String DLLPREFIX = "";
+        public const String DLLSUFFIX = ".dll";
  #else // !PLATFORM_UNIX
   #if __APPLE__
-        /*internal, but public for FSharp.Project.dll*/ public const String DLLPREFIX = "lib";
-        /*internal, but public for FSharp.Project.dll*/ public const String DLLSUFFIX = ".dylib";
+        public const String DLLPREFIX = "lib";
+        public const String DLLSUFFIX = ".dylib";
   #elif _AIX
-        /*internal, but public for FSharp.Project.dll*/ public const String DLLPREFIX = "lib";
-        /*internal, but public for FSharp.Project.dll*/ public const String DLLSUFFIX = ".a";
+        public const String DLLPREFIX = "lib";
+        public const String DLLSUFFIX = ".a";
   #elif __hppa__ || IA64
-        /*internal, but public for FSharp.Project.dll*/ public const String DLLPREFIX = "lib";
-        /*internal, but public for FSharp.Project.dll*/ public const String DLLSUFFIX = ".sl";
+        public const String DLLPREFIX = "lib";
+        public const String DLLSUFFIX = ".sl";
   #else
-        /*internal, but public for FSharp.Project.dll*/ public const String DLLPREFIX = "lib";
-        /*internal, but public for FSharp.Project.dll*/ public const String DLLSUFFIX = ".so";
+        public const String DLLPREFIX = "lib";
+        public const String DLLSUFFIX = ".so";
   #endif
  #endif // !PLATFORM_UNIX
 
@@ -63,12 +63,12 @@ internal static class ExternDll {
         public const string Crypt32  = "crypt32.dll";
 
         // system.data specific
-        /*internal, but public for FSharp.Project.dll*/ public const string Odbc32    = "odbc32.dll";
-        /*internal, but public for FSharp.Project.dll*/ public const string SNI       = "System.Data.dll";
+        public const string Odbc32    = "odbc32.dll";
+        public const string SNI       = "System.Data.dll";
 
         // system.data.oracleclient specific
-        /*internal, but public for FSharp.Project.dll*/ public const string OciDll    = "oci.dll";
-        /*internal, but public for FSharp.Project.dll*/ public const string OraMtsDll = "oramts.dll";
+        public const string OciDll    = "oci.dll";
+        public const string OraMtsDll = "oramts.dll";
 #endif //!FEATURE_PAL
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/NativeMethods.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/NativeMethods.cs
index 9cf8b639821..3473b139657 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/NativeMethods.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/NativeMethods.cs
@@ -581,7 +581,6 @@ public static string GetText(IntPtr pCmdTextInt) {
                 return s.ToString();
             }
 
-            /// 
             /// 
             /// Accessing the text of this structure is very cumbersome.  Instead, you may
             /// use this method to access an integer pointer of the structure.
@@ -752,7 +751,6 @@ public interface IMethodXML
             
             // Parse the incoming XML with respect to the CodeModel XML schema and
             // use the result to regenerate the body of the function.
-            /// 
             [PreserveSig]
             int SetXML (string pszXML);
             
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/UnsafeNativeMethods.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/UnsafeNativeMethods.cs
index 11ff27c8d19..4c2fe256c8c 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/UnsafeNativeMethods.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Misc/UnsafeNativeMethods.cs
@@ -12,58 +12,58 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem {
     internal static class UnsafeNativeMethods 
     {
         [DllImport(ExternDll.Kernel32, ExactSpelling = true, CharSet = CharSet.Auto)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern IntPtr GlobalLock(HandleRef handle);
+        public static extern IntPtr GlobalLock(HandleRef handle);
 
         [DllImport(ExternDll.Kernel32, ExactSpelling = true, CharSet = CharSet.Auto)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern bool GlobalUnlock(HandleRef handle);
+        public static extern bool GlobalUnlock(HandleRef handle);
 
         [DllImport(ExternDll.Kernel32, ExactSpelling = true, CharSet = CharSet.Auto)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern int GlobalSize(HandleRef handle);
+        public static extern int GlobalSize(HandleRef handle);
 
         [DllImport(ExternDll.Kernel32, EntryPoint = "GlobalLock", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern IntPtr GlobalLock(IntPtr h);
+        public static extern IntPtr GlobalLock(IntPtr h);
 
         [DllImport(ExternDll.Kernel32, EntryPoint = "GlobalUnlock", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern bool GlobalUnLock(IntPtr h);
+        public static extern bool GlobalUnLock(IntPtr h);
 
         [DllImport(ExternDll.Kernel32, EntryPoint = "GlobalSize", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern int GlobalSize(IntPtr h);
+        public static extern int GlobalSize(IntPtr h);
 
         [DllImport(ExternDll.Ole32, ExactSpelling = true, CharSet = CharSet.Unicode)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern int OleSetClipboard(Microsoft.VisualStudio.OLE.Interop.IDataObject dataObject);
+        public static extern int OleSetClipboard(Microsoft.VisualStudio.OLE.Interop.IDataObject dataObject);
 
         [DllImport(ExternDll.Ole32, ExactSpelling = true, CharSet = CharSet.Unicode)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern int OleGetClipboard(out Microsoft.VisualStudio.OLE.Interop.IDataObject dataObject);
+        public static extern int OleGetClipboard(out Microsoft.VisualStudio.OLE.Interop.IDataObject dataObject);
 
         [DllImport(ExternDll.Ole32, ExactSpelling = true, CharSet = CharSet.Unicode)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern int OleFlushClipboard();
+        public static extern int OleFlushClipboard();
 
         [DllImport(ExternDll.User32, ExactSpelling = true, CharSet = CharSet.Unicode)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern int OpenClipboard(IntPtr newOwner);
+        public static extern int OpenClipboard(IntPtr newOwner);
 
         [DllImport(ExternDll.User32, ExactSpelling = true, CharSet = CharSet.Unicode)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern int EmptyClipboard();
+        public static extern int EmptyClipboard();
 
         [DllImport(ExternDll.User32, ExactSpelling = true, CharSet = CharSet.Unicode)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern int CloseClipboard();
+        public static extern int CloseClipboard();
 
         [DllImport(ExternDll.Comctl32, CharSet = CharSet.Auto)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern int ImageList_GetImageCount(HandleRef himl);
+        public static extern int ImageList_GetImageCount(HandleRef himl);
 
         [DllImport(ExternDll.Comctl32, CharSet = CharSet.Auto)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern bool ImageList_Draw(HandleRef himl, int i, HandleRef hdcDst, int x, int y, int fStyle);
+        public static extern bool ImageList_Draw(HandleRef himl, int i, HandleRef hdcDst, int x, int y, int fStyle);
 
         [DllImport(ExternDll.Shell32, EntryPoint = "DragQueryFileW", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern uint DragQueryFile(IntPtr hDrop, uint iFile, char[] lpszFile, uint cch);
+        public static extern uint DragQueryFile(IntPtr hDrop, uint iFile, char[] lpszFile, uint cch);
 
         [DllImport(ExternDll.User32, EntryPoint = "RegisterClipboardFormatW", SetLastError = true, CharSet = CharSet.Unicode, ExactSpelling = true, CallingConvention = CallingConvention.StdCall)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern ushort RegisterClipboardFormat(string format);
+        public static extern ushort RegisterClipboardFormat(string format);
 
         [DllImport(ExternDll.Shell32, EntryPoint = "SHGetSpecialFolderLocation")]
-        /*internal, but public for FSharp.Project.dll*/ public static extern int SHGetSpecialFolderLocation(IntPtr hwnd, int csidl, [Out, MarshalAs(UnmanagedType.LPArray)] IntPtr[] ppidl);
+        public static extern int SHGetSpecialFolderLocation(IntPtr hwnd, int csidl, [Out, MarshalAs(UnmanagedType.LPArray)] IntPtr[] ppidl);
 
         [DllImport(ExternDll.Shell32, EntryPoint = "SHGetPathFromIDList", CharSet = System.Runtime.InteropServices.CharSet.Auto)]
-        /*internal, but public for FSharp.Project.dll*/ public static extern bool SHGetPathFromIDList(IntPtr pidl, IntPtr pszPath);
+        public static extern bool SHGetPathFromIDList(IntPtr pidl, IntPtr pszPath);
     }
 }
 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/NestedProjectBuildDependency.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/NestedProjectBuildDependency.cs
deleted file mode 100644
index 915b0c06d21..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/NestedProjectBuildDependency.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if UNUSED_NESTED_PROJECTS
-using System;
-using System.Runtime.InteropServices;
-using Microsoft.VisualStudio.OLE.Interop;
-using Microsoft.VisualStudio.Shell;
-using Microsoft.VisualStudio.Shell.Interop;
-using System.Diagnostics;
-using System.Globalization;
-using System.Collections;
-using System.IO;
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem
-{
-    /// 
-    /// Used for adding a build dependency to nested project (not a real project reference)
-    /// 
-    internal class NestedProjectBuildDependency : IVsBuildDependency
-    {
-        IVsHierarchy dependentHierarchy = null;
-
-        #region ctors
-        [CLSCompliant(false)]
-        public NestedProjectBuildDependency(IVsHierarchy dependentHierarchy)
-        {
-            this.dependentHierarchy = dependentHierarchy;
-        }
-        #endregion
-
-        #region IVsBuildDependency methods
-        public int get_CanonicalName(out string canonicalName)
-        {
-            canonicalName = null;
-            return VSConstants.S_OK;
-        }
-
-        public int get_Type(out System.Guid guidType)
-        {
-            // All our dependencies are build projects
-            guidType = VSConstants.GUID_VS_DEPTYPE_BUILD_PROJECT;
-
-            return VSConstants.S_OK;
-        }
-
-        public int get_Description(out string description)
-        {
-            description = null;
-            return VSConstants.S_OK;
-        }
-
-        [CLSCompliant(false)]
-        public int get_HelpContext(out uint helpContext)
-        {
-            helpContext = 0;
-            return VSConstants.E_NOTIMPL;
-        }
-
-        public int get_HelpFile(out string helpFile)
-        {
-            helpFile = null;
-            return VSConstants.E_NOTIMPL;
-        }
-
-        public int get_MustUpdateBefore(out int mustUpdateBefore)
-        {
-            // Must always update dependencies
-            mustUpdateBefore = 1;
-
-            return VSConstants.S_OK;
-        }
-
-        public int get_ReferredProject(out object unknownProject)
-        {
-            unknownProject = this.dependentHierarchy;
-
-            return (unknownProject == null) ? VSConstants.E_FAIL : VSConstants.S_OK;
-        }
-        #endregion
-
-    }
-}
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/NestedProjectNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/NestedProjectNode.cs
deleted file mode 100644
index ae22dea4424..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/NestedProjectNode.cs
+++ /dev/null
@@ -1,1138 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-// WARNING: This code has not been reviewed for COM reference leaks. Review before activating.
-#if UNUSED_NESTED_PROJECTS
-
-using System;
-using System.CodeDom.Compiler;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.Drawing;
-using System.IO;
-using System.Runtime.InteropServices;
-using System.Text;
-using System.Xml;
-using System.Windows.Forms;
-using System.Diagnostics;
-using System.Globalization;
-using Microsoft.VisualStudio.OLE.Interop;
-using Microsoft.VisualStudio.Shell.Interop;
-using Microsoft.VisualStudio.Shell;
-using System.Net;
-using MSBuild = Microsoft.Build.BuildEngine;
-using IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider;
-using IServiceProvider = System.IServiceProvider;
-using ShellConstants = Microsoft.VisualStudio.Shell.Interop.Constants;
-using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants;
-using ErrorHandler = Microsoft.VisualStudio.ErrorHandler;
-using VSLangProj80;
-using System.Diagnostics.CodeAnalysis;
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem
-{
-    [CLSCompliant(false), ComVisible(true)]
-    public class NestedProjectNode : HierarchyNode, IPropertyNotifySink
-    {
-
-        #region fields
-        private IVsHierarchy nestedHierarchy;
-
-        Guid projectInstanceGuid = Guid.Empty;
-
-        private string projectName = String.Empty;
-
-        private string projectPath = String.Empty;
-
-        private ImageHandler imageHandler;
-
-        /// 
-        /// Defines an object that will be a mutex for this object for synchronizing thread calls.
-        /// 
-        private static volatile object Mutex = new object();
-
-        /// 
-        /// Sets the dispose flag on the object.
-        /// 
-        private bool isDisposed;
-
-        // A cooike retrieved when advising on property chnanged events.
-        private uint projectPropertyNotifySinkCookie;
-        #endregion
-
-        #region properties
-        /*internal, but public for FSharp.Project.dll*/ public IVsHierarchy NestedHierarchy
-        {
-            get
-            {
-                return this.nestedHierarchy;
-            }
-        }
-        #endregion
-
-        #region virtual properties
-        /// 
-        /// Returns the __VSADDVPFLAGS that will be passed in when calling AddVirtualProjectEx
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual uint VirtualProjectFlags
-        {
-            get { return 0; }
-        }
-        #endregion
-
-        #region overridden properties
-        /// 
-        /// The path of the nested project.
-        /// 
-        public override string Url
-        {
-            get
-            {
-                return this.projectPath;
-            }
-        }
-
-        /// 
-        /// The Caption of the nested project.
-        /// 
-        public override string Caption
-        {
-            get
-            {
-                return Path.GetFileNameWithoutExtension(this.projectName);
-            }
-        }
-
-        public override Guid ItemTypeGuid
-        {
-            get
-            {
-                return VSConstants.GUID_ItemType_SubProject;
-            }
-        }
-
-        /// 
-        /// Defines whether a node can execute a command if in selection.
-        /// We do this in order to let the nested project to handle the execution of its own commands.
-        /// 
-        public override bool CanExecuteCommand
-        {
-            get
-            {
-                return false;
-            }
-        }
-
-        public override int SortPriority
-        {
-            get { return DefaultSortOrderNode.NestedProjectNode; }
-        }
-
-        public /*protected, but public for FSharp.Project.dll*/ bool IsDisposed
-        {
-            get { return this.isDisposed; }
-            set { this.isDisposed = value; }
-        }
-
-
-
-        #endregion
-
-        #region ctor
-
-        public /*protected, but public for FSharp.Project.dll*/ NestedProjectNode()
-        {
-        }
-
-        public NestedProjectNode(ProjectNode root, ProjectElement element)
-            : base(root, element)
-        {
-            this.IsExpanded = true;
-        }
-        #endregion
-
-        #region IPropertyNotifySink Members
-        /// 
-        /// Notifies a sink that the [bindable] property specified by dispID has changed. 
-        /// If dispID is DISPID_UNKNOWN, then multiple properties have changed together. 
-        /// The client (owner of the sink) should then retrieve the current value of each property of interest from the object that generated the notification.
-        /// In our case we will care about the  VSLangProj80.VsProjPropId.VBPROJPROPID_FileName and update the changes in the parent project file.
-        /// 
-        /// Dispatch identifier of the property that is about to change or DISPID_UNKNOWN if multiple properties are about to change.
-        public virtual void OnChanged(int dispid)
-        {
-            if (dispid == (int)VSLangProj80.VsProjPropId.VBPROJPROPID_FileName)
-            {
-                // Get the filename of the nested project. Inetead of asking the label on the nested we ask the filename, since the label might not yet been set.
-                IVsProject3 nestedProject = this.nestedHierarchy as IVsProject3;
-
-                if (nestedProject != null)
-                {
-                    string document;
-                    nestedProject.GetMkDocument(VSConstants.VSITEMID_ROOT, out document);
-                    this.RenameNestedProjectInParentProject(Path.GetFileNameWithoutExtension(document));
-
-                    // We need to redraw the caption since for some reason, by intervining to the OnChanged event the Caption is not updated.
-                    this.ReDraw(UIHierarchyElement.Caption);
-                }
-            }
-        }
-
-        /// 
-        /// Notifies a sink that a [requestedit] property is about to change and that the object is asking the sink how to proceed.
-        /// 
-        /// Dispatch identifier of the property that is about to change or DISPID_UNKNOWN if multiple properties are about to change.
-        public virtual void OnRequestEdit(int dispid)
-        {
-
-        }
-
-        #endregion
-
-        #region public methods
-        #endregion
-
-        #region overridden methods
-
-        /// 
-        /// Get the automation object for the NestedProjectNode
-        /// 
-        /// An instance of the Automation.OANestedProjectItem type if succeded
-        public override object GetAutomationObject()
-        {
-            //Validate that we are not disposed or the project is closing
-            if (this.isDisposed || this.ProjectMgr == null || this.ProjectMgr.IsClosed)
-            {
-                return null;
-            }
-
-            return new Automation.OANestedProjectItem(this.ProjectMgr.GetAutomationObject() as Automation.OAProject, this);
-        }
-
-        /// 
-        /// Gets properties of a given node or of the hierarchy.
-        /// 
-        /// Identifier of the hierarchy property
-        /// It return an object which type is dependent on the propid.
-        public override object GetProperty(int propId)
-        {
-            __VSHPROPID vshPropId = (__VSHPROPID)propId;
-            switch (vshPropId)
-            {
-                default:
-                    return base.GetProperty(propId);
-
-                case __VSHPROPID.VSHPROPID_Expandable:
-                    return true;
-
-                case __VSHPROPID.VSHPROPID_BrowseObject:
-                case __VSHPROPID.VSHPROPID_HandlesOwnReload:
-                    return this.DelegateGetPropertyToNested(propId);
-            }
-        }
-
-
-        /// 
-        /// Gets properties whose values are GUIDs.
-        /// 
-        /// Identifier of the hierarchy property
-        ///  Pointer to a GUID property specified in propid
-        /// If the method succeeds, it returns S_OK. If it fails, it returns an error code.
-        public override int GetGuidProperty(int propid, out Guid guid)
-        {
-            guid = Guid.Empty;
-            switch ((__VSHPROPID)propid)
-            {
-                case __VSHPROPID.VSHPROPID_ProjectIDGuid:
-                    guid = this.projectInstanceGuid;
-                    break;
-
-                default:
-                    return base.GetGuidProperty(propid, out guid);
-            }
-
-            CCITracing.TraceCall(String.Format(CultureInfo.CurrentCulture, "Guid for {0} property", propid));
-            if (guid.CompareTo(Guid.Empty) == 0)
-            {
-                return VSConstants.DISP_E_MEMBERNOTFOUND;
-            }
-
-            return VSConstants.S_OK;
-        }
-
-
-        /// 
-        /// Determines whether the hierarchy item changed.
-        /// 
-        /// Item identifier of the hierarchy item contained in VSITEMID
-        /// Pointer to the IUnknown interface of the hierarchy item. 
-        /// TRUE if the hierarchy item changed.
-        /// If the method succeeds, it returns S_OK. If it fails, it returns an error code.
-        public override int IsItemDirty(uint itemId, IntPtr punkDocData, out int pfDirty)
-        {
-            Debug.Assert(this.nestedHierarchy != null, "The nested hierarchy object must be created before calling this method");
-            Debug.Assert(punkDocData != IntPtr.Zero, "docData intptr was zero");
-
-            // Get an IPersistFileFormat object from docData object 
-            IPersistFileFormat persistFileFormat = Marshal.GetTypedObjectForIUnknown(punkDocData, typeof(IPersistFileFormat)) as IPersistFileFormat;
-            Debug.Assert(persistFileFormat != null, "The docData object does not implement the IPersistFileFormat interface");
-
-            // Call IsDirty on the IPersistFileFormat interface
-            ErrorHandler.ThrowOnFailure(persistFileFormat.IsDirty(out pfDirty));
-
-            return VSConstants.S_OK;
-        }
-
-        /// 
-        /// Saves the hierarchy item to disk.
-        /// 
-        /// Flags whose values are taken from the VSSAVEFLAGS enumeration.
-        /// File name to be applied when dwSave is set to VSSAVE_SilentSave. 
-        /// Item identifier of the hierarchy item saved from VSITEMID. 
-        /// Pointer to the IUnknown interface of the hierarchy item saved.
-        /// TRUE if the save action was canceled. 
-        /// If the method succeeds, it returns S_OK. If it fails, it returns an error code.
-        public override int SaveItem(VSSAVEFLAGS dwSave, string silentSaveAsName, uint itemid, IntPtr punkDocData, out int pfCancelled)
-        {
-            // Don't ignore/unignore file changes 
-            // Use Advise/Unadvise to work around rename situations
-            try
-            {
-                this.StopObservingNestedProjectFile();
-                Debug.Assert(this.nestedHierarchy != null, "The nested hierarchy object must be created before calling this method");
-                Debug.Assert(punkDocData != IntPtr.Zero, "docData intptr was zero");
-
-                // Get an IPersistFileFormat object from docData object (we don't call release on punkDocData since did not increment its ref count)
-                IPersistFileFormat persistFileFormat = Marshal.GetTypedObjectForIUnknown(punkDocData, typeof(IPersistFileFormat)) as IPersistFileFormat;
-                Debug.Assert(persistFileFormat != null, "The docData object does not implement the IPersistFileFormat interface");
-
-                IVsUIShell uiShell = this.GetService(typeof(SVsUIShell)) as IVsUIShell;
-                string newName;
-                uiShell.SaveDocDataToFile(dwSave, persistFileFormat, silentSaveAsName, out newName, out pfCancelled);
-
-                // When supported do a rename of the nested project here 
-            }
-            finally
-            {
-                // Succeeded or not we must hook to the file change events
-                // Don't ignore/unignore file changes 
-                // Use Advise/Unadvise to work around rename situations
-                this.ObserveNestedProjectFile();
-            }
-
-            return VSConstants.S_OK;
-        }
-
-        /// 
-        /// Gets the icon handle. It tries first the nested to get the icon handle. If that is not supported it will get it from
-        /// the image list of the nested if that is supported. If neither of these is supported a default image will be shown.
-        /// 
-        /// An object representing the icon.
-        public override object GetIconHandle(bool open)
-        {
-            Debug.Assert(this.nestedHierarchy != null, "The nested hierarchy object must be created before calling this method");
-
-            object iconHandle = null;
-            this.nestedHierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_IconHandle, out iconHandle);
-            if (iconHandle == null)
-            {
-                if (null == imageHandler)
-                {
-                    InitImageHandler();
-                }
-                // Try to get an icon from the nested hierrachy image list.
-                if (imageHandler.ImageList != null)
-                {
-                    object imageIndexAsObject = null;
-                    if (this.nestedHierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_IconIndex, out imageIndexAsObject) == VSConstants.S_OK &&
-                        imageIndexAsObject != null)
-                    {
-                        int imageIndex = (int)imageIndexAsObject;
-                        if (imageIndex < imageHandler.ImageList.Images.Count)
-                        {
-                            iconHandle = imageHandler.GetIconHandle(imageIndex);
-                        }
-                    }
-                }
-
-                if (null == iconHandle)
-                {
-                    iconHandle = this.ProjectMgr.ImageHandler.GetIconHandle((int)ProjectNode.ImageName.Application);
-                }
-            }
-
-            return iconHandle;
-        }
-
-        /// 
-        /// Return S_OK. Implementation of Closing a nested project is done in CloseNestedProject which is called by CloseChildren.
-        /// 
-        /// S_OK
-        public override int Close()
-        {
-            return VSConstants.S_OK;
-        }
-
-
-        /// 
-        /// Returns the moniker of the nested project.
-        /// 
-        /// 
-        public override string GetMkDocument()
-        {
-            Debug.Assert(this.nestedHierarchy != null, "The nested hierarchy object must be created before calling this method");
-            if (this.isDisposed || this.ProjectMgr == null || this.ProjectMgr.IsClosed)
-            {
-                return String.Empty;
-            }
-
-            return this.projectPath;
-        }
-
-        /// 
-        /// Called by the shell when a node has been renamed from the GUI
-        /// 
-        /// The name of the new label.
-        /// A success or failure value.
-        public override int SetEditLabel(string label)
-        {
-            int result = this.DelegateSetPropertyToNested((int)__VSHPROPID.VSHPROPID_EditLabel, label);
-            if (ErrorHandler.Succeeded(result))
-            {
-                this.RenameNestedProjectInParentProject(label);
-            }
-
-            return result;
-        }
-
-        /// 
-        /// Called by the shell to get the node caption when the user tries to rename from the GUI
-        /// 
-        /// the node cation
-        public override string GetEditLabel()
-        {
-            return (string)this.DelegateGetPropertyToNested((int)__VSHPROPID.VSHPROPID_EditLabel);
-        }      
-
-        /// 
-        /// This is temporary until we have support for re-adding a nested item
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
-        {
-            return false;
-        }
-
-        /// 
-        /// Delegates the call to the inner hierarchy.
-        /// 
-        /// Reserved parameter defined at the IVsPersistHierarchyItem2::ReloadItem parameter.
-        public /*protected, but public for FSharp.Project.dll*/ override void ReloadItem(uint reserved)
-        {
-            #region precondition
-            if (this.isDisposed || this.ProjectMgr == null || this.ProjectMgr.IsClosed)
-            {
-                throw new InvalidOperationException();
-            }
-
-            Debug.Assert(this.nestedHierarchy != null, "The nested hierarchy object must be created before calling this method");
-            #endregion
-
-            IVsPersistHierarchyItem2 persistHierachyItem = this.nestedHierarchy as IVsPersistHierarchyItem2;
-
-            // We are expecting that if we get called then the nestedhierarchy supports IVsPersistHierarchyItem2, since then hierrachy should support handling its own reload.
-            // There should be no errormessage to the user since this is an /*internal, but public for FSharp.Project.dll*/ public error, that it cannot be fixed at user level.
-            if (persistHierachyItem == null)
-            {
-                throw new InvalidOperationException();
-            }
-
-            ErrorHandler.ThrowOnFailure(persistHierachyItem.ReloadItem(VSConstants.VSITEMID_ROOT, reserved));
-        }
-
-        /// 
-        /// Flag indicating that changes to a file can be ignored when item is saved or reloaded. 
-        /// 
-        /// Flag indicating whether or not to ignore changes (1 to ignore, 0 to stop ignoring).
-        public /*protected, but public for FSharp.Project.dll*/ override void IgnoreItemFileChanges(bool ignoreFlag)
-        {
-            #region precondition
-            if (this.isDisposed || this.ProjectMgr == null || this.ProjectMgr.IsClosed)
-            {
-                throw new InvalidOperationException();
-            }
-
-            Debug.Assert(this.nestedHierarchy != null, "The nested hierarchy object must be created before calling this method");
-            #endregion
-
-            this.IgnoreNestedProjectFile(ignoreFlag);
-
-            IVsPersistHierarchyItem2 persistHierachyItem = this.nestedHierarchy as IVsPersistHierarchyItem2;
-
-            // If the IVsPersistHierarchyItem2 is not implemented by the nested just return
-            if (persistHierachyItem == null)
-            {
-                return;
-            }
-
-            ErrorHandler.ThrowOnFailure(persistHierachyItem.IgnoreItemFileChanges(VSConstants.VSITEMID_ROOT, ignoreFlag ? 1 : 0));
-        }
-
-        /// 
-        /// Sets the VSADDFILEFLAGS that will be used to call the  IVsTrackProjectDocumentsEvents2 OnAddFiles
-        /// 
-        /// The files to which an array of VSADDFILEFLAGS has to be specified.
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ override VSADDFILEFLAGS[] GetAddFileFlags(string[] files)
-        {
-            if (files == null || files.Length == 0)
-            {
-                return new VSADDFILEFLAGS[1] { VSADDFILEFLAGS.VSADDFILEFLAGS_NoFlags };
-            }
-
-            VSADDFILEFLAGS[] addFileFlags = new VSADDFILEFLAGS[files.Length];
-
-            for (int i = 0; i < files.Length; i++)
-            {
-                addFileFlags[i] = VSADDFILEFLAGS.VSADDFILEFLAGS_IsNestedProjectFile;
-            }
-
-            return addFileFlags;
-        }
-
-        /// 
-        /// Sets the VSQUERYADDFILEFLAGS that will be used to call the  IVsTrackProjectDocumentsEvents2 OnQueryAddFiles
-        /// 
-        /// The files to which an array of VSADDFILEFLAGS has to be specified.
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ override VSQUERYADDFILEFLAGS[] GetQueryAddFileFlags(string[] files)
-        {
-            if (files == null || files.Length == 0)
-            {
-                return new VSQUERYADDFILEFLAGS[1] { VSQUERYADDFILEFLAGS.VSQUERYADDFILEFLAGS_NoFlags };
-            }
-
-            VSQUERYADDFILEFLAGS[] queryAddFileFlags = new VSQUERYADDFILEFLAGS[files.Length];
-
-            for (int i = 0; i < files.Length; i++)
-            {
-                queryAddFileFlags[i] = VSQUERYADDFILEFLAGS.VSQUERYADDFILEFLAGS_IsNestedProjectFile;
-            }
-
-            return queryAddFileFlags;
-        }
-
-        /// 
-        /// Sets the VSREMOVEFILEFLAGS that will be used to call the  IVsTrackProjectDocumentsEvents2 OnRemoveFiles
-        /// 
-        /// The files to which an array of VSREMOVEFILEFLAGS has to be specified.
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ override VSREMOVEFILEFLAGS[] GetRemoveFileFlags(string[] files)
-        {
-            if (files == null || files.Length == 0)
-            {
-                return new VSREMOVEFILEFLAGS[1] { VSREMOVEFILEFLAGS.VSREMOVEFILEFLAGS_NoFlags };
-            }
-
-            VSREMOVEFILEFLAGS[] removeFileFlags = new VSREMOVEFILEFLAGS[files.Length];
-
-            for (int i = 0; i < files.Length; i++)
-            {
-                removeFileFlags[i] = VSREMOVEFILEFLAGS.VSREMOVEFILEFLAGS_IsNestedProjectFile;
-            }
-
-            return removeFileFlags;
-        }
-
-        /// 
-        /// Sets the VSQUERYREMOVEFILEFLAGS that will be used to call the  IVsTrackProjectDocumentsEvents2 OnQueryRemoveFiles
-        /// 
-        /// The files to which an array of VSQUERYREMOVEFILEFLAGS has to be specified.
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ override VSQUERYREMOVEFILEFLAGS[] GetQueryRemoveFileFlags(string[] files)
-        {
-            if (files == null || files.Length == 0)
-            {
-                return new VSQUERYREMOVEFILEFLAGS[1] { VSQUERYREMOVEFILEFLAGS.VSQUERYREMOVEFILEFLAGS_NoFlags };
-            }
-
-            VSQUERYREMOVEFILEFLAGS[] queryRemoveFileFlags = new VSQUERYREMOVEFILEFLAGS[files.Length];
-
-            for (int i = 0; i < files.Length; i++)
-            {
-                queryRemoveFileFlags[i] = VSQUERYREMOVEFILEFLAGS.VSQUERYREMOVEFILEFLAGS_IsNestedProjectFile;
-            }
-
-            return queryRemoveFileFlags;
-        }
-        #endregion
-
-        #region virtual methods
-        /// 
-        /// Initialize the nested hierarhy node.
-        /// 
-        /// The file name of the nested project.
-        /// The location of the nested project.
-        /// The name of the project.
-        /// The nested project creation flags 
-        /// This methos should be called just after a NestedProjectNode object is created.
-        public virtual void Init(string fileNameParam, string destinationParam, string projectNameParam, __VSCREATEPROJFLAGS createFlags)
-        {
-            if (String.IsNullOrEmpty(fileNameParam))
-            {
-                throw new ArgumentException(SR.GetString(SR.ParameterCannotBeNullOrEmpty, CultureInfo.CurrentUICulture), "fileNameParam");
-            }
-
-            if (String.IsNullOrEmpty(destinationParam))
-            {
-                throw new ArgumentException(SR.GetString(SR.ParameterCannotBeNullOrEmpty, CultureInfo.CurrentUICulture), "destinationParam");
-            }
-
-            this.projectName = Path.GetFileName(fileNameParam);
-            this.projectPath = Path.Combine(destinationParam, this.projectName);
-
-            // get the IVsSolution interface from the global service provider
-            IVsSolution solution = this.GetService(typeof(IVsSolution)) as IVsSolution;
-            Debug.Assert(solution != null, "Could not get the IVsSolution object from the services exposed by this project");
-            if (solution == null)
-            {
-                throw new InvalidOperationException();
-            }
-
-            // Get the project type guid from project element                
-            string typeGuidString = this.ItemNode.GetMetadataAndThrow(ProjectFileConstants.TypeGuid, new InvalidOperationException());
-            Guid projectFactoryGuid = Guid.Empty;
-            if (!String.IsNullOrEmpty(typeGuidString))
-            {
-                projectFactoryGuid = new Guid(typeGuidString);
-            }
-
-            // Get the project factory.
-            IVsProjectFactory projectFactory;
-            ErrorHandler.ThrowOnFailure(solution.GetProjectFactory((uint)0, new Guid[] { projectFactoryGuid }, fileNameParam, out projectFactory));
-
-            this.CreateProjectDirectory();
-
-            //Create new project using factory
-            int cancelled;
-            Guid refiid = NativeMethods.IID_IUnknown;
-            IntPtr projectPtr = IntPtr.Zero;
-            
-            try
-            {
-                ErrorHandler.ThrowOnFailure(projectFactory.CreateProject(fileNameParam, destinationParam, projectNameParam, (uint)createFlags, ref refiid, out projectPtr, out cancelled));
-
-                if (projectPtr != IntPtr.Zero)
-                {
-                    this.nestedHierarchy = Marshal.GetTypedObjectForIUnknown(projectPtr, typeof(IVsHierarchy)) as IVsHierarchy;
-                    Debug.Assert(this.nestedHierarchy != null, "Nested hierarchy could not be created");
-                    Debug.Assert(cancelled == 0);
-                }
-            }
-            finally
-            {
-                if (projectPtr != IntPtr.Zero)
-                {
-                    // We created a new instance of the project, we need to call release to decrement the ref count
-                    // the RCW (this.nestedHierarchy) still has a reference to it which will keep it alive
-                    Marshal.Release(projectPtr);
-                }
-            }
-
-            if (cancelled != 0 && this.nestedHierarchy == null)
-            {
-                ErrorHandler.ThrowOnFailure(VSConstants.OLE_E_PROMPTSAVECANCELLED);
-            }
-
-            // Link into the nested VS hierarchy.
-            ErrorHandler.ThrowOnFailure(this.nestedHierarchy.SetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ParentHierarchy, this.ProjectMgr));
-            ErrorHandler.ThrowOnFailure(this.nestedHierarchy.SetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ParentHierarchyItemid, (object)(int)this.ID));
-
-            this.LockRDTEntry();
-
-            this.ConnectPropertyNotifySink();
-        }
-
-        /// 
-        /// Links a nested project as a virtual project to the solution.
-        /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void AddVirtualProject()
-        {
-            // This is the second step in creating and adding a nested project. The inner hierarchy must have been
-            // already initialized at this point. 
-            #region precondition
-            if (this.nestedHierarchy == null)
-            {
-                throw new InvalidOperationException();
-            }
-            #endregion
-            // get the IVsSolution interface from the global service provider
-            IVsSolution solution = this.GetService(typeof(IVsSolution)) as IVsSolution;
-            Debug.Assert(solution != null, "Could not get the IVsSolution object from the services exposed by this project");
-            if (solution == null)
-            {
-                throw new InvalidOperationException();
-            }
-
-            this.InitializeInstanceGuid();
-
-            // Add virtual project to solution.
-            ErrorHandler.ThrowOnFailure(solution.AddVirtualProjectEx(this.nestedHierarchy, this.VirtualProjectFlags, ref this.projectInstanceGuid));
-
-            // Now set up to listen on file changes on the nested project node.
-            this.ObserveNestedProjectFile();
-        }
-
-        /// 
-        /// The method that does the cleanup.
-        /// 
-        /// 
-        protected override void Dispose(bool disposing)
-        {
-            // Everybody can go here.
-            if (!this.isDisposed)
-            {
-                try
-                {
-                    // Synchronize calls to the Dispose simulteniously.
-                    lock (Mutex)
-                    {
-                        if (disposing)
-                        {
-                            this.DisconnectPropertyNotifySink();
-                            this.StopObservingNestedProjectFile();
-                            this.imageHandler.Close();
-                        }                        
-                    }
-                }
-                finally
-                {
-                    base.Dispose(disposing);
-                    this.isDisposed = true;
-                }
-            }
-        }
-
-        /// 
-        /// Creates the project directory if it does not exist.
-        /// 
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual void CreateProjectDirectory()
-        {
-            string directoryName = Path.GetDirectoryName(this.projectPath);
-
-            if (!Directory.Exists(directoryName))
-            {
-                Directory.CreateDirectory(directoryName);
-            }
-        }
-
-
-        /// 
-        /// Lock the RDT Entry for the nested project.
-        /// By default this document is marked as "Dont Save as". That means the menu File->SaveAs is disabled for the
-        /// nested project node.
-        /// 
-        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "RDT")]
-        public /*protected, but public for FSharp.Project.dll*/ virtual void LockRDTEntry()
-        {
-            // Define flags for the nested project document
-            _VSRDTFLAGS flags = _VSRDTFLAGS.RDT_VirtualDocument | _VSRDTFLAGS.RDT_ProjSlnDocument; ;
-
-            // Request the RDT service
-            IVsRunningDocumentTable rdt = this.GetService(typeof(SVsRunningDocumentTable)) as IVsRunningDocumentTable;
-            Debug.Assert(rdt != null, " Could not get running document table from the services exposed by this project");
-            if (rdt == null)
-            {
-                throw new InvalidOperationException();
-            }
-
-            // First we see if someone else has opened the requested view of the file.
-            uint itemid;
-            IntPtr docData = IntPtr.Zero;
-            IVsHierarchy ivsHierarchy;
-            uint docCookie;
-            IntPtr projectPtr = IntPtr.Zero;
-
-            try
-            {
-                ErrorHandler.ThrowOnFailure(rdt.FindAndLockDocument((uint)flags, this.projectPath, out ivsHierarchy, out itemid, out docData, out docCookie));
-                flags |= _VSRDTFLAGS.RDT_EditLock;
-
-                if (ivsHierarchy != null && docCookie != (uint)ShellConstants.VSDOCCOOKIE_NIL)
-                {
-                    if (docCookie != this.DocCookie)
-                    {
-                        this.DocCookie = docCookie;
-                    }
-                }
-                else
-                {
-
-                    // get inptr for hierarchy
-                    projectPtr = Marshal.GetIUnknownForObject(this.nestedHierarchy);
-                    Debug.Assert(projectPtr != IntPtr.Zero, " Project pointer for the nested hierarchy has not been initialized");
-                    ErrorHandler.ThrowOnFailure(rdt.RegisterAndLockDocument((uint)flags, this.projectPath, this.ProjectMgr, this.ID, projectPtr, out docCookie));
-
-                    this.DocCookie = docCookie;
-                    Debug.Assert(this.DocCookie != (uint)ShellConstants.VSDOCCOOKIE_NIL, "Invalid cookie when registering document in the running document table.");
-
-                    //we must also set the doc cookie on the nested hier
-                    this.SetDocCookieOnNestedHier(this.DocCookie);
-                }
-            }
-            finally
-            {
-                // Release all Inptr's that that were given as out pointers
-                if (docData != IntPtr.Zero)
-                {
-                    Marshal.Release(docData);
-                }
-                if (projectPtr != IntPtr.Zero)
-                {
-                    Marshal.Release(projectPtr);
-                }
-            }
-
-        }
-
-        /// 
-        /// Unlock the RDT entry for the nested project
-        /// 
-        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "RDT")]
-        public /*protected, but public for FSharp.Project.dll*/ virtual void UnlockRDTEntry()
-        {
-            if (this.isDisposed || this.ProjectMgr == null || this.ProjectMgr.IsClosed)
-            {
-                return;
-            }
-            // First we see if someone else has opened the requested view of the file.
-            IVsRunningDocumentTable rdt = this.GetService(typeof(SVsRunningDocumentTable)) as IVsRunningDocumentTable;
-            if (rdt != null && this.DocCookie != (int)ShellConstants.VSDOCCOOKIE_NIL)
-            {
-                _VSRDTFLAGS flags = _VSRDTFLAGS.RDT_EditLock;
-
-                ErrorHandler.ThrowOnFailure(rdt.UnlockDocument((uint)flags, (uint)this.DocCookie));
-            }
-
-            this.DocCookie = (int)ShellConstants.VSDOCCOOKIE_NIL;
-        }
-
-        /// 
-        /// Renames the project file in the parent project structure.
-        /// 
-        /// The new label.
-        public /*protected, but public for FSharp.Project.dll*/ virtual void RenameNestedProjectInParentProject(string label)
-        {
-            string existingLabel = this.Caption;
-
-            if (String.Compare(existingLabel, label, StringComparison.Ordinal) == 0)
-            {
-                return;
-            }
-
-            string oldFileName = this.projectPath;
-            string oldPath = this.Url;
-
-            try
-            {
-                this.StopObservingNestedProjectFile();
-                this.ProjectMgr.SuspendMSBuild();
-
-                // Check out the project file if necessary.
-                if (!this.ProjectMgr.QueryEditProjectFile(false))
-                {
-                    throw Marshal.GetExceptionForHR(VSConstants.OLE_E_PROMPTSAVECANCELLED);
-                }
-
-
-                string newFileName = label + Path.GetExtension(oldFileName);
-                this.SaveNestedProjectItemInProjectFile(newFileName);
-
-                string projectDirectory = Path.GetDirectoryName(oldFileName);
-
-                // update state.
-                this.projectName = newFileName;
-                this.projectPath = Path.Combine(projectDirectory, this.projectName);
-
-                // Unload and lock the RDT entries
-                this.UnlockRDTEntry();
-                this.LockRDTEntry();
-
-                // Since actually this is a rename in our hierarchy notify the tracker that a rename has happened.
-                this.ProjectMgr.Tracker.OnItemRenamed(oldPath, this.projectPath, VSRENAMEFILEFLAGS.VSRENAMEFILEFLAGS_IsNestedProjectFile);
-            }
-            finally
-            {
-                this.ObserveNestedProjectFile();
-                this.ProjectMgr.ResumeMSBuild(this.ProjectMgr.ReEvaluateProjectFileTargetName);
-            }
-        }
-        /// 
-        /// Saves the nested project information in the project file.
-        /// 
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual void SaveNestedProjectItemInProjectFile(string newFileName)
-        {
-            string existingInclude = MSBuildItem.GetEvaluatedInclude(this.ItemNode.Item);
-            string existingRelativePath = Path.GetDirectoryName(existingInclude);
-            string newRelativePath = Path.Combine(existingRelativePath, newFileName);
-            this.ItemNode.Rename(newRelativePath);
-        }
-        #endregion    
-
-        #region helper methods
-        /// 
-        /// Closes a nested project and releases the nested hierrachy pointer.
-        /// 
-        /*internal, but public for FSharp.Project.dll*/ public void CloseNestedProjectNode()
-        {
-            if (this.isDisposed || this.ProjectMgr == null || this.ProjectMgr.IsClosed)
-            {
-                return;
-            }
-
-            uint itemid = VSConstants.VSITEMID_NIL;
-            try
-            {
-                this.DisconnectPropertyNotifySink();
-
-                IVsUIHierarchy hier;
-
-                IVsWindowFrame windowFrame;
-                VsShellUtilities.IsDocumentOpen(this.ProjectMgr.Site, this.projectPath, Guid.Empty, out hier, out itemid, out windowFrame);
-
-
-                if (itemid == VSConstants.VSITEMID_NIL)
-                {
-                    this.UnlockRDTEntry();
-                }
-
-                IVsSolution solution = this.GetService(typeof(IVsSolution)) as IVsSolution;
-                if (solution == null)
-                {
-                    throw new InvalidOperationException();
-                }
-
-                ErrorHandler.ThrowOnFailure(solution.RemoveVirtualProject(this.nestedHierarchy, 0));
-
-            }
-            finally
-            {
-                this.StopObservingNestedProjectFile();
-
-                // if we haven't already release the RDT cookie, do so now.
-                if (itemid == VSConstants.VSITEMID_NIL)
-                {
-                    this.UnlockRDTEntry();
-                }
-                
-                this.Dispose(true);
-            }
-        }
-
-        private void InitializeInstanceGuid()
-        {
-            if (this.projectInstanceGuid != Guid.Empty)
-            {
-                return;
-            }
-
-            Guid instanceGuid = Guid.Empty;
-
-            Debug.Assert(this.nestedHierarchy != null, "The nested hierarchy object must be created before calling this method");
-
-            // This method should be called from the open children method, then we can safely use the IsNewProject property
-            if (this.ProjectMgr.IsNewProject)
-            {
-                instanceGuid = Guid.NewGuid();
-                this.ItemNode.SetMetadata(ProjectFileConstants.InstanceGuid, instanceGuid.ToString("B"));
-                this.nestedHierarchy.SetGuidProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ProjectIDGuid, ref instanceGuid);
-
-            }
-            else
-            {
-                // Get a guid from the nested hiererachy.
-                Guid nestedHiererachyInstanceGuid;
-                this.nestedHierarchy.GetGuidProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ProjectIDGuid, out nestedHiererachyInstanceGuid);
-
-                // Get instance guid from the project file. If it does not exist then we create one.
-                string instanceGuidAsString = this.ItemNode.GetMetadata(ProjectFileConstants.InstanceGuid);
-
-                // 1. nestedHiererachyInstanceGuid is empty and instanceGuidAsString is empty then create a new one.
-                // 2. nestedHiererachyInstanceGuid is empty and instanceGuidAsString not empty use instanceGuidAsString and update the nested project object by calling SetGuidProperty.
-                // 3. nestedHiererachyInstanceGuid is not empty instanceGuidAsString is empty then use nestedHiererachyInstanceGuid and update the outer project element.
-                // 4. nestedHiererachyInstanceGuid is not empty instanceGuidAsString is empty then use nestedHiererachyInstanceGuid and update the outer project element.
-
-                if (nestedHiererachyInstanceGuid == Guid.Empty && String.IsNullOrEmpty(instanceGuidAsString))
-                {
-                    instanceGuid = Guid.NewGuid();
-                }
-                else if (nestedHiererachyInstanceGuid == Guid.Empty && !String.IsNullOrEmpty(instanceGuidAsString))
-                {
-                    instanceGuid = new Guid(instanceGuidAsString);
-
-                    this.nestedHierarchy.SetGuidProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ProjectIDGuid, ref instanceGuid);
-                }
-                else if (nestedHiererachyInstanceGuid != Guid.Empty)
-                {
-                    instanceGuid = nestedHiererachyInstanceGuid;
-
-                    // If the instanceGuidAsString is empty then creating a guid out of it would throw an exception.
-                    if (String.IsNullOrEmpty(instanceGuidAsString) || nestedHiererachyInstanceGuid != new Guid(instanceGuidAsString))
-                    {
-                        this.ItemNode.SetMetadata(ProjectFileConstants.InstanceGuid, instanceGuid.ToString("B"));
-                    }
-                }
-            }
-
-            this.projectInstanceGuid = instanceGuid;
-        }
-
-        private void SetDocCookieOnNestedHier(uint itemDocCookie)
-        {
-            object docCookie = (int)itemDocCookie;
-            this.nestedHierarchy.SetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ItemDocCookie, docCookie);
-        }
-
-        private void InitImageHandler()
-        {
-            Debug.Assert(this.nestedHierarchy != null, "The nested hierarchy object must be created before calling this method");
-
-            if (null == imageHandler)
-            {
-                imageHandler = new ImageHandler();
-            }
-            object imageListAsPointer = null;
-            this.nestedHierarchy.GetProperty(VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_IconImgList, out imageListAsPointer);
-            if (imageListAsPointer != null)
-            {
-                this.imageHandler.ImageList = Utilities.GetImageList(imageListAsPointer);
-            }
-        }
-
-        /// 
-        /// Delegates Getproperty calls to the inner nested.
-        /// 
-        /// The property to delegate.
-        /// The return of the GetProperty from nested.
-        private object DelegateGetPropertyToNested(int propID)
-        {
-            object returnValue = null;
-            if (!this.ProjectMgr.IsClosed)
-            {
-                Debug.Assert(this.nestedHierarchy != null, "The nested hierarchy object must be created before calling this method");
-
-                // Do not throw since some project types will return E_FAIL if they do not support a property.
-                this.nestedHierarchy.GetProperty(VSConstants.VSITEMID_ROOT, propID, out returnValue);
-            }
-            return returnValue;
-        }
-
-        /// 
-        /// Delegates Setproperty calls to the inner nested.
-        /// 
-        /// The property to delegate.
-        /// The property to set.
-        /// The return of the SetProperty from nested.
-        private int DelegateSetPropertyToNested(int propID, object value)
-        {
-            if (this.ProjectMgr.IsClosed)
-            {
-                return VSConstants.E_FAIL;
-            }
-
-            Debug.Assert(this.nestedHierarchy != null, "The nested hierarchy object must be created before calling this method");
-
-            // Do not throw since some project types will return E_FAIL if they do not support a property.
-            return this.nestedHierarchy.SetProperty(VSConstants.VSITEMID_ROOT, propID, value);
-        }
-
-        /// 
-        /// Starts observing changes on this file.
-        /// 
-        private void ObserveNestedProjectFile()
-        {
-            ProjectContainerNode parent = this.ProjectMgr as ProjectContainerNode;
-            Debug.Assert(parent != null, "The parent project for nested projects should be subclassed from ProjectContainerNode");
-            parent.NestedProjectNodeReloader.ObserveItem(this.GetMkDocument(), this.ID);
-        }
-
-        /// 
-        /// Stops observing changes on this file.
-        /// 
-        private void StopObservingNestedProjectFile()
-        {
-            ProjectContainerNode parent = this.ProjectMgr as ProjectContainerNode;
-            Debug.Assert(parent != null, "The parent project for nested projects should be subclassed from ProjectContainerNode");
-            parent.NestedProjectNodeReloader.StopObservingItem(this.GetMkDocument());
-        }
-
-        /// 
-        /// Ignores observing changes on this file depending on the boolean flag.
-        /// 
-        /// Flag indicating whether or not to ignore changes (1 to ignore, 0 to stop ignoring).
-        private void IgnoreNestedProjectFile(bool ignoreFlag)
-        {
-            ProjectContainerNode parent = this.ProjectMgr as ProjectContainerNode;
-            Debug.Assert(parent != null, "The parent project for nested projects should be subclassed from ProjectContainerNode");
-            parent.NestedProjectNodeReloader.IgnoreItemChanges(this.GetMkDocument(), ignoreFlag);
-        }
-
-        /// 
-        /// We need to advise property notify sink on project properties so that
-        /// we know when the project file is renamed through a property. 
-        /// 
-        private void ConnectPropertyNotifySink()
-        {
-            if (this.projectPropertyNotifySinkCookie != (uint)ShellConstants.VSCOOKIE_NIL)
-            {
-                return;
-            }
-
-            IConnectionPoint connectionPoint = this.GetConnectionPointFromPropertySink();
-            if (connectionPoint != null)
-            {
-                connectionPoint.Advise(this, out this.projectPropertyNotifySinkCookie);
-            }
-        }
-
-        /// 
-        /// Disconnects the propertynotify sink
-        /// 
-        private void DisconnectPropertyNotifySink()
-        {
-            if (this.projectPropertyNotifySinkCookie == (uint)ShellConstants.VSCOOKIE_NIL)
-            {
-                return;
-            }
-
-            IConnectionPoint connectionPoint = this.GetConnectionPointFromPropertySink();
-            if (connectionPoint != null)
-            {
-                connectionPoint.Unadvise(this.projectPropertyNotifySinkCookie);
-                this.projectPropertyNotifySinkCookie = (uint)ShellConstants.VSCOOKIE_NIL;
-            }
-        }
-
-        /// 
-        /// Gets a ConnectionPoint for the IPropertyNotifySink interface.
-        /// 
-        /// 
-        private IConnectionPoint GetConnectionPointFromPropertySink()
-        {
-            IConnectionPoint connectionPoint = null;
-            object browseObject = this.GetProperty((int)__VSHPROPID.VSHPROPID_BrowseObject);
-            IConnectionPointContainer connectionPointContainer = browseObject as IConnectionPointContainer;
-
-            if (connectionPointContainer != null)
-            {
-                Guid guid = typeof(IPropertyNotifySink).GUID;
-                connectionPointContainer.FindConnectionPoint(ref guid, out connectionPoint);
-            }
-
-            return connectionPoint;
-        }
-        #endregion       
-    }
-}
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/NodeProperties.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/NodeProperties.cs
index 35b0713435f..9625a78bd69 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/NodeProperties.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/NodeProperties.cs
@@ -119,11 +119,8 @@ public class NodeProperties : LocalizableProperties,
         IVsBrowseObject,
         IVsBuildMacroInfo
     {
-        #region fields
         private HierarchyNode node;
-        #endregion
 
-        #region properties
         [Browsable(false)]
         [AutomationBrowsable(false)]
         public HierarchyNode Node
@@ -141,9 +138,6 @@ public virtual string Name
             get { return this.node.Caption; }
         }
 
-        #endregion
-
-        #region ctors
         internal NodeProperties(HierarchyNode node)
         {
             if (node == null)
@@ -152,9 +146,7 @@ internal NodeProperties(HierarchyNode node)
             }
             this.node = node;
         }
-        #endregion
 
-        #region ISpecifyPropertyPages methods
         public virtual void GetPages(CAUUID[] pages)
         {
             // We do not check whether the supportsProjectDesigner is set to false on the ProjectNode.
@@ -173,9 +165,6 @@ public virtual void GetPages(CAUUID[] pages)
             pages[0] = new CAUUID();
             pages[0].cElems = 0;
         }
-        #endregion
-
-        #region IVsBuildMacroInfo methods
 
         /// 
         /// We support this interface so the build event command dialog can display a list
@@ -227,9 +216,6 @@ public int GetBuildMacroValue(string buildMacroName, out string buildMacroValue)
             return NativeMethods.S_OK;
         }
 
-        #endregion
-
-        #region IVsSpecifyProjectDesignerPages
         /// 
         /// Implementation of the IVsSpecifyProjectDesignerPages. It will retun the pages that are configuration independent.
         /// 
@@ -240,17 +226,13 @@ public virtual int GetProjectDesignerPages(CAUUID[] pages)
             this.GetCommonPropertyPages(pages);
             return VSConstants.S_OK;
         }
-        #endregion
 
-        #region IVsGetCfgProvider methods
         public virtual int GetCfgProvider(out IVsCfgProvider p)
         {
             p = null;
             return VSConstants.E_NOTIMPL;
         }
-        #endregion
 
-        #region IVsBrowseObject methods
         /// 
         /// Maps back to the hierarchy or project item object corresponding to the browse object.
         /// 
@@ -267,9 +249,7 @@ public virtual int GetProjectItem(out IVsHierarchy hier, out uint itemid)
             itemid = this.node.ID;
             return VSConstants.S_OK;
         }
-        #endregion
 
-        #region overridden methods
         /// 
         /// Get the Caption of the Hierarchy Node instance. If Caption is null or empty we delegate to base
         /// 
@@ -286,16 +266,14 @@ public override string GetComponentName()
                 return caption;
             }
         }
-        #endregion
 
-        #region helper methods
-        public /*protected, but public for FSharp.Project.dll*/ string GetProperty(string name, string def)
+        public string GetProperty(string name, string def)
         {
             string a = this.Node.ItemNode.GetMetadata(name);
             return (a == null) ? def : a;
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ void SetProperty(string name, string value)
+        public void SetProperty(string name, string value)
         {
             this.Node.ItemNode.SetMetadata(name, value);
         }
@@ -347,9 +325,6 @@ private void GetCommonPropertyPages(CAUUID[] pages)
                 pages[0].cElems = 0;
             }
         }
-        #endregion
-
-        #region IInternalExtenderProvider Members
 
         bool EnvDTE80.IInternalExtenderProvider.CanExtend(string extenderCATID, string extenderName, object extendeeObject)
         {
@@ -381,9 +356,6 @@ object EnvDTE80.IInternalExtenderProvider.GetExtenderNames(string extenderCATID,
             return null;
         }
 
-        #endregion
-
-        #region ExtenderSupport
         [Browsable(false)]
         [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "CATID")]
         public virtual string ExtenderCATID
@@ -421,8 +393,6 @@ public object Extender(string extenderName)
             }
             return extenderService.GetExtender(this.ExtenderCATID, extenderName, this);
         }
-
-        #endregion
     }
 
     internal sealed class BuildActionPropertyDescriptor : DesignPropertyDescriptor
@@ -652,8 +622,6 @@ private static BuildActionConverter GetBuildActionConverter(ITypeDescriptorConte
     [CLSCompliant(false), ComVisible(true)]
     public class FileNodeProperties : BuildableNodeProperties
     {
-        #region properties
-
         [SRCategoryAttribute(SR.Advanced)]
         [LocDisplayName(SR.CopyToOutputDirectory)]
         [SRDescriptionAttribute(SR.CopyToOutputDirectoryDescription)]
@@ -703,7 +671,6 @@ public string FullPath
             }
         }
 
-        #region non-browsable properties - used for automation only
         [Browsable(false)]
         public string Extension
         {
@@ -712,31 +679,21 @@ public string Extension
                 return Path.GetExtension(this.Node.Caption);
             }
         }
-        #endregion
-
 
-        #endregion
-
-        #region ctors
         internal FileNodeProperties(HierarchyNode node)
             : base(node)
         {
         }
-        #endregion
 
-        #region overridden methods
         public override string GetClassName()
         {
             return SR.GetString(SR.FileProperties, CultureInfo.CurrentUICulture);
         }
-        #endregion
     }
 
     [CLSCompliant(false), ComVisible(true)]
     public class DependentFileNodeProperties : BuildableNodeProperties
     {
-        #region properties
-
         [SRCategoryAttribute(SR.Misc)]
         [LocDisplayName(SR.FileName)]
         [SRDescriptionAttribute(SR.FileNameDescription)]
@@ -758,116 +715,22 @@ public string FullPath
                 return this.Node.Url;
             }
         }
-        #endregion
 
-        #region ctors
         internal DependentFileNodeProperties(HierarchyNode node)
             : base(node)
         {
         }
 
-        #endregion
-
-        #region overridden methods
         public override string GetClassName()
         {
             return SR.GetString(SR.FileProperties, CultureInfo.CurrentUICulture);
         }
-        #endregion
-    }
-
-#if SINGLE_FILE_GENERATOR
-    [CLSCompliant(false), ComVisible(true)]
-    public class SingleFileGeneratorNodeProperties : FileNodeProperties
-    {
-    #region fields
-        private EventHandler onCustomToolChanged;
-        private EventHandler onCustomToolNameSpaceChanged;
-        public /*protected, but public for FSharp.Project.dll*/ string _customTool = "";
-        public /*protected, but public for FSharp.Project.dll*/ string _customToolNamespace = "";
-        #endregion
-
-    #region custom tool events
-        /*internal, but public for FSharp.Project.dll*/ public event EventHandler OnCustomToolChanged
-        {
-            add { onCustomToolChanged += value; }
-            remove { onCustomToolChanged -= value; }
-        }
-
-        /*internal, but public for FSharp.Project.dll*/ public event EventHandler OnCustomToolNameSpaceChanged
-        {
-            add { onCustomToolNameSpaceChanged += value; }
-            remove { onCustomToolNameSpaceChanged -= value; }
-        }
-
-        #endregion
-
-    #region properties
-        [SRCategoryAttribute(SR.Advanced)]
-        [LocDisplayName(SR.CustomTool)]
-        [SRDescriptionAttribute(SR.CustomToolDescription)]
-        public virtual string CustomTool
-        {
-            get
-            {
-                _customTool = this.Node.ItemNode.GetMetadata(ProjectFileConstants.Generator);
-                return _customTool;
-            }
-            set
-            {
-                _customTool = value;
-                if (!string.IsNullOrEmpty(_customTool))
-                {
-                    this.Node.ItemNode.SetMetadata(ProjectFileConstants.Generator, _customTool);
-                    HierarchyNodeEventArgs args = new HierarchyNodeEventArgs(this.Node);
-                    if (onCustomToolChanged != null)
-                    {
-                        onCustomToolChanged(this.Node, args);
-                    }
-                }
-            }
-        }
-
-        [SRCategoryAttribute(SR.Advanced)]
-        [LocDisplayName(SR.CustomToolNamespace)]
-        [SRDescriptionAttribute(SR.CustomToolNamespaceDescription)]
-        public virtual string CustomToolNamespace
-        {
-            get
-            {
-                _customToolNamespace = this.Node.ItemNode.GetMetadata(ProjectFileConstants.CustomToolNamespace);
-                return _customToolNamespace;
-            }
-            set
-            {
-                _customToolNamespace = value;
-                if (!string.IsNullOrEmpty(_customToolNamespace))
-                {
-                    this.Node.ItemNode.SetMetadata(ProjectFileConstants.CustomToolNamespace, _customToolNamespace);
-                    HierarchyNodeEventArgs args = new HierarchyNodeEventArgs(this.Node);
-                    if (onCustomToolNameSpaceChanged != null)
-                    {
-                        onCustomToolNameSpaceChanged(this.Node, args);
-                    }
-                }
-            }
-        }
-        #endregion
-
-    #region ctors
-        internal SingleFileGeneratorNodeProperties(HierarchyNode node)
-            : base(node)
-        {
-        }
-        #endregion
     }
-#endif
 
     [CLSCompliant(false), ComVisible(true)]
     public class ProjectNodeProperties : NodeProperties
         , VSLangProj.ProjectProperties
     {
-        #region properties
         [SRCategoryAttribute(SR.Misc)]
         [LocDisplayName(SR.ProjectFolder)]
         [SRDescriptionAttribute(SR.ProjectFolderDescription)]
@@ -896,7 +759,6 @@ public string ProjectFile
             }
         }
 
-        #region non-browsable properties - used for automation only
         [Browsable(false)]
         public string FileName
         {
@@ -939,18 +801,12 @@ public string FullPath
                 }
             }
         }
-        #endregion
-
-        #endregion
 
-        #region ctors
         internal ProjectNodeProperties(ProjectNode node)
             : base(node)
         {
         }
-        #endregion
 
-        #region overridden methods
         public override string GetClassName()
         {
             return SR.GetString(SR.ProjectProperties, CultureInfo.CurrentUICulture);
@@ -988,9 +844,6 @@ public override int GetCfgProvider(out IVsCfgProvider p)
             return base.GetCfgProvider(out p);
         }
 
-        #endregion
-        #region VsLangProj.ProjectProperties
-
         string VSLangProj.ProjectProperties.__id
         {
             get
@@ -1336,14 +1189,11 @@ string VSLangProj.ProjectProperties.OutputFileName
                 return assemblyName + extension;
             }
         }
-
-        #endregion
     }
 
     [CLSCompliant(false), ComVisible(true)]
     public class FolderNodeProperties : NodeProperties
     {
-        #region properties
         [SRCategoryAttribute(SR.Misc)]
         [LocDisplayName(SR.FolderName)]
         [SRDescriptionAttribute(SR.FolderNameDescription)]
@@ -1361,7 +1211,6 @@ public string FolderName
             }
         }
 
-        #region properties - used for automation only
         [Browsable(false)]
         [AutomationBrowsable(true)]
         public string FileName
@@ -1393,23 +1242,16 @@ public string FullPath
                 }
             }
         }
-        #endregion
-
-        #endregion
 
-        #region ctors
         internal FolderNodeProperties(HierarchyNode node)
             : base(node)
         {
         }
-        #endregion
 
-        #region overridden methods
         public override string GetClassName()
         {
             return SR.GetString(SR.FolderProperties, CultureInfo.CurrentUICulture);
         }
-        #endregion
     }
 
     [CLSCompliant(false), ComVisible(true)]
@@ -1417,7 +1259,6 @@ public class ReferenceNodeProperties : NodeProperties
     {
         bool copyLocalDefault;
 
-        #region properties
         [SRCategoryAttribute(SR.Misc)]
         [LocDisplayName(SR.RefName)]
         [SRDescriptionAttribute(SR.RefNameDescription)]
@@ -1459,9 +1300,7 @@ public virtual string FullPath
                 return this.Node.Url;
             }
         }
-        #endregion
 
-        #region ctors
         internal ReferenceNodeProperties(HierarchyNode node)
             : this(node, false)
         {
@@ -1472,14 +1311,11 @@ internal ReferenceNodeProperties(HierarchyNode node, bool copyLocalDefault)
         {
             this.copyLocalDefault = copyLocalDefault;
         }
-        #endregion
 
-        #region overridden methods
         public override string GetClassName()
         {
             return SR.GetString(SR.ReferenceProperties, CultureInfo.CurrentUICulture);
         }
-        #endregion
     }
 
     class FSharpCoreVersionConverter : StringConverter
@@ -1596,14 +1432,11 @@ public bool SpecificVersion
     [ComVisible(true)]
     public class ProjectReferencesProperties : ReferenceNodeProperties
     {
-        #region ctors
         internal ProjectReferencesProperties(ProjectReferenceNode node)
             : base(node, true)
         {
         }
-        #endregion
 
-        #region overriden methods
         public override string FullPath
         {
             get
@@ -1611,6 +1444,5 @@ public override string FullPath
                 return ((ProjectReferenceNode)Node).ReferencedProjectOutputPath;
             }
         }
-        #endregion
     }
 }
\ No newline at end of file
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/OleServiceProvider.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/OleServiceProvider.cs
index 402d540c72f..3bdf0415fcb 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/OleServiceProvider.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/OleServiceProvider.cs
@@ -24,11 +24,8 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
 {
     internal class OleServiceProvider : IOleServiceProvider, IDisposable
     {
-        #region Public Types
         public delegate object ServiceCreatorCallback(Type serviceType);
-        #endregion
 
-        #region Private Types
         private class ServiceData : IDisposable
         {
             private Type serviceType;
@@ -82,9 +79,6 @@ public void Dispose()
                 creator = null;
             }
         }
-        #endregion
-
-        #region fields
 
         private Dictionary services = new Dictionary();
         private bool isDisposed;
@@ -92,15 +86,10 @@ public void Dispose()
         /// Defines an object that will be a mutex for this object for synchronizing thread calls.
         /// 
         private static volatile object Mutex = new object();
-        #endregion
 
-        #region ctors
         public OleServiceProvider()
         {
         }
-        #endregion
-
-        #region IOleServiceProvider Members
 
         public int QueryService(ref Guid guidService, ref Guid riid, out IntPtr ppvObject)
         {
@@ -148,9 +137,6 @@ public int QueryService(ref Guid guidService, ref Guid riid, out IntPtr ppvObjec
             return hr;
         }
 
-        #endregion
-
-        #region Dispose        
 
         /// 
         /// The IDispose interface Dispose method for disposing the object determinastically.
@@ -161,8 +147,6 @@ public void Dispose()
             GC.SuppressFinalize(this);
         }
 
-        #endregion
-
         /// 
         /// Adds the given service to the service container.
         /// 
@@ -222,12 +206,11 @@ public void RemoveService(Type serviceType)
             }
         }
 
-        #region helper methods
         /// 
         /// The method that does the cleanup.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual void Dispose(bool disposing)
+        public virtual void Dispose(bool disposing)
         {
             // Everybody can go here.
             if (!this.isDisposed)
@@ -256,7 +239,6 @@ public void RemoveService(Type serviceType)
                 }
             }
         }
-        #endregion
 
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Output.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Output.cs
index 2f72a2d997e..fd52ed51cef 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Output.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Output.cs
@@ -55,8 +55,6 @@ internal string GetMetadata(string name)
             return ErrorHandler.Succeeded(get_Property(name, out value)) ? value as string : null;
         }
 
-        #region IVsOutput2 Members
-
         public int get_CanonicalName(out string pbstrCanonicalName)
         {
             pbstrCanonicalName = MSBuildItem.GetEvaluatedInclude(output);
@@ -134,7 +132,5 @@ public virtual int get_Type(out Guid pguidType)
             pguidType = Guid.Empty;
             throw new NotImplementedException();
         }
-
-        #endregion
 }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/OutputGroup.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/OutputGroup.cs
index e23b316369a..5e619143cc5 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/OutputGroup.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/OutputGroup.cs
@@ -22,7 +22,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     [CLSCompliant(false), ComVisible(true)]
     public class OutputGroup : IVsOutputGroup2
     {
-        #region fields
         private ProjectConfig projectCfg;
         private ProjectNode project;
 
@@ -30,14 +29,12 @@ public class OutputGroup : IVsOutputGroup2
         private Output keyOutput = null;
         private string name;
         private string targetName;
-        #endregion
 
-        #region properties
         /// 
         /// Get the project configuration object associated with this output group
         /// 
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cfg")]
-        public /*protected, but public for FSharp.Project.dll*/ ProjectConfig ProjectCfg
+        public ProjectConfig ProjectCfg
         {
             get { return projectCfg; }
         }
@@ -45,7 +42,7 @@ public class OutputGroup : IVsOutputGroup2
         /// 
         /// Get the project object that produces this output group.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ ProjectNode Project
+        public ProjectNode Project
         {
             get { return project; }
         }
@@ -54,7 +51,7 @@ public class OutputGroup : IVsOutputGroup2
         /// Gets the msbuild target name which is assciated to the outputgroup.
         /// ProjectNode defines a static collection of output group names and their associated MsBuild target
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ string TargetName
+        public string TargetName
         {
             get { return targetName; }
         }
@@ -84,10 +81,6 @@ internal Output[] Outputs
             }
         }
  
-        #endregion
-
-        #region ctors
-
         /// 
         /// Constructor for IVSOutputGroup2 implementation
         /// 
@@ -111,10 +104,8 @@ internal OutputGroup(string outputName, string msBuildTargetName, ProjectNode pr
             project = projectManager;
             projectCfg = configuration;
         }
-        #endregion
 
-        #region virtual methods
-        public /*protected, but public for FSharp.Project.dll*/ virtual void Refresh()
+        public virtual void Refresh()
         {
             // Let MSBuild know which configuration we are working with
             project.SetConfiguration(projectCfg.ConfigCanonicalName);
@@ -163,18 +154,13 @@ public virtual void InvalidateGroup()
             }
             keyOutput = null;
         }
-        #endregion
 
-        #region event handlers
         private void OnProjectPropertyChanged(object sender, ProjectPropertyChangedArgs args)
         {
             // In theory here we should decide if we have to invalidate the group according with the kind of property
             // that is changed.
             InvalidateGroup();
         }
-        #endregion
-
-        #region IVsOutputGroup2 Members
 
         public virtual int get_CanonicalName(out string pbstrCanonicalName)
         {
@@ -284,7 +270,5 @@ public virtual int get_Property(string pszProperty, out object pvar)
             pvar = project.GetProjectProperty(pszProperty);
             return VSConstants.S_OK;
         }
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectConfig.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectConfig.cs
index f4762449bab..bfd95b515a3 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectConfig.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectConfig.cs
@@ -122,7 +122,6 @@ public override bool Equals(object obj)
         /// The name of the configuration.
         /// The name of the platform.
         /// true if successfull.
-        /*internal, but public for FSharp.Project.dll*/
         internal static bool TrySplitConfigurationCanonicalName(string canonicalName, out string configName, out string platformName)
         {
             // TODO rationalize this code with callers and ProjectNode.OnHandleConfigurationRelatedGlobalProperties, ProjectNode.TellMSBuildCurrentSolutionConfiguration, etc
@@ -183,18 +182,14 @@ public class ProjectConfig :
         IVsSpecifyProjectDesignerPages,
         IVsCfgBrowseObject
     {
-        #region constants
-        /*internal, but public for FSharp.Project.dll*/ public const string Debug = "Debug";
-        /*internal, but public for FSharp.Project.dll*/ public const string Release = "Release";
-        /*internal, but public for FSharp.Project.dll*/ public const string AnyCPU = "AnyCPU";
-        /*internal, but public for FSharp.Project.dll*/ public const string AnyCPU32BitPreferred = "AnyCPU32BitPreferred";
+        public const string Debug = "Debug";
+        public const string Release = "Release";
+        public const string AnyCPU = "AnyCPU";
+        public const string AnyCPU32BitPreferred = "AnyCPU32BitPreferred";
         public const string Any_CPU = "Any CPU";
 
-        #endregion
 
 
-
-        #region fields
         private ProjectNode project;
         private ConfigCanonicalName configCanonicalName;
         private DateTime lastCache;
@@ -206,7 +201,6 @@ public class ProjectConfig :
         private IVsProjectFlavorCfg flavoredCfg = null;
         private BuildableProjectConfig buildableCfg = null;
         private readonly ProjectConfigProperties projectConfigurationProperties ;
-        #endregion
 
         private string GetProjectAssemblyName()
         {
@@ -218,7 +212,6 @@ private string GetProjectAssemblyName()
             return this.projectAssemblyNameCache;
         }
 
-        #region properties
         public ProjectNode ProjectMgr
         {
             get
@@ -614,7 +607,7 @@ public virtual object ConfigurationProperties
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ IList OutputGroups
+        public IList OutputGroups
         {
             get
             {
@@ -642,9 +635,7 @@ public virtual object ConfigurationProperties
                 return this.outputGroups;
             }
         }
-        #endregion
 
-        #region ctors
         internal ProjectConfig(ProjectNode project, ConfigCanonicalName configName)
         {
             this.project = project;
@@ -662,10 +653,8 @@ internal ProjectConfig(ProjectNode project, ConfigCanonicalName configName)
                 this.project.LoadXmlFragment(persistXML, this.DisplayName);
             }
         }
-        #endregion
 
-        #region methods
-        public /*protected, but public for FSharp.Project.dll*/ virtual OutputGroup CreateOutputGroup(ProjectNode project, KeyValuePair group)
+        public virtual OutputGroup CreateOutputGroup(ProjectNode project, KeyValuePair group)
         {
             OutputGroup outputGroup = new OutputGroup(group.Key, group.Value, project, this);
             return outputGroup;
@@ -787,7 +776,7 @@ private void SetPropertyUnderConditionImpl(string propertyName, string propertyV
         /// 
         /// Project file or user file
         /// 0 = not dirty
-        /*internal, but public for FSharp.Project.dll*/ public int IsFlavorDirty(_PersistStorageType storageType)
+        public int IsFlavorDirty(_PersistStorageType storageType)
         {
             int isDirty = 0;
             if (this.flavoredCfg != null && this.flavoredCfg is IPersistXMLFragment)
@@ -804,7 +793,7 @@ private void SetPropertyUnderConditionImpl(string propertyName, string propertyV
         /// Project file or user file
         /// Fragment that the flavor wants to save
         /// HRESULT
-        /*internal, but public for FSharp.Project.dll*/ public int GetXmlFragment(Guid flavor, _PersistStorageType storageType, out string fragment)
+        public int GetXmlFragment(Guid flavor, _PersistStorageType storageType, out string fragment)
         {
             fragment = null;
             int hr = VSConstants.S_OK;
@@ -815,9 +804,7 @@ private void SetPropertyUnderConditionImpl(string propertyName, string propertyV
             }
             return hr;
         }
-        #endregion
 
-#region IVsSpecifyPropertyPages
         public void GetPages(CAUUID[] pages)
         {
             // We do not check whether the supportsProjectDesigner is set to false on the ProjectNode.
@@ -835,9 +822,7 @@ public void GetPages(CAUUID[] pages)
             pages[0] = new CAUUID();
             pages[0].cElems = 0;
         }
-        #endregion
 
-#region IVsSpecifyProjectDesignerPages
         /// 
         /// Implementation of the IVsSpecifyProjectDesignerPages. It will retun the pages that are configuration dependent.
         /// 
@@ -848,9 +833,7 @@ public virtual int GetProjectDesignerPages(CAUUID[] pages)
             this.GetCfgPropertyPages(pages);
             return VSConstants.S_OK;
         }
-        #endregion
 
-#region IVsCfg methods
         /// 
         /// The display name is a two part item
         /// first part is the config name, 2nd part is the platform name
@@ -887,9 +870,7 @@ public virtual int get_IsReleaseOnly(out int fRelease)
             }
             return VSConstants.S_OK;
         }
-        #endregion
 
-#region IVsProjectCfg methods
         public virtual int EnumOutputs(out IVsEnumOutputs eo)
         {
             CCITracing.TraceCall();
@@ -974,7 +955,6 @@ public virtual int OpenOutput(string name, out IVsOutput output)
             output = null;
             return VSConstants.E_NOTIMPL;
         }
-        #endregion
 
         private VsDebugTargetInfo GetDebugTargetInfo(uint grfLaunch, bool forLaunch)
         {
@@ -1088,7 +1068,7 @@ private VsDebugTargetInfo GetDebugTargetInfo(uint grfLaunch, bool forLaunch)
             }
             return info;
         }
-#region IVsDebuggableProjectCfg methods
+
         /// 
         /// Called by the vs shell to start debugging (managed or unmanaged).
         /// Override this method to support other debug engines.
@@ -1143,9 +1123,7 @@ public virtual int QueryDebugLaunch(uint flags, out int fCanLaunch)
             fCanLaunch = this.fCanLaunchCache;
             return VSConstants.S_OK;
         }
-        #endregion
 
-        #region IVsQueryDebuggableProjectCfg
         public virtual int QueryDebugTargets(uint grfLaunch, uint cTargets, VsDebugTargetInfo2[] debugTargetInfo, uint[] actualTargets)
         {
             if (debugTargetInfo == null) // caller only queries for number of targets
@@ -1190,9 +1168,6 @@ public virtual int QueryDebugTargets(uint grfLaunch, uint cTargets, VsDebugTarge
                 actualTargets[0] = 1;
             return VSConstants.S_OK;
         }
-        #endregion
-
-        #region IVsProjectCfg2 Members
 
         public virtual int OpenOutputGroup(string szCanonicalName, out IVsOutputGroup ppIVsOutputGroup)
         {
@@ -1286,9 +1261,6 @@ public virtual int get_VirtualRoot(out string pbstrVRoot)
             return VSConstants.E_NOTIMPL;
         }
 
-        #endregion
-
-#region IVsCfgBrowseObject
         /// 
         /// Maps back to the configuration corresponding to the browse object. 
         /// 
@@ -1314,9 +1286,6 @@ public virtual int GetProjectItem(out IVsHierarchy hier, out uint itemid)
             }
             return this.project.NodeProperties.GetProjectItem(out hier, out itemid);
         }
-        #endregion
-
-#region helper methods
 
         private void EnsureCache()
         {
@@ -1380,9 +1349,7 @@ private void GetCfgPropertyPages(CAUUID[] pages)
                 pages[0] = PackageUtilities.CreateCAUUIDFromGuidArray(guids);
             }
         }
-        #endregion
 
-#region IVsProjectFlavorCfg Members
         /// 
         /// This is called to let the flavored config let go
         /// of any reference it may still be holding to the base config
@@ -1425,9 +1392,6 @@ int IVsProjectFlavorCfg.get_CfgType(ref Guid iidCfg, out IntPtr ppCfg)
             return VSConstants.S_OK;
         }
 
-        #endregion
-
-
         public string Platform { get { return this.configCanonicalName.Platform; } }
 
         private static bool IsPossibleOutputGroup(string groupName)
@@ -1591,7 +1555,8 @@ internal bool IsUpToDate(OutputWindowLogger logger, bool testing)
             // in batch build it is possible that config is out of sync.
             // in this case, don't assume we are up to date
             ConfigCanonicalName activeConfig = default(ConfigCanonicalName);
-            if(!Utilities.TryGetActiveConfigurationAndPlatform(ServiceProvider.GlobalProvider, this.project, out activeConfig) ||
+           
+            if(!Utilities.TryGetActiveConfigurationAndPlatform(ServiceProvider.GlobalProvider, this.project.ProjectIDGuid, out activeConfig) ||
                 activeConfig != this.ConfigCanonicalName)
             {
                 logger.WriteLine("Not up to date: active confic does not match project config. Active: {0} Project: {1}", activeConfig, this.ConfigCanonicalName);
@@ -1709,7 +1674,11 @@ public class BuildableProjectConfig : IVsBuildableProjectCfg
     {
 
 #if FX_ATLEAST_45
+#if VS_VERSION_DEV12
         private static string RegistryRoot = @"SOFTWARE\Microsoft\VisualStudio\12.0\";
+#else
+        private static string RegistryRoot = @"SOFTWARE\Microsoft\VisualStudio\14.0\";
+#endif
         private static bool? isMultiThreadedBuildEnabled = null;
         internal static bool IsMultiThreadedBuildEnabled() 
         {
@@ -1743,16 +1712,13 @@ private bool IsInProgress()
         }
 #endif
 
-        #region fields
         ProjectConfig config = null;
         EventSinkCollection callbacks = new EventSinkCollection();
         string[] filesWeCalledHandsOff = null;
 #if FX_ATLEAST_45
         IVsBuildManagerAccessor buildManagerAccessor = null; 
 #endif
-        #endregion
 
-        #region ctors
         internal BuildableProjectConfig(ProjectConfig config)
         {
             this.config = config;
@@ -1760,11 +1726,8 @@ internal BuildableProjectConfig(ProjectConfig config)
             this.buildManagerAccessor = this.config.ProjectMgr.GetService(typeof(SVsBuildManagerAccessor)) as IVsBuildManagerAccessor;
 #endif
         }
-        #endregion
 
 #if FX_ATLEAST_45
-        #region IVsBuildableProjectCfg2 Members
-
         private const int VSBLDCFGPROPID_SupportsMTBuild = -16000;
 
         public int GetBuildCfgProperty(int propid, out object pvar)
@@ -1785,11 +1748,8 @@ public int StartBuildEx(uint dwBuildId, IVsOutputWindowPane pIVsOutputWindowPane
         {
             return this.StartBuild(pIVsOutputWindowPane, dwOptions);
         }
-        #endregion
 #endif
 
-        #region IVsBuildableProjectCfg methods
-
         public virtual int AdviseBuildStatusCallback(IVsBuildStatusCallback callback, out uint cookie)
         {
             CCITracing.TraceCall();
@@ -1832,12 +1792,21 @@ public virtual int QueryStartUpToDateCheck(uint options, int[] supported, int[]
             CCITracing.TraceCall();
             config.PrepareBuild(false);
 
-            int utdSupported = config.IsFastUpToDateCheckEnabled() ? 1 : 0;
+            // criteria (same as C# project system):
+            // - Fast UTD never enabled for package operations
+            // - Fast UTD always enabled for DTEE operations
+            // - Otherwise fast UTD enabled as long as it's not explicitly disabled by the project
+            bool utdSupported =
+                ((options & VSConstants.VSUTDCF_PACKAGE) == 0) &&
+                (((options & VSConstants.VSUTDCF_DTEEONLY) != 0) || config.IsFastUpToDateCheckEnabled());
+
+            int utdSupportedFlag = utdSupported ? 1 : 0;
 
             if (supported != null && supported.Length > 0)
-                supported[0] = utdSupported;
+                supported[0] = utdSupportedFlag;
             if (ready != null && ready.Length > 0)
-                ready[0] = utdSupported;
+                ready[0] = utdSupportedFlag;
+
             return VSConstants.S_OK;
         }
 
@@ -1902,9 +1871,7 @@ public virtual int Wait(uint ms, int fTickWhenMessageQNotEmpty)
 
             return VSConstants.E_NOTIMPL;
         }
-        #endregion
 
-        #region helpers
         private bool NotifyBuildBegin()
         {
 
@@ -2030,6 +1997,5 @@ private void RefreshReferences(BuildResult buildResult)
                 referenceNode.RefreshReference(buildResult);
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectContainerNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectContainerNode.cs
deleted file mode 100644
index ae0b7a47a11..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectContainerNode.cs
+++ /dev/null
@@ -1,809 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-// WARNING: This code has not been reviewed for COM reference leaks. Review before activating.
-#if UNUSED_NESTED_PROJECTS
-using System;
-using System.CodeDom.Compiler;
-using System.Collections;
-using System.Collections.Generic;
-using System.Collections.Specialized;
-using System.Drawing;
-using System.IO;
-using System.Runtime.InteropServices;
-using System.Text;
-using System.Xml;
-using System.Windows.Forms;
-using System.Diagnostics;
-using System.Globalization;
-using Microsoft.VisualStudio.OLE.Interop;
-using Microsoft.VisualStudio.Shell.Interop;
-using Microsoft.VisualStudio.Shell;
-using System.Net;
-using MSBuild = Microsoft.Build.BuildEngine;
-using IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider;
-using IServiceProvider = System.IServiceProvider;
-using System.Diagnostics.CodeAnalysis;
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem
-{
-    [CLSCompliant(false), ComVisible(true)]
-    public abstract class ProjectContainerNode : ProjectNode,
-        IVsParentProject,
-        IBuildDependencyOnProjectContainer
-    {
-        #region fields
-
-        /// 
-        /// Setting this flag to true will build all nested project when building this project
-        /// 
-        private bool buildNestedProjectsOnBuild = true;
-
-        private ProjectElement nestedProjectElement;
-
-        /// 
-        /// Defines the listener that would listen on file changes on the nested project node.
-        /// 
-        ///            
-        ///This might need a refactoring when nested projects can be added and removed by demand.
-        /// 
-        private FileChangeManager nestedProjectNodeReloader;
-        #endregion
-
-        #region ctors
-        internal ProjectContainerNode()
-        {
-        }
-        #endregion
-
-        #region properties
-        /// 
-        /// Returns teh object that handles listening to file changes on the nested project files.
-        /// 
-        /*internal, but public for FSharp.Project.dll*/ public FileChangeManager NestedProjectNodeReloader
-        {
-            get
-            {
-                if (this.nestedProjectNodeReloader == null)
-                {
-                    this.nestedProjectNodeReloader = new FileChangeManager(this.Site);
-                    this.nestedProjectNodeReloader.FileChangedOnDisk += this.OnNestedProjectFileChangedOnDisk;
-                }
-
-                return this.nestedProjectNodeReloader;
-            }
-        }
-        #endregion
-
-        #region overridden properties
-        /// 
-        /// This is the object that will be returned by EnvDTE.Project.Object for this project
-        /// 
-        /*internal, but public for FSharp.Project.dll*/ public override object Object
-        {
-            get { return new Automation.OASolutionFolder(this); }
-        }
-
-        #endregion
-
-        #region public overridden methods
-        /// 
-        /// Gets the nested hierarchy.
-        /// 
-        /// The item id.
-        /// Identifier of the interface to be returned in ppHierarchyNested.
-        /// Pointer to the interface whose identifier was passed in iidHierarchyNested.
-        /// Pointer to an item identifier of the root node of the nested hierarchy.
-        /// If the method succeeds, it returns S_OK. If it fails, it returns an error code. If ITEMID is not a nested hierarchy, this method returns E_FAIL.
-        [CLSCompliant(false)]
-        public override int GetNestedHierarchy(UInt32 itemId, ref Guid iidHierarchyNested, out IntPtr ppHierarchyNested, out uint pItemId)
-        {
-            pItemId = VSConstants.VSITEMID_ROOT;
-            ppHierarchyNested = IntPtr.Zero;
-            if (this.FirstChild != null)
-            {
-                for (HierarchyNode n = this.FirstChild; n != null; n = n.NextSibling)
-                {
-                    if (n is NestedProjectNode && n.ID == itemId)
-                    {
-                        NestedProjectNode p = n as NestedProjectNode;
-
-                        if (p.NestedHierarchy != null)
-                        {
-                            IntPtr iunknownPtr = IntPtr.Zero;
-                            int returnValue = VSConstants.S_OK;
-                            try
-                            {
-                                iunknownPtr = Marshal.GetIUnknownForObject(p.NestedHierarchy);
-                                Marshal.QueryInterface(iunknownPtr, ref iidHierarchyNested, out ppHierarchyNested);
-                            }
-                            catch (COMException e)
-                            {
-                                returnValue = e.ErrorCode;
-                            }
-                            finally
-                            {
-                                if (iunknownPtr != IntPtr.Zero)
-                                {
-                                    Marshal.Release(iunknownPtr);
-                                }
-                            }
-
-                            return returnValue;
-                        }
-                        break;
-                    }
-                }
-            }
-
-            return VSConstants.E_FAIL;
-        }
-
-        public override int IsItemDirty(uint itemId, IntPtr punkDocData, out int pfDirty)
-        {
-            HierarchyNode hierNode = this.NodeFromItemId(itemId);
-            Debug.Assert(hierNode != null, "Hierarchy node not found");
-            if (hierNode != this)
-            {
-                return ErrorHandler.ThrowOnFailure(hierNode.IsItemDirty(itemId, punkDocData, out pfDirty));
-            }
-            else
-            {
-                return ErrorHandler.ThrowOnFailure(base.IsItemDirty(itemId, punkDocData, out pfDirty));
-            }
-        }
-
-        public override int SaveItem(VSSAVEFLAGS dwSave, string silentSaveAsName, uint itemid, IntPtr punkDocData, out int pfCancelled)
-        {
-            HierarchyNode hierNode = this.NodeFromItemId(itemid);
-            Debug.Assert(hierNode != null, "Hierarchy node not found");
-            if (hierNode != this)
-            {
-                return ErrorHandler.ThrowOnFailure(hierNode.SaveItem(dwSave, silentSaveAsName, itemid, punkDocData, out pfCancelled));
-            }
-            else
-            {
-                return ErrorHandler.ThrowOnFailure(base.SaveItem(dwSave, silentSaveAsName, itemid, punkDocData, out pfCancelled));
-            }
-        }
-
-        public /*protected, but public for FSharp.Project.dll*/ override bool FilterItemTypeToBeAddedToHierarchy(string itemType)
-        {
-            if (String.Compare(itemType, ProjectFileConstants.SubProject, StringComparison.OrdinalIgnoreCase) == 0)
-            {
-                return true;
-            }
-            return base.FilterItemTypeToBeAddedToHierarchy(itemType);
-        }
-
-        /// 
-        /// Called to reload a project item. 
-        /// Reloads a project and its nested project nodes.
-        /// 
-        /// Specifies itemid from VSITEMID.
-        /// Reserved.
-        /// If the method succeeds, it returns S_OK. If it fails, it returns an error code. 
-        public override int ReloadItem(uint itemId, uint reserved)
-        {
-            #region precondition
-            if (this.IsClosed)
-            {
-                return VSConstants.E_FAIL;
-            }
-            #endregion
-
-            NestedProjectNode node = this.NodeFromItemId(itemId) as NestedProjectNode;
-
-            if (node != null)
-            {
-                object propertyAsObject = node.GetProperty((int)__VSHPROPID.VSHPROPID_HandlesOwnReload);
-
-                if (propertyAsObject != null && (bool)propertyAsObject)
-                {
-                    node.ReloadItem(reserved);
-                }
-                else
-                {
-                    this.ReloadNestedProjectNode(node);
-                }
-
-                return VSConstants.S_OK;
-            }
-
-            return base.ReloadItem(itemId, reserved);
-        }
-
-        /// 
-        /// Reloads a project and its nested project nodes.
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ override void Reload()
-        {
-            base.Reload();
-            this.CreateNestedProjectNodes();
-        }
-        #endregion
-
-        #region IVsParentProject
-        public virtual int OpenChildren()
-        {
-            IVsSolution solution = this.GetService(typeof(IVsSolution)) as IVsSolution;
-
-            Debug.Assert(solution != null, "Could not retrieve the solution from the services provided by this project");
-            if (solution == null)
-            {
-                return VSConstants.E_FAIL;
-            }
-
-            IntPtr iUnKnownForSolution = IntPtr.Zero;
-            int returnValue = VSConstants.S_OK; // be optimistic.
-
-            try
-            {
-                this.DisableQueryEdit = true;
-                this.EventTriggeringFlag = ProjectNode.EventTriggering.DoNotTriggerHierarchyEvents | ProjectNode.EventTriggering.DoNotTriggerTrackerEvents;
-                iUnKnownForSolution = Marshal.GetIUnknownForObject(solution);
-
-                // notify SolutionEvents listeners that we are about to add children
-                IVsFireSolutionEvents fireSolutionEvents = Marshal.GetTypedObjectForIUnknown(iUnKnownForSolution, typeof(IVsFireSolutionEvents)) as IVsFireSolutionEvents;
-                ErrorHandler.ThrowOnFailure(fireSolutionEvents.FireOnBeforeOpeningChildren(this));
-
-                this.AddVirtualProjects();
-
-                ErrorHandler.ThrowOnFailure(fireSolutionEvents.FireOnAfterOpeningChildren(this));
-            }
-            catch (Exception e)
-            {
-                // Exceptions are digested by the caller but we want then to be shown if not a ComException and if not in automation.
-                if (!(e is COMException) && !Utilities.IsInAutomationFunction(this.Site))
-                {
-                    string title = null;
-                    OLEMSGICON icon = OLEMSGICON.OLEMSGICON_CRITICAL;
-                    OLEMSGBUTTON buttons = OLEMSGBUTTON.OLEMSGBUTTON_OK;
-                    OLEMSGDEFBUTTON defaultButton = OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST;
-                    VsShellUtilities.ShowMessageBox(this.Site, title, e.Message, icon, buttons, defaultButton);
-                }
-
-                Trace.WriteLine("Exception : " + e.Message);
-                throw e;
-            }
-            finally
-            {
-                this.DisableQueryEdit = false;
-
-                if (iUnKnownForSolution != IntPtr.Zero)
-                {
-                    Marshal.Release(iUnKnownForSolution);
-                }
-
-                this.EventTriggeringFlag = ProjectNode.EventTriggering.TriggerAll;
-            }
-
-            return returnValue;
-        }
-
-        public virtual int CloseChildren()
-        {
-            int returnValue = VSConstants.S_OK; // be optimistic.
-
-            IVsSolution solution = this.GetService(typeof(IVsSolution)) as IVsSolution;
-            Debug.Assert(solution != null, "Could not retrieve the solution from the services provided by this project");
-
-            if (solution == null)
-            {
-                return VSConstants.E_FAIL;
-            }
-
-            IntPtr iUnKnownForSolution = IntPtr.Zero;
-
-            try
-            {
-                iUnKnownForSolution = Marshal.GetIUnknownForObject(solution);
-
-                // notify SolutionEvents listeners that we are about to close children
-                IVsFireSolutionEvents fireSolutionEvents = Marshal.GetTypedObjectForIUnknown(iUnKnownForSolution, typeof(IVsFireSolutionEvents)) as IVsFireSolutionEvents;
-                ErrorHandler.ThrowOnFailure(fireSolutionEvents.FireOnBeforeClosingChildren(this));
-
-                // If the removal crashes we never fire the close children event. IS that a problem?
-                this.RemoveNestedProjectNodes();
-
-                ErrorHandler.ThrowOnFailure(fireSolutionEvents.FireOnAfterClosingChildren(this));
-            }
-            finally
-            {
-                if (iUnKnownForSolution != IntPtr.Zero)
-                {
-                    Marshal.Release(iUnKnownForSolution);
-                }
-            }
-
-            return returnValue;
-        }
-        #endregion
-
-        #region IBuildDependencyOnProjectContainerNode
-        /// 
-        /// Defines whether nested projects should be build with the parent project
-        /// 
-        public virtual bool BuildNestedProjectsOnBuild
-        {
-            get { return this.buildNestedProjectsOnBuild; }
-            set { this.buildNestedProjectsOnBuild = value; }
-        }
-
-        /// 
-        /// Enumerates the nested hierachies that should be added to the build dependency list.
-        /// 
-        /// 
-        public virtual IVsHierarchy[] EnumNestedHierachiesForBuildDependency()
-        {
-            List nestedProjectList = new List();
-            // Add all nested project among projectContainer child nodes
-            for (HierarchyNode child = this.FirstChild; child != null; child = child.NextSibling)
-            {
-                NestedProjectNode nestedProjectNode = child as NestedProjectNode;
-                if (nestedProjectNode != null)
-                {
-                    nestedProjectList.Add(nestedProjectNode.NestedHierarchy);
-                }
-            }
-
-            return nestedProjectList.ToArray();
-        }
-        #endregion
-
-        #region helper methods
-
-        /*internal, but public for FSharp.Project.dll*/ protected void RemoveNestedProjectNodes()
-        {
-            for (HierarchyNode n = this.FirstChild; n != null; n = n.NextSibling)
-            {
-                NestedProjectNode p = n as NestedProjectNode;
-                if (p != null)
-                {
-                    p.CloseNestedProjectNode();
-                }
-            }
-
-            // We do not care of file changes after this.
-            this.NestedProjectNodeReloader.FileChangedOnDisk -= this.OnNestedProjectFileChangedOnDisk;
-            this.NestedProjectNodeReloader.Dispose();
-        }
-
-        /// 
-        /// This is used when loading the project to loop through all the items
-        /// and for each SubProject it finds, it create the project and a node
-        /// in our Hierarchy to hold the project.
-        /// 
-        /*internal, but public for FSharp.Project.dll*/ protected void CreateNestedProjectNodes()
-        {
-            // 1. Create a ProjectElement with the found item and then Instantiate a new Nested project with this ProjectElement.
-            // 2. Link into the hierarchy.            
-            // Read subprojects from from msbuildmodel
-            __VSCREATEPROJFLAGS creationFlags = __VSCREATEPROJFLAGS.CPF_NOTINSLNEXPLR | __VSCREATEPROJFLAGS.CPF_SILENT;
-
-            if (this.IsNewProject)
-            {
-                creationFlags |= __VSCREATEPROJFLAGS.CPF_CLONEFILE;
-            }
-            else
-            {
-                creationFlags |= __VSCREATEPROJFLAGS.CPF_OPENFILE;
-            }
-
-            foreach (Microsoft.Build.Evaluation.ProjectItem item in MSBuildProject.GetItems(this.BuildProject))
-            {
-                if (String.Compare(MSBuildItem.GetItemType(item), ProjectFileConstants.SubProject, StringComparison.OrdinalIgnoreCase) == 0)
-                {
-                    this.nestedProjectElement = new ProjectElement(this, item, false);
-
-                    if (!this.IsNewProject)
-                    {
-                        AddExistingNestedProject(null, creationFlags);
-                    }
-                    else
-                    {
-                        // If we are creating the subproject from a vstemplate/vsz file
-                        bool isVsTemplate = Utilities.IsTemplateFile(GetProjectTemplatePath(null));
-                        if (isVsTemplate)
-                        {
-                            RunVsTemplateWizard(null, true);
-                        }
-                        else
-                        {
-                            // We are cloning the specified project file
-                            AddNestedProjectFromTemplate(null, creationFlags);
-                        }
-                    }
-                }
-            }
-
-            this.nestedProjectElement = null;
-        }
-        /// 
-        /// Add an existing project as a nested node of our hierarchy.
-        /// This is used while loading the project and can also be used
-        /// to add an existing project to our hierarchy.
-        /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual NestedProjectNode AddExistingNestedProject(ProjectElement element, __VSCREATEPROJFLAGS creationFlags)
-        {
-            ProjectElement elementToUse = (element == null) ? this.nestedProjectElement : element;
-
-            if (elementToUse == null)
-            {
-                throw new ArgumentNullException("element");
-            }
-
-            string filename = elementToUse.GetFullPathForElement();
-            // Delegate to AddNestedProjectFromTemplate. Because we pass flags that specify open project rather then clone, this will works.
-            Debug.Assert((creationFlags & __VSCREATEPROJFLAGS.CPF_OPENFILE) == __VSCREATEPROJFLAGS.CPF_OPENFILE, "__VSCREATEPROJFLAGS.CPF_OPENFILE should have been specified, did you mean to call AddNestedProjectFromTemplate?");
-            return AddNestedProjectFromTemplate(filename, Path.GetDirectoryName(filename), Path.GetFileName(filename), elementToUse, creationFlags);
-        }
-
-        /// 
-        /// Let the wizard code execute and provide us the information we need.
-        /// Our SolutionFolder automation object should be called back with the
-        /// details at which point it will call back one of our method to add
-        /// a nested project.
-        /// If you are trying to add a new subproject this is probably the
-        /// method you want to call. If you are just trying to clone a template
-        /// project file, then AddNestedProjectFromTemplate is what you want.
-        /// 
-        /// The project item to use as the base of the nested project.
-        /// true if the wizard should run silently, otherwise false.
-        [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Vs")]
-        public /*protected internal, but public for FSharp.Project.dll*/ void RunVsTemplateWizard(ProjectElement element, bool silent)
-        {
-            ProjectElement elementToUse = (element == null) ? this.nestedProjectElement : element;
-
-            if (elementToUse == null)
-            {
-                throw new ArgumentNullException("element");
-            }
-            this.nestedProjectElement = elementToUse;
-
-            Automation.OAProject oaProject = GetAutomationObject() as Automation.OAProject;
-            if (oaProject == null || oaProject.ProjectItems == null)
-                throw new System.InvalidOperationException(SR.GetString(SR.InvalidAutomationObject, CultureInfo.CurrentUICulture));
-            Debug.Assert(oaProject.Object != null, "The project automation object should have set the Object to the SolutionFolder");
-            Automation.OASolutionFolder folder = oaProject.Object as Automation.OASolutionFolder;
-
-            // Prepare the parameters to pass to RunWizardFile
-            string destination = elementToUse.GetFullPathForElement();
-            string template = this.GetProjectTemplatePath(elementToUse);
-
-            object[] wizParams = new object[7];
-            wizParams[0] = EnvDTE.Constants.vsWizardAddSubProject;
-            wizParams[1] = Path.GetFileNameWithoutExtension(destination);
-            wizParams[2] = oaProject.ProjectItems;
-            wizParams[3] = Path.GetDirectoryName(destination);
-            wizParams[4] = Path.GetFileNameWithoutExtension(destination);
-            wizParams[5] = Path.GetDirectoryName(folder.DTE.FullName); //VS install dir
-            wizParams[6] = silent;
-
-            IVsDetermineWizardTrust wizardTrust = this.GetService(typeof(SVsDetermineWizardTrust)) as IVsDetermineWizardTrust;
-            if (wizardTrust != null)
-            {
-                Guid guidProjectAdding = Guid.Empty;
-
-                // In case of a project template an empty guid should be added as the guid parameter. See env\msenv\core\newtree.h IsTrustedTemplate method definition.
-                wizardTrust.OnWizardInitiated(template, ref guidProjectAdding);
-            }
-
-            try
-            {
-                // Make the call to execute the wizard. This should cause AddNestedProjectFromTemplate to be
-                // called back with the correct set of parameters.
-                EnvDTE.IVsExtensibility extensibilityService = (EnvDTE.IVsExtensibility)GetService(typeof(EnvDTE.IVsExtensibility));
-                EnvDTE.wizardResult result = extensibilityService.RunWizardFile(template, 0, ref wizParams);
-                if (result == EnvDTE.wizardResult.wizardResultFailure)
-                    throw new COMException();
-            }
-            finally
-            {
-                if (wizardTrust != null)
-                {
-                    wizardTrust.OnWizardCompleted();
-                }
-            }
-        }
-
-        /// 
-        /// This will clone a template project file and add it as a
-        /// subproject to our hierarchy.
-        /// If you want to create a project for which there exist a
-        /// vstemplate, consider using RunVsTemplateWizard instead.
-        /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual NestedProjectNode AddNestedProjectFromTemplate(ProjectElement element, __VSCREATEPROJFLAGS creationFlags)
-        {
-            ProjectElement elementToUse = (element == null) ? this.nestedProjectElement : element;
-
-            if (elementToUse == null)
-            {
-                throw new ArgumentNullException("element");
-            }
-            string destination = elementToUse.GetFullPathForElement();
-            string template = this.GetProjectTemplatePath(elementToUse);
-
-            return this.AddNestedProjectFromTemplate(template, Path.GetDirectoryName(destination), Path.GetFileName(destination), elementToUse, creationFlags);
-        }
-
-        /// 
-        /// This can be called directly or through RunVsTemplateWizard.
-        /// This will clone a template project file and add it as a
-        /// subproject to our hierarchy.
-        /// If you want to create a project for which there exist a
-        /// vstemplate, consider using RunVsTemplateWizard instead.
-        /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual NestedProjectNode AddNestedProjectFromTemplate(string fileName, string destination, string projectName, ProjectElement element, __VSCREATEPROJFLAGS creationFlags)
-        {
-            // If this is project creation and the template specified a subproject in its project file, this.nestedProjectElement will be used 
-            ProjectElement elementToUse = (element == null) ? this.nestedProjectElement : element;
-
-            if (elementToUse == null)
-            {
-                // If this is null, this means MSBuild does not know anything about our subproject so add an MSBuild item for it
-                elementToUse = new ProjectElement(this, fileName, ProjectFileConstants.SubProject);
-            }
-
-            NestedProjectNode node = CreateNestedProjectNode(elementToUse);
-            node.Init(fileName, destination, projectName, creationFlags);
-
-            // In case that with did not have an existing element, or the nestedProjectelement was null 
-            //  and since Init computes the final path, set the MSBuild item to that path
-            if (this.nestedProjectElement == null)
-            {
-                string relativePath = node.Url;
-                if (Path.IsPathRooted(relativePath))
-                {
-                    relativePath = this.ProjectFolder;
-                    if (!relativePath.EndsWith("/\\", StringComparison.Ordinal))
-                    {
-                        relativePath += Path.DirectorySeparatorChar;
-                    }
-
-                    relativePath = new Url(relativePath).MakeRelative(new Url(node.Url));
-                }
-
-                elementToUse.Rename(relativePath);
-            }
-
-            this.AddChild(node);
-            return node;
-        }
-
-        /// 
-        /// Override this method if you want to provide your own type of nodes.
-        /// This would be the case if you derive a class from NestedProjectNode
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual NestedProjectNode CreateNestedProjectNode(ProjectElement element)
-        {
-            return new NestedProjectNode(this, element);
-        }
-
-        /// 
-        /// Links the nested project nodes to the solution. The default implementation parses all nested project nodes and calles AddVirtualProjectEx on them.
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual void AddVirtualProjects()
-        {
-            for (HierarchyNode child = this.FirstChild; child != null; child = child.NextSibling)
-            {
-                NestedProjectNode nestedProjectNode = child as NestedProjectNode;
-                if (nestedProjectNode != null)
-                {
-                    nestedProjectNode.AddVirtualProject();
-                }
-            }
-        }
-
-        /// 
-        /// Based on the Template and TypeGuid properties of the
-        /// element, generate the full template path.
-        /// 
-        /// TypeGuid should be the Guid of a registered project factory.
-        /// Template can be a full path, a project template (for projects
-        /// that support VsTemplates) or a relative path (for other projects).
-        /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual string GetProjectTemplatePath(ProjectElement element)
-        {
-            ProjectElement elementToUse = (element == null) ? this.nestedProjectElement : element;
-
-            if (elementToUse == null)
-            {
-                throw new ArgumentNullException("element");
-            }
-
-            string templateFile = elementToUse.GetMetadata(ProjectFileConstants.Template);
-            Debug.Assert(!String.IsNullOrEmpty(templateFile), "No template file has been specified in the template attribute in the project file");
-
-            string fullPath = templateFile;
-            if (!Path.IsPathRooted(templateFile))
-            {
-                RegisteredProjectType registeredProjectType = this.GetRegisteredProject(elementToUse);
-
-                // This is not a full path
-                Debug.Assert(registeredProjectType != null && (!String.IsNullOrEmpty(registeredProjectType.DefaultProjectExtensionValue) || !String.IsNullOrEmpty(registeredProjectType.WizardTemplatesDirValue)), " Registered wizard directory value not set in the registry.");
-
-                // See if this specify a VsTemplate file
-                fullPath = registeredProjectType.GetVsTemplateFile(templateFile);
-                if (String.IsNullOrEmpty(fullPath))
-                {
-                    // Default to using the WizardTemplateDir to calculate the absolute path
-                    fullPath = Path.Combine(registeredProjectType.WizardTemplatesDirValue, templateFile);
-                }
-            }
-
-            return fullPath;
-        }
-
-        /// 
-        /// Get information from the registry based for the project 
-        /// factory corresponding to the TypeGuid of the element
-        /// 
-        private RegisteredProjectType GetRegisteredProject(ProjectElement element)
-        {
-            ProjectElement elementToUse = (element == null) ? this.nestedProjectElement : element;
-
-            if (elementToUse == null)
-            {
-                throw new ArgumentNullException("element");
-            }
-
-            // Get the project type guid from project elementToUse                
-            string typeGuidString = elementToUse.GetMetadataAndThrow(ProjectFileConstants.TypeGuid, new ApplicationException());
-            Guid projectFactoryGuid = new Guid(typeGuidString);
-
-            EnvDTE.DTE dte = this.ProjectMgr.Site.GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;
-            Debug.Assert(dte != null, "Could not get the automation object from the services exposed by this project");
-
-            if (dte == null)
-                throw new InvalidOperationException();
-
-            RegisteredProjectType registeredProjectType = RegisteredProjectType.CreateRegisteredProjectType(projectFactoryGuid);
-            Debug.Assert(registeredProjectType != null, "Could not read the registry setting associated to this project.");
-            if (registeredProjectType == null)
-            {
-                throw new InvalidOperationException();
-            }
-            return registeredProjectType;
-        }
-
-        /// 
-        /// Reloads a nested project node by deleting it and readding it.
-        /// 
-        /// The node to reload.
-        public /*protected, but public for FSharp.Project.dll*/ virtual void ReloadNestedProjectNode(NestedProjectNode node)
-        {
-            if (node == null)
-            {
-                throw new ArgumentNullException("node");
-            }
-
-            IVsSolution solution = this.GetService(typeof(IVsSolution)) as IVsSolution;
-
-            if (solution == null)
-            {
-                throw new InvalidOperationException();
-            }
-
-            NestedProjectNode newNode = null;
-            try
-            {
-                // (VS 2005 UPDATE) When deleting and re-adding the nested project,
-                // we do not want SCC to see this as a delete and add operation. 
-                this.EventTriggeringFlag = ProjectNode.EventTriggering.DoNotTriggerTrackerEvents;
-
-                // notify SolutionEvents listeners that we are about to add children
-                IVsFireSolutionEvents fireSolutionEvents = solution as IVsFireSolutionEvents;
-
-                if (fireSolutionEvents == null)
-                {
-                    throw new InvalidOperationException();
-                }
-
-                ErrorHandler.ThrowOnFailure(fireSolutionEvents.FireOnBeforeUnloadProject(node.NestedHierarchy));
-
-                int isDirtyAsInt = 0;
-                this.IsDirty(out isDirtyAsInt);
-
-                bool isDirty = (isDirtyAsInt == 0) ? false : true;
-
-                ProjectElement element = node.ItemNode;
-                node.CloseNestedProjectNode();
-
-                // Remove from the solution
-                this.RemoveChild(node);
-
-                // Now readd it                
-                try
-                {
-                    __VSCREATEPROJFLAGS flags = __VSCREATEPROJFLAGS.CPF_NOTINSLNEXPLR | __VSCREATEPROJFLAGS.CPF_SILENT | __VSCREATEPROJFLAGS.CPF_OPENFILE;
-                    newNode = this.AddExistingNestedProject(element, flags);
-                    newNode.AddVirtualProject();
-                }
-                catch (Exception e)
-                {
-                    // We get a System.Exception if anything failed, thus we have no choice but catch it. 
-                    // Exceptions are digested by VS. Show the error if not in automation.
-                    if (!Utilities.IsInAutomationFunction(this.Site))
-                    {
-                        string message = (String.IsNullOrEmpty(e.Message)) ? SR.GetString(SR.NestedProjectFailedToReload, CultureInfo.CurrentUICulture) : e.Message;
-                        string title = string.Empty;
-                        OLEMSGICON icon = OLEMSGICON.OLEMSGICON_CRITICAL;
-                        OLEMSGBUTTON buttons = OLEMSGBUTTON.OLEMSGBUTTON_OK;
-                        OLEMSGDEFBUTTON defaultButton = OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST;
-                        VsShellUtilities.ShowMessageBox(this.Site, title, message, icon, buttons, defaultButton);
-                    }
-
-                    // Do not digest exception. let the caller handle it. If in a later stage this exception is not digested then the above messagebox is not needed.
-                    throw e;
-                }
-
-#if DEBUG
-                IVsHierarchy nestedHierarchy;
-                solution.GetProjectOfUniqueName(newNode.GetMkDocument(), out nestedHierarchy);
-                Debug.Assert(nestedHierarchy != null && Utilities.IsSameComObject(nestedHierarchy, newNode.NestedHierarchy), "The nested hierrachy was not reloaded correctly.");
-#endif
-                this.SetProjectFileDirty(isDirty);
-
-                fireSolutionEvents.FireOnAfterLoadProject(newNode.NestedHierarchy);
-            }
-            finally
-            {
-                // In this scenario the nested project failed to unload or reload the nested project. We will unload the whole project, otherwise the nested project is lost.
-                // This is similar to the scenario when one wants to open a project and the nested project cannot be loaded because for example the project file has xml errors.
-                // We should note that we rely here that if the unload fails then exceptions are not digested and are shown to the user.
-                if (newNode == null || newNode.NestedHierarchy == null)
-                {
-                    solution.CloseSolutionElement((uint)__VSSLNCLOSEOPTIONS.SLNCLOSEOPT_UnloadProject | (uint)__VSSLNSAVEOPTIONS.SLNSAVEOPT_ForceSave, this, 0);
-                }
-                else
-                {
-                    this.EventTriggeringFlag = ProjectNode.EventTriggering.TriggerAll;
-                }
-            }
-        }
-
-        /// 
-        /// Event callback. Called when one of the nested project files is changed.
-        /// 
-        /// The FileChangeManager object.
-        /// Event args containing the file name that was updated.
-        private void OnNestedProjectFileChangedOnDisk(object sender, FileChangedOnDiskEventArgs e)
-        {
-            #region Pre-condition validation
-            Debug.Assert(e != null, "No event args specified for the FileChangedOnDisk event");
-
-            // We care only about time change for reload.
-            if ((e.FileChangeFlag & _VSFILECHANGEFLAGS.VSFILECHG_Time) == 0)
-            {
-                return;
-            }
-
-            // test if we actually have a document for this id.
-            string moniker;
-            this.GetMkDocument(e.ItemID, out moniker);
-            Debug.Assert(NativeMethods.IsSamePath(moniker, e.FileName), " The file + " + e.FileName + " has changed but we could not retrieve the path for the item id associated to the path.");
-            #endregion
-
-            bool reload = true;
-            if (!Utilities.IsInAutomationFunction(this.Site))
-            {
-                // Prompt to reload the nested project file. We use the moniker here since the filename from the event arg is canonicalized.
-                string message = String.Format(CultureInfo.CurrentCulture, SR.GetString(SR.QueryReloadNestedProject, CultureInfo.CurrentUICulture), moniker);
-                string title = string.Empty;
-                OLEMSGICON icon = OLEMSGICON.OLEMSGICON_INFO;
-                OLEMSGBUTTON buttons = OLEMSGBUTTON.OLEMSGBUTTON_YESNO;
-                OLEMSGDEFBUTTON defaultButton = OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST;
-                reload = (VsShellUtilities.ShowMessageBox(this.Site, message, title, icon, buttons, defaultButton) == NativeMethods.IDYES);
-            }
-
-            if (reload)
-            {
-                // We have to use here the interface method call, since it might be that specialized project nodes like the project container item
-                // is owerwriting the default functionality.
-                this.ReloadItem(e.ItemID, 0);
-            }
-        }
-        #endregion
-    }
-}
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectDesignerDocumentManager.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectDesignerDocumentManager.cs
index 4cbc638aaf5..b66c67ed7a4 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectDesignerDocumentManager.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectDesignerDocumentManager.cs
@@ -24,14 +24,10 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
 {
     internal class ProjectDesignerDocumentManager : DocumentManager
     {
-        #region ctors
         public ProjectDesignerDocumentManager(ProjectNode node)
             : base(node)
         {
         }
-        #endregion
-
-        #region overriden methods
 
         public override int Open(ref Guid logicalView, IntPtr docDataExisting, out IVsWindowFrame windowFrame, WindowFrameShowAction windowFrameAction)
         {
@@ -75,7 +71,6 @@ public override int OpenWithSpecific(uint editorFlags, ref Guid editorType, stri
 
             return VSConstants.S_OK;
         }
-        #endregion
 
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectElement.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectElement.cs
index c8e65e8ee9f..2cd57530cfb 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectElement.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectElement.cs
@@ -42,22 +42,19 @@ public static string GetEvaluatedInclude(Microsoft.Build.Execution.ProjectItemIn
     /// 
     /// This class represent a project item (usualy a file) and allow getting and
     /// setting attribute on it.
-    /// This class allow us to keep the /*internal, but public for FSharp.Project.dll*/ public details of our items hidden from
+    /// This class allow us to keep the public details of our items hidden from
     /// our derived classes.
     /// While the class itself is public so it can be manipulated by derived classes,
-    /// its /*internal, but public for FSharp.Project.dll*/ public constructors make sure it can only be created from within the assembly.
+    /// its public constructors make sure it can only be created from within the assembly.
     /// 
     internal sealed class ProjectElement
     {
-        #region fields
         private Microsoft.Build.Evaluation.ProjectItem item;
         private ProjectNode itemProject;
         private bool deleted = false;
         private bool isVirtual = false;
         private Dictionary virtualProperties;
-        #endregion
 
-        #region properties
         public string ItemName
         {
             get
@@ -87,7 +84,7 @@ public string ItemName
             }
         }
 
-        /*internal, but public for FSharp.Project.dll*/ public Microsoft.Build.Evaluation.ProjectItem Item
+        public Microsoft.Build.Evaluation.ProjectItem Item
         {
             get
             {
@@ -95,22 +92,20 @@ public string ItemName
             }
         }
 
-        /*internal, but public for FSharp.Project.dll*/ public bool IsVirtual
+        public bool IsVirtual
         {
             get
             {
                 return this.isVirtual;
             }
         }
-        #endregion
 
-        #region ctors
         /// 
         /// Constructor to create a new MSBuild.BuildItem and add it to the project
-        /// Only have /*internal, but public for FSharp.Project.dll*/ public constructors as the only one who should be creating
+        /// Only have public constructors as the only one who should be creating
         /// such object is the project itself (see Project.CreateFileNode()).
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public ProjectElement(ProjectNode project, string itemPath, string itemType)
+        public ProjectElement(ProjectNode project, string itemPath, string itemType)
         {
             if (project == null)
             {
@@ -174,13 +169,13 @@ private void CheckAndTryToFixWildcards(string itemType, string itemPath)
 
         /// 
         /// Constructor to Wrap an existing MSBuild.BuildItem
-        /// Only have /*internal, but public for FSharp.Project.dll*/ public constructors as the only one who should be creating
+        /// Only have public constructors as the only one who should be creating
         /// such object is the project itself (see Project.CreateFileNode()).
         /// 
         /// Project that owns this item
         /// an MSBuild.BuildItem; can be null if virtualFolder is true
         /// Is this item virtual (such as reference folder)
-        /*internal, but public for FSharp.Project.dll*/ public ProjectElement(ProjectNode project, Microsoft.Build.Evaluation.ProjectItem existingItem, bool virtualFolder)
+        public ProjectElement(ProjectNode project, Microsoft.Build.Evaluation.ProjectItem existingItem, bool virtualFolder)
         {
             if (project == null)
                 throw new ArgumentNullException("project");
@@ -195,9 +190,7 @@ private void CheckAndTryToFixWildcards(string itemType, string itemPath)
             if (this.isVirtual)
                 this.virtualProperties = new Dictionary();
         }
-        #endregion
 
-        #region public methods
         /// 
         /// Calling this method remove this item from the project file.
         /// Once the item is delete, you should not longer be using it.
@@ -392,9 +385,6 @@ public string GetFullPathForElement()
             return path;
         }
 
-        #endregion
-
-#region helper methods
         /// 
         /// Has the item been deleted
         /// 
@@ -402,9 +392,7 @@ private bool HasItemBeenDeleted()
         {
             return (this.deleted || this.item == null);
         }
-        #endregion
 
-#region overridden from System.Object
         public static bool operator ==(ProjectElement element1, ProjectElement element2)
         {
             // Do they reference the same element?
@@ -465,9 +453,6 @@ public override int GetHashCode()
             // TODO, this is not in sync with Equals, so don't put these objects in a dictionary
             return base.GetHashCode();
         }
-        #endregion
-
-
 
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectFactory.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectFactory.cs
index eeab5c48616..de2b2e86b18 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectFactory.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectFactory.cs
@@ -24,16 +24,13 @@ internal abstract class ProjectFactory : Microsoft.VisualStudio.Shell.Flavor.Fla
                     , IVsProjectUpgradeViaFactory, IVsProjectUpgradeViaFactory4
 
 	{
-		#region fields
 		private Microsoft.VisualStudio.Shell.Package package;
 		private System.IServiceProvider site;
 
         private Microsoft.Build.Evaluation.ProjectCollection buildEngine;
         private Microsoft.Build.Evaluation.Project buildProject;
-        #endregion
 
-        #region properties
-        public /*protected, but public for FSharp.Project.dll*/ Microsoft.VisualStudio.Shell.Package Package
+        public Microsoft.VisualStudio.Shell.Package Package
         {
             get
             {
@@ -41,7 +38,7 @@ internal abstract class ProjectFactory : Microsoft.VisualStudio.Shell.Flavor.Fla
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ System.IServiceProvider Site
+        public System.IServiceProvider Site
         {
             get
             {
@@ -52,7 +49,7 @@ internal abstract class ProjectFactory : Microsoft.VisualStudio.Shell.Flavor.Fla
         /// 
         /// The msbuild engine that we are going to use.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ Microsoft.Build.Evaluation.ProjectCollection BuildEngine
+        public Microsoft.Build.Evaluation.ProjectCollection BuildEngine
         {
             get
             {
@@ -63,7 +60,7 @@ internal abstract class ProjectFactory : Microsoft.VisualStudio.Shell.Flavor.Fla
         /// 
         /// The msbuild project for the temporary project file.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ Microsoft.Build.Evaluation.Project BuildProject
+        public Microsoft.Build.Evaluation.Project BuildProject
         {
             get
             {
@@ -74,22 +71,16 @@ internal abstract class ProjectFactory : Microsoft.VisualStudio.Shell.Flavor.Fla
                 this.buildProject = value;
             }
         }
-        #endregion
 
-        #region ctor
-        public /*protected, but public for FSharp.Project.dll*/ ProjectFactory(Microsoft.VisualStudio.Shell.Package package)
+        public ProjectFactory(Microsoft.VisualStudio.Shell.Package package)
         {
             this.package = package;
             this.site = package;
             this.buildEngine = Utilities.InitializeMsBuildEngine(this.buildEngine);
         }
-        #endregion
 
-        #region abstract methods
         protected abstract ProjectNode CreateProject();
-        #endregion
 
-        #region overriden methods
         /// 
         /// Rather than directly creating the project, ask VS to initate the process of
         /// creating an aggregated project in case we are flavored. We will be called
@@ -179,9 +170,7 @@ protected override string ProjectTypeGuids(string file)
 
             return guids;
         }
-        #endregion
 
-        #region helpers
 #if FX_ATLEAST_45
 
         private class ProjectInspector
@@ -290,9 +279,7 @@ private IProjectEvents GetProjectEventsProvider()
 
             return null;
         }
-	#endregion
 
-        #region IVsProjectUpgradeViaFactory
         private string m_lastUpgradedProjectFile;
         private const string SCC_PROJECT_NAME = "SccProjectName";
         private string m_sccProjectName;
@@ -823,8 +810,5 @@ private string GetUniqueFileName(string initialPath, out bool initiallyUnique)
                 i++;
             }
         }
-
-        #endregion
-
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectFileConstants.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectFileConstants.cs
index 0774f55d11d..2a51d1699a1 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectFileConstants.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectFileConstants.cs
@@ -1,15 +1,10 @@
 // Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
 
-#region Using directives
-
 using System;
 using System.Collections.Generic;
 using System.Text;
 using System.Diagnostics.CodeAnalysis;
 
-#endregion
-
-
 namespace Microsoft.VisualStudio.FSharp.ProjectSystem
 {
     /// 
@@ -169,9 +164,9 @@ internal static class ProjectSystemConstants
         public const string CanUseTargetFSharpCoreVersion = "CanUseTargetFSharpCoreVersion";
     }
 
-    /*internal, but public for FSharp.Project.dll*/ public static class ProjectFileValues
+    public static class ProjectFileValues
     {
-        /*internal, but public for FSharp.Project.dll*/ public const string AnyCPU = "AnyCPU";
+        public const string AnyCPU = "AnyCPU";
     }
 
     internal enum WrapperToolAttributeValue
@@ -186,9 +181,6 @@ internal enum WrapperToolAttributeValue
     internal static class DefaultSortOrderNode
     {
         public const int HierarchyNode = 1000;
-#if UNUSED_NESTED_PROJECTS
-        public const int NestedProjectNode = 200;
-#endif
         public const int ReferenceContainerNode = 300;
     }
 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectNode.CopyPaste.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectNode.CopyPaste.cs
index 2a02b48acf8..def6b31d64b 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectNode.CopyPaste.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectNode.CopyPaste.cs
@@ -24,12 +24,9 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     /// This is a partial class.
     public partial class ProjectNode : IVsUIHierWinClipboardHelperEvents
     {
-        #region fields
         private uint copyPasteCookie;
         private DropDataType dropDataType;
-        #endregion
 
-        #region override of IVsHierarchyDropDataTarget methods
         /// 
         /// Called as soon as the mouse drags an item over a new hierarchy or hierarchy window
         /// 
@@ -166,9 +163,7 @@ public override int Drop(IOleDataObject pDataObject, uint grfKeyState, uint item
 
             return returnValue;
         }
-        #endregion
 
-        #region override of IVsHierarchyDropDataSource2 methods
         /// 
         /// Returns information about one or more of the items being dragged
         /// 
@@ -304,9 +299,6 @@ public override int OnBeforeDropNotify(IOleDataObject o, uint dwEffect, out int
             return VSConstants.S_OK;
         }
 
-        #endregion
-
-        #region IVsUIHierWinClipboardHelperEvents Members
         /// 
         /// Called after your cut/copied items has been pasted
         /// 
@@ -349,15 +341,13 @@ public virtual int OnClear(int wasCut)
             this.SourceDraggedOrCutOrCopied = false;
             return VSConstants.S_OK;
         }
-        #endregion
 
-        #region virtual methods
         /// 
         /// Determines if a node can accept drop opertaion.
         /// 
         /// The id of the node.
         /// true if the node acceots drag operation.
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual bool CanTargetNodeAcceptDrop(uint itemId)
+        public virtual bool CanTargetNodeAcceptDrop(uint itemId)
         {
             HierarchyNode targetNode = NodeFromItemId(itemId);
             if (targetNode is ReferenceContainerNode || targetNode is ReferenceNode)
@@ -527,7 +517,7 @@ private void AddFolderFromOtherProject(string folderToAdd, HierarchyNode targetN
         /// Item ID where to start walking the hierarchy
         /// Node to start adding to
         /// Typically false on first call and true after that
-        public /*protected, but public for FSharp.Project.dll*/ virtual void WalkSourceProjectAndAdd(IVsHierarchy sourceHierarchy, uint itemId, HierarchyNode targetNode, bool addSiblings)
+        public virtual void WalkSourceProjectAndAdd(IVsHierarchy sourceHierarchy, uint itemId, HierarchyNode targetNode, bool addSiblings)
         {
             // Before we start the walk, add the current node
             object variant = null;
@@ -580,7 +570,7 @@ private void AddFolderFromOtherProject(string folderToAdd, HierarchyNode targetN
         /// Name of the item being added
         /// Path of the item being added
         /// Node that was added
-        public /*protected, but public for FSharp.Project.dll*/ virtual HierarchyNode AddNodeIfTargetExistInStorage(HierarchyNode parentNode, string name, string targetPath)
+        public virtual HierarchyNode AddNodeIfTargetExistInStorage(HierarchyNode parentNode, string name, string targetPath)
         {
             HierarchyNode newNode = parentNode;
             // If the file/directory exist, add a node for it
@@ -600,13 +590,11 @@ private void AddFolderFromOtherProject(string folderToAdd, HierarchyNode targetN
             }
             return newNode;
         }    
-        #endregion
 
-        #region non-virtual methods
         /// 
         /// Handle the Cut operation to the clipboard
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override int CutToClipboard()
+        public override int CutToClipboard()
         {
             int returnValue = (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
             try
@@ -644,7 +632,7 @@ private void AddFolderFromOtherProject(string folderToAdd, HierarchyNode targetN
         /// 
         /// Handle the Copy operation to the clipboard
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override int CopyToClipboard()
+        public override int CopyToClipboard()
         {
             int returnValue = (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
             try
@@ -686,7 +674,7 @@ private void AddFolderFromOtherProject(string folderToAdd, HierarchyNode targetN
         /// 
         /// Handle the Paste operation to a targetNode
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override int PasteFromClipboard(HierarchyNode targetNode)
+        public override int PasteFromClipboard(HierarchyNode targetNode)
         {
             int returnValue = (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
 
@@ -745,7 +733,7 @@ private void AddFolderFromOtherProject(string folderToAdd, HierarchyNode targetN
         /// Determines if the paste command should be allowed.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override bool AllowPasteCommand()
+        public override bool AllowPasteCommand()
         {
             IOleDataObject dataObject = null;
             try
@@ -780,7 +768,7 @@ private void AddFolderFromOtherProject(string folderToAdd, HierarchyNode targetN
         /// Register/Unregister for Clipboard events for the UiHierarchyWindow (solution explorer)
         /// 
         /// true for register, false for unregister
-        public /*protected, but public for FSharp.Project.dll*/ override void RegisterClipboardNotifications(bool register)
+        public override void RegisterClipboardNotifications(bool register)
         {
             // Get the UiHierarchy window clipboard helper service
             IVsUIHierWinClipboardHelper clipboardHelper = (IVsUIHierWinClipboardHelper)GetService(typeof(SVsUIHierWinClipboardHelper));
@@ -942,7 +930,7 @@ internal DropEffect QueryDropEffect(DropDataType dropDataType, uint grfKeyState)
             }
         }
 
-        /*internal, but public for FSharp.Project.dll*/ public void CleanupSelectionDataObject(bool dropped, bool cut, bool moved)
+        public void CleanupSelectionDataObject(bool dropped, bool cut, bool moved)
         {
             this.CleanupSelectionDataObject(dropped, cut, moved, false);
         }
@@ -952,7 +940,7 @@ internal DropEffect QueryDropEffect(DropDataType dropDataType, uint grfKeyState)
         ///  to determine whether we need to clean up the source nodes or not. If
         ///  justCleanup is set, it only does the cleanup work.
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public void CleanupSelectionDataObject(bool dropped, bool cut, bool moved, bool justCleanup)
+        public void CleanupSelectionDataObject(bool dropped, bool cut, bool moved, bool justCleanup)
         {
             if (this.ItemsDraggedOrCutOrCopied == null || this.ItemsDraggedOrCutOrCopied.Count == 0)
             {
@@ -1057,7 +1045,6 @@ private bool AddFilesFromProjectReferences(HierarchyNode targetNode, string[] pr
         /// 
         /// 
         /// 
-        /*internal, but public for FSharp.Project.dll*/
         private bool AddFileToNodeFromProjectReference(string projectRef, HierarchyNode targetNode)
         {
             if (String.IsNullOrEmpty(projectRef))
@@ -1105,9 +1092,6 @@ private bool AddFileToNodeFromProjectReference(string projectRef, HierarchyNode
 
 
 
-        #endregion
-
-        #region private helper methods
         /// 
         /// Empties all the data structures added to the clipboard and flushes the clipboard.
         /// 
@@ -1185,7 +1169,5 @@ private IntPtr PackageSelectionData(StringBuilder sb, bool addEndFormatDelimiter
 
             return ptr;
         }
-
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectNode.Events.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectNode.Events.cs
index 865b791667e..62f0bf9a0e3 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectNode.Events.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectNode.Events.cs
@@ -8,19 +8,14 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
 
     public partial class ProjectNode
     {
-        #region fields
         private EventHandler projectPropertiesListeners;
-        #endregion
 
-        #region events
         internal event EventHandler OnProjectPropertyChanged
         {
             add { projectPropertiesListeners += value; }
             remove { projectPropertiesListeners -= value; }
         }
-        #endregion
 
-        #region methods
         internal void RaiseProjectPropertyChanged(string propertyName, string oldValue, string newValue)
         {
             if (null != projectPropertiesListeners)
@@ -28,7 +23,6 @@ internal void RaiseProjectPropertyChanged(string propertyName, string oldValue,
                 projectPropertiesListeners(this, new ProjectPropertyChangedArgs(propertyName, oldValue, newValue));
             }
         }
-        #endregion
     }
 
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectNode.cs
index b8ff1de42e5..d243a54e157 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectNode.cs
@@ -382,8 +382,6 @@ public abstract partial class ProjectNode : HierarchyNode,
         , IVsDesignTimeAssemblyResolution
         , IVsProjectUpgrade
     {
-        #region nested types
-
         /// 
         /// This class stores mapping from ids -> objects. Uses as a replacement of EventSinkCollection (ESC)
         /// Operations:
@@ -508,23 +506,18 @@ public enum ImageName
         /// Flags for specifying which events to stop triggering.
         /// 
         [Flags]
-        /*internal, but public for FSharp.Project.dll*/ public enum EventTriggering
+        public enum EventTriggering
         {
             TriggerAll = 0,
             DoNotTriggerHierarchyEvents = 1,
             DoNotTriggerTrackerEvents = 2
         }
 
-        #endregion
-
-        #region constants
         /// 
         /// The user file extension.
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public const string PerUserFileExtension = ".user";
-        #endregion
+        public const string PerUserFileExtension = ".user";
 
-        #region fields
         /// 
         /// List of output groups names and their associated target
         /// 
@@ -569,7 +562,6 @@ public enum ImageName
         private Microsoft.Build.Evaluation.Project buildProject;
 
         // TODO cache an instance for perf; but be sure not to be stale (correctness)
-        //private ProjectInstance projectInstance;
         private BuildActionConverter buildActionConverter = new BuildActionConverter();
 
         private ConfigProvider configProvider;
@@ -657,13 +649,6 @@ public enum ImageName
         private Microsoft.Build.Framework.ILogger myDebugLogger;
         private static readonly System.Runtime.Versioning.FrameworkName DefaultTargetFrameworkMoniker = new System.Runtime.Versioning.FrameworkName(".NETFramework", new Version(4, 0));
 
-#if UNUSED
-        /// 
-        /// Token processor used by the project sample.
-        /// 
-        private TokenProcessor tokenProcessor = null;
-#endif
-
         /// 
         /// Member to store output base relative path. Used by OutputBaseRelativePath property
         /// 
@@ -685,15 +670,12 @@ public enum ImageName
         private Dictionary catidMapping = new Dictionary();
 
 		/// 
-		/// The /*internal, but public for FSharp.Project.dll*/ public package implementation.
+		/// The public package implementation.
 		/// 
 		private ProjectPackage package;
 
-        // Has the object been disposed.
         private bool isDisposed;
-        #endregion
 
-        #region abstract properties
         /// 
         /// This Guid must match the Guid you registered under
         /// HKLM\Software\Microsoft\VisualStudio\%version%\Projects.
@@ -735,9 +717,6 @@ public bool ImplicitlyExpandTargetFramework
             }
         }
 
-        #endregion
-
-        #region virtual properties
         /// 
         /// This is the project instance guid that is peristed in the project file
         /// 
@@ -761,9 +740,6 @@ public virtual Guid ProjectIDGuid
                 }
             }
         }
-        #endregion
-
-        #region properties
 
         /// 
         /// Denotes if FSharp.Core reference is relying on TargetFSharpCore property
@@ -778,7 +754,6 @@ public IEnumerable VisibleItems
             get { return MSBuildProject.GetStaticAndVisibleItemsInOrder(this.buildProject); }
         }
 
-        #region overridden properties
         public override int MenuCommandId
         {
             get
@@ -844,10 +819,6 @@ public override int ImageIndex
         }
 
 
-        #endregion
-
-        #region virtual properties
-
         public virtual string ErrorString
         {
             get
@@ -882,7 +853,7 @@ public virtual string WarningString
         /// 
         [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "ReEvaluate")]
         [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Re")]
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual string ReEvaluateProjectFileTargetName
+        public virtual string ReEvaluateProjectFileTargetName
         {
             get
             {
@@ -893,7 +864,7 @@ public virtual string WarningString
         /// 
         /// This is the object that will be returned by EnvDTE.Project.Object for this project
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual object ProjectObject
+        public virtual object ProjectObject
         {
             get
             {
@@ -904,7 +875,7 @@ public virtual string WarningString
         /// 
         /// Override this property to specify when the project file is dirty.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual bool IsProjectFileDirty
+        public virtual bool IsProjectFileDirty
         {
             get
             {
@@ -922,7 +893,7 @@ public virtual string WarningString
         /// 
         /// True if the project uses the Project Designer Editor instead of the property page frame to edit project properties.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual bool SupportsProjectDesigner
+        public virtual bool SupportsProjectDesigner
         {
             get
             {
@@ -935,7 +906,7 @@ public virtual string WarningString
 
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ virtual Guid ProjectDesignerEditor
+        public virtual Guid ProjectDesignerEditor
         {
             get
             {
@@ -946,7 +917,7 @@ public virtual string WarningString
         /// 
         /// Defines the flag that supports the VSHPROPID.ShowProjInSolutionPage
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual bool ShowProjectInSolutionPage
+        public virtual bool ShowProjectInSolutionPage
         {
             get
             {
@@ -958,8 +929,6 @@ public virtual string WarningString
             }
         }
 
-        #endregion
-
         public bool IsInBatchUpdate
         {
             get { return isInBatchUpdate; }
@@ -969,7 +938,7 @@ public bool IsInBatchUpdate
         /// Gets or sets the ability of a project filenode to have child nodes (sub items).
         /// Example would be C#/VB forms having resx and designer files.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ bool CanFileNodesHaveChilds
+        public bool CanFileNodesHaveChilds
         {
             get
             {
@@ -981,24 +950,6 @@ public bool IsInBatchUpdate
             }
         }
 
-#if UNUSED
-        /// 
-        /// Get and set the Token processor.
-        /// 
-        public TokenProcessor FileTemplateProcessor
-        {
-            get
-            {
-                if (tokenProcessor == null)
-                    tokenProcessor = new TokenProcessor();
-                return tokenProcessor;
-            }
-            set
-            {
-                tokenProcessor = value;
-            }
-        }
-#endif
         public IVsHierarchy InteropSafeIVsHierarchy { get; protected set; }
         public IVsUIHierarchy InteropSafeIVsUIHierarchy { get; protected set; }
         public IVsProject InteropSafeIVsProject { get; protected set; }
@@ -1140,7 +1091,7 @@ public virtual string OutputBaseRelativePath
         /// 
         /// Gets or sets the flag whether query edit should communicate with the scc manager.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ bool DisableQueryEdit
+        public bool DisableQueryEdit
         {
             get
             {
@@ -1155,7 +1106,6 @@ public virtual string OutputBaseRelativePath
         /// 
         /// Gets a collection of integer ids that maps to project item instances
         /// 
-        /*internal, but public for FSharp.Project.dll*/
         public IdItemMapping ItemIdMap
         {
             get
@@ -1178,7 +1128,7 @@ internal TrackDocumentsHelper Tracker
         /// 
         /// Gets whether or not the readonly file attribute is set for this project.
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public bool IsReadOnly
+        public bool IsReadOnly
         {
             get
             {
@@ -1189,7 +1139,7 @@ internal TrackDocumentsHelper Tracker
         /// 
         /// Gets or sets the build logger.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ IDEBuildLogger BuildLogger
+        public IDEBuildLogger BuildLogger
         {
             get
             {
@@ -1205,7 +1155,7 @@ private set
         /// 
         /// Gets the taskprovider.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ TaskProvider TaskProvider
+        public TaskProvider TaskProvider
         {
             get
             {
@@ -1224,7 +1174,7 @@ internal TaskReporter TaskReporter
         /// 
         /// Gets the project file name.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ string FileName
+        public string FileName
         {
             get
             {
@@ -1236,7 +1186,7 @@ internal TaskReporter TaskReporter
         /// 
         /// Gets the configuration provider.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ ConfigProvider ConfigProvider
+        public ConfigProvider ConfigProvider
         {
             get
             {
@@ -1265,7 +1215,7 @@ internal BuildActionConverter BuildActionConverter
         /// Gets or sets whether or not source code control is disabled for this project.
         /// 
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Scc")]
-        public /*protected, but public for FSharp.Project.dll*/ bool IsSccDisabled
+        public bool IsSccDisabled
         {
             get
             {
@@ -1281,7 +1231,7 @@ internal BuildActionConverter BuildActionConverter
         /// Gets or set whether items can be deleted for this project.
         /// Enabling this feature can have the potential destructive behavior such as deleting files from disk.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ bool CanProjectDeleteItems
+        public bool CanProjectDeleteItems
         {
             get
             {
@@ -1296,7 +1246,7 @@ internal BuildActionConverter BuildActionConverter
         /// 
         /// Determines whether the project was fully opened. This is set when the OnAfterOpenProject has triggered.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ bool HasProjectOpened
+        public bool HasProjectOpened
         {
             get
             {
@@ -1307,7 +1257,7 @@ internal BuildActionConverter BuildActionConverter
         /// 
         /// Gets or sets event triggering flags.
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public EventTriggering EventTriggeringFlag
+        public EventTriggering EventTriggeringFlag
         {
             get
             {
@@ -1322,7 +1272,7 @@ internal BuildActionConverter BuildActionConverter
         /// 
         /// Defines the build project that has loaded the project file.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ Microsoft.Build.Evaluation.Project BuildProject
+        public Microsoft.Build.Evaluation.Project BuildProject
         {
             get
             {
@@ -1338,7 +1288,7 @@ internal BuildActionConverter BuildActionConverter
         /// 
         /// Defines the build engine that is used to build the project file.
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public Microsoft.Build.Evaluation.ProjectCollection BuildEngine
+        public Microsoft.Build.Evaluation.ProjectCollection BuildEngine
         {
             get
             {
@@ -1352,9 +1302,9 @@ internal BuildActionConverter BuildActionConverter
         }
 
 		/// 
-		/// The /*internal, but public for FSharp.Project.dll*/ public package implementation.
+		/// The public package implementation.
 		/// 
-		/*internal, but public for FSharp.Project.dll*/ public ProjectPackage Package
+		public ProjectPackage Package
 		{
 			get
 			{
@@ -1365,9 +1315,6 @@ internal BuildActionConverter BuildActionConverter
 				this.package = value;
 			}
 		}
-		#endregion
-
-        #region ctor
 
         protected ProjectNode()
         {
@@ -1375,10 +1322,8 @@ protected ProjectNode()
             myExtensibilityEventsHelper = new ExtensibilityEventsHelper(this);
             this.Initialize();
         }
-        #endregion
 
-        #region overridden methods
-        public /*protected, but public for FSharp.Project.dll*/ override NodeProperties CreatePropertiesObject()
+        public override NodeProperties CreatePropertiesObject()
         {
             return new ProjectNodeProperties(this);
         }
@@ -1676,10 +1621,6 @@ public override string GetMkDocument()
             return Path.Combine(this.BaseURI.AbsoluteUrl, this.filename);
         }
 
-        /// 
-        /// Disposes the project node object.
-        /// 
-        /// Flag determining ehether it was deterministic or non deterministic clean up.
         protected override void Dispose(bool disposing)
         {
             if (this.isDisposed)
@@ -1868,7 +1809,7 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
         /// Pointer to a VARIANTARG structure containing input arguments. Can be NULL
         /// VARIANTARG structure to receive command output. Can be NULL.
         /// If the method succeeds, it returns S_OK. If it fails, it returns an error code.
-        public /*protected, but public for FSharp.Project.dll*/ override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
+        public override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
         {
             if (cmdGroup == VsMenus.guidStandardCommandSet97)
             {
@@ -1929,7 +1870,7 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
         /// 
         /// A flag that specifies the type of delete operation (delete from storage or remove from project)
         /// true if item can be deleted from project
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
+        public override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
         {
             if (deleteOperation == __VSDELETEITEMOPERATION.DELITEMOP_RemoveFromProject)
             {
@@ -1951,8 +1892,6 @@ internal override DocumentManager GetDocumentManager()
             return null;
         }
 
-        #endregion
-
         public void UpdateValueOfCanUseTargetFSharpCoreReferencePropertyIfNecessary(ReferenceNode node)
         {
             // property is already set, not need to make one more check
@@ -1966,8 +1905,6 @@ public void UpdateValueOfCanUseTargetFSharpCoreReferencePropertyIfNecessary(Refe
             }
         }
 
-        #region virtual methods
-
         /// 
         /// Executes a wizard.
         /// 
@@ -2138,7 +2075,7 @@ public virtual void Load(string fileName, string location, string name, uint fla
             {
                 this.disableQueryEdit = true;
 
-                // set up /*internal, but public for FSharp.Project.dll*/ public members and icons
+                // set up public members and icons
                 canceled = 0;
 
                 this.ProjectMgr = this;
@@ -2303,52 +2240,6 @@ public virtual void OnOpenItem(string fullPathToSourceFile)
         {
         }
 
-#if UNUSED_DEPENDENT_FILES
-        /// 
-        /// This add methos adds the "key" item to the hierarchy, potentially adding other subitems in the process
-        /// This method may recurse if the parent is an other subitem
-        /// 
-        /// 
-        /// List of subitems not yet added to the hierarchy
-        /// Key to retrieve the target item from the subitems list
-        /// Newly added node
-        /// If the parent node was found we add the dependent item to it otherwise we add the item ignoring the "DependentUpon" metatdata
-        public /*protected, but public for FSharp.Project.dll*/ virtual HierarchyNode AddDependentFileNode(IDictionary subitems, string key)
-        {
-            Microsoft.Build.Evaluation.ProjectItem item = subitems[key];
-            subitems.Remove(key);
-
-            HierarchyNode newNode;
-            HierarchyNode parent = null;
-
-            string dependentOf = MSBuildItem.GetMetadataValue(item, ProjectFileConstants.DependentUpon);
-            Debug.Assert(String.Compare(dependentOf, key, StringComparison.OrdinalIgnoreCase) != 0, "File dependent upon itself is not valid. Ignoring the DependentUpon metadata");
-            if (subitems.ContainsKey(dependentOf))
-            {
-                // The parent item is an other subitem, so recurse into this method to add the parent first
-                parent = AddDependentFileNode(subitems, dependentOf);
-            }
-            else
-            {
-                // See if the parent node already exist in the hierarchy
-                uint parentItemID;
-                string path = Path.Combine(this.ProjectFolder, dependentOf);
-                ErrorHandler.ThrowOnFailure(this.ParseCanonicalName(path, out parentItemID));
-                if (parentItemID != 0)
-                    parent = this.NodeFromItemId(parentItemID);
-                Debug.Assert(parent != null, "File dependent upon a non existing item or circular dependency. Ignoring the DependentUpon metadata");
-            }
-
-            // If the parent node was found we add the dependent item to it otherwise we add the item ignoring the "DependentUpon" metatdata
-            if (parent != null)
-                newNode = this.AddDependentFileNodeToNode(item, parent);
-            else
-                newNode = this.AddIndependentFileNode(item);
-
-            return newNode;
-        }
-#endif
-
         /// 
         /// This is called from the main thread before the background build starts.
         ///  cleanBuild is not part of the vsopts, but passed down as the callpath is differently
@@ -2803,29 +2694,6 @@ internal virtual LinkedFileNode CreateFileNode(string file, uint? newItemId = nu
             return this.CreateFileNode(item, newItemId);
         }
 
-#if UNUSED_DEPENDENT_FILES
-        /// 
-        /// Create dependent file node based on an msbuild item
-        /// 
-        /// msbuild item
-        /// dependent file node
-        public virtual DependentFileNode CreateDependentFileNode(ProjectElement item)
-        {
-            return new DependentFileNode(this, item);
-        }
-
-        /// 
-        /// Create a dependent file node based on a string.
-        /// 
-        /// filename of the new dependent file node
-        /// Dependent node added
-        public virtual DependentFileNode CreateDependentFileNode(string file)
-        {
-            ProjectElement item = this.AddFileToMsBuild(file);
-            return this.CreateDependentFileNode(item);
-        }
-#endif
-
         /// 
         /// Return an absolute path that is normalized (e.g. no ".." portions)
         /// 
@@ -2908,7 +2776,7 @@ public virtual bool NodeHasDesigner(string itemPath)
 		/// List of Guids of the config independent property pages. It is called by the GetProperty for VSHPROPID_PropertyPagesCLSIDList property.
 		/// 
 		/// 
-		public /*protected, but public for FSharp.Project.dll*/ virtual Guid[] GetConfigurationIndependentPropertyPages()
+		public virtual Guid[] GetConfigurationIndependentPropertyPages()
 		{
 			return new Guid[] { Guid.Empty };
 		}
@@ -2917,7 +2785,7 @@ public virtual bool NodeHasDesigner(string itemPath)
         /// Returns a list of Guids of the configuration dependent property pages. It is called by the GetProperty for VSHPROPID_CfgPropertyPagesCLSIDList property.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual Guid[] GetConfigurationDependentPropertyPages()
+        public virtual Guid[] GetConfigurationDependentPropertyPages()
         {
             return new Guid[0];
         }
@@ -2926,7 +2794,7 @@ public virtual bool NodeHasDesigner(string itemPath)
         /// An ordered list of guids of the prefered property pages. See 
         /// 
         /// An array of guids.
-        public /*protected, but public for FSharp.Project.dll*/ virtual Guid[] GetPriorityProjectDesignerPages()
+        public virtual Guid[] GetPriorityProjectDesignerPages()
         {
             return new Guid[] { Guid.Empty };
         }
@@ -2940,7 +2808,7 @@ public virtual bool NodeHasDesigner(string itemPath)
         /// the parent node where to add the subfolder if it does not exist.
         /// the foldernode correcsponding to the path.
         [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "SubFolder")]
-        public /*protected, but public for FSharp.Project.dll*/ virtual FolderNode VerifySubFolderExists(string path, HierarchyNode parent)
+        public virtual FolderNode VerifySubFolderExists(string path, HierarchyNode parent)
         {
             FolderNode folderNode = null;
             uint uiItemId;
@@ -2992,7 +2860,7 @@ internal virtual FolderNode CreateFolderNode(string path, ProjectElement element
         /// Gets the list of selected HierarchyNode objects
         /// 
         /// A list of HierarchyNode objects
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual IList GetSelectedNodes()
+        public virtual IList GetSelectedNodes()
         {
             // Retrieve shell interface in order to get current selection
             IVsMonitorSelection monitorSelection = this.GetService(typeof(IVsMonitorSelection)) as IVsMonitorSelection;
@@ -3029,16 +2897,6 @@ internal virtual FolderNode CreateFolderNode(string path, ProjectElement element
                                 selectedNodes.Add(node);
                             }
                         }
-#if UNUSED_NESTED_PROJECTS
-                        else
-                        {
-                            NestedProjectNode node = this.GetNestedProjectForHierarchy(hierarchy);
-                            if (node != null)
-                            {
-                                selectedNodes.Add(node);
-                            }
-                        }
-#endif
                     }
                     else if (multiItemSelect != null)
                     {
@@ -3090,7 +2948,7 @@ internal virtual FolderNode CreateFolderNode(string path, ProjectElement element
         /// 
         /// Recursevily walks the hierarchy nodes and redraws the state icons
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override void UpdateSccStateIcons()
+        public override void UpdateSccStateIcons()
         {
             if (this.FirstChild == null)
             {
@@ -3108,7 +2966,7 @@ internal virtual FolderNode CreateFolderNode(string path, ProjectElement element
         /// Handles the shows all objects command.
         /// 
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual int ShowAllFiles()
+        public virtual int ShowAllFiles()
         {
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
@@ -3117,7 +2975,7 @@ internal virtual FolderNode CreateFolderNode(string path, ProjectElement element
         /// Handles the Add web reference command.
         /// 
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual int AddWebReference()
+        public virtual int AddWebReference()
         {
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
@@ -3126,7 +2984,7 @@ internal virtual FolderNode CreateFolderNode(string path, ProjectElement element
         /// Unloads the project.
         /// 
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual int UnloadProject()
+        public virtual int UnloadProject()
         {
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
@@ -3135,7 +2993,7 @@ internal virtual FolderNode CreateFolderNode(string path, ProjectElement element
         /// Handles the clean project command.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual int CleanProject()
+        public virtual int CleanProject()
         {
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
@@ -3143,7 +3001,7 @@ internal virtual FolderNode CreateFolderNode(string path, ProjectElement element
         /// 
         /// Reload project from project file
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual void Reload()
+        public virtual void Reload()
         {
             Debug.Assert(this.buildEngine != null, "There is no build engine defined for this project");
 
@@ -3185,7 +3043,7 @@ internal virtual FolderNode CreateFolderNode(string path, ProjectElement element
         /// Renames the project file
         /// 
         /// The full path of the new project file.
-        public /*protected, but public for FSharp.Project.dll*/ virtual void RenameProjectFile(string newFile)
+        public virtual void RenameProjectFile(string newFile)
         {
             IVsUIShell shell = this.Site.GetService(typeof(SVsUIShell)) as IVsUIShell;
             Debug.Assert(shell != null, "Could not get the ui shell from the project");
@@ -3271,7 +3129,7 @@ internal virtual FolderNode CreateFolderNode(string path, ProjectElement element
         /// 
         /// Filter items that should not be processed as file items. Example: Folders and References.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual bool FilterItemTypeToBeAddedToHierarchy(string itemType)
+        public virtual bool FilterItemTypeToBeAddedToHierarchy(string itemType)
         {
             return (String.Compare(itemType, ProjectFileConstants.Reference, StringComparison.OrdinalIgnoreCase) == 0
                     || String.Compare(itemType, ProjectFileConstants.ProjectReference, StringComparison.OrdinalIgnoreCase) == 0
@@ -3285,7 +3143,7 @@ internal virtual FolderNode CreateFolderNode(string path, ProjectElement element
         /// Associate window output pane to the build logger
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual void SetOutputLogger(IVsOutputWindowPane output)
+        public virtual void SetOutputLogger(IVsOutputWindowPane output)
         {
             // Create our logger, if it was not specified
             if (!this.useProvidedLogger || this.buildLogger == null)
@@ -3347,7 +3205,7 @@ internal virtual void SetBuildConfigurationProperties(ConfigCanonicalName config
 
         public abstract void ComputeSourcesAndFlags();
 
-        internal abstract int FixupAppConfigOnTargetFXChange(string newTargetFramework);
+        internal abstract int FixupAppConfigOnTargetFXChange(string newTargetFramework, string targetFSharpCoreVersion, bool autoGenerateBindingRedirects);
 
         /// 
         /// This execute an MSBuild target.
@@ -3573,10 +3431,6 @@ internal virtual BuildSubmission DoMSBuildSubmission(BuildKind buildKind, string
                     var sessionGuid = sqm.GetGlobalSessionGuid();
                     projectInstance.SetProperty(GlobalProperty.SqmSessionGuid.ToString(), sessionGuid.ToString());
                 }
-                else
-                {
-                    Debug.Assert(false, "Could not retrieve SQM service from the service provider");
-                }
 
                 if (extraProperties != null)
                 {
@@ -3684,7 +3538,7 @@ private void FinishSubmission(BuildSubmission submission, BuildAccessorAccess bu
         /// The following common project properties are defaulted to projectName (if empty):
         ///    AssemblyName, Name and RootNamespace.
         /// If the project filename is not set then no properties are set
-        public /*protected, but public for FSharp.Project.dll*/ virtual void InitializeProjectProperties()
+        public virtual void InitializeProjectProperties()
         {
             // Get projectName from project filename. Return if not set
             string projectName = Path.GetFileNameWithoutExtension(this.filename);
@@ -3711,7 +3565,7 @@ private void FinishSubmission(BuildSubmission submission, BuildAccessorAccess bu
         /// Factory method for configuration provider
         /// 
         /// Configuration provider created
-        public /*protected, but public for FSharp.Project.dll*/ virtual ConfigProvider CreateConfigProvider()
+        public virtual ConfigProvider CreateConfigProvider()
         {
             return new ConfigProvider(this);
         }
@@ -3720,7 +3574,7 @@ private void FinishSubmission(BuildSubmission submission, BuildAccessorAccess bu
         /// Factory method for reference container node
         /// 
         /// ReferenceContainerNode created
-        public /*protected, but public for FSharp.Project.dll*/ virtual ReferenceContainerNode CreateReferenceContainerNode()
+        public virtual ReferenceContainerNode CreateReferenceContainerNode()
         {
             return new ReferenceContainerNode(this);
         }
@@ -3731,7 +3585,7 @@ private void FinishSubmission(BuildSubmission submission, BuildAccessorAccess bu
         /// The new name of the project file.
         /// if true - then SaveAs operation is performed on the copy of of current project file
         /// Success value or an error code.
-        public /*protected, but public for FSharp.Project.dll*/ virtual int SaveAs(string newFileName, bool saveCopyAs)
+        public virtual int SaveAs(string newFileName, bool saveCopyAs)
         {
             Debug.Assert(!String.IsNullOrEmpty(newFileName), "Cannot save project file for an empty or null file name");
 
@@ -3872,7 +3726,7 @@ private void FinishSubmission(BuildSubmission submission, BuildAccessorAccess bu
         /// An implementer can override this method to provide specialized semantics on how the project file is renamed in the msbuild file.
         /// 
         /// The new full path of the project file
-        public /*protected, but public for FSharp.Project.dll*/ virtual void SaveMSBuildProjectFileAs(string newFileName)
+        public virtual void SaveMSBuildProjectFileAs(string newFileName)
         {
             Debug.Assert(!String.IsNullOrEmpty(newFileName), "Cannot save project file for an empty or null file name");
 
@@ -3941,7 +3795,7 @@ internal virtual ProjectElement AddFolderToMsBuild(string folder)
         /// The orginal filname.
         /// The computed new file name, that will be copied to the project directory or into the folder .
         /// S_OK for success, or an error message
-        public /*protected, but public for FSharp.Project.dll*/ virtual int CanOverwriteExistingItem(string originalFileName, string computedNewFileName)
+        public virtual int CanOverwriteExistingItem(string originalFileName, string computedNewFileName)
         {
             if (String.IsNullOrEmpty(originalFileName) || String.IsNullOrEmpty(computedNewFileName))
             {
@@ -3986,7 +3840,7 @@ internal virtual ProjectElement AddFolderToMsBuild(string folder)
         /// Handle owerwriting of an existing item in the hierarchy.
         /// 
         /// The node that exists.
-        public /*protected, but public for FSharp.Project.dll*/ virtual void OverwriteExistingItem(HierarchyNode existingNode)
+        public virtual void OverwriteExistingItem(HierarchyNode existingNode)
         {
 
         }
@@ -3996,7 +3850,7 @@ internal virtual ProjectElement AddFolderToMsBuild(string folder)
         /// 
         /// The parent of the new fileNode
         /// The file name
-        public /*protected, but public for FSharp.Project.dll*/ virtual HierarchyNode AddNewFileNodeToHierarchy(HierarchyNode parentNode, string fileName)
+        public virtual HierarchyNode AddNewFileNodeToHierarchy(HierarchyNode parentNode, string fileName)
         {
             var ret = AddNewFileNodeToHierarchyCore(parentNode, fileName);
             FireAddNodeEvent(fileName);
@@ -4005,28 +3859,8 @@ internal virtual ProjectElement AddFolderToMsBuild(string folder)
 
         private HierarchyNode AddNewFileNodeToHierarchyCore(HierarchyNode parentNode, string fileName, uint? newItemId = null)
         {
-            HierarchyNode child;
-
-#if UNUSED_DEPENDENT_FILES
-            // In the case of subitem, we want to create dependent file node
-            // and set the DependentUpon property
-            if (this.canFileNodesHaveChilds && (parentNode is FileNode || parentNode is DependentFileNode))
-            {
-                child = this.CreateDependentFileNode(fileName);
-                child.ItemNode.SetMetadata(ProjectFileConstants.DependentUpon, parentNode.ItemNode.GetMetadata(ProjectFileConstants.Include));
-
-                // Make sure to set the HasNameRelation flag on the dependent node if it is related to the parent by name
-                if (!child.HasParentNodeNameRelation && string.Compare(child.GetRelationalName(), parentNode.GetRelationalName(), StringComparison.OrdinalIgnoreCase) == 0)
-                {
-                    child.HasParentNodeNameRelation = true;
-                }
-            }
-            else
-#endif
-            {
-                //Create and add new filenode to the project
-                child = this.CreateFileNode(fileName, newItemId);
-            }
+            //Create and add new filenode to the project
+            HierarchyNode child = this.CreateFileNode(fileName, newItemId);
 
             parentNode.AddChild(child);
 
@@ -4043,7 +3877,7 @@ private void FireAddNodeEvent(string fileName)
         /// Defines whther the current mode of the project is in a supress command mode.
         /// 
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual bool IsCurrentStateASuppressCommandsMode()
+        public virtual bool IsCurrentStateASuppressCommandsMode()
         {
             if (VsShellUtilities.IsSolutionBuilding(this.Site))
             {
@@ -4074,7 +3908,7 @@ private void FireAddNodeEvent(string fileName)
         ///        - GetOutputGroupDescription
         /// 
         /// List of output group name and corresponding MSBuild target
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual IList> GetOutputGroupNames()
+        public virtual IList> GetOutputGroupNames()
         {
             return new List>(outputGroupNames);
         }
@@ -4084,7 +3918,7 @@ private void FireAddNodeEvent(string fileName)
         /// 
         /// Canonical name of the output group
         /// Display name
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual string GetOutputGroupDisplayName(string canonicalName)
+        public virtual string GetOutputGroupDisplayName(string canonicalName)
         {
             string result = SR.GetString(String.Format(CultureInfo.InvariantCulture, "Output{0}", canonicalName), CultureInfo.CurrentUICulture);
             if (String.IsNullOrEmpty(result))
@@ -4097,7 +3931,7 @@ private void FireAddNodeEvent(string fileName)
         /// 
         /// Canonical name of the output group
         /// Description
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual string GetOutputGroupDescription(string canonicalName)
+        public virtual string GetOutputGroupDescription(string canonicalName)
         {
             string result = SR.GetString(String.Format(CultureInfo.InvariantCulture, "Output{0}Description", canonicalName), CultureInfo.CurrentUICulture);
             if (String.IsNullOrEmpty(result))
@@ -4110,7 +3944,7 @@ private void FireAddNodeEvent(string fileName)
         /// This does not get persisted and is used to evaluate msbuild conditions
         /// which are based on the $(Configuration) property.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void SetCurrentConfiguration()
+        public virtual void SetCurrentConfiguration()
         {
 #if FX_ATLEAST_45
             if ((this.GetService(typeof(SVsBuildManagerAccessor)) as IVsBuildManagerAccessor).IsInProgress())
@@ -4154,7 +3988,7 @@ internal virtual void SetConfiguration(ConfigCanonicalName configCanonicalName)
                     // REVIEW/TODO: shall we abandon accessing automation here and just look at MSBuild state?
                     EnvDTE.Project automationObject = this.GetAutomationObject() as EnvDTE.Project;
                     ConfigCanonicalName currentConfigName;
-                    if (Utilities.TryGetActiveConfigurationAndPlatform(this.Site, InteropSafeIVsHierarchy, out currentConfigName))
+                    if (Utilities.TryGetActiveConfigurationAndPlatform(this.Site, this.ProjectIDGuid, out currentConfigName))
                     {
                         if (currentConfigName == configCanonicalName) return;
                     }
@@ -4176,7 +4010,7 @@ internal void UpdateMSBuildState()
         /// 
         /// Loads reference items from the project file into the hierarchy.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void ProcessReferences()
+        public virtual void ProcessReferences()
         {
             IReferenceContainer container = GetReferenceContainer();
             if (null == container)
@@ -4200,7 +4034,7 @@ internal void UpdateMSBuildState()
         /// 
         /// Loads build actions for a project
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void ProcessCustomBuildActions()
+        public virtual void ProcessCustomBuildActions()
         {
             // The buildActionConverter has a set of default actions that are always there:
             this.buildActionConverter.ResetBuildActionsToDefaults();
@@ -4218,7 +4052,7 @@ internal void UpdateMSBuildState()
             // Now that comprises the final list of item types that should be available.
         }
 
-        public /*protected internal, but public for FSharp.Project.dll*/void CheckForWildcards()
+        public void CheckForWildcards()
         {
             var dict = new Dictionary();
             foreach (var item in MSBuildProject.GetStaticAndVisibleItemsInOrder(this.buildProject))
@@ -4236,7 +4070,7 @@ internal void UpdateMSBuildState()
         /// 
         /// Loads file items from the project file into the hierarchy.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void ProcessFilesAndFolders()
+        public virtual void ProcessFilesAndFolders()
         {
             List subitemsKeys = new List();
             Dictionary subitems = new Dictionary();
@@ -4282,39 +4116,12 @@ internal void UpdateMSBuildState()
                     subitems.Add(MSBuildItem.GetEvaluatedInclude(item), item);
                 }
             }
-
-#if UNUSED_DEPENDENT_FILES
-            // Now process the dependent items.
-            if (this.CanFileNodesHaveChilds)
-            {
-                ProcessDependentFileNodes(subitemsKeys, subitems);
-            }
-#endif
-        }
-
-#if UNUSED_DEPENDENT_FILES
-        /// 
-        /// Processes dependent filenodes from list of subitems. Multi level supported, but not circular dependencies.
-        /// 
-        /// List of sub item keys 
-        /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void ProcessDependentFileNodes(List subitemsKeys, Dictionary subitems)
-        {
-            foreach (string key in subitemsKeys)
-            {
-                // A previous pass could have removed the key so make sure it still needs to be added
-                if (!subitems.ContainsKey(key))
-                    continue;
-
-                AddDependentFileNode(subitems, key);
-            }
         }
-#endif
 
         /// 
         /// For flavored projects which implement IPersistXMLFragment, load the information now
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void LoadNonBuildInformation()
+        public virtual void LoadNonBuildInformation()
         {
             IVsHierarchy outerHierarchy = InteropSafeIVsHierarchy;
             if (outerHierarchy is IPersistXMLFragment)
@@ -4326,7 +4133,7 @@ internal void UpdateMSBuildState()
         /// 
         /// Used to sort nodes in the hierarchy.
         /// 
-        public /*protected internal, but public for FSharp.Project.dll*/ abstract int CompareNodes(HierarchyNode node1, HierarchyNode node2);
+        public abstract int CompareNodes(HierarchyNode node1, HierarchyNode node2);
 
         /// 
         /// Handles global properties related to configuration and platform changes invoked by a change in the active configuration.
@@ -4350,7 +4157,7 @@ internal virtual void OnHandleConfigurationRelatedGlobalProperties(object sender
             }
 
             ConfigCanonicalName configCanonicalName;
-            if (!Utilities.TryGetActiveConfigurationAndPlatform(this.Site, InteropSafeIVsHierarchy, out configCanonicalName))
+            if (!Utilities.TryGetActiveConfigurationAndPlatform(this.Site, this.ProjectIDGuid, out configCanonicalName))
             {
                 throw new InvalidOperationException();
             }
@@ -4360,8 +4167,6 @@ internal virtual void OnHandleConfigurationRelatedGlobalProperties(object sender
             MSBuildProject.SetGlobalProperty(this.buildProject, GlobalProperty.Platform.ToString(), configCanonicalName.MSBuildPlatform);
         }
 
-        #endregion
-
         public void BeginBatchUpdate()
         {
             // refresh current state
@@ -4444,7 +4249,6 @@ internal string GetKeyOutputForGroup(IVsHierarchy hier, string groupName)
             return String.Empty;
         }
 
-#region non-virtual methods
         private void TellMSBuildCurrentSolutionConfiguration()
         {
             var canonicalCfgNameOpt = FetchCurrentConfigurationName();
@@ -4671,43 +4475,13 @@ internal bool QueryEditProjectFile(bool suppressUI)
             return result;
         }
 
-#if UNUSED_NESTED_PROJECTS
-        /// 
-        /// Checks whether a hierarchy is a nested project.
-        /// 
-        /// 
-        /// 
-        /*internal, but public for FSharp.Project.dll*/ public NestedProjectNode GetNestedProjectForHierarchy(IVsHierarchy hierarchy)
-        {
-            if (hierarchy != null && (hierarchy is IVsProject3))
-            {
-                IVsProject3 project = hierarchy as IVsProject3;
-
-                string mkDocument = String.Empty;
-                project.GetMkDocument(VSConstants.VSITEMID_ROOT, out mkDocument);
-
-                if (!String.IsNullOrEmpty(mkDocument))
-                {
-                    HierarchyNode node = this.FindChild(mkDocument);
-
-                    if (node != null && (node is NestedProjectNode))
-                    {
-                        return node as NestedProjectNode;
-                    }
-                }
-            }
-
-            return null;
-        }
-#endif
-
         /// 
         /// Given a node determines what is the directory that can accept files.
         /// If the node is a FoldeNode than it is the Url of the Folder.
         /// If the node is a ProjectNode it is the project folder.
         /// Otherwise (such as FileNode subitem) it delegate the resolution to the parent node.
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public string GetBaseDirectoryForAddingFiles(HierarchyNode nodeToAddFile)
+        public string GetBaseDirectoryForAddingFiles(HierarchyNode nodeToAddFile)
         {
             string baseDir = String.Empty;
 
@@ -4728,7 +4502,7 @@ internal bool QueryEditProjectFile(bool suppressUI)
         }
 
         /// 
-        /// For /*internal, but public for FSharp.Project.dll*/ public use only.
+        /// For public use only.
         /// This creates a copy of an existing configuration and add it to the project.
         /// Caller should change the condition on the PropertyGroup.
         /// If derived class want to accomplish this, they should call ConfigProvider.AddCfgsOfCfgName()
@@ -4737,7 +4511,7 @@ internal bool QueryEditProjectFile(bool suppressUI)
         /// 
         /// PropertyGroup to clone
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public Microsoft.Build.Construction.ProjectPropertyGroupElement ClonePropertyGroup(Microsoft.Build.Construction.ProjectPropertyGroupElement group)
+        public Microsoft.Build.Construction.ProjectPropertyGroupElement ClonePropertyGroup(Microsoft.Build.Construction.ProjectPropertyGroupElement group)
         {
             // Create a new (empty) PropertyGroup
             Microsoft.Build.Construction.ProjectPropertyGroupElement newPropertyGroup = this.buildProject.Xml.AddPropertyGroup();
@@ -4761,7 +4535,7 @@ internal bool QueryEditProjectFile(bool suppressUI)
         /// Register the project with the Scc manager.
         /// 
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Scc")]
-        public /*protected, but public for FSharp.Project.dll*/ void RegisterSccProject()
+        public void RegisterSccProject()
         {
 
             if (this.IsSccDisabled || this.isRegisteredWithScc || String.IsNullOrEmpty(this.sccProjectName))
@@ -4784,7 +4558,7 @@ internal bool QueryEditProjectFile(bool suppressUI)
         /// 
         [SuppressMessage("Microsoft.Naming", "CA1702:CompoundWordsShouldBeCasedCorrectly", MessageId = "UnRegister")]
         [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "Un")]
-        public /*protected, but public for FSharp.Project.dll*/ void UnRegisterProject()
+        public void UnRegisterProject()
         {
             if (this.IsSccDisabled || !this.isRegisteredWithScc)
             {
@@ -4806,7 +4580,7 @@ internal bool QueryEditProjectFile(bool suppressUI)
         /// Type of the object for which you want the CATID
         /// CATID
         [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "CATID")]
-        public /*protected internal, but public for FSharp.Project.dll*/ Guid GetCATIDForType(Type type)
+        public Guid GetCATIDForType(Type type)
         {
             if (type == null)
                 throw new ArgumentNullException("type");
@@ -4827,7 +4601,7 @@ internal bool QueryEditProjectFile(bool suppressUI)
         /// GUID that extender can use to uniquely identify your object type
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "catid")]
         [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "CATID")]
-        public /*protected, but public for FSharp.Project.dll*/ void AddCATIDMapping(Type type, Guid catid)
+        public void AddCATIDMapping(Type type, Guid catid)
         {
             catidMapping.Add(type, catid);
         }
@@ -4837,18 +4611,23 @@ internal bool QueryEditProjectFile(bool suppressUI)
         /// 
         /// Object that support being initialized with an XML fragment
         /// Name of the configuration being initialized, null if it is the project
-        public /*protected internal, but public for FSharp.Project.dll*/ void LoadXmlFragment(IPersistXMLFragment persistXmlFragment, string configName)
+        public void LoadXmlFragment(IPersistXMLFragment persistXmlFragment, string configName)
         {
             if (xmlFragments == null)
             {
                 // Retrieve the xml fragments from MSBuild
                 xmlFragments = new XmlDocument();
+                xmlFragments.XmlResolver = null;
                 var ext = GetProjectExtensions();
                 string fragments = ext != null ? ext[ProjectFileConstants.VisualStudio] : null; 
                 if (!String.IsNullOrEmpty(fragments))
                 {
                     fragments = String.Format(CultureInfo.InvariantCulture, "{0}", fragments);
-                    xmlFragments.LoadXml(fragments);
+                    using(StringReader stream = new StringReader(fragments))
+                    using (XmlReader reader = XmlReader.Create(stream, new XmlReaderSettings() { DtdProcessing = DtdProcessing.Prohibit, XmlResolver = null }))
+                    {
+                        xmlFragments.Load(reader);
+                    }
                 }
             }
 
@@ -4912,7 +4691,7 @@ internal bool QueryEditProjectFile(bool suppressUI)
         /// Retrieve all XML fragments that need to be saved from the flavors and store the information in msbuild.
         /// 
         [SuppressMessage("Microsoft.Naming", "CA1709:IdentifiersShouldBeCasedCorrectly", MessageId = "XML")]
-        public /*protected, but public for FSharp.Project.dll*/ void PersistXMLFragments()
+        public void PersistXMLFragments()
         {
             if (this.IsFlavorDirty() != 0)
             {
@@ -4985,9 +4764,6 @@ internal bool QueryEditProjectFile(bool suppressUI)
             }
         }
 
-#endregion
-
-#region IVsGetCfgProvider Members
         //=================================================================================
 
         public virtual int GetCfgProvider(out IVsCfgProvider p)
@@ -4997,18 +4773,12 @@ public virtual int GetCfgProvider(out IVsCfgProvider p)
             p = this.ConfigProvider;
             return (p == null ? VSConstants.E_NOTIMPL : VSConstants.S_OK);
         }
-#endregion
-
-#region IPersist Members
 
         public int GetClassID(out Guid clsid)
         {
             clsid = this.ProjectGuid;
             return VSConstants.S_OK;
         }
-#endregion
-
-#region IPersistFileFormat Members
 
         int IPersistFileFormat.GetClassID(out Guid clsid)
         {
@@ -5048,7 +4818,7 @@ public virtual int IsDirty(out int isDirty)
             return VSConstants.S_OK;
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ int IsFlavorDirty()
+        public int IsFlavorDirty()
         {
             int isDirty = 0;
             // See if one of our flavor consider us dirty
@@ -5158,9 +4928,6 @@ public virtual int SaveCompleted(string filename)
             // TODO: turn file watcher back on.
             return VSConstants.S_OK;
         }
-#endregion
-
-#region IVsProject3 Members
 
         /// 
         /// Callback from the additem dialog. Deals with adding new and existing items
@@ -5875,9 +5642,6 @@ public virtual int TransferItem(string oldMkDoc, string newMkDoc, IVsWindowFrame
             return hr;
         }
 
-#endregion
-
-#region IVsProjectBuidSystem Members
         public virtual int SetHostObject(string targetName, string taskName, object hostObject)
         {
             Debug.Assert(targetName != null && taskName != null && this.buildProject != null && this.buildProject.Targets != null);
@@ -5935,10 +5699,6 @@ public virtual int GetBuildSystemKind(out uint kind)
             return VSConstants.S_OK;
         }
 
-#endregion
-
-#region IVsComponentUser methods
-
         /// 
         /// Add Components to the Project.
         /// Used by the environment to add components specified by the user in the Component Selector dialog 
@@ -5975,9 +5735,7 @@ public virtual int AddComponent(VSADDCOMPOPERATION dwAddCompOperation, uint cCom
             }
             return VSConstants.S_OK;
         }
-#endregion
 
-#region IVsDependencyProvider Members
         public int EnumDependencies(out IVsEnumDependencies enumDependencies)
         {
             enumDependencies = new EnumDependencies(this.buildDependencyList);
@@ -5990,9 +5748,6 @@ public int OpenDependency(string szDependencyCanonicalName, out IVsDependency de
             return VSConstants.S_OK;
         }
 
-#endregion
-
-#region IVsSccProject2 Members
         /// 
         /// This method is called to determine which files should be placed under source control for a given VSITEMID within this hierarchy.
         /// 
@@ -6160,10 +5915,6 @@ public virtual int SetSccLocation(string sccProjectName, string sccAuxPath, stri
 
             return VSConstants.S_OK;
         }
-#endregion
-
-#region IVsProjectSpecialFiles Members
-
 
         /// 
         /// Allows you to query the project for special files and optionally create them. 
@@ -6224,10 +5975,6 @@ public virtual int GetFile(int fileId, uint flags, out uint itemid, out string f
             return VSConstants.E_NOTIMPL;
         }
 
-#endregion
-
-#region IAggregatedHierarchy Members
-
         /// 
         /// Get the inner object of an aggregated hierarchy
         /// 
@@ -6237,10 +5984,6 @@ public virtual HierarchyNode GetInner()
             return this;
         }
 
-#endregion
-
-#region IBuildDependencyUpdate Members
-
         public virtual IVsBuildDependency[] BuildDependencies
         {
             get
@@ -6275,9 +6018,6 @@ public virtual void RemoveBuildDependency(IVsBuildDependency dependency)
             }
         }
 
-#endregion
-
-#region IReferenceDataProvider Members
         /// 
         /// Returns the reference container node.
         /// 
@@ -6287,17 +6027,11 @@ public IReferenceContainer GetReferenceContainer()
             return this.FindChild(ReferenceContainerNode.ReferencesNodeVirtualName) as IReferenceContainer;
         }
 
-#endregion
-
-#region IProjectEventsListener Members
         public bool IsProjectEventsListener
         {
             get { return this.isProjectEventsListener; }
             set { this.isProjectEventsListener = value; }
         }
-#endregion
-
-#region IProjectEventsProvider Members
 
         /// 
         /// Defines the provider for the project events
@@ -6322,10 +6056,6 @@ internal IProjectEvents ProjectEventsProvider
             }
         }
 
-#endregion
-
-#region IVsAggregatableProject Members
-
         /// 
         /// Retrieve the list of project GUIDs that are aggregated together to make this project.
         /// 
@@ -6406,10 +6136,6 @@ public int SetInnerProject(object innerProject)
             return VSConstants.E_NOTIMPL;
         }
 
-#endregion
-
-#region IVsProjectFlavorCfgProvider Members
-
         int IVsProjectFlavorCfgProvider.CreateProjectFlavorCfg(IVsCfg pBaseProjectCfg, out IVsProjectFlavorCfg ppFlavorCfg)
         {
             // Our config object is also our IVsProjectFlavorCfg object
@@ -6418,10 +6144,6 @@ int IVsProjectFlavorCfgProvider.CreateProjectFlavorCfg(IVsCfg pBaseProjectCfg, o
             return VSConstants.S_OK;
         }
 
-#endregion
-
-#region IVsBuildPropertyStorage Members
-
         /// 
         /// Get the property of an item
         /// 
@@ -6528,9 +6250,6 @@ int IVsBuildPropertyStorage.SetPropertyValue(string propertyName, string configN
             return VSConstants.S_OK;
         }
 
-#endregion
-
-        #region IVsProjectUpgrade
         public int UpgradeProject(uint grfUpgradeFlags)
         {
             var hasTargetFramework = IsTargetFrameworkInstalled();
@@ -6541,9 +6260,6 @@ public int UpgradeProject(uint grfUpgradeFlags)
             // VSConstants.OLE_E_PROMPTSAVECANCELLED causes the shell to leave project unloaded
             return hasTargetFramework ? VSConstants.S_OK : VSConstants.OLE_E_PROMPTSAVECANCELLED;
         }
-        #endregion
-
-        #region private helper methods
 
         /// 
         /// Initialize projectNode
@@ -6573,28 +6289,6 @@ private HierarchyNode AddIndependentFileNode(Microsoft.Build.Evaluation.ProjectI
             return node;
         }
 
-#if UNUSED_DEPENDENT_FILES
-        /// 
-        /// Add a dependent file node to the hierarchy
-        /// 
-        /// msbuild item to add
-        /// Parent Node
-        /// Added node
-        private HierarchyNode AddDependentFileNodeToNode(Microsoft.Build.Evaluation.ProjectItem item, HierarchyNode parentNode)
-        {
-            FileNode node = this.CreateDependentFileNode(new ProjectElement(this, item, false));
-            parentNode.AddChild(node);
-            
-            // Make sure to set the HasNameRelation flag on the dependent node if it is related to the parent by name
-            if (!node.HasParentNodeNameRelation && string.Compare(node.GetRelationalName(), parentNode.GetRelationalName(), StringComparison.OrdinalIgnoreCase) == 0)
-            {
-                node.HasParentNodeNameRelation = true;
-            }
-
-            return node;
-        }
-#endif
-
         /// 
         /// Add a file node to the hierarchy
         /// 
@@ -6846,8 +6540,6 @@ public void SetProjectExtensions(string id, string xmlText)
             element[id] = xmlText;
         }
 
-#endregion
-
         public bool IsProjectOpened { get { return this.projectOpened;  } }
         internal ExtensibilityEventsHelper ExtensibilityEventsHelper 
         {
@@ -7051,7 +6743,6 @@ bool ValidateResolvedAsmVersion(Microsoft.Build.Execution.ProjectItemInstance it
         /// 
         /// Get the outer T implementation.
         /// 
-        /*internal, but public for FSharp.Project.dll*/
         private T GetOuterAs()
             where T : class
         {
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectPackage.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectPackage.cs
index 04dde76ff61..d86f683b236 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectPackage.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectPackage.cs
@@ -22,14 +22,11 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     [CLSCompliant(false)]
     public abstract class ProjectPackage : Microsoft.VisualStudio.Shell.Package
     {
-        #region fields
         /// 
         /// This is the place to register all the solution listeners.
         /// 
         private List solutionListeners = new List();
-        #endregion
 
-        #region properties
         /// 
         /// Add your listener to this list. They should be added in the overridden Initialize befaore calling the base.
         /// 
@@ -40,9 +37,7 @@ internal IList SolutionListeners
                 return this.solutionListeners;
             }
         }
-        #endregion
 
-        #region methods
         protected override void Initialize()
         {
             base.Initialize();
@@ -50,9 +45,6 @@ protected override void Initialize()
             // Subscribe to the solution events
             this.solutionListeners.Add(new SolutionListenerForProjectReferenceUpdate(this));
             this.solutionListeners.Add(new SolutionListenerForProjectOpen(this));
-#if UNUSED_NESTED_PROJECTS
-            this.solutionListeners.Add(new SolutionListenerForBuildDependencyUpdate(this));
-#endif
             this.solutionListeners.Add(new SolutionListenerForProjectEvents(this));
 
             foreach (SolutionListener solutionListener in this.solutionListeners)
@@ -80,6 +72,5 @@ protected override void Dispose(bool disposing)
                 base.Dispose(disposing);
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectReferenceNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectReferenceNode.cs
index f43fbdcbbdf..9bdeefc3ff0 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectReferenceNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectReferenceNode.cs
@@ -24,8 +24,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     [CLSCompliant(false), ComVisible(true)]
     public class ProjectReferenceNode : ReferenceNode
     {
-        #region fieds
-
         /// 
         /// Containes either null if project reference is OK or instance of Task with error message if project reference is invalid
         /// i.e. project A references project B when target framework version for B is higher that for A
@@ -67,10 +65,6 @@ public class ProjectReferenceNode : ReferenceNode
         private bool enableCaching;
         private string cachedReferencedProjectOutputPath;
 
-        #endregion
-
-        #region properties
-
         internal bool EnableCaching
         {
             get { return enableCaching; }
@@ -108,7 +102,7 @@ public override string Caption
             }
         }
 
-        /*internal, but public for FSharp.Project.dll*/ public Guid ReferencedProjectGuid
+        public Guid ReferencedProjectGuid
         {
             get
             {
@@ -120,7 +114,7 @@ public override string Caption
         /// Possiblity to shortcut and set the dangling project reference icon.
         /// It is ussually manipulated by solution listsneres who handle reference updates.
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public bool IsNodeValid
+        public bool IsNodeValid
         {
             get
             {
@@ -135,7 +129,7 @@ public override string Caption
         /// 
         /// Controls the state whether this reference can be removed or not. Think of the project unload scenario where the project reference should not be deleted.
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public bool CanRemoveReference
+        public bool CanRemoveReference
         {
             get
             {
@@ -147,7 +141,7 @@ public override string Caption
             }
         }
 
-        /*internal, but public for FSharp.Project.dll*/ public string ReferencedProjectName
+        public string ReferencedProjectName
         {
             get { return this.referencedProjectName; }
         }
@@ -255,7 +249,7 @@ private void InitReferencedProject(IVsSolution solution)
         /// 
         /// Gets the automation object for the referenced project.
         /// 
-        /*internal, but public for FSharp.Project.dll*/ private EnvDTE.Project ReferencedProject
+        private EnvDTE.Project ReferencedProject
         {
             get
             {
@@ -494,7 +488,7 @@ private string GetReferencedProjectOutputPath()
         }
 
         private Automation.OAProjectReference projectReference;
-        /*internal, but public for FSharp.Project.dll*/ public override object Object
+        public override object Object
         {
             get
             {
@@ -505,9 +499,7 @@ private string GetReferencedProjectOutputPath()
                 return projectReference;
             }
         }
-        #endregion
 
-        #region ctors
         /// 
         /// Constructor for the ReferenceNode. It is called when the project is reloaded, when the project element representing the refernce exists. 
         /// 
@@ -544,9 +536,6 @@ internal ProjectReferenceNode(ProjectNode root, ProjectElement element)
             }
         }
 
-        /// 
-        /// constructor for the ProjectReferenceNode
-        /// 
         internal ProjectReferenceNode(ProjectNode root, string referencedProjectName, string projectPath, string projectReference)
             : base(root)
         {
@@ -603,10 +592,8 @@ internal ProjectReferenceNode(ProjectNode root, string referencedProjectName, st
             this.buildDependency = new BuildDependency(this.ProjectMgr, this.referencedProjectGuid);
 
         }
-        #endregion
 
-        #region methods
-        public /*protected, but public for FSharp.Project.dll*/ override NodeProperties CreatePropertiesObject()
+        public override NodeProperties CreatePropertiesObject()
         {
             return new ProjectReferencesProperties(this);
         }
@@ -689,7 +676,7 @@ public override void Remove(bool removeFromStorage)
         /// 
         /// Links a reference node to the project file.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override void BindReferenceData()
+        public override void BindReferenceData()
         {
             Debug.Assert(!String.IsNullOrEmpty(this.referencedProjectName), "The referencedProjectName field has not been initialized");
             Debug.Assert(this.referencedProjectGuid != Guid.Empty, "The referencedProjectName field has not been initialized");
@@ -711,7 +698,7 @@ public override void Remove(bool removeFromStorage)
         /// Defines whether this node is valid node for painting the refererence icon.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanShowDefaultIcon()
+        public override bool CanShowDefaultIcon()
         {
             if (this.referencedProjectGuid == Guid.Empty || this.ProjectMgr == null || this.ProjectMgr.IsClosed || this.isNodeValid)
             {
@@ -770,7 +757,7 @@ public override void Remove(bool removeFromStorage)
         /// Checks if a project reference can be added to the hierarchy. It calls base to see if the reference is not already there, then checks for circular references.
         /// 
         /// 
-        internal /*protected, but public for FSharp.Project.dll*/ override AddReferenceCheckResult CheckIfCanAddReference()
+        internal override AddReferenceCheckResult CheckIfCanAddReference()
         {
             // When this method is called this refererence has not yet been added to the hierarchy, only instantiated.
             var checkResult = base.CheckIfCanAddReference();
@@ -820,7 +807,7 @@ private bool IsReferenceInCycle(Guid projectGuid)
             return isCircular != 0;
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override Guid GetBrowseLibraryGuid()
+        public override Guid GetBrowseLibraryGuid()
         {
             if (this.Url.EndsWith(".csproj"))
             {
@@ -902,8 +889,6 @@ private static string GetDifferentFamilyErrorMessage(System.Runtime.Versioning.F
             return string.Format(CultureInfo.CurrentCulture, SR.GetString(SR.ProjectReferencesDifferentFramework, CultureInfo.CurrentUICulture), referencedProjectName, currentFrameworkName.Identifier, otherFrameworkName.Identifier);
         }
 
-        #endregion
-
         enum FrameworkCompatibility
         {
             Ok,
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectSystem.Base.csproj b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectSystem.Base.csproj
index d5af7bb7ed0..5ba2f43c3c5 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectSystem.Base.csproj
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ProjectSystem.Base.csproj
@@ -1,12 +1,11 @@
 
 
-
+
   
     ..\..\..\..\..\..\..\src
-    Microsoft.VisualStudio.Shell.12.0
-    Microsoft.VisualStudio.Package.LanguageService.12.0
     CSharp
     true
+    14.0
     3001,3002,3003,3005,3008,3009,3021,3024
   
   
@@ -38,17 +37,11 @@
     true
   
   
-    
-      true
-    
-    
-      true
-    
-    
-      true
-    
-    
-    
+    
+    
+    
+    
+    
     
     
     
@@ -67,7 +60,7 @@
     
     
     
-    
+    
     
     
     
@@ -76,19 +69,16 @@
     
     
     
-    
+    
     
     
     
     
     
     
-    
-    
     
     
     
-    
     
     
     
@@ -102,7 +92,6 @@
     
     
     
-    
     
     
     
@@ -112,7 +101,6 @@
     
     
     
-    
 
     
     
@@ -135,9 +123,7 @@
     
     
     
-    
     
-    
     
     
     
@@ -147,14 +133,11 @@
     
     
     
-    
-    
     
     
     
     
     
-    
     
     
     
@@ -168,21 +151,15 @@
     
     
     
-    
-    
-    
     
-    
     
     
     
     
     
     
-    
     
     
-    
     
     
     
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/PropertiesEditorLauncher.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/PropertiesEditorLauncher.cs
index d813694ef60..ac98d89d4b4 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/PropertiesEditorLauncher.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/PropertiesEditorLauncher.cs
@@ -23,7 +23,6 @@ internal class PropertiesEditorLauncher : ComponentEditor
     {
         private ServiceProvider serviceProvider;
 
-        #region ctor
         public PropertiesEditorLauncher(ServiceProvider serviceProvider)
         {
             if (serviceProvider == null)
@@ -31,8 +30,7 @@ public PropertiesEditorLauncher(ServiceProvider serviceProvider)
 
             this.serviceProvider = serviceProvider;
         }
-        #endregion
-        #region overridden methods
+
         /// 
         /// Launch the Project Properties Editor (properties pages)
         /// 
@@ -52,7 +50,6 @@ public override bool EditComponent(ITypeDescriptorContext context, object compon
 
             return false;
         }
-        #endregion
 
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceContainerNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceContainerNode.cs
index 8768304b301..afbc8ce1829 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceContainerNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceContainerNode.cs
@@ -32,32 +32,25 @@ internal enum AddReferenceDialogTab
     [CLSCompliant(false), ComVisible(true)]
     public class ReferenceContainerNode : HierarchyNode, IReferenceContainer
     {
-        #region fields
-        /*internal, but public for FSharp.Project.dll*/ public const string ReferencesNodeVirtualName = "References";
+        public const string ReferencesNodeVirtualName = "References";
         private List projectReferencesWithEnabledCaching = new List();
-        #endregion
         
-        #region ctor
         internal ReferenceContainerNode(ProjectNode root) : base(root)
         {
             this.VirtualNodeName = ReferencesNodeVirtualName;
             this.ExcludeNodeFromScc = true;
         }
-        #endregion
 
-        #region Properties
         private static string[] supportedReferenceTypes = new string[] {
             ProjectFileConstants.ProjectReference,
             ProjectFileConstants.Reference,
             ProjectFileConstants.COMReference
         };
-        public /*protected, but public for FSharp.Project.dll*/ virtual string[] SupportedReferenceTypes
+        public virtual string[] SupportedReferenceTypes
         {
             get { return supportedReferenceTypes; }
         }
-        #endregion
 
-        #region overridden properties
         public override int SortPriority
         {
             get 
@@ -93,7 +86,7 @@ public override string Caption
 
 
         private Automation.OAReferences references;
-        /*internal, but public for FSharp.Project.dll*/ public override object Object
+        public override object Object
         {
             get
             {
@@ -105,10 +98,6 @@ public override string Caption
             }
         }
 
-        #endregion
-
-        #region overridden methods
-
         public override void AddChild(HierarchyNode node)
         {
             base.AddChild(node);
@@ -149,7 +138,7 @@ public override object GetIconHandle(bool open)
         /// References node cannot be dragged.
         /// 
         /// A stringbuilder.
-        public /*protected, but public for FSharp.Project.dll*/ override StringBuilder PrepareSelectedNodesForClipBoard()
+        public override StringBuilder PrepareSelectedNodesForClipBoard()
         {
             return null;
         }
@@ -157,7 +146,7 @@ public override object GetIconHandle(bool open)
         /// 
         /// Not supported.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override int ExcludeFromProject()
+        public override int ExcludeFromProject()
         {
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
@@ -209,7 +198,7 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
             return base.QueryStatusOnNode(cmdGroup, cmd, pCmdText, ref result);
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
+        public override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
         {
             if (cmdGroup == VsMenus.guidStandardCommandSet2K)
             {
@@ -237,7 +226,7 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
             return base.ExecCommandOnNode(cmdGroup, cmd, nCmdexecopt, pvaIn, pvaOut);
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
+        public override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
         {
             return false;
         }
@@ -246,7 +235,7 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
         /// Defines whether this node is valid node for painting the refererences icon.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanShowDefaultIcon()
+        public override bool CanShowDefaultIcon()
         {
             if (!String.IsNullOrEmpty(this.VirtualNodeName))
             {
@@ -255,8 +244,6 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
             return false;
         }
 
-        #endregion
-
         public void BeginBatchUpdate()
         {
             foreach (var r in EnumReferences())
@@ -274,7 +261,6 @@ public void EndBatchUpdate()
             projectReferencesWithEnabledCaching.Clear();
         }
 
-        #region IReferenceContainer
         public IList EnumReferences()
         {
             List refs = new List();
@@ -478,7 +464,6 @@ public ReferenceNode AddReferenceFromSelectorData(VSCOMPONENTSELECTORDATA select
 
             return node;
         }
-        #endregion
 
         private void EnableCachingForProjectReferencesInBatchUpdate(HierarchyNode node)
         {
@@ -490,7 +475,6 @@ private void EnableCachingForProjectReferencesInBatchUpdate(HierarchyNode node)
             projectReferencesWithEnabledCaching.Add(projectReference);
         }
 
-        #region virtual methods
         internal virtual ReferenceNode CreateReferenceNode(string referenceType, ProjectElement element, BuildResult buildResult)
         {
             ReferenceNode node = null;
@@ -533,9 +517,7 @@ internal virtual ReferenceNode CreateReferenceNode(VSCOMPONENTSELECTORDATA selec
 
             return node;
         }
-        #endregion
 
-        #region Helper functions to add references
         /// 
         /// Creates a project reference node given an existing project element.
         /// 
@@ -546,7 +528,7 @@ internal virtual ProjectReferenceNode CreateProjectReferenceNode(ProjectElement
         /// 
         /// Create a Project to Project reference given a VSCOMPONENTSELECTORDATA structure
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual ProjectReferenceNode CreateProjectReferenceNode(VSCOMPONENTSELECTORDATA selectorData)
+        public virtual ProjectReferenceNode CreateProjectReferenceNode(VSCOMPONENTSELECTORDATA selectorData)
         {
             return new ProjectReferenceNode(this.ProjectMgr, selectorData.bstrTitle, selectorData.bstrFile, selectorData.bstrProjRef);
         }
@@ -694,12 +676,10 @@ private ComReferenceNode CreateComReferenceNode(string fileReference)
         /// 
         /// Creates a com reference node from a selector data.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual ComReferenceNode CreateComReferenceNode(Microsoft.VisualStudio.Shell.Interop.VSCOMPONENTSELECTORDATA selectorData)
+        public virtual ComReferenceNode CreateComReferenceNode(Microsoft.VisualStudio.Shell.Interop.VSCOMPONENTSELECTORDATA selectorData)
         {
             ComReferenceNode node = new ComReferenceNode(this.ProjectMgr, selectorData);
             return node;
         }
-        #endregion
-
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceNode.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceNode.cs
index c31583e0058..c73cd90d297 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceNode.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/ReferenceNode.cs
@@ -25,30 +25,20 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     [CLSCompliant(false), ComVisible(true)]
     public abstract class ReferenceNode : HierarchyNode
     {
-        public /*protected, but public for FSharp.Project.dll*/ delegate void CannotAddReferenceErrorMessage();
+        public delegate void CannotAddReferenceErrorMessage();
 
-        #region ctors
-        /// 
-        /// constructor for the ReferenceNode
-        /// 
         internal ReferenceNode(ProjectNode root, ProjectElement element)
             : base(root, element)
         {
             this.ExcludeNodeFromScc = true;
         }
 
-        /// 
-        /// constructor for the ReferenceNode
-        /// 
         internal ReferenceNode(ProjectNode root)
             : base(root)
         {
             this.ExcludeNodeFromScc = true;
         }
 
-        #endregion
-
-        #region overridden properties
         public override int MenuCommandId
         {
             get { return VsMenus.IDM_VS_CTXT_REFERENCE; }
@@ -74,10 +64,8 @@ public override string Caption
                 return String.Empty;
             }
         }
-        #endregion
 
-        #region overridden methods
-        public /*protected, but public for FSharp.Project.dll*/ override NodeProperties CreatePropertiesObject()
+        public override NodeProperties CreatePropertiesObject()
         {
             return new ReferenceNodeProperties(this);
         }
@@ -124,7 +112,7 @@ public override string GetMkDocument()
         /// 
         /// Not supported.
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ override int ExcludeFromProject()
+        public override int ExcludeFromProject()
         {
             return (int)OleConstants.OLECMDERR_E_NOTSUPPORTED;
         }
@@ -133,12 +121,12 @@ public override string GetMkDocument()
         /// References node cannot be dragged.
         /// 
         /// A stringbuilder.
-        public /*protected, but public for FSharp.Project.dll*/ override StringBuilder PrepareSelectedNodesForClipBoard()
+        public override StringBuilder PrepareSelectedNodesForClipBoard()
         {
             return null;
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override void DoDefaultAction()
+        public override void DoDefaultAction()
         {
             this.ShowObjectBrowser();
         }
@@ -183,7 +171,7 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
             return base.QueryStatusOnNode(cmdGroup, cmd, pCmdText, ref result);
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
+        public override int ExecCommandOnNode(Guid cmdGroup, uint cmd, uint nCmdexecopt, IntPtr pvaIn, IntPtr pvaOut)
         {
             if (cmdGroup == VsMenus.guidStandardCommandSet2K)
             {
@@ -205,10 +193,6 @@ internal override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdText
 
         }
 
-        #endregion
-
-        #region  methods
-
         /// 
         /// If this is a managed assembly that has been resolved, its simple name.  Else if this is project reference, the filename (sans path/extension).  Else string.Empty.
         /// This is only used in the "IsAlreadyAdded" logic to prevent adding two references to same-named assemblies via the VS UI.
@@ -254,7 +238,6 @@ public virtual bool AddReference()
         /// 
         /// Refreshes a reference by re-resolving it and redrawing the icon.
         /// 
-        /*internal, but public for FSharp.Project.dll*/
         internal virtual void RefreshReference(BuildResult buildResult)
         {
             this.ResolveReference(buildResult);
@@ -264,7 +247,7 @@ internal virtual void RefreshReference(BuildResult buildResult)
         /// 
         /// Resolves references.
         /// 
-        internal /*protected, but public for FSharp.Project.dll*/ virtual void ResolveReference(BuildResult buildResult)
+        internal virtual void ResolveReference(BuildResult buildResult)
         {
 
         }
@@ -273,7 +256,7 @@ internal virtual void RefreshReference(BuildResult buildResult)
         /// Validates that a reference can be added.
         /// 
         /// Success if the reference can be added.
-        internal /*protected, but public for FSharp.Project.dll*/ virtual AddReferenceCheckResult CheckIfCanAddReference()
+        internal virtual AddReferenceCheckResult CheckIfCanAddReference()
         {
             // When this method is called this refererence has not yet been added to the hierarchy, only instantiated.
             ReferenceNode existingNode;
@@ -290,7 +273,7 @@ internal virtual void RefreshReference(BuildResult buildResult)
         /// Checks if a reference is already added. The method parses all references and compares the Url.
         /// 
         /// true if the assembly has already been added.
-        public /*protected, but public for FSharp.Project.dll*/ virtual bool IsAlreadyAdded(out ReferenceNode existingNode)
+        public virtual bool IsAlreadyAdded(out ReferenceNode existingNode)
         {
             ReferenceContainerNode referencesFolder = this.ProjectMgr.FindChild(ReferenceContainerNode.ReferencesNodeVirtualName) as ReferenceContainerNode;
             Debug.Assert(referencesFolder != null, "Could not find the References node");
@@ -315,7 +298,7 @@ internal virtual void RefreshReference(BuildResult buildResult)
         /// 
         /// Gets the Guid to use to set VSOJBECTINFO.pguidLib for the call to IVsObjBrowser.NavigateTo
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual Guid GetBrowseLibraryGuid()
+        public virtual Guid GetBrowseLibraryGuid()
         {
             return Guid.Empty;
         }
@@ -329,7 +312,7 @@ protected virtual bool CanShowUrlInOnObjectBrowser()
         /// Shows the Object Browser
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual int ShowObjectBrowser()
+        public virtual int ShowObjectBrowser()
         {
             if (!CanShowUrlInOnObjectBrowser())
             {
@@ -371,7 +354,7 @@ protected virtual bool CanShowUrlInOnObjectBrowser()
             return returnValue;
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
+        public override bool CanDeleteItem(__VSDELETEITEMOPERATION deleteOperation)
         {
             if (deleteOperation == __VSDELETEITEMOPERATION.DELITEMOP_RemoveFromProject)
             {
@@ -380,10 +363,7 @@ protected virtual bool CanShowUrlInOnObjectBrowser()
             return false;
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ abstract void BindReferenceData();
-
-        #endregion
-
+        public abstract void BindReferenceData();
     }
 
     internal class AddReferenceCheckResult
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/RegisteredProjectType.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/RegisteredProjectType.cs
deleted file mode 100644
index 0e3856bf30d..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/RegisteredProjectType.cs
+++ /dev/null
@@ -1,152 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if UNUSED_NESTED_PROJECTS
-using System;
-using System.Runtime.InteropServices;
-using System.Diagnostics;
-using System.Globalization;
-using System.IO;
-using Microsoft.Win32;
-using Microsoft.VisualStudio.Shell.Interop;
-using VSRegistry = Microsoft.VisualStudio.Shell.VSRegistry;
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem
-{
-    /// 
-    /// Gets registry settings from for a project.
-    /// 
-    internal class RegisteredProjectType
-    {
-        private string defaultProjectExtension;
-
-        private string projectTemplatesDir;
-
-        private string wizardTemplatesDir;
-
-        private Guid packageGuid;
-
-        /*internal, but public for FSharp.Project.dll*/ public const string DefaultProjectExtension = "DefaultProjectExtension";
-        /*internal, but public for FSharp.Project.dll*/ public const string WizardsTemplatesDir = "WizardsTemplatesDir";
-        /*internal, but public for FSharp.Project.dll*/ public const string ProjectTemplatesDir = "ProjectTemplatesDir";
-        /*internal, but public for FSharp.Project.dll*/ public const string Package = "Package";
-
-
-
-        /*internal, but public for FSharp.Project.dll*/ public string DefaultProjectExtensionValue
-        {
-            get
-            {
-                return this.defaultProjectExtension;
-            }
-            set
-            {
-                this.defaultProjectExtension = value;
-            }
-        }
-
-        /*internal, but public for FSharp.Project.dll*/ public string ProjectTemplatesDirValue
-        {
-            get
-            {
-                return this.projectTemplatesDir;
-            }
-            set
-            {
-                this.projectTemplatesDir = value;
-            }
-        }
-
-        /*internal, but public for FSharp.Project.dll*/ public string WizardTemplatesDirValue
-        {
-            get
-            {
-                return this.wizardTemplatesDir;
-            }
-            set
-            {
-                this.wizardTemplatesDir = value;
-            }
-        }
-
-        /*internal, but public for FSharp.Project.dll*/ public Guid PackageGuidValue
-        {
-            get
-            {
-                return this.packageGuid;
-            }
-            set
-            {
-                this.packageGuid = value;
-            }
-        }
-
-        /// 
-        /// If the project support VsTemplates, returns the path to
-        /// the vstemplate file corresponding to the requested template
-        /// 
-        /// You can pass in a string such as: "Windows\Console Application"
-        /// 
-        /*internal, but public for FSharp.Project.dll*/ public string GetVsTemplateFile(string templateFile)
-        {
-            // First see if this use the vstemplate model
-            if (!String.IsNullOrEmpty(DefaultProjectExtensionValue))
-            {
-                EnvDTE80.DTE2 dte = Microsoft.VisualStudio.Shell.Package.GetGlobalService(typeof(EnvDTE.DTE)) as EnvDTE80.DTE2;
-                if (dte != null)
-                {
-                    EnvDTE80.Solution2 solution = dte.Solution as EnvDTE80.Solution2;
-                    if (solution != null)
-                    {
-                        string fullPath = solution.GetProjectTemplate(templateFile, DefaultProjectExtensionValue);
-                        // The path returned by GetProjectTemplate can be in the format "path|FrameworkVersion=x.y|Language=xxx"
-                        // where the framework version and language sections are optional.
-                        // Here we are interested only in the full path, so we have to remove all the other sections.
-                        int pipePos = fullPath.IndexOf('|');
-                        if (0 == pipePos)
-                        {
-                            return null;
-                        }
-                        if (pipePos > 0)
-                        {
-                            fullPath = fullPath.Substring(0, pipePos);
-                        }
-                        return fullPath;
-                    }
-                }
-
-            }
-            return null;
-        }
-
-        /*internal, but public for FSharp.Project.dll*/ public static RegisteredProjectType CreateRegisteredProjectType(Guid projectTypeGuid)
-        {
-            RegisteredProjectType registederedProjectType = null;
-
-            using (RegistryKey rootKey = VSRegistry.RegistryRoot(__VsLocalRegistryType.RegType_Configuration))
-            {
-                if (rootKey == null)
-                {
-                    return null;
-                }
-
-                string projectPath = "Projects\\" + projectTypeGuid.ToString("B");
-                using (RegistryKey projectKey = rootKey.OpenSubKey(projectPath))
-                {
-                    if (projectKey == null)
-                    {
-                        return null;
-                    }
-
-                    registederedProjectType = new RegisteredProjectType();
-                    registederedProjectType.DefaultProjectExtensionValue = projectKey.GetValue(DefaultProjectExtension) as string;
-                    registederedProjectType.ProjectTemplatesDirValue = projectKey.GetValue(ProjectTemplatesDir) as string;
-                    registederedProjectType.WizardTemplatesDirValue = projectKey.GetValue(WizardsTemplatesDir) as string;
-                    registederedProjectType.PackageGuidValue = new Guid(projectKey.GetValue(Package) as string);
-                }
-            }
-
-            return registederedProjectType;
-        }
-    }
-}
-#endif
\ No newline at end of file
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Resources/imagelis.bmp b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Resources/imagelis.bmp
index 744c7069b13..4b3700bf1c9 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Resources/imagelis.bmp and b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Resources/imagelis.bmp differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SelectionListener.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SelectionListener.cs
index 9ff48fe1234..a2757451bfc 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SelectionListener.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SelectionListener.cs
@@ -25,7 +25,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
 
     internal abstract class SelectionListener : IVsSelectionEvents, IDisposable
     {
-        #region fields
         private uint eventsCookie = (uint)ShellConstants.VSCOOKIE_NIL;
         private IVsMonitorSelection monSel = null;
         private ServiceProvider serviceProvider = null;
@@ -34,10 +33,8 @@ internal abstract class SelectionListener : IVsSelectionEvents, IDisposable
         /// Defines an object that will be a mutex for this object for synchronizing thread calls.
         /// 
         private static volatile object Mutex = new object();
-        #endregion
 
-        #region ctors
-        public /*protected, but public for FSharp.Project.dll*/ SelectionListener(ServiceProvider serviceProvider)
+        public SelectionListener(ServiceProvider serviceProvider)
         {
 
             this.serviceProvider = serviceProvider;
@@ -50,10 +47,8 @@ internal abstract class SelectionListener : IVsSelectionEvents, IDisposable
                 throw new InvalidOperationException();
             }
         }
-        #endregion
 
-        #region properties
-        public /*protected, but public for FSharp.Project.dll*/ uint EventsCookie
+        public uint EventsCookie
         {
             get
             {
@@ -61,7 +56,7 @@ internal abstract class SelectionListener : IVsSelectionEvents, IDisposable
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ IVsMonitorSelection SelectionMonitor
+        public IVsMonitorSelection SelectionMonitor
         {
             get
             {
@@ -69,16 +64,13 @@ internal abstract class SelectionListener : IVsSelectionEvents, IDisposable
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ ServiceProvider ServiceProvider
+        public ServiceProvider ServiceProvider
         {
             get
             {
                 return this.serviceProvider;
             }
         }
-        #endregion
-
-        #region IVsSelectionEvents Members
 
         public virtual int OnCmdUIContextChanged(uint dwCmdUICookie, int fActive)
         {
@@ -95,20 +87,12 @@ public virtual int OnSelectionChanged(IVsHierarchy pHierOld, uint itemidOld, IVs
             return VSConstants.E_NOTIMPL;
         }
 
-        #endregion
-
-        #region IDisposable Members
-        /// 
-        /// The IDispose interface Dispose method for disposing the object determinastically.
-        /// 
         public void Dispose()
         {
             this.Dispose(true);
             GC.SuppressFinalize(this);
         }
-        #endregion
 
-        #region methods
         public void Init()
         {
             if (this.SelectionMonitor != null)
@@ -121,7 +105,7 @@ public void Init()
         /// The method that does the cleanup.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual void Dispose(bool disposing)
+        public virtual void Dispose(bool disposing)
         {
             // Everybody can go here.
             if (!this.isDisposed)
@@ -142,7 +126,5 @@ public void Init()
                 }
             }
         }
-        #endregion
-
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SingleFileGenerator.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SingleFileGenerator.cs
deleted file mode 100644
index 5057782d6e4..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SingleFileGenerator.cs
+++ /dev/null
@@ -1,531 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if SINGLE_FILE_GENERATOR
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem
-{
-    using System;
-    using System.Runtime.InteropServices;
-    using System.Collections.Generic;
-    using System.IO;
-    using System.Diagnostics;
-    using System.Globalization;
-    using Microsoft.VisualStudio.Shell;
-    using Microsoft.VisualStudio.Shell.Interop;
-    using Microsoft.VisualStudio.OLE.Interop;
-    using Microsoft.VisualStudio.TextManager.Interop;
-    using Microsoft.VisualStudio.FSharp.Package;
-
-    /// 
-    /// Provides support for single file generator.
-    /// 
-    internal class SingleFileGenerator : ISingleFileGenerator, IVsGeneratorProgress
-    {
-
-        #region fields
-        private bool gettingCheckoutStatus;
-        private bool runningGenerator;
-        private bool hasRunGenerator = false;
-        private ProjectNode projectMgr;
-        #endregion
-
-        #region ctors
-        /// 
-        /// Overloadde ctor.
-        /// 
-        /// The associated project
-        /*internal, but public for FSharp.Project.dll*/ public SingleFileGenerator(ProjectNode projectMgr)
-        {
-            this.projectMgr = projectMgr;
-        }
-        #endregion
-
-        #region IVsGeneratorProgress Members
-
-        public virtual int GeneratorError(int warning, uint level, string err, uint line, uint col)
-        {
-            return VSConstants.E_NOTIMPL;
-        }
-
-        public virtual int Progress(uint complete, uint total)
-        {
-            return VSConstants.E_NOTIMPL;
-        }
-
-        #endregion
-
-        #region ISingleFileGenerator
-        /// 
-        /// Runs the generator on the current project item.
-        /// 
-        /// 
-        /// 
-        public virtual void RunGenerator(string document)
-        {
-            // Go run the generator on that node, but only if the file is dirty
-            // in the running document table.  Otherwise there is no need to rerun
-            // the generator because if the original document is not dirty then
-            // the generated output should be already up to date.
-            uint itemid = VSConstants.VSITEMID_NIL;
-            IVsHierarchy hier = (IVsHierarchy)this.projectMgr;
-            if (document != null && hier != null && ErrorHandler.Succeeded(hier.ParseCanonicalName((string)document, out itemid)))
-            {
-                IVsHierarchy rdtHier;
-                IVsPersistDocData perDocData;
-                uint cookie;
-                if (!this.hasRunGenerator || this.VerifyFileDirtyInRdt((string)document, out rdtHier, out perDocData, out cookie))
-                {
-                    // Run the generator on the indicated document
-                    FileNode node = (FileNode)this.projectMgr.NodeFromItemId(itemid);
-                    this.InvokeGenerator(node);
-                    if (!this.hasRunGenerator)
-                        this.hasRunGenerator=true;
-                }
-            }
-        }
-        #endregion
-        
-        #region virtual methods
-        /// 
-        /// Invokes the specified generator
-        /// 
-        /// The node on which to invoke the generator.
-        public /*protected internal, but public for FSharp.Project.dll*/ virtual void InvokeGenerator(FileNode fileNode)
-        {
-            if (fileNode == null)
-            {
-                throw new ArgumentNullException("node");
-            }
-
-            SingleFileGeneratorNodeProperties nodeproperties = fileNode.NodeProperties as SingleFileGeneratorNodeProperties;
-            if (nodeproperties == null)
-            {
-                throw new InvalidOperationException();
-            }
-
-            string customToolProgID = nodeproperties.CustomTool;
-            if (string.IsNullOrEmpty(customToolProgID))
-            {
-                return;
-            }
-
-            string customToolNamespace = nodeproperties.CustomToolNamespace;
-
-            try
-            {
-                if (!this.runningGenerator)
-                {
-                    //Get the buffer contents for the current node
-                    string moniker = fileNode.GetMkDocument();
-
-                    this.runningGenerator = true;
-
-                    //Get the generator
-                    IVsSingleFileGenerator generator;
-                    int generateDesignTimeSource;
-                    int generateSharedDesignTimeSource;
-                    int generateTempPE;
-                    SingleFileGeneratorFactory factory = new SingleFileGeneratorFactory(this.projectMgr.ProjectGuid, this.projectMgr.Site);
-                    ErrorHandler.ThrowOnFailure(factory.CreateGeneratorInstance(customToolProgID, out generateDesignTimeSource, out generateSharedDesignTimeSource, out generateTempPE, out generator));
-
-                    //Check to see if the generator supports siting
-                    IObjectWithSite objWithSite = generator as IObjectWithSite;
-                    if (objWithSite != null)
-                    {
-                        objWithSite.SetSite(fileNode.OleServiceProvider);
-                    }
-
-                    //Determine the namespace
-                    if (string.IsNullOrEmpty(customToolNamespace))
-                    {
-                        customToolNamespace = this.ComputeNamespace(moniker);
-                    }
-
-                    //Run the generator
-                    IntPtr[] output = new IntPtr[1];
-                    output[0] = IntPtr.Zero;
-                    uint outPutSize;
-                    string extension;
-                    ErrorHandler.ThrowOnFailure(generator.DefaultExtension(out extension));
-
-                    //Find if any dependent node exists
-                    string dependentNodeName = Path.GetFileNameWithoutExtension(fileNode.FileName) + extension;
-                    HierarchyNode dependentNode = fileNode.FirstChild;
-                    while (dependentNode != null)
-                    {
-                        if (string.Compare(dependentNode.ItemNode.GetMetadata(ProjectFileConstants.DependentUpon), fileNode.FileName, StringComparison.OrdinalIgnoreCase) == 0)
-                        {
-                            dependentNodeName = ((FileNode)dependentNode).FileName;
-                            break;
-                        }
-
-                        dependentNode = dependentNode.NextSibling;
-                    }
-
-                    //If you found a dependent node. 
-                    if (dependentNode != null)
-                    {
-                        //Then check out the node and dependent node from SCC
-                        if (!this.CanEditFile(dependentNode.GetMkDocument()))
-                        {
-                            throw Marshal.GetExceptionForHR(VSConstants.OLE_E_PROMPTSAVECANCELLED);
-                        }
-                    }
-                    else //It is a new node to be added to the project
-                    {
-                        // Check out the project file if necessary.
-                        if (!this.projectMgr.QueryEditProjectFile(false))
-                        {
-                            throw Marshal.GetExceptionForHR(VSConstants.OLE_E_PROMPTSAVECANCELLED);
-                        }
-                    }
-                    IVsTextStream stream;
-                    string inputFileContents = this.GetBufferContents(moniker, out stream);
-
-                    ErrorHandler.ThrowOnFailure(generator.Generate(moniker, inputFileContents, customToolNamespace, output, out outPutSize, this));
-                    byte[] data = new byte[outPutSize];
-
-                    if (output[0] != IntPtr.Zero)
-                    {
-                        Marshal.Copy(output[0], data, 0, (int)outPutSize);
-                        Marshal.FreeCoTaskMem(output[0]);
-                    }
-
-                    //Todo - Create a file and add it to the Project
-                    string fileToAdd = this.UpdateGeneratedCodeFile(fileNode, data, (int)outPutSize, dependentNodeName);
-                }
-            }
-            finally
-            {
-                this.runningGenerator = false;
-            }
-        }
-
-        /// 
-        /// Computes the names space based on the folder for the ProjectItem. It just replaces DirectorySeparatorCharacter
-        /// with "." for the directory in which the file is located.
-        /// 
-        /// Returns the computed name space
-        public /*protected, but public for FSharp.Project.dll*/ virtual string ComputeNamespace(string projectItemPath)
-        {
-            if (String.IsNullOrEmpty(projectItemPath))
-            {
-                throw new ArgumentException(SR.GetString(SR.ParameterCannotBeNullOrEmpty, CultureInfo.CurrentUICulture), "projectItemPath");
-            }
-
-
-            string nspace = "";
-            string filePath = Path.GetDirectoryName(projectItemPath);
-            string[] toks = filePath.Split(new char[] { ':', '\\' });
-            foreach (string tok in toks)
-            {
-                if (tok != "")
-                {
-                    string temp = tok.Replace(" ", "");
-                    nspace += (temp + ".");
-                }
-            }
-            nspace = nspace.Remove(nspace.LastIndexOf(".", StringComparison.Ordinal), 1);
-            return nspace;
-        }
-
-        /// 
-        /// This is called after the single file generator has been invoked to create or update the code file.
-        /// 
-        /// The node associated to the generator
-        /// data to update the file with
-        /// size of the data
-        /// Name of the file to update or create
-        /// full path of the file
-        public /*protected, but public for FSharp.Project.dll*/ virtual string UpdateGeneratedCodeFile(FileNode fileNode, byte[] data, int size, string fileName)
-        {
-            string filePath = Path.Combine(Path.GetDirectoryName(fileNode.GetMkDocument()), fileName);
-            IVsRunningDocumentTable rdt = this.projectMgr.GetService(typeof(SVsRunningDocumentTable)) as IVsRunningDocumentTable;
-
-            // (kberes) Shouldn't this be an InvalidOperationException instead with some not to annoying errormessage to the user?
-            if (rdt == null)
-            {
-                ErrorHandler.ThrowOnFailure(VSConstants.E_FAIL);
-            }
-
-            IVsHierarchy hier;
-            uint cookie;
-            uint itemid;
-            IntPtr docData = IntPtr.Zero;
-            try
-            {
-                ErrorHandler.ThrowOnFailure(rdt.FindAndLockDocument((uint)(_VSRDTFLAGS.RDT_NoLock), filePath, out hier, out itemid, out docData, out cookie));
-            }
-            catch (Exception)
-            {
-                if (docData != IntPtr.Zero) Marshal.Release(docData);
-                throw;
-            }
-
-            if (docData != IntPtr.Zero)
-            {
-                Marshal.Release(docData);
-                IVsTextStream srpStream;
-                string inputFileContents = this.GetBufferContents(filePath, out srpStream);
-                if (srpStream != null)
-                {
-                    int oldLen = 0;
-                    int hr = srpStream.GetSize(out oldLen);
-                    if (ErrorHandler.Succeeded(hr))
-                    {
-                        IntPtr dest = IntPtr.Zero;
-                        try
-                        {
-                            dest = Marshal.AllocCoTaskMem(data.Length);
-                            Marshal.Copy(data, 0, dest, data.Length);
-                            ErrorHandler.ThrowOnFailure(srpStream.ReplaceStream(0, oldLen, dest, size / 2));
-                        }
-                        finally
-                        {
-                            if (dest != IntPtr.Zero)
-                            {
-                                Marshal.FreeCoTaskMem(dest);
-                            }
-                        }
-                    }
-                }
-            }
-            else
-            {
-                using (FileStream generatedFileStream = File.Open(filePath, FileMode.OpenOrCreate))
-                {
-                    generatedFileStream.Write(data, 0, size);
-                }
-
-                EnvDTE.ProjectItem projectItem = fileNode.GetAutomationObject() as EnvDTE.ProjectItem;
-                if (projectItem != null && (this.projectMgr.FindChild(fileNode.FileName) == null))
-                {
-                    projectItem.ProjectItems.AddFromFile(filePath);
-                }
-            }
-            return filePath;
-        }
-        #endregion
-
-        #region helpers
-        /// 
-        /// Returns the buffer contents for a moniker.
-        /// 
-        /// Buffer contents
-        private string GetBufferContents(string fileName, out IVsTextStream srpStream)
-        {
-            Guid CLSID_VsTextBuffer = new Guid("{8E7B96A8-E33D-11d0-A6D5-00C04FB67F6A}");
-            string bufferContents = "";
-            srpStream = null;
-
-            IVsRunningDocumentTable rdt = this.projectMgr.GetService(typeof(SVsRunningDocumentTable)) as IVsRunningDocumentTable;
-            if (rdt != null)
-            {
-                IVsHierarchy hier;
-                IVsPersistDocData persistDocData;
-                uint itemid, cookie;
-                bool docInRdt = true;
-                IntPtr docData = IntPtr.Zero;
-                int hr = NativeMethods.E_FAIL;
-                try
-                {
-                    //Getting a read lock on the document. Must be released later.
-                    hr = rdt.FindAndLockDocument((uint)_VSRDTFLAGS.RDT_ReadLock, fileName, out hier, out itemid, out docData, out cookie);
-                    if (ErrorHandler.Failed(hr) || docData == IntPtr.Zero)
-                    {
-                        Guid iid = VSConstants.IID_IUnknown;
-                        cookie = 0;
-                        docInRdt = false;
-                        ILocalRegistry localReg = this.projectMgr.GetService(typeof(SLocalRegistry)) as ILocalRegistry;
-                        ErrorHandler.ThrowOnFailure(localReg.CreateInstance(CLSID_VsTextBuffer, null, ref iid, (uint)CLSCTX.CLSCTX_INPROC_SERVER, out docData));
-                    }
-
-                    persistDocData = Marshal.GetObjectForIUnknown(docData) as IVsPersistDocData;
-                }
-                finally
-                {
-                    if (docData != IntPtr.Zero)
-                    {
-                        Marshal.Release(docData);
-                    }
-                }
-
-                //Try to get the Text lines
-                IVsTextLines srpTextLines = persistDocData as IVsTextLines;
-                if (srpTextLines == null)
-                {
-                    // Try getting a text buffer provider first
-                    IVsTextBufferProvider srpTextBufferProvider = persistDocData as IVsTextBufferProvider;
-                    if (srpTextBufferProvider != null)
-                    {
-                        hr = srpTextBufferProvider.GetTextBuffer(out srpTextLines);
-                    }
-                }
-
-                if (ErrorHandler.Succeeded(hr))
-                {
-                    srpStream = srpTextLines as IVsTextStream;
-                    if (srpStream != null)
-                    {
-                        // QI for IVsBatchUpdate and call FlushPendingUpdates if they support it
-                        IVsBatchUpdate srpBatchUpdate = srpStream as IVsBatchUpdate;
-                        if (srpBatchUpdate != null)
-                            srpBatchUpdate.FlushPendingUpdates(0);
-
-                        int lBufferSize = 0;
-                        hr = srpStream.GetSize(out lBufferSize);
-
-                        if (ErrorHandler.Succeeded(hr))
-                        {
-                            IntPtr dest = IntPtr.Zero;
-                            try
-                            {
-                                // Note that GetStream returns Unicode to us so we don't need to do any conversions
-                                dest = Marshal.AllocCoTaskMem((lBufferSize + 1) * 2);
-                                ErrorHandler.ThrowOnFailure(srpStream.GetStream(0, lBufferSize, dest));
-                                //Get the contents
-                                bufferContents = Marshal.PtrToStringUni(dest);
-                            }
-                            finally
-                            {
-                                if (dest != IntPtr.Zero)
-                                    Marshal.FreeCoTaskMem(dest);
-                            }
-                        }
-                    }
-
-                }
-                // Unlock the document in the RDT if necessary
-                if (docInRdt && rdt != null)
-                {
-                    ErrorHandler.ThrowOnFailure(rdt.UnlockDocument((uint)(_VSRDTFLAGS.RDT_ReadLock | _VSRDTFLAGS.RDT_Unlock_NoSave), cookie));
-                }
-
-                if (ErrorHandler.Failed(hr))
-                {
-                    // If this failed then it's probably not a text file.  In that case,
-                    // we just read the file as a binary
-                    bufferContents = File.ReadAllText(fileName);
-                }
-
-
-            }
-            return bufferContents;
-        }
-
-        /// 
-        /// Returns TRUE if open and dirty. Note that documents can be open without a
-        /// window frame so be careful. Returns the DocData and doc cookie if requested
-        /// 
-        /// document path
-        /// hierarchy
-        /// doc data associated with document
-        /// item cookie
-        /// True if FIle is dirty
-        private bool VerifyFileDirtyInRdt(string document, out IVsHierarchy pHier, out IVsPersistDocData ppDocData, out uint cookie)
-        {
-            int ret = 0;
-            pHier = null;
-            ppDocData = null;
-            cookie = 0;
-
-            IVsRunningDocumentTable rdt = this.projectMgr.GetService(typeof(IVsRunningDocumentTable)) as IVsRunningDocumentTable;
-            if (rdt != null)
-            {
-                IntPtr docData = IntPtr.Zero;
-                uint dwCookie = 0;
-                IVsHierarchy srpHier;
-                uint itemid = VSConstants.VSITEMID_NIL;
-
-                try
-                {
-                    ErrorHandler.ThrowOnFailure(rdt.FindAndLockDocument((uint)_VSRDTFLAGS.RDT_NoLock, document, out srpHier, out itemid, out docData, out dwCookie));
-                    IVsPersistHierarchyItem srpIVsPersistHierarchyItem = srpHier as IVsPersistHierarchyItem;
-                    if (srpIVsPersistHierarchyItem != null)
-                    {
-                        // Found in the RDT. See if it is dirty
-                        try
-                        {
-                            ErrorHandler.ThrowOnFailure(srpIVsPersistHierarchyItem.IsItemDirty(itemid, docData, out ret));
-                            cookie = dwCookie;
-                            ppDocData = Marshal.GetObjectForIUnknown(docData) as IVsPersistDocData;
-                        }
-                        finally
-                        {
-                            pHier = srpHier;
-                        }
-                    }
-                }
-                finally
-                {
-                    if (docData != IntPtr.Zero)
-                    {
-                        Marshal.Release(docData);
-                    }
-                }
-            }
-            return (ret == 1);
-        }
-        #endregion
-        
-
-
-
-        #region QueryEditQuerySave helpers
-        /// 
-        /// This function asks to the QueryEditQuerySave service if it is possible to
-        /// edit the file.
-        /// 
-        private bool CanEditFile(string documentMoniker)
-        {
-            Debug.WriteLine(string.Format(CultureInfo.CurrentCulture, "\t**** CanEditFile called ****"));
-
-            // Check the status of the recursion guard
-            if (this.gettingCheckoutStatus)
-            {
-                return false;
-            }
-
-            try
-            {
-                // Set the recursion guard
-                this.gettingCheckoutStatus = true;
-
-                // Get the QueryEditQuerySave service
-                IVsQueryEditQuerySave2 queryEditQuerySave = (IVsQueryEditQuerySave2)this.projectMgr.GetService(typeof(SVsQueryEditQuerySave));
-
-                // Now call the QueryEdit method to find the edit status of this file
-                string[] documents = { documentMoniker };
-                uint result;
-                uint outFlags;
-
-                // Note that this function can popup a dialog to ask the user to checkout the file.
-                // When this dialog is visible, it is possible to receive other request to change
-                // the file and this is the reason for the recursion guard.
-                int hr = queryEditQuerySave.QueryEditFiles(
-                    0,              // Flags
-                    1,              // Number of elements in the array
-                    documents,      // Files to edit
-                    null,           // Input flags
-                    null,           // Input array of VSQEQS_FILE_ATTRIBUTE_DATA
-                    out result,     // result of the checkout
-                    out outFlags    // Additional flags
-                );
-
-                if (ErrorHandler.Succeeded(hr) && (result == (uint)tagVSQueryEditResult.QER_EditOK))
-                {
-                    // In this case (and only in this case) we can return true from this function.
-                    return true;
-                }
-            }
-            finally
-            {
-                this.gettingCheckoutStatus = false;
-            }
-
-            return false;
-        }        
-        #endregion
-    }
-}
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SingleFileGeneratorFactory.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SingleFileGeneratorFactory.cs
deleted file mode 100644
index 593d9440669..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SingleFileGeneratorFactory.cs
+++ /dev/null
@@ -1,360 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if SINGLE_FILE_GENERATOR
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem
-{
-    using System;
-    using System.Runtime.InteropServices;
-    using System.Collections.Generic;
-    using System.IO;
-    using System.Diagnostics;
-    using System.Globalization;
-    using Microsoft.VisualStudio.Shell;
-    using Microsoft.VisualStudio.Shell.Interop;
-    using Microsoft.VisualStudio.OLE.Interop;
-    using Microsoft.VisualStudio.TextManager.Interop;
-    using Microsoft.Win32;
-
-    using VSRegistry = Microsoft.VisualStudio.Shell.VSRegistry;
-
-    /// 
-    /// Provides implementation IVsSingleFileGeneratorFactory for
-    /// 
-    internal class SingleFileGeneratorFactory : IVsSingleFileGeneratorFactory
-    {
-        #region nested types
-        private class GeneratorMetaData
-        {
-            #region fields
-            private Guid generatorClsid = Guid.Empty;
-            private int generatesDesignTimeSource = -1;
-            private int generatesSharedDesignTimeSource = -1;
-            private int useDesignTimeCompilationFlag = -1;
-            object generator = null;
-            #endregion
-
-            #region ctor
-            /// 
-            /// Constructor
-            /// 
-            public GeneratorMetaData()
-            {
-            }
-            #endregion
-
-            #region Public Properties
-            /// 
-            /// Generator instance
-            /// 
-            public Object Generator
-            {
-                get
-                {
-                    return generator;
-                }
-                set
-                {
-                    generator = value;
-                }
-            }
-
-            /// 
-            /// GeneratesDesignTimeSource reg value name under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[VsVer]\Generators\[ProjFacGuid]\[GeneratorProgId]
-            /// 
-            public int GeneratesDesignTimeSource
-            {
-                get
-                {
-                    return generatesDesignTimeSource;
-                }
-                set
-                {
-                    generatesDesignTimeSource = value;
-                }
-            }
-
-            /// 
-            /// GeneratesSharedDesignTimeSource reg value name under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[VsVer]\Generators\[ProjFacGuid]\[GeneratorProgId]
-            /// 
-            public int GeneratesSharedDesignTimeSource
-            {
-                get
-                {
-                    return generatesSharedDesignTimeSource;
-                }
-                set
-                {
-                    generatesSharedDesignTimeSource = value;
-                }
-            }
-
-            /// 
-            /// UseDesignTimeCompilationFlag reg value name under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[VsVer]\Generators\[ProjFacGuid]\[GeneratorProgId]
-            /// 
-            public int UseDesignTimeCompilationFlag
-            {
-                get
-                {
-                    return useDesignTimeCompilationFlag;
-                }
-                set
-                {
-                    useDesignTimeCompilationFlag = value;
-                }
-            }
-
-            /// 
-            /// Generator Class ID.
-            /// 
-            public Guid GeneratorClsid
-            {
-                get
-                {
-                    return generatorClsid;
-                }
-                set
-                {
-                    generatorClsid = value;
-                }
-            }
-            #endregion
-        }
-        #endregion
-
-        #region fields
-        /// 
-        /// Base generator registry key for MPF based project
-        /// 
-        private RegistryKey baseGeneratorRegistryKey = null;
-
-        /// 
-        /// CLSID reg value name under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[VsVer]\Generators\[ProjFacGuid]\[GeneratorProgId]
-        /// 
-        private string GeneratorClsid = "CLSID";
-
-        /// 
-        /// GeneratesDesignTimeSource reg value name under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[VsVer]\Generators\[ProjFacGuid]\[GeneratorProgId]
-        /// 
-        private string GeneratesDesignTimeSource = "GeneratesDesignTimeSource";
-
-        /// 
-        /// GeneratesSharedDesignTimeSource reg value name under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[VsVer]\Generators\[ProjFacGuid]\[GeneratorProgId]
-        /// 
-        private string GeneratesSharedDesignTimeSource = "GeneratesSharedDesignTimeSource";
-
-        /// 
-        /// UseDesignTimeCompilationFlag reg value name under HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\[VsVer]\Generators\[ProjFacGuid]\[GeneratorProgId]
-        /// 
-        private string UseDesignTimeCompilationFlag = "UseDesignTimeCompilationFlag";
-
-        /// 
-        /// Caches all the generators registered for the project type.
-        /// 
-        private Dictionary generatorsMap = new Dictionary();
-
-        /// 
-        /// The project type guid of the associated project.
-        /// 
-        private Guid projectType;
-
-        /// 
-        /// A service provider
-        /// 
-        private System.IServiceProvider serviceProvider;
-        #endregion
-
-        #region ctors
-        /// 
-        /// Constructor for SingleFileGeneratorFactory
-        /// 
-        /// The project type guid of the associated project.
-        /// A service provider.
-        public SingleFileGeneratorFactory(Guid projectType, System.IServiceProvider serviceProvider)
-        {
-            this.projectType = projectType;
-            this.serviceProvider = serviceProvider;
-        }
-        #endregion
-
-        #region properties
-        /// 
-        /// Defines the project type guid of the associated project.
-        /// 
-        public Guid ProjectGuid
-        {
-            get { return this.projectType; }
-            set { this.projectType = value; }
-        }
-
-        /// 
-        /// Defines an associated service provider.
-        /// 
-        public System.IServiceProvider ServiceProvider
-        {
-            get { return this.serviceProvider; }
-            set { this.serviceProvider = value; }
-        }
-        #endregion
-
-        #region IVsSingleFileGeneratorFactory Helpers
-        /// 
-        /// Returns the project generator key under [VS-ConfigurationRoot]]\Generators
-        /// 
-        private RegistryKey BaseGeneratorsKey
-        {
-            get
-            {
-                if (this.baseGeneratorRegistryKey == null)
-                {
-                    using (RegistryKey root = VSRegistry.RegistryRoot(__VsLocalRegistryType.RegType_Configuration))
-                    {
-                        if (null != root)
-                        {
-                            string regPath = "Generators\\" + this.ProjectGuid.ToString("B");
-                            baseGeneratorRegistryKey = root.OpenSubKey(regPath);
-                        }
-                    }
-                }
-
-                return this.baseGeneratorRegistryKey;
-            }
-        }
-
-        /// 
-        /// Returns the local registry instance
-        /// 
-        private ILocalRegistry LocalRegistry
-        {
-            get
-            {
-                return this.serviceProvider.GetService(typeof(SLocalRegistry)) as ILocalRegistry;
-            }
-        }
-        #endregion
-
-        #region IVsSingleFileGeneratorFactory Members
-        /// 
-        /// Creates an instance of the single file generator requested
-        /// 
-        /// prog id of the generator to be created. For e.g HKLM\SOFTWARE\Microsoft\VisualStudio\9.0Exp\Generators\[prjfacguid]\[wszProgId]
-        /// GeneratesDesignTimeSource key value
-        /// GeneratesSharedDesignTimeSource key value
-        /// UseDesignTimeCompilationFlag key value
-        /// IVsSingleFileGenerator interface
-        /// S_OK if succesful
-        public virtual int CreateGeneratorInstance(string progId, out int generatesDesignTimeSource, out int generatesSharedDesignTimeSource, out int useTempPEFlag, out IVsSingleFileGenerator generate)
-        {
-            Guid genGuid;
-            ErrorHandler.ThrowOnFailure(this.GetGeneratorInformation(progId, out generatesDesignTimeSource, out generatesSharedDesignTimeSource, out useTempPEFlag, out genGuid));
-
-            //Create the single file generator and pass it out. Check to see if it is in the cache
-            if (!this.generatorsMap.ContainsKey(progId) || ((this.generatorsMap[progId]).Generator == null))
-            {
-                Guid riid = VSConstants.IID_IUnknown;
-                uint dwClsCtx = (uint)CLSCTX.CLSCTX_INPROC_SERVER;
-                IntPtr genIUnknown = IntPtr.Zero;
-                //create a new one.
-                ErrorHandler.ThrowOnFailure(this.LocalRegistry.CreateInstance(genGuid, null, ref riid, dwClsCtx, out genIUnknown));
-                if (genIUnknown != IntPtr.Zero)
-                {
-                    try
-                    {
-                        object generator = Marshal.GetObjectForIUnknown(genIUnknown);
-                        //Build the generator meta data object and cache it.
-                        GeneratorMetaData genData = new GeneratorMetaData();
-                        genData.GeneratesDesignTimeSource = generatesDesignTimeSource;
-                        genData.GeneratesSharedDesignTimeSource = generatesSharedDesignTimeSource;
-                        genData.UseDesignTimeCompilationFlag = useTempPEFlag;
-                        genData.GeneratorClsid = genGuid;
-                        genData.Generator = generator;
-                        this.generatorsMap[progId] = genData;
-                    }
-                    finally
-                    {
-                        Marshal.Release(genIUnknown);
-                    }
-                }
-            }
-
-            generate = (this.generatorsMap[progId]).Generator as IVsSingleFileGenerator;
-
-            return VSConstants.S_OK;
-        }
-
-        /// 
-        /// Gets the default generator based on the file extension. HKLM\Software\Microsoft\VS\9.0\Generators\[prjfacguid]\.extension
-        /// 
-        /// File name with extension
-        /// The generator prog ID
-        /// S_OK if successful
-        public virtual int GetDefaultGenerator(string filename, out string progID)
-        {
-            progID = "";
-            return VSConstants.E_NOTIMPL;
-        }
-
-        /// 
-        /// Gets the generator information.
-        /// 
-        /// prog id of the generator to be created. For e.g HKLM\SOFTWARE\Microsoft\VisualStudio\9.0Exp\Generators\[prjfacguid]\[wszProgId]
-        /// GeneratesDesignTimeSource key value
-        /// GeneratesSharedDesignTimeSource key value
-        /// UseDesignTimeCompilationFlag key value
-        /// CLSID key value
-        /// S_OK if succesful
-        public virtual int GetGeneratorInformation(string progId, out int generatesDesignTimeSource, out int generatesSharedDesignTimeSource, out int useTempPEFlag, out Guid guidGenerator)
-        {
-            RegistryKey genKey;
-            generatesDesignTimeSource = -1;
-            generatesSharedDesignTimeSource = -1;
-            useTempPEFlag = -1;
-            guidGenerator = Guid.Empty;
-            if (string.IsNullOrEmpty(progId))
-                return VSConstants.S_FALSE;
-
-            //Create the single file generator and pass it out.
-            if (!this.generatorsMap.ContainsKey(progId))
-            {
-                // We have to check whether the BaseGeneratorkey returns null.
-                RegistryKey tempBaseGeneratorKey = this.BaseGeneratorsKey;
-                if (tempBaseGeneratorKey == null || (genKey = tempBaseGeneratorKey.OpenSubKey(progId)) == null)
-                {
-                    return VSConstants.S_FALSE;
-                }
-
-                //Get the CLSID
-                string guid = (string)genKey.GetValue(GeneratorClsid, "");
-                if (string.IsNullOrEmpty(guid))
-                    return VSConstants.S_FALSE;
-
-                GeneratorMetaData genData = new GeneratorMetaData();
-
-                genData.GeneratorClsid = guidGenerator = new Guid(guid);
-                //Get the GeneratesDesignTimeSource flag. Assume 0 if not present.
-                genData.GeneratesDesignTimeSource = generatesDesignTimeSource = (int)genKey.GetValue(this.GeneratesDesignTimeSource, 0);
-                //Get the GeneratesSharedDesignTimeSource flag. Assume 0 if not present.
-                genData.GeneratesSharedDesignTimeSource = generatesSharedDesignTimeSource = (int)genKey.GetValue(GeneratesSharedDesignTimeSource, 0);
-                //Get the UseDesignTimeCompilationFlag flag. Assume 0 if not present.
-                genData.UseDesignTimeCompilationFlag = useTempPEFlag = (int)genKey.GetValue(UseDesignTimeCompilationFlag, 0);
-                this.generatorsMap.Add(progId, genData);
-            }
-            else
-            {
-                GeneratorMetaData genData = this.generatorsMap[progId];
-                generatesDesignTimeSource = genData.GeneratesDesignTimeSource;
-                //Get the GeneratesSharedDesignTimeSource flag. Assume 0 if not present.
-                generatesSharedDesignTimeSource = genData.GeneratesSharedDesignTimeSource;
-                //Get the UseDesignTimeCompilationFlag flag. Assume 0 if not present.
-                useTempPEFlag = genData.UseDesignTimeCompilationFlag;
-                //Get the CLSID
-                guidGenerator = genData.GeneratorClsid;
-            }
-
-            return VSConstants.S_OK;
-        }
-        #endregion
-
-    }
-}
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SolutionListener.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SolutionListener.cs
index 595823a31d5..61fe292941b 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SolutionListener.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SolutionListener.cs
@@ -25,8 +25,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
 
     internal abstract class SolutionListener : IVsSolutionEvents3, IVsSolutionEvents4, IDisposable
     {
-
-        #region fields
         private uint eventsCookie = (uint)ShellConstants.VSCOOKIE_NIL;
         private IVsSolution solution = null;
         private IServiceProvider serviceProvider = null;
@@ -35,10 +33,8 @@ internal abstract class SolutionListener : IVsSolutionEvents3, IVsSolutionEvents
         /// Defines an object that will be a mutex for this object for synchronizing thread calls.
         /// 
         private static volatile object Mutex = new object();
-        #endregion
 
-        #region ctors
-        public /*protected, but public for FSharp.Project.dll*/ SolutionListener(IServiceProvider serviceProvider)
+        public SolutionListener(IServiceProvider serviceProvider)
         {
 
             this.serviceProvider = serviceProvider;
@@ -51,10 +47,8 @@ internal abstract class SolutionListener : IVsSolutionEvents3, IVsSolutionEvents
                 throw new InvalidOperationException();
             }
         }
-        #endregion
 
-        #region properties
-        public /*protected, but public for FSharp.Project.dll*/ uint EventsCookie
+        public uint EventsCookie
         {
             get
             {
@@ -62,7 +56,7 @@ internal abstract class SolutionListener : IVsSolutionEvents3, IVsSolutionEvents
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ IVsSolution Solution
+        public IVsSolution Solution
         {
             get
             {
@@ -70,16 +64,14 @@ internal abstract class SolutionListener : IVsSolutionEvents3, IVsSolutionEvents
             }
         }
 
-        public /*protected, but public for FSharp.Project.dll*/ IServiceProvider ServiceProvider
+        public IServiceProvider ServiceProvider
         {
             get
             {
                 return this.serviceProvider;
             }
         }
-        #endregion
 
-        #region IVsSolutionEvents3, IVsSolutionEvents2, IVsSolutionEvents methods
         public virtual int OnAfterCloseSolution(object reserved)
         {
             return VSConstants.E_NOTIMPL;
@@ -154,9 +146,7 @@ public virtual int OnQueryUnloadProject(IVsHierarchy pRealHierarchy, ref int can
         {
             return VSConstants.E_NOTIMPL;
         }
-        #endregion
 
-        #region IVsSolutionEvents4 methods
         public virtual int OnAfterAsynchOpenProject(IVsHierarchy hierarchy, int added)
         {
             return VSConstants.E_NOTIMPL;
@@ -179,22 +169,13 @@ public virtual int OnQueryChangeProjectParent(IVsHierarchy hierarchy, IVsHierarc
         {
             return VSConstants.E_NOTIMPL;
         }
-        #endregion
-
-        #region Dispose        
 
-        /// 
-        /// The IDispose interface Dispose method for disposing the object determinastically.
-        /// 
         public void Dispose()
         {
             this.Dispose(true);
             GC.SuppressFinalize(this);
         }
 
-        #endregion
-
-        #region methods
         public void Init()
         {
             if (this.solution != null)
@@ -207,7 +188,7 @@ public void Init()
         /// The method that does the cleanup.
         /// 
         /// 
-        public /*protected, but public for FSharp.Project.dll*/ virtual void Dispose(bool disposing)
+        public virtual void Dispose(bool disposing)
         {
             // Everybody can go here.
             if (!this.isDisposed)
@@ -228,6 +209,5 @@ public void Init()
                 }
             }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SolutionListenerForBuildDependencyUpdate.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SolutionListenerForBuildDependencyUpdate.cs
deleted file mode 100644
index 3b1e04f83cb..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SolutionListenerForBuildDependencyUpdate.cs
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-
-#if UNUSED_NESTED_PROJECTS
-using Microsoft.VisualStudio.Shell.Interop;
-using System;
-using System.Collections.Generic;
-using System.Diagnostics;
-using System.Globalization;
-using System.Runtime.InteropServices;
-using System.Security;
-using System.Windows;
-using Microsoft.VisualStudio.OLE.Interop;
-using Microsoft.VisualStudio.Shell;
-using System.Drawing;
-using System.IO;
-using System.Windows.Forms;
-using System.Collections;
-using System.Text;
-using IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider;
-using IServiceProvider = System.IServiceProvider;
-using ShellConstants = Microsoft.VisualStudio.Shell.Interop.Constants;
-using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants;
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem
-{
-    /// 
-    /// The purpose of this class is to set a build dependency from a modeling project to all its sub projects
-    /// 
-    internal class SolutionListenerForBuildDependencyUpdate : SolutionListener
-    {
-        #region ctors
-        public SolutionListenerForBuildDependencyUpdate(IServiceProvider serviceProvider) : base(serviceProvider)
-        {
-        }
-        #endregion
-
-        #region overridden methods
-        /// 
-        /// Update build dependency list if solution is fully loaded
-        /// 
-        /// 
-        /// 
-        /// 
-        public override int OnAfterOpenProject(IVsHierarchy hierarchy, int added)
-        {
-            // Return from here if we are at load time
-            if (added == 0)
-            {
-                return VSConstants.S_OK;
-            }
-
-            IBuildDependencyOnProjectContainer projectNode = hierarchy as IBuildDependencyOnProjectContainer;
-
-            // We will update only nested project types and the BuildNestedProjectsOnBuild flag is set to true
-            if (projectNode != null)
-            {
-                if (projectNode.BuildNestedProjectsOnBuild)
-                {
-                    // Enum all sub projects and add to dependency list
-                    UpdateDependencyListWithSubProjects(projectNode);
-                }
-            }
-            return VSConstants.S_OK;
-        }
-
-        /// 
-        /// Called at load time when solution has finished opening.
-        /// 
-        /// reserved
-        /// true if this is a new solution
-        /// 
-        public override int OnAfterOpenSolution(object pUnkReserved, int fNewSolution)
-        {
-            // Enum all sub project and add to dependeny list
-            UpdateDependencyListWithSubProjects(null);
-
-            return VSConstants.S_OK;
-        }
-        #endregion
-
-        #region Helper methods
-        /// 
-        /// Update dependency list
-        /// 
-        /// Project node to be updated. If null then all ProjectContainer nodes are updated
-        private void UpdateDependencyListWithSubProjects(IBuildDependencyOnProjectContainer projectNode)
-        {
-            if (projectNode != null)
-            {
-                // Get list of sub projects
-                IList nestedProjectList = projectNode.EnumNestedHierachiesForBuildDependency();
-                if (nestedProjectList != null && nestedProjectList.Count > 0)
-                {
-                    // Loop nested projects and add project dependency (if supported)
-                    foreach (IVsHierarchy nestedProject in nestedProjectList)
-                    {
-                        AddBuildDependenyToNestedProject(projectNode as IBuildDependencyUpdate, nestedProject);
-                    }
-                }
-            }
-            else
-            {
-                // Update all ProjectContainerNode nodes
-                List projectList = this.GetListOfProjectContainerNodes();
-                if (projectList != null && projectList.Count > 0)
-                {
-                    foreach (IBuildDependencyOnProjectContainer project in projectList)
-                    {
-                        UpdateDependencyListWithSubProjects(project);
-                    }
-                }
-            }
-        }
-
-        /// 
-        /// Enum all projects in the solution and collect all that derives from ProjectContainerNode
-        /// 
-        /// List of ProjectContainerNode nodes
-        private List GetListOfProjectContainerNodes()
-        {
-            List projectList = new List();
-
-            Debug.Assert(this.Solution != null, "IVsSolution object not set on this object");
-            if (this.Solution == null)
-            {
-                // Bad state, so we quit
-                return projectList;
-            }
-
-            // Enum projects loaded in the solution (normal projects only)
-            IEnumHierarchies enumHierarchies = null;
-            Guid guid = Guid.Empty;
-            __VSENUMPROJFLAGS flags = __VSENUMPROJFLAGS.EPF_LOADEDINSOLUTION;
-            ErrorHandler.ThrowOnFailure(this.Solution.GetProjectEnum((uint)flags, ref guid, out enumHierarchies));
-
-            if (enumHierarchies != null)
-            {
-                // Loop projects found
-                IVsHierarchy[] hierarchy = new IVsHierarchy[1];
-                uint fetched = 0;
-                while (enumHierarchies.Next(1, hierarchy, out fetched) == VSConstants.S_OK && fetched == 1)
-                {
-                    // If this is a ProjectContainerNode then add to list
-                    IBuildDependencyOnProjectContainer projectNode = hierarchy[0] as IBuildDependencyOnProjectContainer;
-                    if (projectNode != null)
-                    {
-                        projectList.Add(projectNode);
-                    }
-                }
-            }
-
-            return projectList;
-        }
-
-        /// 
-        /// Add build dependency to ProjectContainerNode if IVsBuildDependency is supported by the nested project
-        /// 
-        /// Project Container where we should add the build dependency
-        /// Nested project to set a build dependency against
-        private void AddBuildDependenyToNestedProject(IBuildDependencyUpdate projectContainer, IVsHierarchy nestedProject)
-        {
-            // Validate input
-            Debug.Assert(projectContainer != null, "Project Container must not be null");
-            Debug.Assert(nestedProject != null, "Nested Project must not be null");
-            if (projectContainer == null || nestedProject == null)
-            {
-                // Invalid argument
-                return;
-            }
-
-            // Create new NestedProjectBuildDependency
-            NestedProjectBuildDependency dependency = new NestedProjectBuildDependency(nestedProject);
-            projectContainer.AddBuildDependency(dependency);
-        }
-
-        #endregion
-
-    }
-}
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SolutionListenerForProjectEvents.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SolutionListenerForProjectEvents.cs
index f57422f8644..78c18b84095 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SolutionListenerForProjectEvents.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SolutionListenerForProjectEvents.cs
@@ -27,7 +27,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     /// 
     internal class SolutionListenerForProjectEvents : SolutionListener, IProjectEvents
     {
-        #region events
         /// 
         /// Event raised just after the project file opened.
         /// 
@@ -37,16 +36,12 @@ internal class SolutionListenerForProjectEvents : SolutionListener, IProjectEven
         /// Event raised before the project file closed.
         /// 
         public event EventHandler BeforeProjectFileClosed;
-        #endregion
 
-        #region ctor
-        /*internal, but public for FSharp.Project.dll*/ public SolutionListenerForProjectEvents(IServiceProvider serviceProvider)
+        public SolutionListenerForProjectEvents(IServiceProvider serviceProvider)
             : base(serviceProvider)
         {
         }
-        #endregion
 
-        #region overridden methods
         public override int OnAfterOpenProject(IVsHierarchy hierarchy, int added)
         {
             IProjectEventsListener projectEventListener = hierarchy as IProjectEventsListener;
@@ -68,9 +63,7 @@ public override int OnBeforeCloseProject(IVsHierarchy hierarchy, int removed)
 
             return VSConstants.S_OK;
         }
-        #endregion
 
-        #region helpers
         /// 
         /// Raises after project file opened event.
         /// 
@@ -102,5 +95,4 @@ private void RaiseBeforeProjectFileClosed(bool removed)
             }
         }
     }
-    #endregion
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SolutionListenerForProjectReferenceUpdate.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SolutionListenerForProjectReferenceUpdate.cs
index 31af9c32240..6afa81da107 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SolutionListenerForProjectReferenceUpdate.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/SolutionListenerForProjectReferenceUpdate.cs
@@ -25,14 +25,10 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
 {
     internal class SolutionListenerForProjectReferenceUpdate : SolutionListener
     {
-        #region ctor
         public SolutionListenerForProjectReferenceUpdate(IServiceProvider serviceProvider)
             : base(serviceProvider)
         {
         }
-        #endregion
-
-        #region overridden methods
 
         /// 
         /// Notifies listening clients that the project has been opened. 
@@ -188,9 +184,6 @@ public override int OnBeforeUnloadProject(IVsHierarchy realHierarchy, IVsHierarc
 
         }
 
-        #endregion
-
-        #region helper methods
         private List GetProjectReferencesContainingThisProject(IVsHierarchy inputHierarchy)
         {
             List projectReferences = new List();
@@ -268,6 +261,5 @@ private ProjectReferenceNode GetProjectReferenceOnNodeForHierarchy(IList
     /// Defines possible types of output that can produced by a language project
     /// 
@@ -343,56 +340,42 @@ internal enum GlobalProperty
         SqmSessionGuid
     }
 
-	#endregion
-
     public class AfterProjectFileOpenedEventArgs : EventArgs
     {
-        #region fields
         private bool added;
-        #endregion
 
-        #region properties
         /// 
         /// True if the project is added to the solution after the solution is opened. false if the project is added to the solution while the solution is being opened.
         /// 
         [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        /*internal, but public for FSharp.Project.dll*/ public bool Added
+        public bool Added
         {
             get { return this.added; }
         }
-        #endregion
 
-        #region ctor
-        /*internal, but public for FSharp.Project.dll*/ public AfterProjectFileOpenedEventArgs(bool added)
+        public AfterProjectFileOpenedEventArgs(bool added)
         {
             this.added = added;
         }
-        #endregion
     }
 
     public class BeforeProjectFileClosedEventArgs : EventArgs
     {
-        #region fields
         private bool removed;
-        #endregion
 
-        #region properties
         /// 
         /// true if the project was removed from the solution before the solution was closed. false if the project was removed from the solution while the solution was being closed.
         /// 
         [SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
-        /*internal, but public for FSharp.Project.dll*/ public bool Removed
+        public bool Removed
         {
             get { return this.removed; }
         }
-        #endregion
 
-        #region ctor
-        /*internal, but public for FSharp.Project.dll*/ public BeforeProjectFileClosedEventArgs(bool removed)
+        public BeforeProjectFileClosedEventArgs(bool removed)
         {
             this.removed = removed;
         }
-        #endregion
     }
 
     /// 
@@ -402,7 +385,7 @@ internal class HierarchyNodeEventArgs : EventArgs
     {
         private HierarchyNode child;
 
-        /*internal, but public for FSharp.Project.dll*/ public HierarchyNodeEventArgs(HierarchyNode child)
+        public HierarchyNodeEventArgs(HierarchyNode child)
         {
             this.child = child;
         }
@@ -418,7 +401,6 @@ public HierarchyNode Child
     /// 
     internal class FileChangedOnDiskEventArgs : EventArgs
     {
-        #region Private fields
         /// 
         /// File name that was changed on disk.
         /// 
@@ -433,14 +415,13 @@ internal class FileChangedOnDiskEventArgs : EventArgs
         /// The reason the file has changed on disk.
         /// 
         private _VSFILECHANGEFLAGS fileChangeFlag;
-        #endregion
 
         /// 
         /// Constructs a new event args.
         /// 
         /// File name that was changed on disk.
         /// The item id of the file that was changed on disk.
-        /*internal, but public for FSharp.Project.dll*/ public FileChangedOnDiskEventArgs(string fileName, uint id, _VSFILECHANGEFLAGS flag)
+        public FileChangedOnDiskEventArgs(string fileName, uint id, _VSFILECHANGEFLAGS flag)
         {
             this.fileName = fileName;
             this.itemID = id;
@@ -451,7 +432,7 @@ internal class FileChangedOnDiskEventArgs : EventArgs
         /// Gets the file name that was changed on disk.
         /// 
         /// The file that was changed on disk.
-        /*internal, but public for FSharp.Project.dll*/ public string FileName
+        public string FileName
         {
             get
             {
@@ -463,7 +444,7 @@ internal class FileChangedOnDiskEventArgs : EventArgs
         /// Gets item id of the file that has changed
         /// 
         /// The file that was changed on disk.
-        /*internal, but public for FSharp.Project.dll*/ public uint ItemID
+        public uint ItemID
         {
             get
             {
@@ -475,7 +456,7 @@ internal class FileChangedOnDiskEventArgs : EventArgs
         /// The reason while the file has chnaged on disk.
         /// 
         /// The reason while the file has chnaged on disk.
-        /*internal, but public for FSharp.Project.dll*/ public _VSFILECHANGEFLAGS FileChangeFlag
+        public _VSFILECHANGEFLAGS FileChangeFlag
         {
             get
             {
@@ -489,18 +470,16 @@ internal class FileChangedOnDiskEventArgs : EventArgs
     /// 
     internal class ActiveConfigurationChangedEventArgs : EventArgs
     {
-        #region Private fields
         /// 
         /// The hierarchy whose configuration has changed 
         /// 
         private IVsHierarchy hierarchy;
-        #endregion
 
         /// 
         /// Constructs a new event args.
         /// 
         /// The hierarchy that has changed its configuration.
-        /*internal, but public for FSharp.Project.dll*/ public ActiveConfigurationChangedEventArgs(IVsHierarchy hierarchy)
+        public ActiveConfigurationChangedEventArgs(IVsHierarchy hierarchy)
         {
             this.hierarchy = hierarchy;
         }
@@ -508,7 +487,7 @@ internal class ActiveConfigurationChangedEventArgs : EventArgs
         /// 
         /// The hierarchy whose configuration has changed 
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public IVsHierarchy Hierarchy
+        public IVsHierarchy Hierarchy
         {
             get
             {
@@ -527,7 +506,7 @@ internal class ProjectPropertyChangedArgs : EventArgs
         private string oldValue;
         private string newValue;
 
-        /*internal, but public for FSharp.Project.dll*/ public ProjectPropertyChangedArgs(string propertyName, string oldValue, string newValue)
+        public ProjectPropertyChangedArgs(string propertyName, string oldValue, string newValue)
         {
             this.propertyName = propertyName;
             this.oldValue = oldValue;
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/TokenProcessor.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/TokenProcessor.cs
deleted file mode 100644
index 76952d870fd..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/TokenProcessor.cs
+++ /dev/null
@@ -1,520 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if UNUSED
-using System;
-using System.Collections;
-using System.Globalization;
-using System.Text;
-using System.IO;
-using System.Diagnostics;
-using System.Diagnostics.CodeAnalysis;
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem
-{
-    /// 
-    /// Replacement type
-    /// 
-    public enum TokenReplaceType
-    {
-        ReplaceString,
-        ReplaceNumber,
-        ReplaceCode
-    }
-
-    /// 
-    /// Contain a number of functions that handle token replacement
-    /// 
-    [CLSCompliant(false)]
-    public class TokenProcessor
-    {
-        #region fields
-        // Internal fields
-        private ArrayList tokenlist;
-
-
-        #endregion
-
-        #region Initialization
-        /// 
-        /// Constructor
-        /// 
-        public TokenProcessor()
-        {
-            tokenlist = new ArrayList();
-        }
-
-        /// 
-        /// Reset list of TokenReplacer entries
-        /// 
-        public virtual void Reset()
-        {
-            tokenlist.Clear();
-        }
-
-
-        /// 
-        /// Add a replacement type entry
-        /// 
-        /// token to replace
-        /// replacement string
-        public virtual void AddReplace(string token, string replacement)
-        {
-            tokenlist.Add(new ReplacePairToken(token, replacement));
-        }
-
-        /// 
-        /// Add replace between entry
-        /// 
-        /// Start token
-        /// End token
-        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "tokenid")]
-        public virtual void AddReplaceBetween(string tokenid, string tokenStart, string tokenEnd, string replacement)
-        {
-            tokenlist.Add(new ReplaceBetweenPairToken(tokenid, tokenStart, tokenEnd, replacement));
-        }
-
-        /// 
-        /// Add a deletion entry
-        /// 
-        /// Token to delete
-        public virtual void AddDelete(string tokenToDelete)
-        {
-            tokenlist.Add(new DeleteToken(tokenToDelete));
-        }
-        #endregion
-
-        #region TokenProcessing
-        /// 
-        /// For all known token, replace token with correct value
-        /// 
-        /// File of the source file
-        /// File of the destination file
-        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Untoken")]
-        public virtual void UntokenFile(string source, string destination)
-        {
-            if (source == null || destination == null || source.Length == 0 || destination.Length == 0)
-                throw new ArgumentNullException("Token replacement target file is not valid.");
-
-            // Make sure that the destination folder exists.
-            string destinationFolder = Path.GetDirectoryName(destination);
-            if (!Directory.Exists(destinationFolder))
-            {
-                Directory.CreateDirectory(destinationFolder);
-            }
-
-            //Open the file. Check to see if the File is binary or text.
-            // NOTE: This is not correct because GetBinaryType will return true
-            // only if the file is executable, not if it is a dll, a library or
-            // any other type of binary file.
-
-            uint binaryType;
-            if (!NativeMethods.GetBinaryType(source, out binaryType))
-            {
-                string buffer = File.ReadAllText(source);
-                foreach (object pair in tokenlist)
-                {
-                    if (pair is DeleteToken)
-                        DeleteTokens(ref buffer, (DeleteToken)pair);
-                    if (pair is ReplaceBetweenPairToken)
-                        ReplaceBetweenTokens(ref buffer, (ReplaceBetweenPairToken)pair);
-                    if (pair is ReplacePairToken)
-                        ReplaceTokens(ref buffer, (ReplacePairToken)pair);
-                }
-                File.WriteAllText(destination, buffer);
-            }
-            else
-                File.Copy(source, destination);
-
-        }
-
-        /// 
-        /// Replaces the tokens in a buffer with the replacement string
-        /// 
-        /// Buffer to update
-        /// replacement data
-        public virtual void ReplaceTokens(ref string buffer, ReplacePairToken tokenToReplace)
-        {
-            buffer = buffer.Replace(tokenToReplace.Token, tokenToReplace.Replacement);
-        }
-
-        /// 
-        /// Deletes the token from the buffer
-        /// 
-        /// Buffer to update
-        /// token to delete
-        public virtual void DeleteTokens(ref string buffer, DeleteToken tokenToDelete)
-        {
-            buffer = buffer.Replace(tokenToDelete.StringToDelete, string.Empty);
-        }
-
-        /// 
-        /// Replaces the token from the buffer between the provided tokens
-        /// 
-        /// Buffer to update
-        /// replacement token
-        public virtual void ReplaceBetweenTokens(ref string buffer, ReplaceBetweenPairToken rpBetweenToken)
-        {
-            string regularExp = rpBetweenToken.TokenStart + "[^" + rpBetweenToken.TokenIdentifier + "]*" + rpBetweenToken.TokenEnd;
-            buffer = System.Text.RegularExpressions.Regex.Replace(buffer, regularExp, rpBetweenToken.TokenReplacement);
-        }
-
-        #endregion
-
-        #region Guid generators
-        /// 
-        /// Generates a string representation of a guid with the following format:
-        /// 0x01020304, 0x0506, 0x0708, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10
-        /// 
-        /// Guid to be generated
-        /// The guid as string
-        public string GuidToForm1(Guid value)
-        {
-            byte[] GuidBytes = value.ToByteArray();
-            StringBuilder ResultingStr = new StringBuilder(80);
-
-            // First 4 bytes
-            int i = 0;
-            int Number = 0;
-            for (i = 0; i < 4; ++i)
-            {
-                int CurrentByte = GuidBytes[i];
-                Number += CurrentByte << (8 * i);
-            }
-            UInt32 FourBytes = (UInt32)Number;
-            ResultingStr.AppendFormat(CultureInfo.InvariantCulture, "0x{0}", FourBytes.ToString("X", CultureInfo.InvariantCulture));
-
-            // 2 chunks of 2 bytes
-            for (int j = 0; j < 2; ++j)
-            {
-                Number = 0;
-                for (int k = 0; k < 2; ++k)
-                {
-                    int CurrentByte = GuidBytes[i++];
-                    Number += CurrentByte << (8 * k);
-                }
-                UInt16 TwoBytes = (UInt16)Number;
-                ResultingStr.AppendFormat(CultureInfo.InvariantCulture, ", 0x{0}", TwoBytes.ToString("X", CultureInfo.InvariantCulture));
-            }
-
-            // 8 chunks of 1 bytes
-            for (int j = 0; j < 8; ++j)
-            {
-                ResultingStr.AppendFormat(CultureInfo.InvariantCulture, ", 0x{0}", GuidBytes[i++].ToString("X", CultureInfo.InvariantCulture));
-            }
-
-            return ResultingStr.ToString();
-        }
-
-        /// 
-        /// Generates a string representation of a guid with the following format:
-        /// 0x01020304, 0x0506, 0x0708, { 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10 }
-        /// 
-        /// Guid to be generated.
-        /// The guid as string.
-        private string GuidToForm2(Guid value)
-        {
-            byte[] GuidBytes = value.ToByteArray();
-            StringBuilder ResultingStr = new StringBuilder(80);
-
-            // First 4 bytes
-            int i = 0;
-            int Number = 0;
-            for (i = 0; i < 4; ++i)
-            {
-                int CurrentByte = GuidBytes[i];
-                Number += CurrentByte << (8 * i);
-            }
-            UInt32 FourBytes = (UInt32)Number;
-            ResultingStr.AppendFormat(CultureInfo.InvariantCulture, "0x{0}", FourBytes.ToString("X", CultureInfo.InvariantCulture));
-
-            // 2 chunks of 2 bytes
-            for (int j = 0; j < 2; ++j)
-            {
-                Number = 0;
-                for (int k = 0; k < 2; ++k)
-                {
-                    int CurrentByte = GuidBytes[i++];
-                    Number += CurrentByte << (8 * k);
-                }
-                UInt16 TwoBytes = (UInt16)Number;
-                ResultingStr.AppendFormat(CultureInfo.InvariantCulture, ", 0x{0}", TwoBytes.ToString("X", CultureInfo.InvariantCulture));
-            }
-
-            // 8 chunks of 1 bytes
-            ResultingStr.AppendFormat(CultureInfo.InvariantCulture, ", {{ 0x{0}", GuidBytes[i++].ToString("X", CultureInfo.InvariantCulture));
-            for (int j = 1; j < 8; ++j)
-            {
-                ResultingStr.AppendFormat(CultureInfo.InvariantCulture, ", 0x{0}", GuidBytes[i++].ToString("X", CultureInfo.InvariantCulture));
-            }
-            ResultingStr.Append(" }");
-
-            return ResultingStr.ToString();
-        }
-        #endregion
-
-        #region Helper Methods
-        /// 
-        /// This function will accept a subset of the characters that can create an
-        /// identifier name: there are other unicode char that can be inside the name, but
-        /// this function will not allow. By now it can work this way, but when and if the
-        /// VSIP package will handle also languages different from english, this function
-        /// must be changed.
-        /// 
-        /// Character to validate
-        /// true if successful false otherwise
-        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "c")]
-        public /*protected, but public for FSharp.Project.dll*/ bool IsValidIdentifierChar(char c)
-        {
-            if ((c >= 'a') && (c <= 'z'))
-            {
-                return true;
-            }
-            if ((c >= 'A') && (c <= 'Z'))
-            {
-                return true;
-            }
-            if (c == '_')
-            {
-                return true;
-            }
-            if ((c >= '0') && (c <= '9'))
-            {
-                return true;
-            }
-
-            return false;
-        }
-
-        /// 
-        /// Verifies if the start character is valid
-        /// 
-        /// Start character
-        /// true if successful false otherwise
-        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "c")]
-        public /*protected, but public for FSharp.Project.dll*/ bool IsValidIdentifierStartChar(char c)
-        {
-            if (!IsValidIdentifierChar(c))
-            {
-                return false;
-            }
-            if ((c >= '0') && (c <= '9'))
-            {
-                return false;
-            }
-
-            return true;
-        }
-
-        /// 
-        /// The goal here is to reduce the risk of name conflict between 2 classes
-        /// added in different directories. This code does NOT garanty uniqueness.
-        /// To garanty uniqueness, you should change this function to work with
-        /// the language service to verify that the namespace+class generated does
-        /// not conflict.
-        /// 
-        /// Full path to the new file
-        /// Namespace to use for the new file
-        public string GetFileNamespace(string fileFullPath, ProjectNode node)
-        {
-            // Get base namespace from the project
-            string namespce = node.GetProjectProperty("RootNamespace");
-            if (String.IsNullOrEmpty(namespce))
-                namespce = Path.GetFileNameWithoutExtension(fileFullPath); ;
-
-            // If the item is added to a subfolder, the name space should reflect this.
-            // This is done so that class names from 2 files with the same name but different
-            // directories don't conflict.
-            string relativePath = Path.GetDirectoryName(fileFullPath);
-            string projectPath = Path.GetDirectoryName(node.GetMkDocument());
-            // Our project system only support adding files that are sibling of the project file or that are in subdirectories.
-            if (String.Compare(projectPath, 0, relativePath, 0, projectPath.Length, true, CultureInfo.CurrentCulture) == 0)
-            {
-                relativePath = relativePath.Substring(projectPath.Length);
-            }
-            else
-            {
-                Debug.Fail("Adding an item to the project that is NOT under the project folder.");
-                // We are going to use the full file path for generating the namespace
-            }
-
-            // Get the list of parts
-            int index = 0;
-            string[] pathParts;
-            pathParts = relativePath.Split(Path.DirectorySeparatorChar);
-
-            // Use a string builder with default size being the expected size
-            StringBuilder result = new StringBuilder(namespce, namespce.Length + relativePath.Length + 1);
-            // For each path part
-            while (index < pathParts.Length)
-            {
-                string part = pathParts[index];
-                ++index;
-
-                // This could happen if the path had leading/trailing slash, we want to ignore empty pieces
-                if (String.IsNullOrEmpty(part))
-                    continue;
-
-                // If we reach here, we will be adding something, so add a namespace separator '.'
-                result.Append('.');
-
-                // Make sure it starts with a letter
-                if (!char.IsLetter(part, 0))
-                    result.Append('N');
-
-                // Filter invalid namespace characters
-                foreach (char c in part)
-                {
-                    if (char.IsLetterOrDigit(c))
-                        result.Append(c);
-                }
-            }
-            return result.ToString();
-        }
-        #endregion
-
-    }
-
-    /// 
-    ///  Storage classes for replacement tokens
-    /// 
-    public class ReplacePairToken
-    {
-        /// 
-        /// token string
-        /// 
-        private string token;
-
-        /// 
-        /// Replacement string
-        /// 
-        private string replacement;
-
-        /// 
-        /// Constructor
-        /// 
-        /// replaceable token
-        /// replacement string
-        public ReplacePairToken(string token, string replacement)
-        {
-            this.token = token;
-            this.replacement = replacement;
-        }
-
-        /// 
-        /// Token that needs to be replaced
-        /// 
-        public string Token
-        {
-            get { return token; }
-        }
-        /// 
-        /// String to replace the token with
-        /// 
-        public string Replacement
-        {
-            get { return replacement; }
-        }
-    }
-
-    /// 
-    /// Storage classes for token to be deleted
-    /// 
-    public class DeleteToken
-    {
-        /// 
-        /// String to delete
-        /// 
-        private string token;
-
-        /// 
-        /// Constructor
-        /// 
-        /// Deletable token.
-        public DeleteToken(string token)
-        {
-            this.token = token;
-        }
-
-        /// 
-        /// Token marking the end of the block to delete
-        /// 
-        public string StringToDelete
-        {
-            get { return token; }
-        }
-    }
-
-    /// 
-    /// Storage classes for string to be deleted between tokens to be deleted 
-    /// 
-    public class ReplaceBetweenPairToken
-    {
-        /// 
-        /// Token start
-        /// 
-        private string tokenStart;
-
-        /// 
-        /// End token
-        /// 
-        private string tokenEnd;
-
-        /// 
-        /// Replacement string
-        /// 
-        private string replacement;
-
-        /// 
-        /// Token identifier string
-        /// 
-        private string tokenidentifier;
-
-        /// 
-        /// Constructor
-        /// 
-        /// Start token
-        /// End Token
-        /// Replacement string.
-        [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "tokenid")]
-        public ReplaceBetweenPairToken(string tokenid, string blockStart, string blockEnd, string replacement)
-        {
-            tokenStart = blockStart;
-            tokenEnd = blockEnd;
-            this.replacement = replacement;
-            tokenidentifier = tokenid;
-        }
-
-        /// 
-        /// Token marking the begining of the block to delete
-        /// 
-        public string TokenStart
-        {
-            get { return tokenStart; }
-        }
-
-        /// 
-        /// Token marking the end of the block to delete
-        /// 
-        public string TokenEnd
-        {
-            get { return tokenEnd; }
-        }
-
-        /// 
-        /// Token marking the end of the block to delete
-        /// 
-        public string TokenReplacement
-        {
-            get { return replacement; }
-        }
-
-        /// 
-        /// Token Identifier
-        /// 
-        public string TokenIdentifier
-        {
-            get { return tokenidentifier; }
-        }
-    }
-}
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/TrackDocumentsHelper.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/TrackDocumentsHelper.cs
index f4a7f849e0e..86a2408074e 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/TrackDocumentsHelper.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/TrackDocumentsHelper.cs
@@ -28,22 +28,13 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
     /// 
     internal class TrackDocumentsHelper
     {
-        #region fields
         private ProjectNode projectMgr;
-        #endregion
 
-        #region properties
-
-        #endregion
-
-        #region ctors
-        /*internal, but public for FSharp.Project.dll*/ public TrackDocumentsHelper(ProjectNode project)
+        public TrackDocumentsHelper(ProjectNode project)
         {
             this.projectMgr = project;
         }
-        #endregion
 
-        #region helper methods
         /// 
         /// Gets the IVsTrackProjectDocuments2 object by asking the service provider for it.
         /// 
@@ -67,7 +58,7 @@ private IVsTrackProjectDocuments2 GetIVsTrackProjectDocuments2()
         /// The files to add.
         /// The VSQUERYADDFILEFLAGS flags associated to the files added
         /// true if the file can be added, false if not.
-        /*internal, but public for FSharp.Project.dll*/ public bool CanAddItems(string[] files, VSQUERYADDFILEFLAGS[] flags)
+        public bool CanAddItems(string[] files, VSQUERYADDFILEFLAGS[] flags)
         {
             // If we are silent then we assume that the file can be added, since we do not want to trigger this event.
             if ((this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerTrackerEvents) != 0)
@@ -94,7 +85,7 @@ private IVsTrackProjectDocuments2 GetIVsTrackProjectDocuments2()
         /// 
         /// Notify the environment about a file just added
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public void OnItemAdded(string file, VSADDFILEFLAGS flag)
+        public void OnItemAdded(string file, VSADDFILEFLAGS flag)
         {
             if ((this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerTrackerEvents) == 0)
             {
@@ -108,7 +99,7 @@ private IVsTrackProjectDocuments2 GetIVsTrackProjectDocuments2()
         /// an array of files to remove
         /// The VSQUERYREMOVEFILEFLAGS associated to the files to be removed.
         /// true if the files can be removed, false if not.
-        /*internal, but public for FSharp.Project.dll*/ public bool CanRemoveItems(string[] files, VSQUERYREMOVEFILEFLAGS[] flags)
+        public bool CanRemoveItems(string[] files, VSQUERYREMOVEFILEFLAGS[] flags)
         {
             // If we are silent then we assume that the file can be removed, since we do not want to trigger this event.
             if ((this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerTrackerEvents) != 0)
@@ -136,7 +127,7 @@ private IVsTrackProjectDocuments2 GetIVsTrackProjectDocuments2()
         /// 
         /// Notify the environment about a file just removed
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public void OnItemRemoved(string file, VSREMOVEFILEFLAGS flag)
+        public void OnItemRemoved(string file, VSREMOVEFILEFLAGS flag)
         {
             if ((this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerTrackerEvents) == 0)
             {
@@ -151,7 +142,7 @@ private IVsTrackProjectDocuments2 GetIVsTrackProjectDocuments2()
         /// Path to the new file.
         /// The VSRENAMEFILEFLAGS associated with the file to be renamed.
         /// true if the file can be renamed. Otherwise false.
-        /*internal, but public for FSharp.Project.dll*/ public bool CanRenameItem(string oldFileName, string newFileName, VSRENAMEFILEFLAGS flag)
+        public bool CanRenameItem(string oldFileName, string newFileName, VSRENAMEFILEFLAGS flag)
         {
             // If we are silent then we assume that the file can be renamed, since we do not want to trigger this event.
             if ((this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerTrackerEvents) != 0)
@@ -168,14 +159,13 @@ private IVsTrackProjectDocuments2 GetIVsTrackProjectDocuments2()
         /// Get's called to tell the env that a file was renamed
         /// 
         /// 
-        /*internal, but public for FSharp.Project.dll*/ public void OnItemRenamed(string strOldName, string strNewName, VSRENAMEFILEFLAGS flag)
+        public void OnItemRenamed(string strOldName, string strNewName, VSRENAMEFILEFLAGS flag)
         {
             if ((this.projectMgr.EventTriggeringFlag & ProjectNode.EventTriggering.DoNotTriggerTrackerEvents) == 0)
             {
                 ErrorHandler.ThrowOnFailure(this.GetIVsTrackProjectDocuments2().OnAfterRenameFile(projectMgr.InteropSafeIVsProject, strOldName, strNewName, flag));
             }
         }
-        #endregion
     }
 }
 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Url.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Url.cs
deleted file mode 100644
index bc6188601c0..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Url.cs
+++ /dev/null
@@ -1,367 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if BETA2
-
-using System;
-using System.Windows.Forms;
-using System.Diagnostics;
-using Microsoft.Win32;
-using System.Globalization;
-using System.IO;
-using System.Collections;
-using System.Xml;
-using System.Text;
-using System.Net;
-using IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider;
-using IServiceProvider = System.IServiceProvider;
-using ShellConstants = Microsoft.VisualStudio.Shell.Interop.Constants;
-using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants;
-
-namespace Microsoft.VisualStudio.FSharp.ProjectSystem
-{    
-    /// 
-    /// This class wraps the Uri class and provides an unescaped "LocalPath" for file URL's
-    /// and an unescaped AbsoluteUri for other schemes, plus it also returned an un-hex-escaped
-    /// result from MakeRelative so it can be presented to the user.
-    /// 
-    internal class Url
-    {
-        private Uri uri = null;
-        private bool isFile;
-
-        
-        public Url(string path)
-        {
-            Init(path);
-        }
-        
-        void Init(string path)
-        {
-            // Must try absolute first, then fall back on relative, otherwise it
-            // makes some absolute UNC paths like (\\lingw11\Web_test\) relative!
-            if (path != null)
-            {
-
-                if (!Uri.TryCreate(path, UriKind.Absolute, out this.uri))
-                {
-                    Uri.TryCreate(path, UriKind.Relative, out this.uri);
-                } 
-                
-                this.CheckIsFile();
-            }
-        }
-
-        void CheckIsFile()
-        {
-            this.isFile = false;
-            if (this.uri != null)
-            {
-                if (this.uri.IsAbsoluteUri)
-                {
-                    this.isFile = this.uri.IsFile;
-                }
-                else
-                {
-                    string[] test1 = this.uri.OriginalString.Split('/');
-                    string[] test2 = this.uri.OriginalString.Split('\\');
-                    if (test1.Length < test2.Length)
-                    {
-                        this.isFile = true;
-                    }
-                }
-            }
-        }
-
-        // allows relpath to be null, in which case it just returns the baseUrl.
-        
-        public Url(Url baseUrl, string relpath)
-        {
-            if (baseUrl.uri == null)
-            {
-                Init(relpath);
-            }
-            else if (string.IsNullOrEmpty(relpath))
-            {
-                this.uri = baseUrl.uri;
-            }
-            else
-            {
-                this.uri = new Uri(baseUrl.uri, relpath);
-            }
-            CheckIsFile();
-        }
-        
-        
-        public string AbsoluteUrl
-        {
-            get
-            {
-                if (this.uri == null) return null;
-                if (this.uri.IsAbsoluteUri)
-                {
-                    if (this.isFile)
-                    {
-                        // Fix for build break. UriComponents.LocalPath is no longer available.
-                        // return uri.GetComponents(UriComponents.LocalPath, UriFormat.SafeUnescaped);
-                        return uri.LocalPath;
-                    }
-                    else
-                    {
-                        return uri.GetComponents(UriComponents.AbsoluteUri, UriFormat.SafeUnescaped);
-                    }
-                }
-                else
-                {
-                    return uri.OriginalString;
-                }
-            }
-        }
-
-        
-        /// Returns the AbsoluteUrl for the parent directory containing the file 
-        /// referenced by this URL object, where the Directory string is also unescaped.
-        public string Directory
-        {
-            get
-            {
-                string path = this.AbsoluteUrl;
-                if (path == null) return null;
-                int i = path.LastIndexOf(this.IsFile ? Path.DirectorySeparatorChar : '/');
-                int len = (i > 0) ? i : path.Length;
-                return path.Substring(0, len);
-            }
-        }
-
-        
-        public bool IsFile
-        {
-            get { return this.isFile; }
-        }
-
-        
-        public Url Move(Url oldBase, Url newBase)
-        {
-            if (this.uri == null || oldBase.uri == null) return null;
-            string rel = oldBase.uri.MakeRelativeUri(this.uri).ToString();
-            return new Url(newBase, rel);
-        }
-
-        // return an un-escaped relative path
-        
-        public string MakeRelative(Url url)
-        {
-            if (this.uri == null || url.uri == null) return null;
-            if (this.uri.Scheme != url.uri.Scheme || this.uri.Host != url.uri.Host)
-            {
-                // Then it cannot be relatavized (e.g from file:// to http://).
-                return url.AbsoluteUrl;
-            }
-            // This will return a hex-escaped string.
-            string rel = this.uri.MakeRelativeUri(url.uri).ToString();
-
-            // So unescape it.
-            return Unescape(rel, this.isFile);
-        }
-
-        const char c_DummyChar = (char)0xFFFF;
-
-        private static char EscapedAscii(char digit, char next)
-        {
-            // Only accept hexadecimal characters
-            if (!(((digit >= '0') && (digit <= '9'))
-                || ((digit >= 'A') && (digit <= 'F'))
-                || ((digit >= 'a') && (digit <= 'f'))))
-            {
-                return c_DummyChar;
-            }
-
-            int res = 0;
-            if (digit <= '9')
-                res = (int)digit - (int)'0';
-            else if (digit <= 'F')
-                res = ((int)digit - (int)'A') + 10;
-            else
-                res = ((int)digit - (int)'a') + 10;
-
-            // Only accept hexadecimal characters
-            if (!(((next >= '0') && (next <= '9'))
-                || ((next >= 'A') && (next <= 'F'))
-               || ((next >= 'a') && (next <= 'f'))))
-            {
-                return c_DummyChar;
-            }
-
-            res = res << 4;
-            if (next <= '9')
-                res += (int)next - (int)'0';
-            else if (digit <= 'F')
-                res += ((int)next - (int)'A') + 10;
-            else
-                res += ((int)next - (int)'a') + 10;
-
-            return (char)(res);
-        }
-
-        
-        public static string Unescape(string escaped, bool isFile)
-        {
-            if (String.IsNullOrEmpty(escaped))
-            {
-                return String.Empty;
-            }
-
-            byte[] bytes = null;
-            char[] dest = new char[escaped.Length];
-            int j = 0;
-
-            for (int i = 0, end = escaped.Length; i < end; i++)
-            {
-                char ch = escaped[i];
-                if (ch != '%')
-                {
-                    if (ch == '/' && isFile)
-                    {
-                        ch = Path.DirectorySeparatorChar;
-                    }
-                    dest[j++] = ch;
-                }
-                else
-                {
-                    int byteCount = 0;
-                    // lazy initialization of max size, will reuse the array for next sequences
-                    if (bytes == null)
-                    {
-                        bytes = new byte[end - i];
-                    }
-
-                    do
-                    {
-                        // Check on exit criterion
-                        if ((ch = escaped[i]) != '%' || (end - i) < 3)
-                        {
-                            break;
-                        }
-                        // already made sure we have 3 characters in str
-                        ch = EscapedAscii(escaped[i + 1], escaped[i + 2]);
-                        if (ch == c_DummyChar)
-                        {
-                            //invalid hex sequence, we will out '%' character
-                            ch = '%';
-                            break;
-                        }
-                        else if (ch < '\x80')
-                        {
-                            // character is not part of a UTF-8 sequence
-                            i += 2;
-                            break;
-                        }
-                        else
-                        {
-                            //a UTF-8 sequence
-                            bytes[byteCount++] = (byte)ch;
-                            i += 3;
-                        }
-                    } while (i < end);
-
-                    if (byteCount != 0)
-                    {
-
-                        int charCount = Encoding.UTF8.GetCharCount(bytes, 0, byteCount);
-                        if (charCount != 0)
-                        {
-                            Encoding.UTF8.GetChars(bytes, 0, byteCount, dest, j);
-                            j += charCount;
-                        }
-                        else
-                        {
-                            // the encoded, high-ANSI characters are not UTF-8 encoded
-                            for (int k = 0; k < byteCount; ++k)
-                            {
-                                dest[j++] = (char)bytes[k];
-                            }
-                        }
-                    }
-                    if (i < end)
-                    {
-                        dest[j++] = ch;
-                    }
-                }
-            }
-            return new string(dest, 0, j);
-        }
-
-        
-        public Uri Uri
-        {
-            get { return this.uri; }
-        }
-
-        // 
-        // Unlike the Uri class, this ALWAYS succeeds, even on relative paths, and it
-        // strips out the path separator characters
-        
-        public string[] GetSegments()
-        {        
-            if (this.uri == null) return null;
-            string path = this.AbsoluteUrl;
-            if (this.isFile || !this.uri.IsAbsoluteUri)
-            {
-                if (path.EndsWith("\\"))
-                    path = path.Substring(0, path.Length - 1);
-                return path.Split(Path.DirectorySeparatorChar);
-            }
-            else
-            {
-                // strip off "http://" and host name, since those are not part of the path.
-                path = path.Substring(this.uri.Scheme.Length + 3 + this.uri.Host.Length + 1);
-                if (path.EndsWith("/"))
-                    path = path.Substring(0, path.Length - 1);
-                return path.Split('/');
-            }    
-        }
-
-        
-        /// Return unescaped path up to (but not including) segment i.
-        public string GetPartial(int i)
-        {
-            string path = JoinSegments(0, i);
-            if (!this.isFile)
-            {
-                // prepend "http://host/"
-                path = this.uri.Scheme + "://" + this.uri.Host + '/' + path;
-            }
-            return path;
-        }
-
-        
-        /// Return unescaped relative path starting segment i.
-        public string GetRemainder(int i)
-        {
-            return JoinSegments(i, -1);
-        }
-
-        
-        public string JoinSegments(int i, int j)
-        {
-            if (i < 0)
-                throw new ArgumentOutOfRangeException("i");
-
-            StringBuilder sb = new StringBuilder();
-            string[] segments = this.GetSegments();
-            if (segments == null)
-                return null;
-            if (j < 0)
-                j = segments.Length;
-            int len = segments.Length;
-            for (; i < j && i < len; i++)
-            {
-                if (sb.Length > 0)
-                    sb.Append(this.isFile ? Path.DirectorySeparatorChar : '/');
-                string s = segments[i];
-                sb.Append(s);
-            }
-            return Unescape(sb.ToString(), isFile);
-        }
-    }
-}
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Utilities.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Utilities.cs
index f72d32b4886..c9571821981 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Utilities.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/Utilities.cs
@@ -114,7 +114,7 @@ public static string GetMsBuildPath(IServiceProvider serviceProvider, string ver
         /// 
         /// Is Visual Studio in design mode.
         /// 
-        /// The service provider.
+        /// The service provider.
         /// true if visual studio is in design mode
         public static bool IsVisualStudioInDesignMode(IServiceProvider site)
         {
@@ -127,7 +127,6 @@ public static bool IsVisualStudioInDesignMode(IServiceProvider site)
             return active != 0;
         }
 
-        /// 
         /// 
         /// Is an extensibility object executing an automation function.
         /// 
@@ -402,7 +401,7 @@ public static ImageList GetImageList(object imageListAsPointer)
         /// 
         /// The automation object.
         /// The name of the active configuartion.        
-        /*internal, but public for FSharp.Project.dll*/ public static string GetActiveConfigurationName(EnvDTE.Project automationObject)
+        public static string GetActiveConfigurationName(EnvDTE.Project automationObject)
         {
             if (automationObject == null)
             {
@@ -470,7 +469,7 @@ public static bool IsSameComObject(object obj1, object obj2)
         /// 
         /// Managed or COM object.
         /// Pointer to the IUnknown interface of the object.
-        /*internal, but public for FSharp.Project.dll*/ public static IntPtr QueryInterfaceIUnknown(object objToQuery)
+        public static IntPtr QueryInterfaceIUnknown(object objToQuery)
         {
             bool releaseIt = false;
             IntPtr unknown = IntPtr.Zero;
@@ -677,10 +676,9 @@ public static string SetStringValueFromConvertedEnum(T enumValue, CultureInfo
         /// 
         /// Initializes the in memory project. Sets BuildEnabled on the project to true.
         /// 
-        /// The build engine to use to create a build project.
+        /// The build engine to use to create a build project.
         /// The full path of the project.
         /// A loaded msbuild project.
-        /*internal, but public for FSharp.Project.dll*/
         public static Microsoft.Build.Evaluation.Project InitializeMsBuildProject(Microsoft.Build.Evaluation.ProjectCollection buildEngine, string fullProjectPath)
         {
             if (buildEngine == null)
@@ -714,7 +712,6 @@ public static Microsoft.Build.Evaluation.Project InitializeMsBuildProject(Micros
         /// The full path of the project.
         /// An Existing build project that will be reloaded.
         /// A loaded msbuild project.
-        /*internal, but public for FSharp.Project.dll*/
         public static Microsoft.Build.Evaluation.Project ReinitializeMsBuildProject(Microsoft.Build.Evaluation.ProjectCollection buildEngine, string fullProjectPath, Microsoft.Build.Evaluation.Project exitingBuildProject)
         {
             // If we have a build project that has been loaded with another file unload it.
@@ -734,7 +731,6 @@ public static Microsoft.Build.Evaluation.Project ReinitializeMsBuildProject(Micr
             return Utilities.InitializeMsBuildProject(buildEngine, fullProjectPath);
         }
 
-        /*internal, but public for FSharp.Project.dll*/
         public static Microsoft.Build.Evaluation.ProjectCollection InitializeMsBuildEngine(Microsoft.Build.Evaluation.ProjectCollection existingEngine)
         {
             if (existingEngine == null)
@@ -887,7 +883,7 @@ public static void RecursivelyCopyDirectory(string source, string target)
         /// 
         /// A file name, which can be relative/absolute and contain lower-case/upper-case characters.
         /// Canonicalized file name.
-        /*internal, but public for FSharp.Project.dll*/ public static string CanonicalizeFileName(string anyFileName)
+        public static string CanonicalizeFileName(string anyFileName)
         {
             // Get absolute path
             // Note: this will not handle UNC paths
@@ -921,7 +917,7 @@ public static string CanonicalizeFileNameNoThrow(string anyFileName)
         /// 
         /// The file to check whether it is a template file
         /// true if the file is a template file
-        /*internal, but public for FSharp.Project.dll*/ public static bool IsTemplateFile(string fileName)
+        public static bool IsTemplateFile(string fileName)
         {
             if (String.IsNullOrEmpty(fileName))
             {
@@ -937,23 +933,15 @@ public static string CanonicalizeFileNameNoThrow(string anyFileName)
         /// 
         /// A service provider.
         /// The hierrachy whose configuration is requested.
-        /// The name of the active configuration.
-        /// The name of the platform.
         /// true if successfull.
-        /*internal, but public for FSharp.Project.dll*/ public static bool TryGetActiveConfigurationAndPlatform(System.IServiceProvider serviceProvider, IVsHierarchy hierarchy, out ConfigCanonicalName configCanonicalName)
+        public static bool TryGetActiveConfigurationAndPlatform(System.IServiceProvider serviceProvider, Guid projectId, out ConfigCanonicalName configCanonicalName)
         {
             if (serviceProvider == null)
             {
                 throw new ArgumentNullException("serviceProvider");
             }
 
-            if (hierarchy == null)
-            {
-                throw new ArgumentNullException("hierarchy");
-            }
-            
-
-            IVsSolutionBuildManager2 solutionBuildManager = serviceProvider.GetService(typeof(SVsSolutionBuildManager)) as IVsSolutionBuildManager2;
+            IVsSolutionBuildManager5 solutionBuildManager = serviceProvider.GetService(typeof(SVsSolutionBuildManager)) as IVsSolutionBuildManager5;
 
             if (solutionBuildManager == null)
             {
@@ -961,17 +949,11 @@ public static string CanonicalizeFileNameNoThrow(string anyFileName)
                 return false;
             }
 
-            IVsProjectCfg[] activeConfigs = new IVsProjectCfg[1];
-            ErrorHandler.ThrowOnFailure(solutionBuildManager.FindActiveProjectCfg(IntPtr.Zero, IntPtr.Zero, hierarchy, activeConfigs));
-
-            IVsProjectCfg activeCfg = activeConfigs[0];
-
-            // Can it be that the activeCfg is null?
-            System.Diagnostics.Debug.Assert(activeCfg != null, "Cannot find the active configuration");
-
             string canonicalName;
-            ErrorHandler.ThrowOnFailure(activeCfg.get_CanonicalName(out canonicalName));
+            ErrorHandler.ThrowOnFailure(solutionBuildManager.FindActiveProjectCfgName(projectId, out canonicalName));
+
             configCanonicalName = new ConfigCanonicalName(canonicalName);
+
             return true;
         }
 
@@ -980,7 +962,7 @@ public static string CanonicalizeFileNameNoThrow(string anyFileName)
         /// 
         /// A reference to a Service Provider.
         /// true if the shell is in command line mode. false otherwise.
-        /*internal, but public for FSharp.Project.dll*/ public static bool IsShellInCommandLineMode(System.IServiceProvider serviceProvider)
+        public static bool IsShellInCommandLineMode(System.IServiceProvider serviceProvider)
         {
             if (serviceProvider == null)
             {
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/VSMDCodeDomProvider.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/VSMDCodeDomProvider.cs
index 5e038e4f079..852f16caf3f 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/VSMDCodeDomProvider.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/VSMDCodeDomProvider.cs
@@ -22,11 +22,9 @@ public VSMDCodeDomProvider(CodeDomProvider provider)
             this.provider = provider;
         }
 
-        #region IVSMDCodeDomProvider Members
         object IVSMDCodeDomProvider.CodeDomProvider
         {
             get { return provider; }
         }
-        #endregion
     }
 }
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/VsCommands.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/VsCommands.cs
index f170a4081c0..d34befd3351 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/VsCommands.cs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/Project/VsCommands.cs
@@ -23,6 +23,10 @@ internal class VsMenus
 
         public static Guid guidVSUISet = new Guid("60481700-078b-11d1-aaf8-00a0c9055a90");
 
+        //"Open Folder in Windows Explorer" command ID.
+        //Don't change this! This is Visual Studio constant.
+        public const VSConstants.VSStd2KCmdID OpenFolderInExplorerCmdId = (VSConstants.VSStd2KCmdID)1635;
+
         [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Cmds")]
         public static Guid guidVsUIHierarchyWindowCmds = new Guid("60481700-078B-11D1-AAF8-00A0C9055A90");
 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/SingleFileGeneratorSupportRegistrationAttribute.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/SingleFileGeneratorSupportRegistrationAttribute.cs
deleted file mode 100644
index 56eb76d9fa9..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/SingleFileGeneratorSupportRegistrationAttribute.cs
+++ /dev/null
@@ -1,77 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-#if SINGLE_FILE_GENERATOR
-
-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\
-    ///		[proj_fac_guid]
-	/// 
-	/// 
-	[AttributeUsage(AttributeTargets.Class, AllowMultiple = false, Inherited = true)]
-	internal sealed class SingleFileGeneratorSupportRegistrationAttribute : RegistrationAttribute
-	{
-        private Guid _prjFacGuid;
-		/// 
-        /// Creates a new SingleFileGeneratorSupportRegistrationAttribute 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 SingleFileGeneratorSupportRegistrationAttribute(Type prjFactoryType)
-		{
-            if (prjFactoryType == null)
-                throw new ArgumentNullException("prjFactoryType");
-
-            _prjFacGuid = prjFactoryType.GUID;
-        }
-
-		
-        /// 
-        /// Get the Guid representing the generator type
-        /// 
-        public Guid ProjectFactoryGuid
-        {
-            get { return _prjFacGuid; }
-        }
-
-        /// 
-        /// Property that gets the generator base key name
-        /// 
-        private string GeneratorRegKey
-        {
-            get { return string.Format(CultureInfo.InvariantCulture, @"Generators\{0}", ProjectFactoryGuid.ToString("B")); }
-        }
-		/// 
-		///     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, string.Empty);
-            }
-
-        }
-
-		/// 
-		/// Unregister this file extension.
-		/// 
-		/// 
-		public override void Unregister(RegistrationContext context)
-		{
-            context.RemoveKey(GeneratorRegKey);
-		}
-	}
-}
-#endif
\ No newline at end of file
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WebSiteProjectAttribute.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WebSiteProjectAttribute.cs
deleted file mode 100644
index 0d9953ce27c..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WebSiteProjectAttribute.cs
+++ /dev/null
@@ -1,181 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-
-#if UNUSED
-
-using System;
-using System.IO;
-using System.ComponentModel;
-using System.Globalization;
-using Microsoft.Win32;
-
-namespace Microsoft.VisualStudio.Shell
-{
-    /// 
-    /// This attribute adds a ProjectSubType to the exisiting list defined of ProjectSubTypes
-    /// for the Web Site Project
-    /// 
-    /// 
-    /// For example:
-    ///   [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\(*version*)\Projects\
-    ///		{E24C65DC-7377-472B-9ABA-BC803B73C61A}\ProjectSubType(VsTemplate)\IronPython
-    ///			"Default"="Iron Python"
-    ///   [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0Exp\NewProjectTemplates\TemplateDirs\{39c9c826-8ef8-4079-8c95-428f5b1c323f}\IronPython]
-    ///     @="Iron Python"
-    ///     "NewProjectDialogExOnly"=dword:00000001
-    ///     "SortPriority"=dword:0000012c
-    ///     "TemplatesDir"="D:\\Program Files\\Microsoft Visual Studio 8\\Web\\.\\WebProjects\\IronPython"
-    ///     "DeveloperActivity"="IronPython"
-
-    /// 
-    [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
-    [System.Runtime.InteropServices.ComVisibleAttribute(false)]
-    public sealed class WebSiteProjectAttribute : RegistrationAttribute
-    {
-        #region Constants
-        private const string webSiteProjectGuid = "{E24C65DC-7377-472B-9ABA-BC803B73C61A}";
-        private const string websitePackageGuid = "{39c9c826-8ef8-4079-8c95-428f5b1c323f}";
-        #endregion
-
-        #region Fields
-        private Type packageType;
-        private string languageID;
-        private string languageName;
-        #endregion
-
-        #region Constructors
-        /// 
-        /// Creates a new WebSiteProjectAttribute attribute to register a 
-        /// language with the web site project 
-        /// 
-        /// Language ID which is being referenced from the vstemplate
-        /// Language Name which shows up in the add new Web Site dialog under the list of languages
-        public WebSiteProjectAttribute(string languageID, string languageName)
-        {
-            if (languageID == null)
-            {
-                throw new ArgumentNullException("languageID", "languageID can not be null.");
-            }
-            if (languageName == null)
-            {
-                throw new ArgumentNullException("languageName", "languageName can not be null.");
-            }
-
-            this.languageID = languageID;
-            this.languageName = languageName;
-
-        }
-        #endregion
-
-        #region Properties
-        /// 
-        /// Gets the Language ID which is being referenced from the vstemplate
-        /// 
-        public string LanguageID
-        {
-            get { return languageID; }
-        }
-
-        /// 
-        /// Gets the Language Name which shows up in the add new Web Site dialog under the list of languages
-        /// 
-        public object LanguageName
-        {
-            get { return languageName; }
-        }
-
-        /// 
-        /// ProjectSubTypePath for Web Site Project
-        /// 
-        private string ProjectSubTypePath
-        {
-            get
-            {
-                return string.Format(CultureInfo.InvariantCulture, @"Projects\{0}\ProjectSubType(VsTemplate)", webSiteProjectGuid);
-            }
-        }
-
-        private string ProjectTemplatesDir
-        {
-            get
-            {
-                return string.Format(CultureInfo.InvariantCulture, @"NewProjectTemplates\TemplateDirs\{0}", websitePackageGuid);
-            }
-        }
-        /// 
-        /// Gets the Location of devenv.exe based on the RegistryRoot for the current package type
-        /// 
-        private string getVSInstallDir(RegistrationContext context)
-        {
-            DefaultRegistryRootAttribute regRootAttr = (DefaultRegistryRootAttribute)TypeDescriptor.GetAttributes(context.ComponentType)[typeof(DefaultRegistryRootAttribute)];
-            if (regRootAttr == null)
-            {
-                throw new NotSupportedException("could not find DefaultRegitryRootAttribute on " + context.ComponentType.ToString());
-            }
-
-            Win32.RegistryKey key = Win32.Registry.LocalMachine.OpenSubKey(regRootAttr.Root);
-            //We are using HKCU in the case that the HKLM Experimental hive doesn't exist
-            if (key == null || key.GetValue("InstallDir") == null)
-            {
-                key = Win32.Registry.CurrentUser.OpenSubKey(regRootAttr.Root + @"\Configuration");
-            }
-            string vsInstallDir = (string)key.GetValue("InstallDir");
-            key.Close();
-            return vsInstallDir;
-        }
-        #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");
-            }
-            packageType = context.ComponentType;
-            context.Log.WriteLine(String.Format(CultureInfo.CurrentCulture, "WebSiteProject: LanguageID = {0} Language Name = {1}\n", languageID, languageName));
-
-            //Register ProjectSubType(VsTemplates)
-            using (Key childKey = context.CreateKey(string.Format(CultureInfo.InvariantCulture, "{0}\\{1}", ProjectSubTypePath, languageID)))
-            {
-                childKey.SetValue("", languageName);
-            }
-
-            //Register NewProjectTemplates
-            using (Key childKey = context.CreateKey(string.Format(CultureInfo.InvariantCulture, "{0}\\{1}", ProjectTemplatesDir, languageID)))
-            {
-                childKey.SetValue("", languageName);
-                childKey.SetValue("NewProjectDialogExOnly", 1);
-                childKey.SetValue("SortPriority", 300);
-                string templateDir = context.RootFolder.TrimEnd('\\') + string.Format(CultureInfo.InvariantCulture, "\\Web\\.\\WebProjects\\{0}", languageID);
-                childKey.SetValue("TemplatesDir", context.EscapePath(templateDir));
-                childKey.SetValue("DeveloperActivity", languageID);
-            }
-        }
-
-        /// 
-        /// Unregister this languageID
-        /// 
-        /// Given context to unregister from
-        public override void Unregister(RegistrationContext context)
-        {
-            if (context != null)
-            {
-                //UnRegister ProjectSubType(VsTemplates)
-                context.RemoveKey(string.Format(CultureInfo.InvariantCulture, "{0}\\{1}", ProjectSubTypePath, languageID));
-
-                //Register NewProjectTemplates
-                context.RemoveKey(string.Format(CultureInfo.InvariantCulture, "{0}\\{1}", ProjectTemplatesDir, languageID));
-            }
-        }
-        #endregion
-    }
-}
-
-#endif
\ No newline at end of file
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WebSiteProjectRelatedFilesAttribute.cs b/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WebSiteProjectRelatedFilesAttribute.cs
deleted file mode 100644
index e9aacd19939..00000000000
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/Common.Source.CSharp/RegistrationAttributes/WebSiteProjectRelatedFilesAttribute.cs
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, Version 2.0.  See License.txt in the project root for license information.
-
-
-#if UNUSED
-
-using System;
-using System.IO;
-using System.ComponentModel;
-using System.Globalization;
-using Microsoft.Win32;
-
-namespace Microsoft.VisualStudio.Shell
-{
-    /// 
-    /// This attribute allows the Web Site Project to nest one file type (related) under another file type (primary) in the solution explorer
-    /// 
-    /// 
-    /// As an example the following Attribute definition 
-    /// [WebSiteProjectRelatedFiles("aspx","py")]
-    /// 
-    /// would add the following registry key:
-    ///   [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\(*version*)\Projects\
-    ///		{E24C65DC-7377-472B-9ABA-BC803B73C61A}\RelatedFiles\.aspx\.py
-    ///			"Default"=""
-    
-    /// 
-    [AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
-    [System.Runtime.InteropServices.ComVisibleAttribute(false)]
-    public sealed class WebSiteProjectRelatedFilesAttribute : RegistrationAttribute
-    {
-        #region Constants
-        private const string webSiteProjectGuid = "{E24C65DC-7377-472B-9ABA-BC803B73C61A}";
-        #endregion
-
-        #region Fields
-        //private Type packageType;
-        private string primaryFileExtension;
-        private string relatedFileExtension;
-        #endregion
-        
-        #region Constructors
-
-        /// 
-        /// Creates a new WebSiteProjectAttribute attribute to register a 
-        /// language with the web site project 
-        /// 
-        /// The primary file extension which will nest files.
-        /// The related file extion which willl nest under the primary file extension
-        public WebSiteProjectRelatedFilesAttribute(string primaryFileExtension, string relatedFileExtension)
-        {
-            if (string.IsNullOrEmpty(primaryFileExtension))
-            {
-                throw new ArgumentNullException("primaryFileExtension", "primaryFileExtension can not be null.");
-            }
-            if (primaryFileExtension.Contains("."))
-            {
-                throw new ArgumentNullException("primaryFileExtension", "primaryFileExtension must not contain '.'");
-            }
-            if (string.IsNullOrEmpty(relatedFileExtension))
-            {
-                throw new ArgumentNullException("relatedFileExtension", "relatedFileExtension can not be null.");
-            }
-            if (relatedFileExtension.Contains("."))
-            {
-                throw new ArgumentNullException("relatedFileExtension", "relatedFileExtension must not contain '.'");
-            }
-
-            this.primaryFileExtension = primaryFileExtension;
-            this.relatedFileExtension = relatedFileExtension;
-
-        }
-        #endregion
-
-        #region Properties
-        /// 
-        /// Gets the primary file extension which will nest files
-        /// 
-        public string PrimaryFileExtension
-        {
-            get { return primaryFileExtension; }
-        }
-
-        /// 
-        /// Gets the related file extion which willl nest under the primary file extension
-        /// 
-        public object RelatedFileExtension
-        {
-            get { return relatedFileExtension; }
-        }
-
-        /// 
-        /// Returns the Web Site Project RelatedFiles Path
-        /// 
-        private string RelatedFilePath
-        {
-            get
-            {
-                string relatedFiles = string.Format(CultureInfo.InvariantCulture, @"Projects\{0}\RelatedFiles", webSiteProjectGuid);
-                return string.Format(CultureInfo.InvariantCulture, "{0}\\.{1}\\.{2}", relatedFiles, primaryFileExtension, relatedFileExtension);
-            }
-        }
-
-        #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, "WebSiteProjectRelatedFiles: Primary File Ext = {0} Related File Ext = {1}\n", primaryFileExtension, relatedFileExtension));
-
-            //Register Related File
-            context.CreateKey(RelatedFilePath);
-        }
-
-        /// 
-        /// Unregister this related file extension
-        /// 
-        /// Given context to unregister from
-        public override void Unregister(RegistrationContext context)
-        {
-            if (context != null)
-            {
-                //UnRegister related file extextion
-                context.RemoveKey(RelatedFilePath);
-            }
-
-        }
-        #endregion
-    }
-}
-#endif
\ No newline at end of file
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/AppConfigHelper.fs b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/AppConfigHelper.fs
index 241fe6ef1fc..af9473988f8 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/AppConfigHelper.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/AppConfigHelper.fs
@@ -48,7 +48,7 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
         let mutable document : System.Xml.Linq.XDocument = null
         let mutable buffer : IVsTextLines = null
         let mutable rdtCookie : uint32 = 0u
-        
+
         member private x.InitDocData(itemid, filename) =
             let mutable hr = VSConstants.E_FAIL
             let rdt = site.GetService(typeof) :?> IVsRunningDocumentTable
@@ -180,7 +180,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
             Debug.Assert(document <> null, "Null XmlDocument?")
             document
             
-        // #region IDisposable
         interface IDisposable with
             member x.Dispose() =
                 if rdtCookie <> 0u && rdtFlags <> _VSRDTFLAGS.RDT_NoLock then
@@ -188,7 +187,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
                     rdt.UnlockDocument((uint32 rdtFlags) ||| (uint32 _VSRDTFLAGS.RDT_Unlock_SaveIfDirty), rdtCookie) |> ignore
                     rdtCookie <- 0u
         
-        // #endregion
 
     // This type provides a wrapper around the app.config file and provides methods to update
     // the config file with framework moniker information.
@@ -304,115 +302,149 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
                     fixupSku runtimeNode
                 
             !dirty
-        
+
         member x.EnsureSupportedRuntimeElement(version : string, sku : string) =
-        
+
             let document = fileHolder.GetXml()
-            
+
             // First, add the  node.  We assume that the root element is the
             //  element.
-            
+
             let root = document.Root
             let dirty = LangConfigFile.PatchUpXml(root, version, sku)
-            if dirty then isDirty <- dirty            
-        
+            if dirty then isDirty <- dirty
+
         /// Updates list of binding redirects to the config file. Content of list is governed by the major version of target framework.
-        /// Current redirects: 2.0 -> "2.0.0.0" to "2.3.0.0". 4.0 or greater - "2.0.0.0" to "4.3.0.0", "2.3.5.0" to "4.3.0.0", "4.0.0.0" to "4.3.0.0"
-        member x.EnsureHasBindingRedirects(majorVersion) =
-
-            // some helpers to simplify work with XLinq
-            let xname = System.Xml.Linq.XName.Get
-            let xnameAsmV1 name = xname ("{urn:schemas-microsoft-com:asm.v1}" + name)
-
-            let fsCoreAttributes = 
-                [
-                    xname "name", "FSharp.Core"
-                    xname "publicKeyToken", Microsoft.VisualStudio.FSharp.ProjectSystem.Utilities.FsCorePublicKeyToken
-                    xname "culture", "neutral"
-                ]
-
-            // depending on major version of target framework we need to populate corresponding binding redirects in config
-            let redirects = 
-                if majorVersion >= 4 then
+        member x.EnsureHasBindingRedirects(targetFSharpCoreVersion, autoGenerateBindingRedirects) =
+
+            if not autoGenerateBindingRedirects then
+
+                // Binding redirects depend on target framework
+                let bindingRedirects =
                     [
-                        "2.0.0.0", "4.3.0.0"
-                        "2.3.5.0", "4.3.0.0"
-                        "4.0.0.0", "4.3.0.0"
-                    ]
-                else
+                        // How to compute the binding redirects for an app.config file
+                        // ===========================================================
+                        //
+                        // Appconfig files appear by default in a console application and can be added to other F# projects.  
+                        // Some test frameworks make use of the for library projects
+                        // If the project property  is set to true then this code is not needed
+                        // However, for those projects that don't have it turned on this is how we compute the binding redirects to generate.
+                        //
+                        // The assembly version number scheme, evolved in a somewhat haphazard way:
+                        //  .Net 2 fsharp.core.dll has the version# 2.0.0.0 for VS2010 and 2.3.0.0 for VS2012 and up
+                        //  .Net 4 fsharp.core.dll has the version# 4.3.0.0 for VS2012, 4.3.1 for VS 2013 and 4.4.0.0
+                        //
+                        // Portable libraries are much different
+                        // There is a systematic scheme for portable libries from VS2013+Oob3.1.2 forward
+                        // It is:  3.Profile.Major.Minor
+                        //     Profile is .net framework profile number I.e 7,47,78 and 259
+                        //     Major.minor is the matching FSharp language major.minor version
+                        //
+                        // However in VS 2012 we released a Portable library which was profile 47 it has the version 2.3.5.0 in VS2013 it was updated to 2.3.5.1
+                        // and in VS 2013 we released an additional portable library based on the Windows 8 profile 7 with the version number 3.3.1.0
+                        //
+                        // Binding redirects are computed based on target fsharp core an fsharp core will be redirected to the target fsharp.core if it is "compatible"
+                        // Each desktop fsharp.core is a superset of the previous desktop fsharp.core dll's and is thus "compatible"
+                        // Each desktop fsharp.core.dll is also a superset of the portable libraries that shipped with it.
+                        // 
+                        // The table below represents the appropriate redirections
+                        // If the target version is between TagetMin and TargetMax inclusive then the redirects list contains the appropriate redirects
+                        //
+                        //TargetMin, targetMax, redirects
+                        "2.3.0.0",  "2.3.0.0",   ["2.0.0.0";   "2.3.0.0"]
+                        "2.3.5.1",  "2.3.5.1",   ["2.3.5.0";   "2.3.5.1"]
+                        "3.7.4.0",  "3.7.4.0",   ["3.3.1.0";   "3.7.4.0"]
+                        "3.47.4.0", "3.47.4.0",  ["2.3.5.0";   "2.3.5.1";   "3.47.4.0"]
+                        "3.78.4.0", "3.78.4.0",  ["3.78.3.1";  "3.78.4.0"]
+                        "3.259.4.0","3.259.4.0", ["3.259.3.1"; "3.259.4.0"]
+                        "4.3.0.0",  "4.4.0.0",   ["2.0.0.0";   "2.3.0.0";   "2.3.5.0";   "4.0.0.0";    "4.3.0.0"]
+                        "4.3.1.0",  "4.4.0.0",   ["3.3.1.0";   "2.3.5.1";   "3.78.3.1";  "3.259.3.1";  "4.3.1.0"]
+                        "4.4.0.0",  "4.4.0.0",   ["3.47.4.0";  "3.78.4.0";  "3.259.4.0"; "4.4.0.0"]
+                    ] |> Seq.where(fun (min, max, _) -> targetFSharpCoreVersion >= min && targetFSharpCoreVersion <= max)
+
+                // some helpers to simplify work with XLinq
+                let xname = System.Xml.Linq.XName.Get
+                let xnameAsmV1 name = xname ("{urn:schemas-microsoft-com:asm.v1}" + name)
+
+                let fsCoreAttributes = 
                     [
-                        "2.0.0.0", "2.3.0.0"
+                        xname "name", "FSharp.Core"
+                        xname "publicKeyToken", Microsoft.VisualStudio.FSharp.ProjectSystem.Utilities.FsCorePublicKeyToken
+                        xname "culture", "neutral"
                     ]
 
-            let OldVersion = "oldVersion"
-            let NewVersion = "newVersion"
-            let BindingRedirect = "bindingRedirect"
-            let DependentAssembly = "dependentAssembly"
-            let AssemblyIdentity = "assemblyIdentity"
-
-            let create (p : System.Xml.Linq.XElement) name attrs = 
-                let el = new System.Xml.Linq.XElement(name : System.Xml.Linq.XName)
-                p.Add(el)
-                for (name, value) in attrs do
-                    let attr = new System.Xml.Linq.XAttribute(name, value)
-                    el.Add(attr)
-                el
-
-            let createRedirect p (oldVersion, newVersion) = 
-                create p (xnameAsmV1 BindingRedirect) [xname OldVersion, oldVersion; xname NewVersion, newVersion]
-                |> ignore
-
-            let getOrCreate(p : System.Xml.Linq.XElement) name =
-                match p.Element(name) with
-                | null -> create p name []
-                | el -> el
-            
-            let document = fileHolder.GetXml()
-            let runtime = getOrCreate document.Root (xname "runtime")
-            let assemblyBinding = getOrCreate runtime (xnameAsmV1 "assemblyBinding")
-
-            // find dependentAssembly node with attributes that corresponds to the FSharp.Core
-            let fsharpCoreDependentAssemblyElement =
-                let n =
-                    assemblyBinding.Elements(xnameAsmV1 DependentAssembly)
-                    |> Seq.tryFind(
-                        fun da -> 
-                            match da.Element(xnameAsmV1 AssemblyIdentity) with
-                            | null -> false
-                            | x -> 
-                                fsCoreAttributes 
-                                |> Seq.forall (
-                                    fun (attr, value) ->
-                                        match x.Attribute attr with
-                                        | null -> false
-                                        | v -> v.Value = value
-                                )
-                        )
-                match n with
-                | Some el -> 
-                    // drop existing redirects for FSharp.Core
-                    let existingRedirects = el.Elements (xnameAsmV1 BindingRedirect)  |> List.ofSeq
-                    for existingRedirect in existingRedirects do
-                        existingRedirect.Remove()
+                // depending on major version of target framework we need to populate corresponding binding redirects in config
+                let OldVersion = "oldVersion"
+                let NewVersion = "newVersion"
+                let BindingRedirect = "bindingRedirect"
+                let DependentAssembly = "dependentAssembly"
+                let AssemblyIdentity = "assemblyIdentity"
+
+                let create (p : System.Xml.Linq.XElement) name attrs = 
+                    let el = new System.Xml.Linq.XElement(name : System.Xml.Linq.XName)
+                    p.Add(el)
+                    for (name, value) in attrs do
+                        let attr = new System.Xml.Linq.XAttribute(name, value)
+                        el.Add(attr)
                     el
-                | None ->
-                    let dependentAssembly = create assemblyBinding (xnameAsmV1 DependentAssembly) []
-                    let _fsCoreIdentity = create dependentAssembly (xnameAsmV1 AssemblyIdentity) fsCoreAttributes
-                    dependentAssembly
 
-            for redirect in redirects do 
-                createRedirect fsharpCoreDependentAssemblyElement redirect
-            
+                let createRedirect p (oldVersion, newVersion) =
+                    create p (xnameAsmV1 BindingRedirect) [xname OldVersion, oldVersion; xname NewVersion, newVersion] |> ignore
+
+                let getOrCreate(p : System.Xml.Linq.XElement) name =
+                    match p.Element(name) with
+                    | null -> create p name []
+                    | el -> el
+
+                let document = fileHolder.GetXml()
+                let runtime = getOrCreate document.Root (xname "runtime")
+                let assemblyBinding = getOrCreate runtime (xnameAsmV1 "assemblyBinding")
+
+                // find dependentAssembly node with attributes that corresponds to the FSharp.Core
+                let fsharpCoreDependentAssemblyElement =
+                    let n =
+                        assemblyBinding.Elements(xnameAsmV1 DependentAssembly)
+                        |> Seq.tryFind(
+                            fun da -> 
+                                match da.Element(xnameAsmV1 AssemblyIdentity) with
+                                | null -> false
+                                | x -> 
+                                    fsCoreAttributes 
+                                    |> Seq.forall (
+                                        fun (attr, value) ->
+                                            match x.Attribute attr with
+                                            | null -> false
+                                            | v -> v.Value = value
+                                    )
+                            )
+                    match n with
+                    | Some el -> 
+                        // drop existing redirects for FSharp.Core
+                        let existingRedirects = el.Elements (xnameAsmV1 BindingRedirect)  |> List.ofSeq
+                        for existingRedirect in existingRedirects do
+                            existingRedirect.Remove()
+                        el
+                    | None ->
+                        let dependentAssembly = create assemblyBinding (xnameAsmV1 DependentAssembly) []
+                        let _fsCoreIdentity = create dependentAssembly (xnameAsmV1 AssemblyIdentity) fsCoreAttributes
+                        dependentAssembly
+
+                let redirects =
+                    seq {
+                            for _,_,redirects in bindingRedirects do 
+                                yield! redirects
+                        }
+
+                redirects |> Seq.iter(fun r -> if r <> targetFSharpCoreVersion then createRedirect fsharpCoreDependentAssemblyElement (r, targetFSharpCoreVersion))
+
         member x.IsDirty() = isDirty
-        
+
         member x.Save() =
             let hr = fileHolder.SaveChanges()
             if ErrorHandler.Succeeded(hr) then
                 isDirty <- false
             hr
-            
+
         interface IDisposable with
             member x.Dispose() =
                 (fileHolder :> IDisposable).Dispose()
-
-
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/MenusAndCommands.vsct b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/MenusAndCommands.vsct
index 199ec8a46e4..435256120d6 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/MenusAndCommands.vsct
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/MenusAndCommands.vsct
@@ -36,16 +36,16 @@
       
         
         
-          Add &Below
-          Add &Below
+          Add &Below
+          Add &Below
           Add &Below
         
       
       
         
         
-          Add &Above
-          Add &Above
+          Add &Above
+          Add &Above
           Add &Above
         
       
@@ -56,8 +56,8 @@
         DynamicVisibility
         DefaultInvisible
         
-          &Send to F# Interactive
-          &Send to F# Interactive
+          &Send to F# Interactive
+          &Send to F# Interactive
           SendThisReferenceToInteractive
         
       
@@ -66,8 +66,8 @@
         DynamicVisibility
         DefaultInvisible
         
-          &Send References to F# Interactive
-          &Send References to F# Interactive
+          &Send References to F# Interactive
+          &Send References to F# Interactive
           SendReferencesToInteractive
         
       
@@ -76,8 +76,8 @@
         DynamicVisibility
         DefaultInvisible
         
-          &Send Project Output to F# Interactive
-          &Send Project Output to F# Interactive
+          &Send Project Output to F# Interactive
+          &Send Project Output to F# Interactive
           FSharpSendProjectOutputToInteractive
         
             
@@ -87,8 +87,8 @@
         DynamicVisibility
         DefaultInvisible
         
-          Move &Up
-          Move &Up
+          Move &Up
+          Move &Up
           MoveFileUp
         
       
@@ -98,8 +98,8 @@
         DynamicVisibility
         DefaultInvisible
         
-          Mo&ve Down
-          Mo&ve Down          
+          Mo&ve Down
+          Mo&ve Down          
           MoveFileDown
         
       
@@ -113,9 +113,9 @@
         TextContextUseButton
         TextChanges
         
-          Add Ne&w Item...
-          Ne&w Item...
-          Add New Item
+          Add Ne&w Item...
+          Ne&w Item...
+          Add New Item
           Add New Item
         
       
@@ -129,9 +129,9 @@
         TextContextUseButton
         TextChanges
         
-          Add Existin&g Item...
-          Existin&g Item...
-          Add Existing Item
+          Add Existin&g Item...
+          Existin&g Item...
+          Add Existing Item
           Add Existing Item
         
       
@@ -145,9 +145,9 @@
         TextContextUseButton
         TextChanges
         
-          Add Ne&w Item...
-          Ne&w Item...
-          Add New Item
+          Add Ne&w Item...
+          Ne&w Item...
+          Add New Item
           Add New Item
         
       
@@ -161,9 +161,9 @@
         TextContextUseButton
         TextChanges
         
-          Add Existin&g Item...
-          Existin&g Item...
-          Add Existing Item
+          Add Existin&g Item...
+          Existin&g Item...
+          Add Existing Item
           Add Existing Item
         
       
@@ -174,8 +174,8 @@
     
   
   
-    
-    
+    
+    
   
   
     
@@ -206,5 +206,6 @@
     
       
     
+    
   
 
\ No newline at end of file
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Project.fs b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Project.fs
index da837c09c50..082c43b8ad3 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Project.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Project.fs
@@ -166,10 +166,10 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
                 let initialApprovals = [|
                     for app in approvals do
                         match app with
-                        | Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.Trusted(fileName) ->
+                        | Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.TypeProviderApprovalStatus.Trusted(fileName) ->
                             let assemName = Path.GetFileNameWithoutExtension(fileName)
                             yield new TPTOPData(assemName, fileName, IsTrusted=true)
-                        | Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.NotTrusted(fileName) ->
+                        | Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.TypeProviderApprovalStatus.NotTrusted(fileName) ->
                             let assemName = Path.GetFileNameWithoutExtension(fileName)
                             yield new TPTOPData(assemName, fileName, IsTrusted=false)
                     |]
@@ -188,9 +188,9 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
                                 backingStore |> Seq.iter (fun a -> 
                                     let app = 
                                         if a.IsTrusted then 
-                                            Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.Trusted(a.FileName)
+                                            Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.TypeProviderApprovalStatus.Trusted(a.FileName)
                                         else
-                                            Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.NotTrusted(a.FileName)
+                                            Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.TypeProviderApprovalStatus.NotTrusted(a.FileName)
                                     Microsoft.FSharp.Compiler.ExtensionTyping.ApprovalIO.ReplaceApprovalStatus (Some file) app)
                             )
                             // invalidate any language service caching
@@ -354,9 +354,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
                 kvp.Value.Invoke()
         member this.Advise(callbackOwnerKey, callback) =
             notificationsDict.[callbackOwnerKey] <- callback
-// REVIEW: This is not currently used. Leaving it commented out in case we want to revive it.          
-//        member this.Unadvise(callbackOwnerKey) =  
-//            notificationsDict.Remove(callbackOwnerKey) |> ignore
 
     // Used to get us sorted appropriately with the other MSFT products in the splash screen and about box
     []
@@ -497,13 +494,16 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
                                     |> Seq.toList
                                 let (_, _, v2) = flatList |> List.find(fun (k1, k2, _) -> k1 = FSharpSDKHelper.NETFramework && k2 = FSharpSDKHelper.v20)
                                 let (_, _, v4) = flatList |> List.find(fun (k1, k2, _) -> k1 = FSharpSDKHelper.NETFramework && k2 = FSharpSDKHelper.v40)
+                                let (_, _, v45) = flatList |> List.find(fun (k1, k2, _) -> k1 = FSharpSDKHelper.NETFramework && k2 = FSharpSDKHelper.v45)
                                 {
                                     new Microsoft.VisualStudio.FSharp.ProjectSystem.IFSharpCoreVersionLookupService with
                                         member this.ListAvailableFSharpCoreVersions(targetFramework) =
                                             if targetFramework.Identifier = FSharpSDKHelper.NETFramework
                                             then 
-                                                // for .NETFramework we distinguish only between 2.0 and 4.0
-                                                if targetFramework.Version.Major < 4 then v2 else v4
+                                                // for .NETFramework we distinguish between 2.0, 4.0 and 4.5
+                                                if targetFramework.Version.Major < 4 then v2 
+                                                elif targetFramework.Version.Major = 4 && targetFramework.Version.Minor < 5 then v4 
+                                                else v45
                                             else 
                                                 // for other target frameworks we assume that they are distinguished by the profile
                                                 let result = 
@@ -723,9 +723,6 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
 #if DESIGNER                
                 this.AddCATIDMapping(typeof, typeof.GUID)
 #endif
-                // The following are not specific to F# and as such we need a separate GUID (we simply used guidgen.exe to create new guids)
-//                this.AddCATIDMapping(typeof, new Guid("C5A0C252-8688-415D-9B1A-4334775CA4B3"))
-
                 // This one we use the same as F# file nodes since both refer to files
                 this.AddCATIDMapping(typeof, typeof.GUID)
                 this.AddCATIDMapping(typeof, typeof.GUID)
@@ -766,27 +763,34 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
                 and set(v) = 
                     if not this.CanUseTargetFSharpCoreReference then () else
                     let currentVersion = System.Version(this.TargetFSharpCoreVersion)
-                    let version = System.Version(v)
-                    if not (currentVersion.Equals version) then
-                        let currentVersionEquals major minor build rev = 
-                            currentVersion.Major = major && 
-                            currentVersion.Minor = minor && 
-                            currentVersion.Build = build && 
-                            currentVersion.Revision = rev
-
-                        let hasSwitchedToNonDev11CompatibleVersion = 
-                            // non-desktop case, silverlight or old style portable - dev11 version 2.3.5.0
-                            ((this.IsCurrentProjectSilverlight() || this.IsCurrentProjectDotNetPortable()) && currentVersionEquals 2 3 5 0) ||
-                            // desktop case: dev11 versions are 4.3.0.0 or 2.3.0.0
-                            (currentVersionEquals 2 3 0 0) || (currentVersionEquals 4 3 0 0)
-
-                        if hasSwitchedToNonDev11CompatibleVersion then
-                            // we are switching from Dev11 compatible version to some another one that can no longer be opened in Dev11
+                    let newVersion = System.Version(v)
+                    if not (currentVersion.Equals newVersion) then
+                        let hasSwitchedToLatestOnlyVersionFromLegacy = 
+                            let legacyVersions =
+                                ["2.3.0.0"             // .NET 2 desktop
+                                 "4.3.0.0"; "4.3.1.0"  // .NET 4 desktop
+                                 "2.3.5.0"; "2.3.5.1"  // portable 47
+                                 "3.3.1.0"             // portable 7
+                                 "3.78.3.1"            // portable 78
+                                 "3.259.3.1"]          // portable 259
+                                |> List.map (fun s -> System.Version(s))
+                            let latestOnlyVersions = 
+                                ["4.4.0.0"             // .NET 4 desktop
+                                 "3.47.4.0"            // portable 47
+                                 "3.7.4.0"             // portable 7
+                                 "3.78.4.0"            // portable 78
+                                 "3.259.4.0"]          // portable 259
+                                |> List.map (fun s -> System.Version(s))
+                            
+                            (legacyVersions |> List.exists ((=) currentVersion)) && (latestOnlyVersions |> List.exists ((=) newVersion))                                
+
+                        if hasSwitchedToLatestOnlyVersionFromLegacy then
+                            // we are switching from a legacy version to one that is present only in the latest release
                             let result = 
                                 VsShellUtilities.ShowMessageBox
                                     (
                                         serviceProvider = this.Site,
-                                        message = FSharpSR.GetString(FSharpSR.FSharpCoreVersionIsNotCompatibleWithDev11),
+                                        message = FSharpSR.GetString(FSharpSR.FSharpCoreVersionIsNotLegacyCompatible),
                                         title = null,
                                         icon = OLEMSGICON.OLEMSGICON_QUERY, 
                                         msgButton = OLEMSGBUTTON.OLEMSGBUTTON_YESNO, 
@@ -803,6 +807,7 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
                             if (AssemblyReferenceNode.IsFSharpCoreReference asmNode) then
                                 asmNode.RebindFSharpCoreAfterUpdatingVersion(buildResult)
 
+                        this.UpdateTargetFramework(this.InteropSafeIVsHierarchy, this.GetTargetFrameworkMoniker(), this.GetTargetFrameworkMoniker()) |> ignore
                         this.ComputeSourcesAndFlags()
             
             override this.SendReferencesToFSI(references) = 
@@ -1062,61 +1067,7 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
                     | _ -> String.Compare(node2.Caption, node1.Caption, true, CultureInfo.CurrentCulture)
                 else
                     node2.SortPriority - node1.SortPriority
-(*
-            /// 
-            /// AddChild - add a node, sorted in the right location.
-            /// 
-            /// The node to add.
-            override fshProjNode.AddChild(node : HierarchyNode) =
-                // REVIEW: fix so files added to bottom, not sorted alpha
-                let this = fshProjNode
-                if node = null then
-                    raise <| new ArgumentNullException("node")
-
-                let map = this.ProjectMgr.ItemIdMap
-
-                // make sure the node is in the map.
-                let nodeWithSameID = this.ProjectMgr.ItemIdMap.[node.ID]
-                if not (Object.ReferenceEquals(node, nodeWithSameID)) then
-                    if (nodeWithSameID = null) && (int(node.ID) <= this.ProjectMgr.ItemIdMap.Count) then
-                        // reuse our hierarchy id if possible.
-                        this.ProjectMgr.ItemIdMap.SetAt(node.ID, this)
-                    else
-                        raise <| new InvalidOperationException()
-
-                let mutable previous = null : HierarchyNode
-                let mutable n = this.FirstChild
-                while n <> null && not (this.ProjectMgr.CompareNodes(node, n) > 0) do
-                    previous <- n
-                    n <- n.NextSibling
-                // insert "node" after "previous".
-                if previous <> null then
-                    node.NextSibling <- previous.NextSibling
-                    previous.NextSibling <- node
-                    if previous = this.LastChild then
-                        this.LastChild <- node
-                else
-                    if this.LastChild = null then
-                        this.LastChild <- node
-                    node.NextSibling <- this.FirstChild
-                    this.FirstChild <- node
-                node.Parent <- this
-                this.OnItemAdded(this, node)
-                ()
-*)
-(*
-            override x.IsItemTypeFileType(typ:string) =
-                if not (base.IsItemTypeFileType(typ)) then 
-                    if (String.Compare(typ, "Page", StringComparison.OrdinalIgnoreCase) = 0
-                     || String.Compare(typ, "ApplicationDefinition", StringComparison.OrdinalIgnoreCase) = 0
-                     || String.Compare(typ, "Resource", StringComparison.OrdinalIgnoreCase) = 0) then 
-                        true
-                    else
-                        false
-                else
-                    //This is a well known item node type, so return true.
-                    true
-*)
+
             override x.CreatePropertiesObject() : NodeProperties = 
                 (new FSharpProjectNodeProperties(this) :> NodeProperties)
 
@@ -1262,16 +1213,6 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
 
                 (newNode :> LinkedFileNode)
 
-#if UNUSED_DEPENDENT_FILES
-            override x.CreateDependentFileNode(item:ProjectElement ) =
-                let node = base.CreateDependentFileNode(item)
-                if (null <> node) then 
-                    let includ = item.GetMetadata(ProjectFileConstants.Include)
-                    if (FSharpProjectNode.IsCompilingFSharpFile(includ)) then 
-                        node.OleServiceProvider.AddService(typeof, new OleServiceProvider.ServiceCreatorCallback(this.CreateServices), false)
-                node
-#endif
-
             /// Creates the format list for the open file dialog
             /// The formatlist to return
             override x.GetFormatList(formatlist:byref ) =
@@ -1721,7 +1662,7 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
 #if DEBUG
                 compileWasActuallyCalled <- true
 #endif                    
-                let normalizedSources = sources |> Array.map (fun fn -> Internal.Utilities.FileSystem.Path.SafeGetFullPath(System.IO.Path.Combine(x.ProjectFolder, fn)))
+                let normalizedSources = sources |> Array.map (fun fn -> System.IO.Path.GetFullPath(System.IO.Path.Combine(x.ProjectFolder, fn)))
                 let r = (normalizedSources, flags)
                 sourcesAndFlags <- Some(r)
 #if DEBUG
@@ -1746,7 +1687,7 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
                                     TypeProviderSecurityGlobals.invalidationCallback()  
                                 let argv = Array.append flags sources  // flags + sources = entire command line
                                 let defaultFSharpBinariesDir = Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler.Value
-                                Microsoft.FSharp.Compiler.Driver.runFromCommandLineToImportingAssemblies(dialog, argv, defaultFSharpBinariesDir, x.ProjectFolder, 
+                                Microsoft.FSharp.Compiler.Driver.ProcessCommandLineArgsAndImportAssemblies(dialog, argv, defaultFSharpBinariesDir, x.ProjectFolder, 
                                             { new Microsoft.FSharp.Compiler.ErrorLogger.Exiter with 
                                                 member x.Exit(n) = 
                                                     match n with
@@ -1767,7 +1708,7 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
                 [|
                 for i in buildProject.Items do
                     if i.ItemType = "Compile" then
-                        yield Internal.Utilities.FileSystem.Path.SafeGetFullPath(System.IO.Path.Combine(projectFolder, i.EvaluatedInclude))
+                        yield System.IO.Path.GetFullPath(System.IO.Path.Combine(projectFolder, i.EvaluatedInclude))
                 |]
             member x.GetCompileItems() = let sources,_ = sourcesAndFlags.Value in sources
             member x.GetCompileFlags() =  let _,flags = sourcesAndFlags.Value in flags
@@ -1833,9 +1774,9 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
                               let (_, res) = mtservice.GetInstallableFrameworkForTargetFx(targetFrameworkMoniker)
                               res
 
-                (frameworkName, runtime, if String.IsNullOrEmpty(sku) then null else sku)
+                (runtime, if String.IsNullOrEmpty(sku) then null else sku)
 
-            member internal x.DoFixupAppConfigOnTargetFXChange(frameworkName : System.Runtime.Versioning.FrameworkName, runtime : string, sku : string) =
+            member internal x.DoFixupAppConfigOnTargetFXChange(runtime : string, sku : string, targetFSharpCoreVersion : string, autoGenerateBindingRedirects : bool ) =
                 let mutable res = VSConstants.E_FAIL
                 let specialFiles = x :> IVsProjectSpecialFiles
                 // We only want to force-generate an AppConfig file if the output type is EXE;
@@ -1855,12 +1796,11 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
                         res <- langConfigFile.Open(x)
                         if ErrorHandler.Succeeded(res) then
                             langConfigFile.EnsureSupportedRuntimeElement(runtime, sku)
-                            if langConfigFile.IsDirty() then
-                                let node = x.NodeFromItemId(itemid)
-                                System.Diagnostics.Debug.Assert(node <> null, "No project node for the item?")
-                                if node <> null then
-                                    langConfigFile.EnsureHasBindingRedirects(frameworkName.Version.Major)
-                                    res <- langConfigFile.Save()
+                            let node = x.NodeFromItemId(itemid)
+                            System.Diagnostics.Debug.Assert(node <> null, "No project node for the item?")
+                            if node <> null then
+                                langConfigFile.EnsureHasBindingRedirects(targetFSharpCoreVersion, autoGenerateBindingRedirects)
+                                res <- langConfigFile.Save()
 
                         // if we couldn't find the file, but we don't need it, then just ignore
                         if projProp.OutputType = OutputType.Library && res = NativeMethods.STG_E_FILENOTFOUND then
@@ -1869,14 +1809,9 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
                         (langConfigFile :> IDisposable).Dispose()
                 res
 
-            override x.FixupAppConfigOnTargetFXChange(targetFrameworkMoniker) =
-                let frameworkName = new System.Runtime.Versioning.FrameworkName(targetFrameworkMoniker)
-                // Spec says to do this only if the framework family is ".NETFramework"
-                if String.Compare(frameworkName.Identifier, ".NETFramework", true, CultureInfo.InvariantCulture) = 0 then
-                    let (frameworkName, runtime, sku) = x.DetermineRuntimeAndSKU(targetFrameworkMoniker)
-                    x.DoFixupAppConfigOnTargetFXChange(frameworkName, runtime, sku)
-                else
-                    VSConstants.S_OK
+            override x.FixupAppConfigOnTargetFXChange(targetFrameworkMoniker, targetFSharpCoreVersion, autoGenerateBindingRedirects) =
+                let (runtime, sku) = x.DetermineRuntimeAndSKU(targetFrameworkMoniker)
+                x.DoFixupAppConfigOnTargetFXChange(runtime, sku, targetFSharpCoreVersion, autoGenerateBindingRedirects)
 
             override x.SetHostObject(targetName, taskName, hostObject) =
 #if DEBUG
@@ -2041,7 +1976,6 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
                     guidEditorType <- GuidList.guidEditorFactory
                     VSConstants.S_OK
 
-            // #region IVsProjectSpecificEditorMap2 Members
             interface IVsProjectSpecificEditorMap2 with 
                 member x.GetSpecificEditorProperty(_mkDocument:string, _propid:int, result: byref) =
                     // initialize output params
@@ -2132,7 +2066,7 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
                 if GetCaption(pHierProj) = GetCaption(projNode.InteropSafeIVsHierarchy) then
                     // This code matches what ProjectNode.SetConfiguration would do; that method cannot be called during a build, but at this
                     // current moment in time, it is 'safe' to do this update.
-                    let _,currentConfigName = Utilities.TryGetActiveConfigurationAndPlatform(projNode.Site, projNode.InteropSafeIVsHierarchy)
+                    let _,currentConfigName = Utilities.TryGetActiveConfigurationAndPlatform(projNode.Site, projNode.ProjectIDGuid)
                     MSBuildProject.SetGlobalProperty(projNode.BuildProject, ProjectFileConstants.Configuration, currentConfigName.ConfigName)
                     MSBuildProject.SetGlobalProperty(projNode.BuildProject, ProjectFileConstants.Platform, currentConfigName.MSBuildPlatform)
                     projNode.UpdateMSBuildState()
@@ -2320,17 +2254,6 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
             with get() = this.Node.ProjectMgr.GetProjectProperty(ProjectFileConstants.RootNamespace)
             and set(value) = this.Node.ProjectMgr.SetProjectProperty(ProjectFileConstants.RootNamespace, value)
 
-//  REVIEW Temporarily dispabling these until further work can be done.    
-//        []
-//        member this.ApplicationIcon
-//            with get() = this.Node.ProjectMgr.GetProjectProperty(ProjectFileConstants.ApplicationIcon)
-//            and set(value) = this.Node.ProjectMgr.SetProjectProperty(ProjectFileConstants.ApplicationIcon, value)
-//            
-//        []
-//        member this.ApplicationManifest 
-//            with get() = this.Node.ProjectMgr.GetProjectProperty(ProjectFileConstants.ApplicationManifest)
-//            and set(value) = this.Node.ProjectMgr.SetProjectProperty(ProjectFileConstants.ApplicationManifest, value)
-//            
         []
         member this.Win32ResourceFile
             with get() = this.Node.ProjectMgr.GetProjectProperty(ProjectFileConstants.Win32Resource)
@@ -2458,11 +2381,7 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
       []
       []
       public FSharpFileNodeProperties internal (node:HierarchyNode) = 
-#if SINGLE_FILE_GENERATOR
-        inherit SingleFileGeneratorNodeProperties(node)
-#else
         inherit FileNodeProperties(node)
-#endif
 
         []
         member x.Url = "file:///" + x.Node.Url
@@ -2593,10 +2512,6 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
 
             override x.CreatePropertiesObject() =
                 let properties = new FSharpFileNodeProperties(x)
-#if SINGLE_FILE_GENERATOR
-                properties.OnCustomToolChanged.AddHandler(EventHandler<_>(fun sender args -> x.OnCustomToolChanged(sender,args)))
-                properties.OnCustomToolNameSpaceChanged.AddHandler(EventHandler<_>(fun sender args -> x.OnCustomToolNameSpaceChanged(sender,args)))
-#endif
                 (properties :> NodeProperties)
            
             member x.DisposeSelectionListener() = 
@@ -3111,11 +3026,7 @@ See also ...\SetupAuthoring\FSharp\Registry\FSProjSys_Registration.wxs, e.g.
                             hr <- hier.ParseCanonicalName((document :?> string), &itemid)
                             match projMgr.NodeFromItemId(itemid) with 
                             | :? FSharpFileNode as node -> 
-#if SINGLE_FILE_GENERATOR
-                                node.RunGenerator()
-#else
                                 ignore(node)
-#endif
                             | _ -> 
                                 ()
                 hr
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/ProjectPrelude.fs b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/ProjectPrelude.fs
index aa03e7c12cc..38faea301c2 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/ProjectPrelude.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/ProjectPrelude.fs
@@ -91,6 +91,8 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
         []
         let v40 = "v4.0"
         []
+        let v45 = "v4.5"
+        []
         let NETCore = ".NETCore"
         []
         let NETPortable = ".NETPortable"
@@ -119,6 +121,7 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
             seq {
                 yield! listReferenceFoldersForPlatform (Path.Combine(NETFramework, v20))
                 yield! listReferenceFoldersForPlatform (Path.Combine(NETFramework, v40))
+                yield! listReferenceFoldersForPlatform (Path.Combine(NETFramework, v45))
                 yield! listReferenceFoldersForPlatform NETCore
                 yield! listReferenceFoldersForPlatform NETPortable
             }
@@ -250,7 +253,7 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
         []
         let AddReferenceAssemblyPageDialogNoItemsText = "AddReferenceAssemblyPageDialogNoItemsText";
         []
-        let FSharpCoreVersionIsNotCompatibleWithDev11 = "FSharpCoreVersionIsNotCompatibleWithDev11";
+        let FSharpCoreVersionIsNotLegacyCompatible = "FSharpCoreVersionIsNotLegacyCompatible";
 
 
         let thisAssembly = typeof.Assembly 
@@ -387,7 +390,6 @@ namespace Microsoft.VisualStudio.FSharp.ProjectSystem
 #endif
 
     module internal Attributes = 
-        //[]
 #if NO_ASSEM_ATTRS_YET    
         //
         // General Information about an assembly is controlled through the following 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/ProjectSystem.fsproj b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/ProjectSystem.fsproj
index 1bf1693f058..e3b76466ac6 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/ProjectSystem.fsproj
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/ProjectSystem.fsproj
@@ -1,13 +1,12 @@
 
 
-
+
   
     ..\..\..\..\..\..\src
-    Microsoft.VisualStudio.Shell.12.0
-    Microsoft.VisualStudio.Package.LanguageService.12.0
     FSharp
     true
     $(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\VSSDK
+    14.0
   
   
     Debug
@@ -24,12 +23,10 @@
     FX_ATLEAST_45 
     false
     true
+    ProjectResources.rc
   
   
   
-    
-      ProjectResources.rc
-    
     
     
         true
@@ -54,8 +51,7 @@
     
     
     
-    
-    
+    
     
     
     
@@ -63,22 +59,19 @@
     
     
     
-    
+    
     
     
     
     
     
-    
-      true
-    
-    
-      true
-    
-    
-      true
-    
-    
+    
+    
+    
+    
+    
+    
+    
     
     
     
@@ -92,7 +85,6 @@
     
     
     
-    
     
       {a437a6ec-5323-47c2-8f86-e2cac54ff152}
       FSharp.LanguageService.Compiler
@@ -139,4 +131,10 @@
           DestinationFiles="@(VSCTCompile->'ctofiles\%(FileName).cto')" 
       />
   
+  
+    $(IntermediateOutputPath)\ProjectResources.rc.res
+  
+  
+      
+  
 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Data_Entity.ico b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Data_Entity.ico
index fa85735c833..48334392295 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Data_Entity.ico and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Data_Entity.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Data_Source.ico b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Data_Source.ico
index 829f1d35d6b..27cb96b2ce3 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Data_Source.ico and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Data_Source.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Data_XML.ico b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Data_XML.ico
index f868a96f500..a8e3d90fe35 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Data_XML.ico and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Data_XML.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpAboutBox.ico b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpAboutBox.ico
index c7152f428a3..72b1c9a71de 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpAboutBox.ico and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpAboutBox.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpCodeFile_32.ico b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpCodeFile_32.ico
index 8e9b1669d6f..b07e51f2428 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpCodeFile_32.ico and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpCodeFile_32.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpEmptyProject_32.ico b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpEmptyProject_32.ico
index ed72cb64737..bccf009e3ef 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpEmptyProject_32.ico and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpEmptyProject_32.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpInteractive.bmp b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpInteractive.bmp
deleted file mode 100644
index d70e3691238..00000000000
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpInteractive.bmp and /dev/null differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpInteractive.png b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpInteractive.png
new file mode 100644
index 00000000000..7c402b25575
Binary files /dev/null and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpInteractive.png differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpLibrary.ico b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpLibrary.ico
index dd66f868e68..af4db3c2b3b 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpLibrary.ico and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpLibrary.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpScript.ico b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpScript.ico
index 8ff24ebeb6e..236615e8764 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpScript.ico and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpScript.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpScriptFile.ico b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpScriptFile.ico
index 8ff24ebeb6e..236615e8764 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpScriptFile.ico and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpScriptFile.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpSignature.ico b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpSignature.ico
index 38da5170f6f..99d5abb8331 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpSignature.ico and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpSignature.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpTutorial.ico b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpTutorial.ico
index c3afe227146..dc000d65ac3 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpTutorial.ico and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpTutorial.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpWindowsApplication.ico b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpWindowsApplication.ico
index c7152f428a3..72b1c9a71de 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpWindowsApplication.ico and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/FSharpWindowsApplication.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Local_AppConfig.ico b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Local_AppConfig.ico
index 61a2e9612b9..6f7be83d966 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Local_AppConfig.ico and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Local_AppConfig.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Resource_Bitmap.ico b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Resource_Bitmap.ico
index 9ffe8c1f492..45d6660a07d 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Resource_Bitmap.ico and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Resource_Bitmap.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Utility_Text.ico b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Utility_Text.ico
index c6559ce1d30..6def88c0392 100644
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Utility_Text.ico and b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/Resources/Utility_Text.ico differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/VSPackage.resx b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/VSPackage.resx
index 6fe7186f20f..fe1aec0f033 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/VSPackage.resx
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/FS/VSPackage.resx
@@ -288,7 +288,7 @@
     Resources\FSXFile.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
   
   
-    Resources\FSharpInteractive.bmp;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
+    Resources\FSharpInteractive.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
   
   
     F# Script File
@@ -384,10 +384,10 @@
     A blank XML file
   
   
-    Portable Library (.NET 4.0+, Windows 8, Silverlight 5)
+    Portable Library (.NET 4.5, Windows Store, Silverlight 5, Xamarin)
   
   
-    A project for creating an F# library (.dll) that can run on .NET Framework 4.0+, Windows Store and Silverlight 5.
+    A project for creating an F# library (.dll) that can run on .NET Framework 4.5, Windows Store, Silverlight 5, Xamarin.iOS, Xamarin.Android and Xamarin.iOS(Classic).  Profile 47
   
   
     Data
@@ -420,22 +420,22 @@
     A project item for consuming a Web Service using WsdlService type provider.
   
   
-    Portable Library (.NET 4.5, Windows Store)
+    Portable Library (.NET 4.5, Windows Store, Xamarin)
   
   
-    A project for creating an F# library (.dll) that can run on .NET Framework 4.5 and Windows Store.
+    A project for creating an F# library (.dll) that can run on .NET Framework 4.5, Windows Store, Xamarin.iOS, Xamarin.Android and Xamarin.iOS(Classic).  Profile 7
   
   
-    Portable Library (.NET 4.5, Windows Store, Windows Phone 8 Silverlight)
+    Portable Library (.NET 4.5, Windows Store, Windows Phone 8 Silverlight, Xamarin)
   
   
-    A project for creating an F# library (.dll) that can run on .NET Framework 4.5, Windows Store and Windows Phone 8 Silverlight.
+    A project for creating an F# library (.dll) that can run on .NET Framework 4.5, Windows Store, Windows Phone 8 Silverlight, Xamarin.iOS, Xamarin.Android and Xamarin.iOS(Classic).  Profile 78
   
   
-    Portable Library (.NET 4.5, Windows Store, Windows Phone 8.1, Windows Phone Silverlight 8)
+    Portable Library (.NET 4.5, Windows Store, Windows Phone 8.1, Windows Phone Silverlight 8, Xamarin)
   
   
-    A project for creating an F# library (.dll) that can run on .NET Framework 4.5, Windows Store, Windows Phone 8.1 and Windows Phone Silverlight 8.
+    A project for creating an F# library (.dll) that can run on .NET Framework 4.5, Windows Store, Windows Phone 8.1, Windows Phone Silverlight 8, Xamarin.iOS, Xamarin.Android and Xamarin.iOS(Classic).  Profile 259
   
   
     F# Tools
@@ -536,7 +536,7 @@
   
     All of the Framework assemblies are already referenced. Please use the Object Browser to explore the references in the Framework.
   
-  
+  
     Referencing this version of FSharp.Core will cause your project to be incompatible with older versions of Visual Studio.  Do you want to continue?
   
 
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/SupportedRuntimes/SupportedRuntimes.xml b/vsintegration/src/vs/FsPkgs/FSharp.Project/SupportedRuntimes/SupportedRuntimes.xml
new file mode 100644
index 00000000000..7bbf34f3202
--- /dev/null
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/SupportedRuntimes/SupportedRuntimes.xml
@@ -0,0 +1,31 @@
+
+
+    
+        
+    
+    
+        
+        
+    
+        
+        
+        
+        
+    
+        
+        
+        
+    
+    
+        
+        
+        
+    
+        
+        
+        
+    
+        
+        
+        
+
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/AssemblyInfo.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/AssemblyInfo.vb
index a49b27a88ab..35f888f8586 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/AssemblyInfo.vb
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/AssemblyInfo.vb
@@ -14,6 +14,6 @@ Imports System.Runtime.CompilerServices
 
 
 #if STAMP_OSS_VERSION
-       '// The assembly version for THE OSS BUILD
-
+       '// The assembly version for THE OSS BUILD
+
 #end if
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/FSharp.PropertiesPages.vbproj b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/FSharp.PropertiesPages.vbproj
index 367b10ba43d..b1943d111ad 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/FSharp.PropertiesPages.vbproj
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/FSharp.PropertiesPages.vbproj
@@ -1,10 +1,8 @@
 
 
-
+
   
     ..\..\..\..\..\..\..\src
-    Microsoft.VisualStudio.Shell.12.0
-    Microsoft.VisualStudio.Package.LanguageService.12.0
     VisualBasic
     true
   
@@ -61,7 +59,7 @@
     
     
     
-    
+    
     
     
     
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/AssemblyInfo.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/AssemblyInfo.vb
index 364498dfa0e..71c4852f6b8 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/AssemblyInfo.vb	
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/My Project/AssemblyInfo.vb	
@@ -32,6 +32,6 @@ Imports System.Runtime.InteropServices
 ' You can specify all the values or you can default the Build and Revision Numbers 
 ' by using the '*' as shown below:
 #if STAMP_OSS_VERSION
-       '// The assembly version for THE OSS BUILD
-
+       '// The assembly version for THE OSS BUILD
+
 #end if
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/PropertyPages/ApplicationPropPage.vb b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/PropertyPages/ApplicationPropPage.vb
index 97ef1dab2e5..5d61eaeeec3 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/PropertyPages/ApplicationPropPage.vb
+++ b/vsintegration/src/vs/FsPkgs/FSharp.Project/VB/FSharpPropPage/PropertyPages/ApplicationPropPage.vb
@@ -74,8 +74,8 @@ Namespace Microsoft.VisualStudio.Editors.PropertyPages
             m_OutputTypeStringKeys(INDEX_COMMANDLINEAPP) = SR.GetString(SR.PPG_CommandLineApp)
             m_OutputTypeStringKeys(INDEX_WINDOWSCLASSLIB) = SR.GetString(SR.PPG_WindowsClassLib)
 
-            Dim v20FSharpRedistKey As String = "HKEY_LOCAL_MACHINE\Software\Microsoft\FSharp\3.1\Runtime\v2.0"
-            Dim v40FSharpRedistKey As String = "HKEY_LOCAL_MACHINE\Software\Microsoft\FSharp\3.1\Runtime\v4.0"
+            Dim v20FSharpRedistKey As String = "HKEY_LOCAL_MACHINE\Software\Microsoft\FSharp\4.0\Runtime\v2.0"
+            Dim v40FSharpRedistKey As String = "HKEY_LOCAL_MACHINE\Software\Microsoft\FSharp\4.0\Runtime\v4.0"
 
             m_v20FSharpRedistInstalled = Not (IsNothing(Microsoft.Win32.Registry.GetValue(v20FSharpRedistKey, Nothing, Nothing)))
             m_v40FSharpRedistInstalled = Not (IsNothing(Microsoft.Win32.Registry.GetValue(v40FSharpRedistKey, Nothing, Nothing)))
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj
index f520d1f7c70..11a696c2622 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj
+++ b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/FSHarp.VS.FSI.fsproj
@@ -1,12 +1,11 @@
 
 
-
+
     
         ..\..\..\..\..\src
-        Microsoft.VisualStudio.Shell.12.0
-        Microsoft.VisualStudio.Package.LanguageService.12.0
         FSharp
         true
+        14.0
     
     
     
@@ -40,33 +39,34 @@
     
     
         
-        
+        
         
         
         
         
         
-        
-        
+        
+        
+        
         
         
         
         
         
-        
+        
         
         
         
         
         
         
-        
-        
-        
-        
-        
-        
-        
+        
+        
+        
+        
+        
+        
+        
         
         
         
@@ -80,16 +80,16 @@
         
         
         
-            {DED3BBD7-53F4-428A-8C9F-27968E768605}
-            FSharp.Core
+          {DED3BBD7-53F4-428A-8C9F-27968E768605}
+          FSharp.Core
         
         
-            FSharp.Compiler.Server.Shared
-            {d5870cf0-ed51-4cbc-b3d7-6f56da84ac06}
+          FSharp.Compiler.Server.Shared
+          {d5870cf0-ed51-4cbc-b3d7-6f56da84ac06}
         
         
-            FSharp.Compiler
-            {62499922-7085-43bd-b9f2-bb352bfbc408}
+          FSharp.Compiler
+          {62499922-7085-43bd-b9f2-bb352bfbc408}
         
     
     
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/InternalsVisibleTo.fs b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/InternalsVisibleTo.fs
index 16c4ffd60fa..ed1b2d7cec4 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/InternalsVisibleTo.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/InternalsVisibleTo.fs
@@ -4,6 +4,9 @@ namespace Microsoft.FSharp
 
 open System.Reflection
 open System.Runtime.CompilerServices
+open System.Runtime.InteropServices
+
+[]
 
 []
 []
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/Properties.resx b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/Properties.resx
index 0c4e502c2d2..211a424a828 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/Properties.resx
+++ b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/Properties.resx
@@ -128,7 +128,7 @@
     F# Interactive options
   
   
-    The command line arguments passed to the F# Interactive executable by Visual Studio.
+    Additional command line arguments passed to the F# Interactive executable by Visual Studio. (optimization and debug flags are ignored if script debugging is enabled)
   
   
     Misc
@@ -139,4 +139,13 @@
   
     Prevents referenced assemblies from being locked by the F# Interactive process.
   
+  
+    Enable script debugging
+  
+  
+    Enable debugging of F# scripts (may impact script performance, requires reset of F# Interactive)
+  
+  
+    Debugging
+  
 
\ No newline at end of file
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/Resources/TabIcon.bmp b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/Resources/TabIcon.bmp
deleted file mode 100644
index de442c5f834..00000000000
Binary files a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/Resources/TabIcon.bmp and /dev/null differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/Resources/TabIcon.png b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/Resources/TabIcon.png
new file mode 100644
index 00000000000..7c402b25575
Binary files /dev/null and b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/Resources/TabIcon.png differ
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/VFSIstrings.txt b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/VFSIstrings.txt
index 3ff86ef2a9b..5defc5329cf 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/VFSIstrings.txt
+++ b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/VFSIstrings.txt
@@ -8,3 +8,5 @@ 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"
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiBasis.fs b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiBasis.fs
index 1ac9e11718a..f8d258ed4d4 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiBasis.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiBasis.fs
@@ -21,6 +21,7 @@ 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
@@ -32,7 +33,6 @@ open Microsoft.VisualStudio.Shell
 open Microsoft.VisualStudio.TextManager.Interop
 
 module internal AssemblyAttributes = 
-    //[]
     []
     do()
 
@@ -42,32 +42,24 @@ module internal Guids =
 #endif
     
     // FSI Session command set
-    let cmdIDFsiConsoleContextMenu      = 0x2100 
-    let guidFsiConsoleCmdSet            = Guid("0E455B35-F2EB-431b-A0BE-B268D8A7D17F")
-#if FX_ATLEAST_45
     let guidInteractiveCommands         = Microsoft.VisualStudio.VSConstants.VsStd11 
     let cmdIDSessionInterrupt           = int Microsoft.VisualStudio.VSConstants.VSStd11CmdID.InteractiveSessionInterrupt
     let cmdIDSessionRestart             = int Microsoft.VisualStudio.VSConstants.VSStd11CmdID.InteractiveSessionRestart
-#else
-    let guidInteractiveCommands         = guidFsiConsoleCmdSet
-    let cmdIDSessionInterrupt           = 0x102
-    let cmdIDSessionRestart             = 0x103
-#endif
+
+    let guidFsiConsoleCmdSet            = Guid("0E455B35-F2EB-431b-A0BE-B268D8A7D17F")
+    let cmdIDAttachDebugger             = 0x104
+    let cmdIDDetachDebugger             = 0x105
+    let cmdIDFsiConsoleContextMenu      = 0x2100 
    
     // Command set for SendToInteractive
-#if FX_ATLEAST_45
-    // commands moved to VS Shell
-    let guidInteractive                 = Microsoft.VisualStudio.VSConstants.VsStd11 
+    // some commands moved to VS Shell
+    let guidInteractiveShell            = Microsoft.VisualStudio.VSConstants.VsStd11 
     let cmdIDSendSelection              = int Microsoft.VisualStudio.VSConstants.VSStd11CmdID.ExecuteSelectionInInteractive
-    let guidInteractive2                = Microsoft.VisualStudio.VSConstants.VsStd11
     let cmdIDSendLine                   = int Microsoft.VisualStudio.VSConstants.VSStd11CmdID.ExecuteLineInInteractive
-#else
-    // hybrid still uses own commands
+
+    // some commands not in VS Shell
     let guidInteractive                 = Guid("8B9BF77B-AF94-4588-8847-2EB2BFFD29EB")
-    let cmdIDSendSelection              = 0x01
-    let guidInteractive2                = Guid("B607E86C-A761-4685-8D98-71A3BB73233A")
-    let cmdIDSendLine                   = 0x01
-#endif
+    let cmdIDDebugSelection             = 0x01
 
     let guidFsiPackage                  = "eeeeeeee-9342-42f1-8ea9-42f0e8a6be55" // FSI-LINKAGE-POINT: when packaged here
     let guidFSharpProjectPkgString      = "91A04A73-4F2C-4E7C-AD38-C1A68E7DA05C" // FSI-LINKAGE-POINT: when packaged in project system
@@ -113,7 +105,51 @@ module internal Util =
     let throwOnFailure2 (res,a,b)     = Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure res |> ignore; (a,b)
     let throwOnFailure3 (res,a,b,c)   = Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure res |> ignore; (a,b,c)
     let throwOnFailure4 (res,a,b,c,d) = Microsoft.VisualStudio.ErrorHandler.ThrowOnFailure res |> ignore; (a,b,c,d)
-    
+
+    module RegistryHelpers =
+        /// returns Some(value) if key/value exists, None otherwise
+        let tryReadHKCU<'t> subkey valueName =
+            use key = Registry.CurrentUser.OpenSubKey(subkey)
+            if key = null then None else
+            match key.GetValue(valueName) with
+            | :? 't as valTyped -> Some(valTyped)
+            | _ -> None
+
+        /// write value to HKCU subkey, uses default .NET/registry type conversions
+        let writeHKCU subkey valueName value =
+            use key = Registry.CurrentUser.OpenSubKey(subkey, true)
+            key.SetValue(valueName, value)
+
+    module ArgParsing =
+        let private lastIndexOfPattern s patt =
+            let patt' = sprintf @"(\s|^)%s(\s|$)" patt
+            match Regex.Matches(s, patt') |> Seq.cast |> Seq.tryLast with
+            | None -> -1
+            | Some(m) -> m.Index
+
+        /// checks if combined arg string results in debug info on/off
+        let debugInfoEnabled (args : string) =
+            // FSI default is --debug:pdbonly, so disabling must be explicit
+            match lastIndexOfPattern args @"(--|/)debug-" with
+            | -1 -> true 
+            | idxDisabled ->
+                // check if it's enabled by later args
+                let afterDisabled = args.Substring(idxDisabled + 5)
+                let idxEnabled =
+                    [lastIndexOfPattern afterDisabled @"(--|/)debug(\+|:full|:pdbonly)?"
+                     lastIndexOfPattern afterDisabled @"(--|/)g"] |> List.max
+                idxEnabled > idxDisabled
+
+        /// checks if combined arg string results in optimizations on/off
+        let optimizationsEnabled (args : string) =
+            // FSI default is --optimize+, so disabling must be explicit
+            match lastIndexOfPattern args @"(--|/)optimize-" with
+            | -1 -> true 
+            | idxDisabled ->
+                // check if it's enabled by later args
+                let afterDisabled = args.Substring(idxDisabled + 5)
+                let idxEnabled = lastIndexOfPattern afterDisabled @"(--|/)optimize\+?"
+                idxEnabled > idxDisabled
 
 // History buffer.
 // For now, follows the cmd.exe model.
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiCommands.vsct b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiCommands.vsct
index 0b9947c11f2..6af4ecc285d 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiCommands.vsct
+++ b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiCommands.vsct
@@ -92,60 +92,44 @@
         
       
 
-      
-      
-      
-      
 
       
-      
-      
-      
-      
 
     
 
     
       
-      
+      
       
       
     
@@ -187,20 +171,21 @@
     
       
     
-      
-    
+          
+    
+    
       
     
-    
+    
       
     
-    
-    
+    
       
     
-    
+    
       
     
+    
     
-    
-    
-
-    
-    
-    
+    
+    
 
     
     
 
-    
-        
-    
+     
+    
   
-    
-        
-    
+      
+    
   
      
     
+    
+    
+    
+    
+    
+     
   
 
   
@@ -293,12 +277,11 @@
        
             
       
-      
-      
-      
+      
+      
      
 
-    
+    
       
     
 
@@ -316,13 +299,9 @@
       
       
     
-
-
-    
-      
-    
-    
-      
+  
+    
+      
     
 
   
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiLanguageService.fs b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiLanguageService.fs
index 454cc51242e..67a38432643 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiLanguageService.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiLanguageService.fs
@@ -32,10 +32,12 @@ module SP = Microsoft.VisualStudio.FSharp.Interactive.Session.SessionsProperties
 []
 type FsiPropertyPage() = 
     inherit DialogPage()    
+       
     []
     [] 
     [] 
     member this.FsiPreferAnyCPUVersion with get() = SP.useAnyCpuVersion and set (x:bool) = SP.useAnyCpuVersion <- x
+
     []
     []
     [] 
@@ -45,6 +47,12 @@ type FsiPropertyPage() =
     []
     [] 
     member this.FsiShadowCopy with get() = SP.fsiShadowCopy and set (x:bool) = SP.fsiShadowCopy <- x
+
+    []
+    []
+    [] 
+    member this.FsiDebugMode with get() = SP.fsiDebugMode and set (x:bool) = SP.fsiDebugMode <- x
+
 // CompletionSet
 type internal FsiCompletionSet(imageList,source:Source) = 
     inherit CompletionSet(imageList, source)
@@ -62,7 +70,6 @@ type internal FsiDeclarations(items : (string*string*string*int)[] ) =
 // Methods
 type internal FsiMethods() =
     inherit Methods()
-    // let items = [|"Alpha";"Beta";"Gamma";"Saturn";"Zune"|] // For testing.
     let items = [| |]
     override this.GetCount() = items.Length
     override this.GetDescription(i) = items.[i]
@@ -167,8 +174,6 @@ module internal Helpers =
     let FsiKeyword =
         { new IVsColorableItem with 
             member x.GetDefaultColors(piForeground, piBackground) =
-                //Check.ArrayArgumentNotNullOrEmpty piForeground "piForeground"
-                //Check.ArrayArgumentNotNullOrEmpty piBackground "piBackground"
                 piForeground.[0] <- COLORINDEX.CI_BLUE
                 piBackground.[0] <- COLORINDEX.CI_USERTEXT_BK
                 VSConstants.S_OK
@@ -197,7 +202,6 @@ type internal FsiLanguageService() =
     member this.Sessions with set x = sessions <- Some x
     
     override this.GetLanguagePreferences() =
-        //System.Windows.Forms.MessageBox.Show("GetLanguagePrefs") |> ignore
         if preferences = null then
             preferences <- new LanguagePreferences(this.Site,
                                                    typeof.GUID,
@@ -207,13 +211,11 @@ type internal FsiLanguageService() =
         preferences
         
     override this.GetScanner(buffer:IVsTextLines) =
-        //System.Windows.Forms.MessageBox.Show("GetScanner") |> ignore
         if scanner = null then
             scanner <- (new FsiScanner(buffer) :> IScanner)
         scanner
         
     override this.ParseSource(req:ParseRequest) =
-        //System.Windows.Forms.MessageBox.Show("ParseSource") |> ignore
         (new FsiAuthoringScope(sessions,readOnlySpan) :> AuthoringScope)
                 
     override this.Name = "FSharpInteractive" // LINK: see ProvidePackage attribute on the package.
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiPackageHooks.fs b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiPackageHooks.fs
index 12e82daaffc..03afcc260f5 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiPackageHooks.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiPackageHooks.fs
@@ -29,12 +29,6 @@ module internal Hooks =
 
     // This should be called from the Package ctor, to do unsited initialisation.
     let fsiConsoleWindowPackageCtorUnsited (this:Package) =        
-(*      // "Proffer the service"
-        let serviceContainer = this :> IServiceContainer
-        let langService = new FsiLanguageService()
-        langService.SetSite(this)        
-        serviceContainer.AddService(typeof,langService,true)
-*)
 
         // This seems an alternative to the boiler plate proffering above. Gives delayed creation?
         let callback  = fsiServiceCreatorCallback(this)
@@ -56,30 +50,38 @@ module internal Hooks =
         with e2 ->
             (System.Windows.Forms.MessageBox.Show(e2.ToString()) |> ignore)
 
-    let private withFSIToolWindow (this:Package) f =
+    let private queryFSIToolWindow (this:Package) (f : FsiToolWindow -> 't) (dflt : 't) =
         try            
             let window = this.FindToolWindow(typeof, 0, true)
             let windowFrame = window.Frame :?> IVsWindowFrame
             if windowFrame.IsVisible() <> VSConstants.S_OK then
                 windowFrame.Show() |> throwOnFailure0
             match window with
-            | null -> ()
             | :? FsiToolWindow as window -> f window
-            | _ -> ()
+            | _ -> dflt
         with e2 ->
             (System.Windows.Forms.MessageBox.Show(VFSIstrings.SR.exceptionRaisedWhenRequestingToolWindow(e2.ToString())) |> ignore)
+            dflt
+
+    let private withFSIToolWindow (this:Package) f =
+        queryFSIToolWindow this f ()
 
-    let OnMLSend (this:Package) (selectLine : bool) (sender:obj) (e:EventArgs) =
+    let OnMLSend (this:Package) (action : FsiEditorSendAction) (sender:obj) (e:EventArgs) =
         withFSIToolWindow this (fun window ->
-            if selectLine then window.MLSendLine(sender,e)
-            else window.MLSend(sender,e)
+            match action with
+            | ExecuteSelection -> window.MLSendSelection(sender, e)
+            | ExecuteLine -> window.MLSendLine(sender, e)
+            | DebugSelection -> window.MLDebugSelection(sender, e)
         )
 
     let AddReferencesToFSI (this:Package) references =
         withFSIToolWindow this (fun window -> window.AddReferences references)
 
+    let GetDebuggerState (this:Package) =
+        queryFSIToolWindow this (fun window -> window.GetDebuggerState()) FsiDebuggerState.AttachedNotToFSI
+
     // FxCop request this function not be public
-    let private supportWhenFSharpDocument (selectLine : bool) (sender:obj) (e:EventArgs) =    
+    let private supportWhenFSharpDocument (sender:obj) (e:EventArgs) =    
         let command = sender :?> OleMenuCommand       
         if command <> null then                        
             let looksLikeFSharp,haveSelection = 
@@ -113,7 +115,7 @@ module internal Hooks =
                     
             command.Supported  <- true
             command.Visible    <- looksLikeFSharp
-            command.Enabled    <- if selectLine then true else haveSelection
+            command.Enabled    <- true
 
     let mutable private hasBeenInitialized = false
 
@@ -127,20 +129,3 @@ module internal Hooks =
                 let id  = new CommandID(Guids.guidFsiPackageCmdSet,int32 Guids.cmdIDLaunchFsiToolWindow)
                 let cmd = new MenuCommand(new EventHandler(ShowToolWindow this), id)
                 commandService.AddCommand(cmd)
-
-#if FX_ATLEAST_45
-                // Dev11 handles FSI commands in LS ViewFilter
-#else
-                // See VS SDK docs on "Command Routing Algorithm".
-                // Add OLECommand to OleCommandTarget at the package level,
-                // for when it is fired from other contexts, e.g. text editor.
-                let id  = new CommandID(Guids.guidInteractive,int32 Guids.cmdIDSendSelection)
-                let cmd = new OleMenuCommand(new EventHandler(OnMLSend this false), id)
-                cmd.BeforeQueryStatus.AddHandler(new EventHandler(supportWhenFSharpDocument false))
-                commandService.AddCommand(cmd)
-
-                let id  = new CommandID(Guids.guidInteractive2,int32 Guids.cmdIDSendLine)
-                let cmd = new OleMenuCommand(new EventHandler(OnMLSend this true), id)
-                cmd.BeforeQueryStatus.AddHandler(new EventHandler(supportWhenFSharpDocument true))
-                commandService.AddCommand(cmd)
-#endif
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiSessionToolWindow.fs b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiSessionToolWindow.fs
index 786b7c8a9ad..8af928caecb 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiSessionToolWindow.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/fsiSessionToolWindow.fs
@@ -35,6 +35,10 @@ type internal ITestVFSI =
 #nowarn "47"
 module internal Locals = 
     let fsiFontsAndColorsCategory = new Guid("{00CCEE86-3140-4E06-A65A-A92665A40D6F}")
+    let defaultVSRegistryRoot = @"Software\Microsoft\VisualStudio\14.0"
+    let settingsRegistrySubKey = @"General"
+    let debugPromptRegistryValue = "FSharpHideScriptDebugWarning"
+
     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.
@@ -70,6 +74,16 @@ module internal Locals =
 open Util
 open Locals
 
+type internal FsiDebuggerState =
+    | NotRunning
+    | AttachedToFSI
+    | AttachedNotToFSI
+
+type internal FsiEditorSendAction =
+    | ExecuteSelection
+    | ExecuteLine
+    | DebugSelection
+
 [] //REVIEW: double check fresh guid! IIRC it is.
 type internal FsiToolWindow() as this = 
     inherit ToolWindowPane(null)
@@ -105,7 +119,6 @@ type internal FsiToolWindow() as this =
 
     // Remove: after next submit (passing through SD)       
     // vsTextManager did not seem to yield current selection...
-    // let vsTextManager  = Util.CreateObjectT provider
 
     // The IP sample called GetService() to obtain the LanguageService.
     let fsiLangService = provider.GetService(typeof) |> unbox : FsiLanguageService
@@ -431,6 +444,106 @@ type internal FsiToolWindow() as this =
     let showNoActivate() = 
         let frame = this.Frame :?> IVsWindowFrame
         frame.ShowNoActivate() |> ignore
+    
+    let getDebuggerState () =
+        let fsiProcId = sessions.ProcessID
+        let dte = provider.GetService(typeof) :?> DTE
+
+        if dte.Debugger.DebuggedProcesses = null || dte.Debugger.DebuggedProcesses.Count = 0 then
+            FsiDebuggerState.NotRunning, None
+        else
+            let debuggedFsi =
+                dte.Debugger.DebuggedProcesses
+                |> Seq.cast
+                |> Seq.tryFind (fun p -> p.ProcessID = fsiProcId)
+            match debuggedFsi with
+            | Some _ -> FsiDebuggerState.AttachedToFSI, debuggedFsi
+            | None -> FsiDebuggerState.AttachedNotToFSI, None
+    
+    let getDebugAttachedFSIProcess () =
+        match getDebuggerState () with
+        | FsiDebuggerState.AttachedToFSI, opt -> opt
+        | _ -> None
+
+    let debuggerIsRunning () =
+        match getDebuggerState () with
+        | FsiDebuggerState.NotRunning, _ -> false
+        | _ -> true
+
+    // noop if debugger isn't attached to FSI
+    let detachDebugger () =
+        try
+            match getDebugAttachedFSIProcess () with
+            | Some(p) -> p.Detach(true)
+            | _ -> ()
+        with _ -> ()
+
+    // noop if debugger is already running
+    let attachDebugger () =
+        if not (debuggerIsRunning ()) then
+            let fsiProcId = sessions.ProcessID
+            let dte = provider.GetService(typeof) :?> DTE
+            let fsiProc = 
+                if dte.Debugger.LocalProcesses = null then None else
+                dte.Debugger.LocalProcesses
+                |> Seq.cast
+                |> Seq.tryFind (fun p -> p.ProcessID = fsiProcId)
+            try
+                match fsiProc with
+                | Some(p) -> p.Attach()
+                | _ -> ()
+            with _ -> ()
+
+    // checks if current session is configured such that debugging will work well
+    // if not, pops a dialog warning the user
+    let checkDebuggability () =       
+        // debug experience is good when optimizations are off and debug info is produced
+        if ArgParsing.debugInfoEnabled sessions.ProcessArgs && not (ArgParsing.optimizationsEnabled sessions.ProcessArgs) then
+            true
+        else
+            match RegistryHelpers.tryReadHKCU (defaultVSRegistryRoot + "\\" + settingsRegistrySubKey) debugPromptRegistryValue with
+            | Some(1) -> true  // warning dialog suppressed
+            | _ ->
+#if VS_VERSION_DEV12
+                let result = 
+                    VsShellUtilities.ShowMessageBox( 
+                        serviceProvider = provider, 
+                        message = VFSIstrings.SR.sessionIsNotDebugFriendly(), 
+                        title = VFSIstrings.SR.fsharpInteractive(), 
+                        icon = OLEMSGICON.OLEMSGICON_WARNING,  
+                        msgButton = OLEMSGBUTTON.OLEMSGBUTTON_YESNO,  
+                        defaultButton = OLEMSGDEFBUTTON.OLEMSGDEFBUTTON_FIRST 
+                    ) 
+                
+                // if user picks YES, allow debugging anyways 
+                result = 6 
+
+#else
+                let mutable suppressDiag = false
+                let result =
+                    Microsoft.VisualStudio.PlatformUI.MessageDialog.Show(
+                        VFSIstrings.SR.fsharpInteractive(),
+                        VFSIstrings.SR.sessionIsNotDebugFriendly(),
+                        Microsoft.VisualStudio.PlatformUI.MessageDialogCommandSet.YesNo,
+                        VFSIstrings.SR.doNotShowWarningInFuture(),
+                        &suppressDiag
+                    )
+                
+                if suppressDiag && result <> Microsoft.VisualStudio.PlatformUI.MessageDialogCommand.Abort then
+                    RegistryHelpers.writeHKCU (defaultVSRegistryRoot + "\\" + settingsRegistrySubKey) debugPromptRegistryValue 1
+
+                // if user picks YES, allow debugging anyways
+                result = Microsoft.VisualStudio.PlatformUI.MessageDialogCommand.Yes
+#endif
+
+    let onAttachDebugger (sender:obj) (args:EventArgs) =
+        if checkDebuggability() then
+            attachDebugger()
+            showNoActivate()
+
+    let onDetachDebugger (sender:obj) (args:EventArgs) =
+        detachDebugger()
+        showNoActivate()
 
     let sendTextToFSI text = 
         try
@@ -440,31 +553,40 @@ type internal FsiToolWindow() as this =
             executeTextNoHistory text
         with _ -> ()
 
-    let executeInteraction dir filename topLine text =
+    let executeInteraction dbgBreak dir filename topLine text =
         // Preserving previous functionality, including the #directives...
-        let directiveA  = sprintf "# silentCd @\"%s\" ;; "  dir
-        let directiveB  = sprintf "# %d @\"%s\" "      topLine filename
-        let directiveC  = sprintf "# 1 \"stdin\""    (* stdin line number reset code *)                
-        let interaction = "\n" + directiveA + "\n" + directiveB + "\n" + text + "\n" + directiveC + "\n;;\n"
+        let interaction =
+            "\n"
+          + (sprintf "# silentCd @\"%s\" ;; " dir) + "\n"
+          + (if dbgBreak then "# dbgbreak\n" else "")
+          + (sprintf "# %d @\"%s\" " topLine filename) + "\n"
+          + text + "\n"
+          + "# 1 \"stdin\"" + "\n" (* stdin line number reset code *)
+          + ";;" + "\n"
+
         executeTextNoHistory interaction
 
-    let sendSelectionToFSI(selectLine : bool) =
+    let sendSelectionToFSI action =
+        let dbgBreak,selectLine = 
+            match action with
+            | ExecuteSelection -> false, false
+            | ExecuteLine -> false, true
+            | DebugSelection -> true, false
+
         try
-            // REVIEW: See supportWhenFSharpDocument for alternative way of obtaining selection, via IVs APIs.
-            // Change post CTP.            
             let dte = provider.GetService(typeof) :?> DTE        
             let activeD = dte.ActiveDocument            
-            match dte.ActiveDocument.Selection with
+            match activeD.Selection with
+            | :? TextSelection as selection when selectLine || selection.Text = "" ->
+                selection.SelectLine()
+                showNoActivate()
+                executeInteraction dbgBreak (System.IO.Path.GetDirectoryName(activeD.FullName)) activeD.FullName selection.TopLine selection.Text 
+                // This has the effect of moving the line and de-selecting it.
+                selection.LineDown(false, 0)
+                selection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstColumn, false)
             | :? TextSelection as selection ->
-                let origLine = selection.CurrentLine 
-                if selectLine then 
-                    selection.SelectLine()
                 showNoActivate()
-                executeInteraction (System.IO.Path.GetDirectoryName(activeD.FullName)) activeD.FullName selection.TopLine selection.Text 
-                if selectLine then 
-                    // This has the effect of moving the line and de-selecting it.
-                    selection.LineDown(false, 0)
-                    selection.StartOfLine(vsStartOfLineOptions.vsStartOfLineOptionsFirstColumn, false)
+                executeInteraction dbgBreak (System.IO.Path.GetDirectoryName(activeD.FullName)) activeD.FullName selection.TopLine selection.Text 
             | _ ->
                 ()
         with
@@ -472,26 +594,17 @@ type internal FsiToolWindow() as this =
                  // REVIEW: log error into Trace.
                  // Example errors include no active document.
 
-    let onMLSendLine (sender:obj) (e:EventArgs) =
-        sendSelectionToFSI(true)
-
-    let onMLSend (sender:obj) (e:EventArgs) =       
-        sendSelectionToFSI(false)
-(*
-        // Remove: after next submit (passing through SD)       
-        // The below did not work, so move to use Automatic API via DTE above...        
-        let vsTextManager  = Util.CreateObjectT provider
-        let res,view = vsTextManager.GetActiveView(0(*<--fMustHaveFocus=0/1*),null) // 
-        if res = VSConstants.S_OK then
-            let span = Array.zeroCreate 1
-            view.GetSelectionSpan(span) |> throwOnFailure0
-            let span = span.[0]
-            let text = view.GetTextStream(span.iStartLine,span.iStartIndex,span.iEndLine,span.iEndIndex) |> throwOnFailure1
-            Windows.Forms.MessageBox.Show("EXEC:\n" + text) |> ignore
-        else        
-            Windows.Forms.MessageBox.Show("Could not find the 'active text view', error code = " + sprintf "0x%x" res) |> ignore
-*)
-        
+    let onMLSendSelection (sender:obj) (e:EventArgs) =       
+        sendSelectionToFSI ExecuteSelection
+
+    let onMLSendLine (sender:obj) (e:EventArgs) =       
+        sendSelectionToFSI ExecuteLine
+
+    let onMLDebugSelection (sender:obj) (e:EventArgs) = 
+        if checkDebuggability () then
+            attachDebugger ()
+        sendSelectionToFSI DebugSelection
+
     /// Handle UP and DOWN. Cycle history.    
     let onHistory (sender:obj) (e:EventArgs) =
         let command = sender :?> OleMenuCommand
@@ -528,8 +641,14 @@ type internal FsiToolWindow() as this =
     do  this.BitmapIndex      <- 0  
     do  this.Caption          <- VFSIstrings.SR.fsharpInteractive()
    
-    member this.MLSend(obj,e) = onMLSend obj e
+    member this.MLSendSelection(obj,e) = onMLSendSelection obj e
     member this.MLSendLine(obj,e) = onMLSendLine obj e
+    member this.MLDebugSelection(obj,e) = onMLDebugSelection obj e
+
+    member this.GetDebuggerState() =
+        let (state, _) = getDebuggerState ()
+        state
+
     member this.AddReferences(references : string[]) = 
         let text = 
             references
@@ -598,9 +717,13 @@ type internal FsiToolWindow() as this =
             addCommand guidVSStd2KCmdID (int32 VSStd2KCmdID.SHOWCONTEXTMENU)     showContextMenu None
             addCommand Guids.guidInteractiveCommands Guids.cmdIDSessionInterrupt onInterrupt     None
             addCommand Guids.guidInteractiveCommands Guids.cmdIDSessionRestart   onRestart       None
+            addCommand Guids.guidFsiConsoleCmdSet Guids.cmdIDAttachDebugger      onAttachDebugger  None
+            addCommand Guids.guidFsiConsoleCmdSet Guids.cmdIDDetachDebugger      onDetachDebugger  None
             
-            addCommand Guids.guidInteractive Guids.cmdIDSendSelection            onMLSend        None
-            addCommand Guids.guidInteractive2 Guids.cmdIDSendLine                onMLSendLine    None
+            addCommand Guids.guidInteractiveShell Guids.cmdIDSendSelection       onMLSendSelection   None
+            addCommand Guids.guidInteractiveShell Guids.cmdIDSendLine            onMLSendLine        None
+
+            addCommand Guids.guidInteractive Guids.cmdIDDebugSelection           onMLDebugSelection  None
             
             addCommand guidVSStd2KCmdID (int32 VSConstants.VSStd2KCmdID.UP)      onHistory      (Some supportWhenInInputArea)
             addCommand guidVSStd2KCmdID (int32 VSConstants.VSStd2KCmdID.DOWN)    onHistory      (Some supportWhenInInputArea)            
@@ -620,11 +743,23 @@ type internal FsiToolWindow() as this =
                     context.AddAttribute(VSUSERCONTEXTATTRIBUTEUSAGE.VSUC_Usage_LookupF1, "Keyword", "VS.FSharpInteractive") |> ignore
             |   _ -> Debug.Assert(false)
 
+    member __.QueryCommandStatus(guidCmdGroup:Guid, nCmdId:uint32) =
+        match () with
+        | _ when guidCmdGroup = Guids.guidFsiConsoleCmdSet && nCmdId = uint32 Guids.cmdIDAttachDebugger ->
+            if debuggerIsRunning () then Some(OLECMDF.OLECMDF_INVISIBLE)
+            else Some(OLECMDF.OLECMDF_SUPPORTED ||| OLECMDF.OLECMDF_ENABLED)
+
+        | _ when guidCmdGroup = Guids.guidFsiConsoleCmdSet && nCmdId = uint32 Guids.cmdIDDetachDebugger ->
+            if getDebugAttachedFSIProcess () |> Option.isSome then Some(OLECMDF.OLECMDF_SUPPORTED ||| OLECMDF.OLECMDF_ENABLED)
+            else Some(OLECMDF.OLECMDF_INVISIBLE)
+
+        | _ -> None
+                 
     interface ITestVFSI with
         /// Send a string; the ';;' will be added to the end; does not interact with history
         member this.SendTextInteraction(s:string) =
             let dummyLineNum = 1
-            executeInteraction (System.IO.Path.GetTempPath()) "DummyTestFilename.fs" 1 s
+            executeInteraction false (System.IO.Path.GetTempPath()) "DummyTestFilename.fs" 1 s
         /// Returns the n most recent lines in the view.  After SendTextInteraction, can poll for a prompt to know when interaction finished.
         member this.GetMostRecentLines(n:int) : string[] =
             lock textLines (fun () ->
@@ -672,6 +807,15 @@ type internal FsiToolWindow() as this =
             if not (wpfTextView.HasAggregateFocus) || isFocusedElementInterceptsCommandRouting() then
                 (int Microsoft.VisualStudio.OLE.Interop.Constants.OLECMDERR_E_NOTSUPPORTED)
             else
+                let mutable allHandled = true
+                for i = 0 to ((int cCmds) - 1) do
+                    match this.QueryCommandStatus(guid, prgCmds.[i].cmdID) with
+                    | Some(commandStatus) ->
+                        prgCmds.[i].cmdf <- uint32 commandStatus
+                    | None ->
+                        allHandled <- false
+
+                if allHandled then 0 else
                 let target : IOleCommandTarget = upcast commandService
                 target.QueryStatus(&guid, cCmds, prgCmds, pCmdText)
        
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/quickparse.fs b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/quickparse.fs
index 63dfc69fa74..7118a60e794 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/quickparse.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/quickparse.fs
@@ -38,7 +38,6 @@ module internal QuickParse =
             let hoverChar = line.[index]
             if not (IsLongIdentifierPartCharacter hoverChar) then 
                 // The character is not an identifier character. Return nothing
-                //JAMES: dprintf "GetIdentifierIsland returning None because hoverChar '%c' was not an identifier character: line=%s, index=%d\n" hoverChar line index
                 None
             else
                 let mutable left = index
@@ -47,10 +46,8 @@ module internal QuickParse =
                 while left>=0 && IsLongIdentifierPartCharacter line.[left] do left<-left-1
                 while right 
     abstract Alive           : bool
     abstract ProcessID       : int
+    abstract ProcessArgs     : string
     abstract Kill            : unit -> unit
 #if FSI_SERVER_INTELLISENSE
     abstract Completions     : string -> string[]
@@ -152,17 +154,18 @@ let catchAll (ie: IEvent<_,_>) : IEvent<_> =
     ie.Add(fun x -> try w(x) with err -> ignore(System.Windows.Forms.MessageBox.Show(err.ToString())); ());
     e
 
+let fsiExeName () = if SessionsProperties.useAnyCpuVersion then "fsianycpu.exe" else "fsi.exe"
 let determineFsiRelativePath () =
     let thisAssembly : System.Reflection.Assembly = typeof.Assembly
     let thisAssemblyDirectory = thisAssembly.Location |> Path.GetDirectoryName
     // Use the quick-development path if available    
-    Path.Combine(thisAssemblyDirectory,"fsi.exe")        
+    Path.Combine(thisAssemblyDirectory,fsiExeName() )
 
 let determineFsiPath () =    
     // Use the quick-development path if available
     let fsiRelativePath       = determineFsiRelativePath()        
     let fsbin = match Internal.Utilities.FSharpEnvironment.BinFolderOfDefaultFSharpCompiler with | Some(s) -> s | None -> ""
-    let fsiRegistryPath = Path.Combine(fsbin, if SessionsProperties.useAnyCpuVersion then "fsianycpu.exe" else "fsi.exe")
+    let fsiRegistryPath = Path.Combine(fsbin, fsiExeName() )
     // Choose relative path, if it exists (for developers), otherwise, the installed path.    
     if  File.Exists(fsiRelativePath) then
         fsiRelativePath
@@ -225,11 +228,26 @@ let fsiStartInfo channelName =
     // Send codepage preferences to the FSI.
     // We also need to send fsi.exe the locale of the VS process
     let inCP,outCP = System.Text.Encoding.UTF8.CodePage,System.Text.Encoding.UTF8.CodePage
-    let procArgs = sprintf "--fsi-server-output-codepage:%d --fsi-server-input-codepage:%d --fsi-server-lcid:%d --fsi-server:%s %s" outCP inCP (System.Threading.Thread.CurrentThread.CurrentUICulture.LCID) channelName (!settings).startupFlags
-    let shadowCopy = 
-        let state = if SessionsProperties.fsiShadowCopy then "+" else "-"
-        sprintf "--shadowcopyreferences%s" state
-    procInfo.Arguments <- procArgs + " " + SessionsProperties.fsiArgs + " " + shadowCopy // procArgs + user settable 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 =
+        ""
+        |> 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
+        |> (+) <| sprintf " %s" (!settings).startupFlags
+        |> (+) <| sprintf " %s" SessionsProperties.fsiArgs
+        |> addBoolOption "shadowcopyreferences" SessionsProperties.fsiShadowCopy
+        |> (fun args -> if SessionsProperties.fsiDebugMode then
+                            // for best debug experience, need optimizations OFF and debug info ON
+                            // tack these on the the end, they will override whatever comes earlier
+                            args |> addBoolOption "optimize" false |> addBoolOption "debug" true
+                        else args)
+
+    procInfo.Arguments <- procArgs
     procInfo.CreateNoWindow <- true;
     procInfo.UseShellExecute <- false;
     procInfo
@@ -272,9 +290,8 @@ let fsiProcess (procInfo:ProcessStartInfo) =
     // Fix 982: Force input to be written in UTF8 regardless of the apparent encoding.
     let inputWriter = new System.IO.StreamWriter(cmdProcess.StandardInput.BaseStream, new System.Text.UTF8Encoding(encoderShouldEmitUTF8Identifier=false))
     inputWriter.AutoFlush <- false;
-    //System.Windows.Forms.MessageBox.Show (sprintf "sending in encoding %O=%d/%d, code page = %d\n" inputWriter.Encoding inputWriter.Encoding.CodePage  inputWriter.Encoding.WindowsCodePage   cmdProcess.StandardInput.Encoding.CodePage) |> ignore
+
     let send str = 
-        //System.Windows.Forms.MessageBox.Show (sprintf "sending '%s'" str) |> ignore
         inputWriter.WriteLine(str:string); 
         inputWriter.Flush()
     inE.Add(send);
@@ -366,6 +383,7 @@ let createSessionProcess () =
         member x.Exited      = exitedE      
         member x.Alive       = not proc.HasExited
         member x.ProcessID   = proc.Id
+        member x.ProcessArgs = procInfo.Arguments
         member x.Kill()         = killProcess outW proc
 #if FSI_SERVER_INTELLISENSE
         member x.Completions(s) = completions(s:string)
@@ -419,6 +437,11 @@ let createSessions () =
         match !sessionR with
         | None -> -1 (* -1 assumed to never be a valid process ID *)
         | Some session -> session.ProcessID
+
+    let processArgs() =
+        match !sessionR with
+        | None -> ""
+        | Some session -> session.ProcessArgs
       
     let interrupt() =
         match !sessionR with
@@ -444,6 +467,7 @@ let createSessions () =
         member x.Error          = upcast errE
         member x.Alive          = alive()
         member x.ProcessID      = processId()
+        member x.ProcessArgs    = processArgs()
         member x.Kill()         = kill()
         member x.Restart()      = restart()
         member x.Exited         = upcast exitedE
diff --git a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/srProperties.fs b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/srProperties.fs
index 3898f44e8c8..12f573771b9 100644
--- a/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/srProperties.fs
+++ b/vsintegration/src/vs/FsPkgs/FSharp.VS.FSI/srProperties.fs
@@ -30,9 +30,18 @@ let FSharpInteractiveShadowCopyDescr = "FSharpInteractiveShadowCopyDescr"
 []
 let FSharpInteractiveShadowCopy = "FSharpInteractiveShadowCopy"
 
+[]
+let FSharpInteractiveDebugMode = "FSharpInteractiveDebugMode"
+
+[]
+let FSharpInteractiveDebugModeDescr = "FSharpInteractiveDebugModeDescr"
+
 []
 let FSharpInteractiveMisc = "FSharpInteractiveMisc"
 
+[]
+let FSharpInteractiveDebugging = "FSharpInteractiveDebugging"
+
 type DisplayNameAttribute(resName) =
     inherit System.ComponentModel.DisplayNameAttribute(GetString(resName))
 
diff --git a/vsintegration/update-vsintegration.cmd b/vsintegration/update-vsintegration.cmd
new file mode 100644
index 00000000000..308b0f1ea6c
--- /dev/null
+++ b/vsintegration/update-vsintegration.cmd
@@ -0,0 +1,136 @@
+@rem ===========================================================================================================
+@rem Copyright (c) Microsoft Open Technologies, Inc.  All Rights Reserved.  Licensed under the Apache License, 
+@rem               Version 2.0.  See License.txt in the project root for license information.
+@rem ===========================================================================================================
+
+rem @echo off
+setlocal
+
+if /i "%1" == "debug" goto :ok
+if /i "%1" == "release" goto :ok
+
+echo Clobbers existing Visual Studio installation of F# bits
+echo Usage:
+echo    update-vsintegration.cmd debug 
+echo    update-vsintegration.cmd release 
+exit /b 1
+
+:ok
+
+set BINDIR=%~dp0..\%1\net40\bin
+
+if /i "%PROCESSOR_ARCHITECTURE%"=="x86" set X86_PROGRAMFILES=%ProgramFiles%
+if /I "%PROCESSOR_ARCHITECTURE%"=="AMD64" set X86_PROGRAMFILES=%ProgramFiles(x86)%
+
+set GACUTIL="%X86_PROGRAMFILES%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\gacutil.exe"
+set SN32="%X86_PROGRAMFILES%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\sn.exe"
+set SN64="%X86_PROGRAMFILES%\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64\sn.exe"
+set NGEN32=%windir%\Microsoft.NET\Framework\v4.0.30319\ngen.exe
+set NGEN64=%windir%\Microsoft.NET\Framework64\v4.0.30319\ngen.exe
+
+copy /y "%BINDIR%\fsc.exe" "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0"
+copy /y "%BINDIR%\fsc.exe.config" "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0"
+copy /y "%BINDIR%\FSharp.Build.dll" "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0"
+copy /y "%BINDIR%\FSharp.Compiler.dll" "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0"
+copy /y "%BINDIR%\FSharp.Compiler.Interactive.Settings.dll" "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0"
+copy /y "%BINDIR%\Fsi.exe" "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0"
+copy /y "%BINDIR%\Fsi.exe.config" "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0"
+copy /y "%BINDIR%\FsiAnyCPU.exe" "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0"
+copy /y "%BINDIR%\FsiAnyCPU.exe.config" "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0"
+copy /y "%BINDIR%\Microsoft.FSharp.targets" "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0"
+copy /y "%BINDIR%\Microsoft.Portable.FSharp.targets" "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0"
+
+mkdir "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.9055"
+copy /y "%BINDIR%\FSharp.Core.dll" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.9055"
+copy /y "%BINDIR%\FSharp.Core.optdata" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.9055"
+copy /y "%BINDIR%\FSharp.Core.sigdata" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.9055"
+copy /y "%BINDIR%\FSharp.Core.xml" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.9055"
+
+mkdir "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.7.4.9055"
+copy /y "%BINDIR%\..\..\portable7\bin\FSharp.Core.dll" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.7.4.9055"
+copy /y "%BINDIR%\..\..\portable7\bin\FSharp.Core.optdata" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.7.4.9055"
+copy /y "%BINDIR%\..\..\portable7\bin\FSharp.Core.sigdata" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.7.4.9055"
+copy /y "%BINDIR%\..\..\portable7\bin\FSharp.Core.xml" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.7.4.9055"
+
+mkdir "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.4.9055"
+copy /y "%BINDIR%\..\..\portable78\bin\FSharp.Core.dll" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.4.9055"
+copy /y "%BINDIR%\..\..\portable78\bin\FSharp.Core.optdata" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.4.9055"
+copy /y "%BINDIR%\..\..\portable78\bin\FSharp.Core.sigdata" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.4.9055"
+copy /y "%BINDIR%\..\..\portable78\bin\FSharp.Core.xml" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.78.4.9055"
+
+mkdir "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.4.9055"
+copy /y "%BINDIR%\..\..\portable259\bin\FSharp.Core.dll" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.4.9055"
+copy /y "%BINDIR%\..\..\portable259\bin\FSharp.Core.optdata" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.4.9055"
+copy /y "%BINDIR%\..\..\portable259\bin\FSharp.Core.sigdata" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.4.9055"
+copy /y "%BINDIR%\..\..\portable259\bin\FSharp.Core.xml" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETCore\3.259.4.9055"
+
+mkdir "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETPortable\3.47.4.9055"
+copy /y "%BINDIR%\..\..\portable47\bin\FSharp.Core.dll" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETPortable\3.47.4.9055"
+copy /y "%BINDIR%\..\..\portable47\bin\FSharp.Core.optdata" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETPortable\3.47.4.9055"
+copy /y "%BINDIR%\..\..\portable47\bin\FSharp.Core.sigdata" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETPortable\3.47.4.9055"
+copy /y "%BINDIR%\..\..\portable47\bin\FSharp.Core.xml" "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETPortable\3.47.4.9055"
+
+REM echo ^^^^^ ^^^^^ > "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.9055\pub.config"
+
+if /I "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
+    REG ADD "HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx\F# 4.0 Core Assemblies (Open Source)" /ve /t REG_SZ /f /d "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.9055\
+    REG ADD "HKLM\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.50709\AssemblyFoldersEx\F# 4.0 Core Assemblies (Open Source)" /ve /t REG_SZ /f /d "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.9055\
+)
+REG ADD "HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\AssemblyFoldersEx\F# 4.0 Core Assemblies (Open Source)" /ve /t REG_SZ /f /d "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.9055\
+REG ADD "HKLM\SOFTWARE\Microsoft\.NETFramework\v4.0.50709\AssemblyFoldersEx\F# 4.0 Core Assemblies (Open Source)" /ve /t REG_SZ /f /d "%X86_PROGRAMFILES%\Reference Assemblies\Microsoft\FSharp\.NETFramework\v4.0\4.4.0.9055\
+
+
+
+rem Disable strong-name validation for F# binaries built from open source that are signed with the microsoft key
+%SN32% -Vr FSharp.Core,b03f5f7f11d50a3a
+%SN32% -Vr FSharp.Build,b03f5f7f11d50a3a
+%SN32% -Vr FSharp.Compiler.Interactive.Settings,b03f5f7f11d50a3a
+%SN32% -Vr FSharp.Compiler.Hosted,b03f5f7f11d50a3a
+
+%SN32% -Vr FSharp.Compiler,b03f5f7f11d50a3a
+%SN32% -Vr FSharp.Compiler.Server.Shared,b03f5f7f11d50a3a
+%SN32% -Vr FSharp.Editor,b03f5f7f11d50a3a
+%SN32% -Vr FSharp.LanguageService,b03f5f7f11d50a3a
+%SN32% -Vr FSharp.LanguageService.Base,b03f5f7f11d50a3a
+%SN32% -Vr FSharp.LanguageService.Compiler,b03f5f7f11d50a3a
+%SN32% -Vr FSharp.ProjectSystem.Base,b03f5f7f11d50a3a
+%SN32% -Vr FSharp.ProjectSystem.FSharp,b03f5f7f11d50a3a
+%SN32% -Vr FSharp.ProjectSystem.PropertyPages,b03f5f7f11d50a3a
+%SN32% -Vr FSharp.VS.FSI,b03f5f7f11d50a3a
+%SN32% -Vr Unittests,b03f5f7f11d50a3a
+%SN32% -Vr Salsa,b03f5f7f11d50a3a
+
+if /i "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
+    %SN64% -Vr FSharp.Core,b03f5f7f11d50a3a
+    %SN64% -Vr FSharp.Build,b03f5f7f11d50a3a
+    %SN64% -Vr FSharp.Compiler.Interactive.Settings,b03f5f7f11d50a3a
+    %SN64% -Vr FSharp.Compiler.Hosted,b03f5f7f11d50a3a
+
+    %SN64% -Vr FSharp.Compiler,b03f5f7f11d50a3a
+    %SN64% -Vr FSharp.Compiler.Server.Shared,b03f5f7f11d50a3a
+    %SN64% -Vr FSharp.Editor,b03f5f7f11d50a3a
+    %SN64% -Vr FSharp.LanguageService,b03f5f7f11d50a3a
+    %SN64% -Vr FSharp.LanguageService.Base,b03f5f7f11d50a3a
+    %SN64% -Vr FSharp.LanguageService.Compiler,b03f5f7f11d50a3a
+    %SN64% -Vr FSharp.ProjectSystem.Base,b03f5f7f11d50a3a
+    %SN64% -Vr FSharp.ProjectSystem.FSharp,b03f5f7f11d50a3a
+    %SN64% -Vr FSharp.ProjectSystem.PropertyPages,b03f5f7f11d50a3a
+    %SN64% -Vr FSharp.VS.FSI,b03f5f7f11d50a3a
+    %SN64% -Vr Unittests,b03f5f7f11d50a3a
+    %SN64% -Vr Salsa,b03f5f7f11d50a3a
+)
+
+%GACUTIL% /if %BINDIR%\FSharp.Compiler.Interactive.Settings.dll
+%GACUTIL% /if %BINDIR%\FSharp.Compiler.Server.Shared.dll
+
+rem NGen fsc, fsi, fsiAnyCpu, and FSharp.Build.dll
+
+"%NGEN32%" install "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0\fsc.exe" /queue:1
+"%NGEN32%" install "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0\fsi.exe" /queue:1
+"%NGEN32%" install "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0\fsiAnyCpu.exe" /queue:1
+"%NGEN32%" install "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0\FSharp.Build.dll" /queue:1
+
+if /i "%PROCESSOR_ARCHITECTURE%"=="AMD64" (
+    "%NGEN64%" install "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0\fsiAnyCpu.exe" /queue:1
+    "%NGEN64%" install "%X86_PROGRAMFILES%\Microsoft SDKs\F#\4.0\Framework\v4.0\FSharp.Build.dll" /queue:1
+)