Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
5dab35e2
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,发现更多精彩内容 >>
提交
5dab35e2
编写于
8月 10, 2016
作者:
A
AlekseyTs
提交者:
GitHub
8月 10, 2016
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #13079 from AlekseyTs/Restore
Follow-up on some recent changes in C# compiler.
上级
25b9ba1b
1c09e9a3
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
30 addition
and
14 deletion
+30
-14
src/Compilers/CSharp/Portable/Binder/Binder_Query.cs
src/Compilers/CSharp/Portable/Binder/Binder_Query.cs
+1
-1
src/Compilers/CSharp/Portable/Binder/Binder_Statements.cs
src/Compilers/CSharp/Portable/Binder/Binder_Statements.cs
+6
-4
src/Compilers/CSharp/Portable/Binder/ExpressionVariableBinder.cs
...pilers/CSharp/Portable/Binder/ExpressionVariableBinder.cs
+1
-2
src/Compilers/CSharp/Portable/BoundTree/UnboundLambda.cs
src/Compilers/CSharp/Portable/BoundTree/UnboundLambda.cs
+1
-3
src/Compilers/CSharp/Portable/Symbols/Source/SourceLocalSymbol.cs
...ilers/CSharp/Portable/Symbols/Source/SourceLocalSymbol.cs
+21
-4
未找到文件。
src/Compilers/CSharp/Portable/Binder/Binder_Query.cs
浏览文件 @
5dab35e2
...
...
@@ -648,7 +648,7 @@ private UnboundLambda MakeQueryUnboundLambda(RangeVariableMap qvm, ImmutableArra
{
return
MakeQueryUnboundLambda
(
expression
,
new
QueryUnboundLambdaState
(
this
,
qvm
,
parameters
,
(
LambdaSymbol
lambdaSymbol
,
Binder
lambdaBodyBinder
,
DiagnosticBag
diagnostics
)
=>
{
return
lambdaBodyBinder
.
BindLambdaExpressionAsBlock
(
RefKind
.
None
,
expression
,
diagnostics
);
return
lambdaBodyBinder
.
BindLambdaExpressionAsBlock
(
expression
,
diagnostics
);
}));
}
...
...
src/Compilers/CSharp/Portable/Binder/Binder_Statements.cs
浏览文件 @
5dab35e2
...
...
@@ -3661,13 +3661,15 @@ internal BoundBlock CreateBlockFromExpression(CSharpSyntaxNode node, ImmutableAr
/// <summary>
/// Binds a lambda with expression e as either { return e;} or { e; }.
/// </summary>
public
BoundBlock
BindLambdaExpressionAsBlock
(
RefKind
refKind
,
ExpressionSyntax
body
,
DiagnosticBag
diagnostics
)
public
BoundBlock
BindLambdaExpressionAsBlock
(
ExpressionSyntax
body
,
DiagnosticBag
diagnostics
)
{
Binder
bodyBinder
=
this
.
GetBinder
(
refKind
!=
RefKind
.
None
?
body
.
Parent
:
body
);
Binder
bodyBinder
=
this
.
GetBinder
(
body
);
Debug
.
Assert
(
bodyBinder
!=
null
);
BoundExpression
expression
=
bodyBinder
.
BindValue
(
body
,
diagnostics
,
refKind
!=
RefKind
.
None
?
BindValueKind
.
RefReturn
:
BindValueKind
.
RValue
);
return
bodyBinder
.
CreateBlockFromExpression
(
body
,
bodyBinder
.
GetDeclaredLocalsForScope
(
body
),
refKind
,
expression
,
body
,
diagnostics
);
RefKind
refKind
;
var
expressionSyntax
=
((
ExpressionSyntax
)
body
).
SkipRef
(
out
refKind
);
BoundExpression
expression
=
bodyBinder
.
BindValue
(
expressionSyntax
,
diagnostics
,
refKind
!=
RefKind
.
None
?
BindValueKind
.
RefReturn
:
BindValueKind
.
RValue
);
return
bodyBinder
.
CreateBlockFromExpression
(
body
,
bodyBinder
.
GetDeclaredLocalsForScope
(
body
),
refKind
,
expression
,
expressionSyntax
,
diagnostics
);
}
internal
virtual
ImmutableArray
<
LocalSymbol
>
Locals
...
...
src/Compilers/CSharp/Portable/Binder/ExpressionVariableBinder.cs
浏览文件 @
5dab35e2
...
...
@@ -27,8 +27,7 @@ protected override ImmutableArray<LocalSymbol> BuildLocals()
internal
override
ImmutableArray
<
LocalSymbol
>
GetDeclaredLocalsForScope
(
CSharpSyntaxNode
scopeDesignator
)
{
if
(
ScopeDesignator
==
scopeDesignator
||
ScopeDesignator
.
Kind
()
==
SyntaxKind
.
RefExpression
&&
ScopeDesignator
==
scopeDesignator
.
Parent
)
if
(
ScopeDesignator
==
scopeDesignator
)
{
return
this
.
Locals
;
}
...
...
src/Compilers/CSharp/Portable/BoundTree/UnboundLambda.cs
浏览文件 @
5dab35e2
...
...
@@ -890,9 +890,7 @@ protected override BoundBlock BindLambdaBody(LambdaSymbol lambdaSymbol, Binder l
{
if
(
this
.
IsExpressionLambda
)
{
var
refKind
=
CodeAnalysis
.
RefKind
.
None
;
var
body
=
((
ExpressionSyntax
)
this
.
Body
).
SkipRef
(
out
refKind
);
return
lambdaBodyBinder
.
BindLambdaExpressionAsBlock
(
refKind
,
body
,
diagnostics
);
return
lambdaBodyBinder
.
BindLambdaExpressionAsBlock
((
ExpressionSyntax
)
this
.
Body
,
diagnostics
);
}
else
{
...
...
src/Compilers/CSharp/Portable/Symbols/Source/SourceLocalSymbol.cs
浏览文件 @
5dab35e2
...
...
@@ -121,6 +121,17 @@ internal Binder Binder
return
new
LocalWithInitializer
(
containingSymbol
,
binder
,
typeSyntax
,
identifierToken
,
initializer
,
declarationKind
);
}
/// <param name="containingSymbol"></param>
/// <param name="scopeBinder">
/// Binder that owns the scope for the local, the one that returns it in its <see cref="Binder.Locals"/> array.
/// </param>
/// <param name="enclosingBinderOpt">
/// Enclosing binder for the location where the local is declared, if different from the <paramref name="scopeBinder"/>.
/// It should be used to bind something at that location.
/// </param>
/// <param name="typeSyntax"></param>
/// <param name="identifierToken"></param>
/// <param name="context"></param>
public
static
SourceLocalSymbol
MakeOutVariable
(
Symbol
containingSymbol
,
Binder
scopeBinder
,
...
...
@@ -129,7 +140,12 @@ internal Binder Binder
SyntaxToken
identifierToken
,
CSharpSyntaxNode
context
)
{
return
new
OutLocalSymbol
(
containingSymbol
,
scopeBinder
,
enclosingBinderOpt
,
typeSyntax
,
identifierToken
,
context
);
if
(
typeSyntax
.
IsVar
)
{
return
new
PossiblyImplicitlyTypedOutVarLocalSymbol
(
containingSymbol
,
scopeBinder
,
enclosingBinderOpt
,
typeSyntax
,
identifierToken
,
context
);
}
return
new
SourceLocalSymbol
(
containingSymbol
,
scopeBinder
,
false
,
typeSyntax
,
identifierToken
,
LocalDeclarationKind
.
RegularVariable
);
}
internal
override
bool
IsImportedFromMetadata
...
...
@@ -581,14 +597,15 @@ protected override TypeSymbol InferTypeOfVarVariable(DiagnosticBag diagnostics)
}
/// <summary>
/// Symbol for an out variable local.
/// Symbol for an out variable local that might require type inference during overload resolution, i.e.
/// its type is syntactically 'var'.
/// </summary>
private
class
Out
LocalSymbol
:
SourceLocalSymbol
private
class
PossiblyImplicitlyTypedOutVar
LocalSymbol
:
SourceLocalSymbol
{
private
readonly
CSharpSyntaxNode
_containingInvocation
;
private
readonly
Binder
_enclosingBinderOpt
;
public
Out
LocalSymbol
(
public
PossiblyImplicitlyTypedOutVar
LocalSymbol
(
Symbol
containingSymbol
,
Binder
scopeBinder
,
Binder
enclosingBinderOpt
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录