Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
3b4e5f9d
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,发现更多精彩内容 >>
提交
3b4e5f9d
编写于
9月 14, 2016
作者:
V
VSadov
提交者:
GitHub
9月 14, 2016
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #13810 from VSadov/DefAssign
Implements definite assignment analysis for VB tuples.
上级
79643076
76f01852
变更
6
展开全部
隐藏空白更改
内联
并排
Showing
6 changed file
with
921 addition
and
37 deletion
+921
-37
src/Compilers/VisualBasic/Portable/Analysis/FlowAnalysis/AbstractRegionDataFlowPass.vb
...table/Analysis/FlowAnalysis/AbstractRegionDataFlowPass.vb
+1
-1
src/Compilers/VisualBasic/Portable/Analysis/FlowAnalysis/DataFlowPass.vb
...isualBasic/Portable/Analysis/FlowAnalysis/DataFlowPass.vb
+86
-33
src/Compilers/VisualBasic/Portable/Analysis/FlowAnalysis/DataFlowsOutWalker.vb
...asic/Portable/Analysis/FlowAnalysis/DataFlowsOutWalker.vb
+1
-1
src/Compilers/VisualBasic/Portable/Analysis/IteratorAndAsyncAnalysis/IteratorAndAsyncCaptureWalker.vb
...IteratorAndAsyncAnalysis/IteratorAndAsyncCaptureWalker.vb
+2
-2
src/Compilers/VisualBasic/Portable/Symbols/Tuples/TupleTypeSymbol.vb
...rs/VisualBasic/Portable/Symbols/Tuples/TupleTypeSymbol.vb
+1
-0
src/Compilers/VisualBasic/Test/Emit/CodeGen/CodeGenTuples.vb
src/Compilers/VisualBasic/Test/Emit/CodeGen/CodeGenTuples.vb
+830
-0
未找到文件。
src/Compilers/VisualBasic/Portable/Analysis/FlowAnalysis/AbstractRegionDataFlowPass.vb
浏览文件 @
3b4e5f9d
...
...
@@ -33,7 +33,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Private
Sub
MakeSlots
(
parameters
As
ImmutableArray
(
Of
ParameterSymbol
))
For
Each
parameter
In
parameters
Mak
eSlot
(
parameter
)
GetOrCreat
eSlot
(
parameter
)
Next
End
Sub
...
...
src/Compilers/VisualBasic/Portable/Analysis/FlowAnalysis/DataFlowPass.vb
浏览文件 @
3b4e5f9d
...
...
@@ -105,14 +105,14 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
MyBase
.
InitForScan
()
For
Each
parameter
In
MethodParameters
Mak
eSlot
(
parameter
)
GetOrCreat
eSlot
(
parameter
)
Next
Me
.
_alreadyReported
=
BitVector
.
Empty
' no variables yet reported unassigned
Me
.
EnterParameters
(
MethodParameters
)
' with parameters assigned
Dim
methodMeParameter
=
Me
.
MeParameter
' and with 'Me' assigned as well
If
methodMeParameter
IsNot
Nothing
Then
Me
.
Mak
eSlot
(
methodMeParameter
)
Me
.
GetOrCreat
eSlot
(
methodMeParameter
)
Me
.
EnterParameter
(
methodMeParameter
)
End
If
...
...
@@ -134,7 +134,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
'
If
initiallyAssignedVariables
IsNot
Nothing
Then
For
Each
local
In
initiallyAssignedVariables
SetSlotAssigned
(
Mak
eSlot
(
local
))
SetSlotAssigned
(
GetOrCreat
eSlot
(
local
))
Next
End
If
End
Sub
...
...
@@ -371,16 +371,18 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
''' in an earlier phase as "use before declaration". That allows us to avoid giving slots to local variables before
''' processing their declarations.
''' </summary>
Protected
Function
VariableSlot
(
loca
l
As
Symbol
,
Optional
containingSlot
As
Integer
=
0
)
As
Integer
Protected
Function
VariableSlot
(
symbo
l
As
Symbol
,
Optional
containingSlot
As
Integer
=
0
)
As
Integer
If
local
Is
Nothing
Then
containingSlot
=
DescendThroughTupleRestFields
(
symbol
,
containingSlot
,
forceContainingSlotsToExist
:
=
False
)
If
symbol
Is
Nothing
Then
' NOTE: This point may be hit in erroneous code, like
' referencing instance members from static methods
Return
SlotKind
.
NotTracked
End
If
Dim
slot
As
Integer
Return
If
((
_variableSlot
.
TryGetValue
(
New
VariableIdentifier
(
loca
l
,
containingSlot
),
slot
)),
slot
,
SlotKind
.
NotTracked
)
Return
If
((
_variableSlot
.
TryGetValue
(
New
VariableIdentifier
(
symbo
l
,
containingSlot
),
slot
)),
slot
,
SlotKind
.
NotTracked
)
End
Function
...
...
@@ -394,7 +396,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Case
BoundKind
.
MeReference
,
BoundKind
.
MyBaseReference
,
BoundKind
.
MyClassReference
If
MeParameter
IsNot
Nothing
Then
result
.
Append
(
Mak
eSlot
(
MeParameter
))
result
.
Append
(
GetOrCreat
eSlot
(
MeParameter
))
End
If
Case
BoundKind
.
Local
...
...
@@ -403,20 +405,20 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
If
local
.
DeclarationKind
=
LocalDeclarationKind
.
AmbiguousLocals
Then
' multiple locals
For
Each
loc
In
DirectCast
(
local
,
AmbiguousLocalsPseudoSymbol
).
Locals
result
.
Append
(
Mak
eSlot
(
loc
))
result
.
Append
(
GetOrCreat
eSlot
(
loc
))
Next
Else
' just one simple local
result
.
Append
(
Mak
eSlot
(
local
))
result
.
Append
(
GetOrCreat
eSlot
(
local
))
End
If
Case
BoundKind
.
RangeVariable
result
.
Append
(
Mak
eSlot
(
DirectCast
(
node
,
BoundRangeVariable
).
RangeVariable
))
result
.
Append
(
GetOrCreat
eSlot
(
DirectCast
(
node
,
BoundRangeVariable
).
RangeVariable
))
Case
BoundKind
.
Parameter
result
.
Append
(
Mak
eSlot
(
DirectCast
(
node
,
BoundParameter
).
ParameterSymbol
))
result
.
Append
(
GetOrCreat
eSlot
(
DirectCast
(
node
,
BoundParameter
).
ParameterSymbol
))
Case
BoundKind
.
FieldAccess
Dim
fieldAccess
=
DirectCast
(
node
,
BoundFieldAccess
)
...
...
@@ -437,7 +439,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
' update slots, reuse collection
' NOTE: we don't filter out SlotKind.NotTracked values
For
i
=
0
To
result
.
Count
-
1
result
(
i
)
=
Mak
eSlot
(
fieldAccess
.
FieldSymbol
,
result
(
0
))
result
(
i
)
=
GetOrCreat
eSlot
(
fieldAccess
.
FieldSymbol
,
result
(
0
))
Next
Case
BoundKind
.
WithLValueExpressionPlaceholder
,
BoundKind
.
WithRValueExpressionPlaceholder
...
...
@@ -454,24 +456,27 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
''' <summary>
''' Force a variable to have a slot.
''' </summary>
''' <param name = "
loca
l"></param>
''' <param name = "
symbo
l"></param>
''' <returns></returns>
Protected
Function
MakeSlot
(
local
As
Symbol
,
Optional
containingSlot
As
Integer
=
0
)
As
Integer
Protected
Function
GetOrCreateSlot
(
symbol
As
Symbol
,
Optional
containingSlot
As
Integer
=
0
)
As
Integer
containingSlot
=
DescendThroughTupleRestFields
(
symbol
,
containingSlot
,
forceContainingSlotsToExist
:
=
True
)
If
containingSlot
=
SlotKind
.
NotTracked
Then
Return
SlotKind
.
NotTracked
End
If
' Check if the slot already exists
Dim
varIdentifier
As
New
VariableIdentifier
(
loca
l
,
containingSlot
)
Dim
varIdentifier
As
New
VariableIdentifier
(
symbo
l
,
containingSlot
)
Dim
slot
As
Integer
If
Not
_variableSlot
.
TryGetValue
(
varIdentifier
,
slot
)
Then
If
loca
l
.
Kind
=
SymbolKind
.
Local
Then
Me
.
_unusedVariables
.
Add
(
DirectCast
(
loca
l
,
LocalSymbol
))
If
symbo
l
.
Kind
=
SymbolKind
.
Local
Then
Me
.
_unusedVariables
.
Add
(
DirectCast
(
symbo
l
,
LocalSymbol
))
End
If
Dim
variableType
As
TypeSymbol
=
GetVariableType
(
loca
l
)
Dim
variableType
As
TypeSymbol
=
GetVariableType
(
symbo
l
)
If
IsEmptyStructType
(
variableType
)
Then
Return
SlotKind
.
NotTracked
...
...
@@ -491,6 +496,46 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return
slot
End
Function
''' <summary>
''' Descends through Rest fields of a tuple if "symbol" is an extended field
''' As a result the "symbol" will be adjusted to be the field of the innermost tuple
''' and a corresponding containingSlot is returned.
''' Return value -1 indicates a failure which could happen for the following reasons
''' a) Rest field does not exist, which could happen in rare error scenarios involving broken ValueTuple types
''' b) Rest is not tracked already and forceSlotsToExist is false (otherwise we create slots on demand)
''' </summary>
Private
Function
DescendThroughTupleRestFields
(
ByRef
symbol
As
Symbol
,
containingSlot
As
Integer
,
forceContainingSlotsToExist
As
Boolean
)
As
Integer
Dim
fieldSymbol
=
TryCast
(
symbol
,
TupleFieldSymbol
)
If
fieldSymbol
IsNot
Nothing
Then
Dim
containingType
As
TypeSymbol
=
DirectCast
(
symbol
.
ContainingType
,
TupleTypeSymbol
).
UnderlyingNamedType
' for tuple fields the variable identifier represents the underlying field
symbol
=
fieldSymbol
.
TupleUnderlyingField
' descend through Rest fields
' force corresponding slots if do not exist
While
containingType
<>
symbol
.
ContainingType
Dim
restField
=
TryCast
(
containingType
.
GetMembers
(
TupleTypeSymbol
.
RestFieldName
).
FirstOrDefault
(),
FieldSymbol
)
If
restField
Is
Nothing
Then
Return
-
1
End
If
If
forceContainingSlotsToExist
Then
containingSlot
=
GetOrCreateSlot
(
restField
,
containingSlot
)
Else
If
Not
_variableSlot
.
TryGetValue
(
New
VariableIdentifier
(
restField
,
containingSlot
),
containingSlot
)
Then
Return
-
1
End
If
End
If
containingType
=
restField
.
Type
.
GetTupleUnderlyingTypeOrSelf
()
End
While
End
If
Return
containingSlot
End
Function
' In C#, we moved this cache to a separate cache held onto by the compilation, so we didn't
' recompute it each time.
'
...
...
@@ -705,7 +750,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
' exit while if there is at least one child with a slot which is not assigned
For
Each
childSymbol
In
GetStructInstanceFields
(
parentStructType
)
Dim
childSlot
=
Mak
eSlot
(
childSymbol
,
parentSlot
)
Dim
childSlot
=
GetOrCreat
eSlot
(
childSymbol
,
parentSlot
)
If
childSlot
<>
SlotKind
.
NotTracked
AndAlso
Not
state
.
IsAssigned
(
childSlot
)
Then
Exit
While
End
If
...
...
@@ -793,6 +838,14 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
' only fields
If
member
.
Kind
=
SymbolKind
.
Field
Then
Dim
field
=
DirectCast
(
member
,
FieldSymbol
)
' Do not report virtual tuple fields.
' They are additional aliases to the fields of the underlying struct or nested extensions.
' and as such are already accounted for via the nonvirtual fields.
If
field
.
IsVirtualTupleField
Then
Continue
For
End
If
' only instance fields
If
Not
ShouldIgnoreStructField
(
field
)
Then
' NOTE: DO NOT skip fields of intrinsic types if _trackStructsWithIntrinsicTypedFields is True
...
...
@@ -889,7 +942,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Next
Else
Dim
slot
As
Integer
=
Mak
eSlot
(
symbol
)
Dim
slot
As
Integer
=
GetOrCreat
eSlot
(
symbol
)
If
slot
>=
Me
.
State
.
Assigned
.
Capacity
Then
Normalize
(
Me
.
State
)
End
If
...
...
@@ -971,7 +1024,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return
True
End
If
' NOTE: unassignedSlot must have been set by previous call to IsAssigned(...)
unassignedSlot
=
Mak
eSlot
(
fieldAccess
.
FieldSymbol
,
unassignedSlot
)
unassignedSlot
=
GetOrCreat
eSlot
(
fieldAccess
.
FieldSymbol
,
unassignedSlot
)
Case
BoundKind
.
WithLValueExpressionPlaceholder
,
BoundKind
.
WithRValueExpressionPlaceholder
Dim
substitute
As
BoundExpression
=
Me
.
GetPlaceholderSubstitute
(
DirectCast
(
node
,
BoundValuePlaceholderBase
))
...
...
@@ -1262,7 +1315,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Dim
local
=
DirectCast
(
node
,
BoundLocalDeclaration
)
Debug
.
Assert
(
local
.
InitializerOpt
Is
value
OrElse
local
.
InitializedByAsNew
)
Dim
symbol
=
local
.
LocalSymbol
Dim
slot
As
Integer
=
Mak
eSlot
(
symbol
)
Dim
slot
As
Integer
=
GetOrCreat
eSlot
(
symbol
)
Dim
written
As
Boolean
=
assigned
OrElse
Not
Me
.
State
.
Reachable
SetSlotState
(
slot
,
written
)
' Note write if the local has an initializer or if it is part of an as-new.
...
...
@@ -1273,7 +1326,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Dim
forStatement
=
DirectCast
(
node
,
BoundForStatement
)
Dim
symbol
=
forStatement
.
DeclaredOrInferredLocalOpt
Debug
.
Assert
(
symbol
IsNot
Nothing
)
Dim
slot
As
Integer
=
Mak
eSlot
(
symbol
)
Dim
slot
As
Integer
=
GetOrCreat
eSlot
(
symbol
)
Dim
written
As
Boolean
=
assigned
OrElse
Not
Me
.
State
.
Reachable
SetSlotState
(
slot
,
written
)
...
...
@@ -1286,7 +1339,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End
If
' Regular variable
Dim
slot
As
Integer
=
Mak
eSlot
(
symbol
)
Dim
slot
As
Integer
=
GetOrCreat
eSlot
(
symbol
)
SetSlotState
(
slot
,
assigned
)
If
symbol
.
IsFunctionValue
Then
SetSlotState
(
SlotKind
.
FunctionValue
,
assigned
)
...
...
@@ -1298,13 +1351,13 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Case
BoundKind
.
Parameter
Dim
local
=
DirectCast
(
node
,
BoundParameter
)
Dim
symbol
=
local
.
ParameterSymbol
Dim
slot
As
Integer
=
Mak
eSlot
(
symbol
)
Dim
slot
As
Integer
=
GetOrCreat
eSlot
(
symbol
)
SetSlotState
(
slot
,
assigned
)
If
assigned
Then
NoteWrite
(
symbol
,
value
)
Case
BoundKind
.
MeReference
' var local = node as BoundThisReference;
Dim
slot
As
Integer
=
Mak
eSlot
(
MeParameter
)
Dim
slot
As
Integer
=
GetOrCreat
eSlot
(
MeParameter
)
SetSlotState
(
slot
,
assigned
)
If
assigned
Then
NoteWrite
(
MeParameter
,
value
)
...
...
@@ -1410,7 +1463,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Private
Sub
VisitCatchBlockInternal
(
catchBlock
As
BoundCatchBlock
,
ByRef
finallyState
As
LocalState
)
Dim
local
=
catchBlock
.
LocalOpt
If
local
IsNot
Nothing
Then
Mak
eSlot
(
local
)
GetOrCreat
eSlot
(
local
)
End
If
Dim
exceptionSource
=
catchBlock
.
ExceptionSourceOpt
...
...
@@ -1533,7 +1586,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
End
If
' Create a slot for the declared variable to be able to track it.
Dim
slot
As
Integer
=
Mak
eSlot
(
local
)
Dim
slot
As
Integer
=
GetOrCreat
eSlot
(
local
)
'If initializer is a lambda, we need to treat the local as assigned within the lambda.
Assign
(
node
,
node
.
InitializerOpt
,
...
...
@@ -1603,7 +1656,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Dim
localVariables
=
node
.
Locals
For
Each
local
In
localVariables
If
local
.
IsImplicitlyDeclared
Then
SetSlotState
(
Mak
eSlot
(
local
),
ConsiderLocalInitiallyAssigned
(
local
))
SetSlotState
(
GetOrCreat
eSlot
(
local
),
ConsiderLocalInitiallyAssigned
(
local
))
End
If
Next
...
...
@@ -1773,7 +1826,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
' if the for each statement declared a variable explicitly or by using local type inference we'll
' need to create a new slot for the new variable that is initially unassigned.
If
node
.
DeclaredOrInferredLocalOpt
IsNot
Nothing
Then
Dim
slot
As
Integer
=
Mak
eSlot
(
node
.
DeclaredOrInferredLocalOpt
)
'not initially assigned
Dim
slot
As
Integer
=
GetOrCreat
eSlot
(
node
.
DeclaredOrInferredLocalOpt
)
'not initially assigned
Assign
(
node
,
Nothing
,
ConsiderLocalInitiallyAssigned
(
node
.
DeclaredOrInferredLocalOpt
))
End
If
End
Sub
...
...
@@ -1802,7 +1855,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
If
variableDeclarations
.
Kind
=
BoundKind
.
AsNewLocalDeclarations
Then
For
Each
variableDeclaration
In
DirectCast
(
variableDeclarations
,
BoundAsNewLocalDeclarations
).
LocalDeclarations
Dim
local
=
variableDeclaration
.
LocalSymbol
Dim
slot
=
Mak
eSlot
(
local
)
Dim
slot
=
GetOrCreat
eSlot
(
local
)
If
slot
>=
0
Then
SetSlotAssigned
(
slot
)
NoteWrite
(
local
,
Nothing
)
...
...
@@ -1812,7 +1865,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Next
Else
Dim
local
=
DirectCast
(
variableDeclarations
,
BoundLocalDeclaration
).
LocalSymbol
Dim
slot
=
Mak
eSlot
(
local
)
Dim
slot
=
GetOrCreat
eSlot
(
local
)
If
slot
>=
0
Then
SetSlotAssigned
(
slot
)
NoteWrite
(
local
,
Nothing
)
...
...
@@ -1973,7 +2026,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
' An initializer might access the declared variables in the initializer and therefore need to create a slot to
' track them
For
Each
localDeclaration
In
declarations
Mak
eSlot
(
localDeclaration
.
LocalSymbol
)
GetOrCreat
eSlot
(
localDeclaration
.
LocalSymbol
)
Next
' NOTE: in case 'variableIsUsedDirectlyAndIsAlwaysAssigned' is set it must be
...
...
src/Compilers/VisualBasic/Portable/Analysis/FlowAnalysis/DataFlowsOutWalker.vb
浏览文件 @
3b4e5f9d
...
...
@@ -66,7 +66,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
' that flows in is assigned at the beginning of the loop. If it isn't, then it must
' be in a loop and flow out of the region in that loop (and into the region inside the loop).
For
Each
variable
As
Symbol
In
_dataFlowsIn
Dim
slot
As
Integer
=
Me
.
Mak
eSlot
(
variable
)
Dim
slot
As
Integer
=
Me
.
GetOrCreat
eSlot
(
variable
)
If
Not
Me
.
State
.
IsAssigned
(
slot
)
AndAlso
variable
.
Kind
<>
SymbolKind
.
RangeVariable
AndAlso
(
variable
.
Kind
<>
SymbolKind
.
Local
OrElse
Not
DirectCast
(
variable
,
LocalSymbol
).
IsStatic
)
Then
_dataFlowsOut
.
Add
(
variable
)
...
...
src/Compilers/VisualBasic/Portable/Analysis/IteratorAndAsyncAnalysis/IteratorAndAsyncCaptureWalker.vb
浏览文件 @
3b4e5f9d
...
...
@@ -150,7 +150,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Protected
Overrides
Sub
EnterParameter
(
parameter
As
ParameterSymbol
)
' parameters are NOT initially assigned here - if that is a problem, then
' the parameters must be captured.
Mak
eSlot
(
parameter
)
GetOrCreat
eSlot
(
parameter
)
' Instead of analyzing which parameters are actually being referenced
' we add all of them; this might need to be revised later
...
...
@@ -220,7 +220,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Dim
result
As
BoundNode
=
Nothing
For
Each
local
In
node
.
Locals
SetSlotState
(
Mak
eSlot
(
local
),
True
)
SetSlotState
(
GetOrCreat
eSlot
(
local
),
True
)
Next
result
=
MyBase
.
VisitSequence
(
node
)
For
Each
local
In
node
.
Locals
...
...
src/Compilers/VisualBasic/Portable/Symbols/Tuples/TupleTypeSymbol.vb
浏览文件 @
3b4e5f9d
...
...
@@ -28,6 +28,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Symbols
Friend
Const
RestPosition
As
Integer
=
8
Friend
Const
TupleTypeName
As
String
=
"ValueTuple"
Friend
Const
RestFieldName
As
String
=
"Rest"
Private
Shared
ReadOnly
tupleTypes
As
WellKnownType
()
=
New
WellKnownType
()
{
WellKnownType
.
System_ValueTuple_T1
,
WellKnownType
.
System_ValueTuple_T2
,
WellKnownType
.
System_ValueTuple_T3
,
WellKnownType
.
System_ValueTuple_T4
,
WellKnownType
.
System_ValueTuple_T5
,
WellKnownType
.
System_ValueTuple_T6
,
WellKnownType
.
System_ValueTuple_T7
,
WellKnownType
.
System_ValueTuple_TRest
}
...
...
src/Compilers/VisualBasic/Test/Emit/CodeGen/CodeGenTuples.vb
浏览文件 @
3b4e5f9d
此差异已折叠。
点击以展开。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录