@@ -5775,7 +5775,7 @@ and TcCtorCall isNaked cenv env tpenv overallTy objTy mObjTyOpt item superInit a
5775
5775
| Some mObjTy,None -> AfterTcOverloadResolution.ForNewConstructors cenv.tcSink env mObjTy methodName minfos
5776
5776
| None, _ -> AfterTcOverloadResolution.DoNothing
5777
5777
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
5779
5779
5780
5780
| Item.DelegateCtor typ, [arg] ->
5781
5781
// 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
6137
6137
let afterTcOverloadResolution = AfterTcOverloadResolution.ForNewConstructors cenv.tcSink env synObjTy.Range methodName minfos
6138
6138
let ad = env.eAccessRights
6139
6139
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 []
6141
6141
// The 'base' value is always bound
6142
6142
let baseIdOpt = (match baseIdOpt with None -> Some(ident("base",mObjTy)) | Some id -> Some(id))
6143
6143
expr,baseIdOpt,tpenv
@@ -8018,7 +8018,7 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution
8018
8018
let afterTcOverloadResolution = afterOverloadResolution |> AfterTcOverloadResolution.ForMethods
8019
8019
match delayed with
8020
8020
| (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
8022
8022
8023
8023
| (DelayedTypeApp(tys, mTypeArgs, mExprAndTypeArgs) :: DelayedApp(atomicFlag, arg, mExprAndArg) :: otherDelayed) ->
8024
8024
@@ -8028,7 +8028,7 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution
8028
8028
8029
8029
// // NOTE: This doesn't take instantiation into account
8030
8030
// 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
8032
8032
8033
8033
| None ->
8034
8034
#endif
@@ -8037,9 +8037,9 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution
8037
8037
8038
8038
// NOTE: This doesn't take instantiation into account
8039
8039
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
8041
8041
| _ ->
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
8043
8043
8044
8044
| Item.CtorGroup(nm,minfos) ->
8045
8045
let objTy =
@@ -8206,14 +8206,14 @@ and TcItemThen cenv overallTy env tpenv (item,mItem,rest,afterOverloadResolution
8206
8206
if isNil meths then error (Error (FSComp.SR.tcPropertyCannotBeSet1 nm,mItem))
8207
8207
let afterTcOverloadResolution = afterOverloadResolution |> AfterTcOverloadResolution.ForProperties nm SettersOfPropInfos
8208
8208
// 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
8210
8210
| _ ->
8211
8211
// Static Property Get (possibly indexer)
8212
8212
let meths = pinfos |> GettersOfPropInfos
8213
8213
let afterTcOverloadResolution = afterOverloadResolution |> AfterTcOverloadResolution.ForProperties nm GettersOfPropInfos
8214
8214
if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable(nm),mItem))
8215
8215
// 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
8217
8217
8218
8218
| Item.ILField finfo ->
8219
8219
@@ -8345,14 +8345,14 @@ and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId dela
8345
8345
8346
8346
#if EXTENSIONTYPING
8347
8347
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
8349
8349
| None ->
8350
8350
#endif
8351
8351
8352
8352
let tyargsOpt,tpenv = TcMemberTyArgsOpt cenv env tpenv tyargsOpt
8353
8353
let meths = minfos |> List.map (fun minfo -> minfo,None)
8354
8354
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
8356
8356
8357
8357
| Item.Property (nm,pinfos) ->
8358
8358
// Instance property
@@ -8377,13 +8377,13 @@ and TcLookupThen cenv overallTy env tpenv mObjExpr objExpr objExprTy longId dela
8377
8377
if isNil meths then error (Error (FSComp.SR.tcPropertyCannotBeSet1 nm,mItem))
8378
8378
let afterTcOverloadResolution = afterOverloadResolution |> AfterTcOverloadResolution.ForProperties nm SettersOfPropInfos
8379
8379
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 []
8381
8381
| _ ->
8382
8382
// Instance property getter
8383
8383
let meths = GettersOfPropInfos pinfos
8384
8384
if isNil meths then error (Error (FSComp.SR.tcPropertyIsNotReadable(nm),mItem))
8385
8385
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
8387
8387
8388
8388
| Item.RecdField rfinfo ->
8389
8389
// Get or set instance F# field or literal
@@ -8488,6 +8488,7 @@ and TcMethodApplicationThen
8488
8488
env
8489
8489
overallTy // The type of the overall expression including "delayed". THe method "application" may actually be a use of a member as
8490
8490
// a first-class function value, when this would be a function type.
8491
+ objTyOpt // methodType
8491
8492
tpenv
8492
8493
callerTyArgs // The return type of the overall expression including "delayed"
8493
8494
objArgs // The 'obj' arguments in obj.M(...) and obj.M, if any
@@ -8514,7 +8515,7 @@ and TcMethodApplicationThen
8514
8515
8515
8516
// Call the helper below to do the real checking
8516
8517
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
8518
8519
8519
8520
// Give errors if some things couldn't be assigned
8520
8521
if nonNil attributeAssignedNamedItems then
@@ -8545,6 +8546,7 @@ and TcMethodApplication
8545
8546
mMethExpr // range of the entire method expression
8546
8547
mItem
8547
8548
methodName
8549
+ (objTyOpt : TType option)
8548
8550
ad
8549
8551
mut
8550
8552
isProp
@@ -8741,7 +8743,7 @@ and TcMethodApplication
8741
8743
| Some tyargs -> minfo.AdjustUserTypeInstForFSharpStyleIndexedExtensionMembers(tyargs)
8742
8744
| None -> minst
8743
8745
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 )
8745
8747
8746
8748
let preArgumentTypeCheckingCalledMethGroup =
8747
8749
[ for (minfo,pinfoOpt) in candidateMethsAndProps do
@@ -8834,7 +8836,7 @@ and TcMethodApplication
8834
8836
| Some tyargs -> minfo.AdjustUserTypeInstForFSharpStyleIndexedExtensionMembers(tyargs)
8835
8837
| None -> minst
8836
8838
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 ))
8838
8840
8839
8841
let callerArgCounts = (unnamedCurriedCallerArgs.Length, namedCurriedCallerArgs.Length)
8840
8842
let csenv = MakeConstraintSolverEnv cenv.css mMethExpr denv
@@ -9713,7 +9715,7 @@ and TcAttribute cenv (env: TcEnv) attrTgt (synAttr: SynAttribute) =
9713
9715
let meths = minfos |> List.map (fun minfo -> minfo,None)
9714
9716
let afterTcOverloadResolution = AfterTcOverloadResolution.ForNewConstructors cenv.tcSink env tyid.idRange methodName minfos
9715
9717
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 ()) []
9717
9719
9718
9720
UnifyTypes cenv env mAttr ty (tyOfExpr cenv.g expr)
9719
9721
0 commit comments