Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
96 commits
Select commit Hold shift + click to select a range
1f68b17
migrate (as a separate copy) fsharpqa tests that are going to be impa…
smoothdeveloper Apr 30, 2019
d0630a3
update the .bsl files
smoothdeveloper Apr 30, 2019
c01329f
remove comments that are handled by baseline files, update baseline f…
smoothdeveloper Apr 30, 2019
56fbe7a
remove the migrated tests from fsharpqa tests
smoothdeveloper Apr 30, 2019
632f8ee
need to be more careful when migrating those
smoothdeveloper Apr 30, 2019
bcd4068
testing if running the test with .fs instead of .fsx makes them work …
smoothdeveloper Apr 30, 2019
55bc729
exclude migrated fsharpqa from dotnet core run
smoothdeveloper Apr 30, 2019
823c53a
sample test in fsharpqa (can't run locally for now)
smoothdeveloper Apr 20, 2019
9671f33
trying to make it green now.
smoothdeveloper Apr 21, 2019
2eb3b56
checking if this path is covered by a test, trying to identify how to…
smoothdeveloper Apr 21, 2019
7781572
* [MethodCalls.fs] Defining CallerArgs<'T> in, this replaces passing …
smoothdeveloper Apr 22, 2019
81ef5f2
bit of refactoring of error message building logic during failed over…
smoothdeveloper Apr 23, 2019
69cbc05
(buildfix) harmonizing .fsi/.fs right before commit doesn't always wo…
smoothdeveloper Apr 23, 2019
9f47fee
trying to check what kind of things break loose when I change this
smoothdeveloper Apr 24, 2019
41b219c
(minor) [ConstraintSolver.fs] revert space mishapps to reduce diff, p…
smoothdeveloper Apr 24, 2019
7f73826
toward displaying the argument names properly (may fail some fsharpqa…
smoothdeveloper Apr 24, 2019
0904de6
missing Resharper's Ctrl+Alt+V "introduce variable" refactoring @audu…
smoothdeveloper Apr 24, 2019
f1eadef
pretty print unresolved overloads without all the type submsumption p…
smoothdeveloper Apr 25, 2019
9eb633a
Overload resolution error messages: things display like I want in fsi…
smoothdeveloper Apr 25, 2019
b49d285
adjust message for candidates overload
smoothdeveloper Apr 26, 2019
6aaf2dd
Hijack the split phase for UnresolvedOverloading, remove the match on…
smoothdeveloper Apr 29, 2019
f66e082
updating existing failing baseline files that looks correct to me
smoothdeveloper Apr 29, 2019
3f03717
quickfix for update.base.line.with.actuals.fsx so that it skips missi…
smoothdeveloper Apr 29, 2019
389a804
(minor) minimize diff, typos, comments
smoothdeveloper Apr 30, 2019
dbe7a37
fix vsintegration tests affected by overload error message changes
smoothdeveloper Apr 30, 2019
f8e7428
merge issue unused variable warning
smoothdeveloper Apr 30, 2019
c51e25c
update the 12 fsharpqa migrated baseline with new error messages
smoothdeveloper Apr 30, 2019
41f57e1
(minor) baseline update script
smoothdeveloper Apr 30, 2019
51e3a0e
move System.Convert.ToString and System.Threading.Tasks.Task.Run test…
smoothdeveloper Apr 30, 2019
76c9c59
* moving 3 fsharpqa tests to new test suite
smoothdeveloper May 2, 2019
b00175f
consolidate all string building logic in CompileOps.fs, fix remaining…
smoothdeveloper May 2, 2019
e64f4f6
update base lines
smoothdeveloper May 2, 2019
db5df8d
remove the migrated tests from fsharpqa
smoothdeveloper May 2, 2019
dce9b92
fix vstest error message
smoothdeveloper May 2, 2019
36b6a13
fix env.lst, removed wrong one...
smoothdeveloper May 2, 2019
bf4ee09
update baselines of remaining tests
smoothdeveloper May 2, 2019
f45a218
adding one simple test with many overloads
smoothdeveloper May 2, 2019
ce65f30
appropriate /// comments on `CalledMeth` constructor arguments
smoothdeveloper May 2, 2019
372a375
minimize diff / formatting
smoothdeveloper May 2, 2019
db26509
trim unused code
smoothdeveloper May 2, 2019
46174af
add simple test, one message is interesting, mentioning parameter cou…
smoothdeveloper May 3, 2019
c2120f6
comment flaky test for now
smoothdeveloper May 3, 2019
ec6089c
code review on the `coerceExpr` function from @tihan, we can discard …
smoothdeveloper May 8, 2019
4f51ad4
code formatting remarks on ConstraintSolver.fs/fsi
smoothdeveloper May 14, 2019
2d27e63
(minor) formatting
smoothdeveloper May 14, 2019
28f46ca
format known argument type / updating .bsl
smoothdeveloper May 16, 2019
20abb54
update missing baseline
smoothdeveloper May 16, 2019
c5de0ac
update missing baselines
smoothdeveloper May 16, 2019
e08db81
update missing baseline
smoothdeveloper May 16, 2019
628d8bc
minor: make TTrait better in debugger display
smoothdeveloper Aug 24, 2019
e2bc962
[wip] pass TraitConstraintInfo around failed overload resolution erro…
smoothdeveloper Aug 24, 2019
4f70822
minimize diff
smoothdeveloper Aug 27, 2019
138267f
signature file mismatch
smoothdeveloper Aug 27, 2019
ebf60fa
removing duplicate in fscomp.txt
smoothdeveloper Dec 27, 2019
20a4cff
surfacing initial bits of TraitConstraintInfo, roughly for now
smoothdeveloper Dec 27, 2019
5bb714a
formatting types of known argument in one go, the formatting is still…
smoothdeveloper Jan 12, 2020
59f82b1
rework of overload failure message to prettify *ALL* types in a singl…
smoothdeveloper Jan 15, 2020
7b8fdfc
fixup the tests and add two tests
smoothdeveloper Jan 15, 2020
a956bce
updating baselines that got tighter.
smoothdeveloper Jan 16, 2020
8b102a0
simplify handling of TraitConstraintInfo
smoothdeveloper Jan 16, 2020
8543f80
naming couple of fields and turning a property to a methods as it tri…
smoothdeveloper Jan 17, 2020
c5739e7
comments in the assembling of overload resolution error message
smoothdeveloper Jan 17, 2020
ade30f5
Add information about which argument doesn't match
smoothdeveloper Jan 19, 2020
207a584
minor updates to testguide and devguide
smoothdeveloper Jan 19, 2020
7ca85af
fix PrimitiveConstraints.``Invalid object constructor`` test
smoothdeveloper Jan 19, 2020
723a293
fix(?) salsa tests
smoothdeveloper Jan 19, 2020
f0be1bb
minimize diff
smoothdeveloper Jan 19, 2020
373f0f3
put back tests under !FSHARP_SUITE_DRIVES_CORECLR_TESTS
smoothdeveloper Jan 19, 2020
4c7d525
missing updated message
smoothdeveloper Jan 19, 2020
5408e4f
minor adjustments to TESTGUIDE.md
smoothdeveloper Jan 19, 2020
e8dc47b
return type was missing prettifying in prettyLayoutsOfUnresolvedOverl…
smoothdeveloper Jan 19, 2020
99097a6
address code review nits / minimize diff / add comment on PrettifyDis…
smoothdeveloper Jan 22, 2020
99c1230
minimize diff
smoothdeveloper Jan 22, 2020
9f20d8f
proposed work around the flaky error message until https://github.com…
smoothdeveloper Jan 22, 2020
45be9dc
fixing baselines of new tests from master
smoothdeveloper Jan 22, 2020
18cbe3c
sisyphus round of baseline update
smoothdeveloper Jan 22, 2020
c7d8b13
removing type which isn't in use and popped back up after rebase
smoothdeveloper Jan 22, 2020
209cc6c
minimize diff
smoothdeveloper Jan 23, 2020
1f17d51
tidy inconsistent tuple literal
smoothdeveloper Jan 23, 2020
90defce
* removing TTrait properties that end up not being used
smoothdeveloper Jan 23, 2020
d99015f
minimize diff
smoothdeveloper Jan 23, 2020
3176d37
minimize diff
smoothdeveloper Jan 23, 2020
97ebec3
minimize diff
smoothdeveloper Jan 23, 2020
61478c2
link to usage example in same file
smoothdeveloper Jan 24, 2020
304f505
revert converting CallerArg single cased DU into Record
smoothdeveloper Jan 29, 2020
4352bad
minimize diff
smoothdeveloper Jan 29, 2020
f18a205
minimize diff
smoothdeveloper Jan 29, 2020
7cf610d
minimize diff
smoothdeveloper Jan 29, 2020
5eff584
fix rebase glitches
smoothdeveloper Feb 15, 2020
0d99fef
fix rebase glitch
smoothdeveloper Feb 15, 2020
95fe837
update baseline
smoothdeveloper Feb 15, 2020
4141681
fix base lines / new tests base lines
smoothdeveloper Feb 15, 2020
3042bda
edge case: needs a new line after "A unique overload for method '%s' …
smoothdeveloper Feb 15, 2020
e03f680
updating base line for edge case of missing new line
smoothdeveloper Feb 15, 2020
1b0530d
missing baseline
smoothdeveloper Feb 15, 2020
9ab9ea9
removing comment
smoothdeveloper Feb 18, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
* [MethodCalls.fs] Defining CallerArgs<'T> in, this replaces passing …
…of callerArgsCount, uncurriedCallerArgs and other variants in the overload resolution logic happening in ConstraintSolver & TypeChecker

* [TypeChecker.fs] pass CallerArgs instace at call sites for overload resolution + some commented code as we'll be building a list of given argument types (probably moving as a CallerArgs method or property)
* [ConstraintSolver.fs/fsi] pipe the overload resolution traced callback to `trace.CollectThenUndoOrCommit` as that expression is long and more important in that context
  • Loading branch information
smoothdeveloper committed Feb 15, 2020
commit 77815725debf5031ead06d0f14191beab898df23
36 changes: 19 additions & 17 deletions src/fsharp/ConstraintSolver.fs
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ exception ConstraintSolverInfiniteTypes of displayEnv: DisplayEnv * contextInfo:

exception ConstraintSolverTypesNotInEqualityRelation of displayEnv: DisplayEnv * TType * TType * range * range * ContextInfo

exception ConstraintSolverTypesNotInSubsumptionRelation of displayEnv: DisplayEnv * TType * TType * range * range
exception ConstraintSolverTypesNotInSubsumptionRelation of displayEnv: DisplayEnv * argT: TType * paramT: TType * range * range

exception ConstraintSolverMissingConstraint of displayEnv: DisplayEnv * Tast.Typar * Tast.TyparConstraint * range * range

Expand Down Expand Up @@ -1520,15 +1520,17 @@ and SolveMemberConstraint (csenv: ConstraintSolverEnv) ignoreUnresolvedOverload
// curried members may not be used to satisfy constraints
|> List.choose (fun minfo ->
if minfo.IsCurried then None else
let callerArgs = argtys |> List.map (fun argty -> CallerArg(argty, m, false, dummyExpr))
let callerArgs =
{ Unnamed = List.singleton (argtys |> List.map (fun argty -> CallerArg(argty, m, false, dummyExpr)))
Named = List.singleton List.empty }
let minst = FreshenMethInfo m minfo
let objtys = minfo.GetObjArgTypes(amap, m, minst)
Some(CalledMeth<Expr>(csenv.InfoReader, None, false, FreshenMethInfo, m, AccessibleFromEverywhere, minfo, minst, minst, None, objtys, [(callerArgs, [])], false, false, None)))
Some(CalledMeth<Expr>(csenv.InfoReader, None, false, FreshenMethInfo, m, AccessibleFromEverywhere, minfo, minst, minst, None, objtys, callerArgs, false, false, None)))

let methOverloadResult, errors =
trace.CollectThenUndoOrCommit
(fun (a, _) -> Option.isSome a)
(fun trace -> ResolveOverloading csenv (WithTrace trace) nm ndeep (Some traitInfo) (0, 0) AccessibleFromEverywhere calledMethGroup false (Some rty))
(fun trace -> ResolveOverloading csenv (WithTrace trace) nm ndeep (Some traitInfo) CallerArgs.Empty AccessibleFromEverywhere calledMethGroup false (Some rty))

match anonRecdPropSearch, recdPropSearch, methOverloadResult with
| Some (anonInfo, tinst, i), None, None ->
Expand Down Expand Up @@ -2444,15 +2446,15 @@ and ReportNoCandidatesErrorSynExpr csenv callerArgCounts methodName ad calledMet
// This is used after analyzing the types of arguments
and ResolveOverloading
(csenv: ConstraintSolverEnv)
trace // The undo trace, if any
methodName // The name of the method being called, for error reporting
ndeep // Depth of inference
cx // We're doing overload resolution as part of constraint solving, where special rules apply for op_Explicit and op_Implicit constraints.
callerArgCounts // How many named/unnamed args id the caller provide?
ad // The access domain of the caller, e.g. a module, type etc.
calledMethGroup // The set of methods being called
permitOptArgs // Can we supply optional arguments?
reqdRetTyOpt // The expected return type, if known
trace // The undo trace, if any
methodName // The name of the method being called, for error reporting
ndeep // Depth of inference
cx // We're doing overload resolution as part of constraint solving, where special rules apply for op_Explicit and op_Implicit constraints.
(callerArgs: CallerArgs<Expr>)
ad // The access domain of the caller, e.g. a module, type etc.
calledMethGroup // The set of methods being called
permitOptArgs // Can we supply optional arguments?
reqdRetTyOpt // The expected return type, if known
=
let g = csenv.g
let amap = csenv.amap
Expand All @@ -2471,7 +2473,7 @@ and ResolveOverloading
None, ErrorD (Error (FSComp.SR.csMethodNotFound(methodName), m)), NoTrace

| _, [] when not isOpConversion ->
None, ReportNoCandidatesErrorExpr csenv callerArgCounts methodName ad calledMethGroup, NoTrace
None, ReportNoCandidatesErrorExpr csenv callerArgs.CallerArgCounts methodName ad calledMethGroup, NoTrace

| _, _ ->

Expand Down Expand Up @@ -2745,7 +2747,7 @@ and ResolveOverloading
let msg =
match methodNames with
| [] -> msg
| names -> sprintf "%s %s" msg (sprintf "fooo %s" (String.concat ", " names)) // FSComp.SR.csCandidates (String.concat ", " names))
| names -> sprintf "%s %s" msg (FSComp.SR.csCandidates (String.concat System.Environment.NewLine names)) // FSComp.SR.csCandidates (String.concat ", " names))
None, ErrorD (failOverloading msg []), NoTrace

// If we've got a candidate solution: make the final checks - no undo here!
Expand Down Expand Up @@ -2790,9 +2792,9 @@ and ResolveOverloading
| None ->
None, errors

let ResolveOverloadingForCall denv css m methodName ndeep cx callerArgCounts ad calledMethGroup permitOptArgs reqdRetTyOpt =
let ResolveOverloadingForCall denv css m methodName ndeep cx callerArgs ad calledMethGroup permitOptArgs reqdRetTyOpt =
let csenv = MakeConstraintSolverEnv ContextInfo.NoContext css m denv
ResolveOverloading csenv NoTrace methodName ndeep cx callerArgCounts ad calledMethGroup permitOptArgs reqdRetTyOpt
ResolveOverloading csenv NoTrace methodName ndeep cx callerArgs ad calledMethGroup permitOptArgs reqdRetTyOpt

/// This is used before analyzing the types of arguments in a single overload resolution
let UnifyUniqueOverloading
Expand Down
6 changes: 3 additions & 3 deletions src/fsharp/ConstraintSolver.fsi
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ type ContextInfo =
exception ConstraintSolverTupleDiffLengths of displayEnv: DisplayEnv * TType list * TType list * range * range
exception ConstraintSolverInfiniteTypes of displayEnv: DisplayEnv * contextInfo: ContextInfo * TType * TType * range * range
exception ConstraintSolverTypesNotInEqualityRelation of displayEnv: DisplayEnv * TType * TType * range * range * ContextInfo
exception ConstraintSolverTypesNotInSubsumptionRelation of displayEnv: DisplayEnv * TType * TType * range * range
exception ConstraintSolverTypesNotInSubsumptionRelation of displayEnv: DisplayEnv * argT: TType * paramT: TType * range * range
exception ConstraintSolverMissingConstraint of displayEnv: DisplayEnv * Typar * TyparConstraint * range * range
exception ConstraintSolverError of string * range * range
exception ConstraintSolverRelatedInformation of string option * range * exn
Expand Down Expand Up @@ -125,7 +125,7 @@ type OptionalTrace =

val SimplifyMeasuresInTypeScheme: TcGlobals -> bool -> Typars -> TType -> TyparConstraint list -> Typars

val ResolveOverloadingForCall: DisplayEnv -> ConstraintSolverState -> range -> string -> ndeep: int -> TraitConstraintInfo option -> int * int -> AccessorDomain -> CalledMeth<Expr> list -> bool -> TType option -> CalledMeth<Expr> option * OperationResult<unit>
val ResolveOverloadingForCall: DisplayEnv -> ConstraintSolverState -> range -> methodName: string -> ndeep: int -> cx: TraitConstraintInfo option -> callerArgs: CallerArgs<Expr> -> AccessorDomain -> calledMethGroup: CalledMeth<Expr> list -> permitOptArgs: bool -> reqdRetTyOpt: TType option -> CalledMeth<Expr> option * OperationResult<unit>

val UnifyUniqueOverloading: DisplayEnv -> ConstraintSolverState -> range -> int * int -> string -> AccessorDomain -> CalledMeth<SynExpr> list -> TType -> OperationResult<bool>

Expand Down Expand Up @@ -180,4 +180,4 @@ val ChooseTyparSolutionAndSolve: ConstraintSolverState -> DisplayEnv -> Typar ->

val IsApplicableMethApprox: TcGlobals -> ImportMap -> range -> MethInfo -> TType -> bool

val CanonicalizePartialInferenceProblem: ConstraintSolverState -> DisplayEnv -> range -> Typars -> unit
val CanonicalizePartialInferenceProblem: ConstraintSolverState -> DisplayEnv -> range -> Typars -> unit
35 changes: 23 additions & 12 deletions src/fsharp/MethodCalls.fs
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,16 @@ type CallerNamedArg<'T> =

member x.CallerArg = (let (CallerNamedArg(_, a)) = x in a)

/// Represents the list of unnamed / named arguments at method call site
// todo: figure out / document why we are using list�
[<Struct>]
type CallerArgs<'T> =
{ Unnamed: CallerArg<'T> list list
Named: CallerNamedArg<'T> list list }
with
static member Empty : CallerArgs<'T> = { Unnamed = List.empty; Named = List.empty }
member x.CallerArgCounts = (List.length x.Unnamed, List.length x.Named)
member x.CurriedCallerArgs = List.zip x.Unnamed x.Named
//-------------------------------------------------------------------------
// Callsite conversions
//-------------------------------------------------------------------------
Expand Down Expand Up @@ -303,27 +313,28 @@ type CalledMeth<'T>
(infoReader: InfoReader,
nameEnv: NameResolutionEnv option,
isCheckingAttributeCall,
freshenMethInfo, // a function to help generate fresh type variables the property setters methods in generic classes
m,
ad, // the access domain of the place where the call is taking place
minfo: MethInfo, // the method we're attempting to call
calledTyArgs, // the 'called type arguments', i.e. the fresh generic instantiation of the method we're attempting to call
callerTyArgs: TType list, // the 'caller type arguments', i.e. user-given generic instantiation of the method we're attempting to call
freshenMethInfo, // a function to help generate fresh type variables the property setters methods in generic classes
m, // range
ad, // the access domain of the place where the call is taking place
minfo: MethInfo, // the method we're attempting to call
calledTyArgs, // the 'called type arguments', i.e. the fresh generic instantiation of the method we're attempting to call
callerTyArgs: TType list, // the 'caller type arguments', i.e. user-given generic instantiation of the method we're attempting to call
pinfoOpt: PropInfo option, // the property related to the method we're attempting to call, if any
callerObjArgTys: TType list, // the types of the actual object argument, if any
curriedCallerArgs: (CallerArg<'T> list * CallerNamedArg<'T> list) list, // the data about any arguments supplied by the caller
allowParamArgs: bool, // do we allow the use of a param args method in its "expanded" form?
allowOutAndOptArgs: bool, // do we allow the use of the transformation that converts out arguments as tuple returns?
callerObjArgTys: TType list, // the types of the actual object argument, if any
callerArgs: CallerArgs<'T>, // the data about any arguments supplied by the caller
allowParamArgs: bool, // do we allow the use of a param args method in its "expanded" form?
allowOutAndOptArgs: bool, // do we allow the use of the transformation that converts out arguments as tuple returns?
tyargsOpt : TType option) // method parameters
=
let g = infoReader.g
let methodRetTy = minfo.GetFSharpReturnTy(infoReader.amap, m, calledTyArgs)

let fullCurriedCalledArgs = MakeCalledArgs infoReader.amap m minfo calledTyArgs
do assert (fullCurriedCalledArgs.Length = fullCurriedCalledArgs.Length)

let argSetInfos =
(curriedCallerArgs, fullCurriedCalledArgs) ||> List.map2 (fun (unnamedCallerArgs, namedCallerArgs) fullCalledArgs ->
(callerArgs.CurriedCallerArgs, fullCurriedCalledArgs)
||> List.map2 (fun (unnamedCallerArgs, namedCallerArgs) fullCalledArgs ->
// Find the arguments not given by name
let unnamedCalledArgs =
fullCalledArgs |> List.filter (fun calledArg ->
Expand Down
14 changes: 8 additions & 6 deletions src/fsharp/TypeChecker.fs
Original file line number Diff line number Diff line change
Expand Up @@ -10283,7 +10283,7 @@ and TcMethodApplication

let callerArgCounts = (List.sumBy List.length unnamedCurriedCallerArgs, List.sumBy List.length namedCurriedCallerArgs)

let callerArgs = List.zip unnamedCurriedCallerArgs namedCurriedCallerArgs
let callerArgs = { Unnamed = unnamedCurriedCallerArgs; Named = namedCurriedCallerArgs }

let makeOneCalledMeth (minfo, pinfoOpt, usesParamArrayConversion) =
let minst = FreshenMethInfo mItem minfo
Expand Down Expand Up @@ -10382,8 +10382,12 @@ and TcMethodApplication
/// Select the called method that's the result of overload resolution
let finalCalledMeth =

let callerArgs = List.zip unnamedCurriedCallerArgs namedCurriedCallerArgs

let callerArgs = { Unnamed = unnamedCurriedCallerArgs ; Named = namedCurriedCallerArgs }
//let argumentTypesWithNames = [
// yield! (unnamedCurriedCallerArgs |> List.map (List.map (fun i -> None, i.Type)))
// yield! (namedCurriedCallerArgs |> List.map (List.map (fun i -> Some i.Name, i.CallerArg.Type)))
//]
//printfn "%A" argumentTypesWithNames
let postArgumentTypeCheckingCalledMethGroup =
preArgumentTypeCheckingCalledMethGroup |> List.map (fun (minfo: MethInfo, minst, pinfoOpt, usesParamArrayConversion) ->
let callerTyArgs =
Expand All @@ -10392,16 +10396,14 @@ and TcMethodApplication
| None -> minst
CalledMeth<Expr>(cenv.infoReader, Some(env.NameEnv), isCheckingAttributeCall, FreshenMethInfo, mMethExpr, ad, minfo, minst, callerTyArgs, pinfoOpt, callerObjArgTys, callerArgs, usesParamArrayConversion, true, objTyOpt))

let callerArgCounts = (unnamedCurriedCallerArgs.Length, namedCurriedCallerArgs.Length)

// Commit unassociated constraints prior to member overload resolution where there is ambiguity
// about the possible target of the call.
if not uniquelyResolved then
ConstraintSolver.CanonicalizePartialInferenceProblem cenv.css denv mItem
(//freeInTypeLeftToRight cenv.g false returnTy @
(unnamedCurriedCallerArgs |> List.collectSquared (fun callerArg -> freeInTypeLeftToRight cenv.g false callerArg.CallerArgumentType)))

let result, errors = ResolveOverloadingForCall denv cenv.css mMethExpr methodName 0 None callerArgCounts ad postArgumentTypeCheckingCalledMethGroup true (Some returnTy)
let result, errors = ResolveOverloadingForCall denv cenv.css mMethExpr methodName 0 None callerArgs ad postArgumentTypeCheckingCalledMethGroup true (Some returnTy)

match afterResolution, result with
| AfterResolution.DoNothing, _ -> ()
Expand Down