Skip to content

Commit d9348ec

Browse files
xepaullatkin
authored andcommitted
Support for extension property initializers
Closes #17 commit 3d639ab68e247b52bbbbcc83d48b908e7db447af Author: latkin <latkin@microsoft.com> Date: Thu Jan 15 13:43:40 2015 -0800 Cleaning up tests configs commit cbf4d76 Author: Steffen Forkmann <steffen.forkmann@msu-solutions.de> Date: Thu Jan 15 16:38:35 2015 +0100 Fix calls in #if EXTENSIONTYPING commit fd548e3 Author: Steffen Forkmann <steffen.forkmann@msu-solutions.de> Date: Thu Jan 15 16:21:08 2015 +0100 Reorder build order in proto-Compiler commit 8968e4f Author: xepaul <edwardpaul44@gmail.com> Date: Tue Nov 18 23:59:43 2014 +0000 Added Tests commit 3fd4931 Author: xepaul <edwardpaul44@gmail.com> Date: Thu Nov 13 23:27:27 2014 +0000 type argument bug fix commit 848cacf Author: xepaul <edwardpaul44@gmail.com> Date: Sun Sep 7 15:36:49 2014 +0100 Changes following PR comments :- match styling change. added open module to remove fully qualified path removed unnecessary comment "//need to hide" added during prototyping commit 0b2381f Author: xepaul <edwardpaul44@gmail.com> Date: Tue Jul 22 01:38:18 2014 +0100 Experiment to support assigning values to extension properties at initialization
1 parent ca40a40 commit d9348ec

10 files changed

+200
-40
lines changed

src/fsharp/FSharp.Compiler-proto/FSharp.Compiler-proto.fsproj

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -307,6 +307,18 @@
307307
<Compile Include="..\augment.fs">
308308
<Link>augment.fs</Link>
309309
</Compile>
310+
<Compile Include="..\outcome.fsi">
311+
<Link>outcome.fsi</Link>
312+
</Compile>
313+
<Compile Include="..\outcome.fs">
314+
<Link>outcome.fs</Link>
315+
</Compile>
316+
<Compile Include="..\nameres.fsi">
317+
<Link>nameres.fsi</Link>
318+
</Compile>
319+
<Compile Include="..\nameres.fs">
320+
<Link>nameres.fs</Link>
321+
</Compile>
310322
<Compile Include="..\typrelns.fs">
311323
<Link>typrelns.fs</Link>
312324
</Compile>
@@ -315,12 +327,6 @@
315327
</Compile>
316328
<Compile Include="..\patcompile.fs">
317329
<Link>patcompile.fs</Link>
318-
</Compile>
319-
<Compile Include="..\outcome.fsi">
320-
<Link>outcome.fsi</Link>
321-
</Compile>
322-
<Compile Include="..\outcome.fs">
323-
<Link>outcome.fs</Link>
324330
</Compile>
325331
<Compile Include="..\csolve.fsi">
326332
<Link>csolve.fsi</Link>
@@ -333,12 +339,6 @@
333339
</Compile>
334340
<Compile Include="..\formats.fs">
335341
<Link>formats.fs</Link>
336-
</Compile>
337-
<Compile Include="..\nameres.fsi">
338-
<Link>nameres.fsi</Link>
339-
</Compile>
340-
<Compile Include="..\nameres.fs">
341-
<Link>nameres.fs</Link>
342342
</Compile>
343343
<Compile Include="..\unsolved.fs">
344344
<Link>unsolved.fs</Link>

src/fsharp/csolve.fs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1204,7 +1204,7 @@ and SolveMemberConstraint (csenv:ConstraintSolverEnv) permitWeakResolution ndeep
12041204
let callerArgs = argtys |> List.map (fun argty -> CallerArg(argty,m,false,dummyExpr))
12051205
let minst = FreshenMethInfo m minfo
12061206
let objtys = minfo.GetObjArgTypes(amap, m, minst)
1207-
CalledMeth<Expr>(csenv.InfoReader,false,FreshenMethInfo,m,AccessibleFromEverywhere,minfo,minst,minst,None,objtys,[(callerArgs,[])],false,false))
1207+
CalledMeth<Expr>(csenv.InfoReader,None,false,FreshenMethInfo,m,AccessibleFromEverywhere,minfo,minst,minst,None,objtys,[(callerArgs,[])],false,false,None))
12081208

12091209
let methOverloadResult,errors =
12101210
CollectThenUndo (fun trace -> ResolveOverloading csenv (WithTrace(trace)) nm ndeep true (0,0) AccessibleFromEverywhere calledMethGroup false (Some rty))

src/fsharp/nameres.fsi

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -206,6 +206,9 @@ val internal CallExprHasTypeSink : TcResultsSink -> range * NameResolutio
206206
/// Get all the available properties of a type (both intrinsic and extension)
207207
val internal AllPropInfosOfTypeInScope : InfoReader -> NameResolutionEnv -> string option * AccessorDomain -> FindMemberFlag -> range -> TType -> PropInfo list
208208

209+
/// Get all the available properties of a type (only extension)
210+
val internal ExtensionPropInfosOfTypeInScope : InfoReader -> NameResolutionEnv -> string option * AccessorDomain -> range -> TType -> PropInfo list
211+
209212
/// Get the available methods of a type (both declared and inherited)
210213
val internal AllMethInfosOfTypeInScope : InfoReader -> NameResolutionEnv -> string option * AccessorDomain -> FindMemberFlag -> range -> TType -> MethInfo list
211214

src/fsharp/tc.fs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -5775,7 +5775,7 @@ and TcCtorCall isNaked cenv env tpenv overallTy objTy mObjTyOpt item superInit a
57755775
| Some mObjTy,None -> AfterTcOverloadResolution.ForNewConstructors cenv.tcSink env mObjTy methodName minfos
57765776
| None, _ -> AfterTcOverloadResolution.DoNothing
57775777

5778-
TcMethodApplicationThen cenv env overallTy tpenv None [] mWholeCall mItem methodName ad PossiblyMutates false meths afterTcOverloadResolution isSuperInit args ExprAtomicFlag.NonAtomic delayed
5778+
TcMethodApplicationThen cenv env overallTy (Some objTy) tpenv None [] mWholeCall mItem methodName ad PossiblyMutates false meths afterTcOverloadResolution isSuperInit args ExprAtomicFlag.NonAtomic delayed
57795779

