Implemented vb conversionkind support.

上级 535d9570
......@@ -432,7 +432,7 @@ Namespace Microsoft.CodeAnalysis.Semantics
Private Function CreateBoundConversionOperation(boundConversion As BoundConversion) As IConversionExpression
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 usesOperatorMethod As Boolean = False
Dim operatorMethod As IMethodSymbol = Nothing
......
......@@ -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)
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 Shared Function DeriveUnaryOperationKind(operatorKind As UnaryOperatorKind) As UnaryOperationKind
Select Case operatorKind And UnaryOperatorKind.OpMask
......
......@@ -134,7 +134,7 @@ Class Program
End Class]]>.Value
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')
Instance Receiver: ILocalReferenceExpression: x (OperationKind.LocalReferenceExpression, Type: Program) (Syntax: 'x')
]]>.Value
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册