Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
fsharp
提交
c4df147c
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,发现更多精彩内容 >>
提交
c4df147c
编写于
4月 06, 2017
作者:
D
Don Syme
提交者:
Kevin Ransom (msft)
4月 06, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix 2661 (#2807)
* fix 2661 * add test
上级
91927083
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
46 addition
and
2 deletion
+46
-2
src/fsharp/TastOps.fs
src/fsharp/TastOps.fs
+17
-2
tests/fsharp/optimize/inline/lib.fs
tests/fsharp/optimize/inline/lib.fs
+27
-0
tests/fsharp/tests.fs
tests/fsharp/tests.fs
+2
-0
未找到文件。
src/fsharp/TastOps.fs
浏览文件 @
c4df147c
...
...
@@ -6444,6 +6444,20 @@ let MultiLambdaToTupledLambda g vs body =
tupledv
,
untupler
body
let
(|
RefTuple
|_|)
expr
=
match
expr
with
|
Expr
.
Op
(
TOp
.
Tuple
(
TupInfo
.
Const
false
),_,
args
,_)
->
Some
args
|
_
->
None
let
MultiLambdaToTupledLambdaIfNeeded
g
(
vs
,
arg
)
body
=
match
vs
,
arg
with
|
[]
,_
->
failwith
"MultiLambdaToTupledLambda: expected some argments"
|
[
v
],_
->
[(
v
,
arg
)],
body
|
vs
,
RefTuple
args
when
args
.
Length
=
vs
.
Length
->
List
.
zip
vs
args
,
body
|
vs
,_
->
let
tupledv
,
untupler
=
untupledToRefTupled
g
vs
[(
tupledv
,
arg
)],
untupler
body
//--------------------------------------------------------------------------
// Beta reduction via let-bindings. Reduce immediate apps. of lambdas to let bindings.
// Includes binding the immediate application of generic
...
...
@@ -6495,8 +6509,9 @@ let rec MakeApplicationAndBetaReduceAux g (f, fty, tyargsl : TType list list, ar
match
tryStripLambdaN
argsl
.
Length
f
with
|
Some
(
argvsl
,
body
)
->
assert
(
argvsl
.
Length
=
argsl
.
Length
)
let
argvs
,
body
=
List
.
mapFoldBack
(
MultiLambdaToTupledLambda
g
)
argvsl
body
mkLetsBind
m
(
mkCompGenBinds
argvs
argsl
)
body
let
pairs
,
body
=
List
.
mapFoldBack
(
MultiLambdaToTupledLambdaIfNeeded
g
)
(
List
.
zip
argvsl
argsl
)
body
let
argvs2
,
args2
=
List
.
unzip
(
List
.
concat
pairs
)
mkLetsBind
m
(
mkCompGenBinds
argvs2
args2
)
body
|
_
->
mkExprApplAux
g
f
fty
argsl
m
...
...
tests/fsharp/optimize/inline/lib.fs
浏览文件 @
c4df147c
...
...
@@ -2,6 +2,8 @@ namespace ThisNamespaceHasToBeTheSame
#
nowarn
"9"
open
System
open
System
.
Runtime
.
InteropServices
[<
Struct
>]
...
...
@@ -131,3 +133,28 @@ do()
[<
System
.
Runtime
.
CompilerServices
.
InternalsVisibleToAttribute
(
"lib3--optimize"
)>]
do
()
[<
NoEquality
;
NoComparison
>]
[<
Struct
>]
type
StructInt32
=
val
mutable
Value
:
int32
new
(
value
)
=
{
Value
=
value
}
static
member
Write
(
value
,
x
:
StructInt32
byref
)
=
x
.
Value
<-
value
;
static
member
inline
InlineWrite
(
value
,
x
:
StructInt32
byref
)
=
x
.
Value
<-
value
;
module
PeverifyTest
=
// The test here is simply to peverify the code
let
``StaticWriteResultANewValue``
()
=
let
mutable
v
=
StructInt32
(
3
);
StructInt32
.
Write
(
2
,
&
v
);
let
result
=
v
.
Value
(
2
,
result
)
// The test here is simply to peverify the code
let
``StaticInlineWriteResultANewValue``
()
=
let
mutable
v
=
StructInt32
(
3
)
StructInt32
.
InlineWrite
(
2
,
&
v
)
let
result
=
v
.
Value
(
2
,
result
)
tests/fsharp/tests.fs
浏览文件 @
c4df147c
...
...
@@ -1586,6 +1586,8 @@ module OptimizationTests =
fsc
cfg
"%s -g --optimize- --target:library -o:lib.dll"
cfg
.
fsc_flags
[
"lib.fs"
;
"lib2.fs"
]
peverify
cfg
"lib.dll "
fsc
cfg
"%s -g --optimize- --target:library -o:lib3.dll -r:lib.dll "
cfg
.
fsc_flags
[
"lib3.fs"
]
fsc
cfg
"%s -g --optimize- -o:test.exe -r:lib.dll -r:lib3.dll"
cfg
.
fsc_flags
[
"test.fs "
]
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录