Skip to content

Commit

Permalink
changes - not working
Browse files Browse the repository at this point in the history
  • Loading branch information
safesparrow committed Nov 2, 2022
1 parent ed795dd commit cb4a99f
Show file tree
Hide file tree
Showing 10 changed files with 34 additions and 291 deletions.
10 changes: 1 addition & 9 deletions src/Compiler/Driver/ParseAndCheckInputs.fs
Original file line number Diff line number Diff line change
Expand Up @@ -1491,14 +1491,6 @@ let CheckOneInputAux'
// (tcGlobals, amap, hadSig, prefixPathOpt, tcSink, tcState.tcsTcImplEnv, qualNameOfFile, sigFileType)
// tcState

// TODO Do we
let _, _, _, _ = fsiPartialResult

let ccuSigForFile, _ =
AddCheckResultsToTcState
(tcGlobals, amap, true, prefixPathOpt, tcSink, tcState.tcsTcImplEnv, qualNameOfFile, sigFileType)
tcState

// Save info needed for type-checking .fs file later on
// TODO Remove most of this
let fsiBackedInfo: FsiBackedInfo =
Expand All @@ -1507,7 +1499,7 @@ let CheckOneInputAux'
match ast with
| ParsedInput.ImplFile parsedImplFileInput -> parsedImplFileInput
| ParsedInput.SigFile _ -> failwith "Unexpected SigFile"
amap, conditionalDefines, sigFileType, priorErrors, file, tcStateForImplFile, ccuSigForFile
amap, conditionalDefines, sigFileType, priorErrors, file, tcStateForImplFile, sigFileType

fsiBackedInfos[file.FileName] <- fsiBackedInfo

