Implemented vb conversionkind support.

上级 535d9570
...@@ -432,7 +432,7 @@ Namespace Microsoft.CodeAnalysis.Semantics ...@@ -432,7 +432,7 @@ Namespace Microsoft.CodeAnalysis.Semantics
Private Function CreateBoundConversionOperation(boundConversion As BoundConversion) As IConversionExpression Private Function CreateBoundConversionOperation(boundConversion As BoundConversion) As IConversionExpression
Dim operand As Lazy(Of IOperation) = New Lazy(Of IOperation)(Function() Create(boundConversion.Operand)) Dim operand As Lazy(Of IOperation) = New Lazy(Of IOperation)(Function() Create(boundConversion.Operand))
Dim conversionKind As ConversionKind = Semantics.ConversionKind.Basic Dim conversionKind As ConversionKind = GetConversionKind(boundConversion.ConversionKind)
Dim isExplicit As Boolean = boundConversion.ExplicitCastInCode Dim isExplicit As Boolean = boundConversion.ExplicitCastInCode
Dim usesOperatorMethod As Boolean = False Dim usesOperatorMethod As Boolean = False
Dim operatorMethod As IMethodSymbol = Nothing Dim operatorMethod As IMethodSymbol = Nothing
......
...@@ -439,6 +439,28 @@ Namespace Microsoft.CodeAnalysis.Semantics ...@@ -439,6 +439,28 @@ Namespace Microsoft.CodeAnalysis.Semantics
[event], instance, Create(statement.Handler), adds:=False, isInvalid:=statement.HasErrors, syntax:=statement.Syntax, type:=Nothing, constantValue:=Nothing) [event], instance, Create(statement.Handler), adds:=False, isInvalid:=statement.HasErrors, syntax:=statement.Syntax, type:=Nothing, constantValue:=Nothing)
End Function End Function
Private Function GetConversionKind(kind As VisualBasic.ConversionKind) As Semantics.ConversionKind
Dim operationKind = Semantics.ConversionKind.Invalid
If kind.HasFlag(VisualBasic.ConversionKind.UserDefined) Then
operationKind = Semantics.ConversionKind.OperatorMethod
ElseIf Conversions.IsIdentityConversion(kind) Or
kind.HasFlag(VisualBasic.ConversionKind.Reference) Or
kind.HasFlag(VisualBasic.ConversionKind.TypeParameter) Or
kind.HasFlag(VisualBasic.ConversionKind.Array) Or
kind.HasFlag(VisualBasic.ConversionKind.Value) Then
operationKind = Semantics.ConversionKind.Cast
ElseIf Conversions.NoConversion(kind) Then
operationKind = Semantics.ConversionKind.Invalid
ElseIf kind.HasFlag(VisualBasic.ConversionKind.InterpolatedString) Then
operationKind = Semantics.ConversionKind.InterpolatedString
Else
operationKind = Semantics.ConversionKind.Basic
End If
Return operationKind
End Function
Friend Class Helper Friend Class Helper
Friend Shared Function DeriveUnaryOperationKind(operatorKind As UnaryOperatorKind) As UnaryOperationKind Friend Shared Function DeriveUnaryOperationKind(operatorKind As UnaryOperatorKind) As UnaryOperationKind
Select Case operatorKind And UnaryOperatorKind.OpMask Select Case operatorKind And UnaryOperatorKind.OpMask
......
...@@ -134,7 +134,7 @@ Class Program ...@@ -134,7 +134,7 @@ Class Program
End Class]]>.Value End Class]]>.Value
Dim expectedOperationTree = <![CDATA[ Dim expectedOperationTree = <![CDATA[
IConversionExpression (ConversionKind.Basic, Implicit) (OperationKind.ConversionExpression, Type: Program, IsInvalid) (Syntax: 'x.i1') IConversionExpression (ConversionKind.Invalid, Implicit) (OperationKind.ConversionExpression, Type: Program, IsInvalid) (Syntax: 'x.i1')
IFieldReferenceExpression: Program.i1 As System.Int32 (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: 'x.i1') IFieldReferenceExpression: Program.i1 As System.Int32 (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: 'x.i1')
Instance Receiver: ILocalReferenceExpression: x (OperationKind.LocalReferenceExpression, Type: Program) (Syntax: 'x') Instance Receiver: ILocalReferenceExpression: x (OperationKind.LocalReferenceExpression, Type: Program) (Syntax: 'x')
]]>.Value ]]>.Value
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册