Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitd90e728

Browse files
forkiKevinRansom
authored andcommitted
Fixes #3170 (#3173)
* cleanup* Fixes #3170* Adding a test
1 parentb138f65 commitd90e728

File tree

3 files changed

+30
-10
lines changed

3 files changed

+30
-10
lines changed

‎src/fsharp/TypeChecker.fs‎

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -9931,7 +9931,7 @@ and TcMethodApplication
99319931
and TcUnnamedMethodArgs cenv env lambdaPropagationInfo tpenv args =
99329932
List.mapiFoldSquared (TcUnnamedMethodArg cenv env) (lambdaPropagationInfo,tpenv) args
99339933

9934-
and TcUnnamedMethodArgcenv env (lambdaPropagationInfo,tpenv) (i,j,CallerArg(argTy,mArg,isOpt,argExpr)) =
9934+
and TcUnnamedMethodArg cenv env (lambdaPropagationInfo,tpenv) (i,j,CallerArg(argTy,mArg,isOpt,argExpr)) =
99359935
// Try to find the lambda propagation info for the corresponding unnamed argument at this position
99369936
let lambdaPropagationInfoForArg =
99379937
[| for (unnamedInfo,_) in lambdaPropagationInfo ->
@@ -9958,14 +9958,14 @@ and TcMethodArg cenv env (lambdaPropagationInfo,tpenv) (lambdaPropagationInfoF
99589958
// Apply the F# 3.1 rule for extracting information for lambdas
99599959
//
99609960
// Before we check the argument, check to see if we can propagate info from a called lambda expression into the arguments of a received lambda
9961-
begin
9962-
if lambdaPropagationInfoForArg.Length > 0 then
9963-
let allOverloadsAreFuncOrMismatchForThisArg =
9964-
lambdaPropagationInfoForArg|> Array.forall (function ArgDoesNotMatch | CallerLambdaHasArgTypes _ -> true | NoInfo | CalledArgMatchesType _ -> false)
9965-
9966-
ifallOverloadsAreFuncOrMismatchForThisArg then
9967-
let overloadsWhichAreFuncAtThisPosition = lambdaPropagationInfoForArg |> Array.choose (function CallerLambdaHasArgTypes r -> Some (List.toArray r) | _ -> None)
9968-
if overloadsWhichAreFuncAtThisPosition.Length > 0 then
9961+
if lambdaPropagationInfoForArg.Length > 0 then
9962+
let allOverloadsAreNotCalledArgMatchesForThisArg =
9963+
lambdaPropagationInfoForArg
9964+
|> Array.forall (function ArgDoesNotMatch | CallerLambdaHasArgTypes _| NoInfo-> true | CalledArgMatchesType _ -> false)
9965+
9966+
ifallOverloadsAreNotCalledArgMatchesForThisArg then
9967+
let overloadsWhichAreFuncAtThisPosition = lambdaPropagationInfoForArg |> Array.choose (function CallerLambdaHasArgTypes r -> Some (List.toArray r) | _ -> None)
9968+
if overloadsWhichAreFuncAtThisPosition.Length > 0 then
99699969
let minFuncArity = overloadsWhichAreFuncAtThisPosition |> Array.minBy Array.length |> Array.length
99709970
let prefixOfLambdaArgsForEachOverload = overloadsWhichAreFuncAtThisPosition |> Array.map (Array.take minFuncArity)
99719971

@@ -9987,7 +9987,6 @@ and TcMethodArg cenv env (lambdaPropagationInfo,tpenv) (lambdaPropagationInfoF
99879987
loop callerLambdaRangeTy (lambdaVarNum + 1)
99889988
| None -> ()
99899989
loop argTy 0
9990-
end
99919990

99929991
let e',tpenv = TcExpr cenv argTy env tpenv argExpr
99939992

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// #Conformance #DeclarationElements #MemberDefinitions #Overloading
2+
// inference failed for Linq .ToDictionary(fun,fun) - #3170
3+
4+
openSystem
5+
openSystem.Linq
6+
7+
typeGuidWrapper= GuidWrapperofGuid
8+
withmemberx.Id=
9+
let(GuidWrapper id)= x
10+
x
11+
12+
letid= Guid.NewGuid()
13+
letmap=[GuidWrapper id, GuidWrapper id]|> Map
14+
15+
lety= map.ToDictionary((fun m-> m.Key.Id),(fun m-> m.Value.Id))
16+
17+
printfn"%A" y
18+
19+
exit0

‎tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/env.lst‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ NOMONO,NoMTSOURCE=ConsumeOverloadGenericMethods.fs SCFLAGS="-r:lib.dll" PRECMD=
2424
SOURCE=OperatorOverloading04.fs# OperatorOverloading04.fs
2525
SOURCE=E_OperatorOverloading01.fs SCFLAGS="--test:ErrorRanges"# E_OperatorOverloading01.fs
2626

27+
SOURCE=InferenceForLambdaArgs.fs# InferenceForLambdaArgs.fs
28+
2729
SOURCE=SlowOverloadResolution.fs# SlowOverloadResolution.fs
2830

2931
SOURCE=E_OverloadCurriedFunc.fs# E_OverloadCurriedFunc.fs

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp