Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit82c9492

Browse files
dsymeKevinRansom
authored andcommitted
Disable in-memory project references for projects using generative type providers (#3236)
* no in-memory project references for projects using generative type providers* add test and build FCS as part of 'all'* remove needless file* add missing compiled TP dll
1 parent8151842 commit82c9492

34 files changed

+478
-72
lines changed

‎build-everything.proj‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@
3535
<ProjectsWithNet40Include="vsintegration/fsharp-vsintegration-vsix-build.proj" />
3636
</ItemGroup>
3737

38+
<ItemGroupCondition="'$(BUILD_FCS)'=='1'">
39+
<ProjectsWithNet40Include="fcs/FSharp.Compiler.Service/FSharp.Compiler.Service.fsproj" />
40+
</ItemGroup>
41+
3842
<ItemGroupCondition="'$(BUILD_SETUP)'=='1'">
3943
<SetupProjectsInclude="setup/fsharp-setup-build.proj" />
4044
</ItemGroup>

‎build.cmd‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ set BUILD_NET40=0
6060
setBUILD_NET40_FSHARP_CORE=0
6161
setBUILD_CORECLR=0
6262
setBUILD_VS=0
63+
setBUILD_FCS=0
6364
setBUILD_CONFIG=release
6465
setBUILD_CONFIG_LOWERCASE=release
6566
setBUILD_DIAG=
@@ -152,6 +153,11 @@ if /i "%ARG%" == "vs" (
152153
setBUILD_VS=1
153154
)
154155

156+
if /i"%ARG%"=="fcs" (
157+
set_autoselect=0
158+
setBUILD_FCS=1
159+
)
160+
155161
if /i"%ARG%"=="vstest" (
156162
setTEST_VS_IDEUNIT_SUITE=1
157163
)
@@ -166,6 +172,7 @@ if /i "%ARG%" == "all" (
166172
setBUILD_NET40=1
167173
setBUILD_CORECLR=1
168174
setBUILD_VS=1
175+
setBUILD_FCS=1
169176
setBUILD_SETUP=%FSC_BUILD_SETUP%
170177
setBUILD_NUGET=1
171178
setCI=1
@@ -216,6 +223,7 @@ if /i "%ARG%" == "ci_part1" (
216223
setBUILD_NET40=1
217224
setBUILD_NET40_FSHARP_CORE=1
218225
setBUILD_VS=1
226+
setBUILD_FCS=1
219227
setTEST_VS_IDEUNIT_SUITE=1
220228
setCI=1
221229
)
@@ -287,6 +295,7 @@ if /i "%ARG%" == "test-all" (
287295
setBUILD_NET40_FSHARP_CORE=1
288296
setBUILD_CORECLR=1
289297
setBUILD_VS=1
298+
setBUILD_FCS=1
290299
setBUILD_SETUP=%FSC_BUILD_SETUP%
291300
setBUILD_NUGET=1
292301

@@ -379,6 +388,7 @@ echo BUILD_NET40=%BUILD_NET40%
379388
echo BUILD_NET40_FSHARP_CORE=%BUILD_NET40_FSHARP_CORE%
380389
echo BUILD_CORECLR=%BUILD_CORECLR%
381390
echo BUILD_VS=%BUILD_VS%
391+
echo BUILD_FCS=%BUILD_FCS%
382392
echo BUILD_SETUP=%BUILD_SETUP%
383393
echo BUILD_NUGET=%BUILD_NUGET%
384394
echo BUILD_CONFIG=%BUILD_CONFIG%

‎packages.config‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@
4747
<!-- FSharp.Data is used in some of the scripts ued for the coreclr build-->
4848
<packageid="FSharp.Data"version="2.2.5" />
4949

50+
<!-- FSharp.Configuration is one type provider used in testing-->
51+
<packageid="FSharp.Configuration"version="1.3.0" />
52+
5053
<!-- Perl is used for the fsharpqa test suite-->
5154
<packageid="StrawberryPerl64"version="5.22.2.1" />
5255

‎src/fsharp/CompileOps.fs‎

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -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}
51685169
memberx.NiceNameGenerator= x.tcsNiceNameGen
51695170
memberx.TcEnvFromSignatures= x.tcsTcSigEnv
51705171
memberx.TcEnvFromImpls= x.tcsTcImplEnv
51715172
memberx.Ccu= x.tcsCcu
5173+
memberx.CreatesGeneratedProvidedTypes= x.tcsCreatesGeneratedProvidedTypes
5174+
51725175
memberx.PartialAssemblySignature=
51735176
let(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
52335237
let(RootSigsAndImpls(rootSigs,rootImpls,allSigModulTyp,allImplementedSigModulTyp))= tcState.tcsRootSigsAndImpls
52345238
letm= inp.Range
52355239
letamap= tcImports.GetImportMap()
5236-
let!(topAttrs,mimpls,tcEnvAtEnd,tcSigEnv,tcImplEnv,topSigsAndImpls,ccuType)=
5240+
let!(topAttrs,implFiles,tcEnvAtEnd,tcSigEnv,tcImplEnv,topSigsAndImpls,ccuType,createsGeneratedProvidedTypes)=
52375241
eventually{
52385242
match 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-
letrootSigs= Zmap.add qualNameOfFilesmodulTypeRoot rootSigs
5257+
letrootSigs= Zmap.add qualNameOfFilesigFileType rootSigs
52545258

52555259
// Open the prefixPath for fsi.exe
52565260
lettcEnv=
@@ -5260,7 +5264,7 @@ let TypeCheckOneInputEventually
52605264
letm= qualNameOfFile.Range
52615265
TcOpenDecl tcSink tcGlobals amap m m tcEnv prefixPath
52625266

5263-
letres=(EmptyTopAttrs,[],tcEnvAtEnd, tcEnv, tcState.tcsTcImplEnv, RootSigsAndImpls(rootSigs, rootImpls, allSigModulTyp, allImplementedSigModulTyp), tcState.tcsCcuType)
5267+
letres=(EmptyTopAttrs,[],tcEnv, tcEnv, tcState.tcsTcImplEnv, RootSigsAndImpls(rootSigs, rootImpls, allSigModulTyp, allImplementedSigModulTyp), tcState.tcsCcuType, createsGeneratedProvidedTypes)
52645268
return res
52655269

52665270
| ParsedInput.ImplFile(ParsedImplFileInput(filename,_,qualNameOfFile,_,_,_,_)as file)->
@@ -5277,7 +5281,7 @@ let TypeCheckOneInputEventually
52775281
lettcImplEnv= 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

52835287
lethadSig= Option.isSome rootSigOpt
@@ -5320,14 +5324,15 @@ let TypeCheckOneInputEventually
53205324
if verbosethen dprintf"done TypeCheckOneInputEventually...\n"
53215325

53225326
lettopSigsAndImpls= RootSigsAndImpls(rootSigs,rootImpls,allSigModulTyp,allImplementedSigModulTyp)
5323-
letres=(topAttrs,[implFile], tcEnvAtEnd, tcSigEnv, tcImplEnv, topSigsAndImpls, ccuType)
5327+
letres=(topAttrs,[implFile], tcEnvAtEnd, tcSigEnv, tcImplEnv, topSigsAndImpls, ccuType, createsGeneratedProvidedTypes)
53245328
return 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}
53325337
with 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)
53465351
letTypeCheckMultipleInputsFinish(results,tcState:TcState)=
5347-
lettcEnvsAtEndFile,topAttrs,mimpls= List.unzip3 results
5352+
lettcEnvsAtEndFile,topAttrs,implFiles= List.unzip3 results
53485353

53495354
lettopAttrs= List.foldBack CombineTopAttrs topAttrs EmptyTopAttrs
5350-
letmimpls= List.concatmimpls
5355+
letimplFiles= List.concatimplFiles
53515356
// This is the environment required by fsi.exe when incrementally adding definitions
53525357
lettcEnvAtEndOfLastFile=(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)
53575362
letTypeCheckMultipleInputs(ctok,checkForErrors,tcConfig:TcConfig,tcImports,tcGlobals,prefixPathOpt,tcState,inputs)=
@@ -5378,7 +5383,7 @@ let TypeCheckClosedInputSetFinish (declaredImpls: TypedImplFile list, tcState) =
53785383

53795384
letTypeCheckClosedInputSet(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-
lettcState,declaredImpls= TypeCheckClosedInputSetFinish(mimpls, tcState)
5386+
let(tcEnvAtEndOfLastFile,topAttrs,implFiles),tcState= TypeCheckMultipleInputs(ctok, checkForErrors, tcConfig, tcImports, tcGlobals, prefixPathOpt, tcState, inputs)
5387+
lettcState,declaredImpls= TypeCheckClosedInputSetFinish(implFiles, tcState)
53835388
tcState, topAttrs, declaredImpls, tcEnvAtEndOfLastFile
53845389

‎src/fsharp/CompileOps.fsi‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -724,6 +724,8 @@ type TcState =
724724

725725
memberNextStateAfterIncrementalFragment:TcEnv->TcState
726726

727+
memberCreatesGeneratedProvidedTypes:bool
728+
727729
/// Get the initial type checking state for a set of inputs
728730
valGetInitialTcState:
729731
range* string* TcConfig* TcGlobals* TcImports* Ast.NiceNameGenerator* TcEnv-> TcState

‎src/fsharp/TypeChecker.fs‎

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -516,7 +516,7 @@ let AddDeclaredTypars check typars env =
516516
let env = ModifyNameResEnv (fun nenv -> AddDeclaredTyparsToNameEnv check nenv typars) env
517517
RegisterDeclaredTypars typars env
518518

519-
/// Compilation environment for typechecking acompilation unit. Contains the
519+
/// Compilation environment for typechecking asingle file in an assembly. Contains the
520520
/// F# and .NET modules loaded from disk, the search path, a table indicating
521521
/// how to List.map F# modules to assembly names, and some nasty globals
522522
/// related to type inference. These are:
@@ -534,6 +534,9 @@ type cenv =
534534
/// Checks to run after all inference is complete.
535535
mutable postInferenceChecks: ResizeArray<unit -> unit>
536536

537+
/// Set to true if this file causes the creation of generated provided types.
538+
mutable createsGeneratedProvidedTypes: bool
539+
537540
/// Are we in a script? if so relax the reporting of discarded-expression warnings at the top level
538541
isScript: bool
539542

@@ -573,6 +576,7 @@ type cenv =
573576
amap = amap
574577
recUses = ValMultiMap<_>.Empty
575578
postInferenceChecks = ResizeArray()
579+
createsGeneratedProvidedTypes = false
576580
topCcu = topCcu
577581
isScript = isScript
578582
css = ConstraintSolverState.New(g,amap,infoReader,tcVal)
@@ -14686,6 +14690,8 @@ module EstablishTypeDefinitionCores =
1468614690
let nm = theRootTypeWithRemapping.PUntaint((fun st -> st.FullName),m)
1468714691
error(Error(FSComp.SR.etErasedTypeUsedInGeneration(desig,nm),m))
1468814692

14693+
cenv.createsGeneratedProvidedTypes <- true
14694+
1468914695
// In compiled code, all types in the set of generated types end up being both generated and relocated, unless relocation is suppressed
1469014696
let isForcedSuppressRelocate = theRootTypeWithRemapping.PUntaint((fun st -> st.IsSuppressRelocate),m)
1469114697
if isForcedSuppressRelocate && canAccessFromEverywhere tycon.Accessibility && not cenv.isScript then
@@ -17014,14 +17020,14 @@ let TypeCheckOneImplFile
1701417020
conditionallySuppressErrorReporting (checkForErrors()) (fun () ->
1701517021
try
1701617022
let reportErrors = not (checkForErrors())
17017-
Microsoft.FSharp.Compiler.PostTypeCheckSemanticChecks.CheckTopImpl (g,cenv.amap,reportErrors,cenv.infoReader,env.eInternalsVisibleCompPaths,cenv.topCcu,envAtEnd.DisplayEnv, implFileExprAfterSig,extraAttribs,isLastCompiland)
17023+
PostTypeCheckSemanticChecks.CheckTopImpl (g,cenv.amap,reportErrors,cenv.infoReader,env.eInternalsVisibleCompPaths,cenv.topCcu,envAtEnd.DisplayEnv, implFileExprAfterSig,extraAttribs,isLastCompiland)
1701817024
with e ->
1701917025
errorRecovery e m
1702017026
false)
1702117027

17022-
let implFile = TImplFile(qualNameOfFile,scopedPragmas, implFileExprAfterSig, hasExplicitEntryPoint,isScript)
17028+
let implFile = TImplFile(qualNameOfFile,scopedPragmas, implFileExprAfterSig, hasExplicitEntryPoint,isScript)
1702317029

17024-
return (topAttrs,implFile,envAtEnd)
17030+
return (topAttrs,implFile,envAtEnd,cenv.createsGeneratedProvidedTypes)
1702517031
}
1702617032

1702717033

@@ -17041,5 +17047,5 @@ let TypeCheckOneSigFile (g,niceNameGen,amap,topCcu,checkForErrors,conditionalDe
1704117047
try sigFileType |> IterTyconsOfModuleOrNamespaceType (FinalTypeDefinitionChecksAtEndOfInferenceScope(cenv.infoReader, tcEnv.NameEnv, cenv.tcSink, false, tcEnv.DisplayEnv))
1704217048
with e -> errorRecovery e qualNameOfFile.Range
1704317049

17044-
return (tcEnv,tcEnv,sigFileType)
17050+
return (tcEnv,sigFileType,cenv.createsGeneratedProvidedTypes)
1704517051
}

‎src/fsharp/TypeChecker.fsi‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,13 @@ val TypeCheckOneImplFile :
4848
-> TcEnv
4949
-> Tast.ModuleOrNamespaceType option
5050
-> ParsedImplFileInput
51-
-> Eventually<TopAttribs* Tast.TypedImplFile* TcEnv>
51+
-> Eventually<TopAttribs* Tast.TypedImplFile* TcEnv* bool>
5252

5353
valTypeCheckOneSigFile:
5454
TcGlobals* NiceNameGenerator* ImportMap* CcuThunk*(unit-> bool)* ConditionalDefines* NameResolution.TcResultsSink
5555
-> TcEnv
5656
-> ParsedSigFileInput
57-
-> Eventually<TcEnv*TcEnv*ModuleOrNamespaceType>
57+
-> Eventually<TcEnv*ModuleOrNamespaceType*bool>
5858

5959
//-------------------------------------------------------------------------
6060
// Some of the exceptions arising from type checking. These should be moved to

‎src/fsharp/vs/IncrementalBuild.fs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1442,7 +1442,7 @@ type IncrementalBuilder(tcGlobals,frameworkTcImports, nonFrameworkAssemblyInputs
14421442
// We return 'None' for the assembly portion of the cross-assembly reference
14431443
lethasTypeProviderAssemblyAttrib=
14441444
topAttrs.assemblyAttrs|> List.exists(fun(Attrib(tcref,_,_,_,_,_,_))-> tcref.CompiledRepresentationForNamedType.BasicQualifiedName= typeof<Microsoft.FSharp.Core.CompilerServices.TypeProviderAssemblyAttribute>.FullName)
1445-
if hasTypeProviderAssemblyAttribthen
1445+
iftcState.CreatesGeneratedProvidedTypes||hasTypeProviderAssemblyAttribthen
14461446
None
14471447
else
14481448
Some(RawFSharpAssemblyDataBackedByLanguageService(tcConfig,tcGlobals,tcState,outfile,topAttrs,assemblyName,ilAssemRef):> IRawFSharpAssemblyData)

‎tests/service/CSharpProjectAnalysis.fs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
#if INTERACTIVE
3-
#r"../../Debug/net40/bin/FSharp.Compiler.Service.dll"
3+
#r"../../Debug/net40/bin/FSharp.Compiler.Service.dll"// note, run 'build fcs' to generate this, this DLL has a public API so can be used from F# Interactive
44
#r"../../bin/v4.5/CSharp_Analysis.dll"
55
#r"../../packages/NUnit.3.5.0/lib/net45/nunit.framework.dll"
66
#load"FsUnit.fs"

‎tests/service/Common.fs‎

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,18 @@ let fsCoreDefaultReference() =
9999
sysLib "FSharp.Core"
100100
*)
101101

102+
letmkStandardProjectReferences()=
103+
#if DOTNETCORE
104+
letfile="Sample_NETCoreSDK_FSharp_Library_netstandard1.6.fsproj"
105+
letprojDir= Path.Combine(__SOURCE_DIRECTORY__,"../projects/Sample_NETCoreSDK_FSharp_Library_netstandard1.6")
106+
readRefs projDir file
107+
#else
108+
[yield sysLib"mscorlib"
109+
yield sysLib"System"
110+
yield sysLib"System.Core"
111+
yield fsCoreDefaultReference()]
112+
#endif
113+
102114
letmkProjectCommandLineArgs(dllName,fileNames)=
103115
letargs=
104116
[|yield"--simpleresolution"
@@ -117,17 +129,7 @@ let mkProjectCommandLineArgs (dllName, fileNames) =
117129
yield"--target:library"
118130
for xin fileNamesdo
119131
yield x
120-
letreferences=
121-
#if DOTNETCORE
122-
letfile="Sample_NETCoreSDK_FSharp_Library_netstandard1.6.fsproj"
123-
letprojDir= Path.Combine(__SOURCE_DIRECTORY__,"../projects/Sample_NETCoreSDK_FSharp_Library_netstandard1.6")
124-
readRefs projDir file
125-
#else
126-
[yield sysLib"mscorlib"
127-
yield sysLib"System"
128-
yield sysLib"System.Core"
129-
yield fsCoreDefaultReference()]
130-
#endif
132+
letreferences= mkStandardProjectReferences()
131133
for rin referencesdo
132134
yield"-r:"+ r
133135
|]
@@ -152,11 +154,7 @@ let mkProjectCommandLineArgsForScript (dllName, fileNames) =
152154
yield"--target:library"
153155
for xin fileNamesdo
154156
yield x
155-
// let implDir = Path.GetDirectoryName(typeof<System.Object>.Assembly.Location)
156-
letreferences=
157-
letfile="Sample_NETCoreSDK_FSharp_Library_netstandard1.6.fsproj"
158-
letprojDir= Path.Combine(__SOURCE_DIRECTORY__,"../projects/Sample_NETCoreSDK_FSharp_Library_netstandard1.6")
159-
readRefs projDir file
157+
letreferences= mkStandardProjectReferences()
160158
for rin referencesdo
161159
yield"-r:"+ r
162160
|]

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp