提交 7dada160 编写于 作者: H Heejae Chang

addressed AssignmentExpression design

上级 a8591634
......@@ -536,7 +536,7 @@ private IInstanceReferenceExpression CreateBoundThisReferenceOperation(BoundThis
return new InstanceReferenceExpression(instanceReferenceKind, isInvalid, syntax, type, constantValue);
}
private IAssignmentExpression CreateBoundAssignmentOperatorOperation(BoundAssignmentOperator boundAssignmentOperator)
private ISimpleAssignmentExpression CreateBoundAssignmentOperatorOperation(BoundAssignmentOperator boundAssignmentOperator)
{
Lazy<IOperation> target = new Lazy<IOperation>(() => Create(boundAssignmentOperator.Left));
Lazy<IOperation> value = new Lazy<IOperation>(() => Create(boundAssignmentOperator.Right));
......@@ -544,7 +544,7 @@ private IAssignmentExpression CreateBoundAssignmentOperatorOperation(BoundAssign
SyntaxNode syntax = boundAssignmentOperator.Syntax;
ITypeSymbol type = boundAssignmentOperator.Type;
Optional<object> constantValue = ConvertToOptional(boundAssignmentOperator.ConstantValue);
return new LazyAssignmentExpression(target, value, isInvalid, syntax, type, constantValue);
return new LazySimpleAssignmentExpression(target, value, isInvalid, syntax, type, constantValue);
}
private ICompoundAssignmentExpression CreateBoundCompoundAssignmentOperatorOperation(BoundCompoundAssignmentOperator boundCompoundAssignmentOperator)
......
......@@ -85,19 +85,19 @@ public void Deconstruct(out int a, out int b, out int c)
IOperation operation1 = model.GetOperation(assignments[0]);
Assert.NotNull(operation1);
Assert.Equal(OperationKind.None, operation1.Kind);
Assert.False(operation1 is IAssignmentExpression);
Assert.False(operation1 is ISimpleAssignmentExpression);
Assert.Equal("(x, y, z) = new C()", assignments[1].ToString());
IOperation operation2 = model.GetOperation(assignments[1]);
Assert.NotNull(operation2);
Assert.Equal(OperationKind.None, operation2.Kind);
Assert.False(operation2 is IAssignmentExpression);
Assert.False(operation2 is ISimpleAssignmentExpression);
Assert.Equal("var (a, b) = (1, 2)", assignments[2].ToString());
IOperation operation3 = model.GetOperation(assignments[2]);
Assert.NotNull(operation3);
Assert.Equal(OperationKind.None, operation3.Kind);
Assert.False(operation3 is IAssignmentExpression);
Assert.False(operation3 is ISimpleAssignmentExpression);
}
}
}
\ No newline at end of file
......@@ -364,11 +364,11 @@ public LazyArrayInitializer(Lazy<ImmutableArray<IOperation>> elementValues, bool
}
/// <summary>
/// Represents an assignment expression.
/// Represents an base type of assignment expression.
/// </summary>
internal abstract partial class BaseAssignmentExpression : Operation, IBaseAssignmentExpression
internal abstract partial class AssignmentExpression : Operation, IAssignmentExpression
{
protected BaseAssignmentExpression(OperationKind kind, bool isInvalid, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue) :
protected AssignmentExpression(OperationKind kind, bool isInvalid, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue) :
base(kind, isInvalid, syntax, type, constantValue)
{
}
......@@ -385,10 +385,29 @@ internal abstract partial class BaseAssignmentExpression : Operation, IBaseAssig
/// <summary>
/// Represents an assignment expression.
/// </summary>
internal sealed partial class AssignmentExpression : BaseAssignmentExpression, IAssignmentExpression
internal abstract partial class BaseSimpleAssignmentExpression : AssignmentExpression, ISimpleAssignmentExpression
{
public AssignmentExpression(IOperation target, IOperation value, bool isInvalid, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue) :
base(OperationKind.AssignmentExpression, isInvalid, syntax, type, constantValue)
public BaseSimpleAssignmentExpression(bool isInvalid, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue) :
base(OperationKind.SimpleAssignmentExpression, isInvalid, syntax, type, constantValue)
{
}
public override void Accept(OperationVisitor visitor)
{
visitor.VisitSimpleAssignmentExpression(this);
}
public override TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitAssignmentExpression(this, argument);
}
}
/// <summary>
/// Represents an assignment expression.
/// </summary>
internal sealed partial class SimpleAssignmentExpression : BaseSimpleAssignmentExpression, ISimpleAssignmentExpression
{
public SimpleAssignmentExpression(IOperation target, IOperation value, bool isInvalid, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue) :
base(isInvalid, syntax, type, constantValue)
{
Target = target;
Value = value;
......@@ -401,25 +420,18 @@ internal sealed partial class AssignmentExpression : BaseAssignmentExpression, I
/// Value to be assigned to the target of the assignment.
/// </summary>
public override IOperation Value { get; }
public override void Accept(OperationVisitor visitor)
{
visitor.VisitAssignmentExpression(this);
}
public override TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitAssignmentExpression(this, argument);
}
}
/// <summary>
/// Represents an assignment expression.
/// </summary>
internal sealed partial class LazyAssignmentExpression : BaseAssignmentExpression, IAssignmentExpression
internal sealed partial class LazySimpleAssignmentExpression : BaseSimpleAssignmentExpression, ISimpleAssignmentExpression
{
private readonly Lazy<IOperation> _lazyTarget;
private readonly Lazy<IOperation> _lazyValue;
public LazyAssignmentExpression(Lazy<IOperation> target, Lazy<IOperation> value, bool isInvalid, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue) : base(OperationKind.AssignmentExpression, isInvalid, syntax, type, constantValue)
public LazySimpleAssignmentExpression(Lazy<IOperation> target, Lazy<IOperation> value, bool isInvalid, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue) :
base(isInvalid, syntax, type, constantValue)
{
_lazyTarget = target ?? throw new System.ArgumentNullException("target");
_lazyValue = value ?? throw new System.ArgumentNullException("value");
......@@ -433,15 +445,6 @@ public LazyAssignmentExpression(Lazy<IOperation> target, Lazy<IOperation> value,
/// Value to be assigned to the target of the assignment.
/// </summary>
public override IOperation Value => _lazyValue.Value;
public override void Accept(OperationVisitor visitor)
{
visitor.VisitAssignmentExpression(this);
}
public override TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitAssignmentExpression(this, argument);
}
}
/// <summary>
......@@ -778,10 +781,10 @@ public LazyCatchClause(Lazy<IBlockStatement> handler, ITypeSymbol caughtType, La
/// <summary>
/// Represents an assignment expression that includes a binary operation.
/// </summary>
internal abstract partial class BaseCompoundAssignmentExpression : BaseAssignmentExpression, IHasOperatorMethodExpression, ICompoundAssignmentExpression
internal abstract partial class BaseCompoundAssignmentExpression : AssignmentExpression, IHasOperatorMethodExpression, ICompoundAssignmentExpression
{
protected BaseCompoundAssignmentExpression(BinaryOperationKind binaryOperationKind, bool usesOperatorMethod, IMethodSymbol operatorMethod, OperationKind kind, bool isInvalid, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue) :
base(kind, isInvalid, syntax, type, constantValue)
protected BaseCompoundAssignmentExpression(BinaryOperationKind binaryOperationKind, bool usesOperatorMethod, IMethodSymbol operatorMethod, bool isInvalid, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue) :
base(OperationKind.CompoundAssignmentExpression, isInvalid, syntax, type, constantValue)
{
BinaryOperationKind = binaryOperationKind;
UsesOperatorMethod = usesOperatorMethod;
......@@ -799,6 +802,15 @@ internal abstract partial class BaseCompoundAssignmentExpression : BaseAssignmen
/// Operation method used by the operation, null if the operation does not use an operator method.
/// </summary>
public IMethodSymbol OperatorMethod { get; }
public override void Accept(OperationVisitor visitor)
{
visitor.VisitCompoundAssignmentExpression(this);
}
public override TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitCompoundAssignmentExpression(this, argument);
}
}
/// <summary>
......@@ -807,7 +819,7 @@ internal abstract partial class BaseCompoundAssignmentExpression : BaseAssignmen
internal sealed partial class CompoundAssignmentExpression : BaseCompoundAssignmentExpression, IHasOperatorMethodExpression, ICompoundAssignmentExpression
{
public CompoundAssignmentExpression(BinaryOperationKind binaryOperationKind, IOperation target, IOperation value, bool usesOperatorMethod, IMethodSymbol operatorMethod, bool isInvalid, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue) :
base(binaryOperationKind, usesOperatorMethod, operatorMethod, OperationKind.CompoundAssignmentExpression, isInvalid, syntax, type, constantValue)
base(binaryOperationKind, usesOperatorMethod, operatorMethod, isInvalid, syntax, type, constantValue)
{
Target = target;
Value = value;
......@@ -820,14 +832,6 @@ internal sealed partial class CompoundAssignmentExpression : BaseCompoundAssignm
/// Value to be assigned to the target of the assignment.
/// </summary>
public override IOperation Value { get; }
public override void Accept(OperationVisitor visitor)
{
visitor.VisitCompoundAssignmentExpression(this);
}
public override TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitCompoundAssignmentExpression(this, argument);
}
}
/// <summary>
......@@ -838,7 +842,8 @@ internal sealed partial class LazyCompoundAssignmentExpression : BaseCompoundAss
private readonly Lazy<IOperation> _lazyTarget;
private readonly Lazy<IOperation> _lazyValue;
public LazyCompoundAssignmentExpression(BinaryOperationKind binaryOperationKind, Lazy<IOperation> target, Lazy<IOperation> value, bool usesOperatorMethod, IMethodSymbol operatorMethod, bool isInvalid, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue) : base(binaryOperationKind, usesOperatorMethod, operatorMethod, OperationKind.CompoundAssignmentExpression, isInvalid, syntax, type, constantValue)
public LazyCompoundAssignmentExpression(BinaryOperationKind binaryOperationKind, Lazy<IOperation> target, Lazy<IOperation> value, bool usesOperatorMethod, IMethodSymbol operatorMethod, bool isInvalid, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue) :
base(binaryOperationKind, usesOperatorMethod, operatorMethod, isInvalid, syntax, type, constantValue)
{
_lazyTarget = target ?? throw new System.ArgumentNullException("target");
_lazyValue = value ?? throw new System.ArgumentNullException("value");
......@@ -852,15 +857,6 @@ public LazyCompoundAssignmentExpression(BinaryOperationKind binaryOperationKind,
/// Value to be assigned to the target of the assignment.
/// </summary>
public override IOperation Value => _lazyValue.Value;
public override void Accept(OperationVisitor visitor)
{
visitor.VisitCompoundAssignmentExpression(this);
}
public override TResult Accept<TArgument, TResult>(OperationVisitor<TArgument, TResult> visitor, TArgument argument)
{
return visitor.VisitCompoundAssignmentExpression(this, argument);
}
}
/// <summary>
......
......@@ -11,7 +11,7 @@ namespace Microsoft.CodeAnalysis.Semantics
/// This interface is reserved for implementation by its associated APIs. We reserve the right to
/// change it in the future.
/// </remarks>
public interface IBaseAssignmentExpression : IOperation
public interface IAssignmentExpression : IOperation
{
/// <summary>
/// Target of the assignment.
......@@ -30,7 +30,7 @@ public interface IBaseAssignmentExpression : IOperation
/// This interface is reserved for implementation by its associated APIs. We reserve the right to
/// change it in the future.
/// </remarks>
public interface IAssignmentExpression : IBaseAssignmentExpression
public interface ISimpleAssignmentExpression : IAssignmentExpression
{
}
}
......
......@@ -11,7 +11,7 @@ namespace Microsoft.CodeAnalysis.Semantics
/// This interface is reserved for implementation by its associated APIs. We reserve the right to
/// change it in the future.
/// </remarks>
public interface ICompoundAssignmentExpression : IBaseAssignmentExpression, IHasOperatorMethodExpression
public interface ICompoundAssignmentExpression : IAssignmentExpression, IHasOperatorMethodExpression
{
/// <summary>
/// Kind of binary operation.
......
......@@ -37,10 +37,10 @@ public static IConditionalChoiceExpression CreateConditionalChoiceExpression(IOp
default(Optional<object>));
}
public static IExpressionStatement CreateAssignmentExpressionStatement(IOperation target, IOperation value, SyntaxNode syntax)
public static IExpressionStatement CreateSimpleAssignmentExpressionStatement(IOperation target, IOperation value, SyntaxNode syntax)
{
var isInvalid = target == null || target.IsInvalid || value == null || value.IsInvalid;
var expression = new AssignmentExpression(target, value, isInvalid, syntax, target.Type, default(Optional<object>));
var expression = new SimpleAssignmentExpression(target, value, isInvalid, syntax, target.Type, default(Optional<object>));
return new ExpressionStatement(expression, expression.IsInvalid, syntax, type: null, constantValue: default(Optional<object>));
}
......
......@@ -114,8 +114,8 @@ public enum OperationKind
IsTypeExpression = 0x116,
/// <summary>Indicates an <see cref="IAwaitExpression"/>.</summary>
AwaitExpression = 0x117,
/// <summary>Indicates an <see cref="IAssignmentExpression"/>.</summary>
AssignmentExpression = 0x118,
/// <summary>Indicates an <see cref="ISimpleAssignmentExpression"/>.</summary>
SimpleAssignmentExpression = 0x118,
/// <summary>Indicates an <see cref="ICompoundAssignmentExpression"/>.</summary>
CompoundAssignmentExpression = 0x119,
/// <summary>Indicates an <see cref="IParenthesizedExpression"/>.</summary>
......
......@@ -340,7 +340,7 @@ public virtual void VisitArrayInitializer(IArrayInitializer operation)
DefaultVisit(operation);
}
public virtual void VisitAssignmentExpression(IAssignmentExpression operation)
public virtual void VisitSimpleAssignmentExpression(ISimpleAssignmentExpression operation)
{
DefaultVisit(operation);
}
......@@ -770,7 +770,7 @@ public virtual TResult VisitArrayInitializer(IArrayInitializer operation, TArgum
return DefaultVisit(operation, argument);
}
public virtual TResult VisitAssignmentExpression(IAssignmentExpression operation, TArgument argument)
public virtual TResult VisitAssignmentExpression(ISimpleAssignmentExpression operation, TArgument argument)
{
return DefaultVisit(operation, argument);
}
......
......@@ -379,7 +379,7 @@ public override void VisitArrayInitializer(IArrayInitializer operation)
VisitArray(operation.ElementValues);
}
public override void VisitAssignmentExpression(IAssignmentExpression operation)
public override void VisitSimpleAssignmentExpression(ISimpleAssignmentExpression operation)
{
Visit(operation.Target);
Visit(operation.Value);
......
......@@ -59,7 +59,6 @@ Microsoft.CodeAnalysis.OperationKind.Argument = 1031 -> Microsoft.CodeAnalysis.O
Microsoft.CodeAnalysis.OperationKind.ArrayCreationExpression = 276 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.ArrayElementReferenceExpression = 260 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.ArrayInitializer = 1029 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.AssignmentExpression = 280 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.AwaitExpression = 279 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.BinaryOperatorExpression = 270 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.BlockStatement = 2 -> Microsoft.CodeAnalysis.OperationKind
......@@ -119,6 +118,7 @@ Microsoft.CodeAnalysis.OperationKind.PropertyReferenceExpression = 266 -> Micros
Microsoft.CodeAnalysis.OperationKind.RangeCaseClause = 1036 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.RelationalCaseClause = 1035 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.ReturnStatement = 11 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.SimpleAssignmentExpression = 280 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.SingleValueCaseClause = 1034 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.SizeOfExpression = 514 -> Microsoft.CodeAnalysis.OperationKind
Microsoft.CodeAnalysis.OperationKind.StopStatement = 80 -> Microsoft.CodeAnalysis.OperationKind
......@@ -351,11 +351,10 @@ Microsoft.CodeAnalysis.Semantics.IArrayElementReferenceExpression.Indices.get ->
Microsoft.CodeAnalysis.Semantics.IArrayInitializer
Microsoft.CodeAnalysis.Semantics.IArrayInitializer.ElementValues.get -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.IOperation>
Microsoft.CodeAnalysis.Semantics.IAssignmentExpression
Microsoft.CodeAnalysis.Semantics.IAssignmentExpression.Target.get -> Microsoft.CodeAnalysis.IOperation
Microsoft.CodeAnalysis.Semantics.IAssignmentExpression.Value.get -> Microsoft.CodeAnalysis.IOperation
Microsoft.CodeAnalysis.Semantics.IAwaitExpression
Microsoft.CodeAnalysis.Semantics.IAwaitExpression.AwaitedValue.get -> Microsoft.CodeAnalysis.IOperation
Microsoft.CodeAnalysis.Semantics.IBaseAssignmentExpression
Microsoft.CodeAnalysis.Semantics.IBaseAssignmentExpression.Target.get -> Microsoft.CodeAnalysis.IOperation
Microsoft.CodeAnalysis.Semantics.IBaseAssignmentExpression.Value.get -> Microsoft.CodeAnalysis.IOperation
Microsoft.CodeAnalysis.Semantics.IBasePropertyReferenceExpression
Microsoft.CodeAnalysis.Semantics.IBasePropertyReferenceExpression.Property.get -> Microsoft.CodeAnalysis.IPropertySymbol
Microsoft.CodeAnalysis.Semantics.IBinaryOperatorExpression
......@@ -519,6 +518,7 @@ Microsoft.CodeAnalysis.Semantics.IRelationalCaseClause.Relation.get -> Microsoft
Microsoft.CodeAnalysis.Semantics.IRelationalCaseClause.Value.get -> Microsoft.CodeAnalysis.IOperation
Microsoft.CodeAnalysis.Semantics.IReturnStatement
Microsoft.CodeAnalysis.Semantics.IReturnStatement.ReturnedValue.get -> Microsoft.CodeAnalysis.IOperation
Microsoft.CodeAnalysis.Semantics.ISimpleAssignmentExpression
Microsoft.CodeAnalysis.Semantics.ISingleValueCaseClause
Microsoft.CodeAnalysis.Semantics.ISingleValueCaseClause.Equality.get -> Microsoft.CodeAnalysis.Semantics.BinaryOperationKind
Microsoft.CodeAnalysis.Semantics.ISingleValueCaseClause.Value.get -> Microsoft.CodeAnalysis.IOperation
......@@ -709,7 +709,6 @@ override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitArgument(Microsof
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitArrayCreationExpression(Microsoft.CodeAnalysis.Semantics.IArrayCreationExpression operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitArrayElementReferenceExpression(Microsoft.CodeAnalysis.Semantics.IArrayElementReferenceExpression operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitArrayInitializer(Microsoft.CodeAnalysis.Semantics.IArrayInitializer operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitAssignmentExpression(Microsoft.CodeAnalysis.Semantics.IAssignmentExpression operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitAwaitExpression(Microsoft.CodeAnalysis.Semantics.IAwaitExpression operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitBinaryOperatorExpression(Microsoft.CodeAnalysis.Semantics.IBinaryOperatorExpression operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitBlockStatement(Microsoft.CodeAnalysis.Semantics.IBlockStatement operation) -> void
......@@ -767,6 +766,7 @@ override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitPropertyReference
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitRangeCaseClause(Microsoft.CodeAnalysis.Semantics.IRangeCaseClause operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitRelationalCaseClause(Microsoft.CodeAnalysis.Semantics.IRelationalCaseClause operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitReturnStatement(Microsoft.CodeAnalysis.Semantics.IReturnStatement operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitSimpleAssignmentExpression(Microsoft.CodeAnalysis.Semantics.ISimpleAssignmentExpression operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitSingleValueCaseClause(Microsoft.CodeAnalysis.Semantics.ISingleValueCaseClause operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitSizeOfExpression(Microsoft.CodeAnalysis.Semantics.ISizeOfExpression operation) -> void
override Microsoft.CodeAnalysis.Semantics.OperationWalker.VisitStopStatement(Microsoft.CodeAnalysis.Semantics.IStopStatement operation) -> void
......@@ -814,7 +814,6 @@ virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitArgument(Microsof
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitArrayCreationExpression(Microsoft.CodeAnalysis.Semantics.IArrayCreationExpression operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitArrayElementReferenceExpression(Microsoft.CodeAnalysis.Semantics.IArrayElementReferenceExpression operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitArrayInitializer(Microsoft.CodeAnalysis.Semantics.IArrayInitializer operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitAssignmentExpression(Microsoft.CodeAnalysis.Semantics.IAssignmentExpression operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitAwaitExpression(Microsoft.CodeAnalysis.Semantics.IAwaitExpression operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitBinaryOperatorExpression(Microsoft.CodeAnalysis.Semantics.IBinaryOperatorExpression operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitBlockStatement(Microsoft.CodeAnalysis.Semantics.IBlockStatement operation) -> void
......@@ -872,6 +871,7 @@ virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitPropertyReference
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitRangeCaseClause(Microsoft.CodeAnalysis.Semantics.IRangeCaseClause operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitRelationalCaseClause(Microsoft.CodeAnalysis.Semantics.IRelationalCaseClause operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitReturnStatement(Microsoft.CodeAnalysis.Semantics.IReturnStatement operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitSimpleAssignmentExpression(Microsoft.CodeAnalysis.Semantics.ISimpleAssignmentExpression operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitSingleValueCaseClause(Microsoft.CodeAnalysis.Semantics.ISingleValueCaseClause operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitSizeOfExpression(Microsoft.CodeAnalysis.Semantics.ISizeOfExpression operation) -> void
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor.VisitStopStatement(Microsoft.CodeAnalysis.Semantics.IStopStatement operation) -> void
......@@ -896,7 +896,7 @@ virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.Vi
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitArrayCreationExpression(Microsoft.CodeAnalysis.Semantics.IArrayCreationExpression operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitArrayElementReferenceExpression(Microsoft.CodeAnalysis.Semantics.IArrayElementReferenceExpression operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitArrayInitializer(Microsoft.CodeAnalysis.Semantics.IArrayInitializer operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitAssignmentExpression(Microsoft.CodeAnalysis.Semantics.IAssignmentExpression operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitAssignmentExpression(Microsoft.CodeAnalysis.Semantics.ISimpleAssignmentExpression operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitAwaitExpression(Microsoft.CodeAnalysis.Semantics.IAwaitExpression operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitBinaryOperatorExpression(Microsoft.CodeAnalysis.Semantics.IBinaryOperatorExpression operation, TArgument argument) -> TResult
virtual Microsoft.CodeAnalysis.Semantics.OperationVisitor<TArgument, TResult>.VisitBlockStatement(Microsoft.CodeAnalysis.Semantics.IBlockStatement operation, TArgument argument) -> TResult
......
......@@ -207,7 +207,7 @@ Namespace Microsoft.CodeAnalysis.Semantics
Dim syntax As SyntaxNode = boundAssignmentOperator.Syntax
Dim type As ITypeSymbol = boundAssignmentOperator.Type
Dim constantValue As [Optional](Of Object) = ConvertToOptional(boundAssignmentOperator.ConstantValueOpt)
Return New LazyAssignmentExpression(target, value, isInvalid, syntax, type, constantValue)
Return New LazySimpleAssignmentExpression(target, value, isInvalid, syntax, type, constantValue)
End If
End Function
......
......@@ -31,7 +31,7 @@ Namespace Microsoft.CodeAnalysis.Semantics
End Select
End If
Return OperationKind.AssignmentExpression
Return OperationKind.SimpleAssignmentExpression
End Function
Private Function GetUserDefinedBinaryOperatorChild([operator] As BoundUserDefinedBinaryOperator, index As Integer) As IOperation
......@@ -242,14 +242,14 @@ Namespace Microsoft.CodeAnalysis.Semantics
' ControlVariable = InitialValue
Dim controlReference As IOperation = Create(boundFor.ControlVariable)
If controlReference IsNot Nothing Then
statements.Add(OperationFactory.CreateAssignmentExpressionStatement(controlReference, Create(boundFor.InitialValue), boundFor.InitialValue.Syntax))
statements.Add(OperationFactory.CreateSimpleAssignmentExpressionStatement(controlReference, Create(boundFor.InitialValue), boundFor.InitialValue.Syntax))
End If
' T0 = LimitValue
If Not boundFor.LimitValue.IsConstant Then
Dim value = Create(boundFor.LimitValue)
statements.Add(
OperationFactory.CreateAssignmentExpressionStatement(
OperationFactory.CreateSimpleAssignmentExpressionStatement(
New SyntheticLocalReferenceExpression(
SyntheticLocalKind.ForLoopLimitValue,
Create(boundFor),
......@@ -263,7 +263,7 @@ Namespace Microsoft.CodeAnalysis.Semantics
If boundFor.StepValue IsNot Nothing AndAlso Not boundFor.StepValue.IsConstant Then
Dim value = Create(boundFor.StepValue)
statements.Add(
OperationFactory.CreateAssignmentExpressionStatement(
OperationFactory.CreateSimpleAssignmentExpressionStatement(
New SyntheticLocalReferenceExpression(
SyntheticLocalKind.ForLoopStepValue,
Create(boundFor),
......
......@@ -56,8 +56,8 @@ End Module
Dim statement1 As IOperation = model.GetOperation(nodes(0))
Assert.Equal(statement1.Kind, OperationKind.ExpressionStatement)
Dim expression1 As IOperation = DirectCast(statement1, IExpressionStatement).Expression
Assert.Equal(expression1.Kind, OperationKind.AssignmentExpression)
Dim assignment1 As IAssignmentExpression = DirectCast(expression1, IAssignmentExpression)
Assert.Equal(expression1.Kind, OperationKind.SimpleAssignmentExpression)
Dim assignment1 As ISimpleAssignmentExpression = DirectCast(expression1, ISimpleAssignmentExpression)
Assert.Equal(assignment1.Value.Kind, OperationKind.BinaryOperatorExpression)
Dim add1 As IBinaryOperatorExpression = DirectCast(assignment1.Value, IBinaryOperatorExpression)
Assert.Equal(add1.BinaryOperationKind, BinaryOperationKind.OperatorMethodAdd)
......@@ -86,8 +86,8 @@ IExpressionStatement (OperationKind.ExpressionStatement, IsInvalid) (Syntax: 'x
Dim statement2 As IOperation = model.GetOperation(nodes(1))
Assert.Equal(statement2.Kind, OperationKind.ExpressionStatement)
Dim expression2 As IOperation = DirectCast(statement2, IExpressionStatement).Expression
Assert.Equal(expression2.Kind, OperationKind.AssignmentExpression)
Dim assignment2 As IAssignmentExpression = DirectCast(expression2, IAssignmentExpression)
Assert.Equal(expression2.Kind, OperationKind.SimpleAssignmentExpression)
Dim assignment2 As ISimpleAssignmentExpression = DirectCast(expression2, ISimpleAssignmentExpression)
Assert.Equal(assignment2.Value.Kind, OperationKind.BinaryOperatorExpression)
Dim add2 As IBinaryOperatorExpression = DirectCast(assignment2.Value, IBinaryOperatorExpression)
Assert.Equal(add2.BinaryOperationKind, BinaryOperationKind.OperatorMethodAdd)
......@@ -116,8 +116,8 @@ IExpressionStatement (OperationKind.ExpressionStatement) (Syntax: 'x = x + y')
Dim statement3 As IOperation = model.GetOperation(nodes(2))
Assert.Equal(statement3.Kind, OperationKind.ExpressionStatement)
Dim expression3 As IOperation = DirectCast(statement3, IExpressionStatement).Expression
Assert.Equal(expression3.Kind, OperationKind.AssignmentExpression)
Dim assignment3 As IAssignmentExpression = DirectCast(expression3, IAssignmentExpression)
Assert.Equal(expression3.Kind, OperationKind.SimpleAssignmentExpression)
Dim assignment3 As ISimpleAssignmentExpression = DirectCast(expression3, ISimpleAssignmentExpression)
Assert.Equal(assignment3.Value.Kind, OperationKind.UnaryOperatorExpression)
Dim negate3 As IUnaryOperatorExpression = DirectCast(assignment3.Value, IUnaryOperatorExpression)
Assert.Equal(negate3.UnaryOperationKind, UnaryOperationKind.OperatorMethodMinus)
......
......@@ -955,9 +955,9 @@ public override void VisitArrayInitializer(IArrayInitializer operation)
VisitArray(operation.ElementValues, "Element Values", logElementCount: true);
}
public override void VisitAssignmentExpression(IAssignmentExpression operation)
public override void VisitSimpleAssignmentExpression(ISimpleAssignmentExpression operation)
{
LogString(nameof(IAssignmentExpression));
LogString(nameof(ISimpleAssignmentExpression));
LogCommonPropertiesAndNewLine(operation);
Visit(operation.Target, "Left");
......
......@@ -459,9 +459,9 @@ public override void VisitArrayInitializer(IArrayInitializer operation)
base.VisitArrayInitializer(operation);
}
public override void VisitAssignmentExpression(IAssignmentExpression operation)
public override void VisitSimpleAssignmentExpression(ISimpleAssignmentExpression operation)
{
base.VisitAssignmentExpression(operation);
base.VisitSimpleAssignmentExpression(operation);
}
public override void VisitCompoundAssignmentExpression(ICompoundAssignmentExpression operation)
......
......@@ -55,10 +55,10 @@ public sealed override void Initialize(AnalysisContext context)
operationBlockContext.RegisterOperationAction(
(operationContext) =>
{
IBaseAssignmentExpression assignment = (IBaseAssignmentExpression)operationContext.Operation;
IAssignmentExpression assignment = (IAssignmentExpression)operationContext.Operation;
AssignTo(assignment.Target, localsSourceTypes, fieldsSourceTypes, assignment.Value);
},
OperationKind.AssignmentExpression,
OperationKind.SimpleAssignmentExpression,
OperationKind.CompoundAssignmentExpression,
OperationKind.IncrementExpression);
......
......@@ -48,10 +48,10 @@ public sealed override void Initialize(AnalysisContext context)
operationBlockContext.RegisterOperationAction(
(operationContext) =>
{
IBaseAssignmentExpression assignment = (IBaseAssignmentExpression)operationContext.Operation;
IAssignmentExpression assignment = (IAssignmentExpression)operationContext.Operation;
AssignTo(assignment.Target, inConstructor, staticConstructorType, assignedToFields, mightBecomeReadOnlyFields);
},
OperationKind.AssignmentExpression,
OperationKind.SimpleAssignmentExpression,
OperationKind.CompoundAssignmentExpression,
OperationKind.IncrementExpression);
......
......@@ -42,10 +42,10 @@ public sealed override void Initialize(AnalysisContext context)
operationBlockContext.RegisterOperationAction(
(operationContext) =>
{
IBaseAssignmentExpression assignment = (IBaseAssignmentExpression)operationContext.Operation;
IAssignmentExpression assignment = (IAssignmentExpression)operationContext.Operation;
AssignTo(assignment.Target, assignedToLocals, mightBecomeConstLocals);
},
OperationKind.AssignmentExpression,
OperationKind.SimpleAssignmentExpression,
OperationKind.CompoundAssignmentExpression,
OperationKind.IncrementExpression);
......
......@@ -161,9 +161,9 @@ public sealed override void Initialize(AnalysisContext context)
if (forLoop.Before.Length == 1)
{
IOperation setup = forLoop.Before[0];
if (setup.Kind == OperationKind.ExpressionStatement && ((IExpressionStatement)setup).Expression.Kind == OperationKind.AssignmentExpression)
if (setup.Kind == OperationKind.ExpressionStatement && ((IExpressionStatement)setup).Expression.Kind == OperationKind.SimpleAssignmentExpression)
{
IAssignmentExpression setupAssignment = (IAssignmentExpression)((IExpressionStatement)setup).Expression;
ISimpleAssignmentExpression setupAssignment = (ISimpleAssignmentExpression)((IExpressionStatement)setup).Expression;
if (setupAssignment.Target.Kind == OperationKind.LocalReferenceExpression &&
((ILocalReferenceExpression)setupAssignment.Target).Local == testVariable &&
setupAssignment.Value.ConstantValue.HasValue &&
......@@ -182,9 +182,9 @@ public sealed override void Initialize(AnalysisContext context)
IOperation advanceIncrement = null;
BinaryOperationKind advanceOperationCode = BinaryOperationKind.None;
if (advanceExpression.Kind == OperationKind.AssignmentExpression)
if (advanceExpression.Kind == OperationKind.SimpleAssignmentExpression)
{
IAssignmentExpression advanceAssignment = (IAssignmentExpression)advanceExpression;
ISimpleAssignmentExpression advanceAssignment = (ISimpleAssignmentExpression)advanceExpression;
if (advanceAssignment.Target.Kind == OperationKind.LocalReferenceExpression &&
((ILocalReferenceExpression)advanceAssignment.Target).Local == testVariable &&
......@@ -752,7 +752,7 @@ public sealed override void Initialize(AnalysisContext context)
context.RegisterOperationAction(
(operationContext) =>
{
var assignment = (IAssignmentExpression)operationContext.Operation;
var assignment = (ISimpleAssignmentExpression)operationContext.Operation;
var kind = assignment.Target.Kind;
if (kind == OperationKind.FieldReferenceExpression ||
kind == OperationKind.PropertyReferenceExpression)
......@@ -760,7 +760,7 @@ public sealed override void Initialize(AnalysisContext context)
Report(operationContext, assignment.Syntax, DoNotUseMemberAssignmentDescriptor);
}
},
OperationKind.AssignmentExpression);
OperationKind.SimpleAssignmentExpression);
}
private static void Report(OperationAnalysisContext context, SyntaxNode syntax, DiagnosticDescriptor descriptor)
......@@ -2068,7 +2068,7 @@ public sealed override void Initialize(AnalysisContext context)
{
operationContext.ReportDiagnostic(Diagnostic.Create(AssignmentOperationDescriptor, operationContext.Operation.Syntax.GetLocation()));
},
OperationKind.AssignmentExpression);
OperationKind.SimpleAssignmentExpression);
context.RegisterSyntaxNodeAction(
(syntaxContext) =>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册