Skip to content

Commit bdd19ea

Browse files
committed
Merge pull request #437 from rojepp/integrate_2015_10_13
Integrate 2015-10-13
2 parents 5bbd2b1 + c449cb1 commit bdd19ea

12 files changed

+75
-43
lines changed

src/fsharp/CompileOptions.fs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1137,17 +1137,17 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM
11371137
let optEnv0 = optEnv
11381138
let (TAssembly(implFiles)) = tassembly
11391139
ReportTime tcConfig ("Optimizations");
1140-
let results,(optEnvFirstLoop,_,_) =
1141-
((optEnv0,optEnv0,optEnv0),implFiles) ||> List.mapFold (fun (optEnvFirstLoop,optEnvExtraLoop,optEnvFinalSimplify) implFile ->
1140+
let results,(optEnvFirstLoop,_,_,_) =
1141+
((optEnv0,optEnv0,optEnv0,SignatureHidingInfo.Empty),implFiles) ||> List.mapFold (fun (optEnvFirstLoop,optEnvExtraLoop,optEnvFinalSimplify,hidden) implFile ->
11421142

11431143
// Only do abstract_big_targets on the first pass! Only do it when TLR is on!
11441144
let optSettings = tcConfig.optSettings
11451145
let optSettings = { optSettings with abstractBigTargets = tcConfig.doTLR }
11461146
let optSettings = { optSettings with reportingPhase = true }
11471147

11481148
//ReportTime tcConfig ("Initial simplify");
1149-
let optEnvFirstLoop,implFile,implFileOptData =
1150-
Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFirstLoop,isIncrementalFragment,tcConfig.emitTailcalls,implFile)
1149+
let optEnvFirstLoop,implFile,implFileOptData,hidden =
1150+
Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFirstLoop,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile)
11511151

11521152
let implFile = AutoBox.TransformImplFile tcGlobals importMap implFile
11531153

@@ -1161,7 +1161,7 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM
11611161
let implFile,optEnvExtraLoop =
11621162
if tcConfig.extraOptimizationIterations > 0 then
11631163
//ReportTime tcConfig ("Extra simplification loop");
1164-
let optEnvExtraLoop,implFile, _ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvExtraLoop,isIncrementalFragment,tcConfig.emitTailcalls,implFile)
1164+
let optEnvExtraLoop,implFile, _, _ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvExtraLoop,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile)
11651165
//PrintWholeAssemblyImplementation tcConfig outfile (sprintf "extra-loop-%d" n) implFile;
11661166
implFile,optEnvExtraLoop
11671167
else
@@ -1186,12 +1186,12 @@ let ApplyAllOptimizations (tcConfig:TcConfig, tcGlobals, tcVal, outfile, importM
11861186
let implFile,optEnvFinalSimplify =
11871187
if tcConfig.doFinalSimplify then
11881188
//ReportTime tcConfig ("Final simplify pass");
1189-
let optEnvFinalSimplify,implFile, _ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFinalSimplify,isIncrementalFragment,tcConfig.emitTailcalls,implFile)
1189+
let optEnvFinalSimplify,implFile, _, _ = Optimizer.OptimizeImplFile(optSettings,ccu,tcGlobals,tcVal, importMap,optEnvFinalSimplify,isIncrementalFragment,tcConfig.emitTailcalls,hidden,implFile)
11901190
//PrintWholeAssemblyImplementation tcConfig outfile "post-rec-opt" implFile;
11911191
implFile,optEnvFinalSimplify
11921192
else
11931193
implFile,optEnvFinalSimplify
1194-
(implFile,implFileOptData),(optEnvFirstLoop,optEnvExtraLoop,optEnvFinalSimplify))
1194+
(implFile,implFileOptData),(optEnvFirstLoop,optEnvExtraLoop,optEnvFinalSimplify,hidden))
11951195

11961196
let implFiles,implFileOptDatas = List.unzip results
11971197
let assemblyOptData = Optimizer.UnionOptimizationInfos implFileOptDatas

src/fsharp/FSComp.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1344,3 +1344,4 @@ estApplyStaticArgumentsForMethodNotImplemented,"A type provider implemented GetS
13441344
3187,checkNotSufficientlyGenericBecauseOfScope,"Type inference caused the type variable %s to escape its scope. Consider adding an explicit type parameter declaration or adjusting your code to be less generic."
13451345
3188,checkNotSufficientlyGenericBecauseOfScopeAnon,"Type inference caused an inference type variable to escape its scope. Consider adding type annotations to make your code less generic."
13461346
3189,checkRaiseFamilyFunctionArgumentCount,"Redundant arguments are being ignored in function '%s'. Expected %d but got %d arguments."
1347+
3190,checkLowercaseLiteralBindingInPattern,"Lowercase literal '%s' is being shadowed by a new pattern with the same name. Only uppercase and module-prefixed literals can be used as named patterns."

