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

Commit1a3f1e8

Browse files
forkidsyme
authored andcommitted
try to minimize intermediate NameRes environments (dotnet#4440)
1 parentbbf07fb commit1a3f1e8

File tree

1 file changed

+34
-27
lines changed

1 file changed

+34
-27
lines changed

‎src/fsharp/TypeChecker.fs‎

Lines changed: 34 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -388,20 +388,20 @@ let addInternalsAccessibility env (ccu:CcuThunk) =
388388
eAccessRights = computeAccessRights env.eAccessPath eInternalsVisibleCompPaths env.eFamilyType // update this computed field
389389
eInternalsVisibleCompPaths = compPath :: env.eInternalsVisibleCompPaths }
390390

391-
let ModifyNameResEnv f env = { env with eNameResEnv = f env.eNameResEnv }
392-
393391
let AddLocalValPrimitive (v:Val) env =
394-
let env = ModifyNameResEnv (fun nenv -> AddValRefToNameEnv nenv (mkLocalValRef v)) env
395-
{ env with eUngeneralizableItems = addFreeItemOfTy v.Type env.eUngeneralizableItems }
392+
{ env with
393+
eNameResEnv = AddValRefToNameEnv env.eNameResEnv (mkLocalValRef v)
394+
eUngeneralizableItems = addFreeItemOfTy v.Type env.eUngeneralizableItems }
396395

397396

398397
let AddLocalValMap tcSink scopem (vals:Val NameMap) env =
399398
let env =
400399
if vals.IsEmpty then
401400
env
402401
else
403-
let env = ModifyNameResEnv (AddValMapToNameEnv vals) env
404-
{ env with eUngeneralizableItems = NameMap.foldBackRange (typeOfVal >> addFreeItemOfTy) vals env.eUngeneralizableItems }
402+
{ env with
403+
eNameResEnv = AddValMapToNameEnv vals env.eNameResEnv
404+
eUngeneralizableItems = NameMap.foldBackRange (typeOfVal >> addFreeItemOfTy) vals env.eUngeneralizableItems }
405405
CallEnvSink tcSink (scopem, env.NameEnv, env.eAccessRights)
406406
env
407407

@@ -410,27 +410,29 @@ let AddLocalVals tcSink scopem (vals:Val list) env =
410410
if isNil vals then
411411
env
412412
else
413-
let env = ModifyNameResEnv (AddValListToNameEnv vals) env
414-
{ env with eUngeneralizableItems = List.foldBack (typeOfVal >> addFreeItemOfTy) vals env.eUngeneralizableItems }
413+
{ env with
414+
eNameResEnv = AddValListToNameEnv vals env.eNameResEnv
415+
eUngeneralizableItems = List.foldBack (typeOfVal >> addFreeItemOfTy) vals env.eUngeneralizableItems }
415416
CallEnvSink tcSink (scopem, env.NameEnv, env.eAccessRights)
416417
env
417418

418-
let AddLocalVal tcSink scopem v env =
419-
let env = ModifyNameResEnv (fun nenv -> AddValRefToNameEnv nenv (mkLocalValRef v)) env
420-
let env = {env with eUngeneralizableItems = addFreeItemOfTy v.Type env.eUngeneralizableItems }
419+
let AddLocalVal tcSink scopem v env =
420+
let env = { env with
421+
eNameResEnv = AddValRefToNameEnv env.eNameResEnv (mkLocalValRef v)
422+
eUngeneralizableItems = addFreeItemOfTy v.Type env.eUngeneralizableItems }
421423
CallEnvSink tcSink (scopem, env.NameEnv, env.eAccessRights)
422424
env
423425

424426
let AddLocalExnDefnAndReport tcSink scopem env (exnc:Tycon) =
425-
let env =ModifyNameResEnv (fun nenv ->AddExceptionDeclsToNameEnv BulkAdd.Nonenv (mkLocalEntityRef exnc)) env
427+
let env ={ env with eNameResEnv =AddExceptionDeclsToNameEnv BulkAdd.Noenv.eNameResEnv (mkLocalEntityRef exnc) }
426428
(* Also make VisualStudio think there is an identifier in scope at the range of the identifier text of its binding location *)
427429
CallEnvSink tcSink (exnc.Range, env.NameEnv, env.eAccessRights)
428430
CallEnvSink tcSink (scopem, env.NameEnv, env.eAccessRights)
429431
env
430432

