Skip to content

Commit a62def5

Browse files
committed
Merge pull request #515 from baronfel/integrate
Integrate recent work from Microsoft/VisualFSharp into this repo
2 parents 8111c63 + f656317 commit a62def5

File tree

110 files changed

+8945
-3760
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

110 files changed

+8945
-3760
lines changed

.nuget/NuGet.Config

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,10 @@
33
<solution>
44
<add key="disableSourceControlIntegration" value="true" />
55
</solution>
6+
<packageSources>
7+
<add key="myget.org dotnet-corefx" value="https://www.myget.org/F/dotnet-corefx/" />
8+
<add key="myget.org dotnet-buildtools" value="https://www.myget.org/F/dotnet-buildtools/" />
9+
<add key="myget.org fsharp-daily" value="https://www.myget.org/F/fsharp-daily/" />
10+
<add key="nuget.org" value="https://www.nuget.org/api/v2/" />
11+
</packageSources>
612
</configuration>

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ os:
66

77
mono:
88
- latest
9+
- 4.0.5
910

1011
install:
1112

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<configuration>
3+
<startup>
4+
<supportedRuntime version="v4.5"/>
5+
<supportedRuntime version="v4.0"/>
6+
</startup>
7+
</configuration>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<configuration>
3+
<startup>
4+
<supportedRuntime version="v4.5"/>
5+
<supportedRuntime version="v4.0"/>
6+
</startup>
7+
</configuration>
76 KB
Binary file not shown.

packages.config

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<packages>
3-
<package id="NUnit" version="2.6.4" targetFramework="net40" />
4-
<package id="NUnit.Runners" version="2.6.4" />
3+
<package id="dnx-coreclr-win-x86" version="1.0.0-beta7" />
4+
<package id="Microsoft.DotNet.BuildTools" version="1.0.25-prerelease-00085" />
55
<package id="FsCheck" version="2.0.3" />
6+
<package id="NUnit.Runners" version="2.6.4" targetFramework="net45" />
7+
<package id="NUnit" version="3.0.0" targetFramework="net45" />
8+
<package id="NUnit.Console" version="3.0.0" targetFramework="net45" />
69
</packages>

src/FSharpSource.targets

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -109,10 +109,10 @@ Some other NuGET monikers to support in the future, see http://docs.nuget.org/do
109109
</PropertyGroup>
110110

111111
<PropertyGroup>
112-
<NUnitVersion>2.6.4</NUnitVersion>
113-
<NUnitFullVersion>2.6.4.14350</NUnitFullVersion>
114-
<NUnitLibDir>$(FSharpSourcesRoot)\..\packages\NUnit.$(NUnitVersion)\lib\</NUnitLibDir>
115-
<NUnitToolsLibDir>$(FSharpSourcesRoot)\..\packages\NUnit.Runners.$(NUnitVersion)\tools\lib\</NUnitToolsLibDir>
112+
<NUnitVersion>3.0.0</NUnitVersion>
113+
<NUnitFullVersion>3.0.5797.27534</NUnitFullVersion>
114+
<NUnitLibDir>$(FSharpSourcesRoot)\..\packages\NUnit.$(NUnitVersion)\lib\net45</NUnitLibDir>
115+
<NUnitToolsLibDir>$(FSharpSourcesRoot)\..\packages\NUnit.Console.$(NUnitVersion)\tools\</NUnitToolsLibDir>
116116
<FsCheckVersion>2.0.3</FsCheckVersion>
117117
<FsCheckFullVersion>2.0.3.0</FsCheckFullVersion>
118118
<FsCheckLibDir>$(FSharpSourcesRoot)\..\packages\FsCheck.$(FsCheckVersion)\lib\</FsCheckLibDir>
@@ -983,8 +983,8 @@ Some other NuGET monikers to support in the future, see http://docs.nuget.org/do
983983
<PropertyGroup>
984984
<SolutionDir>$(FSharpSourcesRoot)\..\</SolutionDir>
985985
</PropertyGroup>
986-
<Import Project="$(FSharpSourcesRoot)\..\.nuget\NuGet.targets" />
986+
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" />
987987
<Target Name="BeforeBuild" BeforeTargets="Build">
988-
<Exec Command="$(NuGetCommand) restore packages.config -PackagesDirectory packages" WorkingDirectory="$(FSharpSourcesRoot)\.."/>
988+
<Exec Command="$(NuGetCommand) restore packages.config -PackagesDirectory packages -ConfigFile $(SolutionDir).nuget\NuGet.Config" WorkingDirectory="$(FSharpSourcesRoot)\.."/>
989989
</Target>
990990
</Project>