src/fsharp/LexFilter.fs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -565,7 +565,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer,
565565
let tokenLexbufState = getLexbufState()
566566
savedLexbufState <- tokenLexbufState
567567
haveLexbufState <- true
568-
TokenTup(token, tokenLexbufState, PositionTuple(lastTokenStart, lastTokenEnd))
568+
TokenTup(token,tokenLexbufState,PositionTuple(lastTokenStart,lastTokenEnd))
569569

570570
//----------------------------------------------------------------------------
571571
// Fetch a raw token, either from the old lexer or from our delayedStack
@@ -635,7 +635,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer,
635635
let pushCtxt tokenTup (newCtxt:Context) =
636636
let rec unindentationLimit strict stack =
637637
match newCtxt,stack with
638-
| _, [] -> PositionWithColumn (newCtxt.StartPos, -1)
638+
| _, [] -> PositionWithColumn(newCtxt.StartPos, -1)
639639

640640
// ignore Vanilla because a SeqBlock is always coming
641641
| _, (CtxtVanilla _ :: rest) -> unindentationLimit strict rest
@@ -647,8 +647,8 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer,
647647
// '(match' limited by minimum of two
648648
| _,(((CtxtMatch _) as ctxt1) :: CtxtSeqBlock _ :: (CtxtParen ((BEGIN | LPAREN),_) as ctxt2) :: _rest)
649649
-> if ctxt1.StartCol <= ctxt2.StartCol
650-
then PositionWithColumn (ctxt1.StartPos,ctxt1.StartCol)
651-
else PositionWithColumn (ctxt2.StartPos,ctxt2.StartCol)
650+
then PositionWithColumn(ctxt1.StartPos,ctxt1.StartCol)
651+
else PositionWithColumn(ctxt2.StartPos,ctxt2.StartCol)
652652

653653
// 'let ... = function' limited by 'let', precisely
654654
// This covers the common form
@@ -657,15 +657,15 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer,
657657
// | Case1 -> ...
658658
// | Case2 -> ...
659659
| (CtxtMatchClauses _), (CtxtFunction _ :: CtxtSeqBlock _ :: (CtxtLetDecl _ as limitCtxt) :: _rest)
660-
-> PositionWithColumn (limitCtxt.StartPos,limitCtxt.StartCol)
660+
-> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol)
661661

662662
// Otherwise 'function ...' places no limit until we hit a CtxtLetDecl etc... (Recursive)
663663
| (CtxtMatchClauses _), (CtxtFunction _ :: rest)
664664
-> unindentationLimit false rest
665665

666666
// 'try ... with' limited by 'try'
667667
| _,(CtxtMatchClauses _ :: (CtxtTry _ as limitCtxt) :: _rest)
668-
-> PositionWithColumn (limitCtxt.StartPos,limitCtxt.StartCol)
668+
-> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol)
669669

670670
// 'fun ->' places no limit until we hit a CtxtLetDecl etc... (Recursive)
671671
| _,(CtxtFun _ :: rest)
@@ -684,7 +684,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer,
684684
// This is a serious thing to allow, but is required since there is no "return" in this language.
685685
// Without it there is no way of escaping special cases in large bits of code without indenting the main case.
686686
| CtxtSeqBlock _, (CtxtElse _ :: (CtxtIf _ as limitCtxt) :: _rest)
687-
-> PositionWithColumn (limitCtxt.StartPos,limitCtxt.StartCol)
687+
-> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol)
688688

689689
// Permitted inner-construct precise block alighnment:
690690
// interface ...
@@ -695,7 +695,7 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer,
695695
// with ...
696696
// end
697697
| CtxtWithAsAugment _,((CtxtInterfaceHead _ | CtxtMemberHead _ | CtxtException _ | CtxtTypeDefns _) as limitCtxt :: _rest)
698-
-> PositionWithColumn (limitCtxt.StartPos,limitCtxt.StartCol)
698+
-> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol)
699699

