Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP, FS-1043] Extension members visible to trait constraints #3582

Closed
wants to merge 37 commits into from
Closed
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
7822a13
First attempt
Aug 17, 2017
f977d3f
add testfile
TobyShaw Aug 18, 2017
898d97b
First draft, messy solution
Sep 14, 2017
888f1cf
Merge branch 'extensionconstraints' of https://github.com/TobyShaw/vi…
Sep 14, 2017
1b41d93
merge with master
dsyme Sep 25, 2017
9efe7ef
merge with master
dsyme Sep 25, 2017
7121bc3
work towards freshening things correctly
Sep 25, 2017
bdfa7b3
fix build
Sep 25, 2017
1fa2326
prototype for extension solutions to trait constraints
Sep 25, 2017
baf3f15
Merge branch 'master' of http://github.com/Microsoft/visualfsharp int…
dsyme Sep 27, 2017
db3f298
resolve
dsyme Sep 27, 2017
b8c95f4
resolve and merge
dsyme Sep 27, 2017
f75a2ab
resolve and merge
dsyme Sep 27, 2017
072cbbb
minor cleanup
dsyme Sep 27, 2017
2e78b58
merge
Sep 27, 2017
9bdfb21
it works
Sep 27, 2017
96502ea
minor cleanup
dsyme Sep 27, 2017
f287f20
various fixes
Sep 29, 2017
100ff18
Merge branch 'master' of http://github.com/Microsoft/visualfsharp int…
Oct 2, 2017
91d1a35
support extenstion properties on generic types
Oct 2, 2017
7513645
range of fixes to freshening and trait printing
Oct 2, 2017
010bf0f
fix build
Oct 2, 2017
d0bc0b3
Merge branch 'master' of http://github.com/Microsoft/visualfsharp int…
Oct 2, 2017
36d26e7
reduce diff
Oct 2, 2017
434b095
merge with master
Oct 2, 2017
000e34d
Merge branch 'master' into extensionconstraints
dsyme Oct 3, 2017
8b601f2
Fix Oddities in statically resolved method constraints and method ove…
Nov 17, 2017
77447d6
no return type needed before proceeding to overload resolution
dsyme Nov 18, 2017
c67437d
fix tests
dsyme Nov 18, 2017
827f38a
Merge branch 'master' of http://github.com/Microsoft/visualfsharp int…
Dec 1, 2017
dbe243c
Merge branch 'fix-3814' of https://github.com/dsyme/visualfsharp into…
Dec 1, 2017
ec80c48
integrate master
Dec 1, 2017
4e7183e
minimize diff and integrate fix
Dec 1, 2017
4ca7ea8
minimize diff
Dec 1, 2017
fa31367
minimize diff
Dec 1, 2017
281e1f0
minimize diff
Dec 1, 2017
58787bd
minimize diff
Dec 1, 2017
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
13 changes: 6 additions & 7 deletions src/fsharp/CompileOptions.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1229,7 +1229,7 @@ let GetInitialOptimizationEnv (tcImports:TcImports, tcGlobals:TcGlobals) =
let optEnv = List.fold (AddExternalCcuToOpimizationEnv tcGlobals) optEnv ccuinfos
optEnv

let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importMap, isIncrementalFragment, optEnv, ccu:CcuThunk, implFiles) =
let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importMap, isIncrementalFragment, optEnv, ccu:CcuThunk, implFiles, nenv) =
// NOTE: optEnv - threads through
//
// Always optimize once - the results of this step give the x-module optimization
Expand All @@ -1248,13 +1248,12 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM
let optSettings = tcConfig.optSettings
let optSettings = { optSettings with abstractBigTargets = tcConfig.doTLR }
let optSettings = { optSettings with reportingPhase = true }

let results,(optEnvFirstLoop,_,_,_) =
((optEnv0,optEnv0,optEnv0,SignatureHidingInfo.Empty),implFiles) ||> List.mapFold (fun (optEnvFirstLoop,optEnvExtraLoop,optEnvFinalSimplify,hidden) implFile ->

//ReportTime tcConfig ("Initial simplify")
let (optEnvFirstLoop,implFile,implFileOptData,hidden), optimizeDuringCodeGen =
Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal,importMap,optEnvFirstLoop,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile)
Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal,importMap,optEnvFirstLoop,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile,nenv)

let implFile = AutoBox.TransformImplFile tcGlobals importMap implFile

Expand All @@ -1267,7 +1266,7 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM
let implFile,optEnvExtraLoop =
if tcConfig.extraOptimizationIterations > 0 then
//ReportTime tcConfig ("Extra simplification loop")
let (optEnvExtraLoop,implFile, _, _), _ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvExtraLoop,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile)
let (optEnvExtraLoop,implFile, _, _), _ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvExtraLoop,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile,nenv)
//PrintWholeAssemblyImplementation tcConfig outfile (sprintf "extra-loop-%d" n) implFile
implFile,optEnvExtraLoop
else
Expand All @@ -1292,7 +1291,7 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM
let implFile,optEnvFinalSimplify =
if tcConfig.doFinalSimplify then
//ReportTime tcConfig ("Final simplify pass")
let (optEnvFinalSimplify,implFile, _, _),_ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFinalSimplify,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile)
let (optEnvFinalSimplify,implFile, _, _),_ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFinalSimplify,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile,nenv)
//PrintWholeAssemblyImplementation tcConfig outfile "post-rec-opt" implFile
implFile,optEnvFinalSimplify
else
Expand All @@ -1319,7 +1318,7 @@ let CreateIlxAssemblyGenerator (_tcConfig:TcConfig,tcImports:TcImports,tcGlobals
ilxGenerator.AddExternalCcus ccus
ilxGenerator

let GenerateIlxCode (ilxBackend, isInteractiveItExpr, isInteractiveOnMono, tcConfig:TcConfig, topAttrs, optimizedImpls, fragName, ilxGenerator : IlxAssemblyGenerator) =
let GenerateIlxCode (ilxBackend, isInteractiveItExpr, isInteractiveOnMono, tcConfig:TcConfig, topAttrs, optimizedImpls, fragName, ilxGenerator : IlxAssemblyGenerator, nenv) =
if !progress then dprintf "Generating ILX code...\n"
let ilxGenOpts : IlxGenOptions =
{ generateFilterBlocks = tcConfig.generateFilterBlocks
Expand All @@ -1335,7 +1334,7 @@ let GenerateIlxCode (ilxBackend, isInteractiveItExpr, isInteractiveOnMono, tcCon
isInteractiveItExpr = isInteractiveItExpr
alwaysCallVirt = tcConfig.alwaysCallVirt }

ilxGenerator.GenerateCode (ilxGenOpts, optimizedImpls, topAttrs.assemblyAttrs,topAttrs.netModuleAttrs)
ilxGenerator.GenerateCode (ilxGenOpts, optimizedImpls, topAttrs.assemblyAttrs,topAttrs.netModuleAttrs,nenv)

//----------------------------------------------------------------------------
// Assembly ref normalization: make sure all assemblies are referred to
Expand Down
4 changes: 2 additions & 2 deletions src/fsharp/CompileOptions.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,11 @@ val GetGeneratedILModuleName : CompilerTarget -> string -> string

val GetInitialOptimizationEnv : TcImports * TcGlobals -> IncrementalOptimizationEnv
val AddExternalCcuToOpimizationEnv : TcGlobals -> IncrementalOptimizationEnv -> ImportedAssembly -> IncrementalOptimizationEnv
val ApplyAllOptimizations : TcConfig * TcGlobals * ConstraintSolver.TcValF * string * ImportMap * bool * IncrementalOptimizationEnv * CcuThunk * TypedImplFile list -> TypedAssemblyAfterOptimization * Optimizer.LazyModuleInfo * IncrementalOptimizationEnv
val ApplyAllOptimizations : TcConfig * TcGlobals * ConstraintSolver.TcValF * string * ImportMap * bool * IncrementalOptimizationEnv * CcuThunk * TypedImplFile list * NameResolution.NameResolutionEnv -> TypedAssemblyAfterOptimization * Optimizer.LazyModuleInfo * IncrementalOptimizationEnv

val CreateIlxAssemblyGenerator : TcConfig * TcImports * TcGlobals * ConstraintSolver.TcValF * CcuThunk -> IlxGen.IlxAssemblyGenerator

val GenerateIlxCode : IlxGen.IlxGenBackend * isInteractiveItExpr:bool * isInteractiveOnMono:bool * TcConfig * TypeChecker.TopAttribs * TypedAssemblyAfterOptimization * fragName:string * IlxGen.IlxAssemblyGenerator -> IlxGen.IlxGenResults
val GenerateIlxCode : IlxGen.IlxGenBackend * isInteractiveItExpr:bool * isInteractiveOnMono:bool * TcConfig * TypeChecker.TopAttribs * TypedAssemblyAfterOptimization * fragName:string * IlxGen.IlxAssemblyGenerator * NameResolution.NameResolutionEnv -> IlxGen.IlxGenResults

// Used during static linking
val NormalizeAssemblyRefs : CompilationThreadToken * TcImports -> (AbstractIL.IL.ILScopeRef -> AbstractIL.IL.ILScopeRef)
Expand Down
Loading