src/absil/il.fsi

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ type PublicKey =
118118
member IsKeyToken: bool
119119
member Key: byte[]
120120
member KeyToken: byte[]
121+
static member KeyAsToken: byte[] -> PublicKey
121122

122123
type ILVersionInfo = uint16 * uint16 * uint16 * uint16
123124

src/absil/illib.fs

Lines changed: 34 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -620,7 +620,7 @@ module Eventually =
620620

621621
let force e = Option.get (forceWhile (fun () -> true) e)
622622

623-
/// Keep running the computation bit by bit until a time limit is reached.
623+
/// Keep running the computation bit by bit until a time limit is reached.
624624
/// The runner gets called each time the computation is restarted
625625
let repeatedlyProgressUntilDoneOrTimeShareOver timeShareInMilliseconds runner e =
626626
let sw = new System.Diagnostics.Stopwatch()
@@ -942,64 +942,66 @@ type LayeredMultiMap<'Key,'Value when 'Key : equality and 'Key : comparison>(con
942942
module Shim =
943943

944944
open System.IO
945-
[<AbstractClass>]
946-
type FileSystem() =
947-
abstract ReadAllBytesShim: fileName:string -> byte[]
948-
default this.ReadAllBytesShim (fileName:string) =
949-
use stream = this.FileStreamReadShim fileName
950-
let len = stream.Length
951-
let buf = Array.zeroCreate<byte> (int len)
952-
stream.Read(buf, 0, (int len)) |> ignore
953-
buf
954945

946+
type IFileSystem =
947+
abstract ReadAllBytesShim: fileName:string -> byte[]
955948
abstract FileStreamReadShim: fileName:string -> System.IO.Stream
956949
abstract FileStreamCreateShim: fileName:string -> System.IO.Stream
957-
abstract GetFullPathShim: fileName:string -> string
950+
abstract FileStreamWriteExistingShim: fileName:string -> System.IO.Stream
958951
/// Take in a filename with an absolute path, and return the same filename
959952
/// but canonicalized with respect to extra path separators (e.g. C:\\\\foo.txt)
960953
/// and '..' portions
961-
abstract SafeGetFullPath: fileName:string -> string
954+
abstract GetFullPathShim: fileName:string -> string
962955
abstract IsPathRootedShim: path:string -> bool
963-
964-
abstract IsInvalidFilename: filename:string -> bool
956+
abstract IsInvalidPathShim: filename:string -> bool
965957
abstract GetTempPathShim : unit -> string
966958
abstract GetLastWriteTimeShim: fileName:string -> System.DateTime
967959
abstract SafeExists: fileName:string -> bool
968960
abstract FileDelete: fileName:string -> unit
969961
abstract AssemblyLoadFrom: fileName:string -> System.Reflection.Assembly
970962
abstract AssemblyLoad: assemblyName:System.Reflection.AssemblyName -> System.Reflection.Assembly
971963

972-
default this.AssemblyLoadFrom(fileName:string) =
973-
#if FX_ATLEAST_40_COMPILER_LOCATION
974-
System.Reflection.Assembly.UnsafeLoadFrom fileName
975-
#else
976-
System.Reflection.Assembly.LoadFrom fileName
977-
#endif
978-
default this.AssemblyLoad(assemblyName:System.Reflection.AssemblyName) = System.Reflection.Assembly.Load assemblyName
979-
980-
981-
let mutable FileSystem =
982-
{ new FileSystem() with
983-
override __.ReadAllBytesShim (fileName:string) = File.ReadAllBytes fileName
964+
type DefaultFileSystem() =
965+
interface IFileSystem with
966+
member __.AssemblyLoadFrom(fileName:string) =
967+
#if FX_ATLEAST_40_COMPILER_LOCATION
968+
System.Reflection.Assembly.UnsafeLoadFrom fileName
969+
#else
970+
System.Reflection.Assembly.LoadFrom fileName
971+
#endif
972+
member __.AssemblyLoad(assemblyName:System.Reflection.AssemblyName) = System.Reflection.Assembly.Load assemblyName
973+
974+
member __.ReadAllBytesShim (fileName:string) = File.ReadAllBytes fileName
984975
member __.FileStreamReadShim (fileName:string) = new FileStream(fileName,FileMode.Open,FileAccess.Read,FileShare.ReadWrite) :> Stream
985976
member __.FileStreamCreateShim (fileName:string) = new FileStream(fileName,FileMode.Create,FileAccess.Write,FileShare.Read ,0x1000,false) :> Stream
977+
member __.FileStreamWriteExistingShim (fileName:string) = new FileStream(fileName,FileMode.Open,FileAccess.Write,FileShare.Read ,0x1000,false) :> Stream
986978
member __.GetFullPathShim (fileName:string) = System.IO.Path.GetFullPath fileName
987-
member __.SafeGetFullPath (fileName:string) =
988-
//System.Diagnostics.Debug.Assert(Path.IsPathRooted(fileName), sprintf "SafeGetFullPath: '%s' is not absolute" fileName)
989-
Path.GetFullPath fileName
990979

991980
member __.IsPathRootedShim (path:string) = Path.IsPathRooted path
992981

993-
member __.IsInvalidFilename(filename:string) =
994-
String.IsNullOrEmpty(filename) || filename.IndexOfAny(Path.GetInvalidFileNameChars()) <> -1
982+
member __.IsInvalidPathShim(path:string) =
983+
let isInvalidPath(p:string) =
984+
String.IsNullOrEmpty(p) || p.IndexOfAny(System.IO.Path.GetInvalidPathChars()) <> -1
985+
986+
let isInvalidFilename(p:string) =
987+
String.IsNullOrEmpty(p) || p.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) <> -1
988+
989+
let isInvalidDirectory(d:string) =
990+
d=null || d.IndexOfAny(Path.GetInvalidPathChars()) <> -1
991+
992+
isInvalidPath (path) ||
993+
let directory = Path.GetDirectoryName(path)
994+
let filename = Path.GetFileName(path)
995+
isInvalidDirectory(directory) || isInvalidFilename(filename)
995996

996997
member __.GetTempPathShim() = System.IO.Path.GetTempPath()
997998

998999
member __.GetLastWriteTimeShim (fileName:string) = File.GetLastWriteTime fileName
9991000
member __.SafeExists (fileName:string) = System.IO.File.Exists fileName
1000-
member __.FileDelete (fileName:string) = System.IO.File.Delete fileName }
1001+
member __.FileDelete (fileName:string) = System.IO.File.Delete fileName
10011002