57805780
| Item.DelegateCtor typ, [arg] ->
57815781
// Re-record the name resolution since we now know it's a constructor call
@@ -6137,7 +6137,7 @@ and TcObjectExpr cenv overallTy env tpenv (synObjTy,argopt,binds,extraImpls,mNew
61376137
let afterTcOverloadResolution = AfterTcOverloadResolution.ForNewConstructors cenv.tcSink env synObjTy.Range methodName minfos
61386138
let ad = env.eAccessRights
61396139

6140-
let expr,tpenv = TcMethodApplicationThen cenv env objTy tpenv None [] mWholeExpr mObjTy methodName ad PossiblyMutates false meths afterTcOverloadResolution CtorValUsedAsSuperInit [arg] ExprAtomicFlag.Atomic []
6140+
let expr,tpenv = TcMethodApplicationThen cenv env objTy None tpenv None [] mWholeExpr mObjTy methodName ad PossiblyMutates false meths afterTcOverloadResolution CtorValUsedAsSuperInit [arg] ExprAtomicFlag.Atomic []
61416141
// The 'base' value is always bound
61426142
let baseIdOpt = (match baseIdOpt with None -> Some(ident("base",mObjTy)) | Some id -> Some(id))
61436143
expr,baseIdOpt,tpenv
@@ -8018,7 +8018,7 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution
80188018
let afterTcOverloadResolution = afterOverloadResolution |> AfterTcOverloadResolution.ForMethods
80198019
match delayed with
80208020
| (DelayedApp (atomicFlag, arg, mExprAndArg)::otherDelayed) ->
8021-
TcMethodApplicationThen cenv env overallTy tpenv None [] mExprAndArg mItem methodName ad NeverMutates false meths afterTcOverloadResolution NormalValUse [arg] atomicFlag otherDelayed
8021+
TcMethodApplicationThen cenv env overallTy None tpenv None [] mExprAndArg mItem methodName ad NeverMutates false meths afterTcOverloadResolution NormalValUse [arg] atomicFlag otherDelayed
80228022

80238023
| (DelayedTypeApp(tys, mTypeArgs, mExprAndTypeArgs) :: DelayedApp(atomicFlag, arg, mExprAndArg) :: otherDelayed) ->
80248024

@@ -8028,7 +8028,7 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution
80288028

80298029
// // NOTE: This doesn't take instantiation into account
80308030
// CallNameResolutionSink cenv.tcSink (mExprAndTypeArgs,env.NameEnv,item (* ! *), item, ItemOccurence.Use,env.DisplayEnv,env.eAccessRights)
8031-
TcMethodApplicationThen cenv env overallTy tpenv None [] mExprAndArg mItem methodName ad NeverMutates false [(minfoAfterStaticArguments, None)] afterTcOverloadResolution NormalValUse [arg] atomicFlag otherDelayed
8031+
TcMethodApplicationThen cenv env overallTy None tpenv None [] mExprAndArg mItem methodName ad NeverMutates false [(minfoAfterStaticArguments, None)] afterTcOverloadResolution NormalValUse [arg] atomicFlag otherDelayed
80328032

80338033
| None ->
80348034
#endif
@@ -8037,9 +8037,9 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution
80378037

80388038
// NOTE: This doesn't take instantiation into account
80398039
CallNameResolutionSink cenv.tcSink (mExprAndTypeArgs,env.NameEnv,item (* ! *), item, ItemOccurence.Use,env.DisplayEnv,env.eAccessRights)
8040-
TcMethodApplicationThen cenv env overallTy tpenv (Some tyargs) [] mExprAndArg mItem methodName ad NeverMutates false meths afterTcOverloadResolution NormalValUse [arg] atomicFlag otherDelayed
8040+
TcMethodApplicationThen cenv env overallTy None tpenv (Some tyargs) [] mExprAndArg mItem methodName ad NeverMutates false meths afterTcOverloadResolution NormalValUse [arg] atomicFlag otherDelayed
80418041
| _ ->
8042-
TcMethodApplicationThen cenv env overallTy tpenv None [] mItem mItem methodName ad NeverMutates false meths afterTcOverloadResolution NormalValUse [] ExprAtomicFlag.Atomic delayed
8042+
TcMethodApplicationThen cenv env overallTy None tpenv None [] mItem mItem methodName ad NeverMutates false meths afterTcOverloadResolution NormalValUse [] ExprAtomicFlag.Atomic delayed
80438043

80448044
| Item.CtorGroup(nm,minfos) ->
80458045
let objTy =
@@ -8206,14 +8206,14 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution
82068206
if isNil meths then error (Error (FSComp.SR.tcPropertyCannotBeSet1 nm,mItem))
82078207
let afterTcOverloadResolution = afterOverloadResolution |> AfterTcOverloadResolution.ForProperties nm SettersOfPropInfos
82088208
// Note: static calls never mutate a struct object argument
8209-
TcMethodApplicationThen cenv env overallTy tpenv tyargsOpt [] mStmt mItem nm ad NeverMutates true meths afterTcOverloadResolution NormalValUse (args@[e2]) ExprAtomicFlag.NonAtomic otherDelayed
8209+
TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt [] mStmt mItem nm ad NeverMutates true meths afterTcOverloadResolution NormalValUse (args@[e2]) ExprAtomicFlag.NonAtomic otherDelayed
82108210
| _ ->
82118211
// Static Property Get (possibly indexer)
82128212
let meths = pinfos |> GettersOfPropInfos
82138213
let afterTcOverloadResolution = afterOverloadResolution |> AfterTcOverloadResolution.ForProperties nm GettersOfPropInfos
82148214
if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable(nm),mItem))
82158215
// Note: static calls never mutate a struct object argument
8216-
TcMethodApplicationThen cenv env overallTy tpenv tyargsOpt [] mItem mItem nm ad NeverMutates true meths afterTcOverloadResolution NormalValUse args ExprAtomicFlag.Atomic delayed
8216+
TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt [] mItem mItem nm ad NeverMutates true meths afterTcOverloadResolution NormalValUse args ExprAtomicFlag.Atomic delayed
82178217

