Skip to content
Merged
Show file tree
Hide file tree
Changes from 9 commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
09ee3c5
split service.fs
dsyme Feb 19, 2019
19a8664
reduce diff
dsyme Feb 19, 2019
ef7076e
minor cleanup
dsyme Feb 19, 2019
c6ebf68
fix flakey test (?)
dsyme Feb 19, 2019
2623b8b
use runsettings
dsyme Feb 20, 2019
e427511
same fix for FCS tests2
dsyme Feb 20, 2019
c9aebe0
fix build
dsyme Feb 20, 2019
734000f
add diagnostics
dsyme Feb 20, 2019
e867dc3
fix final parallel case
dsyme Feb 20, 2019
ca4ff5a
Merge branch 'fixtest4' into clean5
dsyme Feb 20, 2019
f0a685b
Merge branch 'master' of https://github.com/Microsoft/visualfsharp in…
dsyme Feb 20, 2019
42c423d
integrate master
dsyme Feb 20, 2019
0843984
fix build
dsyme Feb 20, 2019
0603d0d
Merge branch 'master' of http://github.com/Microsoft/visualfsharp int…
dsyme Feb 20, 2019
167b0ca
try again to fix test
dsyme Feb 20, 2019
e5d48e5
update test fixes
dsyme Feb 20, 2019
6018e41
Merge branch 'fixtest4' into clean5
dsyme Feb 20, 2019
4233534
Merge branch 'master' of http://github.com/Microsoft/visualfsharp int…
dsyme Mar 1, 2019
fec40bb
Merge branch 'master' of http://github.com/Microsoft/visualfsharp int…
dsyme Mar 3, 2019
7fbd404
Merge branch 'master' of http://github.com/Microsoft/visualfsharp int…
dsyme Mar 9, 2019
d1b1389
add diagnostics
dsyme Mar 10, 2019
0f89711
add diagnostics
dsyme Mar 10, 2019
7da6aff
diagnostics
dsyme Mar 11, 2019
871489b
diagnostics
dsyme Mar 11, 2019
27d00a0
diagnostics
dsyme Mar 11, 2019
7d98d16
add diagnostics and possible fix for tp smoke tests
dsyme Mar 11, 2019
cc6e992
fix build
dsyme Mar 11, 2019
e13b385
fix build
dsyme Mar 11, 2019
d9fd450
Merge branch 'master' of http://github.com/Microsoft/visualfsharp int…
dsyme Mar 11, 2019
a2d1f49
Merge branch 'diag4' into clean5
dsyme Mar 11, 2019
337a336
integrate master
dsyme Mar 12, 2019
d282615
merge master
dsyme Mar 12, 2019
4050231
Merge branch 'master' of http://github.com/Microsoft/visualfsharp int…
dsyme Mar 20, 2019
b63c55f
Merge branch 'master' of https://github.com/Microsoft/visualfsharp in…
dsyme Mar 21, 2019
f8f1a54
Merge branch 'master' of http://github.com/Microsoft/visualfsharp int…
dsyme Mar 26, 2019
6069d28
Merge branch 'master' of http://github.com/Microsoft/visualfsharp int…
dsyme Mar 28, 2019
88a8766
Merge branch 'master' of http://github.com/Microsoft/visualfsharp int…
dsyme Apr 1, 2019
62edf5f
Merge branch 'master' of https://github.com/Microsoft/visualfsharp in…
dsyme Apr 4, 2019
aa70b9c
Merge branch 'clean5' of https://github.com/dsyme/visualfsharp into c…
dsyme Apr 4, 2019
e9a80c7
integrate master
dsyme Apr 14, 2019
4924846
integrate master
dsyme Apr 14, 2019
6eaf27e
integrate master
dsyme Apr 14, 2019
194ede3
merge master
dsyme Apr 16, 2019
b8d9e59
merge master
dsyme Apr 24, 2019
890936b
Merge branch 'master' of http://github.com/Microsoft/visualfsharp int…
dsyme May 22, 2019
22bbcb6
merge master
dsyme Jun 4, 2019
01ac5e2
fix build
dsyme Jun 4, 2019
2f5c4e7
Delete FSharp.Compiler.Private.fsproj
TIHan Jun 5, 2019
04f56c1
Merge branch 'master' into clean5
TIHan Jun 5, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 16 additions & 6 deletions src/absil/ilwrite.fs
Original file line number Diff line number Diff line change
Expand Up @@ -87,9 +87,15 @@ type ByteBuffer with
buf.EmitByte 0x0uy

// Emit compressed untagged integer
member buf.EmitZUntaggedIndex big idx =
member buf.EmitZUntaggedIndex nm sz big idx =
if big then buf.EmitInt32 idx
elif idx > 0xffff then failwith "EmitZUntaggedIndex: too big for small address or simple index"
elif idx > 0xffff then
#if NETSTANDARD1_6
let trace = "no stack trace on.NET Standard 1.6"
#else
let trace = (new System.Diagnostics.StackTrace()).ToString()
#endif
failwithf "EmitZUntaggedIndex: index into table '%d' is too big for small address or simple index, idx = %d, big = %A, size of table = %d, stack = %s" nm idx big sz trace
else buf.EmitInt32AsUInt16 idx

// Emit compressed tagged integer
Expand Down Expand Up @@ -3198,8 +3204,10 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca

let codedTables =

let sizesTable = Array.map Array.length sortedTables
let bignessTable = Array.map (fun rows -> Array.length rows >= 0x10000) sortedTables
let bigness (tab:int32) = bignessTable.[tab]
let size (tab:int32) = sizesTable.[tab]