10021003
type System.Text.Encoding with
10031004
static member GetEncodingShim(n:int) =
10041005
System.Text.Encoding.GetEncoding(n)
10051006

1007+
let mutable FileSystem = DefaultFileSystem() :> IFileSystem

src/absil/ilsupp.fs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -676,10 +676,10 @@ let linkNativeResources (unlinkedResources:byte[] list) (ulLinkedResourceBaseRV
676676
// Conversion was successful, so read the object file
677677
objBytes <- FileSystem.ReadAllBytesShim(tempObjFileName) ;
678678
//Array.Copy(objBytes, pbUnlinkedResource, pbUnlinkedResource.Length)
679-
System.IO.File.Delete(tempObjFileName)
679+
FileSystem.FileDelete(tempObjFileName)
680680
finally
681681
// clean up the temp files
682-
List.iter (fun tempResFileName -> System.IO.File.Delete(tempResFileName)) tempResFiles
682+
List.iter (fun tempResFileName -> FileSystem.FileDelete(tempResFileName)) tempResFiles
683683

684684
// Part 2: Read the COFF file held in pbUnlinkedResource, spit it out into pResBuffer and apply the COFF fixups
685685
// pResBuffer will become the .rsrc section of the PE file
@@ -1090,7 +1090,7 @@ let hashSizeOfMD5 = 16
10901090
// In this case, catch the failure, and not set a checksum.
10911091
let internal setCheckSum (url:string, writer:ISymUnmanagedDocumentWriter) =
10921092
try
1093-
use file = new FileStream(url, FileMode.Open, FileAccess.Read, FileShare.Read)
1093+
use file = FileSystem.FileStreamReadShim(url)
10941094
use md5 = System.Security.Cryptography.MD5.Create()
10951095
let checkSum = md5.ComputeHash(file)
10961096
if (checkSum.Length = hashSizeOfMD5) then

0 commit comments

Comments
 (0)