82188218
| Item.ILField finfo ->
82198219

@@ -8345,14 +8345,14 @@ and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId dela
83458345

83468346
#if EXTENSIONTYPING
83478347
match TryTcMethodAppToStaticConstantArgs cenv env tpenv (minfos, tyargsOpt, mExprAndItem, mItem) with
8348-
| Some minfo -> TcMethodApplicationThen cenv env overallTy tpenv None objArgs mExprAndItem mItem methodName ad mutates false [(minfo, None)] afterTcOverloadResolution NormalValUse args atomicFlag delayed
8348+
| Some minfo -> TcMethodApplicationThen cenv env overallTy None tpenv None objArgs mExprAndItem mItem methodName ad mutates false [(minfo, None)] afterTcOverloadResolution NormalValUse args atomicFlag delayed
83498349
| None ->
83508350
#endif
83518351

83528352
let tyargsOpt,tpenv = TcMemberTyArgsOpt cenv env tpenv tyargsOpt
83538353
let meths = minfos |> List.map (fun minfo -> minfo,None)
83548354

8355-
TcMethodApplicationThen cenv env overallTy tpenv tyargsOpt objArgs mExprAndItem mItem methodName ad mutates false meths afterTcOverloadResolution NormalValUse args atomicFlag delayed
8355+
TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem methodName ad mutates false meths afterTcOverloadResolution NormalValUse args atomicFlag delayed
83568356

83578357
| Item.Property (nm,pinfos) ->
83588358
// Instance property
@@ -8377,13 +8377,13 @@ and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId dela
83778377
if isNil meths then error (Error (FSComp.SR.tcPropertyCannotBeSet1 nm,mItem))
83788378
let afterTcOverloadResolution = afterOverloadResolution |> AfterTcOverloadResolution.ForProperties nm SettersOfPropInfos
83798379
let mut = (if isStructTy cenv.g (tyOfExpr cenv.g objExpr) then DefinitelyMutates else PossiblyMutates)
8380-
TcMethodApplicationThen cenv env overallTy tpenv tyargsOpt objArgs mStmt mItem nm ad mut true meths afterTcOverloadResolution NormalValUse (args @ [e2]) atomicFlag []
8380+
TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mStmt mItem nm ad mut true meths afterTcOverloadResolution NormalValUse (args @ [e2]) atomicFlag []
83818381
| _ ->
83828382
// Instance property getter
83838383
let meths = GettersOfPropInfos pinfos
83848384
if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable(nm),mItem))
83858385
let afterTcOverloadResolution = afterOverloadResolution |> AfterTcOverloadResolution.ForProperties nm GettersOfPropInfos
8386-
TcMethodApplicationThen cenv env overallTy tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterTcOverloadResolution NormalValUse args atomicFlag delayed
8386+
TcMethodApplicationThen cenv env overallTy None tpenv tyargsOpt objArgs mExprAndItem mItem nm ad PossiblyMutates true meths afterTcOverloadResolution NormalValUse args atomicFlag delayed
83878387

83888388
| Item.RecdField rfinfo ->
83898389
// Get or set instance F# field or literal
@@ -8488,6 +8488,7 @@ and TcMethodApplicationThen
84888488
env
84898489
overallTy // The type of the overall expression including "delayed". THe method "application" may actually be a use of a member as
84908490
// a first-class function value, when this would be a function type.
8491+
objTyOpt // methodType
84918492
tpenv
84928493
callerTyArgs // The return type of the overall expression including "delayed"
84938494
objArgs // The 'obj' arguments in obj.M(...) and obj.M, if any
@@ -8514,7 +8515,7 @@ and TcMethodApplicationThen
85148515

85158516
// Call the helper below to do the real checking
85168517
let (expr,attributeAssignedNamedItems,delayed),tpenv =
8517-
TcMethodApplication false cenv env tpenv callerTyArgs objArgs mWholeExpr mItem methodName ad mut isProp meths afterTcOverloadResolution isSuperInit args exprTy delayed
8518+
TcMethodApplication false cenv env tpenv callerTyArgs objArgs mWholeExpr mItem methodName objTyOpt ad mut isProp meths afterTcOverloadResolution isSuperInit args exprTy delayed
85188519

85198520
// Give errors if some things couldn't be assigned
85208521
if nonNil attributeAssignedNamedItems then
@@ -8545,6 +8546,7 @@ and TcMethodApplication
85458546
mMethExpr // range of the entire method expression
85468547
mItem
85478548
methodName
8549+
(objTyOpt : TType option)
85488550
ad
85498551
mut
85508552
isProp
@@ -8741,7 +8743,7 @@ and TcMethodApplication
87418743
| Some tyargs -> minfo.AdjustUserTypeInstForFSharpStyleIndexedExtensionMembers(tyargs)
87428744
| None -> minst
87438745
let allArgs = List.zip unnamedCurriedCallerArgs namedCurriedCallerArgs
8744-
CalledMeth<SynExpr>(cenv.infoReader,checkingAttributeCall, FreshenMethInfo, mMethExpr,ad,minfo,minst,callerTyArgs,pinfoOpt,callerObjArgTys,allArgs,usesParamArrayConversion,true)
8746+
CalledMeth<SynExpr>(cenv.infoReader,Some(env.NameEnv),checkingAttributeCall, FreshenMethInfo, mMethExpr,ad,minfo,minst,callerTyArgs,pinfoOpt,callerObjArgTys,allArgs,usesParamArrayConversion,true,objTyOpt)
87458747

87468748
let preArgumentTypeCheckingCalledMethGroup =
87478749
[ for (minfo,pinfoOpt) in candidateMethsAndProps do
@@ -8834,7 +8836,7 @@ and TcMethodApplication
88348836
| Some tyargs -> minfo.AdjustUserTypeInstForFSharpStyleIndexedExtensionMembers(tyargs)
88358837
| None -> minst
88368838
let callerArgs = List.zip unnamedCurriedCallerArgs namedCurriedCallerArgs
8837-
CalledMeth<Expr>(cenv.infoReader,checkingAttributeCall,FreshenMethInfo, mMethExpr,ad,minfo,minst,callerTyArgs,pinfoOpt,callerObjArgTys,callerArgs,usesParamArrayConversion,true))
8839+
CalledMeth<Expr>(cenv.infoReader,Some(env.NameEnv),checkingAttributeCall,FreshenMethInfo, mMethExpr,ad,minfo,minst,callerTyArgs,pinfoOpt,callerObjArgTys,callerArgs,usesParamArrayConversion,true,objTyOpt))
88388840

88398841
let callerArgCounts = (unnamedCurriedCallerArgs.Length, namedCurriedCallerArgs.Length)
88408842
let csenv = MakeConstraintSolverEnv cenv.css mMethExpr denv
@@ -9713,7 +9715,7 @@ and TcAttribute cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) =
97139715
let meths = minfos |> List.map (fun minfo -> minfo,None)
97149716
let afterTcOverloadResolution = AfterTcOverloadResolution.ForNewConstructors cenv.tcSink env tyid.idRange methodName minfos
97159717
let (expr,namedCallerArgs,_),_ =
9716-
TcMethodApplication true cenv env tpenv None [] mAttr mAttr methodName ad PossiblyMutates false meths afterTcOverloadResolution NormalValUse [arg] (NewInferenceType ()) []
9718+
TcMethodApplication true cenv env tpenv None [] mAttr mAttr methodName None ad PossiblyMutates false meths afterTcOverloadResolution NormalValUse [arg] (NewInferenceType ()) []
97179719

97189720
UnifyTypes cenv env mAttr ty (tyOfExpr cenv.g expr)
97199721

src/fsharp/typrelns.fs

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ open Microsoft.FSharp.Compiler.Lib
2525
open Microsoft.FSharp.Compiler.Infos
2626
open Microsoft.FSharp.Compiler.PrettyNaming
2727
open Microsoft.FSharp.Compiler.Infos.AccessibilityLogic
28+
open Microsoft.FSharp.Compiler.Nameres
2829