let codedBigness nbits tab =
(tableSize tab) >= (0x10000 >>> nbits)
Expand Down Expand Up @@ -3323,10 +3331,12 @@ let writeILMetadataAndCode (generatePdb, desiredMetadataVersion, ilg, emitTailca
| _ when t = RowElementTags.ULong -> tablesBuf.EmitInt32 n
| _ when t = RowElementTags.Data -> recordRequiredDataFixup requiredDataFixups tablesBuf (tablesStreamStart + tablesBuf.Position) (n, false)
| _ when t = RowElementTags.DataResources -> recordRequiredDataFixup requiredDataFixups tablesBuf (tablesStreamStart + tablesBuf.Position) (n, true)
| _ when t = RowElementTags.Guid -> tablesBuf.EmitZUntaggedIndex guidsBig (guidAddress n)
| _ when t = RowElementTags.Blob -> tablesBuf.EmitZUntaggedIndex blobsBig (blobAddress n)
| _ when t = RowElementTags.String -> tablesBuf.EmitZUntaggedIndex stringsBig (stringAddress n)
| _ when t <= RowElementTags.SimpleIndexMax -> tablesBuf.EmitZUntaggedIndex (bigness (t - RowElementTags.SimpleIndexMin)) n
| _ when t = RowElementTags.Guid -> tablesBuf.EmitZUntaggedIndex -3 guidsStreamPaddedSize guidsBig (guidAddress n)
| _ when t = RowElementTags.Blob -> tablesBuf.EmitZUntaggedIndex -2 blobsStreamPaddedSize blobsBig (blobAddress n)
| _ when t = RowElementTags.String -> tablesBuf.EmitZUntaggedIndex -1 stringsStreamPaddedSize stringsBig (stringAddress n)
| _ when t <= RowElementTags.SimpleIndexMax ->
let tnum = t - RowElementTags.SimpleIndexMin
tablesBuf.EmitZUntaggedIndex tnum (size tnum) (bigness tnum) n
| _ when t <= RowElementTags.TypeDefOrRefOrSpecMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.TypeDefOrRefOrSpecMin) 2 tdorBigness n
| _ when t <= RowElementTags.TypeOrMethodDefMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.TypeOrMethodDefMin) 1 tomdBigness n
| _ when t <= RowElementTags.HasConstantMax -> tablesBuf.EmitZTaggedIndex (t - RowElementTags.HasConstantMin) 2 hcBigness n
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -113,33 +113,36 @@ module internal TPModule =

// Used by unit testing to check that Dispose is being called on the type provider
module GlobalCounters =
let mutable creations = 0
let mutable disposals = 0
let mutable configs = ([]: TypeProviderConfig list)
let GetTotalCreations() = creations
let GetTotalDisposals() = disposals
let counterLock = obj()
let mutable private creations = 0
let mutable private disposals = 0
let mutable private configs = ([]: TypeProviderConfig list)
let GetTotalCreations() = lock counterLock (fun () -> creations)
let GetTotalDisposals() = lock counterLock (fun () -> disposals)
let IncrementCreations() = lock counterLock (fun () -> creations <- creations + 1)
let IncrementDisposals() = lock counterLock (fun () -> disposals <- disposals + 1)
let AddConfig c = lock counterLock (fun () -> configs <- c :: configs)
let GetConfigs() = lock counterLock (fun () -> configs)
let CheckAllConfigsDisposed() =
for c in configs do
for c in GetConfigs() do
try
c.SystemRuntimeContainsType("System.Object") |> ignore
failwith "expected configuration object to be disposed"
with :? System.ObjectDisposedException ->
()



[<TypeProvider>]
type HelloWorldProvider(config: TypeProviderConfig) =
inherit TypeProviderForNamespaces(TPModule.namespaceName,TPModule.types)
do GlobalCounters.creations <- GlobalCounters.creations + 1
do GlobalCounters.IncrementCreations()
let mutable disposed = false
do GlobalCounters.configs <- config :: GlobalCounters.configs
do GlobalCounters.AddConfig config
interface System.IDisposable with
member x.Dispose() =
System.Diagnostics.Debug.Assert(not disposed)
disposed <- true
GlobalCounters.disposals <- GlobalCounters.disposals + 1
if GlobalCounters.disposals % 5 = 0 then failwith "simulate random error during disposal"
do GlobalCounters.IncrementDisposals()
if GlobalCounters.GetTotalDisposals() % 5 = 0 then failwith "simulate random error during disposal"


// implementation of a poorly behaving TP that sleeps for various numbers of seconds when traversing into members.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1624,8 +1624,10 @@ type UsingMSBuild() as this =

// The disposals should be at least one less
Assert.IsTrue(countDisposals() < i, "Check1, countDisposals() < i, iteration " + string i)
Assert.IsTrue(countCreations() >= countDisposals(), "Check2, countCreations() >= countDisposals(), iteration " + string i)
Assert.IsTrue(countCreations() = i, "Check3, countCreations() = i, iteration " + string i)
let c = countCreations()
let d = countDisposals()
Assert.IsTrue(c >= countDisposals(), "Check2, countCreations() >= countDisposals(), iteration " + string i + ", countCreations() = " + string c + ", countDisposals() = " + string d)
Assert.IsTrue((c = i), "Check3, countCreations() = i, iteration " + string i + ", countCreations() = " + string c)
if not clearing then
// By default we hold 3 build incrementalBuilderCache entries and 5 typeCheckInfo entries, so if we're not clearing
// there should be some roots to project builds still present
Expand Down