@@ -5163,12 +5163,15 @@ type TcState =
51635163 tcsNiceNameGen: NiceNameGenerator
51645164 tcsTcSigEnv: TcEnv
51655165 tcsTcImplEnv: TcEnv
5166+ tcsCreatesGeneratedProvidedTypes: bool
51665167/// The accumulated results of type checking for this assembly
51675168 tcsRootSigsAndImpls: TypecheckerSigsAndImpls }
51685169member x.NiceNameGenerator = x.tcsNiceNameGen
51695170member x.TcEnvFromSignatures = x.tcsTcSigEnv
51705171member x.TcEnvFromImpls = x.tcsTcImplEnv
51715172member x.Ccu = x.tcsCcu
5173+ member x.CreatesGeneratedProvidedTypes = x.tcsCreatesGeneratedProvidedTypes
5174+
51725175member x.PartialAssemblySignature =
51735176let ( RootSigsAndImpls ( _rootSigs , _rootImpls , _allSigModulTyp , allImplementedSigModulTyp )) = x.tcsRootSigsAndImpls
51745177 allImplementedSigModulTyp
@@ -5217,6 +5220,7 @@ let GetInitialTcState(m,ccuName,tcConfig:TcConfig,tcGlobals,tcImports:TcImports,
52175220 tcsNiceNameGen= niceNameGen
52185221 tcsTcSigEnv= tcEnv0
52195222 tcsTcImplEnv= tcEnv0
5223+ tcsCreatesGeneratedProvidedTypes= false
52205224 tcsRootSigsAndImpls= RootSigsAndImpls( rootSigs, rootImpls, allSigModulTyp, allImplementedSigModulTyp) }
52215225
52225226
@@ -5233,7 +5237,7 @@ let TypeCheckOneInputEventually
52335237let ( RootSigsAndImpls ( rootSigs , rootImpls , allSigModulTyp , allImplementedSigModulTyp )) = tcState.tcsRootSigsAndImpls
52345238let m = inp.Range
52355239let amap = tcImports.GetImportMap()
5236- let! ( topAttrs , mimpls , tcEnvAtEnd , tcSigEnv , tcImplEnv , topSigsAndImpls , ccuType ) =
5240+ let! ( topAttrs , implFiles , tcEnvAtEnd , tcSigEnv , tcImplEnv , topSigsAndImpls , ccuType , createsGeneratedProvidedTypes ) =
52375241 eventually{
52385242match inpwith
52395243| ParsedInput.SigFile( ParsedSigFileInput(_, qualNameOfFile, _, _, _) as file) ->
@@ -5247,10 +5251,10 @@ let TypeCheckOneInputEventually
52475251 errorR( Error( FSComp.SR.buildImplementationAlreadyGivenDetail( qualNameOfFile.Text), m))
52485252
52495253// Typecheck the signature file
5250- let! ( tcEnvAtEnd , tcEnv , smodulTypeRoot ) =
5254+ let! ( tcEnv , sigFileType , createsGeneratedProvidedTypes ) =
52515255 TypeCheckOneSigFile( tcGlobals, tcState.tcsNiceNameGen, amap, tcState.tcsCcu, checkForErrors, tcConfig.conditionalCompilationDefines, tcSink) tcState.tcsTcSigEnv file
52525256
5253- let rootSigs = Zmap.add qualNameOfFilesmodulTypeRoot rootSigs
5257+ let rootSigs = Zmap.add qualNameOfFilesigFileType rootSigs
52545258
52555259// Open the prefixPath for fsi.exe
52565260let tcEnv =
@@ -5260,7 +5264,7 @@ let TypeCheckOneInputEventually
52605264let m = qualNameOfFile.Range
52615265 TcOpenDecl tcSink tcGlobals amap m m tcEnv prefixPath
52625266
5263- let res = ( EmptyTopAttrs, [], tcEnvAtEnd , tcEnv, tcState.tcsTcImplEnv, RootSigsAndImpls( rootSigs, rootImpls, allSigModulTyp, allImplementedSigModulTyp), tcState.tcsCcuType)
5267+ let res = ( EmptyTopAttrs, [], tcEnv , tcEnv, tcState.tcsTcImplEnv, RootSigsAndImpls( rootSigs, rootImpls, allSigModulTyp, allImplementedSigModulTyp), tcState.tcsCcuType, createsGeneratedProvidedTypes )
52645268return res
52655269
52665270| ParsedInput.ImplFile( ParsedImplFileInput( filename,_, qualNameOfFile,_,_,_,_) as file) ->
@@ -5277,7 +5281,7 @@ let TypeCheckOneInputEventually
52775281let tcImplEnv = tcState.tcsTcImplEnv
52785282
52795283// Typecheck the implementation file
5280- let! topAttrs , implFile , tcEnvAtEnd =
5284+ let! topAttrs , implFile , tcEnvAtEnd , createsGeneratedProvidedTypes =
52815285 TypeCheckOneImplFile( tcGlobals, tcState.tcsNiceNameGen, amap, tcState.tcsCcu, checkForErrors, tcConfig.conditionalCompilationDefines, tcSink) tcImplEnv rootSigOpt file
52825286
52835287let hadSig = Option.isSome rootSigOpt
@@ -5320,14 +5324,15 @@ let TypeCheckOneInputEventually
53205324if verbosethen dprintf" done TypeCheckOneInputEventually...\n "
53215325
53225326let topSigsAndImpls = RootSigsAndImpls( rootSigs, rootImpls, allSigModulTyp, allImplementedSigModulTyp)
5323- let res = ( topAttrs,[ implFile], tcEnvAtEnd, tcSigEnv, tcImplEnv, topSigsAndImpls, ccuType)
5327+ let res = ( topAttrs,[ implFile], tcEnvAtEnd, tcSigEnv, tcImplEnv, topSigsAndImpls, ccuType, createsGeneratedProvidedTypes )
53245328return res}
53255329
5326- return ( tcEnvAtEnd, topAttrs, mimpls ),
5330+ return ( tcEnvAtEnd, topAttrs, implFiles ),
53275331{ tcStatewith
53285332 tcsCcuType= ccuType
53295333 tcsTcSigEnv= tcSigEnv
53305334 tcsTcImplEnv= tcImplEnv
5335+ tcsCreatesGeneratedProvidedTypes= tcState.tcsCreatesGeneratedProvidedTypes|| createsGeneratedProvidedTypes
53315336 tcsRootSigsAndImpls= topSigsAndImpls}
53325337with e->
53335338 errorRecovery e range0
@@ -5344,14 +5349,14 @@ let TypeCheckOneInput (ctok, checkForErrors, tcConfig, tcImports, tcGlobals, pre
53445349
53455350/// Finish checking multiple files (or one interactive entry into F# Interactive)
53465351let TypeCheckMultipleInputsFinish ( results , tcState : TcState ) =
5347- let tcEnvsAtEndFile , topAttrs , mimpls = List.unzip3 results
5352+ let tcEnvsAtEndFile , topAttrs , implFiles = List.unzip3 results
53485353
53495354let topAttrs = List.foldBack CombineTopAttrs topAttrs EmptyTopAttrs
5350- let mimpls = List.concatmimpls
5355+ let implFiles = List.concatimplFiles
53515356// This is the environment required by fsi.exe when incrementally adding definitions
53525357let tcEnvAtEndOfLastFile = ( match tcEnvsAtEndFilewith h:: _ -> h| _ -> tcState.TcEnvFromSignatures)
53535358
5354- ( tcEnvAtEndOfLastFile, topAttrs, mimpls ), tcState
5359+ ( tcEnvAtEndOfLastFile, topAttrs, implFiles ), tcState
53555360
53565361/// Check multiple files (or one interactive entry into F# Interactive)
53575362let TypeCheckMultipleInputs ( ctok , checkForErrors , tcConfig : TcConfig , tcImports , tcGlobals , prefixPathOpt , tcState , inputs ) =
@@ -5378,7 +5383,7 @@ let TypeCheckClosedInputSetFinish (declaredImpls: TypedImplFile list, tcState) =
53785383
53795384let TypeCheckClosedInputSet ( ctok , checkForErrors , tcConfig , tcImports , tcGlobals , prefixPathOpt , tcState , inputs ) =
53805385// tcEnvAtEndOfLastFile is the environment required by fsi.exe when incrementally adding definitions
5381- let ( tcEnvAtEndOfLastFile , topAttrs , mimpls ), tcState = TypeCheckMultipleInputs( ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs)
5382- let tcState , declaredImpls = TypeCheckClosedInputSetFinish( mimpls , tcState)
5386+ let ( tcEnvAtEndOfLastFile , topAttrs , implFiles ), tcState = TypeCheckMultipleInputs( ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs)
5387+ let tcState , declaredImpls = TypeCheckClosedInputSetFinish( implFiles , tcState)
53835388 tcState, topAttrs, declaredImpls, tcEnvAtEndOfLastFile
53845389