431433
let AddLocalTyconRefs ownDefinition g amap m tcrefs env =
432434
if isNil tcrefs then env else
433-
env|> ModifyNameResEnv (fun nenv ->AddTyconRefsToNameEnv BulkAdd.No ownDefinition g amap m falsenenv tcrefs)
435+
{envwith eNameResEnv =AddTyconRefsToNameEnv BulkAdd.No ownDefinition g amap m falseenv.eNameResEnv tcrefs }
434436

435437
let AddLocalTycons g amap m (tycons: Tycon list) env =
436438
if isNil tycons then env else
@@ -448,14 +450,14 @@ let AddLocalTyconsAndReport tcSink scopem g amap m tycons env =
448450
let OpenModulesOrNamespaces tcSink g amap scopem root env mvvs openDeclaration =
449451
let env =
450452
if isNil mvvs then env else
451-
ModifyNameResEnv (fun nenv ->AddModulesAndNamespacesContentsToNameEnv g amap env.eAccessRights scopem rootnenv mvvs) env
453+
{ env with eNameResEnv =AddModulesAndNamespacesContentsToNameEnv g amap env.eAccessRights scopem rootenv.eNameResEnv mvvs }
452454
CallEnvSink tcSink (scopem, env.NameEnv, env.eAccessRights)
453455
CallOpenDeclarationSink tcSink openDeclaration
454456
env
455457

456458
let AddRootModuleOrNamespaceRefs g amap m env modrefs =
457459
if isNil modrefs then env else
458-
ModifyNameResEnv (fun nenv ->AddModuleOrNamespaceRefsToNameEnv g amap m true env.eAccessRightsnenv modrefs) env
460+
{ env with eNameResEnv =AddModuleOrNamespaceRefsToNameEnv g amap m true env.eAccessRightsenv.eNameResEnv modrefs }
459461

460462
let AddNonLocalCcu g amap scopem env assemblyName (ccu:CcuThunk, internalsVisibleToAttributes) =
461463

