Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
fad045ba
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,发现更多精彩内容 >>
提交
fad045ba
编写于
3月 02, 2015
作者:
N
Neal Gafter
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Simplify the sorting of DataFlowAnalysis results
上级
28ad5c13
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
60 addition
and
83 deletion
+60
-83
src/Compilers/CSharp/Portable/FlowAnalysis/CSharpDataFlowAnalysis.cs
...rs/CSharp/Portable/FlowAnalysis/CSharpDataFlowAnalysis.cs
+16
-28
src/Compilers/CSharp/Portable/FlowAnalysis/ReadWriteWalker.cs
...Compilers/CSharp/Portable/FlowAnalysis/ReadWriteWalker.cs
+13
-13
src/Compilers/VisualBasic/Portable/Analysis/FlowAnalysis/ReadWriteWalker.vb
...alBasic/Portable/Analysis/FlowAnalysis/ReadWriteWalker.vb
+11
-11
src/Compilers/VisualBasic/Portable/Analysis/FlowAnalysis/VisualBasicDataFlowAnalysis.vb
...able/Analysis/FlowAnalysis/VisualBasicDataFlowAnalysis.vb
+20
-31
未找到文件。
src/Compilers/CSharp/Portable/FlowAnalysis/CSharpDataFlowAnalysis.cs
浏览文件 @
fad045ba
...
...
@@ -53,7 +53,7 @@ public override ImmutableArray<ISymbol> VariablesDeclared
if
(
_variablesDeclared
.
IsDefault
)
{
var
result
=
Succeeded
?
((
IEnumerable
<
ISymbol
>)
VariablesDeclaredWalker
.
Analyze
(
_context
.
Compilation
,
_context
.
Member
,
_context
.
BoundNode
,
_context
.
FirstInRegion
,
_context
.
LastInRegion
)).
Sorted
(
)
?
Sort
(
VariablesDeclaredWalker
.
Analyze
(
_context
.
Compilation
,
_context
.
Member
,
_context
.
BoundNode
,
_context
.
FirstInRegion
,
_context
.
LastInRegion
)
)
:
ImmutableArray
<
ISymbol
>.
Empty
;
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_variablesDeclared
,
result
);
}
...
...
@@ -89,7 +89,7 @@ public override ImmutableArray<ISymbol> DataFlowsIn
{
_succeeded
=
!
_context
.
Failed
;
var
result
=
_context
.
Failed
?
ImmutableArray
<
ISymbol
>.
Empty
:
((
IEnumerable
<
ISymbol
>)
DataFlowsInWalker
.
Analyze
(
_context
.
Compilation
,
_context
.
Member
,
_context
.
BoundNode
,
_context
.
FirstInRegion
,
_context
.
LastInRegion
,
UnassignedVariables
,
UnassignedVariableAddressOfSyntaxes
,
out
_succeeded
)).
Sorted
(
);
Sort
(
DataFlowsInWalker
.
Analyze
(
_context
.
Compilation
,
_context
.
Member
,
_context
.
BoundNode
,
_context
.
FirstInRegion
,
_context
.
LastInRegion
,
UnassignedVariables
,
UnassignedVariableAddressOfSyntaxes
,
out
_succeeded
)
);
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_dataFlowsIn
,
result
);
}
...
...
@@ -109,7 +109,7 @@ public override ImmutableArray<ISymbol> DataFlowsOut
if
(
_dataFlowsOut
==
null
)
{
var
result
=
Succeeded
?
((
IEnumerable
<
ISymbol
>)
DataFlowsOutWalker
.
Analyze
(
_context
.
Compilation
,
_context
.
Member
,
_context
.
BoundNode
,
_context
.
FirstInRegion
,
_context
.
LastInRegion
,
UnassignedVariables
,
_dataFlowsIn
)).
Sorted
(
)
?
Sort
(
DataFlowsOutWalker
.
Analyze
(
_context
.
Compilation
,
_context
.
Member
,
_context
.
BoundNode
,
_context
.
FirstInRegion
,
_context
.
LastInRegion
,
UnassignedVariables
,
_dataFlowsIn
)
)
:
ImmutableArray
<
ISymbol
>.
Empty
;
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_dataFlowsOut
,
result
);
}
...
...
@@ -128,7 +128,7 @@ public override ImmutableArray<ISymbol> AlwaysAssigned
if
(
_alwaysAssigned
==
null
)
{
var
result
=
Succeeded
?
((
IEnumerable
<
ISymbol
>)
AlwaysAssignedWalker
.
Analyze
(
_context
.
Compilation
,
_context
.
Member
,
_context
.
BoundNode
,
_context
.
FirstInRegion
,
_context
.
LastInRegion
)).
Sorted
(
)
?
Sort
(
AlwaysAssignedWalker
.
Analyze
(
_context
.
Compilation
,
_context
.
Member
,
_context
.
BoundNode
,
_context
.
FirstInRegion
,
_context
.
LastInRegion
)
)
:
ImmutableArray
<
ISymbol
>.
Empty
;
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_alwaysAssigned
,
result
);
}
...
...
@@ -203,7 +203,7 @@ public override ImmutableArray<ISymbol> WrittenOutside
private
void
AnalyzeReadWrite
()
{
ImmutableArray
<
I
Symbol
>
readInside
,
writtenInside
,
readOutside
,
writtenOutside
,
captured
,
unsafeAddressTaken
;
ImmutableArray
<
Symbol
>
readInside
,
writtenInside
,
readOutside
,
writtenOutside
,
captured
,
unsafeAddressTaken
;
if
(
Succeeded
)
{
ReadWriteWalker
.
Analyze
(
_context
.
Compilation
,
_context
.
Member
,
_context
.
BoundNode
,
_context
.
FirstInRegion
,
_context
.
LastInRegion
,
UnassignedVariableAddressOfSyntaxes
,
...
...
@@ -213,15 +213,15 @@ private void AnalyzeReadWrite()
}
else
{
readInside
=
writtenInside
=
readOutside
=
writtenOutside
=
captured
=
unsafeAddressTaken
=
ImmutableArray
<
I
Symbol
>.
Empty
;
readInside
=
writtenInside
=
readOutside
=
writtenOutside
=
captured
=
unsafeAddressTaken
=
ImmutableArray
<
Symbol
>.
Empty
;
}
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_readInside
,
readInside
.
Sorted
(
));
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_writtenInside
,
writtenInside
.
Sorted
(
));
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_readOutside
,
readOutside
.
Sorted
(
));
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_writtenOutside
,
writtenOutside
.
Sorted
(
));
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_captured
,
captured
.
Sorted
(
));
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_unsafeAddressTaken
,
unsafeAddressTaken
.
Sorted
(
));
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_readInside
,
Sort
(
readInside
));
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_writtenInside
,
Sort
(
writtenInside
));
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_readOutside
,
Sort
(
readOutside
));
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_writtenOutside
,
Sort
(
writtenOutside
));
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_captured
,
Sort
(
captured
));
ImmutableInterlocked
.
InterlockedInitialize
(
ref
_unsafeAddressTaken
,
Sort
(
unsafeAddressTaken
));
}
/// <summary>
...
...
@@ -293,25 +293,13 @@ public sealed override bool Succeeded
return
_succeeded
.
Value
;
}
}
}
static
class
Sorter
{
class
LexicalISymbolComparer
:
IComparer
<
ISymbol
>
{
internal
static
LexicalISymbolComparer
Instance
=
new
LexicalISymbolComparer
();
public
int
Compare
(
ISymbol
x
,
ISymbol
y
)
{
return
LexicalOrderSymbolComparer
.
Instance
.
Compare
((
Symbol
)
x
,
(
Symbol
)
y
);
}
}
internal
static
ImmutableArray
<
ISymbol
>
Sort
ed
(
this
IEnumerable
<
I
Symbol
>
data
)
internal
static
ImmutableArray
<
ISymbol
>
Sort
(
IEnumerable
<
Symbol
>
data
)
{
var
builder
=
ArrayBuilder
<
I
Symbol
>.
GetInstance
();
var
builder
=
ArrayBuilder
<
Symbol
>.
GetInstance
();
builder
.
AddRange
(
data
);
builder
.
Sort
(
Lexical
I
SymbolComparer
.
Instance
);
return
builder
.
ToImmutableAndFree
();
builder
.
Sort
(
Lexical
Order
SymbolComparer
.
Instance
);
return
builder
.
ToImmutableAndFree
()
.
As
<
ISymbol
>()
;
}
}
}
src/Compilers/CSharp/Portable/FlowAnalysis/ReadWriteWalker.cs
浏览文件 @
fad045ba
...
...
@@ -14,12 +14,12 @@ internal class ReadWriteWalker : AbstractRegionDataFlowPass
{
internal
static
void
Analyze
(
CSharpCompilation
compilation
,
Symbol
member
,
BoundNode
node
,
BoundNode
firstInRegion
,
BoundNode
lastInRegion
,
HashSet
<
PrefixUnaryExpressionSyntax
>
unassignedVariableAddressOfSyntaxes
,
out
ImmutableArray
<
I
Symbol
>
readInside
,
out
ImmutableArray
<
I
Symbol
>
writtenInside
,
out
ImmutableArray
<
I
Symbol
>
readOutside
,
out
ImmutableArray
<
I
Symbol
>
writtenOutside
,
out
ImmutableArray
<
I
Symbol
>
captured
,
out
ImmutableArray
<
I
Symbol
>
unsafeAddressTaken
)
out
ImmutableArray
<
Symbol
>
readInside
,
out
ImmutableArray
<
Symbol
>
writtenInside
,
out
ImmutableArray
<
Symbol
>
readOutside
,
out
ImmutableArray
<
Symbol
>
writtenOutside
,
out
ImmutableArray
<
Symbol
>
captured
,
out
ImmutableArray
<
Symbol
>
unsafeAddressTaken
)
{
var
walker
=
new
ReadWriteWalker
(
compilation
,
member
,
node
,
firstInRegion
,
lastInRegion
,
unassignedVariableAddressOfSyntaxes
);
try
...
...
@@ -28,17 +28,17 @@ internal class ReadWriteWalker : AbstractRegionDataFlowPass
walker
.
Analyze
(
ref
badRegion
);
if
(
badRegion
)
{
readInside
=
writtenInside
=
readOutside
=
writtenOutside
=
captured
=
unsafeAddressTaken
=
ImmutableArray
<
I
Symbol
>.
Empty
;
readInside
=
writtenInside
=
readOutside
=
writtenOutside
=
captured
=
unsafeAddressTaken
=
ImmutableArray
<
Symbol
>.
Empty
;
}
else
{
readInside
=
((
IEnumerable
<
ISymbol
>)
walker
.
_readInside
)
.
ToImmutableArray
();
writtenInside
=
((
IEnumerable
<
ISymbol
>)
walker
.
_writtenInside
)
.
ToImmutableArray
();
readOutside
=
((
IEnumerable
<
ISymbol
>)
walker
.
_readOutside
)
.
ToImmutableArray
();
writtenOutside
=
((
IEnumerable
<
ISymbol
>)
walker
.
_writtenOutside
)
.
ToImmutableArray
();
readInside
=
walker
.
_readInside
.
ToImmutableArray
();
writtenInside
=
walker
.
_writtenInside
.
ToImmutableArray
();
readOutside
=
walker
.
_readOutside
.
ToImmutableArray
();
writtenOutside
=
walker
.
_writtenOutside
.
ToImmutableArray
();
captured
=
((
IEnumerable
<
ISymbol
>)
walker
.
GetCaptured
()
).
ToImmutableArray
();
unsafeAddressTaken
=
((
IEnumerable
<
ISymbol
>)
walker
.
GetUnsafeAddressTaken
()
).
ToImmutableArray
();
captured
=
walker
.
GetCaptured
(
).
ToImmutableArray
();
unsafeAddressTaken
=
walker
.
GetUnsafeAddressTaken
(
).
ToImmutableArray
();
}
}
finally
...
...
src/Compilers/VisualBasic/Portable/Analysis/FlowAnalysis/ReadWriteWalker.vb
浏览文件 @
fad045ba
...
...
@@ -15,22 +15,22 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Inherits
AbstractRegionDataFlowPass
Friend
Overloads
Shared
Sub
Analyze
(
info
As
FlowAnalysisInfo
,
region
As
FlowAnalysisRegionInfo
,
ByRef
readInside
As
ImmutableArray
(
Of
I
Symbol
),
ByRef
writtenInside
As
ImmutableArray
(
Of
I
Symbol
),
ByRef
readOutside
As
ImmutableArray
(
Of
I
Symbol
),
ByRef
writtenOutside
As
ImmutableArray
(
Of
I
Symbol
),
ByRef
captured
As
ImmutableArray
(
Of
I
Symbol
))
ByRef
readInside
As
ImmutableArray
(
Of
Symbol
),
ByRef
writtenInside
As
ImmutableArray
(
Of
Symbol
),
ByRef
readOutside
As
ImmutableArray
(
Of
Symbol
),
ByRef
writtenOutside
As
ImmutableArray
(
Of
Symbol
),
ByRef
captured
As
ImmutableArray
(
Of
Symbol
))
Dim
walker
=
New
ReadWriteWalker
(
info
,
region
)
Try
If
walker
.
Analyze
()
Then
readInside
=
walker
.
readInside
.
Cast
(
Of
ISymbol
).
ToImmutableArray
()
writtenInside
=
walker
.
writtenInside
.
Cast
(
Of
ISymbol
).
ToImmutableArray
()
readOutside
=
walker
.
readOutside
.
Cast
(
Of
ISymbol
).
ToImmutableArray
()
writtenOutside
=
walker
.
writtenOutside
.
Cast
(
Of
ISymbol
).
ToImmutableArray
()
captured
=
walker
.
captured
.
Cast
(
Of
ISymbol
).
ToImmutableArray
()
readInside
=
walker
.
readInside
.
ToImmutableArray
()
writtenInside
=
walker
.
writtenInside
.
ToImmutableArray
()
readOutside
=
walker
.
readOutside
.
ToImmutableArray
()
writtenOutside
=
walker
.
writtenOutside
.
ToImmutableArray
()
captured
=
walker
.
captured
.
ToImmutableArray
()
Else
readInside
=
ImmutableArray
(
Of
I
Symbol
).
Empty
readInside
=
ImmutableArray
(
Of
Symbol
).
Empty
writtenInside
=
readInside
readOutside
=
readInside
writtenOutside
=
readInside
...
...
src/Compilers/VisualBasic/Portable/Analysis/FlowAnalysis/VisualBasicDataFlowAnalysis.vb
浏览文件 @
fad045ba
...
...
@@ -46,7 +46,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Get
If
_variablesDeclared
.
IsDefault
Then
Dim
result
=
If
(
Me
.
_context
.
Failed
,
ImmutableArray
(
Of
ISymbol
).
Empty
,
DirectCast
(
VariablesDeclaredWalker
.
Analyze
(
_context
.
AnalysisInfo
,
_context
.
RegionInfo
),
IEnumerable
(
Of
ISymbol
)).
Sorted
(
))
Sort
(
VariablesDeclaredWalker
.
Analyze
(
_context
.
AnalysisInfo
,
_context
.
RegionInfo
)
))
ImmutableInterlocked
.
InterlockedCompareExchange
(
_variablesDeclared
,
result
,
Nothing
)
End
If
Return
_variablesDeclared
...
...
@@ -72,7 +72,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
If
_dataFlowsIn
.
IsDefault
Then
Me
.
_succeeded
=
Not
Me
.
_context
.
Failed
Dim
result
=
If
(
Me
.
_context
.
Failed
,
ImmutableArray
(
Of
ISymbol
).
Empty
,
DirectCast
(
DataFlowsInWalker
.
Analyze
(
_context
.
AnalysisInfo
,
_context
.
RegionInfo
,
UnassignedVariables
,
_succeeded
,
_invalidRegionDetected
),
IEnumerable
(
Of
ISymbol
)).
Sorted
(
))
Sort
(
DataFlowsInWalker
.
Analyze
(
_context
.
AnalysisInfo
,
_context
.
RegionInfo
,
UnassignedVariables
,
_succeeded
,
_invalidRegionDetected
)
))
ImmutableInterlocked
.
InterlockedCompareExchange
(
_dataFlowsIn
,
result
.
ToImmutableArray
(),
Nothing
)
End
If
Return
_dataFlowsIn
...
...
@@ -87,7 +87,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Dim
discarded
=
DataFlowsIn
If
_dataFlowsOut
.
IsDefault
Then
Dim
result
=
If
(
Me
.
_context
.
Failed
,
ImmutableArray
(
Of
ISymbol
).
Empty
,
DirectCast
(
DataFlowsOutWalker
.
Analyze
(
_context
.
AnalysisInfo
,
_context
.
RegionInfo
,
UnassignedVariables
,
_dataFlowsIn
),
IEnumerable
(
Of
ISymbol
)).
Sorted
(
))
Sort
(
DataFlowsOutWalker
.
Analyze
(
_context
.
AnalysisInfo
,
_context
.
RegionInfo
,
UnassignedVariables
,
_dataFlowsIn
)
))
ImmutableInterlocked
.
InterlockedCompareExchange
(
_dataFlowsOut
,
result
,
Nothing
)
End
If
Return
_dataFlowsOut
...
...
@@ -101,7 +101,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Get
If
_alwaysAssigned
.
IsDefault
Then
Dim
result
=
If
(
Me
.
_context
.
Failed
,
ImmutableArray
(
Of
ISymbol
).
Empty
,
DirectCast
(
AlwaysAssignedWalker
.
Analyze
(
_context
.
AnalysisInfo
,
_context
.
RegionInfo
),
IEnumerable
(
Of
ISymbol
)).
Sorted
(
))
Sort
(
AlwaysAssignedWalker
.
Analyze
(
_context
.
AnalysisInfo
,
_context
.
RegionInfo
)
))
ImmutableInterlocked
.
InterlockedCompareExchange
(
_alwaysAssigned
,
result
,
Nothing
)
End
If
Return
_alwaysAssigned
...
...
@@ -157,14 +157,14 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End
Property
Private
Sub
AnalyzeReadWrite
()
Dim
readInside
As
ImmutableArray
(
Of
I
Symbol
)
=
Nothing
Dim
writtenInside
As
ImmutableArray
(
Of
I
Symbol
)
=
Nothing
Dim
readOutside
As
ImmutableArray
(
Of
I
Symbol
)
=
Nothing
Dim
writtenOutside
As
ImmutableArray
(
Of
I
Symbol
)
=
Nothing
Dim
captured
As
ImmutableArray
(
Of
I
Symbol
)
=
Nothing
Dim
readInside
As
ImmutableArray
(
Of
Symbol
)
=
Nothing
Dim
writtenInside
As
ImmutableArray
(
Of
Symbol
)
=
Nothing
Dim
readOutside
As
ImmutableArray
(
Of
Symbol
)
=
Nothing
Dim
writtenOutside
As
ImmutableArray
(
Of
Symbol
)
=
Nothing
Dim
captured
As
ImmutableArray
(
Of
Symbol
)
=
Nothing
If
Not
Me
.
Succeeded
Then
readInside
=
ImmutableArray
(
Of
I
Symbol
).
Empty
readInside
=
ImmutableArray
(
Of
Symbol
).
Empty
writtenInside
=
readInside
readOutside
=
readInside
writtenOutside
=
readInside
...
...
@@ -180,11 +180,11 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
captured
:
=
captured
)
End
If
ImmutableInterlocked
.
InterlockedCompareExchange
(
Me
.
_readInside
,
readInside
.
Sorted
(
),
Nothing
)
ImmutableInterlocked
.
InterlockedCompareExchange
(
Me
.
_writtenInside
,
writtenInside
.
Sorted
(
),
Nothing
)
ImmutableInterlocked
.
InterlockedCompareExchange
(
Me
.
_readOutside
,
readOutside
.
Sorted
(
),
Nothing
)
ImmutableInterlocked
.
InterlockedCompareExchange
(
Me
.
_writtenOutside
,
writtenOutside
.
Sorted
(
),
Nothing
)
ImmutableInterlocked
.
InterlockedCompareExchange
(
Me
.
_captured
,
captured
.
Sorted
(
),
Nothing
)
ImmutableInterlocked
.
InterlockedCompareExchange
(
Me
.
_readInside
,
Sort
(
readInside
),
Nothing
)
ImmutableInterlocked
.
InterlockedCompareExchange
(
Me
.
_writtenInside
,
Sort
(
writtenInside
),
Nothing
)
ImmutableInterlocked
.
InterlockedCompareExchange
(
Me
.
_readOutside
,
Sort
(
readOutside
),
Nothing
)
ImmutableInterlocked
.
InterlockedCompareExchange
(
Me
.
_writtenOutside
,
Sort
(
writtenOutside
),
Nothing
)
ImmutableInterlocked
.
InterlockedCompareExchange
(
Me
.
_captured
,
Sort
(
captured
),
Nothing
)
End
Sub
''' <summary>
...
...
@@ -222,24 +222,13 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return
ImmutableArray
(
Of
ISymbol
).
Empty
End
Get
End
Property
End
Class
Friend
Module
Sorter
Class
LexicalISymbolComparer
Implements
IComparer
(
Of
ISymbol
)
Friend
Shared
Instance
As
LexicalISymbolComparer
=
New
LexicalISymbolComparer
()
Public
Function
Compare
(
x
As
ISymbol
,
y
As
ISymbol
)
As
Integer
Implements
IComparer
(
Of
ISymbol
).
Compare
Return
LexicalOrderSymbolComparer
.
Instance
.
Compare
(
CType
(
x
,
Symbol
),
CType
(
y
,
Symbol
))
End
Function
End
Class
<
Runtime
.
CompilerServices
.
Extension
>
Friend
Function
Sorted
(
data
As
IEnumerable
(
Of
ISymbol
))
As
ImmutableArray
(
Of
ISymbol
)
Dim
builder
=
ArrayBuilder
(
Of
ISymbol
).
GetInstance
()
Friend
Function
Sort
(
data
As
IEnumerable
(
Of
Symbol
))
As
ImmutableArray
(
Of
ISymbol
)
Dim
builder
=
ArrayBuilder
(
Of
Symbol
).
GetInstance
()
builder
.
AddRange
(
data
)
builder
.
Sort
(
Lexical
I
SymbolComparer
.
Instance
)
Return
builder
.
ToImmutableAndFree
()
builder
.
Sort
(
Lexical
Order
SymbolComparer
.
Instance
)
Return
builder
.
ToImmutableAndFree
()
.
As
(
Of
ISymbol
)()
End
Function
End
Module
End
Class
End
Namespace
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录