@@ -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 objTyNone 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 overallTyNone 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 overallTyNone 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 overallTyNone 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 overallTyNone 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 overallTyNone 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 overallTyNone 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 overallTyNone 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 overallTyNone 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 overallTyNone 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 overallTyNone 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 methodNameobjTyOpt 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 methodNameNone ad PossiblyMutates false meths afterTcOverloadResolution NormalValUse [arg] (NewInferenceType ()) []
97179719
97189720 UnifyTypes cenv env mAttr ty (tyOfExpr cenv.g expr)
97199721