提交 19708501 编写于 作者: A ADGreen

Renamed VB's CaseElse-, CaseValue-, CaseRelational-, and CaseRangeClause...

Renamed VB's CaseElse-, CaseValue-, CaseRelational-, and CaseRangeClause nodes/kinds to match .NET conventions for derived types - <Specialization>BaseName instead of their current BaseFirstWord<Specialization>BaseLastWord pattern. (changeset 1264911)
上级 10e6ff97
......@@ -943,9 +943,9 @@ Public Module VerificationHelpers
MyBase.VisitPartitionWhileClause(node)
End Sub
Public Overrides Sub VisitCaseRangeClause(node As CaseRangeClauseSyntax)
Public Overrides Sub VisitRangeCaseClause(node As RangeCaseClauseSyntax)
IncrementTypeCounter(node, node.Kind.ToString)
MyBase.VisitCaseRangeClause(node)
MyBase.VisitRangeCaseClause(node)
End Sub
Public Overrides Sub VisitRangeArgument(node As RangeArgumentSyntax)
......
......@@ -1749,12 +1749,12 @@ lUnsplitAndFinish:
Else
For Each clause In node.CaseClauses
Select Case clause.Kind
Case BoundKind.CaseRelationalClause
VisitCaseRelationalClause(DirectCast(clause, BoundCaseRelationalClause))
Case BoundKind.CaseValueClause
VisitCaseValueClause(DirectCast(clause, BoundCaseValueClause))
Case BoundKind.CaseRangeClause
VisitCaseRangeClause(DirectCast(clause, BoundCaseRangeClause))
Case BoundKind.RelationalCaseClause
VisitRelationalCaseClause(DirectCast(clause, BoundRelationalCaseClause))
Case BoundKind.SimpleCaseClause
VisitSimpleCaseClause(DirectCast(clause, BoundSimpleCaseClause))
Case BoundKind.RangeCaseClause
VisitRangeCaseClause(DirectCast(clause, BoundRangeCaseClause))
Case Else
Throw ExceptionUtilities.UnexpectedValue(clause.Kind)
End Select
......@@ -1764,7 +1764,7 @@ lUnsplitAndFinish:
Return Nothing
End Function
Public Overrides Function VisitCaseRelationalClause(node As BoundCaseRelationalClause) As BoundNode
Public Overrides Function VisitRelationalCaseClause(node As BoundRelationalCaseClause) As BoundNode
' Exactly one of the operand or condition must be non-null
Debug.Assert(node.OperandOpt IsNot Nothing Xor node.ConditionOpt IsNot Nothing)
......@@ -1777,7 +1777,7 @@ lUnsplitAndFinish:
Return Nothing
End Function
Public Overrides Function VisitCaseValueClause(node As BoundCaseValueClause) As BoundNode
Public Overrides Function VisitSimpleCaseClause(node As BoundSimpleCaseClause) As BoundNode
' Exactly one of the value or condition must be non-null
Debug.Assert(node.ValueOpt IsNot Nothing Xor node.ConditionOpt IsNot Nothing)
......@@ -1790,7 +1790,7 @@ lUnsplitAndFinish:
Return Nothing
End Function
Public Overrides Function VisitCaseRangeClause(node As BoundCaseRangeClause) As BoundNode
Public Overrides Function VisitRangeCaseClause(node As BoundRangeCaseClause) As BoundNode
' Exactly one of the LowerBoundOpt or LowerBoundConditionOpt must be non-null
Debug.Assert(node.LowerBoundOpt IsNot Nothing Xor node.LowerBoundConditionOpt IsNot Nothing)
......
......@@ -166,21 +166,21 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
SyntaxKind.CaseGreaterThanClause, SyntaxKind.CaseGreaterThanOrEqualClause,
SyntaxKind.CaseLessThanClause, SyntaxKind.CaseLessThanOrEqualClause
Return BindCaseRelationalClause(DirectCast(node, CaseRelationalClauseSyntax), selectExpression, convertCaseElements, diagnostics)
Return BindRelationalCaseClause(DirectCast(node, RelationalCaseClauseSyntax), selectExpression, convertCaseElements, diagnostics)
Case SyntaxKind.CaseValueClause
Return BindCaseValueClause(DirectCast(node, CaseValueClauseSyntax), selectExpression, convertCaseElements, diagnostics)
Case SyntaxKind.SimpleCaseClause
Return BindSimpleCaseClause(DirectCast(node, SimpleCaseClauseSyntax), selectExpression, convertCaseElements, diagnostics)
Case SyntaxKind.CaseRangeClause
Return BindCaseRangeClause(DirectCast(node, CaseRangeClauseSyntax), selectExpression, convertCaseElements, diagnostics)
Case SyntaxKind.RangeCaseClause
Return BindRangeCaseClause(DirectCast(node, RangeCaseClauseSyntax), selectExpression, convertCaseElements, diagnostics)
Case Else
Throw ExceptionUtilities.UnexpectedValue(node.Kind)
End Select
End Function
Private Function BindCaseRelationalClause(
node As CaseRelationalClauseSyntax,
Private Function BindRelationalCaseClause(
node As RelationalCaseClauseSyntax,
selectExpression As BoundExpression,
convertCaseElements As Boolean,
diagnostics As DiagnosticBag
......@@ -223,11 +223,11 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
conditionOpt:=conditionOpt,
diagnostics:=diagnostics)
Return New BoundCaseRelationalClause(node, operatorKind, operandE1, conditionOpt)
Return New BoundRelationalCaseClause(node, operatorKind, operandE1, conditionOpt)
End Function
Private Function BindCaseValueClause(
node As CaseValueClauseSyntax,
Private Function BindSimpleCaseClause(
node As SimpleCaseClauseSyntax,
selectExpression As BoundExpression,
convertCaseElements As Boolean,
diagnostics As DiagnosticBag
......@@ -255,11 +255,11 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
conditionOpt:=conditionOpt,
diagnostics:=diagnostics)
Return New BoundCaseValueClause(node, value, conditionOpt)
Return New BoundSimpleCaseClause(node, value, conditionOpt)
End Function
Private Function BindCaseRangeClause(
node As CaseRangeClauseSyntax,
Private Function BindRangeCaseClause(
node As RangeCaseClauseSyntax,
selectExpression As BoundExpression,
convertCaseElements As Boolean,
diagnostics As DiagnosticBag
......@@ -299,7 +299,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
conditionOpt:=upperBoundConditionOpt,
diagnostics:=diagnostics)
Return New BoundCaseRangeClause(node, lowerBound, upperBound, lowerBoundConditionOpt, upperBoundConditionOpt)
Return New BoundRangeCaseClause(node, lowerBound, upperBound, lowerBoundConditionOpt, upperBoundConditionOpt)
End Function
Private Function BindCaseClauseExpression(
......@@ -441,22 +441,22 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Private Function ComputeCaseClauseCondition(caseClause As BoundCaseClause, <Out()> ByRef conditionOpt As BoundExpression, selectExpression As BoundExpression, diagnostics As DiagnosticBag) As BoundCaseClause
Select Case caseClause.Kind
Case BoundKind.CaseRelationalClause
Return ComputeCaseRelationalClauseCondition(DirectCast(caseClause, BoundCaseRelationalClause), conditionOpt, selectExpression, diagnostics)
Case BoundKind.RelationalCaseClause
Return ComputeRelationalCaseClauseCondition(DirectCast(caseClause, BoundRelationalCaseClause), conditionOpt, selectExpression, diagnostics)
Case BoundKind.CaseValueClause
Return ComputeCaseValueClauseCondition(DirectCast(caseClause, BoundCaseValueClause), conditionOpt, selectExpression, diagnostics)
Case BoundKind.SimpleCaseClause
Return ComputeSimpleCaseClauseCondition(DirectCast(caseClause, BoundSimpleCaseClause), conditionOpt, selectExpression, diagnostics)
Case BoundKind.CaseRangeClause
Return ComputeCaseRangeClauseCondition(DirectCast(caseClause, BoundCaseRangeClause), conditionOpt, selectExpression, diagnostics)
Case BoundKind.RangeCaseClause
Return ComputeRangeCaseClauseCondition(DirectCast(caseClause, BoundRangeCaseClause), conditionOpt, selectExpression, diagnostics)
Case Else
Throw ExceptionUtilities.UnexpectedValue(caseClause.Kind)
End Select
End Function
Private Function ComputeCaseRelationalClauseCondition(boundClause As BoundCaseRelationalClause, <Out()> ByRef conditionOpt As BoundExpression, selectExpression As BoundExpression, diagnostics As DiagnosticBag) As BoundCaseClause
Dim syntax = DirectCast(boundClause.Syntax, CaseRelationalClauseSyntax)
Private Function ComputeRelationalCaseClauseCondition(boundClause As BoundRelationalCaseClause, <Out()> ByRef conditionOpt As BoundExpression, selectExpression As BoundExpression, diagnostics As DiagnosticBag) As BoundCaseClause
Dim syntax = DirectCast(boundClause.Syntax, RelationalCaseClauseSyntax)
' Exactly one of the operand or condition must be non-null
Debug.Assert(boundClause.ConditionOpt IsNot Nothing Xor boundClause.OperandOpt IsNot Nothing)
......@@ -473,7 +473,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return boundClause.Update(boundClause.OperatorKind, operandOpt:=Nothing, conditionOpt:=conditionOpt)
End Function
Private Function ComputeCaseValueClauseCondition(boundClause As BoundCaseValueClause, <Out()> ByRef conditionOpt As BoundExpression, selectExpression As BoundExpression, diagnostics As DiagnosticBag) As BoundCaseClause
Private Function ComputeSimpleCaseClauseCondition(boundClause As BoundSimpleCaseClause, <Out()> ByRef conditionOpt As BoundExpression, selectExpression As BoundExpression, diagnostics As DiagnosticBag) As BoundCaseClause
' Exactly one of the value or condition must be non-null
Debug.Assert(boundClause.ConditionOpt IsNot Nothing Xor boundClause.ValueOpt IsNot Nothing)
......@@ -489,7 +489,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return boundClause.Update(valueOpt:=Nothing, conditionOpt:=conditionOpt)
End Function
Private Function ComputeCaseRangeClauseCondition(boundClause As BoundCaseRangeClause, <Out()> ByRef conditionOpt As BoundExpression, selectExpression As BoundExpression, diagnostics As DiagnosticBag) As BoundCaseClause
Private Function ComputeRangeCaseClauseCondition(boundClause As BoundRangeCaseClause, <Out()> ByRef conditionOpt As BoundExpression, selectExpression As BoundExpression, diagnostics As DiagnosticBag) As BoundCaseClause
Dim syntax = boundClause.Syntax
' Exactly one of the LowerBoundOpt or LowerBoundConditionOpt must be non-null
......@@ -551,7 +551,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
' ranges must have lower bound first
' We also generate warnings for Invalid range clauses in this function.
' Ideally we would like to generate them in BindCaseRangeClause.
' Ideally we would like to generate them in BindRangeCaseClause.
' However, Dev10 doesn't do this check individually for each CaseClause.
' It is performed only if bounds for all clauses in the Select are integer constants and
' all clauses are either range clauses or equality clause.
......@@ -571,8 +571,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
For Each caseBlock In caseBlocks
For Each caseClause In caseBlock.CaseStatement.CaseClauses
Select Case caseClause.Kind
Case BoundKind.CaseRelationalClause
Dim relationalClause = DirectCast(caseClause, BoundCaseRelationalClause)
Case BoundKind.RelationalCaseClause
Dim relationalClause = DirectCast(caseClause, BoundRelationalCaseClause)
' Exactly one of the operand or condition must be non-null
Debug.Assert(relationalClause.OperandOpt IsNot Nothing Xor relationalClause.ConditionOpt IsNot Nothing)
......@@ -587,7 +587,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Return False
End If
Case BoundKind.CaseRangeClause
Case BoundKind.RangeCaseClause
' TODO: RecommendSwitchTable for Range clause.
' TODO: If we decide to implement it we will need to
' TODO: add heuristic to determine when the range is
......@@ -595,17 +595,17 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
' TODO: We will also need to add logic in the emitter
' TODO: to iterate through ConstantValues in a range.
' For now we use IF lists if we encounter BoundCaseRangeClause
Dim caseRangeClause = DirectCast(caseClause, BoundCaseRangeClause)
' For now we use IF lists if we encounter BoundRangeCaseClause
Dim rangeCaseClause = DirectCast(caseClause, BoundRangeCaseClause)
' Exactly one of the LowerBoundOpt or LowerBoundConditionOpt must be non-null
Debug.Assert(caseRangeClause.LowerBoundOpt IsNot Nothing Xor caseRangeClause.LowerBoundConditionOpt IsNot Nothing)
Debug.Assert(rangeCaseClause.LowerBoundOpt IsNot Nothing Xor rangeCaseClause.LowerBoundConditionOpt IsNot Nothing)
' Exactly one of the UpperBoundOpt or UpperBoundConditionOpt must be non-null
Debug.Assert(caseRangeClause.UpperBoundOpt IsNot Nothing Xor caseRangeClause.UpperBoundConditionOpt IsNot Nothing)
Debug.Assert(rangeCaseClause.UpperBoundOpt IsNot Nothing Xor rangeCaseClause.UpperBoundConditionOpt IsNot Nothing)
Dim lowerBound = caseRangeClause.LowerBoundOpt
Dim upperBound = caseRangeClause.UpperBoundOpt
Dim lowerBound = rangeCaseClause.LowerBoundOpt
Dim upperBound = rangeCaseClause.UpperBoundOpt
If lowerBound Is Nothing OrElse
upperBound Is Nothing OrElse
......@@ -620,12 +620,12 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
recommendSwitch = False
Case Else
Dim caseValueClause = DirectCast(caseClause, BoundCaseValueClause)
Dim simpleCaseClause = DirectCast(caseClause, BoundSimpleCaseClause)
' Exactly one of the value or condition must be non-null
Debug.Assert(caseValueClause.ValueOpt IsNot Nothing Xor caseValueClause.ConditionOpt IsNot Nothing)
Debug.Assert(simpleCaseClause.ValueOpt IsNot Nothing Xor simpleCaseClause.ConditionOpt IsNot Nothing)
Dim value = caseValueClause.ValueOpt
Dim value = simpleCaseClause.ValueOpt
If value Is Nothing OrElse
value.ConstantValueOpt Is Nothing OrElse
......@@ -648,21 +648,21 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
For Each caseBlock In caseBlocks
For Each caseClause In caseBlock.CaseStatement.CaseClauses
Select Case caseClause.Kind
Case BoundKind.CaseRangeClause
Dim caseRangeClause = DirectCast(caseClause, BoundCaseRangeClause)
Case BoundKind.RangeCaseClause
Dim rangeCaseClause = DirectCast(caseClause, BoundRangeCaseClause)
Dim lowerBound = caseRangeClause.LowerBoundOpt
Dim upperBound = caseRangeClause.UpperBoundOpt
Dim lowerBound = rangeCaseClause.LowerBoundOpt
Dim upperBound = rangeCaseClause.UpperBoundOpt
Debug.Assert(lowerBound IsNot Nothing)
Debug.Assert(lowerBound.ConstantValueOpt IsNot Nothing)
Debug.Assert(upperBound IsNot Nothing)
Debug.Assert(upperBound.ConstantValueOpt IsNot Nothing)
Debug.Assert(caseRangeClause.LowerBoundConditionOpt Is Nothing)
Debug.Assert(caseRangeClause.UpperBoundConditionOpt Is Nothing)
Debug.Assert(rangeCaseClause.LowerBoundConditionOpt Is Nothing)
Debug.Assert(rangeCaseClause.UpperBoundConditionOpt Is Nothing)
If IsInvalidSelectCaseRange(lowerBound.ConstantValueOpt, upperBound.ConstantValueOpt) Then
ReportDiagnostic(diagnostics, caseRangeClause.Syntax, ERRID.WRN_SelectCaseInvalidRange)
ReportDiagnostic(diagnostics, rangeCaseClause.Syntax, ERRID.WRN_SelectCaseInvalidRange)
Return True
End If
End Select
......
......@@ -1006,19 +1006,19 @@
<AbstractNode Name="BoundCaseClause" Base="BoundNode">
</AbstractNode>
<Node Name="BoundCaseValueClause" Base="BoundCaseClause">
<Node Name="BoundSimpleCaseClause" Base="BoundCaseClause">
<Field Name="ValueOpt" Type="BoundExpression" Null="allow"/>
<Field Name="ConditionOpt" Type="BoundExpression" Null="allow"/>
</Node>
<Node Name="BoundCaseRangeClause" Base="BoundCaseClause">
<Node Name="BoundRangeCaseClause" Base="BoundCaseClause">
<Field Name="LowerBoundOpt" Type="BoundExpression" Null="allow"/>
<Field Name="UpperBoundOpt" Type="BoundExpression" Null="allow"/>
<Field Name="LowerBoundConditionOpt" Type="BoundExpression" Null="allow"/>
<Field Name="UpperBoundConditionOpt" Type="BoundExpression" Null="allow"/>
</Node>
<Node Name="BoundCaseRelationalClause" Base="BoundCaseClause">
<Node Name="BoundRelationalCaseClause" Base="BoundCaseClause">
<Field Name="OperatorKind" Type="BinaryOperatorKind"/>
<Field Name="OperandOpt" Type="BoundExpression" Null="allow"/>
<Field Name="ConditionOpt" Type="BoundExpression" Null="allow"/>
......
......@@ -981,26 +981,26 @@ OtherExpressions:
Dim constant As ConstantValue
Select Case caseClause.Kind
Case BoundKind.CaseValueClause
Dim caseValueClause = DirectCast(caseClause, BoundCaseValueClause)
Case BoundKind.SimpleCaseClause
Dim simpleCaseClause = DirectCast(caseClause, BoundSimpleCaseClause)
Debug.Assert(caseValueClause.ValueOpt IsNot Nothing)
Debug.Assert(caseValueClause.ConditionOpt Is Nothing)
Debug.Assert(simpleCaseClause.ValueOpt IsNot Nothing)
Debug.Assert(simpleCaseClause.ConditionOpt Is Nothing)
constant = caseValueClause.ValueOpt.ConstantValueOpt
constant = simpleCaseClause.ValueOpt.ConstantValueOpt
Case BoundKind.CaseRelationalClause
Dim caseRelationalClause = DirectCast(caseClause, BoundCaseRelationalClause)
Case BoundKind.RelationalCaseClause
Dim relationalCaseClause = DirectCast(caseClause, BoundRelationalCaseClause)
Debug.Assert(caseRelationalClause.OperatorKind = BinaryOperatorKind.Equals)
Debug.Assert(caseRelationalClause.OperandOpt IsNot Nothing)
Debug.Assert(caseRelationalClause.ConditionOpt Is Nothing)
Debug.Assert(relationalCaseClause.OperatorKind = BinaryOperatorKind.Equals)
Debug.Assert(relationalCaseClause.OperandOpt IsNot Nothing)
Debug.Assert(relationalCaseClause.ConditionOpt Is Nothing)
constant = caseRelationalClause.OperandOpt.ConstantValueOpt
constant = relationalCaseClause.OperandOpt.ConstantValueOpt
Case BoundKind.CaseRangeClause
Case BoundKind.RangeCaseClause
' TODO: For now we use IF lists if we encounter
' TODO: BoundCaseRangeClause, we should not reach here.
' TODO: BoundRangeCaseClause, we should not reach here.
Throw ExceptionUtilities.UnexpectedValue(caseClause.Kind)
Case Else
......
......@@ -330,22 +330,22 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
For Each caseClause In caseBlock.CaseStatement.CaseClauses
Dim constant As ConstantValue = Nothing
Select Case caseClause.Kind
Case BoundKind.CaseValueClause
Dim caseValueClause = DirectCast(caseClause, BoundCaseValueClause)
Case BoundKind.SimpleCaseClause
Dim simpleCaseClause = DirectCast(caseClause, BoundSimpleCaseClause)
Debug.Assert(caseValueClause.ValueOpt IsNot Nothing)
Debug.Assert(caseValueClause.ConditionOpt Is Nothing)
Debug.Assert(simpleCaseClause.ValueOpt IsNot Nothing)
Debug.Assert(simpleCaseClause.ConditionOpt Is Nothing)
constant = caseValueClause.ValueOpt.ConstantValueOpt
constant = simpleCaseClause.ValueOpt.ConstantValueOpt
Case BoundKind.CaseRelationalClause
Dim caseRelationalClause = DirectCast(caseClause, BoundCaseRelationalClause)
Case BoundKind.RelationalCaseClause
Dim relationalCaseClause = DirectCast(caseClause, BoundRelationalCaseClause)
Debug.Assert(caseRelationalClause.OperatorKind = BinaryOperatorKind.Equals)
Debug.Assert(caseRelationalClause.OperandOpt IsNot Nothing)
Debug.Assert(caseRelationalClause.ConditionOpt Is Nothing)
Debug.Assert(relationalCaseClause.OperatorKind = BinaryOperatorKind.Equals)
Debug.Assert(relationalCaseClause.OperandOpt IsNot Nothing)
Debug.Assert(relationalCaseClause.ConditionOpt Is Nothing)
constant = caseRelationalClause.OperandOpt.ConstantValueOpt
constant = relationalCaseClause.OperandOpt.ConstantValueOpt
Case Else
Throw ExceptionUtilities.UnexpectedValue(caseClause.Kind)
......
......@@ -655,7 +655,7 @@ nextm:
Private Sub CheckSwitchSections(sections As ImmutableArray(Of BoundCaseBlock))
Dim labels = New HashSet(Of Integer)()
For Each s In sections
For Each l As BoundCaseValueClause In s.CaseStatement.CaseClauses
For Each l As BoundSimpleCaseClause In s.CaseStatement.CaseClauses
Dim v1 = l.ValueOpt.ConstantValueOpt.Int32Value
Debug.Assert(Not labels.Contains(v1))
labels.Add(v1)
......@@ -664,7 +664,7 @@ nextm:
End Sub
'Public Function SwitchSection(value As Integer, ParamArray statements As BoundStatement()) As BoundCaseBlock
' Dim boundCaseClause = New BoundCaseValueClause(_syntax, Literal(value), Nothing)
' Dim boundCaseClause = New BoundSimpleCaseClause(_syntax, Literal(value), Nothing)
' boundCaseClause.SetWasCompilerGenerated()
' Dim boundCaseStatement = New BoundCaseStatement(_syntax, ImmutableArray(Of BoundCaseClause).CreateFrom(boundCaseClause), Nothing)
' boundCaseStatement.SetWasCompilerGenerated()
......@@ -676,7 +676,7 @@ nextm:
Public Function SwitchSection(values As List(Of Integer), ParamArray statements As BoundStatement()) As BoundCaseBlock
Dim builder = ArrayBuilder(Of BoundCaseClause).GetInstance()
For Each i In values
Dim boundCaseClause = New BoundCaseValueClause(_syntax, Literal(i), Nothing)
Dim boundCaseClause = New BoundSimpleCaseClause(_syntax, Literal(i), Nothing)
boundCaseClause.SetWasCompilerGenerated()
builder.Add(boundCaseClause)
Next
......
......@@ -247,7 +247,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax
elseKeyword = DirectCast(CurrentToken, KeywordSyntax)
GetNextToken() '// get off ELSE
Dim caseClause = SyntaxFactory.CaseElseClause(elseKeyword)
Dim caseClause = SyntaxFactory.ElseCaseClause(elseKeyword)
caseClauses.Add(caseClause)
Else
......@@ -274,7 +274,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax
CaseExpr = ResyncAt(CaseExpr)
End If
caseClause = SyntaxFactory.CaseRelationalClause(RelationalOperatorKindToCaseKind(relationalOperator.Kind), optionalIsKeyword, relationalOperator, CaseExpr)
caseClause = SyntaxFactory.RelationalCaseClause(RelationalOperatorKindToCaseKind(relationalOperator.Kind), optionalIsKeyword, relationalOperator, CaseExpr)
Else
' Since we saw IS, create a relational case.
......@@ -282,7 +282,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax
' the operators that can follow "Is".
Dim relationalOperator = ReportSyntaxError(InternalSyntaxFactory.MissingPunctuation(SyntaxKind.EqualsToken), ERRID.ERR_ExpectedRelational)
caseClause = ResyncAt(InternalSyntaxFactory.CaseRelationalClause(SyntaxKind.CaseEqualsClause, optionalIsKeyword, relationalOperator, InternalSyntaxFactory.MissingExpression))
caseClause = ResyncAt(InternalSyntaxFactory.RelationalCaseClause(SyntaxKind.CaseEqualsClause, optionalIsKeyword, relationalOperator, InternalSyntaxFactory.MissingExpression))
End If
Else
......@@ -302,10 +302,10 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Syntax.InternalSyntax
upperBound = ResyncAt(upperBound)
End If
caseClause = SyntaxFactory.CaseRangeClause(value, toKeyword, upperBound)
caseClause = SyntaxFactory.RangeCaseClause(value, toKeyword, upperBound)
Else
caseClause = SyntaxFactory.CaseValueClause(value)
caseClause = SyntaxFactory.SimpleCaseClause(value)
End If
End If
......
......@@ -3872,7 +3872,7 @@ Unify Enum declarations with other block type declarations.
<child name="Cases" list="true" separator-kind="CommaToken" separator-name="CommaTokens" kind="@CaseClauseSyntax">
<description>
A list of clauses associated with this Case. If Kind=CaseElse, then this list has exactly one child,
which is a CaseElseClause.
which is a ElseCaseClause.
</description>
<lm-equiv name="Cases"></lm-equiv>
<native-equiv name="Cases"></native-equiv>
......@@ -3889,16 +3889,16 @@ Unify Enum declarations with other block type declarations.
</node-structure>
<!--****************
- CaseElseClause
- ElseCaseClause
******************-->
<node-structure name="CaseElseClauseSyntax" parent="CaseClauseSyntax">
<node-structure name="ElseCaseClauseSyntax" parent="CaseClauseSyntax">
<description>The "Else" part in a Case Else statement.</description>
<lm-equiv name="CaseElseBranchNode"></lm-equiv>
<native-equiv name="ExecutableBlockStatement"></native-equiv>
<spec-section>10.8.2</spec-section>
<grammar>CaseElseStatement</grammar>
<node-kind name="CaseElseClause" />
<node-kind name="ElseCaseClause" />
<child name="ElseKeyword" kind="ElseKeyword">
<description>The "Else" keyword.</description>
......@@ -3908,16 +3908,16 @@ Unify Enum declarations with other block type declarations.
</node-structure>
<!--****************
- CaseValueClause
- SimpleCaseClause
******************-->
<node-structure name="CaseValueClauseSyntax" parent="CaseClauseSyntax">
<node-structure name="SimpleCaseClauseSyntax" parent="CaseClauseSyntax">
<description>Represents a single value in a Case.</description>
<lm-equiv name="RangeNode"></lm-equiv>
<native-equiv name="ValueCase"></native-equiv>
<spec-section>10.8.2</spec-section>
<grammar>CaseClause</grammar>
<node-kind name="CaseValueClause">
<node-kind name="SimpleCaseClause">
<lm-equiv name="Range" />
<native-equiv name="Case.Opcodes.ValueCase" />
</node-kind>
......@@ -3929,16 +3929,16 @@ Unify Enum declarations with other block type declarations.
</node-structure>
<!--****************
- CaseRangeClause
- RangeCaseClause
******************-->
<node-structure name="CaseRangeClauseSyntax" parent="CaseClauseSyntax">
<node-structure name="RangeCaseClauseSyntax" parent="CaseClauseSyntax">
<description>Represents a range "expression To expression" in a Case.</description>
<lm-equiv name="RangeNode"></lm-equiv>
<native-equiv name="RangeCase"></native-equiv>
<spec-section>10.8.2</spec-section>
<grammar>CaseClause</grammar>
<node-kind name="CaseRangeClause">
<node-kind name="RangeCaseClause">
<lm-equiv name="Range" />
<native-equiv name="Case.Opcodes.RangeCase" />
</node-kind>
......@@ -3963,9 +3963,9 @@ Unify Enum declarations with other block type declarations.
</node-structure>
<!--****************
- CaseRelationalClause
- RelationalCaseClause
******************-->
<node-structure name="CaseRelationalClauseSyntax" parent="CaseClauseSyntax">
<node-structure name="RelationalCaseClauseSyntax" parent="CaseClauseSyntax">
<description>Represents a relation clause in a Case statement, such as "Is &gt; expression".</description>
<lm-equiv name="RelationalCaseNode"></lm-equiv>
<native-equiv name="RelationalCase"></native-equiv>
......
......@@ -477,8 +477,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Syntax
' case > 100 should keep separator
' need to test before xml analysis below
If SyntaxFacts.IsCaseRelationalClause(token.Parent.VisualBasicKind()) OrElse
SyntaxFacts.IsCaseRelationalClause(nextToken.Parent.VisualBasicKind()) Then
If SyntaxFacts.IsRelationalCaseClause(token.Parent.VisualBasicKind()) OrElse
SyntaxFacts.IsRelationalCaseClause(nextToken.Parent.VisualBasicKind()) Then
Return True
End If
......
......@@ -375,13 +375,13 @@ End Module
End Sub
<Fact()>
Public Sub SelectCase_CaseRelationalClauseExpression_Literal()
Public Sub SelectCase_RelationalCaseClauseExpression_Literal()
Dim compilation = CreateCompilationWithMscorlib(
<compilation>
<file name="a.vb"><![CDATA[
Imports System
Module M1
Sub CaseRelationalClauseExpression(number As Integer)
Sub RelationalCaseClauseExpression(number As Integer)
Select Case number
Case Is < 1'BIND:"1"
End Select
......@@ -411,7 +411,7 @@ End Module
End Sub
<Fact()>
Public Sub SelectCase_CaseRangeClauseExpression_MethodCall()
Public Sub SelectCase_RangeCaseClauseExpression_MethodCall()
Dim compilation = CreateCompilationWithMscorlib(
<compilation>
<file name="a.vb"><![CDATA[
......@@ -421,7 +421,7 @@ Module M1
Return 0
End Function
Sub CaseRangeClauseExpression(number As Integer)
Sub RangeCaseClauseExpression(number As Integer)
Select Case number
Case Foo() To 1'BIND:"Foo()"
End Select
......@@ -450,7 +450,7 @@ End Module
End Sub
<Fact()>
Public Sub SelectCase_CaseValueClauseExpression_DateTime()
Public Sub SelectCase_SimpleCaseClauseExpression_DateTime()
Dim compilation = CreateCompilationWithMscorlib(
<compilation>
<file name="a.vb"><![CDATA[
......@@ -460,7 +460,7 @@ Module M1
Return 0
End Function
Sub CaseValueClauseExpression(number As Integer)
Sub SimpleCaseClauseExpression(number As Integer)
Select Case number
Case #8/13/2002 12:14 PM#'BIND:"#8/13/2002 12:14 PM#"
End Select
......
......@@ -336,23 +336,23 @@ End Namespace
<Fact>
Public Sub IsCaseRelationalClause()
Public Sub IsRelationalCaseClause()
Dim item As SyntaxKind
For Each item In New SyntaxKind() {SyntaxKind.CaseEqualsClause, SyntaxKind.CaseNotEqualsClause, SyntaxKind.CaseLessThanClause, SyntaxKind.CaseLessThanOrEqualClause, SyntaxKind.CaseGreaterThanOrEqualClause, SyntaxKind.CaseGreaterThanClause}
Assert.True(SyntaxFacts.IsCaseRelationalClause(item))
Assert.True(SyntaxFacts.IsRelationalCaseClause(item))
Next
Assert.False(SyntaxFacts.IsCaseRelationalClause(SyntaxKind.ExitKeyword))
Assert.False(SyntaxFacts.IsCaseRelationalClause(SyntaxKind.None))
Assert.False(SyntaxFacts.IsRelationalCaseClause(SyntaxKind.ExitKeyword))
Assert.False(SyntaxFacts.IsRelationalCaseClause(SyntaxKind.None))
End Sub
<Fact>
Public Sub IsCaseRelationalClauseOperatorToken()
Public Sub IsRelationalCaseClauseOperatorToken()
Dim item As SyntaxKind
For Each item In New SyntaxKind() {SyntaxKind.EqualsToken, SyntaxKind.LessThanGreaterThanToken, SyntaxKind.LessThanToken, SyntaxKind.LessThanEqualsToken, SyntaxKind.GreaterThanEqualsToken, SyntaxKind.GreaterThanToken}
Assert.True(SyntaxFacts.IsCaseRelationalClauseOperatorToken(item))
Assert.True(SyntaxFacts.IsRelationalCaseClauseOperatorToken(item))
Next
Assert.False(SyntaxFacts.IsCaseRelationalClauseOperatorToken(SyntaxKind.ExitKeyword))
Assert.False(SyntaxFacts.IsCaseRelationalClauseOperatorToken(SyntaxKind.None))
Assert.False(SyntaxFacts.IsRelationalCaseClauseOperatorToken(SyntaxKind.ExitKeyword))
Assert.False(SyntaxFacts.IsRelationalCaseClauseOperatorToken(SyntaxKind.None))
End Sub
<Fact>
......
......@@ -3331,7 +3331,7 @@ End Module
Dim root = tree.GetCompilationUnitRoot()
Dim collector = New SyntaxWalkerVerifier()
collector.Visit(root)
Assert.Equal(1, collector.GetCount(SyntaxKind.CaseRangeClause.ToString))
Assert.Equal(1, collector.GetCount(SyntaxKind.RangeCaseClause.ToString))
End Sub
<Fact()>
......
......@@ -242,9 +242,9 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.CodeGeneration
Public Overrides Function CreateSwitchLabel(Optional expressionOpt As SyntaxNode = Nothing) As SyntaxNode
If expressionOpt Is Nothing Then
Return SyntaxFactory.CaseElseStatement(SyntaxFactory.CaseElseClause())
Return SyntaxFactory.CaseElseStatement(SyntaxFactory.ElseCaseClause())
Else
Return SyntaxFactory.CaseStatement(SyntaxFactory.CaseValueClause(DirectCast(expressionOpt, ExpressionSyntax)))
Return SyntaxFactory.CaseStatement(SyntaxFactory.SimpleCaseClause(DirectCast(expressionOpt, ExpressionSyntax)))
End If
End Function
......
......@@ -312,8 +312,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Extensions.ContextQuery
targetToken.IsChildToken(Of CatchFilterClauseSyntax)(Function(catchFilterClauseSyntax) catchFilterClauseSyntax.WhenKeyword) OrElse
targetToken.IsChildToken(Of CaseStatementSyntax)(Function(caseStatement) caseStatement.CaseKeyword) OrElse
targetToken.IsChildSeparatorToken(Of CaseStatementSyntax, CaseClauseSyntax)(Function(caseStatement) caseStatement.Cases) OrElse
targetToken.IsChildToken(Of CaseRangeClauseSyntax)(Function(caseRangeClause) caseRangeClause.ToKeyword) OrElse
targetToken.IsChildToken(Of CaseRelationalClauseSyntax)(Function(caseRelationalClause) caseRelationalClause.OperatorToken) OrElse
targetToken.IsChildToken(Of RangeCaseClauseSyntax)(Function(rangeCaseClause) rangeCaseClause.ToKeyword) OrElse
targetToken.IsChildToken(Of RelationalCaseClauseSyntax)(Function(relationalCaseClause) relationalCaseClause.OperatorToken) OrElse
targetToken.IsChildToken(Of CastExpressionSyntax)(Function(castExpression) castExpression.OpenParenToken) OrElse
targetToken.IsChildToken(Of CollectionInitializerSyntax)(Function(collectionInitializer) collectionInitializer.OpenBraceToken) OrElse
targetToken.IsChildToken(Of CollectionRangeVariableSyntax)(Function(collectionRange) collectionRange.InKeyword) OrElse
......
......@@ -661,7 +661,7 @@ Namespace Microsoft.CodeAnalysis.VisualBasic
Private Function InferTypeInSelectStatement(switchStatementSyntax As SelectStatementSyntax, Optional previousToken As SyntaxToken = Nothing) As IEnumerable(Of ITypeSymbol)
' Use the first case label to determine the return type.
If TypeOf switchStatementSyntax.Parent Is SelectBlockSyntax Then
Dim firstCase = DirectCast(switchStatementSyntax.Parent, SelectBlockSyntax).CaseBlocks.SelectMany(Function(c) c.Begin.Cases).OfType(Of CaseValueClauseSyntax).FirstOrDefault()
Dim firstCase = DirectCast(switchStatementSyntax.Parent, SelectBlockSyntax).CaseBlocks.SelectMany(Function(c) c.Begin.Cases).OfType(Of SimpleCaseClauseSyntax).FirstOrDefault()
If firstCase IsNot Nothing Then
Return GetTypes(firstCase.Value)
End If
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册