Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
67157cde
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,发现更多精彩内容 >>
提交
67157cde
编写于
12月 31, 2019
作者:
S
Sam Harwell
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Avoid boxing Boolean in SyntaxTreeSemanticModel.GetMemberSemanticModel
上级
e0e7411e
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
8 addition
and
8 deletion
+8
-8
src/Compilers/VisualBasic/Portable/Compilation/SyntaxTreeSemanticModel.vb
...sualBasic/Portable/Compilation/SyntaxTreeSemanticModel.vb
+8
-8
未找到文件。
src/Compilers/VisualBasic/Portable/Compilation/SyntaxTreeSemanticModel.vb
浏览文件 @
67157cde
...
...
@@ -29,7 +29,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Private
ReadOnly
_ignoresAccessibility
As
Boolean
' maps from a higher-level binder to an appropriate SemanticModel for the construct (such as a method, or initializer).
Private
ReadOnly
_semanticModelCache
As
New
ConcurrentDictionary
(
Of
Tuple
(
Of
Binder
,
Boolean
),
MemberSemanticModel
)()
Private
ReadOnly
_semanticModelCache
As
New
ConcurrentDictionary
(
Of
(
binder
As
Binder
,
ignoresAccessibility
As
Boolean
),
MemberSemanticModel
)()
Friend
Sub
New
(
compilation
As
VisualBasicCompilation
,
sourceModule
As
SourceModuleSymbol
,
syntaxTree
As
SyntaxTree
,
Optional
ignoreAccessibility
As
Boolean
=
False
)
_compilation
=
compilation
...
...
@@ -135,26 +135,26 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End
Function
' PERF: These variables avoid repeated allocation of Func(Of Binder, MemberSemanticModel) in GetMemberSemanticModel
Private
ReadOnly
_methodBodySemanticModelCreator
As
Func
(
Of
Tuple
(
Of
Binder
,
Boolean
),
MemberSemanticModel
)
=
Function
(
key
As
Tuple
(
Of
Binder
,
Boolean
))
MethodBodySemanticModel
.
Create
(
Me
,
DirectCast
(
key
.
Item1
,
SubOrFunctionBodyBinder
),
key
.
Item2
)
Private
ReadOnly
_initializerSemanticModelCreator
As
Func
(
Of
Tuple
(
Of
Binder
,
Boolean
),
MemberSemanticModel
)
=
Function
(
key
As
Tuple
(
Of
Binder
,
Boolean
))
InitializerSemanticModel
.
Create
(
Me
,
DirectCast
(
key
.
Item1
,
DeclarationInitializerBinder
),
key
.
Item2
)
Private
ReadOnly
_attributeSemanticModelCreator
As
Func
(
Of
Tuple
(
Of
Binder
,
Boolean
),
MemberSemanticModel
)
=
Function
(
key
As
Tuple
(
Of
Binder
,
Boolean
))
AttributeSemanticModel
.
Create
(
Me
,
DirectCast
(
key
.
Item1
,
AttributeBinder
),
key
.
Item2
)
Private
ReadOnly
_methodBodySemanticModelCreator
As
Func
(
Of
(
binder
As
Binder
,
ignoresAccessibility
As
Boolean
),
MemberSemanticModel
)
=
Function
(
key
As
(
binder
As
Binder
,
ignoresAccessibility
As
Boolean
))
MethodBodySemanticModel
.
Create
(
Me
,
DirectCast
(
key
.
binder
,
SubOrFunctionBodyBinder
),
key
.
ignoresAccessibility
)
Private
ReadOnly
_initializerSemanticModelCreator
As
Func
(
Of
(
binder
As
Binder
,
ignoresAccessibility
As
Boolean
),
MemberSemanticModel
)
=
Function
(
key
As
(
binder
As
Binder
,
ignoresAccessibility
As
Boolean
))
InitializerSemanticModel
.
Create
(
Me
,
DirectCast
(
key
.
binder
,
DeclarationInitializerBinder
),
key
.
ignoresAccessibility
)
Private
ReadOnly
_attributeSemanticModelCreator
As
Func
(
Of
(
binder
As
Binder
,
ignoresAccessibility
As
Boolean
),
MemberSemanticModel
)
=
Function
(
key
As
(
binder
As
Binder
,
ignoresAccessibility
As
Boolean
))
AttributeSemanticModel
.
Create
(
Me
,
DirectCast
(
key
.
binder
,
AttributeBinder
),
key
.
ignoresAccessibility
)
Public
Function
GetMemberSemanticModel
(
binder
As
Binder
)
As
MemberSemanticModel
If
TypeOf
binder
Is
MethodBodyBinder
Then
Return
_semanticModelCache
.
GetOrAdd
(
Tuple
.
Create
(
binder
,
IgnoresAccessibility
),
_methodBodySemanticModelCreator
)
Return
_semanticModelCache
.
GetOrAdd
((
binder
,
IgnoresAccessibility
),
_methodBodySemanticModelCreator
)
End
If
If
TypeOf
binder
Is
DeclarationInitializerBinder
Then
Return
_semanticModelCache
.
GetOrAdd
(
Tuple
.
Create
(
binder
,
IgnoresAccessibility
),
_initializerSemanticModelCreator
)
Return
_semanticModelCache
.
GetOrAdd
((
binder
,
IgnoresAccessibility
),
_initializerSemanticModelCreator
)
End
If
If
TypeOf
binder
Is
AttributeBinder
Then
Return
_semanticModelCache
.
GetOrAdd
(
Tuple
.
Create
(
binder
,
IgnoresAccessibility
),
_attributeSemanticModelCreator
)
Return
_semanticModelCache
.
GetOrAdd
((
binder
,
IgnoresAccessibility
),
_attributeSemanticModelCreator
)
End
If
If
TypeOf
binder
Is
TopLevelCodeBinder
Then
Return
_semanticModelCache
.
GetOrAdd
(
Tuple
.
Create
(
binder
,
IgnoresAccessibility
),
_methodBodySemanticModelCreator
)
Return
_semanticModelCache
.
GetOrAdd
((
binder
,
IgnoresAccessibility
),
_methodBodySemanticModelCreator
)
End
If
Return
Nothing
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录