700700
// Permit unindentation via parentheses (or begin/end) following a 'then', 'else' or 'do':
701701
// if nr > 0 then (
@@ -766,12 +766,12 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer,
766766
// 'type C = interface ... ' limited by 'type'
767767
// 'type C = struct ... ' limited by 'type'
768768
| _,(CtxtParen ((CLASS | STRUCT | INTERFACE),_) :: CtxtSeqBlock _ :: (CtxtTypeDefns _ as limitCtxt) :: _)
769-
-> PositionWithColumn (limitCtxt.StartPos,limitCtxt.StartCol + 1)
769+
-> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol + 1)
770770

771771
// REVIEW: document these
772772
| _,(CtxtSeqBlock _ :: CtxtParen((BEGIN | LPAREN | LBRACK | LBRACK_BAR),_) :: CtxtVanilla _ :: (CtxtSeqBlock _ as limitCtxt) :: _)
773773
| (CtxtSeqBlock _),(CtxtParen ((BEGIN | LPAREN | LBRACE | LBRACK | LBRACK_BAR) ,_) :: CtxtSeqBlock _ :: ((CtxtTypeDefns _ | CtxtLetDecl _ | CtxtMemberBody _ | CtxtWithAsLet _) as limitCtxt) :: _)
774-
-> PositionWithColumn (limitCtxt.StartPos,limitCtxt.StartCol + 1)
774+
-> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol + 1)
775775

776776
// Permitted inner-construct (e.g. "then" block and "else" block in overall
777777
// "if-then-else" block ) block alighnment:
@@ -780,22 +780,22 @@ type LexFilterImpl (lightSyntaxStatus:LightSyntaxStatus, compilingFsLib, lexer,
780780
// elif expr
781781
// else expr
782782
| (CtxtIf _ | CtxtElse _ | CtxtThen _), (CtxtIf _ as limitCtxt) :: _rest
783-
-> PositionWithColumn (limitCtxt.StartPos,limitCtxt.StartCol)
783+
-> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol)
784784
// Permitted inner-construct precise block alighnment:
785785
// while ...
786786
// do expr
787787
// done
788788
| (CtxtDo _), ((CtxtFor _ | CtxtWhile _) as limitCtxt) :: _rest
789-
-> PositionWithColumn (limitCtxt.StartPos,limitCtxt.StartCol)
789+
-> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol)
790790

791791

792792
// These contexts all require indentation by at least one space
793793
| _,((CtxtInterfaceHead _ | CtxtNamespaceHead _ | CtxtModuleHead _ | CtxtException _ | CtxtModuleBody (_,false) | CtxtIf _ | CtxtWithAsLet _ | CtxtLetDecl _ | CtxtMemberHead _ | CtxtMemberBody _) as limitCtxt :: _)
794-
-> PositionWithColumn (limitCtxt.StartPos,limitCtxt.StartCol + 1)
794+
-> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol + 1)
795795

796796
// These contexts can have their contents exactly aligning
797797
| _,((CtxtParen _ | CtxtFor _ | CtxtWhen _ | CtxtWhile _ | CtxtTypeDefns _ | CtxtMatch _ | CtxtModuleBody (_,true) | CtxtNamespaceBody _ | CtxtTry _ | CtxtMatchClauses _ | CtxtSeqBlock _) as limitCtxt :: _)
798-
-> PositionWithColumn (limitCtxt.StartPos,limitCtxt.StartCol)
798+
-> PositionWithColumn(limitCtxt.StartPos,limitCtxt.StartCol)
799799

800800
match newCtxt with
801801
// Don't bother to check pushes of Vanilla blocks since we've

src/fsharp/NameResolution.fs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -615,7 +615,10 @@ let private AddPartsOfTyconRefToNameEnv bulkAddMode ownDefinition (g:TcGlobals)
615615
ePatItems = ePatItems
616616
eIndexedExtensionMembers = eIndexedExtensionMembers
617617
eUnindexedExtensionMembers = eUnindexedExtensionMembers }
618-
618+
619+
let TryFindPatternByName name {ePatItems = patternMap} =
620+
NameMap.tryFind name patternMap
621+
619622
/// Add a set of type definitions to the name resolution environment
620623
let AddTyconRefsToNameEnv bulkAddMode ownDefinition g amap m root nenv tcrefs =
621624
let env = List.fold (AddPartsOfTyconRefToNameEnv bulkAddMode ownDefinition g amap m) nenv tcrefs

src/fsharp/NameResolution.fsi

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ type FullyQualifiedFlag =
109109
[<RequireQualifiedAccess>]
110110
type BulkAdd = Yes | No
111111

