diff --git a/lkg/FSharp-14.0.23413.0/bin/FSharp.Build.dll b/lkg/FSharp-14.0.23413.0/bin/FSharp.Build.dll index b0f401edb50..e8d1b6f4612 100644 Binary files a/lkg/FSharp-14.0.23413.0/bin/FSharp.Build.dll and b/lkg/FSharp-14.0.23413.0/bin/FSharp.Build.dll differ diff --git a/src/absil/ilwrite.fs b/src/absil/ilwrite.fs index f2bb3402b36..966de947a05 100644 --- a/src/absil/ilwrite.fs +++ b/src/absil/ilwrite.fs @@ -3054,10 +3054,6 @@ let generateIL requiredDataFixups (desiredMetadataVersion,generatePdb, ilg : ILG //===================================================================== // TABLES+BLOBS --> PHYSICAL METADATA+BLOBS //===================================================================== -type BinaryChunk = - { size: int32 - addr: int32 } - let chunk sz next = ({addr=next; size=sz},next + sz) let nochunk next = ({addr= 0x0;size= 0x0; } ,next) @@ -3541,7 +3537,7 @@ let writeDirectory os dict = let writeBytes (os: BinaryWriter) (chunk:byte[]) = os.Write(chunk,0,chunk.Length) -let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: ILStrongNameSigner option, portablePDB, +let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: ILStrongNameSigner option, portablePDB, embeddedPDB, fixupOverlappingSequencePoints, emitTailcalls, showTimes, dumpDebugInfo) modul noDebugData = // Store the public key from the signer into the manifest. This means it will be written // to the binary and also acts as an indicator to leave space for delay sign @@ -3590,7 +3586,7 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: with e -> failwith ("Could not open file for writing (binary mode): " + outfile) - let pdbData,debugDirectoryChunk,debugDataChunk,textV2P,mappings = + let pdbData,pdbOpt,debugDirectoryChunk,debugDataChunk,debugEmbeddedPdbChunk,textV2P,mappings = try let imageBaseReal = modul.ImageBase // FIXED CHOICE @@ -3683,7 +3679,7 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: let importLookupTableChunk,next = chunk 0x14 next let importNameHintTableChunk,next = chunk 0x0e next let mscoreeStringChunk,next = chunk 0x0c next - + let next = align 0x10 (next + 0x05) - 0x05 let importTableChunk = { addr=importTableChunk.addr; size = next - importTableChunk.addr} let importTableChunkPadding = importTableChunk.size - (0x28 + 0x14 + 0x0e + 0x0c) @@ -3691,8 +3687,22 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: let next = next + 0x03 let entrypointCodeChunk,next = chunk 0x06 next let globalpointerCodeChunk,next = chunk (if isItanium then 0x8 else 0x0) next - - let debugDirectoryChunk,next = chunk (if pdbfile = None then 0x0 else sizeof_IMAGE_DEBUG_DIRECTORY) next + + let pdbOpt = + match portablePDB with + | true -> + let struct (uncompressedLength, contentId, stream) as pdbStream = generatePortablePdb fixupOverlappingSequencePoints showTimes pdbData + if embeddedPDB then Some (compressPortablePdbStream uncompressedLength contentId stream) + else Some (pdbStream) + | _ -> None + let debugDirectoryChunk,next = + chunk (if pdbfile = None then + 0x0 + else if embeddedPDB && portablePDB then + sizeof_IMAGE_DEBUG_DIRECTORY * 2 + else + sizeof_IMAGE_DEBUG_DIRECTORY + ) next // The debug data is given to us by the PDB writer and appears to // typically be the type of the data plus the PDB file name. We fill // this in after we've written the binary. We approximate the size according @@ -3700,11 +3710,19 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: let debugDataJustInCase = 40 let debugDataChunk,next = chunk (align 0x4 (match pdbfile with - | None -> 0x0 + | None -> 0 | Some f -> (24 + System.Text.Encoding.Unicode.GetByteCount(f) // See bug 748444 + debugDataJustInCase))) next + let debugEmbeddedPdbChunk,next = + let streamLength = + match pdbOpt with + | Some struct (_,_,stream) -> int(stream.Length) + | None -> 0 + chunk (align 0x4 (match embeddedPDB with + | true -> 8 + streamLength + | _ -> 0 )) next let textSectionSize = next - textSectionAddr let nextPhys = align alignPhys (textSectionPhysLoc + textSectionSize) @@ -4094,11 +4112,14 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: if isItanium then write (Some (textV2P globalpointerCodeChunk.addr)) os " itanium global pointer" [| 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy; 0x0uy |] - + if pdbfile.IsSome then - write (Some (textV2P debugDirectoryChunk.addr)) os "debug directory" (Array.create sizeof_IMAGE_DEBUG_DIRECTORY 0x0uy) + write (Some (textV2P debugDirectoryChunk.addr)) os "debug directory" (Array.create debugDirectoryChunk.size 0x0uy) write (Some (textV2P debugDataChunk.addr)) os "debug data" (Array.create debugDataChunk.size 0x0uy) - + + if embeddedPDB then + write (Some (textV2P debugEmbeddedPdbChunk.addr)) os "debug data" (Array.create debugEmbeddedPdbChunk.size 0x0uy) + writePadding os "end of .text" (dataSectionPhysLoc - textSectionPhysLoc - textSectionSize) // DATA SECTION @@ -4145,7 +4166,7 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: FileSystemUtilites.setExecutablePermission outfile with _ -> () - pdbData,debugDirectoryChunk,debugDataChunk,textV2P,mappings + pdbData,pdbOpt,debugDirectoryChunk,debugDataChunk,debugEmbeddedPdbChunk,textV2P,mappings // Looks like a finally with e -> @@ -4169,14 +4190,17 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: | Some fpdb -> try let idd = + match pdbOpt with + | Some struct(originalLength, contentId, stream) -> + if embeddedPDB then + embedPortablePdbInfo originalLength contentId stream showTimes fpdb debugDataChunk debugEmbeddedPdbChunk + else + writePortablePdbInfo contentId stream showTimes fpdb debugDataChunk + | None -> #if FX_NO_PDB_WRITER - ignore portablePDB - writePortablePdbInfo fixupOverlappingSequencePoints showTimes fpdb pdbData + Array.empty #else - if portablePDB then - writePortablePdbInfo fixupOverlappingSequencePoints showTimes fpdb pdbData - else - writePdbInfo fixupOverlappingSequencePoints showTimes outfile fpdb pdbData + writePdbInfo fixupOverlappingSequencePoints showTimes outfile fpdb pdbData debugDataChunk #endif reportTime showTimes "Generate PDB Info" @@ -4186,19 +4210,22 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: try // write the IMAGE_DEBUG_DIRECTORY os2.BaseStream.Seek (int64 (textV2P debugDirectoryChunk.addr), SeekOrigin.Begin) |> ignore - writeInt32 os2 idd.iddCharacteristics // IMAGE_DEBUG_DIRECTORY.Characteristics - writeInt32 os2 idd.iddTimestamp - writeInt32AsUInt16 os2 idd.iddMajorVersion - writeInt32AsUInt16 os2 idd.iddMinorVersion - writeInt32 os2 idd.iddType - writeInt32 os2 idd.iddData.Length // IMAGE_DEBUG_DIRECTORY.SizeOfData - writeInt32 os2 debugDataChunk.addr // IMAGE_DEBUG_DIRECTORY.AddressOfRawData - writeInt32 os2 (textV2P debugDataChunk.addr) // IMAGE_DEBUG_DIRECTORY.PointerToRawData - - // write the debug raw data as given us by the PDB writer - os2.BaseStream.Seek (int64 (textV2P debugDataChunk.addr), SeekOrigin.Begin) |> ignore - if debugDataChunk.size < idd.iddData.Length then failwith "Debug data area is not big enough. Debug info may not be usable" - writeBytes os2 idd.iddData + for i in idd do + writeInt32 os2 i.iddCharacteristics // IMAGE_DEBUG_DIRECTORY.Characteristics + writeInt32 os2 i.iddTimestamp + writeInt32AsUInt16 os2 i.iddMajorVersion + writeInt32AsUInt16 os2 i.iddMinorVersion + writeInt32 os2 i.iddType + writeInt32 os2 i.iddData.Length // IMAGE_DEBUG_DIRECTORY.SizeOfData + writeInt32 os2 i.iddChunk.addr // IMAGE_DEBUG_DIRECTORY.AddressOfRawData + writeInt32 os2 (textV2P i.iddChunk.addr) // IMAGE_DEBUG_DIRECTORY.PointerToRawData + + // Write the Debug Data + for i in idd do + // write the debug raw data as given us by the PDB writer + os2.BaseStream.Seek (int64 (textV2P i.iddChunk.addr), SeekOrigin.Begin) |> ignore + if i.iddChunk.size < i.iddData.Length then failwith "Debug data area is not big enough. Debug info may not be usable" + writeBytes os2 i.iddData os2.Dispose() with e -> failwith ("Error while writing debug directory entry: "+e.Message) @@ -4209,6 +4236,7 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: end ignore debugDataChunk + ignore debugEmbeddedPdbChunk reportTime showTimes "Finalize PDB" /// Sign the binary. No further changes to binary allowed past this point! @@ -4228,19 +4256,18 @@ let writeBinaryAndReportMappings (outfile, ilg, pdbfile: string option, signer: //Finished writing and signing the binary and debug info... mappings - type options = { ilg: ILGlobals; pdbfile: string option portablePDB: bool + embeddedPDB: bool signer: ILStrongNameSigner option fixupOverlappingSequencePoints: bool emitTailcalls : bool showTimes: bool dumpDebugInfo:bool } - let WriteILBinary (outfile, (args: options), modul, noDebugData) = - ignore (writeBinaryAndReportMappings (outfile, args.ilg, args.pdbfile, args.signer, args.portablePDB, + ignore (writeBinaryAndReportMappings (outfile, args.ilg, args.pdbfile, args.signer, args.portablePDB, args.embeddedPDB, args.fixupOverlappingSequencePoints, args.emitTailcalls, args.showTimes, args.dumpDebugInfo) modul noDebugData) diff --git a/src/absil/ilwrite.fsi b/src/absil/ilwrite.fsi index aab8b46221b..51d1842b208 100644 --- a/src/absil/ilwrite.fsi +++ b/src/absil/ilwrite.fsi @@ -19,6 +19,7 @@ type options = { ilg: ILGlobals pdbfile: string option portablePDB: bool + embeddedPDB: bool signer : ILStrongNameSigner option fixupOverlappingSequencePoints : bool emitTailcalls: bool diff --git a/src/absil/ilwritepdb.fs b/src/absil/ilwritepdb.fs index ca569235362..1b82f9352dd 100644 --- a/src/absil/ilwritepdb.fs +++ b/src/absil/ilwritepdb.fs @@ -6,6 +6,7 @@ open System open System.Collections.Generic open System.Collections.Immutable open System.IO +open System.IO.Compression open System.Reflection open System.Reflection.Metadata open System.Reflection.Metadata.Ecma335 @@ -86,9 +87,9 @@ type PdbData = Methods: PdbMethodData[] TableRowCounts: int[] } -//--------------------------------------------------------------------- -// Portable PDB Writer -//--------------------------------------------------------------------- +type BinaryChunk = + { size: int32 + addr: int32 } type idd = { iddCharacteristics: int32; @@ -96,34 +97,60 @@ type idd = iddMinorVersion: int32; (* actually u16 in IMAGE_DEBUG_DIRECTORY *) iddType: int32; iddTimestamp: int32; - iddData: byte[];} + iddData: byte[]; + iddChunk: BinaryChunk } -let magicNumber = 0x53445352L -let pdbGetDebugInfo (mvid:byte[]) (timestamp:int32) (filepath:string) = - let iddDataBuffer = +//--------------------------------------------------------------------- +// Portable PDB Writer +//--------------------------------------------------------------------- +let cvMagicNumber = 0x53445352L +let pdbGetCvDebugInfo (mvid:byte[]) (timestamp:int32) (filepath:string) (cvChunk:BinaryChunk) = + let iddCvBuffer = + // Debug directory entry let path = (System.Text.Encoding.UTF8.GetBytes filepath) let buffer = Array.zeroCreate (sizeof + mvid.Length + sizeof + path.Length + 1) - let struct (offset, size) = struct(0, sizeof) // Magic Number RSDS dword: 0x53445352L - Buffer.BlockCopy(BitConverter.GetBytes(magicNumber), 0, buffer, offset, size) - + Buffer.BlockCopy(BitConverter.GetBytes(cvMagicNumber), 0, buffer, offset, size) let struct (offset, size) = struct (offset + size, mvid.Length) // mvid Guid Buffer.BlockCopy(mvid, 0, buffer, offset, size) - let struct (offset, size) = struct (offset + size, sizeof) // # of pdb files generated (1) Buffer.BlockCopy(BitConverter.GetBytes(1), 0, buffer, offset, size) - let struct (offset, size) = struct (offset + size, path.Length) // Path to pdb string Buffer.BlockCopy(path, 0, buffer, offset, size) - buffer - - { iddCharacteristics = 0x0; // Reserved - iddMajorVersion = 0x0; // VersionMajor should be 0 - iddMinorVersion = 0x0; // VersionMinor should be 0 - iddType = 0x2; // IMAGE_DEBUG_TYPE_CODEVIEW + { iddCharacteristics = 0; // Reserved + iddMajorVersion = 0; // VersionMajor should be 0 + iddMinorVersion = 0; // VersionMinor should be 0 + iddType = 2; // IMAGE_DEBUG_TYPE_CODEVIEW iddTimestamp = timestamp; - iddData = iddDataBuffer } // Path name to the pdb file when built + iddData = iddCvBuffer; // Path name to the pdb file when built + iddChunk = cvChunk; + } + +let pdbMagicNumber= 0x4244504dL +let pdbGetPdbDebugInfo (embeddedPDBChunk:BinaryChunk) (uncompressedLength:int64) (stream:MemoryStream) = + let iddPdbBuffer = + let buffer = Array.zeroCreate (sizeof + sizeof + int(stream.Length)) + let struct (offset, size) = struct(0, sizeof) // Magic Number dword: 0x4244504dL + Buffer.BlockCopy(BitConverter.GetBytes(pdbMagicNumber), 0, buffer, offset, size) + let struct (offset, size) = struct(offset + size, sizeof) // Uncompressed size + Buffer.BlockCopy(BitConverter.GetBytes((int uncompressedLength)), 0, buffer, offset, size) + let struct (offset, size) = struct(offset + size, int(stream.Length)) // Uncompressed size + Buffer.BlockCopy(stream.ToArray(), 0, buffer, offset, size) + buffer + { iddCharacteristics = 0; // Reserved + iddMajorVersion = 0; // VersionMajor should be 0 + iddMinorVersion = 0x0100; // VersionMinor should be 0x0100 + iddType = 17; // IMAGE_DEBUG_TYPE_EMBEDDEDPDB + iddTimestamp = 0; + iddData = iddPdbBuffer; // Path name to the pdb file when built + iddChunk = embeddedPDBChunk; + } + +let pdbGetDebugInfo (mvid:byte[]) (timestamp:int32) (filepath:string) (cvChunk:BinaryChunk) (embeddedPDBChunk:BinaryChunk option) (uncompressedLength:int64) (stream:MemoryStream option)= + match stream, embeddedPDBChunk with + | None, _ | _, None -> [| pdbGetCvDebugInfo mvid timestamp filepath cvChunk |] + | Some s, Some chunk -> [| pdbGetCvDebugInfo mvid timestamp filepath cvChunk; pdbGetPdbDebugInfo chunk uncompressedLength s; |] // Document checksum algorithms let guidSourceHashMD5 = System.Guid(0x406ea660u, 0x64cfus, 0x4c82us, 0xb6uy, 0xf0uy, 0x42uy, 0xd4uy, 0x81uy, 0x72uy, 0xa7uy, 0x99uy) //406ea660-64cf-4c82-b6f0-42d48172a799 @@ -200,10 +227,7 @@ let fixupOverlappingSequencePoints fixupSPs showTimes methods = Array.sortInPlaceBy fst allSps spCounts, allSps -let writePortablePdbInfo (fixupSPs:bool) showTimes fpdb (info:PdbData) = - - try FileSystem.FileDelete fpdb with _ -> () - +let generatePortablePdb fixupSPs showTimes (info:PdbData) = sortMethods showTimes info let _spCounts, _allSps = fixupOverlappingSequencePoints fixupSPs showTimes info.Methods let externalRowCounts = getRowCounts info.TableRowCounts @@ -336,18 +360,18 @@ let writePortablePdbInfo (fixupSPs:bool) showTimes fpdb (info:PdbData) = let rec writePdbScope scope = if scope.Children.Length = 0 then metadata.AddLocalScope(MetadataTokens.MethodDefinitionHandle(minfo.MethToken), - Unchecked.defaultof, - nextHandle lastLocalVariableHandle, - Unchecked.defaultof, - 0, - scope.EndOffset - scope.StartOffset) |>ignore + Unchecked.defaultof, + nextHandle lastLocalVariableHandle, + Unchecked.defaultof, + 0, + scope.EndOffset - scope.StartOffset) |>ignore else metadata.AddLocalScope(MetadataTokens.MethodDefinitionHandle(minfo.MethToken), - Unchecked.defaultof, - nextHandle lastLocalVariableHandle, - Unchecked.defaultof, - scope.StartOffset, - scope.EndOffset - scope.StartOffset) |>ignore + Unchecked.defaultof, + nextHandle lastLocalVariableHandle, + Unchecked.defaultof, + scope.StartOffset, + scope.EndOffset - scope.StartOffset) |>ignore for localVariable in scope.Locals do lastLocalVariableHandle <- metadata.AddLocalVariable(LocalVariableAttributes.None, localVariable.Index, metadata.GetOrAddString(localVariable.Name)) @@ -365,12 +389,28 @@ let writePortablePdbInfo (fixupSPs:bool) showTimes fpdb (info:PdbData) = let serializer = PortablePdbBuilder(metadata, externalRowCounts, entryPoint, null) let blobBuilder = new BlobBuilder() let contentId= serializer.Serialize(blobBuilder) - - reportTime showTimes "PDB: Created" - use portablePdbStream = new FileStream(fpdb, FileMode.Create, FileAccess.ReadWrite) + let portablePdbStream = new MemoryStream() blobBuilder.WriteContentTo(portablePdbStream) + reportTime showTimes "PDB: Created" + struct (portablePdbStream.Length, contentId, portablePdbStream) + +let compressPortablePdbStream (uncompressedLength:int64) (contentId:BlobContentId) (stream:MemoryStream) = + let compressedStream = new MemoryStream() + use compressionStream = new DeflateStream(compressedStream, CompressionMode.Compress,true) + stream.WriteTo(compressionStream) + struct (uncompressedLength, contentId, compressedStream) + +let writePortablePdbInfo (contentId:BlobContentId) (stream:MemoryStream) showTimes fpdb cvChunk = + try FileSystem.FileDelete fpdb with _ -> () + use pdbFile = new FileStream(fpdb, FileMode.Create, FileAccess.ReadWrite) + stream.WriteTo(pdbFile) + reportTime showTimes "PDB: Closed" + pdbGetDebugInfo (contentId.Guid.ToByteArray()) (int32 (contentId.Stamp)) fpdb cvChunk None 0L None + +let embedPortablePdbInfo (uncompressedLength:int64) (contentId:BlobContentId) (stream:MemoryStream) showTimes fpdb cvChunk pdbChunk = reportTime showTimes "PDB: Closed" - pdbGetDebugInfo (contentId.Guid.ToByteArray()) (int32(contentId.Stamp)) fpdb + let fn = Path.GetFileName(fpdb) + pdbGetDebugInfo (contentId.Guid.ToByteArray()) (int32 (contentId.Stamp)) fn cvChunk (Some pdbChunk) uncompressedLength (Some stream) #if FX_NO_PDB_WRITER #else @@ -378,7 +418,7 @@ let writePortablePdbInfo (fixupSPs:bool) showTimes fpdb (info:PdbData) = // PDB Writer. The function [WritePdbInfo] abstracts the // imperative calls to the Symbol Writer API. //--------------------------------------------------------------------- -let writePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = +let writePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info cvChunk = try FileSystem.FileDelete fpdb with _ -> () @@ -487,12 +527,13 @@ let writePdbInfo fixupOverlappingSequencePoints showTimes f fpdb info = pdbClose !pdbw f fpdb; reportTime showTimes "PDB: Closed" - { iddCharacteristics = res.iddCharacteristics; - iddMajorVersion = res.iddMajorVersion; - iddMinorVersion = res.iddMinorVersion; - iddType = res.iddType; - iddTimestamp = info.Timestamp; - iddData = res.iddData} + [| { iddCharacteristics = res.iddCharacteristics; + iddMajorVersion = res.iddMajorVersion; + iddMinorVersion = res.iddMinorVersion; + iddType = res.iddType; + iddTimestamp = info.Timestamp; + iddData = res.iddData + iddChunk = cvChunk } |] #endif #if ENABLE_MONO_SUPPORT diff --git a/src/absil/ilwritepdb.fsi b/src/absil/ilwritepdb.fsi index de03c2bbf37..1baf1d4b98c 100644 --- a/src/absil/ilwritepdb.fsi +++ b/src/absil/ilwritepdb.fsi @@ -7,6 +7,8 @@ open Microsoft.FSharp.Compiler.AbstractIL.IL open Microsoft.FSharp.Compiler.ErrorLogger open Microsoft.FSharp.Compiler.Range open System.Collections.Generic +open System.IO +open System.Reflection.Metadata type PdbDocumentData = ILSourceDocument @@ -67,16 +69,24 @@ val logDebugInfo : string -> PdbData -> unit val writeMdbInfo<'a> : string -> string -> PdbData -> 'a #endif +type BinaryChunk = + { size: int32 + addr: int32 } + type idd = { iddCharacteristics: int32; iddMajorVersion: int32; (* actually u16 in IMAGE_DEBUG_DIRECTORY *) iddMinorVersion: int32; (* actually u16 in IMAGE_DEBUG_DIRECTORY *) iddType: int32; iddTimestamp: int32; - iddData: byte[]; } + iddData: byte[]; + iddChunk: BinaryChunk } -val writePortablePdbInfo : fixupOverlappingSequencePoints:bool -> showTimes:bool -> fpdb:string -> info:PdbData -> idd +val generatePortablePdb : fixupSPs:bool -> showTimes:bool -> info:PdbData -> struct (int64 * BlobContentId * MemoryStream) +val compressPortablePdbStream : uncompressedLength:int64 -> contentId:BlobContentId -> stream:MemoryStream -> struct (int64 * BlobContentId * MemoryStream) +val embedPortablePdbInfo : uncompressedLength:int64 -> contentId:BlobContentId -> stream:MemoryStream -> showTimes:bool -> fpdb:string -> cvChunk:BinaryChunk -> pdbChunk:BinaryChunk -> idd[] +val writePortablePdbInfo : contentId:BlobContentId -> stream:MemoryStream -> showTimes:bool -> fpdb:string -> cvChunk:BinaryChunk -> idd[] #if !FX_NO_PDB_WRITER -val writePdbInfo : fixupOverlappingSequencePoints:bool -> showTimes:bool -> f:string -> fpdb:string -> info:PdbData -> idd +val writePdbInfo : fixupOverlappingSequencePoints:bool -> showTimes:bool -> f:string -> fpdb:string -> info:PdbData -> cvChunk:BinaryChunk -> idd[] #endif diff --git a/src/fsharp/CompileOps.fs b/src/fsharp/CompileOps.fs index 879ccf0f2c4..7ada6090e9e 100644 --- a/src/fsharp/CompileOps.fs +++ b/src/fsharp/CompileOps.fs @@ -2072,6 +2072,7 @@ type TcConfigBuilder = mutable useSignatureDataFile : bool mutable jitTracking : bool mutable portablePDB : bool + mutable embeddedPDB : bool mutable ignoreSymbolStoreSequencePoints : bool mutable internConstantStrings : bool mutable extraOptimizationIterations : int @@ -2241,6 +2242,7 @@ type TcConfigBuilder = useSignatureDataFile = false jitTracking = true portablePDB = true + embeddedPDB = true ignoreSymbolStoreSequencePoints = false internConstantStrings = true extraOptimizationIterations = 0 @@ -2729,6 +2731,7 @@ type TcConfig private (data : TcConfigBuilder,validate:bool) = member x.useSignatureDataFile = data.useSignatureDataFile member x.jitTracking = data.jitTracking member x.portablePDB = data.portablePDB + member x.embeddedPDB = data.embeddedPDB member x.ignoreSymbolStoreSequencePoints = data.ignoreSymbolStoreSequencePoints member x.internConstantStrings = data.internConstantStrings member x.extraOptimizationIterations = data.extraOptimizationIterations diff --git a/src/fsharp/CompileOps.fsi b/src/fsharp/CompileOps.fsi index 1d00cd89d98..34a4f8bf763 100755 --- a/src/fsharp/CompileOps.fsi +++ b/src/fsharp/CompileOps.fsi @@ -306,6 +306,7 @@ type TcConfigBuilder = mutable useSignatureDataFile : bool mutable jitTracking : bool mutable portablePDB : bool + mutable embeddedPDB : bool mutable ignoreSymbolStoreSequencePoints : bool mutable internConstantStrings : bool mutable extraOptimizationIterations : int @@ -459,6 +460,7 @@ type TcConfig = member useSignatureDataFile : bool member jitTracking : bool member portablePDB : bool + member embeddedPDB : bool member ignoreSymbolStoreSequencePoints : bool member internConstantStrings : bool member extraOptimizationIterations : int diff --git a/src/fsharp/CompileOptions.fs b/src/fsharp/CompileOptions.fs index c1867acbb52..ccf2c6e96e6 100644 --- a/src/fsharp/CompileOptions.fs +++ b/src/fsharp/CompileOptions.fs @@ -119,7 +119,7 @@ let PrintCompilerOption (CompilerOption(_s,_tag,_spec,_,help) as compilerOption) // single space - space. // description - words upto but excluding the final character of the line. assert(flagWidth = 30) - printf "%-30s" (compilerOptionUsage compilerOption) + printf "%-40s" (compilerOptionUsage compilerOption) let printWord column (word:string) = // Have printed upto column. // Now print the next word including any preceeding whitespace. @@ -127,7 +127,7 @@ let PrintCompilerOption (CompilerOption(_s,_tag,_spec,_,help) as compilerOption) if column + 1 (*space*) + word.Length >= lineWidth then // NOTE: "equality" ensures final character of the line is never printed printfn "" (* newline *) assert(flagWidth = 30) - printf "%-30s %s" ""(*<--flags*) word + printf "%-40s %s" ""(*<--flags*) word flagWidth + 1 + word.Length else printf " %s" word @@ -474,11 +474,12 @@ let SetDebugSwitch (tcConfigB : TcConfigBuilder) (dtype : string option) (s : Op match dtype with | Some(s) -> match s with - | "portable" -> tcConfigB.portablePDB <- true ; tcConfigB.jitTracking <- true - | "pdbonly" -> tcConfigB.portablePDB <- false; tcConfigB.jitTracking <- false - | "full" -> tcConfigB.portablePDB <- false; tcConfigB.jitTracking <- true + | "portable" -> tcConfigB.portablePDB <- true ; tcConfigB.embeddedPDB <- false; tcConfigB.jitTracking <- true + | "pdbonly" -> tcConfigB.portablePDB <- false; tcConfigB.embeddedPDB <- false; tcConfigB.jitTracking <- false + | "embedded" -> tcConfigB.portablePDB <- true; tcConfigB.embeddedPDB <- true; tcConfigB.jitTracking <- true + | "full" -> tcConfigB.portablePDB <- false; tcConfigB.embeddedPDB <- false; tcConfigB.jitTracking <- true | _ -> error(Error(FSComp.SR.optsUnrecognizedDebugType(s), rangeCmdArgs)) - | None -> tcConfigB.portablePDB <- false; tcConfigB.jitTracking <- s = OptionSwitch.On; + | None -> tcConfigB.portablePDB <- false; tcConfigB.embeddedPDB <- false; tcConfigB.jitTracking <- s = OptionSwitch.On; tcConfigB.debuginfo <- s = OptionSwitch.On let setOutFileName tcConfigB s = @@ -499,7 +500,7 @@ let tagFileList = "" let tagDirList = "" let tagPathList = "" let tagResInfo = "" -let tagFullPDBOnlyPortable = "{full|pdbonly|portable}" +let tagFullPDBOnlyPortable = "{full|pdbonly|portable|embedded}" let tagWarnList = "" let tagSymbolList = "" let tagAddress = "
" @@ -522,6 +523,7 @@ let PrintOptionInfo (tcConfigB:TcConfigBuilder) = printfn " doFinalSimplify. . . . : %+A" tcConfigB.doFinalSimplify printfn " jitTracking . . . . . : %+A" tcConfigB.jitTracking printfn " portablePDB. . . . . . : %+A" tcConfigB.portablePDB + printfn " embeddedPDB. . . . . . : %+A" tcConfigB.embeddedPDB printfn " debuginfo . . . . . . : %+A" tcConfigB.debuginfo printfn " resolutionEnvironment : %+A" tcConfigB.resolutionEnvironment printfn " product . . . . . . . : %+A" tcConfigB.productNameForBannerText diff --git a/src/fsharp/FSComp.txt b/src/fsharp/FSComp.txt index cefdff8663e..8f14f835865 100644 --- a/src/fsharp/FSComp.txt +++ b/src/fsharp/FSComp.txt @@ -839,7 +839,7 @@ optsNowin32manifest,"Do not include the default Win32 manifest" optsResource,"Embed the specified managed resource" optsLinkresource,"Link the specified resource to this assembly where the resinfo format is [,[,public|private]]" optsDebugPM,"Emit debug information (Short form: -g)" -optsDebug,"Specify debugging type: full, portable, pdbonly. ('%s' is the default if no debuggging type specified and enables attaching a debugger to a running program. 'portable' is a cross-platform format)." +optsDebug,"Specify debugging type: full, portable, embedded, pdbonly. ('%s' is the default if no debuggging type specified and enables attaching a debugger to a running program, 'portable' is a cross-platform format, 'embedded' is a cross-platform format embedded into the output file)." optsOptimize,"Enable optimizations (Short form: -O)" optsTailcalls,"Enable or disable tailcalls" optsCrossoptimize,"Enable or disable cross-module optimizations" diff --git a/src/fsharp/FSharp.Build/Fsc.fs b/src/fsharp/FSharp.Build/Fsc.fs index 9b42f425cf1..583fa2bf62f 100644 --- a/src/fsharp/FSharp.Build/Fsc.fs +++ b/src/fsharp/FSharp.Build/Fsc.fs @@ -180,6 +180,7 @@ type [ null | "PORTABLE" -> "portable" | "PDBONLY" -> "pdbonly" + | "EMBEDDED" -> "embedded" | "FULL" -> "full" | _ -> null) // NoFramework diff --git a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj index 24d87a98c01..da37aa76f7d 100644 --- a/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj +++ b/src/fsharp/FSharp.Compiler/FSharp.Compiler.fsproj @@ -528,7 +528,7 @@ ..\..\..\packages\Microsoft.DiaSymReader.1.0.8\lib\portable-net45+win8\Microsoft.DiaSymReader.dll ..\..\..\packages\System.Reflection.Metadata.1.4.1-beta-24227-04\lib\portable-net45+win8\System.Reflection.Metadata.dll ..\..\..\packages\System.Collections.Immutable.1.2.0\lib\portable-net45+win8+wp8+wpa81\System.Collections.Immutable.dll - ..\..\..\packages\System.ValueTuple.4.0.0-rc3-24212-01\lib\netstandard1.1\System.ValueTuple.dllfalse + ..\..\..\packages\System.ValueTuple.4.0.0-rc3-24212-01\lib\netstandard1.1\System.ValueTuple.dlltrue diff --git a/src/fsharp/fsc.fs b/src/fsharp/fsc.fs index 43b1659e453..73be4f34e89 100755 --- a/src/fsharp/fsc.fs +++ b/src/fsharp/fsc.fs @@ -1741,6 +1741,7 @@ module FileWriter = emitTailcalls = tcConfig.emitTailcalls showTimes = tcConfig.showTimes portablePDB = tcConfig.portablePDB + embeddedPDB = tcConfig.embeddedPDB signer = GetSigner signingInfo fixupOverlappingSequencePoints = false dumpDebugInfo = tcConfig.dumpDebugInfo }, diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/help/comparer.fsx b/tests/fsharpqa/Source/CompilerOptions/fsc/help/comparer.fsx index 5ea487fbd26..3b812c21ae1 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/help/comparer.fsx +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/help/comparer.fsx @@ -17,8 +17,8 @@ let f2 = File2List fn2 let mutable i = 0 let compare (f1:string list) (f2:string list) = List.forall2 (fun (a:string) (b:string) -> - let aa = System.Text.RegularExpressions.Regex.Replace(a, @"F# Compiler version .+", "F# 3.0 Compiler version") - let bb = System.Text.RegularExpressions.Regex.Replace(b, @"F# Compiler version .+", "F# 3.0 Compiler version") + let aa = System.Text.RegularExpressions.Regex.Replace(a, @"F# Compiler version .+", "F# Compiler") + let bb = System.Text.RegularExpressions.Regex.Replace(b, @"F# Compiler version .+", "F# Compiler") i <- i+1 if (aa = bb) then @@ -30,4 +30,4 @@ let compare (f1:string list) (f2:string list) = List.forall2 (fun (a:string) (b: false ) f1 f2 -exit (if (f1.Length = f2.Length && compare f1 f2) then 0 else 1) +exit (if (f1.Length = f2.Length && compare f1 f2) then 0 else printfn "File lengths differ"; 1) diff --git a/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl index 227de6e5682..1d028d6669d 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsc/help/help40.437.1033.bsl @@ -1,110 +1,112 @@ -Microsoft (R) F# Compiler version 12.0.50525.0 +Microsoft (R) F# Compiler version 3.0 Copyright (c) Microsoft Corporation. All Rights Reserved. - OUTPUT FILES - ---out: Name of the output file (Short form: -o) ---target:exe Build a console executable ---target:winexe Build a Windows executable ---target:library Build a library (Short form: -a) ---target:module Build a module that can be added to another - assembly ---delaysign[+|-] Delay-sign the assembly using only the public - portion of the strong name key ---publicsign[+|-] Public-sign the assembly using only the public - portion of the strong name key, and mark the - assembly as signed ---doc: Write the xmldoc of the assembly to the given - file ---keyfile: Specify a strong name key file ---keycontainer: Specify a strong name key container ---platform: Limit which platforms this code can run on: x86, - Itanium, x64, anycpu32bitpreferred, or anycpu. - The default is anycpu. ---nooptimizationdata Only include optimization information essential - for implementing inlined constructs. Inhibits - cross-module inlining but improves binary - compatibility. ---nointerfacedata Don't add a resource to the generated assembly - containing F#-specific metadata ---sig: Print the inferred interface of the assembly to - a file ---nocopyfsharpcore Don't copy FSharp.Core.dll along the produced - binaries +--out: Name of the output file (Short form: -o) +--target:exe Build a console executable +--target:winexe Build a Windows executable +--target:library Build a library (Short form: -a) +--target:module Build a module that can be added to another + assembly +--delaysign[+|-] Delay-sign the assembly using only the public + portion of the strong name key +--publicsign[+|-] Public-sign the assembly using only the public + portion of the strong name key, and mark the + assembly as signed +--doc: Write the xmldoc of the assembly to the given + file +--keyfile: Specify a strong name key file +--keycontainer: Specify a strong name key container +--platform: Limit which platforms this code can run on: x86, + Itanium, x64, anycpu32bitpreferred, or anycpu. + The default is anycpu. +--nooptimizationdata Only include optimization information essential + for implementing inlined constructs. Inhibits + cross-module inlining but improves binary + compatibility. +--nointerfacedata Don't add a resource to the generated assembly + containing F#-specific metadata +--sig: Print the inferred interface of the assembly to + a file +--nocopyfsharpcore Don't copy FSharp.Core.dll along the produced + binaries - INPUT FILES - ---reference: Reference an assembly (Short form: -r) +--reference: Reference an assembly (Short form: -r) - RESOURCES - ---win32res: Specify a Win32 resource file (.res) ---win32manifest: Specify a Win32 manifest file ---nowin32manifest Do not include the default Win32 manifest ---resource: Embed the specified managed resource ---linkresource: Link the specified resource to this assembly - where the resinfo format is [,[,public|private]] +--win32res: Specify a Win32 resource file (.res) +--win32manifest: Specify a Win32 manifest file +--nowin32manifest Do not include the default Win32 manifest +--resource: Embed the specified managed resource +--linkresource: Link the specified resource to this assembly + where the resinfo format is [,[,public|private]] - CODE GENERATION - ---debug[+|-] Emit debug information (Short form: -g) ---debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('full' is the default if no debuggging type - specified and enables attaching a debugger to a - running program. 'portable' is a cross-platform - format). ---optimize[+|-] Enable optimizations (Short form: -O) ---tailcalls[+|-] Enable or disable tailcalls ---crossoptimize[+|-] Enable or disable cross-module optimizations +--debug[+|-] Emit debug information (Short form: -g) +--debug:{full|pdbonly|portable|embedded} Specify debugging type: full, portable, + embedded, pdbonly. ('full' is the default if no + debuggging type specified and enables attaching + a debugger to a running program, 'portable' is a + cross-platform format, 'embedded' is a + cross-platform format embedded into the output + file). +--optimize[+|-] Enable optimizations (Short form: -O) +--tailcalls[+|-] Enable or disable tailcalls +--crossoptimize[+|-] Enable or disable cross-module optimizations - ERRORS AND WARNINGS - ---warnaserror[+|-] Report all warnings as errors ---warnaserror[+|-]: Report specific warnings as errors ---warn: Set a warning level (0-5) ---nowarn: Disable specific warning messages ---warnon: Enable specific warnings that may be off by - default ---consolecolors[+|-] Output warning and error messages in color +--warnaserror[+|-] Report all warnings as errors +--warnaserror[+|-]: Report specific warnings as errors +--warn: Set a warning level (0-5) +--nowarn: Disable specific warning messages +--warnon: Enable specific warnings that may be off by + default +--consolecolors[+|-] Output warning and error messages in color - LANGUAGE - ---checked[+|-] Generate overflow checks ---define: Define conditional compilation symbols (Short - form: -d) ---mlcompatibility Ignore ML compatibility warnings +--checked[+|-] Generate overflow checks +--define: Define conditional compilation symbols (Short + form: -d) +--mlcompatibility Ignore ML compatibility warnings - MISCELLANEOUS - ---nologo Suppress compiler copyright message ---help Display this usage message (Short form: -?) ---@ Read response file for more options +--nologo Suppress compiler copyright message +--help Display this usage message (Short form: -?) +--@ Read response file for more options - ADVANCED - ---codepage: Specify the codepage used to read source files ---utf8output Output messages in UTF-8 encoding ---fullpaths Output messages with fully qualified paths ---lib: Specify a directory for the include path which - is used to resolve source files and assemblies - (Short form: -I) ---baseaddress:
Base address for the library to be built ---noframework Do not reference the default CLI assemblies by - default ---standalone Statically link the F# library and all - referenced DLLs that depend on it into the - assembly being generated ---staticlink: Statically link the given assembly and all - referenced DLLs that depend on this assembly. - Use an assembly name e.g. mylib, not a DLL name. ---pdb: Name the output debug file ---simpleresolution Resolve assembly references using - directory-based rules rather than MSBuild - resolution ---highentropyva[+|-] Enable high-entropy ASLR ---subsystemversion: Specify subsystem version of this assembly ---targetprofile: Specify target framework profile of this - assembly. Valid values are mscorlib or netcore. - Default - mscorlib ---quotations-debug[+|-] Emit debug information in quotations +--codepage: Specify the codepage used to read source files +--utf8output Output messages in UTF-8 encoding +--fullpaths Output messages with fully qualified paths +--lib: Specify a directory for the include path which + is used to resolve source files and assemblies + (Short form: -I) +--baseaddress:
Base address for the library to be built +--noframework Do not reference the default CLI assemblies by + default +--standalone Statically link the F# library and all + referenced DLLs that depend on it into the + assembly being generated +--staticlink: Statically link the given assembly and all + referenced DLLs that depend on this assembly. + Use an assembly name e.g. mylib, not a DLL name. +--pdb: Name the output debug file +--simpleresolution Resolve assembly references using + directory-based rules rather than MSBuild + resolution +--highentropyva[+|-] Enable high-entropy ASLR +--subsystemversion: Specify subsystem version of this assembly +--targetprofile: Specify target framework profile of this + assembly. Valid values are mscorlib or netcore. + Default - mscorlib +--quotations-debug[+|-] Emit debug information in quotations diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl index 3aaba1fffc8..61dc02ef058 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/exename/help40.437.1033.bsl @@ -3,63 +3,65 @@ Usage: fsharpi [script.fsx []] - INPUT FILES - ---use: Use the given file on startup as initial input ---load: #load the given file on startup ---reference: Reference an assembly (Short form: -r) --- ... Treat remaining arguments as command line - arguments, accessed using fsi.CommandLineArgs +--use: Use the given file on startup as initial input +--load: #load the given file on startup +--reference: Reference an assembly (Short form: -r) +-- ... Treat remaining arguments as command line + arguments, accessed using fsi.CommandLineArgs - CODE GENERATION - ---debug[+|-] Emit debug information (Short form: -g) ---debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('pdbonly' is the default if no debuggging type - specified and enables attaching a debugger to a - running program. 'portable' is a cross-platform - format). ---optimize[+|-] Enable optimizations (Short form: -O) ---tailcalls[+|-] Enable or disable tailcalls ---crossoptimize[+|-] Enable or disable cross-module optimizations +--debug[+|-] Emit debug information (Short form: -g) +--debug:{full|pdbonly|portable|embedded} Specify debugging type: full, portable, + embedded, pdbonly. ('pdbonly' is the default if + no debuggging type specified and enables + attaching a debugger to a running program, + 'portable' is a cross-platform format, + 'embedded' is a cross-platform format embedded + into the output file). +--optimize[+|-] Enable optimizations (Short form: -O) +--tailcalls[+|-] Enable or disable tailcalls +--crossoptimize[+|-] Enable or disable cross-module optimizations - ERRORS AND WARNINGS - ---warnaserror[+|-] Report all warnings as errors ---warnaserror[+|-]: Report specific warnings as errors ---warn: Set a warning level (0-5) ---nowarn: Disable specific warning messages ---warnon: Enable specific warnings that may be off by - default ---consolecolors[+|-] Output warning and error messages in color +--warnaserror[+|-] Report all warnings as errors +--warnaserror[+|-]: Report specific warnings as errors +--warn: Set a warning level (0-5) +--nowarn: Disable specific warning messages +--warnon: Enable specific warnings that may be off by + default +--consolecolors[+|-] Output warning and error messages in color - LANGUAGE - ---checked[+|-] Generate overflow checks ---define: Define conditional compilation symbols (Short - form: -d) ---mlcompatibility Ignore ML compatibility warnings +--checked[+|-] Generate overflow checks +--define: Define conditional compilation symbols (Short + form: -d) +--mlcompatibility Ignore ML compatibility warnings - MISCELLANEOUS - ---nologo Suppress compiler copyright message ---help Display this usage message (Short form: -?) +--nologo Suppress compiler copyright message +--help Display this usage message (Short form: -?) - ADVANCED - ---codepage: Specify the codepage used to read source files ---utf8output Output messages in UTF-8 encoding ---fullpaths Output messages with fully qualified paths ---lib: Specify a directory for the include path which - is used to resolve source files and assemblies - (Short form: -I) ---noframework Do not reference the default CLI assemblies by - default ---exec Exit fsi after loading the files or running the - .fsx script given on the command line ---gui[+|-] Execute interactions on a Windows Forms event - loop (on by default) ---quiet Suppress fsi writing to stdout ---readline[+|-] Support TAB completion in console (on by - default) ---quotations-debug[+|-] Emit debug information in quotations ---shadowcopyreferences[+|-] Prevents references from being locked by the F# - Interactive process \ No newline at end of file +--codepage: Specify the codepage used to read source files +--utf8output Output messages in UTF-8 encoding +--fullpaths Output messages with fully qualified paths +--lib: Specify a directory for the include path which + is used to resolve source files and assemblies + (Short form: -I) +--noframework Do not reference the default CLI assemblies by + default +--exec Exit fsi after loading the files or running the + .fsx script given on the command line +--gui[+|-] Execute interactions on a Windows Forms event + loop (on by default) +--quiet Suppress fsi writing to stdout +--readline[+|-] Support TAB completion in console (on by + default) +--quotations-debug[+|-] Emit debug information in quotations +--shadowcopyreferences[+|-] Prevents references from being locked by the F# + Interactive process diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help.437.1033.bsl deleted file mode 100644 index 5afc1c8249d..00000000000 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help.437.1033.bsl +++ /dev/null @@ -1,62 +0,0 @@ -Microsoft (R) F# 2.0 Interactive build 2.0.50727.0 -Copyright (c) Microsoft Corporation. All Rights Reserved. - -Usage: fsi.exe [script.fsx []] - - - - INPUT FILES - ---use: Use the given file on startup as initial input ---load: #load the given file on startup ---reference: Reference an assembly (Short form: -r) --- ... Treat remaining arguments as command line - arguments, accessed using fsi.CommandLineArgs - - - - CODE GENERATION - ---debug[+|-] Emit debug information (Short form: -g) ---debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('pdbonly' is the default if no debuggging type - specified and enables attaching a debugger to a - running program. 'portable' is a cross-platform - format). ---optimize[+|-] Enable optimizations (Short form: -O) ---tailcalls[+|-] Enable or disable tailcalls ---crossoptimize[+|-] Enable or disable cross-module optimizations - - - - ERRORS AND WARNINGS - ---warnaserror[+|-] Report all warnings as errors ---warnaserror[+|-]: Report specific warnings as errors ---warn: Set a warning level (0-4) ---nowarn: Disable specific warning messages ---consolecolors[+|-] Output warning and error messages in color - - - - LANGUAGE - ---checked[+|-] Generate overflow checks ---define: Define conditional compilation symbols (Short - form: -d) ---mlcompatibility Ignore ML compatibility warnings - - - - MISCELLANEOUS - ---nologo Suppress compiler copyright message ---help Display this usage message (Short form: -?) - - - - ADVANCED - ---codepage: Specify the codepage used to read source files ---utf8output Output messages in UTF-8 encoding ---fullpaths Output messages with fully qualified paths ---lib: Specify a directory for the include path which - is used to resolve source files and assemblies - (Short form: -I) ---noframework Do not reference the default CLI assemblies by - default ---exec Exit fsi after loading the files or running the - .fsx script given on the command line ---gui[+|-] Execute interactions on a Windows Forms event - loop (on by default) ---quiet Suppress fsi writing to stdout ---readline[+|-] Support TAB completion in console (on by - default) diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl index 3ffd8e94bdf..a044d368a20 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40-nologo.437.1033.bsl @@ -1,65 +1,67 @@ -Usage: Fsi.exe [script.fsx []] +Usage: fsi.exe [script.fsx []] - INPUT FILES - ---use: Use the given file on startup as initial input ---load: #load the given file on startup ---reference: Reference an assembly (Short form: -r) --- ... Treat remaining arguments as command line - arguments, accessed using fsi.CommandLineArgs +--use: Use the given file on startup as initial input +--load: #load the given file on startup +--reference: Reference an assembly (Short form: -r) +-- ... Treat remaining arguments as command line + arguments, accessed using fsi.CommandLineArgs - CODE GENERATION - ---debug[+|-] Emit debug information (Short form: -g) ---debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('pdbonly' is the default if no debuggging type - specified and enables attaching a debugger to a - running program. 'portable' is a cross-platform - format). ---optimize[+|-] Enable optimizations (Short form: -O) ---tailcalls[+|-] Enable or disable tailcalls ---crossoptimize[+|-] Enable or disable cross-module optimizations +--debug[+|-] Emit debug information (Short form: -g) +--debug:{full|pdbonly|portable|embedded} Specify debugging type: full, portable, + embedded, pdbonly. ('pdbonly' is the default if + no debuggging type specified and enables + attaching a debugger to a running program, + 'portable' is a cross-platform format, + 'embedded' is a cross-platform format embedded + into the output file). +--optimize[+|-] Enable optimizations (Short form: -O) +--tailcalls[+|-] Enable or disable tailcalls +--crossoptimize[+|-] Enable or disable cross-module optimizations - ERRORS AND WARNINGS - ---warnaserror[+|-] Report all warnings as errors ---warnaserror[+|-]: Report specific warnings as errors ---warn: Set a warning level (0-5) ---nowarn: Disable specific warning messages ---warnon: Enable specific warnings that may be off by - default ---consolecolors[+|-] Output warning and error messages in color +--warnaserror[+|-] Report all warnings as errors +--warnaserror[+|-]: Report specific warnings as errors +--warn: Set a warning level (0-5) +--nowarn: Disable specific warning messages +--warnon: Enable specific warnings that may be off by + default +--consolecolors[+|-] Output warning and error messages in color - LANGUAGE - ---checked[+|-] Generate overflow checks ---define: Define conditional compilation symbols (Short - form: -d) ---mlcompatibility Ignore ML compatibility warnings +--checked[+|-] Generate overflow checks +--define: Define conditional compilation symbols (Short + form: -d) +--mlcompatibility Ignore ML compatibility warnings - MISCELLANEOUS - ---nologo Suppress compiler copyright message ---help Display this usage message (Short form: -?) +--nologo Suppress compiler copyright message +--help Display this usage message (Short form: -?) - ADVANCED - ---codepage: Specify the codepage used to read source files ---utf8output Output messages in UTF-8 encoding ---fullpaths Output messages with fully qualified paths ---lib: Specify a directory for the include path which - is used to resolve source files and assemblies - (Short form: -I) ---noframework Do not reference the default CLI assemblies by - default ---exec Exit fsi after loading the files or running the - .fsx script given on the command line ---gui[+|-] Execute interactions on a Windows Forms event - loop (on by default) ---quiet Suppress fsi writing to stdout ---readline[+|-] Support TAB completion in console (on by - default) ---quotations-debug[+|-] Emit debug information in quotations ---shadowcopyreferences[+|-] Prevents references from being locked by the F# - Interactive process \ No newline at end of file +--codepage: Specify the codepage used to read source files +--utf8output Output messages in UTF-8 encoding +--fullpaths Output messages with fully qualified paths +--lib: Specify a directory for the include path which + is used to resolve source files and assemblies + (Short form: -I) +--noframework Do not reference the default CLI assemblies by + default +--exec Exit fsi after loading the files or running the + .fsx script given on the command line +--gui[+|-] Execute interactions on a Windows Forms event + loop (on by default) +--quiet Suppress fsi writing to stdout +--readline[+|-] Support TAB completion in console (on by + default) +--quotations-debug[+|-] Emit debug information in quotations +--shadowcopyreferences[+|-] Prevents references from being locked by the F# + Interactive process diff --git a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl index 722596ffd71..a0d495ad635 100644 --- a/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl +++ b/tests/fsharpqa/Source/CompilerOptions/fsi/help/help40.437.1033.bsl @@ -1,67 +1,69 @@ -Microsoft (R) F# Interactive build 4.0.30319.17303 +Microsoft (R) F# Interactive version 4.1 Copyright (c) Microsoft Corporation. All Rights Reserved. -Usage: Fsi.exe [script.fsx []] +Usage: fsi.exe [script.fsx []] - INPUT FILES - ---use: Use the given file on startup as initial input ---load: #load the given file on startup ---reference: Reference an assembly (Short form: -r) --- ... Treat remaining arguments as command line - arguments, accessed using fsi.CommandLineArgs +--use: Use the given file on startup as initial input +--load: #load the given file on startup +--reference: Reference an assembly (Short form: -r) +-- ... Treat remaining arguments as command line + arguments, accessed using fsi.CommandLineArgs - CODE GENERATION - ---debug[+|-] Emit debug information (Short form: -g) ---debug:{full|pdbonly|portable} Specify debugging type: full, portable, pdbonly. - ('pdbonly' is the default if no debuggging type - specified and enables attaching a debugger to a - running program. 'portable' is a cross-platform - format). ---optimize[+|-] Enable optimizations (Short form: -O) ---tailcalls[+|-] Enable or disable tailcalls ---crossoptimize[+|-] Enable or disable cross-module optimizations +--debug[+|-] Emit debug information (Short form: -g) +--debug:{full|pdbonly|portable|embedded} Specify debugging type: full, portable, + embedded, pdbonly. ('pdbonly' is the default if + no debuggging type specified and enables + attaching a debugger to a running program, + 'portable' is a cross-platform format, + 'embedded' is a cross-platform format embedded + into the output file). +--optimize[+|-] Enable optimizations (Short form: -O) +--tailcalls[+|-] Enable or disable tailcalls +--crossoptimize[+|-] Enable or disable cross-module optimizations - ERRORS AND WARNINGS - ---warnaserror[+|-] Report all warnings as errors ---warnaserror[+|-]: Report specific warnings as errors ---warn: Set a warning level (0-5) ---nowarn: Disable specific warning messages ---warnon: Enable specific warnings that may be off by - default ---consolecolors[+|-] Output warning and error messages in color +--warnaserror[+|-] Report all warnings as errors +--warnaserror[+|-]: Report specific warnings as errors +--warn: Set a warning level (0-5) +--nowarn: Disable specific warning messages +--warnon: Enable specific warnings that may be off by + default +--consolecolors[+|-] Output warning and error messages in color - LANGUAGE - ---checked[+|-] Generate overflow checks ---define: Define conditional compilation symbols (Short - form: -d) ---mlcompatibility Ignore ML compatibility warnings +--checked[+|-] Generate overflow checks +--define: Define conditional compilation symbols (Short + form: -d) +--mlcompatibility Ignore ML compatibility warnings - MISCELLANEOUS - ---nologo Suppress compiler copyright message ---help Display this usage message (Short form: -?) +--nologo Suppress compiler copyright message +--help Display this usage message (Short form: -?) - ADVANCED - ---codepage: Specify the codepage used to read source files ---utf8output Output messages in UTF-8 encoding ---fullpaths Output messages with fully qualified paths ---lib: Specify a directory for the include path which - is used to resolve source files and assemblies - (Short form: -I) ---noframework Do not reference the default CLI assemblies by - default ---exec Exit fsi after loading the files or running the - .fsx script given on the command line ---gui[+|-] Execute interactions on a Windows Forms event - loop (on by default) ---quiet Suppress fsi writing to stdout ---readline[+|-] Support TAB completion in console (on by - default) ---quotations-debug[+|-] Emit debug information in quotations ---shadowcopyreferences[+|-] Prevents references from being locked by the F# - Interactive process \ No newline at end of file +--codepage: Specify the codepage used to read source files +--utf8output Output messages in UTF-8 encoding +--fullpaths Output messages with fully qualified paths +--lib: Specify a directory for the include path which + is used to resolve source files and assemblies + (Short form: -I) +--noframework Do not reference the default CLI assemblies by + default +--exec Exit fsi after loading the files or running the + .fsx script given on the command line +--gui[+|-] Execute interactions on a Windows Forms event + loop (on by default) +--quiet Suppress fsi writing to stdout +--readline[+|-] Support TAB completion in console (on by + default) +--quotations-debug[+|-] Emit debug information in quotations +--shadowcopyreferences[+|-] Prevents references from being locked by the F# + Interactive process