Expand Down
6 changes: 2 additions & 4 deletions tests/DiamondTest/Broken1/A.fs
Original file line number Diff line number Diff line change
@@ -1,4 +1,2 @@
namespace N.M
[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]
module internal A =
let x = 3
module A
let a = 1
4 changes: 2 additions & 2 deletions tests/DiamondTest/Broken1/B.fs
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
namespace N.M.K
module Y = let y = 4
module B
let b = 1 + A.a
5 changes: 3 additions & 2 deletions tests/DiamondTest/Broken1/B.fsi
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
namespace N.M.K
module Y = val y : int
module B
open A
val b : int
3 changes: 0 additions & 3 deletions tests/FSharp.Compiler.Service.Tests2/DiamondArgs_broken.txt
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,3 @@
C:\projekty\fsharp\heuristic\tests\DiamondTest\Broken1\A.fs
C:\projekty\fsharp\heuristic\tests\DiamondTest\Broken1\B.fsi
C:\projekty\fsharp\heuristic\tests\DiamondTest\Broken1\B.fs
C:\projekty\fsharp\heuristic\tests\DiamondTest\Broken1\C.fs
C:\projekty\fsharp\heuristic\tests\DiamondTest\Broken1\D.fs
C:\projekty\fsharp\heuristic\tests\DiamondTest\Broken1\E.fs
265 changes: 0 additions & 265 deletions tests/FSharp.Compiler.Service.Tests2/FCSArgs.txt
Original file line number Diff line number Diff line change
Expand Up @@ -236,268 +236,3 @@ Utilities\QueueList.fsi
Utilities\QueueList.fs
Utilities\lib.fsi
Utilities\lib.fs
Utilities\ImmutableArray.fsi
Utilities\ImmutableArray.fs
Utilities\rational.fsi
Utilities\rational.fs
Utilities\PathMap.fsi
Utilities\PathMap.fs
Utilities\RidHelpers.fs
Utilities\range.fsi
Utilities\range.fs
Facilities\Logger.fsi
Facilities\Logger.fs
Facilities\LanguageFeatures.fsi
Facilities\LanguageFeatures.fs
Facilities\DiagnosticOptions.fsi
Facilities\DiagnosticOptions.fs
Facilities\TextLayoutRender.fsi
Facilities\TextLayoutRender.fs
Facilities\DiagnosticsLogger.fsi
Facilities\DiagnosticsLogger.fs
Facilities\DiagnosticResolutionHints.fsi
Facilities\DiagnosticResolutionHints.fs
Facilities\prim-lexing.fsi
Facilities\prim-lexing.fs
Facilities\prim-parsing.fsi
Facilities\prim-parsing.fs
Facilities\ReferenceResolver.fsi
Facilities\ReferenceResolver.fs
Facilities\SimulatedMSBuildReferenceResolver.fsi
Facilities\SimulatedMSBuildReferenceResolver.fs
Facilities\CompilerLocation.fsi
Facilities\CompilerLocation.fs
Facilities\BuildGraph.fsi
Facilities\BuildGraph.fs
AbstractIL\il.fsi
AbstractIL\il.fs
AbstractIL\ilx.fsi
AbstractIL\ilx.fs
AbstractIL\ilascii.fsi
AbstractIL\ilascii.fs
C:\projekty\fsharp\fsharp_main\artifacts\obj\FSharp.Compiler.Service\Debug\netstandard2.0\ilpars.fs
C:\projekty\fsharp\fsharp_main\artifacts\obj\FSharp.Compiler.Service\Debug\netstandard2.0\illex.fs
AbstractIL\ilprint.fsi
AbstractIL\ilprint.fs
AbstractIL\ilmorph.fsi
AbstractIL\ilmorph.fs
AbstractIL\ilsign.fsi
AbstractIL\ilsign.fs
AbstractIL\ilnativeres.fsi
AbstractIL\ilnativeres.fs
AbstractIL\ilsupp.fsi
AbstractIL\ilsupp.fs
AbstractIL\ilbinary.fsi
AbstractIL\ilbinary.fs
AbstractIL\ilread.fsi
AbstractIL\ilread.fs
AbstractIL\ilwritepdb.fsi
AbstractIL\ilwritepdb.fs
AbstractIL\ilwrite.fsi
AbstractIL\ilwrite.fs
AbstractIL\ilreflect.fsi
AbstractIL\ilreflect.fs
SyntaxTree\PrettyNaming.fsi
SyntaxTree\PrettyNaming.fs
SyntaxTree\UnicodeLexing.fsi
SyntaxTree\UnicodeLexing.fs
SyntaxTree\XmlDoc.fsi
SyntaxTree\XmlDoc.fs
SyntaxTree\SyntaxTrivia.fsi
SyntaxTree\SyntaxTrivia.fs
SyntaxTree\SyntaxTree.fsi
SyntaxTree\SyntaxTree.fs
SyntaxTree\SyntaxTreeOps.fsi
SyntaxTree\SyntaxTreeOps.fs
SyntaxTree\ParseHelpers.fsi
SyntaxTree\ParseHelpers.fs
C:\projekty\fsharp\fsharp_main\artifacts\obj\FSharp.Compiler.Service\Debug\netstandard2.0\pppars.fs
C:\projekty\fsharp\fsharp_main\artifacts\obj\FSharp.Compiler.Service\Debug\netstandard2.0\pars.fs
SyntaxTree\LexHelpers.fsi
SyntaxTree\LexHelpers.fs
C:\projekty\fsharp\fsharp_main\artifacts\obj\FSharp.Compiler.Service\Debug\netstandard2.0\pplex.fs
C:\projekty\fsharp\fsharp_main\artifacts\obj\FSharp.Compiler.Service\Debug\netstandard2.0\\lex.fs
SyntaxTree\LexFilter.fsi
SyntaxTree\LexFilter.fs
TypedTree\tainted.fsi
TypedTree\tainted.fs
TypedTree\TypeProviders.fsi
TypedTree\TypeProviders.fs
TypedTree\QuotationPickler.fsi
TypedTree\QuotationPickler.fs
TypedTree\CompilerGlobalState.fsi
TypedTree\CompilerGlobalState.fs
TypedTree\TypedTree.fsi
TypedTree\TypedTree.fs
TypedTree\TypedTreeBasics.fsi
TypedTree\TypedTreeBasics.fs
TypedTree\TcGlobals.fs
TypedTree\TypedTreeOps.fsi
TypedTree\TypedTreeOps.fs
TypedTree\TypedTreePickle.fsi
TypedTree\TypedTreePickle.fs
Checking\import.fsi
Checking\import.fs
Checking\TypeHierarchy.fsi
Checking\TypeHierarchy.fs
Checking\infos.fsi
Checking\infos.fs
Checking\AccessibilityLogic.fsi
Checking\AccessibilityLogic.fs
Checking\AttributeChecking.fsi
Checking\AttributeChecking.fs
Checking\TypeRelations.fsi
Checking\TypeRelations.fs
Checking\InfoReader.fsi
Checking\InfoReader.fs
Checking\NicePrint.fsi
Checking\NicePrint.fs
Checking\AugmentWithHashCompare.fsi
Checking\AugmentWithHashCompare.fs
Checking\NameResolution.fsi
Checking\NameResolution.fs
Checking\SignatureConformance.fsi
Checking\SignatureConformance.fs
Checking\MethodOverrides.fsi
Checking\MethodOverrides.fs
Checking\MethodCalls.fsi
Checking\MethodCalls.fs
Checking\PatternMatchCompilation.fsi
Checking\PatternMatchCompilation.fs
Checking\ConstraintSolver.fsi
Checking\ConstraintSolver.fs
Checking\CheckFormatStrings.fsi
Checking\CheckFormatStrings.fs
Checking\FindUnsolved.fsi
Checking\FindUnsolved.fs
Checking\QuotationTranslator.fsi
Checking\QuotationTranslator.fs
Checking\PostInferenceChecks.fsi
Checking\PostInferenceChecks.fs
Checking\CheckBasics.fsi
Checking\CheckBasics.fs
Checking\CheckExpressions.fsi
Checking\CheckExpressions.fs
Checking\CheckPatterns.fsi
Checking\CheckPatterns.fs
Checking\CheckComputationExpressions.fsi
Checking\CheckComputationExpressions.fs
Checking\CheckIncrementalClasses.fsi
Checking\CheckIncrementalClasses.fs
Checking\CheckDeclarations.fsi
Checking\CheckDeclarations.fs
Optimize\Optimizer.fsi
Optimize\Optimizer.fs
Optimize\DetupleArgs.fsi
Optimize\DetupleArgs.fs
Optimize\InnerLambdasToTopLevelFuncs.fsi
Optimize\InnerLambdasToTopLevelFuncs.fs
Optimize\LowerCalls.fsi
Optimize\LowerCalls.fs
Optimize\LowerSequences.fsi
Optimize\LowerSequences.fs
Optimize\LowerComputedCollections.fsi
Optimize\LowerComputedCollections.fs
Optimize\LowerStateMachines.fsi
Optimize\LowerStateMachines.fs
Optimize\LowerLocalMutables.fsi
Optimize\LowerLocalMutables.fs
CodeGen\EraseClosures.fsi
CodeGen\EraseClosures.fs
CodeGen\EraseUnions.fsi
CodeGen\EraseUnions.fs
CodeGen\IlxGen.fsi
CodeGen\IlxGen.fs
Driver\FxResolver.fsi
Driver\FxResolver.fs
DependencyManager/AssemblyResolveHandler.fsi
DependencyManager/AssemblyResolveHandler.fs
DependencyManager/NativeDllResolveHandler.fsi
DependencyManager/NativeDllResolveHandler.fs
DependencyManager/DependencyProvider.fsi
DependencyManager/DependencyProvider.fs
Driver\CompilerConfig.fsi
Driver\CompilerConfig.fs
Driver\CompilerImports.fsi
Driver\CompilerImports.fs
Driver\CompilerDiagnostics.fsi
Driver\CompilerDiagnostics.fs
Driver\ParseAndCheckInputs.fsi
Driver\ParseAndCheckInputs.fs
Driver\ScriptClosure.fsi
Driver\ScriptClosure.fs
Driver\CompilerOptions.fsi
Driver\CompilerOptions.fs
Driver\OptimizeInputs.fsi
Driver\OptimizeInputs.fs
Driver\XmlDocFileWriter.fsi
Driver\XmlDocFileWriter.fs
Driver\BinaryResourceFormats.fsi
Driver\BinaryResourceFormats.fs
Driver\StaticLinking.fsi
Driver\StaticLinking.fs
Driver\CreateILModule.fsi
Driver\CreateILModule.fs
Driver\fsc.fsi
Driver\fsc.fs
Symbols\FSharpDiagnostic.fsi
Symbols\FSharpDiagnostic.fs
Symbols\SymbolHelpers.fsi
Symbols\SymbolHelpers.fs
Symbols\Symbols.fsi
Symbols\Symbols.fs
Symbols\Exprs.fsi
Symbols\Exprs.fs
Symbols\SymbolPatterns.fsi
Symbols\SymbolPatterns.fs
Service\SemanticClassification.fsi
Service\SemanticClassification.fs
Service\ItemKey.fsi
Service\ItemKey.fs
Service\SemanticClassificationKey.fsi
Service\SemanticClassificationKey.fs
Service\FSharpSource.fsi
Service\FSharpSource.fs
Service\IncrementalBuild.fsi
Service\IncrementalBuild.fs
Service\ServiceCompilerDiagnostics.fsi
Service\ServiceCompilerDiagnostics.fs
Service\ServiceConstants.fs
Service\ServiceDeclarationLists.fsi
Service\ServiceDeclarationLists.fs
Service\ServiceLexing.fsi
Service\ServiceLexing.fs
Service\ServiceParseTreeWalk.fsi
Service\ServiceParseTreeWalk.fs
Service\ServiceNavigation.fsi
Service\ServiceNavigation.fs
Service\ServiceParamInfoLocations.fsi
Service\ServiceParamInfoLocations.fs
Service\FSharpParseFileResults.fsi
Service\FSharpParseFileResults.fs
Service\ServiceParsedInputOps.fsi
Service\ServiceParsedInputOps.fs
Service\ServiceAssemblyContent.fsi
Service\ServiceAssemblyContent.fs
Service\ServiceXmlDocParser.fsi
Service\ServiceXmlDocParser.fs
Service\ExternalSymbol.fsi
Service\ExternalSymbol.fs
Service\QuickParse.fsi
Service\QuickParse.fs
Service\FSharpCheckerResults.fsi
Service\FSharpCheckerResults.fs
Service\service.fsi
Service\service.fs
Service\ServiceInterfaceStubGenerator.fsi
Service\ServiceInterfaceStubGenerator.fs
Service\ServiceStructure.fsi
Service\ServiceStructure.fs
Service\ServiceAnalysis.fsi
Service\ServiceAnalysis.fs
Interactive\ControlledExecution.fs
Interactive\fsi.fsi
Interactive\fsi.fs
Legacy\LegacyMSBuildReferenceResolver.fsi
Legacy\LegacyMSBuildReferenceResolver.fs
Legacy\LegacyHostedCompilerForTesting.fs
20 changes: 15 additions & 5 deletions tests/FSharp.Compiler.Service.Tests2/GraphProcessing.fs
Original file line number Diff line number Diff line change
Expand Up @@ -43,9 +43,13 @@ let combineResults
let biggestDep =
let sizeMetric node =
// Could also use eg. total file size/AST size
node.Info.TransitiveDeps.Length
node.Info.Item
// node.Info.TransitiveDeps.Length
deps
|> Array.maxBy sizeMetric
// TODO To workaround a problem with merging state in the wrong order,
// we temporarily effectively pick the child with the lowest index.
// This means children are folded fully in sequence
|> Array.minBy sizeMetric
let orFail value =
value
|> Option.defaultWith (fun () -> failwith "Unexpected lack of result")
Expand Down Expand Up @@ -75,11 +79,12 @@ let combineResults
state

