Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
fsharp
提交
d90e7280
F
fsharp
项目概览
dotNET Platform
/
fsharp
11 个月 前同步成功
通知
0
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
fsharp
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
d90e7280
编写于
6月 02, 2017
作者:
S
Steffen Forkmann
提交者:
Kevin Ransom (msft)
6月 02, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fixes #3170 (#3173)
* cleanup * Fixes #3170 * Adding a test
上级
b138f65a
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
30 addition
and
10 deletion
+30
-10
src/fsharp/TypeChecker.fs
src/fsharp/TypeChecker.fs
+9
-10
tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/InferenceForLambdaArgs.fs
...rDefinitions/OverloadingMembers/InferenceForLambdaArgs.fs
+19
-0
tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/env.lst
...tionElements/MemberDefinitions/OverloadingMembers/env.lst
+2
-0
未找到文件。
src/fsharp/TypeChecker.fs
浏览文件 @
d90e7280
...
...
@@ -9931,7 +9931,7 @@ and TcMethodApplication
and TcUnnamedMethodArgs cenv env lambdaPropagationInfo tpenv args =
List.mapiFoldSquared (TcUnnamedMethodArg cenv env) (lambdaPropagationInfo,tpenv) args
and TcUnnamedMethodArg
cenv env (lambdaPropagationInfo,tpenv) (i,j,CallerArg(argTy,mArg,isOpt,argExpr)) =
and TcUnnamedMethodArg cenv env (lambdaPropagationInfo,tpenv) (i,j,CallerArg(argTy,mArg,isOpt,argExpr)) =
// Try to find the lambda propagation info for the corresponding unnamed argument at this position
let lambdaPropagationInfoForArg =
[| for (unnamedInfo,_) in lambdaPropagationInfo ->
...
...
@@ -9958,14 +9958,14 @@ and TcMethodArg cenv env (lambdaPropagationInfo,tpenv) (lambdaPropagationInfoF
// Apply the F# 3.1 rule for extracting information for lambdas
//
// 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
begin
if lambdaPropagationInfoForArg.Length > 0 then
l
et allOverloadsAreFuncOrMismatchForThisArg =
lambdaPropagationInfoForArg |> Array.forall (function ArgDoesNotMatch | CallerLambdaHasArgTypes _ -> true | NoInfo
| CalledArgMatchesType _ -> false)
if allOverloadsAreFuncOrMismatch
ForThisArg then
let overloadsWhichAreFuncAtThisPosition = lambdaPropagationInfoForArg |> Array.choose (function CallerLambdaHasArgTypes r -> Some (List.toArray r) | _ -> None)
if overloadsWhichAreFuncAtThisPosition.Length > 0 then
if lambdaPropagationInfoForArg.Length > 0 then
let allOverloadsAreNotCalledArgMatchesForThisArg =
l
ambdaPropagationInfoForArg
|> Array.forall (function ArgDoesNotMatch | CallerLambdaHasArgTypes _ | NoInfo -> true
| CalledArgMatchesType _ -> false)
if allOverloadsAreNotCalledArgMatches
ForThisArg then
let overloadsWhichAreFuncAtThisPosition = lambdaPropagationInfoForArg |> Array.choose (function CallerLambdaHasArgTypes r -> Some (List.toArray r) | _ -> None)
if overloadsWhichAreFuncAtThisPosition.Length > 0 then
let minFuncArity = overloadsWhichAreFuncAtThisPosition |> Array.minBy Array.length |> Array.length
let prefixOfLambdaArgsForEachOverload = overloadsWhichAreFuncAtThisPosition |> Array.map (Array.take minFuncArity)
...
...
@@ -9987,7 +9987,6 @@ and TcMethodArg cenv env (lambdaPropagationInfo,tpenv) (lambdaPropagationInfoF
loop callerLambdaRangeTy (lambdaVarNum + 1)
| None -> ()
loop argTy 0
end
let e',tpenv = TcExpr cenv argTy env tpenv argExpr
...
...
tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/InferenceForLambdaArgs.fs
0 → 100644
浏览文件 @
d90e7280
// #Conformance #DeclarationElements #MemberDefinitions #Overloading
// inference failed for Linq .ToDictionary(fun,fun) - #3170
open
System
open
System
.
Linq
type
GuidWrapper
=
GuidWrapper
of
Guid
with
member
x
.
Id
=
let
(
GuidWrapper
id
)
=
x
x
let
id
=
Guid
.
NewGuid
()
let
map
=
[
GuidWrapper
id
,
GuidWrapper
id
]
|>
Map
let
y
=
map
.
ToDictionary
((
fun
m
->
m
.
Key
.
Id
),
(
fun
m
->
m
.
Value
.
Id
))
printfn
"%A"
y
exit
0
tests/fsharpqa/Source/Conformance/DeclarationElements/MemberDefinitions/OverloadingMembers/env.lst
浏览文件 @
d90e7280
...
...
@@ -24,6 +24,8 @@ NOMONO,NoMT SOURCE=ConsumeOverloadGenericMethods.fs SCFLAGS="-r:lib.dll" PRECMD=
SOURCE=OperatorOverloading04.fs # OperatorOverloading04.fs
SOURCE=E_OperatorOverloading01.fs SCFLAGS="--test:ErrorRanges" # E_OperatorOverloading01.fs
SOURCE=InferenceForLambdaArgs.fs # InferenceForLambdaArgs.fs
SOURCE=SlowOverloadResolution.fs # SlowOverloadResolution.fs
SOURCE=E_OverloadCurriedFunc.fs # E_OverloadCurriedFunc.fs
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录