112+
/// Lookup patterns in name resolution environment
113+
val internal TryFindPatternByName : string -> NameResolutionEnv -> Item option
114+
112115
/// Add extra items to the environment for Visual Studio, e.g. static members
113116
val internal AddFakeNamedValRefToNameEnv : string -> NameResolutionEnv -> ValRef -> NameResolutionEnv
114117

src/fsharp/Optimizer.fs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3193,7 +3193,7 @@ and OptimizeModuleDefs cenv (env,bindInfosColl) defs =
31933193
let defs,minfos = List.unzip defs
31943194
(defs,UnionOptimizationInfos minfos),(env,bindInfosColl)
31953195

3196-
and OptimizeImplFileInternal cenv env isIncrementalFragment (TImplFile(qname, pragmas, (ModuleOrNamespaceExprWithSig(mty,_,_) as mexpr), hasExplicitEntryPoint,isScript)) =
3196+
and OptimizeImplFileInternal cenv env isIncrementalFragment hidden (TImplFile(qname, pragmas, (ModuleOrNamespaceExprWithSig(mty,_,_) as mexpr), hasExplicitEntryPoint,isScript)) =
31973197
let env,mexpr',minfo =
31983198
match mexpr with
31993199
// FSI: FSI compiles everything as if you're typing incrementally into one module
@@ -3209,16 +3209,16 @@ and OptimizeImplFileInternal cenv env isIncrementalFragment (TImplFile(qname, pr
32093209
let env = { env with localExternalVals=env.localExternalVals.MarkAsCollapsible() } // take the chance to flatten to a dictionary
32103210
env, mexpr', minfo
32113211

3212-
let hidden = ComputeHidingInfoAtAssemblyBoundary mty
3212+
let hidden = ComputeHidingInfoAtAssemblyBoundary mty hidden
32133213

32143214
let minfo = AbstractLazyModulInfoByHiding true hidden minfo
3215-
env, TImplFile(qname,pragmas,mexpr',hasExplicitEntryPoint,isScript), minfo
3215+
env, TImplFile(qname,pragmas,mexpr',hasExplicitEntryPoint,isScript), minfo, hidden
32163216

32173217
//-------------------------------------------------------------------------
32183218
// Entry point
32193219
//-------------------------------------------------------------------------
32203220

3221-
let OptimizeImplFile(settings,ccu,tcGlobals,tcVal, importMap,optEnv,isIncrementalFragment,emitTailcalls,mimpls) =
3221+
let OptimizeImplFile(settings,ccu,tcGlobals,tcVal, importMap,optEnv,isIncrementalFragment,emitTailcalls,hidden,mimpls) =
32223222
let cenv =
32233223
{ settings=settings;
32243224
scope=ccu;
@@ -3229,7 +3229,7 @@ let OptimizeImplFile(settings,ccu,tcGlobals,tcVal, importMap,optEnv,isIncrementa
32293229
localInternalVals=new System.Collections.Generic.Dictionary<Stamp,ValInfo>(10000);
32303230
emitTailcalls=emitTailcalls;
32313231
casApplied=new Dictionary<Stamp,bool>() }
3232-
OptimizeImplFileInternal cenv optEnv isIncrementalFragment mimpls
3232+
OptimizeImplFileInternal cenv optEnv isIncrementalFragment hidden mimpls
32333233

32343234

32353235
//-------------------------------------------------------------------------

src/fsharp/Optimizer.fsi

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ module internal Microsoft.FSharp.Compiler.Optimizer
55
open Internal.Utilities
66
open Microsoft.FSharp.Compiler
77
open Microsoft.FSharp.Compiler.Tast
8+
open Microsoft.FSharp.Compiler.Tastops
89
open Microsoft.FSharp.Compiler.TcGlobals
910
open Microsoft.FSharp.Compiler.AbstractIL
1011
open Microsoft.FSharp.Compiler.AbstractIL.Internal
@@ -43,7 +44,7 @@ type IncrementalOptimizationEnv =
4344
val internal BindCcu : CcuThunk -> CcuOptimizationInfo -> IncrementalOptimizationEnv -> TcGlobals -> IncrementalOptimizationEnv
4445

4546
/// Optimize one implementation file in the given environment
46-
val internal OptimizeImplFile : OptimizationSettings * CcuThunk * TcGlobals * ConstraintSolver.TcValF * Import.ImportMap * IncrementalOptimizationEnv * isIncrementalFragment: bool * emitTaicalls: bool * TypedImplFile -> IncrementalOptimizationEnv * TypedImplFile * ImplFileOptimizationInfo
47+
val internal OptimizeImplFile : OptimizationSettings * CcuThunk * TcGlobals * ConstraintSolver.TcValF * Import.ImportMap * IncrementalOptimizationEnv * isIncrementalFragment: bool * emitTaicalls: bool * SignatureHidingInfo * TypedImplFile -> IncrementalOptimizationEnv * TypedImplFile * ImplFileOptimizationInfo * SignatureHidingInfo
4748

4849
#if DEBUG
4950
/// Displaying optimization data

src/fsharp/TastOps.fs

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,12 +82,14 @@ let emptyTyparInst = ([] : TyparInst)
8282
type Remap =
8383
{ tpinst : TyparInst;
8484
valRemap: ValRemap;
85-
tyconRefRemap : TyconRefRemap }
85+
tyconRefRemap : TyconRefRemap;
86+
removeTraitSolutions: bool }
8687

8788
let emptyRemap =
8889
{ tpinst = emptyTyparInst;
8990
tyconRefRemap = emptyTyconRefRemap;
90-
valRemap = ValMap.Empty }
91+
valRemap = ValMap.Empty;
92+
removeTraitSolutions = false }
9193

9294
type Remap with
9395
static member Empty = emptyRemap
@@ -228,6 +230,7 @@ and remapTraitAux tyenv (TTrait(typs,nm,mf,argtys,rty,slnCell)) =
228230
let slnCell =
229231
match !slnCell with
230232
| None -> None
233+
| _ when tyenv.removeTraitSolutions -> None
231234
| Some sln ->
232235
let sln =
233236
match sln with
@@ -343,7 +346,8 @@ let remapSlotSig remapAttrib tyenv (TSlotSig(nm,typ, ctps,methTypars,paraml, rty
343346
let mkInstRemap tpinst =
344347
{ tyconRefRemap = emptyTyconRefRemap;
345348
tpinst = tpinst;
346-
valRemap = ValMap.Empty }
349+
valRemap = ValMap.Empty;
350+
removeTraitSolutions = false }
347351

348352
// entry points for "typar -> TType" instantiation
349353
let instType tpinst x = if List.isEmpty tpinst then x else remapTypeAux (mkInstRemap tpinst) x
@@ -1264,6 +1268,8 @@ let tryRescopeEntity viewedCcu (entity:Entity) : EntityRef option =
12641268
let tryRescopeVal viewedCcu (entityRemap:Remap) (vspec:Val) : ValRef option =
12651269
match vspec.PublicPath with
12661270
| Some (ValPubPath(p,fullLinkageKey)) ->
1271+
// The type information in the val linkage doesn't need to keep any information to trait solutions.
1272+
let entityRemap = { entityRemap with removeTraitSolutions = true }
12671273
let fullLinkageKey = remapValLinkage entityRemap fullLinkageKey
12681274
let vref =
12691275
// This compensates for the somewhat poor design decision in the F# compiler and metadata where
@@ -3482,7 +3488,8 @@ let addValRemap v v' tmenv =
34823488
let mkRepackageRemapping mrpi =
34833489
{ valRemap = ValMap.OfList (mrpi.mrpiVals |> List.map (fun (vref,x) -> vref.Deref, x));
34843490
tpinst = emptyTyparInst;
3485-
tyconRefRemap = TyconRefMap.OfList mrpi.mrpiEntities }
3491+
tyconRefRemap = TyconRefMap.OfList mrpi.mrpiEntities
3492+
removeTraitSolutions = false }
34863493

34873494
//--------------------------------------------------------------------------
34883495
// Compute instances of the above for mty -> mty
@@ -3695,9 +3702,9 @@ let rec accModuleOrNamespaceHidingInfoAtAssemblyBoundary mty acc =
36953702
let acc = QueueList.foldBack accValHidingInfoAtAssemblyBoundary mty.AllValsAndMembers acc
36963703
acc
36973704

3698-
let ComputeHidingInfoAtAssemblyBoundary mty =
3705+
let ComputeHidingInfoAtAssemblyBoundary mty acc =
36993706
// dprintf "ComputeRemappingFromInferredSignatureToExplicitSignature,\nmty = %s\nmmsigty=%s\n" (showL(entityTypeL mty)) (showL(entityTypeL msigty));
3700-
accModuleOrNamespaceHidingInfoAtAssemblyBoundary mty SignatureHidingInfo.Empty
3707+
accModuleOrNamespaceHidingInfoAtAssemblyBoundary mty acc
37013708

37023709
//--------------------------------------------------------------------------
37033710
// Compute instances of the above for mexpr -> mty

0 commit comments

Comments
 (0)