// TODO Could be replaced with a simpler recursive approach with memoised per-item results
let processGraph<'Item, 'State, 'Result, 'FinalFileResult when 'Item : equality>
let processGraph<'Item, 'State, 'Result, 'FinalFileResult when 'Item : equality and 'Item : comparison>
(graph : Graph<'Item>)
(doWork : 'Item -> 'State -> 'Result)
(folder : 'State -> 'Result -> 'FinalFileResult * 'State)
(emptyState : 'State)
(includeInFinalState : 'Item -> bool)
(parallelism : int)
: 'FinalFileResult[] * 'State
=
Expand Down Expand Up @@ -153,8 +158,13 @@ let processGraph<'Item, 'State, 'Result, 'FinalFileResult when 'Item : equality>
let nodesArray = nodes.Values |> Seq.toArray
let x: 'FinalFileResult[] * 'State =
nodesArray
|> Array.fold (fun (fileResults, state) item ->
let fileResult, state = folder state (item.Result.Value |> snd)
|> Array.sortBy (fun node -> node.Info.Item)
|> fun nodes ->
printfn $"%+A{nodes |> Array.map (fun n -> n.Info.Item.ToString())}"
nodes
|> Array.fold (fun (fileResults, state) node ->
let fileResult, newState = folder state (node.Result.Value |> snd)
let state = if includeInFinalState node.Info.Item then newState else state
Array.append fileResults [|fileResult|], state
) ([||], emptyState)
x
3 changes: 3 additions & 0 deletions tests/FSharp.Compiler.Service.Tests2/ParallelTypeChecking.fs
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@ module internal Real =
processFile
folder
state
(fun it -> (not it.FsiBacked) && it = it)
1

partialResults |> Array.toList, tcState
Expand All @@ -274,6 +275,7 @@ let typeCheckGraph (graph : FileGraph) : FinalFileResult[] * State =
typeCheckFile
folder
""
(fun _ -> true)
parallelism

let typeCheckGraph2 (graph : FileGraph) : FinalFileResult[] * State =
Expand All @@ -283,6 +285,7 @@ let typeCheckGraph2 (graph : FileGraph) : FinalFileResult[] * State =
typeCheckFile
folder
""
(fun _ -> true)
parallelism

let typeCheck (files : SourceFiles) : FinalFileResult[] * State =
Expand Down

0 comments on commit cb4a99f

Please sign in to comment.