@@ -14444,7 +14444,32 @@ module EstablishTypeDefinitionCores =
1444414444 | _ -> () ]
1444514445 |> set
1444614446
14447- let TcTyconDefnCore_Phase1A_BuildInitialModule cenv envInitial parent typeNames compInfo compDecls =
14447+ let TypeNamesInNonMutRecDecls defs =
14448+ [ for def in defs do
14449+ match def with
14450+ | SynModuleDecl.Types (typeSpecs,_) ->
14451+ for (TypeDefn(ComponentInfo(_,typars,_,ids,_,_,_,_),trepr,_,_)) in typeSpecs do
14452+ if isNil typars then
14453+ match trepr with
14454+ | SynTypeDefnRepr.ObjectModel(TyconAugmentation,_,_) -> ()
14455+ | _ -> yield (List.last ids).idText
14456+ | _ -> () ]
14457+ |> set
14458+
14459+ // Collect the type names so we can implicitly add the compilation suffix to module names
14460+ let TypeNamesInNonMutRecSigDecls defs =
14461+ [ for def in defs do
14462+ match def with
14463+ | SynModuleSigDecl.Types (typeSpecs,_) ->
14464+ for (TypeDefnSig(ComponentInfo(_,typars,_,ids,_,_,_,_),trepr,extraMembers,_)) in typeSpecs do
14465+ if isNil typars then
14466+ match trepr with
14467+ | SynTypeDefnSigRepr.Simple((SynTypeDefnSimpleRepr.None _),_) when not (isNil extraMembers) -> ()
14468+ | _ -> yield (List.last ids).idText
14469+ | _ -> () ]
14470+ |> set
14471+
14472+ let TcTyconDefnCore_Phase1A_BuildInitialModule cenv envInitial parent typeNames compInfo decls =
1444814473 let (ComponentInfo(attribs,_parms, _constraints,longPath,xml,_,vis,im)) = compInfo
1444914474 let id = ComputeModuleName longPath
1445014475 let modAttrs = TcAttributes cenv envInitial AttributeTargets.ModuleDecl attribs
@@ -14461,8 +14486,8 @@ module EstablishTypeDefinitionCores =
1446114486 let envForDecls, mtypeAcc = MakeInnerEnv envInitial id modKind
1446214487 let mspec = NewModuleOrNamespace (Some envInitial.eCompPath) vis id (xml.ToXmlDoc()) modAttrs (MaybeLazy.Strict (NewEmptyModuleOrNamespaceType modKind))
1446314488 let innerParent = Parent (mkLocalModRef mspec)
14464- lettypeNames = TypeNamesInMutRecDeclscompDecls
14465- MutRecDefnsPhase2DataForModule (mtypeAcc, mspec), (innerParent,typeNames , envForDecls)
14489+ letinnerTypeNames = TypeNamesInMutRecDeclsdecls
14490+ MutRecDefnsPhase2DataForModule (mtypeAcc, mspec), (innerParent,innerTypeNames , envForDecls)
1446614491
1446714492 /// Establish 'type <vis1> C < T1... TN > = <vis2> ...' including
1446814493 /// - computing the mangled name for C
@@ -15528,14 +15553,14 @@ module EstablishTypeDefinitionCores =
1552815553 | _ -> ())
1552915554
1553015555
15531- let TcMutRecDefns_Phase1 mkLetInfo cenv envInitial parent inSig tpenv m scopem mutRecNSInfo (mutRecDefns:MutRecShapes<MutRecDefnsPhase1DataForTycon * 'MemberInfo, 'LetInfo, SynComponentInfo, _, _>) =
15556+ let TcMutRecDefns_Phase1 mkLetInfo cenv envInitial parenttypeNames inSig tpenv m scopem mutRecNSInfo (mutRecDefns:MutRecShapes<MutRecDefnsPhase1DataForTycon * 'MemberInfo, 'LetInfo, SynComponentInfo, _, _>) =
1553215557
1553315558 // Phase1A - build Entity for type definitions, exception definitions and module definitions.
1553415559 // Also for abbreviations of any of these. Augmentations are skipped in this phase.
1553515560 let withEntities =
1553615561 mutRecDefns
1553715562 |> MutRecShapes.mapWithParent
15538- (parent,TypeNamesInMutRecDecls mutRecDefns , envInitial)
15563+ (parent,typeNames , envInitial)
1553915564 // Build the initial entity for each module definition
1554015565 (fun (innerParent, typeNames, envForDecls) compInfo decls ->
1554115566 TcTyconDefnCore_Phase1A_BuildInitialModule cenv envForDecls innerParent typeNames compInfo decls)
@@ -16000,7 +16025,7 @@ module TcDeclarations =
1600016025 //-------------------------------------------------------------------------
1600116026
1600216027 /// Bind a collection of mutually recursive definitions in an implementation file
16003- let TcMutRecDefinitions cenv envInitial parent tpenv m scopem mutRecNSInfo (mutRecDefns: MutRecDefnsInitialData) =
16028+ let TcMutRecDefinitions cenv envInitial parenttypeNames tpenv m scopem mutRecNSInfo (mutRecDefns: MutRecDefnsInitialData) =
1600416029
1600516030 // Split the definitions into "core representations" and "members". The code to process core representations
1600616031 // is shared between processing of signature files and implementation files.
@@ -16010,7 +16035,7 @@ module TcDeclarations =
1601016035 let tycons, envMutRecPrelim, mutRecDefnsAfterCore =
1601116036 EstablishTypeDefinitionCores.TcMutRecDefns_Phase1
1601216037 (fun containerInfo synBinds -> [ for synBind in synBinds -> RecDefnBindingInfo(containerInfo,NoNewSlots,ModuleOrMemberBinding,synBind) ])
16013- cenv envInitial parent false tpenv m scopem mutRecNSInfo mutRecDefnsAfterSplit
16038+ cenv envInitial parenttypeNames false tpenv m scopem mutRecNSInfo mutRecDefnsAfterSplit
1601416039
1601516040 // Package up the phase two information for processing members.
1601616041 let mutRecDefnsAfterPrep =
@@ -16151,9 +16176,9 @@ module TcDeclarations =
1615116176
1615216177
1615316178 /// Bind a collection of mutually recursive declarations in a signature file
16154- let TcMutRecSignatureDecls cenv envInitial parent tpenv m scopem mutRecNSInfo (mutRecSigs:MutRecSigsInitialData) =
16179+ let TcMutRecSignatureDecls cenv envInitial parenttypeNames tpenv m scopem mutRecNSInfo (mutRecSigs:MutRecSigsInitialData) =
1615516180 let mutRecSigsAfterSplit = mutRecSigs |> MutRecShapes.mapTycons SplitTyconSignature
16156- let _tycons, envMutRec, mutRecDefnsAfterCore = EstablishTypeDefinitionCores.TcMutRecDefns_Phase1 (fun containerInfo valDecl -> (containerInfo, valDecl)) cenv envInitial parent true tpenv m scopem mutRecNSInfo mutRecSigsAfterSplit
16181+ let _tycons, envMutRec, mutRecDefnsAfterCore = EstablishTypeDefinitionCores.TcMutRecDefns_Phase1 (fun containerInfo valDecl -> (containerInfo, valDecl)) cenv envInitial parenttypeNames true tpenv m scopem mutRecNSInfo mutRecSigsAfterSplit
1615716182
1615816183 // Updates the types of the modules to contain the contents so far, which now includes values and members
1615916184 MutRecBindingChecking.TcMutRecDefns_UpdateModuleContents mutRecNSInfo mutRecDefnsAfterCore
@@ -16192,7 +16217,7 @@ let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synS
1619216217 | SynModuleSigDecl.Types (typeSpecs,m) ->
1619316218 let scopem = unionRanges m endm
1619416219 let mutRecDefns = typeSpecs |> List.map MutRecShape.Tycon
16195- let env = TcDeclarations.TcMutRecSignatureDecls cenv env parent emptyUnscopedTyparEnv m scopem None mutRecDefns
16220+ let env = TcDeclarations.TcMutRecSignatureDecls cenv env parenttypeNames emptyUnscopedTyparEnv m scopem None mutRecDefns
1619616221 return env
1619716222
1619816223 | SynModuleSigDecl.Open (mp,m) ->
@@ -16215,7 +16240,8 @@ let rec TcSignatureElementNonMutRec cenv parent typeNames endm (env: TcEnv) synS
1621516240 if isRec then
1621616241 // Treat 'module rec M = ...' as a single mutually recursive definition group 'module M = ...'
1621716242 let modDecl = SynModuleSigDecl.NestedModule(compInfo,false,mdefs,m)
16218- return! TcSignatureElementsMutRec cenv parent endm None env [modDecl]
16243+
16244+ return! TcSignatureElementsMutRec cenv parent typeNames endm None env [modDecl]
1621916245 else
1622016246 let id = ComputeModuleName longPath
1622116247 let vis,_ = ComputeAccessAndCompPath env None im vis None parent
@@ -16325,32 +16351,21 @@ and TcSignatureElements cenv parent endm env xml mutRecNSInfo defs =
1632516351 if cenv.compilingCanonicalFslibModuleType then
1632616352 ensureCcuHasModuleOrNamespaceAtPath cenv.topCcu env.ePath env.eCompPath (xml.ToXmlDoc())
1632716353
16354+ let typeNames = EstablishTypeDefinitionCores.TypeNamesInNonMutRecSigDecls defs
1632816355 match mutRecNSInfo with
1632916356 | Some _ ->
16330- return! TcSignatureElementsMutRec cenv parent endm mutRecNSInfo env defs
16357+ return! TcSignatureElementsMutRec cenv parenttypeNames endm mutRecNSInfo env defs
1633116358 | None ->
16332- return! TcSignatureElementsNonMutRec cenv parent endm env defs
16359+ return! TcSignatureElementsNonMutRec cenv parenttypeNames endm env defs
1633316360 }
1633416361
16335- and TcSignatureElementsNonMutRec cenv parent endm env defs =
16362+ and TcSignatureElementsNonMutRec cenv parenttypeNames endm env defs =
1633616363 eventually {
16337- // Collect the type names so we can implicitly add the compilation suffix to module names
16338- let typeNames =
16339- [ for def in defs do
16340- match def with
16341- | SynModuleSigDecl.Types (typeSpecs,_) ->
16342- for (TypeDefnSig(ComponentInfo(_,typars,_,ids,_,_,_,_),trepr,extraMembers,_)) in typeSpecs do
16343- if isNil typars then
16344- match trepr with
16345- | SynTypeDefnSigRepr.Simple((SynTypeDefnSimpleRepr.None _),_) when not (isNil extraMembers) -> ()
16346- | _ -> yield (List.last ids).idText
16347- | _ -> () ]
16348- |> set
1634916364
1635016365 return! Eventually.fold (TcSignatureElementNonMutRec cenv parent typeNames endm) env defs
1635116366 }
1635216367
16353- and TcSignatureElementsMutRec cenv parent endm mutRecNSInfo envInitial (defs: SynModuleSigDecl list) =
16368+ and TcSignatureElementsMutRec cenv parenttypeNames endm mutRecNSInfo envInitial (defs: SynModuleSigDecl list) =
1635416369 eventually {
1635516370 let m = match defs with [] -> endm | _ -> defs |> List.map (fun d -> d.Range) |> List.reduce unionRanges
1635616371 let scopem = (defs, endm) ||> List.foldBack (fun h m -> unionRanges h.Range m)
@@ -16398,7 +16413,7 @@ and TcSignatureElementsMutRec cenv parent endm mutRecNSInfo envInitial (defs: Sy
1639816413
1639916414 |> fst
1640016415 loop (match parent with ParentNone -> true | Parent _ -> false) defs
16401- return TcDeclarations.TcMutRecSignatureDecls cenv envInitial parent emptyUnscopedTyparEnv m scopem mutRecNSInfo mutRecDefns
16416+ return TcDeclarations.TcMutRecSignatureDecls cenv envInitial parenttypeNames emptyUnscopedTyparEnv m scopem mutRecNSInfo mutRecDefns
1640216417 }
1640316418
1640416419
@@ -16484,7 +16499,7 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv:cenv) parent typeNames scopem
1648416499 | SynModuleDecl.Types (typeDefs,m) ->
1648516500 let scopem = unionRanges m scopem
1648616501 let mutRecDefns = typeDefs |> List.map MutRecShape.Tycon
16487- let mutRecDefnsChecked,envAfter = TcDeclarations.TcMutRecDefinitions cenv env parent tpenv m scopem None mutRecDefns
16502+ let mutRecDefnsChecked,envAfter = TcDeclarations.TcMutRecDefinitions cenv env parenttypeNames tpenv m scopem None mutRecDefns
1648816503 // Check the non-escaping condition as we build the expression on the way back up
1648916504 let exprfWithEscapeCheck e =
1649016505 TcMutRecDefnsEscapeCheck mutRecDefnsChecked env
@@ -16530,7 +16545,7 @@ let rec TcModuleOrNamespaceElementNonMutRec (cenv:cenv) parent typeNames scopem
1653016545 if isRec then
1653116546 assert (not isContinuingModule)
1653216547 let modDecl = SynModuleDecl.NestedModule(compInfo, false, mdefs, isContinuingModule, m)
16533- return! TcModuleOrNamespaceElementsMutRec cenv parent m env None [modDecl]
16548+ return! TcModuleOrNamespaceElementsMutRec cenv parenttypeNames m env None [modDecl]
1653416549 else
1653516550 let (ComponentInfo(attribs,_parms, _constraints,longPath,xml,_,vis,im)) = compInfo
1653616551 let id = ComputeModuleName longPath
@@ -16657,7 +16672,7 @@ and TcModuleOrNamespaceElementsNonMutRec cenv parent typeNames endm (defsSoFar,
1665716672 }
1665816673
1665916674/// The mutually recursive case for a sequence of declarations (and nested modules)
16660- and TcModuleOrNamespaceElementsMutRec cenv parent endm envInitial mutRecNSInfo (defs: SynModuleDecl list) =
16675+ and TcModuleOrNamespaceElementsMutRec cenv parenttypeNames endm envInitial mutRecNSInfo (defs: SynModuleDecl list) =
1666116676 eventually {
1666216677
1666316678 let m = match defs with [] -> endm | _ -> defs |> List.map (fun d -> d.Range) |> List.reduce unionRanges
@@ -16716,7 +16731,7 @@ and TcModuleOrNamespaceElementsMutRec cenv parent endm envInitial mutRecNSInfo (
1671616731 loop (match parent with ParentNone -> true | Parent _ -> false) [] defs
1671716732
1671816733 let tpenv = emptyUnscopedTyparEnv
16719- let mutRecDefnsChecked,envAfter = TcDeclarations.TcMutRecDefinitions cenv envInitial parent tpenv m scopem mutRecNSInfo mutRecDefns
16734+ let mutRecDefnsChecked,envAfter = TcDeclarations.TcMutRecDefinitions cenv envInitial parenttypeNames tpenv m scopem mutRecNSInfo mutRecDefns
1672016735
1672116736 // Check the assembly attributes
1672216737 let attrs, _ = TcAttributesWithPossibleTargets false cenv envAfter AttributeTargets.Top synAttrs
@@ -16753,26 +16768,17 @@ and TcModuleOrNamespaceElements cenv parent endm env xml mutRecNSInfo defs =
1675316768 if cenv.compilingCanonicalFslibModuleType then
1675416769 ensureCcuHasModuleOrNamespaceAtPath cenv.topCcu env.ePath env.eCompPath (xml.ToXmlDoc())
1675516770
16771+ // Collect the type names so we can implicitly add the compilation suffix to module names
16772+ let typeNames = EstablishTypeDefinitionCores.TypeNamesInNonMutRecDecls defs
16773+
1675616774 match mutRecNSInfo with
1675716775 | Some _ ->
16758- let! (exprf, topAttrsNew), _, envAtEnd = TcModuleOrNamespaceElementsMutRec cenv parent endm env mutRecNSInfo defs
16776+ let! (exprf, topAttrsNew), _, envAtEnd = TcModuleOrNamespaceElementsMutRec cenv parenttypeNames endm env mutRecNSInfo defs
1675916777 // Apply the functions for each declaration to build the overall expression-builder
1676016778 let mexpr = TMDefs(exprf [])
1676116779 return (mexpr, topAttrsNew, envAtEnd)
1676216780
1676316781 | None ->
16764- // Collect the type names so we can implicitly add the compilation suffix to module names
16765- let typeNames =
16766- [ for def in defs do
16767- match def with
16768- | SynModuleDecl.Types (typeSpecs,_) ->
16769- for (TypeDefn(ComponentInfo(_,typars,_,ids,_,_,_,_),trepr,_,_)) in typeSpecs do
16770- if isNil typars then
16771- match trepr with
16772- | SynTypeDefnRepr.ObjectModel(TyconAugmentation,_,_) -> ()
16773- | _ -> yield (List.last ids).idText
16774- | _ -> () ]
16775- |> set
1677616782
1677716783 let! compiledDefs, envAtEnd = TcModuleOrNamespaceElementsNonMutRec cenv parent typeNames endm ([], env, env) defs
1677816784