2930
#if EXTENSIONTYPING
3031
open Microsoft.FSharp.Compiler.ExtensionTyping
@@ -1630,6 +1631,7 @@ let MakeCalledArgs amap m (minfo:MethInfo) minst =
16301631
/// and returns a CalledMeth object for further analysis.
16311632
type CalledMeth<'T>
16321633
(infoReader:InfoReader,
1634+
nameEnv: Microsoft.FSharp.Compiler.Nameres.NameResolutionEnv option,
16331635
isCheckingAttributeCall,
16341636
freshenMethInfo,// a function to help generate fresh type variables the property setters methods in generic classes
16351637
m,
@@ -1641,7 +1643,8 @@ type CalledMeth<'T>
16411643
callerObjArgTys: TType list, // the types of the actual object argument, if any
16421644
curriedCallerArgs: (CallerArg<'T> list * CallerNamedArg<'T> list) list, // the data about any arguments supplied by the caller
16431645
allowParamArgs:bool, // do we allow the use of a param args method in its "expanded" form?
1644-
allowOutAndOptArgs: bool) // do we allow the use of the transformation that converts out arguments as tuple returns?
1646+
allowOutAndOptArgs: bool, // do we allow the use of the transformation that converts out arguments as tuple returns?
1647+
tyargsOpt : TType option) // method parameters
16451648
=
16461649
let g = infoReader.g
16471650
let methodRetTy = minfo.GetFSharpReturnTy(infoReader.amap, m, calledTyArgs)
@@ -1726,15 +1729,31 @@ type CalledMeth<'T>
17261729
let pminst = freshenMethInfo m pminfo
17271730
Choice1Of2(AssignedItemSetter(id,AssignedPropSetter(pinfo,pminfo, pminst), e))
17281731
| _ ->
1729-
match infoReader.GetILFieldInfosOfType(Some(nm),ad,m,returnedObjTy) with
1730-
| finfo :: _ ->
1731-
Choice1Of2(AssignedItemSetter(id,AssignedILFieldSetter(finfo), e))
1732-
| _ ->
1733-
match infoReader.TryFindRecdOrClassFieldInfoOfType(nm,m,returnedObjTy) with
1734-
| Some rfinfo ->
1735-
Choice1Of2(AssignedItemSetter(id,AssignedRecdFieldSetter(rfinfo), e))
1736-
| None ->
1737-
Choice2Of2(arg))
1732+
let epinfos =
1733+
match nameEnv with
1734+
| Some(ne) -> ExtensionPropInfosOfTypeInScope infoReader ne (Some(nm), ad) m returnedObjTy
1735+
| _ -> []
1736+
match epinfos with
1737+
| [pinfo] when pinfo.HasSetter && not pinfo.IsIndexer ->
1738+
let pminfo = pinfo.SetterMethod
1739+
let pminst = match minfo with
1740+
| MethInfo.FSMeth(_,TType.TType_app(_,types),_,_) -> types
1741+
| _ -> freshenMethInfo m pminfo
1742+
1743+
let pminst = match tyargsOpt with
1744+
| Some(TType.TType_app(_, types)) -> types
1745+
| _ -> pminst
1746+
Choice1Of2(AssignedItemSetter(id,AssignedPropSetter(pinfo,pminfo, pminst), e))
1747+
| _ ->
1748+
match infoReader.GetILFieldInfosOfType(Some(nm),ad,m,returnedObjTy) with
1749+
| finfo :: _ ->
1750+
Choice1Of2(AssignedItemSetter(id,AssignedILFieldSetter(finfo), e))
1751+
| _ ->
1752+
match infoReader.TryFindRecdOrClassFieldInfoOfType(nm,m,returnedObjTy) with
1753+
| Some rfinfo ->
1754+
Choice1Of2(AssignedItemSetter(id,AssignedRecdFieldSetter(rfinfo), e))
1755+
| None ->
1756+
Choice2Of2(arg))
17381757

17391758
let names = namedCallerArgs |> List.map (fun (CallerNamedArg(nm,_)) -> nm.idText)
17401759

0 commit comments

Comments
 (0)