Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
68ff1979
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
68ff1979
编写于
8月 18, 2017
作者:
A
Andy Gocke
提交者:
GitHub
8月 18, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Respond to PR comments (#21595)
上级
5d5d044e
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
25 addition
and
21 deletion
+25
-21
src/Compilers/CSharp/Portable/Lowering/LambdaRewriter/LambdaRewriter.cs
...CSharp/Portable/Lowering/LambdaRewriter/LambdaRewriter.cs
+25
-21
未找到文件。
src/Compilers/CSharp/Portable/Lowering/LambdaRewriter/LambdaRewriter.cs
浏览文件 @
68ff1979
...
@@ -4,6 +4,7 @@
...
@@ -4,6 +4,7 @@
//#define CHECK_LOCALS // define CHECK_LOCALS to help debug some rewriting problems that would otherwise cause code-gen failures
//#define CHECK_LOCALS // define CHECK_LOCALS to help debug some rewriting problems that would otherwise cause code-gen failures
#endif
#endif
using
System
;
using
System
;
using
System.Collections.Generic
;
using
System.Collections.Generic
;
using
System.Collections.Immutable
;
using
System.Collections.Immutable
;
...
@@ -13,8 +14,6 @@
...
@@ -13,8 +14,6 @@
using
Microsoft.CodeAnalysis.CSharp.Syntax
;
using
Microsoft.CodeAnalysis.CSharp.Syntax
;
using
Microsoft.CodeAnalysis.PooledObjects
;
using
Microsoft.CodeAnalysis.PooledObjects
;
using
Roslyn.Utilities
;
using
Roslyn.Utilities
;
using
System.Linq
;
using
Microsoft.CodeAnalysis.Collections
;
namespace
Microsoft.CodeAnalysis.CSharp
namespace
Microsoft.CodeAnalysis.CSharp
{
{
...
@@ -395,8 +394,6 @@ private void SynthesizeLoweredFunctionMethods()
...
@@ -395,8 +394,6 @@ private void SynthesizeLoweredFunctionMethods()
{
{
var
originalMethod
=
closure
.
OriginalMethodSymbol
;
var
originalMethod
=
closure
.
OriginalMethodSymbol
;
var
syntax
=
originalMethod
.
DeclaringSyntaxReferences
[
0
].
GetSyntax
();
var
syntax
=
originalMethod
.
DeclaringSyntaxReferences
[
0
].
GetSyntax
();
var
structClosures
=
closure
.
CapturedEnvironments
.
Where
(
env
=>
env
.
IsStruct
).
Select
(
env
=>
env
.
SynthesizedEnvironment
).
AsImmutable
();
int
closureOrdinal
;
int
closureOrdinal
;
ClosureKind
closureKind
;
ClosureKind
closureKind
;
...
@@ -404,6 +401,7 @@ private void SynthesizeLoweredFunctionMethods()
...
@@ -404,6 +401,7 @@ private void SynthesizeLoweredFunctionMethods()
SynthesizedClosureEnvironment
containerAsFrame
;
SynthesizedClosureEnvironment
containerAsFrame
;
DebugId
topLevelMethodId
;
DebugId
topLevelMethodId
;
DebugId
lambdaId
;
DebugId
lambdaId
;
if
(
closure
.
ContainingEnvironmentOpt
!=
null
)
if
(
closure
.
ContainingEnvironmentOpt
!=
null
)
{
{
containerAsFrame
=
closure
.
ContainingEnvironmentOpt
?.
SynthesizedEnvironment
;
containerAsFrame
=
closure
.
ContainingEnvironmentOpt
?.
SynthesizedEnvironment
;
...
@@ -419,28 +417,19 @@ private void SynthesizeLoweredFunctionMethods()
...
@@ -419,28 +417,19 @@ private void SynthesizeLoweredFunctionMethods()
closureKind
=
ClosureKind
.
ThisOnly
;
closureKind
=
ClosureKind
.
ThisOnly
;
closureOrdinal
=
LambdaDebugInfo
.
ThisOnlyClosureOrdinal
;
closureOrdinal
=
LambdaDebugInfo
.
ThisOnlyClosureOrdinal
;
}
}
else
if
(
closure
.
CapturedEnvironments
.
Count
==
0
)
else
if
(
closure
.
CapturedEnvironments
.
Count
==
0
&&
_analysis
.
MethodsConvertedToDelegates
.
Contains
(
originalMethod
))
{
{
if
(
_analysis
.
MethodsConvertedToDelegates
.
Contains
(
originalMethod
))
translatedLambdaContainer
=
containerAsFrame
=
GetStaticFrame
(
Diagnostics
,
syntax
);
{
closureKind
=
ClosureKind
.
Singleton
;
translatedLambdaContainer
=
containerAsFrame
=
GetStaticFrame
(
Diagnostics
,
syntax
);
closureOrdinal
=
LambdaDebugInfo
.
StaticClosureOrdinal
;
closureKind
=
ClosureKind
.
Singleton
;
closureOrdinal
=
LambdaDebugInfo
.
StaticClosureOrdinal
;
}
else
{
containerAsFrame
=
null
;
translatedLambdaContainer
=
_topLevelMethod
.
ContainingType
;
closureKind
=
ClosureKind
.
Static
;
closureOrdinal
=
LambdaDebugInfo
.
StaticClosureOrdinal
;
}
}
}
else
else
{
{
// Lower directly onto the containing type
// Lower directly onto the containing type
containerAsFrame
=
null
;
closureKind
=
ClosureKind
.
Static
;
// not exactly... but we've rewritten the receiver to be a by-ref parameter
translatedLambdaContainer
=
_topLevelMethod
.
ContainingType
;
translatedLambdaContainer
=
_topLevelMethod
.
ContainingType
;
containerAsFrame
=
null
;
closureKind
=
ClosureKind
.
Static
;
closureOrdinal
=
LambdaDebugInfo
.
StaticClosureOrdinal
;
closureOrdinal
=
LambdaDebugInfo
.
StaticClosureOrdinal
;
}
}
...
@@ -450,7 +439,7 @@ private void SynthesizeLoweredFunctionMethods()
...
@@ -450,7 +439,7 @@ private void SynthesizeLoweredFunctionMethods()
var
synthesizedMethod
=
new
SynthesizedClosureMethod
(
var
synthesizedMethod
=
new
SynthesizedClosureMethod
(
translatedLambdaContainer
,
translatedLambdaContainer
,
structClosures
,
GetStructClosures
(
closure
)
,
closureKind
,
closureKind
,
_topLevelMethod
,
_topLevelMethod
,
topLevelMethodId
,
topLevelMethodId
,
...
@@ -459,6 +448,21 @@ private void SynthesizeLoweredFunctionMethods()
...
@@ -459,6 +448,21 @@ private void SynthesizeLoweredFunctionMethods()
lambdaId
);
lambdaId
);
closure
.
SynthesizedLoweredMethod
=
synthesizedMethod
;
closure
.
SynthesizedLoweredMethod
=
synthesizedMethod
;
});
});
ImmutableArray
<
SynthesizedClosureEnvironment
>
GetStructClosures
(
Analysis
.
Closure
closure
)
{
var
closuresBuilder
=
ArrayBuilder
<
SynthesizedClosureEnvironment
>.
GetInstance
();
foreach
(
var
env
in
closure
.
CapturedEnvironments
)
{
if
(
env
.
IsStruct
)
{
closuresBuilder
.
Add
(
env
.
SynthesizedEnvironment
);
}
}
return
closuresBuilder
.
ToImmutableAndFree
();
}
}
}
/// <summary>
/// <summary>
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录