@@ -476,7 +478,7 @@ let AddNonLocalCcu g amap scopem env assemblyName (ccu:CcuThunk, internalsVisib
476478
let env = AddRootModuleOrNamespaceRefs g amap scopem env modrefs
477479
let env =
478480
if isNil tcrefs then env else
479-
ModifyNameResEnv (fun nenv ->AddTyconRefsToNameEnv BulkAdd.Yes false g amap scopem truenenv tcrefs) env
481+
{ env with eNameResEnv =AddTyconRefsToNameEnv BulkAdd.Yes false g amap scopem trueenv.eNameResEnv tcrefs }
480482
//CallEnvSink tcSink (scopem, env.NameEnv, env.eAccessRights)
481483
env
482484

@@ -486,25 +488,26 @@ let AddLocalRootModuleOrNamespace tcSink g amap scopem env (mtyp:ModuleOrNamespa
486488
// Compute the top-rooted type definitions
487489
let tcrefs = mtyp.TypeAndExceptionDefinitions |> List.map mkLocalTyconRef
488490
let env = AddRootModuleOrNamespaceRefs g amap scopem env modrefs
489-
let env =
490-
if isNil tcrefs then env else
491-
ModifyNameResEnv (fun nenv -> AddTyconRefsToNameEnv BulkAdd.No false g amap scopem true nenv tcrefs) env
492-
let env = { env with eUngeneralizableItems = addFreeItemOfModuleTy mtyp env.eUngeneralizableItems }
491+
let env = { env with
492+
eNameResEnv = if isNil tcrefs then env.eNameResEnv else AddTyconRefsToNameEnv BulkAdd.No false g amap scopem true env.eNameResEnv tcrefs
493+
eUngeneralizableItems = addFreeItemOfModuleTy mtyp env.eUngeneralizableItems }
493494
CallEnvSink tcSink (scopem, env.NameEnv, env.eAccessRights)
494495
env
495496

496497
let AddModuleAbbreviationAndReport tcSink scopem id modrefs env =
497498
let env =
498499
if isNil modrefs then env else
499-
ModifyNameResEnv (fun nenv -> AddModuleAbbrevToNameEnv id nenv modrefs) env
500+
{ env with eNameResEnv = AddModuleAbbrevToNameEnv id env.eNameResEnv modrefs }
501+
500502
CallEnvSink tcSink (scopem, env.NameEnv, env.eAccessRights)
501503
let item = Item.ModuleOrNamespaces modrefs
502504
CallNameResolutionSink tcSink (id.idRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Use, env.DisplayEnv, env.eAccessRights)
503505
env
504506

505507
let AddLocalSubModule g amap m env (modul:ModuleOrNamespace) =
506-
let env = ModifyNameResEnv (fun nenv -> AddModuleOrNamespaceRefToNameEnv g amap m false env.eAccessRights nenv (mkLocalModRef modul)) env
507-
let env = { env with eUngeneralizableItems = addFreeItemOfModuleTy modul.ModuleOrNamespaceType env.eUngeneralizableItems }
508+
let env = { env with
509+
eNameResEnv = AddModuleOrNamespaceRefToNameEnv g amap m false env.eAccessRights env.eNameResEnv (mkLocalModRef modul)
510+
eUngeneralizableItems = addFreeItemOfModuleTy modul.ModuleOrNamespaceType env.eUngeneralizableItems }
508511
env
509512

510513
let AddLocalSubModuleAndReport tcSink scopem g amap m env (modul:ModuleOrNamespace) =
@@ -518,7 +521,7 @@ let RegisterDeclaredTypars typars env =
518521

519522
let AddDeclaredTypars check typars env =
520523
if isNil typars then env else
521-
let env =ModifyNameResEnv (fun nenv ->AddDeclaredTyparsToNameEnv checknenv typars) env
524+
let env ={ env with eNameResEnv =AddDeclaredTyparsToNameEnv checkenv.eNameResEnv typars }
522525
RegisterDeclaredTypars typars env
523526

524527
/// Compilation environment for typechecking a single file in an assembly. Contains the
@@ -7245,8 +7248,12 @@ and TcComputationExpression cenv env overallTy mWhole interpExpr builderTy tpenv
72457248
/// for all custom operations. This adds them to the completion lists and prevents them being used as values inside
72467249
/// the query.
72477250
let env =
7248-
env |> ModifyNameResEnv (fun nenv -> (nenv, customOperationMethods) ||> Seq.fold (fun nenv (nm, _, _, _, _, _, _, _, methInfo) ->
7249-
AddFakeNameToNameEnv nm nenv (Item.CustomOperation (nm, (fun () -> customOpUsageText (ident (nm, mBuilderVal))), Some methInfo))))
7251+
if List.isEmpty customOperationMethods then env else
7252+
{ env with
7253+
eNameResEnv =
7254+
(env.eNameResEnv, customOperationMethods)
7255+
||> Seq.fold (fun nenv (nm, _, _, _, _, _, _, _, methInfo) ->
7256+
AddFakeNameToNameEnv nm nenv (Item.CustomOperation (nm, (fun () -> customOpUsageText (ident (nm, mBuilderVal))), Some methInfo))) }
72507257

72517258
// Environment is needed for completions
72527259
CallEnvSink cenv.tcSink (comp.Range, env.NameEnv, ad)
@@ -10411,7 +10418,7 @@ and TcNormalizedBinding declKind (cenv:cenv) env tpenv overallTy safeThisValOpt
1041110418
let item = Item.ActivePatternResult(apinfo, cenv.g.unit_ty, i, tagRange)
1041210419
CallNameResolutionSink cenv.tcSink (tagRange, env.NameEnv, item, item, emptyTyparInst, ItemOccurence.Binding, env.DisplayEnv, env.eAccessRights))
1041310420

10414-
ModifyNameResEnv (fun nenv ->AddActivePatternResultTagsToNameEnv apinfonenv ty m) envinner
10421+
{ envinner with eNameResEnv =AddActivePatternResultTagsToNameEnv apinfoenvinner.eNameResEnv ty m }
1041510422
| None ->
1041610423
envinner
1041710424

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp