From d040c19164320b471bfa85abeaf4fb1d27574d08 Mon Sep 17 00:00:00 2001 From: Fredric Silberberg Date: Fri, 27 Oct 2017 12:34:43 -0700 Subject: [PATCH] Implemented C# heirarchy changes discussed in design meeting. --- .../Operations/CSharpOperationFactory.cs | 45 +- ...rationTests_ArrayCreationAndInitializer.cs | 24 +- ...ationTests_IAnonymousFunctionExpression.cs | 192 ++-- .../IOperationTests_IAwaitExpression.cs | 6 +- .../IOperationTests_IConversionExpression.cs | 79 +- ...rationTests_IDelegateCreationExpression.cs | 234 +++-- .../IOperationTests_IFixedStatement.cs | 144 +-- .../IOperationTests_IForEachLoopStatement.cs | 30 +- .../IOperationTests_IForLoopStatement.cs | 616 +++++++----- ...perationTests_IObjectCreationExpression.cs | 242 ++--- .../IOperationTests_ITupleExpression.cs | 342 ++++--- .../IOperationTests_IUsingStatement.cs | 172 ++-- .../IOperationTests_IVariableDeclaration.cs | 874 +++++++++++------- ...OperationTests_IWhileUntilLoopStatement.cs | 76 +- .../IOperationTests_InvalidExpression.cs | 40 +- .../IOperationTests_InvalidStatement.cs | 14 +- .../IOperation/IOperationTests_TryCatch.cs | 30 +- .../Semantic/Semantics/DeconstructionTests.cs | 22 +- .../ObjectAndCollectionInitializerTests.cs | 278 +++--- .../Test/Semantic/Semantics/OperatorTests.cs | 196 ++-- .../Symbols/AnonymousTypesSemanticsTests.cs | 345 +++---- .../Generated/Operations.xml.Generated.cs | 16 +- .../IDeclarationExpressionOperation.cs | 2 +- .../IMultiVariableDeclarationOperation.cs | 24 +- .../ISingleVariableDeclarationOperation.cs | 12 +- .../IVariableDeclarationGroupOperation.cs | 9 +- .../IVariableDeclarationOperation.cs | 26 - .../Operations/OperationExtensions.cs | 42 +- .../Core/Portable/PublicAPI.Unshipped.txt | 11 +- .../Operations/VisualBasicOperationFactory.vb | 4 +- .../VisualBasicOperationFactory_Methods.vb | 4 +- .../CouldHaveMoreSpecificTypeAnalyzer.cs | 11 +- .../Diagnostics/LocalCouldBeConstAnalyzer.cs | 17 +- .../Diagnostics/OperationTestAnalyzer.cs | 12 +- 34 files changed, 2472 insertions(+), 1719 deletions(-) delete mode 100644 src/Compilers/Core/Portable/Operations/IVariableDeclarationOperation.cs diff --git a/src/Compilers/CSharp/Portable/Operations/CSharpOperationFactory.cs b/src/Compilers/CSharp/Portable/Operations/CSharpOperationFactory.cs index 6515df1813f..9a2eed9ce2e 100644 --- a/src/Compilers/CSharp/Portable/Operations/CSharpOperationFactory.cs +++ b/src/Compilers/CSharp/Portable/Operations/CSharpOperationFactory.cs @@ -268,9 +268,9 @@ private ImmutableArray GetIOperationChildren(BoundNode boundNode) return builder.ToImmutableAndFree(); } - private IVariableDeclarationOperation CreateVariableDeclaration(BoundLocalDeclaration boundNode) + private ISingleVariableDeclarationOperation CreateVariableDeclaration(BoundLocalDeclaration boundNode) { - return (IVariableDeclarationOperation)_cache.GetOrAdd(boundNode, n => CreateVariableDeclarationInternal((BoundLocalDeclaration)n, n.Syntax)); + return (ISingleVariableDeclarationOperation)_cache.GetOrAdd(boundNode, n => CreateVariableDeclarationInternal((BoundLocalDeclaration)n, n.Syntax)); } private IPlaceholderOperation CreateBoundDeconstructValuePlaceholderOperation(BoundDeconstructValuePlaceholder boundDeconstructValuePlaceholder) @@ -1506,6 +1506,7 @@ private IOperation CreateBoundLocalDeclarationOperation(BoundLocalDeclaration bo SyntaxNode varStatement; SyntaxNode varDeclaration; + SyntaxNode varDeclarator; switch (kind) { case SyntaxKind.LocalDeclarationStatement: @@ -1516,8 +1517,9 @@ private IOperation CreateBoundLocalDeclarationOperation(BoundLocalDeclaration bo // var statement points to LocalDeclarationStatementSyntax varStatement = statement; - // var declaration points to VariableDeclaratorSyntax - varDeclaration = statement.Declaration.Variables.First(); + varDeclaration = statement.Declaration; + + varDeclarator = statement.Declaration.Variables.First(); break; } case SyntaxKind.VariableDeclarator: @@ -1526,8 +1528,10 @@ private IOperation CreateBoundLocalDeclarationOperation(BoundLocalDeclaration bo // var statement points to VariableDeclarationSyntax varStatement = node.Parent; + varDeclaration = node.Parent; + // var declaration points to VariableDeclaratorSyntax - varDeclaration = node; + varDeclarator = node; break; } default: @@ -1535,27 +1539,44 @@ private IOperation CreateBoundLocalDeclarationOperation(BoundLocalDeclaration bo Debug.Fail($"Unexpected syntax: {kind}"); // otherwise, they points to whatever bound nodes are pointing to. - varStatement = varDeclaration = node; + varStatement = varDeclaration = varDeclarator = node; break; } } - Lazy> declarations = new Lazy>(() => ImmutableArray.Create(CreateVariableDeclarationInternal(boundLocalDeclaration, varDeclaration)).CastArray()); + Lazy> declarations = new Lazy>(() => ImmutableArray.Create(CreateVariableDeclarationInternal(boundLocalDeclaration, varDeclarator))); + // In the case of a for loop, varStatement and varDeclaration will be the same syntax node. We can only have one explicit operation, so make + // sure this node is implicit in that scenario + bool multiVariableImplicit = (varStatement == varDeclaration) || boundLocalDeclaration.WasCompilerGenerated; + // In C#, the MultiVariable initializer will always be null, but we can't pass null as the actual lazy. We assume that all lazy elements always exist + Lazy initializer = new Lazy(() => null); + IMultiVariableDeclarationOperation multiVariableDeclaration = new LazyMultiVariableDeclaration(declarations, initializer, _semanticModel, varDeclaration, null, default, multiVariableImplicit); ITypeSymbol type = null; Optional constantValue = default(Optional); bool isImplicit = boundLocalDeclaration.WasCompilerGenerated; - return new LazyVariableDeclarationGroupOperation(declarations, _semanticModel, varStatement, type, constantValue, isImplicit); + return new VariableDeclarationGroupOperation(ImmutableArray.Create(multiVariableDeclaration), _semanticModel, varStatement, type, constantValue, isImplicit); } private IVariableDeclarationGroupOperation CreateBoundMultipleLocalDeclarationsOperation(BoundMultipleLocalDeclarations boundMultipleLocalDeclarations) { - Lazy> declarations = new Lazy>(() => - boundMultipleLocalDeclarations.LocalDeclarations.SelectAsArray(declaration => (IVariableDeclarationOperation)CreateVariableDeclaration(declaration))); - SyntaxNode syntax = boundMultipleLocalDeclarations.Syntax; + Lazy> declarations = new Lazy>(() => + boundMultipleLocalDeclarations.LocalDeclarations.SelectAsArray(declaration => CreateVariableDeclaration(declaration))); + // In C#, the MultiVariable initializer will always be null, but we can't pass null as the actual lazy. We assume that all lazy elements always exist + Lazy initializer = new Lazy(() => null); + + // The syntax for the boundMultipleLocalDeclarations can either be a LocalDeclarationStatement or a VariableDeclaration, depending on the context + // (using/fixed/etc statements vs variable declaration). If the former, we make the MultiVariableDeclarationOperation implicit + SyntaxNode declarationGroupSyntax = boundMultipleLocalDeclarations.Syntax; + SyntaxNode declarationSyntax = declarationGroupSyntax.IsKind(SyntaxKind.LocalDeclarationStatement) ? + ((LocalDeclarationStatementSyntax)declarationGroupSyntax).Declaration : + declarationGroupSyntax; + bool declarationIsImplicit = declarationGroupSyntax == declarationSyntax || boundMultipleLocalDeclarations.WasCompilerGenerated; + IMultiVariableDeclarationOperation multiVariableDeclaration = new LazyMultiVariableDeclaration(declarations, initializer, _semanticModel, declarationSyntax, null, default, declarationIsImplicit); + ITypeSymbol type = null; Optional constantValue = default(Optional); bool isImplicit = boundMultipleLocalDeclarations.WasCompilerGenerated; - return new LazyVariableDeclarationGroupOperation(declarations, _semanticModel, syntax, type, constantValue, isImplicit); + return new VariableDeclarationGroupOperation(ImmutableArray.Create(multiVariableDeclaration), _semanticModel, declarationGroupSyntax, type, constantValue, isImplicit); } private ILabeledOperation CreateBoundLabelStatementOperation(BoundLabelStatement boundLabelStatement) diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_ArrayCreationAndInitializer.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_ArrayCreationAndInitializer.cs index 79b8c69d247..2029a03da71 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_ArrayCreationAndInitializer.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_ArrayCreationAndInitializer.cs @@ -304,17 +304,21 @@ public void F(int dimension) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int[] x = { 1, 2 };') - ISingleVariableDeclarationOperation (Symbol: System.Int32[] x) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x = { 1, 2 }') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= { 1, 2 }') - IArrayCreationOperation (OperationKind.ArrayCreation, Type: System.Int32[]) (Syntax: '{ 1, 2 }') - Dimension Sizes(1): - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2, IsImplicit) (Syntax: '{ 1, 2 }') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int[] x = { 1, 2 }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32[] x) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x = { 1, 2 }') Initializer: - IArrayInitializerOperation (2 elements) (OperationKind.ArrayInitializer, Type: null) (Syntax: '{ 1, 2 }') - Element Values(2): - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= { 1, 2 }') + IArrayCreationOperation (OperationKind.ArrayCreation, Type: System.Int32[]) (Syntax: '{ 1, 2 }') + Dimension Sizes(1): + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2, IsImplicit) (Syntax: '{ 1, 2 }') + Initializer: + IArrayInitializerOperation (2 elements) (OperationKind.ArrayInitializer, Type: null) (Syntax: '{ 1, 2 }') + Element Values(2): + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') + Initializer: + null "; var expectedDiagnostics = DiagnosticDescription.None; diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IAnonymousFunctionExpression.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IAnonymousFunctionExpression.cs index 12653a502f7..067b1996da9 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IAnonymousFunctionExpression.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IAnonymousFunctionExpression.cs @@ -31,22 +31,26 @@ static void F() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Action x = () => F();') - ISingleVariableDeclarationOperation (Symbol: System.Action x) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x = () => F()') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'Action x = () => F()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action x) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x = () => F()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= () => F()') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsImplicit) (Syntax: '() => F()') + Target: + IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null) (Syntax: '() => F()') + IBlockOperation (2 statements) (OperationKind.Block, Type: null, IsImplicit) (Syntax: 'F()') + IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'F()') + Expression: + IInvocationOperation (void Program.F()) (OperationKind.Invocation, Type: System.Void) (Syntax: 'F()') + Instance Receiver: + null + Arguments(0) + IReturnOperation (OperationKind.Return, Type: null, IsImplicit) (Syntax: 'F()') + ReturnedValue: + null Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= () => F()') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsImplicit) (Syntax: '() => F()') - Target: - IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null) (Syntax: '() => F()') - IBlockOperation (2 statements) (OperationKind.Block, Type: null, IsImplicit) (Syntax: 'F()') - IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'F()') - Expression: - IInvocationOperation (void Program.F()) (OperationKind.Invocation, Type: System.Void) (Syntax: 'F()') - Instance Receiver: - null - Arguments(0) - IReturnOperation (OperationKind.Return, Type: null, IsImplicit) (Syntax: 'F()') - ReturnedValue: - null + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -111,22 +115,26 @@ static void F() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Action x = ... () => F());') - ISingleVariableDeclarationOperation (Symbol: System.Action x) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x = (Action)(() => F())') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'Action x = ... (() => F())') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action x) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x = (Action)(() => F())') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (Action)(() => F())') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action) (Syntax: '(Action)(() => F())') + Target: + IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null) (Syntax: '() => F()') + IBlockOperation (2 statements) (OperationKind.Block, Type: null, IsImplicit) (Syntax: 'F()') + IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'F()') + Expression: + IInvocationOperation (void Program.F()) (OperationKind.Invocation, Type: System.Void) (Syntax: 'F()') + Instance Receiver: + null + Arguments(0) + IReturnOperation (OperationKind.Return, Type: null, IsImplicit) (Syntax: 'F()') + ReturnedValue: + null Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (Action)(() => F())') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action) (Syntax: '(Action)(() => F())') - Target: - IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null) (Syntax: '() => F()') - IBlockOperation (2 statements) (OperationKind.Block, Type: null, IsImplicit) (Syntax: 'F()') - IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'F()') - Expression: - IInvocationOperation (void Program.F()) (OperationKind.Invocation, Type: System.Void) (Syntax: 'F()') - Instance Receiver: - null - Arguments(0) - IReturnOperation (OperationKind.Return, Type: null, IsImplicit) (Syntax: 'F()') - ReturnedValue: - null + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -191,17 +199,21 @@ static void F() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'var x = () => F();') - ISingleVariableDeclarationOperation (Symbol: var x) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'x = () => F()') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'var x = () => F()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: var x) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'x = () => F()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= () => F()') + IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: '() => F()') + IBlockOperation (1 statements) (OperationKind.Block, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') + IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') + Expression: + IInvocationOperation (void Program.F()) (OperationKind.Invocation, Type: System.Void, IsInvalid) (Syntax: 'F()') + Instance Receiver: + null + Arguments(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= () => F()') - IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: '() => F()') - IBlockOperation (1 statements) (OperationKind.Block, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') - IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') - Expression: - IInvocationOperation (void Program.F()) (OperationKind.Invocation, Type: System.Void, IsInvalid) (Syntax: 'F()') - Instance Receiver: - null - Arguments(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0815: Cannot assign lambda expression to an implicitly-typed variable @@ -233,19 +245,23 @@ static void F() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Action ... () => F();') - ISingleVariableDeclarationOperation (Symbol: System.Action x) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'x = () => F()') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'Action ... = () => F()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action x) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'x = () => F()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= () => F()') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: '() => F()') + Target: + IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: '() => F()') + IBlockOperation (1 statements) (OperationKind.Block, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') + IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') + Expression: + IInvocationOperation (void Program.F()) (OperationKind.Invocation, Type: System.Void, IsInvalid) (Syntax: 'F()') + Instance Receiver: + null + Arguments(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= () => F()') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: '() => F()') - Target: - IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: '() => F()') - IBlockOperation (1 statements) (OperationKind.Block, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') - IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') - Expression: - IInvocationOperation (void Program.F()) (OperationKind.Invocation, Type: System.Void, IsInvalid) (Syntax: 'F()') - Instance Receiver: - null - Arguments(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1593: Delegate 'Action' does not take 0 arguments @@ -277,25 +293,29 @@ static void F() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Action ... () => F());') - ISingleVariableDeclarationOperation (Symbol: System.Action x) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'x = (Action)(() => F())') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'Action ... (() => F())') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action x) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'x = (Action)(() => F())') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= (Action)(() => F())') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Action, IsInvalid, IsImplicit) (Syntax: '(Action)(() => F())') + Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid) (Syntax: '(Action)(() => F())') + Target: + IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: '() => F()') + IBlockOperation (2 statements) (OperationKind.Block, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') + IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') + Expression: + IInvocationOperation (void Program.F()) (OperationKind.Invocation, Type: System.Void, IsInvalid) (Syntax: 'F()') + Instance Receiver: + null + Arguments(0) + IReturnOperation (OperationKind.Return, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') + ReturnedValue: + null Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= (Action)(() => F())') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Action, IsInvalid, IsImplicit) (Syntax: '(Action)(() => F())') - Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid) (Syntax: '(Action)(() => F())') - Target: - IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: '() => F()') - IBlockOperation (2 statements) (OperationKind.Block, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') - IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') - Expression: - IInvocationOperation (void Program.F()) (OperationKind.Invocation, Type: System.Void, IsInvalid) (Syntax: 'F()') - Instance Receiver: - null - Arguments(0) - IReturnOperation (OperationKind.Return, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') - ReturnedValue: - null + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0029: Cannot implicitly convert type 'System.Action' to 'System.Action' @@ -327,19 +347,23 @@ static void F() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Action ... () => F());') - ISingleVariableDeclarationOperation (Symbol: System.Action x) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'x = (Action ... (() => F())') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'Action ... (() => F())') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action x) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'x = (Action ... (() => F())') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= (Action F())') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid) (Syntax: '(Action)(() => F())') + Target: + IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: '() => F()') + IBlockOperation (1 statements) (OperationKind.Block, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') + IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') + Expression: + IInvocationOperation (void Program.F()) (OperationKind.Invocation, Type: System.Void, IsInvalid) (Syntax: 'F()') + Instance Receiver: + null + Arguments(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= (Action F())') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid) (Syntax: '(Action)(() => F())') - Target: - IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: '() => F()') - IBlockOperation (1 statements) (OperationKind.Block, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') - IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsInvalid, IsImplicit) (Syntax: 'F()') - Expression: - IInvocationOperation (void Program.F()) (OperationKind.Invocation, Type: System.Void, IsInvalid) (Syntax: 'F()') - Instance Receiver: - null - Arguments(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1593: Delegate 'Action' does not take 0 arguments @@ -378,7 +402,7 @@ static void F() var lambdaSyntax = (LambdaExpressionSyntax)variableDeclaration.Declaration.Variables.Single().Initializer.Value; var variableDeclarationOperation = (IVariableDeclarationGroupOperation)semanticModel.GetOperationInternal(variableDeclaration); - var variableTreeLambdaOperation = (IAnonymousFunctionOperation)variableDeclarationOperation.Declarations.Single().Initializer.Value; + var variableTreeLambdaOperation = (IAnonymousFunctionOperation)variableDeclarationOperation.Declarations.Single().Declarations.Single().Initializer.Value; var lambdaOperation = (IAnonymousFunctionOperation)semanticModel.GetOperationInternal(lambdaSyntax); // Assert that both ways of getting to the lambda (requesting the lambda directly, and requesting via the lambda syntax) @@ -386,7 +410,7 @@ static void F() Assert.Same(variableTreeLambdaOperation, lambdaOperation); var variableDeclarationOperationSecondRequest = (IVariableDeclarationGroupOperation)semanticModel.GetOperationInternal(variableDeclaration); - var variableTreeLambdaOperationSecondRequest = (IAnonymousFunctionOperation)variableDeclarationOperation.Declarations.Single().Initializer.Value; + var variableTreeLambdaOperationSecondRequest = (IAnonymousFunctionOperation)variableDeclarationOperation.Declarations.Single().Declarations.Single(). Initializer.Value; var lambdaOperationSecondRequest = (IAnonymousFunctionOperation)semanticModel.GetOperationInternal(lambdaSyntax); // Assert that, when request the variable declaration or the lambda for a second time, there is no rebinding of the diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IAwaitExpression.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IAwaitExpression.cs index 0aada4111ce..819ac742938 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IAwaitExpression.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IAwaitExpression.cs @@ -201,7 +201,11 @@ static void M(Task t) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'await t;') - ISingleVariableDeclarationOperation (Symbol: await t) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 't') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'await t') + Declarations: + ISingleVariableDeclarationOperation (Symbol: await t) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 't') + Initializer: + null Initializer: null "; diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IConversionExpression.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IConversionExpression.cs index 466302725b4..6205fb424a0 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IConversionExpression.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IConversionExpression.cs @@ -355,7 +355,7 @@ static void Main(string[] args) }, OperationSelector = (operation) => { - var initializer = ((IVariableDeclarationOperation)operation).Initializer.Value; + var initializer = ((ISingleVariableDeclarationOperation)operation).Initializer.Value; return (IConversionOperation)((ICoalesceOperation)initializer).WhenNull; } }.Verify); @@ -3208,13 +3208,17 @@ static void M1() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'object o = null;') - ISingleVariableDeclarationOperation (Symbol: System.Object o) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'o = null') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'object o = null') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Object o) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'o = null') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= null') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Object, Constant: null, IsImplicit) (Syntax: 'null') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= null') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Object, Constant: null, IsImplicit) (Syntax: 'null') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0219: The variable 'o' is assigned but its value is never used @@ -3242,13 +3246,17 @@ void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Action stringAction) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'stringActio ... bjectAction') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'Action stringAction) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'stringActio ... bjectAction') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= objectAction') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Action, IsImplicit) (Syntax: 'objectAction') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILocalReferenceOperation: objectAction (OperationKind.LocalReference, Type: System.Action) (Syntax: 'objectAction') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= objectAction') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Action, IsImplicit) (Syntax: 'objectAction') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILocalReferenceOperation: objectAction (OperationKind.LocalReference, Type: System.Action) (Syntax: 'objectAction') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -3272,13 +3280,17 @@ void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Action ... jectAction;') - ISingleVariableDeclarationOperation (Symbol: System.Action intAction) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'intAction = objectAction') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'Action ... bjectAction') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action intAction) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'intAction = objectAction') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= objectAction') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Action, IsInvalid, IsImplicit) (Syntax: 'objectAction') + Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILocalReferenceOperation: objectAction (OperationKind.LocalReference, Type: System.Action, IsInvalid) (Syntax: 'objectAction') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= objectAction') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Action, IsInvalid, IsImplicit) (Syntax: 'objectAction') - Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILocalReferenceOperation: objectAction (OperationKind.LocalReference, Type: System.Action, IsInvalid) (Syntax: 'objectAction') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0029: Cannot implicitly convert type 'System.Action' to 'System.Action' @@ -4938,13 +4950,17 @@ static void M1() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'object o = (object)null;') - ISingleVariableDeclarationOperation (Symbol: System.Object o) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'o = (object)null') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'object o = (object)null') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Object o) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'o = (object)null') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (object)null') + IConversionOperation (Explicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Object, Constant: null) (Syntax: '(object)null') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (object)null') - IConversionOperation (Explicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Object, Constant: null) (Syntax: '(object)null') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0219: The variable 'o' is assigned but its value is never used @@ -5025,8 +5041,11 @@ private class ExpectedSymbolVerifier public static IOperation IVariableDeclarationStatementSelector(IOperation operation) => ((IVariableDeclarationGroupOperation)operation).Declarations.Single().Initializer; - public static IOperation IVariableDeclarationSelector(IOperation operation) => - ((IVariableDeclarationOperation)operation).Initializer.Value; + public static IOperation IMultiVariableDeclarationSelector(IOperation operation) => + ((IMultiVariableDeclarationOperation)operation).Initializer.Value; + + public static IOperation ISingleVariableDeclarationSelector(IOperation operation) => + ((ISingleVariableDeclarationOperation)operation).Initializer.Value; public static IOperation IReturnDeclarationStatementSelector(IOperation operation) => ((IReturnOperation)operation).ReturnedValue; @@ -5108,8 +5127,10 @@ private IOperation GetAndInvokeOperationSelector(IOperation operation) { case IVariableDeclarationGroupOperation _: return IVariableDeclarationStatementSelector(operation); - case IVariableDeclarationOperation _: - return IVariableDeclarationSelector(operation); + case IMultiVariableDeclarationOperation _: + return IMultiVariableDeclarationSelector(operation); + case ISingleVariableDeclarationOperation _: + return ISingleVariableDeclarationSelector(operation); case IReturnOperation _: return IReturnDeclarationStatementSelector(operation); case IConversionOperation conv: diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IDelegateCreationExpression.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IDelegateCreationExpression.cs index 580e5ad1b93..05d5ae0b703 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IDelegateCreationExpression.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IDelegateCreationExpression.cs @@ -25,16 +25,20 @@ void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Action a = () => { };') - ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'a = () => { }') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'Action a = () => { }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'a = () => { }') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= () => { }') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsImplicit) (Syntax: '() => { }') + Target: + IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null) (Syntax: '() => { }') + IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ }') + IReturnOperation (OperationKind.Return, Type: null, IsImplicit) (Syntax: '{ }') + ReturnedValue: + null Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= () => { }') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsImplicit) (Syntax: '() => { }') - Target: - IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null) (Syntax: '() => { }') - IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ }') - IReturnOperation (OperationKind.Return, Type: null, IsImplicit) (Syntax: '{ }') - ReturnedValue: - null + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -83,19 +87,23 @@ void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Action a = () => 1;') - ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = () => 1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'Action a = () => 1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = () => 1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= () => 1') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: '() => 1') + Target: + IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: '() => 1') + IBlockOperation (2 statements) (OperationKind.Block, Type: null, IsInvalid, IsImplicit) (Syntax: '1') + IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsInvalid, IsImplicit) (Syntax: '1') + Expression: + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') + IReturnOperation (OperationKind.Return, Type: null, IsInvalid, IsImplicit) (Syntax: '1') + ReturnedValue: + null Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= () => 1') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: '() => 1') - Target: - IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: '() => 1') - IBlockOperation (2 statements) (OperationKind.Block, Type: null, IsInvalid, IsImplicit) (Syntax: '1') - IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsInvalid, IsImplicit) (Syntax: '1') - Expression: - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') - IReturnOperation (OperationKind.Return, Type: null, IsInvalid, IsImplicit) (Syntax: '1') - ReturnedValue: - null + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0201: Only assignment, call, increment, decrement, and new object expressions can be used as a statement @@ -122,13 +130,17 @@ void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Action a = ... i) => { };') - ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = (int i) => { }') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'Action a = ... t i) => { }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = (int i) => { }') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= (int i) => { }') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: '(int i) => { }') + Target: + IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: '(int i) => { }') + IBlockOperation (0 statements) (OperationKind.Block, Type: null, IsInvalid) (Syntax: '{ }') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= (int i) => { }') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: '(int i) => { }') - Target: - IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: '(int i) => { }') - IBlockOperation (0 statements) (OperationKind.Block, Type: null, IsInvalid) (Syntax: '{ }') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1593: Delegate 'Action' does not take 1 arguments @@ -247,16 +259,20 @@ void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Action a = ... gate() { };') - ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'a = delegate() { }') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'Action a = ... egate() { }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'a = delegate() { }') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= delegate() { }') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsImplicit) (Syntax: 'delegate() { }') + Target: + IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null) (Syntax: 'delegate() { }') + IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ }') + IReturnOperation (OperationKind.Return, Type: null, IsImplicit) (Syntax: '{ }') + ReturnedValue: + null Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= delegate() { }') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsImplicit) (Syntax: 'delegate() { }') - Target: - IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null) (Syntax: 'delegate() { }') - IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ }') - IReturnOperation (OperationKind.Return, Type: null, IsImplicit) (Syntax: '{ }') - ReturnedValue: - null + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -279,16 +295,20 @@ void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Action a = ... eturn 1; };') - ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = delegat ... return 1; }') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'Action a = ... return 1; }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = delegat ... return 1; }') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= delegate( ... return 1; }') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: 'delegate() { return 1; }') + Target: + IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: 'delegate() { return 1; }') + IBlockOperation (1 statements) (OperationKind.Block, Type: null, IsInvalid) (Syntax: '{ return 1; }') + IReturnOperation (OperationKind.Return, Type: null, IsInvalid) (Syntax: 'return 1;') + ReturnedValue: + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= delegate( ... return 1; }') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: 'delegate() { return 1; }') - Target: - IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: 'delegate() { return 1; }') - IBlockOperation (1 statements) (OperationKind.Block, Type: null, IsInvalid) (Syntax: '{ return 1; }') - IReturnOperation (OperationKind.Return, Type: null, IsInvalid) (Syntax: 'return 1;') - ReturnedValue: - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS8030: Anonymous function converted to a void returning delegate cannot return a value @@ -315,13 +335,17 @@ void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Action a = ... int i) { };') - ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = delegate(int i) { }') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'Action a = ... (int i) { }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = delegate(int i) { }') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= delegate(int i) { }') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: 'delegate(int i) { }') + Target: + IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: 'delegate(int i) { }') + IBlockOperation (0 statements) (OperationKind.Block, Type: null, IsInvalid) (Syntax: '{ }') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= delegate(int i) { }') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: 'delegate(int i) { }') - Target: - IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsInvalid) (Syntax: 'delegate(int i) { }') - IBlockOperation (0 statements) (OperationKind.Block, Type: null, IsInvalid) (Syntax: '{ }') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1593: Delegate 'Action' does not take 1 arguments @@ -349,14 +373,18 @@ void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Action a = M1;') - ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'a = M1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'Action a = M1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'a = M1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= M1') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsImplicit) (Syntax: 'M1') + Target: + IMethodReferenceOperation: void Program.M1() (OperationKind.MethodReference, Type: null) (Syntax: 'M1') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: Program, IsImplicit) (Syntax: 'M1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= M1') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsImplicit) (Syntax: 'M1') - Target: - IMethodReferenceOperation: void Program.M1() (OperationKind.MethodReference, Type: null) (Syntax: 'M1') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: Program, IsImplicit) (Syntax: 'M1') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -406,14 +434,18 @@ void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Action a = M1;') - ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = M1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'Action a = M1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = M1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= M1') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Action, IsInvalid, IsImplicit) (Syntax: 'M1') + Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid) (Syntax: 'M1') + Children(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= M1') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Action, IsInvalid, IsImplicit) (Syntax: 'M1') - Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid) (Syntax: 'M1') - Children(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0103: The name 'M1' does not exist in the current context @@ -470,14 +502,18 @@ void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Action a = M1;') - ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = M1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'Action a = M1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = M1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= M1') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: 'M1') + Target: + IMethodReferenceOperation: System.Int32 Program.M1() (OperationKind.MethodReference, Type: null, IsInvalid) (Syntax: 'M1') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: Program, IsInvalid, IsImplicit) (Syntax: 'M1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= M1') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: 'M1') - Target: - IMethodReferenceOperation: System.Int32 Program.M1() (OperationKind.MethodReference, Type: null, IsInvalid) (Syntax: 'M1') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: Program, IsInvalid, IsImplicit) (Syntax: 'M1') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0407: 'int Program.M1()' has the wrong return type @@ -536,14 +572,18 @@ void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Action a = M1;') - ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = M1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'Action a = M1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = M1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= M1') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: 'M1') + Target: + IOperation: (OperationKind.None, Type: null, IsInvalid) (Syntax: 'M1') + Children(1): + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: Program, IsInvalid, IsImplicit) (Syntax: 'M1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= M1') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: 'M1') - Target: - IOperation: (OperationKind.None, Type: null, IsInvalid) (Syntax: 'M1') - Children(1): - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: Program, IsInvalid, IsImplicit) (Syntax: 'M1') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0123: No overload for 'M1' matches delegate 'Action' @@ -1633,14 +1673,18 @@ void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Action a = M1;') - ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = M1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'Action a = M1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'a = M1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= M1') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: 'M1') + Target: + IOperation: (OperationKind.None, Type: null, IsInvalid) (Syntax: 'M1') + Children(1): + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: Program, IsInvalid, IsImplicit) (Syntax: 'M1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= M1') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsInvalid, IsImplicit) (Syntax: 'M1') - Target: - IOperation: (OperationKind.None, Type: null, IsInvalid) (Syntax: 'M1') - Children(1): - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: Program, IsInvalid, IsImplicit) (Syntax: 'M1') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0123: No overload for 'Program.M1(object)' matches delegate 'Action' @@ -1669,14 +1713,18 @@ void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Action a = M1;') - ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'a = M1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'Action a = M1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Action a) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'a = M1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= M1') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsImplicit) (Syntax: 'M1') + Target: + IMethodReferenceOperation: void Program.M1(System.Int32 i) (OperationKind.MethodReference, Type: null) (Syntax: 'M1') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: Program, IsImplicit) (Syntax: 'M1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= M1') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Action, IsImplicit) (Syntax: 'M1') - Target: - IMethodReferenceOperation: void Program.M1(System.Int32 i) (OperationKind.MethodReference, Type: null) (Syntax: 'M1') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: Program, IsImplicit) (Syntax: 'M1') + null "; var expectedDiagnostics = DiagnosticDescription.None; diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IFixedStatement.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IFixedStatement.cs index da2406f99d6..b12e4eaf3b9 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IFixedStatement.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IFixedStatement.cs @@ -36,16 +36,20 @@ void M1() IOperation: (OperationKind.None, Type: null) (Syntax: 'fixed(int * ... }') Children(2): IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int *p = &i') - ISingleVariableDeclarationOperation (Symbol: System.Int32* p) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p = &i') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int *p = &i') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32* p) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p = &i') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &i') + IOperation: (OperationKind.None, Type: null) (Syntax: '&i') + Children(1): + IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&i') + Reference: + IFieldReferenceOperation: System.Int32 C.i (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'i') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: C, IsImplicit) (Syntax: 'i') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &i') - IOperation: (OperationKind.None, Type: null) (Syntax: '&i') - Children(1): - IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&i') - Reference: - IFieldReferenceOperation: System.Int32 C.i (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'i') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: C, IsImplicit) (Syntax: 'i') + null IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'Console.Wri ... is {*p}"");') Expression: @@ -105,27 +109,31 @@ void M1() string expectedOperationTree = @" IOperation: (OperationKind.None, Type: null) (Syntax: 'fixed (int* ... }') Children(2): - IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int* p1 = &i1, p2 = &i2') - ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = &i1') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &i1') - IOperation: (OperationKind.None, Type: null) (Syntax: '&i1') - Children(1): - IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&i1') - Reference: - IFieldReferenceOperation: System.Int32 C.i1 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'i1') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: C, IsImplicit) (Syntax: 'i1') - ISingleVariableDeclarationOperation (Symbol: System.Int32* p2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p2 = &i2') + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int* p1 = &i1, p2 = &i2') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int* p1 = &i1, p2 = &i2') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = &i1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &i1') + IOperation: (OperationKind.None, Type: null) (Syntax: '&i1') + Children(1): + IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&i1') + Reference: + IFieldReferenceOperation: System.Int32 C.i1 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'i1') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: C, IsImplicit) (Syntax: 'i1') + ISingleVariableDeclarationOperation (Symbol: System.Int32* p2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p2 = &i2') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &i2') + IOperation: (OperationKind.None, Type: null) (Syntax: '&i2') + Children(1): + IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&i2') + Reference: + IFieldReferenceOperation: System.Int32 C.i2 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'i2') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: C, IsImplicit) (Syntax: 'i2') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &i2') - IOperation: (OperationKind.None, Type: null) (Syntax: '&i2') - Children(1): - IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&i2') - Reference: - IFieldReferenceOperation: System.Int32 C.i2 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'i2') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: C, IsImplicit) (Syntax: 'i2') + null IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'i3 = *p1 + *p2;') Expression: @@ -181,29 +189,37 @@ void M1() IOperation: (OperationKind.None, Type: null) (Syntax: 'fixed (int* ... }') Children(2): IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int* p1 = &i1') - ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = &i1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int* p1 = &i1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = &i1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &i1') + IOperation: (OperationKind.None, Type: null) (Syntax: '&i1') + Children(1): + IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&i1') + Reference: + IFieldReferenceOperation: System.Int32 C.i1 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'i1') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: C, IsImplicit) (Syntax: 'i1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &i1') - IOperation: (OperationKind.None, Type: null) (Syntax: '&i1') - Children(1): - IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&i1') - Reference: - IFieldReferenceOperation: System.Int32 C.i1 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'i1') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: C, IsImplicit) (Syntax: 'i1') + null IOperation: (OperationKind.None, Type: null) (Syntax: 'fixed (int* ... }') Children(2): IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int* p2 = &i2') - ISingleVariableDeclarationOperation (Symbol: System.Int32* p2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p2 = &i2') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int* p2 = &i2') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32* p2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p2 = &i2') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &i2') + IOperation: (OperationKind.None, Type: null) (Syntax: '&i2') + Children(1): + IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&i2') + Reference: + IFieldReferenceOperation: System.Int32 C.i2 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'i2') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: C, IsImplicit) (Syntax: 'i2') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &i2') - IOperation: (OperationKind.None, Type: null) (Syntax: '&i2') - Children(1): - IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&i2') - Reference: - IFieldReferenceOperation: System.Int32 C.i2 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'i2') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: C, IsImplicit) (Syntax: 'i2') + null IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'i3 = *p1 + *p2;') Expression: @@ -254,11 +270,15 @@ void M1() IOperation: (OperationKind.None, Type: null, IsInvalid) (Syntax: 'fixed (int* ... }') Children(2): IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int* p1 =') - ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p1 =') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'int* p1 =') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p1 =') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) + null IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'i3 = *p1;') Expression: @@ -308,16 +328,20 @@ void M1() IOperation: (OperationKind.None, Type: null, IsInvalid) (Syntax: 'fixed (int* ... }') Children(2): IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int* p1 = &i1') - ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = &i1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int* p1 = &i1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = &i1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &i1') + IOperation: (OperationKind.None, Type: null) (Syntax: '&i1') + Children(1): + IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&i1') + Reference: + IFieldReferenceOperation: System.Int32 C.i1 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'i1') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: C, IsImplicit) (Syntax: 'i1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &i1') - IOperation: (OperationKind.None, Type: null) (Syntax: '&i1') - Children(1): - IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&i1') - Reference: - IFieldReferenceOperation: System.Int32 C.i1 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'i1') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: C, IsImplicit) (Syntax: 'i1') + null IBlockOperation (1 statements) (OperationKind.Block, Type: null, IsInvalid) (Syntax: '{ ... }') IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsInvalid) (Syntax: 'i3 = &p1;') Expression: diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IForEachLoopStatement.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IForEachLoopStatement.cs index 49ed39b5612..8b7a090c125 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IForEachLoopStatement.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IForEachLoopStatement.cs @@ -584,20 +584,24 @@ static void Main() IBlockOperation (1 statements, 1 locals) (OperationKind.Block, Type: null) (Syntax: '{ ... }') Locals: Local_1: System.Boolean b IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'bool b = !x ... uals(null);') - ISingleVariableDeclarationOperation (Symbol: System.Boolean b) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'b = !x.Equals(null)') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'bool b = !x.Equals(null)') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Boolean b) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'b = !x.Equals(null)') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= !x.Equals(null)') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Boolean, IsImplicit) (Syntax: '!x.Equals(null)') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + IUnaryOperation (UnaryOperatorKind.Not) (OperationKind.UnaryOperator, Type: System.Object) (Syntax: '!x.Equals(null)') + Operand: + IInvalidOperation (OperationKind.Invalid, Type: ?) (Syntax: 'x.Equals(null)') + Children(2): + IOperation: (OperationKind.None, Type: null) (Syntax: 'x.Equals') + Children(1): + ILocalReferenceOperation: x (OperationKind.LocalReference, Type: MissingType) (Syntax: 'x') + ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= !x.Equals(null)') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Boolean, IsImplicit) (Syntax: '!x.Equals(null)') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - IUnaryOperation (UnaryOperatorKind.Not) (OperationKind.UnaryOperator, Type: System.Object) (Syntax: '!x.Equals(null)') - Operand: - IInvalidOperation (OperationKind.Invalid, Type: ?) (Syntax: 'x.Equals(null)') - Children(2): - IOperation: (OperationKind.None, Type: null) (Syntax: 'x.Equals') - Children(1): - ILocalReferenceOperation: x (OperationKind.LocalReference, Type: MissingType) (Syntax: 'x') - ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') + null NextVariables(0) "; VerifyOperationTreeForTest(source, expectedOperationTree); diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IForLoopStatement.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IForLoopStatement.cs index 3df5387fab5..b7230df9a2f 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IForLoopStatement.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IForLoopStatement.cs @@ -39,10 +39,14 @@ static void Main() ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 3) (Syntax: '3') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'i = i + 1') Expression: @@ -564,10 +568,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 100) (Syntax: '100') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int k = 200') - ISingleVariableDeclarationOperation (Symbol: System.Int32 k) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'k = 200') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int k = 200') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 k) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'k = 200') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 200') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 200) (Syntax: '200') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 200') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 200) (Syntax: '200') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'k = k - 1') Expression: @@ -657,10 +665,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 100) (Syntax: '100') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 10') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 10') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 10') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 10') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 10') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 10) (Syntax: '10') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 10') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 10) (Syntax: '10') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'i = i + 1') Expression: @@ -708,10 +720,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 100) (Syntax: '100') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'i = i + 1') Expression: @@ -736,10 +752,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 10) (Syntax: '10') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int j = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int j = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'j = j + 1') Expression: @@ -789,10 +809,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 10) (Syntax: '10') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'i = i + 1') Expression: @@ -817,10 +841,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 10) (Syntax: '10') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int j = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int j = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'j = j + 1') Expression: @@ -876,10 +904,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5) (Syntax: '5') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'i = i + 1') Expression: @@ -904,14 +936,18 @@ static void Main(string[] args) ILocalReferenceOperation: j (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'j') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int j = i + 1') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = i + 1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int j = i + 1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = i + 1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i + 1') + IBinaryOperation (BinaryOperatorKind.Add) (OperationKind.BinaryOperator, Type: System.Int32) (Syntax: 'i + 1') + Left: + ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') + Right: + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i + 1') - IBinaryOperation (BinaryOperatorKind.Add) (OperationKind.BinaryOperator, Type: System.Int32) (Syntax: 'i + 1') - Left: - ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') - Right: - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'j = j - 1') Expression: @@ -962,10 +998,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5) (Syntax: '5') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'i = i + 1') Expression: @@ -990,10 +1030,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 10) (Syntax: '10') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int j = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int j = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'j = j + 1') Expression: @@ -1056,10 +1100,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5) (Syntax: '5') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'i = i + 1') Expression: @@ -1084,10 +1132,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 10) (Syntax: '10') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int j = 1') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int j = 1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 1') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 1') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'j = j + 1') Expression: @@ -1175,10 +1227,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5) (Syntax: '5') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'i = i + 1') Expression: @@ -1203,10 +1259,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 10) (Syntax: '10') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int j = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int j = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'j = j + 1') Expression: @@ -1270,10 +1330,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 10) (Syntax: '10') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'i = i + 1') Expression: @@ -1298,10 +1362,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 10) (Syntax: '10') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int j = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int j = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom(0) Body: IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') @@ -1347,10 +1415,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 10) (Syntax: '10') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom(0) Body: IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') @@ -1364,10 +1436,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5) (Syntax: '5') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int j = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int j = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom(0) Body: IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') @@ -1406,15 +1482,19 @@ static void Main(string[] args) Right: ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5) (Syntax: '5') Before: - IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0, j = 1') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 1') + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0, j = 1') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0, j = 1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 1') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 1') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'i = i + 1') Expression: @@ -1474,10 +1554,14 @@ static void Main(string[] args) ILocalReferenceOperation: x (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'x') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'i = i + 1') Expression: @@ -1590,28 +1674,32 @@ public class F ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5) (Syntax: '5') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'F f = new F ... s = ""abc"" }') - ISingleVariableDeclarationOperation (Symbol: F f) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'f = new F { ... s = ""abc"" }') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new F { i ... s = ""abc"" }') - IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F) (Syntax: 'new F { i = ... s = ""abc"" }') - Arguments(0) + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'F f = new F ... s = ""abc"" }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: F f) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'f = new F { ... s = ""abc"" }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: F) (Syntax: '{ i = 0, s = ""abc"" }') - Initializers(2): - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.Int32) (Syntax: 'i = 0') - Left: - IFieldReferenceOperation: System.Int32 F.i (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'i') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 'i') - Right: - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.String) (Syntax: 's = ""abc""') - Left: - IFieldReferenceOperation: System.String F.s (OperationKind.FieldReference, Type: System.String) (Syntax: 's') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 's') - Right: - ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: ""abc"") (Syntax: '""abc""') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new F { i ... s = ""abc"" }') + IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F) (Syntax: 'new F { i = ... s = ""abc"" }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: F) (Syntax: '{ i = 0, s = ""abc"" }') + Initializers(2): + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.Int32) (Syntax: 'i = 0') + Left: + IFieldReferenceOperation: System.Int32 F.i (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'i') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 'i') + Right: + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.String) (Syntax: 's = ""abc""') + Left: + IFieldReferenceOperation: System.String F.s (OperationKind.FieldReference, Type: System.String) (Syntax: 's') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 's') + Right: + ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: ""abc"") (Syntax: '""abc""') + Initializer: + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'f.i = f.i + 1') Expression: @@ -1741,10 +1829,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5) (Syntax: '5') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var i = 1') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'var i = 1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 1') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 1') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'i = i + 1') Expression: @@ -1795,80 +1887,84 @@ static void Main(string[] args) null Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'IEnumerable ... select w') - ISingleVariableDeclarationOperation (Symbol: System.Collections.Generic.IEnumerable str) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'str = from ... select w') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'IEnumerable ... select w') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Collections.Generic.IEnumerable str) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'str = from ... select w') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= from x in ... select w') + ITranslatedQueryOperation (OperationKind.TranslatedQuery, Type: System.Collections.Generic.IEnumerable) (Syntax: 'from x in "" ... select w') + Expression: + IInvocationOperation (System.Collections.Generic.IEnumerable System.Linq.Enumerable.Select(this System.Collections.Generic.IEnumerable source, System.Func selector)) (OperationKind.Invocation, Type: System.Collections.Generic.IEnumerable, IsImplicit) (Syntax: 'select w') + Instance Receiver: + null + Arguments(2): + IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: source) (OperationKind.Argument, Type: System.Collections.Generic.IEnumerable, IsImplicit) (Syntax: 'select z') + IInvocationOperation (System.Collections.Generic.IEnumerable System.Linq.Enumerable.Select<, System.String>(this System.Collections.Generic.IEnumerable<> source, System.Func<, System.String> selector)) (OperationKind.Invocation, Type: System.Collections.Generic.IEnumerable, IsImplicit) (Syntax: 'select z') + Instance Receiver: + null + Arguments(2): + IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: source) (OperationKind.Argument, Type: System.Collections.Generic.IEnumerable<>, IsImplicit) (Syntax: 'let z = x.ToString()') + IInvocationOperation (System.Collections.Generic.IEnumerable<> System.Linq.Enumerable.Select>(this System.Collections.Generic.IEnumerable source, System.Func> selector)) (OperationKind.Invocation, Type: System.Collections.Generic.IEnumerable<>, IsImplicit) (Syntax: 'let z = x.ToString()') + Instance Receiver: + null + Arguments(2): + IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: source) (OperationKind.Argument, Type: System.Collections.Generic.IEnumerable, IsImplicit) (Syntax: 'from x in ""123""') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Collections.Generic.IEnumerable, IsImplicit) (Syntax: 'from x in ""123""') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: ""123"") (Syntax: '""123""') + InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: selector) (OperationKind.Argument, Type: System.Func>, IsImplicit) (Syntax: 'x.ToString()') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Func>, IsImplicit) (Syntax: 'x.ToString()') + Target: + IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsImplicit) (Syntax: 'x.ToString()') + IBlockOperation (1 statements) (OperationKind.Block, Type: null, IsImplicit) (Syntax: 'x.ToString()') + IReturnOperation (OperationKind.Return, Type: null, IsImplicit) (Syntax: 'x.ToString()') + ReturnedValue: + IObjectCreationOperation (Constructor: ..ctor(System.Char x, System.String z)) (OperationKind.ObjectCreation, Type: , IsImplicit) (Syntax: 'let z = x.ToString()') + Arguments(2): + IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: x) (OperationKind.Argument, Type: System.Char, IsImplicit) (Syntax: 'let z = x.ToString()') + IParameterReferenceOperation: x (OperationKind.ParameterReference, Type: System.Char, IsImplicit) (Syntax: 'let z = x.ToString()') + InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: z) (OperationKind.Argument, Type: System.String, IsImplicit) (Syntax: 'x.ToString()') + IInvocationOperation (virtual System.String System.Char.ToString()) (OperationKind.Invocation, Type: System.String) (Syntax: 'x.ToString()') + Instance Receiver: + IOperation: (OperationKind.None, Type: null) (Syntax: 'x') + Arguments(0) + InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Initializer: + null + InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: selector) (OperationKind.Argument, Type: System.Func<, System.String>, IsImplicit) (Syntax: 'z') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Func<, System.String>, IsImplicit) (Syntax: 'z') + Target: + IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsImplicit) (Syntax: 'z') + IBlockOperation (1 statements) (OperationKind.Block, Type: null, IsImplicit) (Syntax: 'z') + IReturnOperation (OperationKind.Return, Type: null, IsImplicit) (Syntax: 'z') + ReturnedValue: + IOperation: (OperationKind.None, Type: null) (Syntax: 'z') + InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: selector) (OperationKind.Argument, Type: System.Func, IsImplicit) (Syntax: 'w') + IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Func, IsImplicit) (Syntax: 'w') + Target: + IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsImplicit) (Syntax: 'w') + IBlockOperation (1 statements) (OperationKind.Block, Type: null, IsImplicit) (Syntax: 'w') + IReturnOperation (OperationKind.Return, Type: null, IsImplicit) (Syntax: 'w') + ReturnedValue: + IOperation: (OperationKind.None, Type: null) (Syntax: 'w') + InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= from x in ... select w') - ITranslatedQueryOperation (OperationKind.TranslatedQuery, Type: System.Collections.Generic.IEnumerable) (Syntax: 'from x in "" ... select w') - Expression: - IInvocationOperation (System.Collections.Generic.IEnumerable System.Linq.Enumerable.Select(this System.Collections.Generic.IEnumerable source, System.Func selector)) (OperationKind.Invocation, Type: System.Collections.Generic.IEnumerable, IsImplicit) (Syntax: 'select w') - Instance Receiver: - null - Arguments(2): - IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: source) (OperationKind.Argument, Type: System.Collections.Generic.IEnumerable, IsImplicit) (Syntax: 'select z') - IInvocationOperation (System.Collections.Generic.IEnumerable System.Linq.Enumerable.Select<, System.String>(this System.Collections.Generic.IEnumerable<> source, System.Func<, System.String> selector)) (OperationKind.Invocation, Type: System.Collections.Generic.IEnumerable, IsImplicit) (Syntax: 'select z') - Instance Receiver: - null - Arguments(2): - IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: source) (OperationKind.Argument, Type: System.Collections.Generic.IEnumerable<>, IsImplicit) (Syntax: 'let z = x.ToString()') - IInvocationOperation (System.Collections.Generic.IEnumerable<> System.Linq.Enumerable.Select>(this System.Collections.Generic.IEnumerable source, System.Func> selector)) (OperationKind.Invocation, Type: System.Collections.Generic.IEnumerable<>, IsImplicit) (Syntax: 'let z = x.ToString()') - Instance Receiver: - null - Arguments(2): - IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: source) (OperationKind.Argument, Type: System.Collections.Generic.IEnumerable, IsImplicit) (Syntax: 'from x in ""123""') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Collections.Generic.IEnumerable, IsImplicit) (Syntax: 'from x in ""123""') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: ""123"") (Syntax: '""123""') - InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: selector) (OperationKind.Argument, Type: System.Func>, IsImplicit) (Syntax: 'x.ToString()') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Func>, IsImplicit) (Syntax: 'x.ToString()') - Target: - IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsImplicit) (Syntax: 'x.ToString()') - IBlockOperation (1 statements) (OperationKind.Block, Type: null, IsImplicit) (Syntax: 'x.ToString()') - IReturnOperation (OperationKind.Return, Type: null, IsImplicit) (Syntax: 'x.ToString()') - ReturnedValue: - IObjectCreationOperation (Constructor: ..ctor(System.Char x, System.String z)) (OperationKind.ObjectCreation, Type: , IsImplicit) (Syntax: 'let z = x.ToString()') - Arguments(2): - IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: x) (OperationKind.Argument, Type: System.Char, IsImplicit) (Syntax: 'let z = x.ToString()') - IParameterReferenceOperation: x (OperationKind.ParameterReference, Type: System.Char, IsImplicit) (Syntax: 'let z = x.ToString()') - InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: z) (OperationKind.Argument, Type: System.String, IsImplicit) (Syntax: 'x.ToString()') - IInvocationOperation (virtual System.String System.Char.ToString()) (OperationKind.Invocation, Type: System.String) (Syntax: 'x.ToString()') - Instance Receiver: - IOperation: (OperationKind.None, Type: null) (Syntax: 'x') - Arguments(0) - InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Initializer: - null - InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: selector) (OperationKind.Argument, Type: System.Func<, System.String>, IsImplicit) (Syntax: 'z') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Func<, System.String>, IsImplicit) (Syntax: 'z') - Target: - IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsImplicit) (Syntax: 'z') - IBlockOperation (1 statements) (OperationKind.Block, Type: null, IsImplicit) (Syntax: 'z') - IReturnOperation (OperationKind.Return, Type: null, IsImplicit) (Syntax: 'z') - ReturnedValue: - IOperation: (OperationKind.None, Type: null) (Syntax: 'z') - InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: selector) (OperationKind.Argument, Type: System.Func, IsImplicit) (Syntax: 'w') - IDelegateCreationOperation (OperationKind.DelegateCreation, Type: System.Func, IsImplicit) (Syntax: 'w') - Target: - IAnonymousFunctionOperation (Symbol: lambda expression) (OperationKind.AnonymousFunction, Type: null, IsImplicit) (Syntax: 'w') - IBlockOperation (1 statements) (OperationKind.Block, Type: null, IsImplicit) (Syntax: 'w') - IReturnOperation (OperationKind.Return, Type: null, IsImplicit) (Syntax: 'w') - ReturnedValue: - IOperation: (OperationKind.None, Type: null) (Syntax: 'w') - InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + null AtLoopBottom(0) Body: IBlockOperation (2 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') @@ -1943,10 +2039,14 @@ private static IEnumerable fun() ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5) (Syntax: '5') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom(0) Body: IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') @@ -2084,13 +2184,17 @@ static void Main(string[] args) IBlockOperation (2 statements, 1 locals) (OperationKind.Block, Type: null) (Syntax: '{ ... }') Locals: Local_1: System.Func lambda IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var lambda ... .Compile();') - ISingleVariableDeclarationOperation (Symbol: System.Func lambda) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'lambda = e.Compile()') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'var lambda = e.Compile()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Func lambda) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'lambda = e.Compile()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= e.Compile()') + IInvocationOperation ( System.Func System.Linq.Expressions.Expression>.Compile()) (OperationKind.Invocation, Type: System.Func) (Syntax: 'e.Compile()') + Instance Receiver: + ILocalReferenceOperation: e (OperationKind.LocalReference, Type: System.Linq.Expressions.Expression>) (Syntax: 'e') + Arguments(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= e.Compile()') - IInvocationOperation ( System.Func System.Linq.Expressions.Expression>.Compile()) (OperationKind.Invocation, Type: System.Func) (Syntax: 'e.Compile()') - Instance Receiver: - ILocalReferenceOperation: e (OperationKind.LocalReference, Type: System.Linq.Expressions.Expression>) (Syntax: 'e') - Arguments(0) + null IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'System.Cons ... lambda(i));') Expression: IInvocationOperation (void System.Console.WriteLine(System.Int32 value)) (OperationKind.Invocation, Type: System.Void) (Syntax: 'System.Cons ... (lambda(i))') @@ -2142,10 +2246,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5) (Syntax: '5') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 1') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 1') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 1') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'e = x => x * x') Expression: @@ -2180,13 +2288,17 @@ static void Main(string[] args) IBlockOperation (2 statements, 1 locals) (OperationKind.Block, Type: null) (Syntax: '{ ... }') Locals: Local_1: System.Func lambda IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var lambda ... .Compile();') - ISingleVariableDeclarationOperation (Symbol: System.Func lambda) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'lambda = e.Compile()') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'var lambda = e.Compile()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Func lambda) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'lambda = e.Compile()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= e.Compile()') + IInvocationOperation ( System.Func System.Linq.Expressions.Expression>.Compile()) (OperationKind.Invocation, Type: System.Func) (Syntax: 'e.Compile()') + Instance Receiver: + ILocalReferenceOperation: e (OperationKind.LocalReference, Type: System.Linq.Expressions.Expression>) (Syntax: 'e') + Arguments(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= e.Compile()') - IInvocationOperation ( System.Func System.Linq.Expressions.Expression>.Compile()) (OperationKind.Invocation, Type: System.Func) (Syntax: 'e.Compile()') - Instance Receiver: - ILocalReferenceOperation: e (OperationKind.LocalReference, Type: System.Linq.Expressions.Expression>) (Syntax: 'e') - Arguments(0) + null IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'System.Cons ... lambda(i));') Expression: IInvocationOperation (void System.Console.WriteLine(System.Int32 value)) (OperationKind.Invocation, Type: System.Void) (Syntax: 'System.Cons ... (lambda(i))') @@ -2245,13 +2357,17 @@ public class C1 ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'C1 i = new C1()') - ISingleVariableDeclarationOperation (Symbol: C1 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = new C1()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C1()') - IObjectCreationOperation (Constructor: C1..ctor()) (OperationKind.ObjectCreation, Type: C1) (Syntax: 'new C1()') - Arguments(0) + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'C1 i = new C1()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: C1 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = new C1()') Initializer: - null + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C1()') + IObjectCreationOperation (Constructor: C1..ctor()) (OperationKind.ObjectCreation, Type: C1) (Syntax: 'new C1()') + Arguments(0) + Initializer: + null + Initializer: + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'i++') Expression: @@ -2292,12 +2408,16 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5) (Syntax: '5') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int j = i++') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = i++') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int j = i++') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = i++') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i++') + IIncrementOrDecrementOperation (Postfix) (OperationKind.Increment, Type: System.Int32) (Syntax: 'i++') + Target: + ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i++') - IIncrementOrDecrementOperation (Postfix) (OperationKind.Increment, Type: System.Int32) (Syntax: 'i++') - Target: - ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: '++j') Expression: @@ -2349,12 +2469,16 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5) (Syntax: '5') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int j = ++i') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = ++i') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int j = ++i') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = ++i') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= ++i') + IIncrementOrDecrementOperation (Prefix) (OperationKind.Increment, Type: System.Int32) (Syntax: '++i') + Target: + ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= ++i') - IIncrementOrDecrementOperation (Prefix) (OperationKind.Increment, Type: System.Int32) (Syntax: '++i') - Target: - ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: '++j') Expression: @@ -2406,10 +2530,14 @@ static void Main(string[] args) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5) (Syntax: '5') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom(0) Body: IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') @@ -2470,10 +2598,14 @@ static int foo(int x) ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 5) (Syntax: '5') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom(0) Body: IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') @@ -2555,15 +2687,19 @@ static void Main(string[] args) Right: ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 100, IsInvalid) (Syntax: '100') Before: - IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int k = 0, j = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 k) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'k = 0') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int k = 0, j = 0') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int k = 0, j = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 k) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'k = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsInvalid, IsImplicit) (Syntax: '') Expression: @@ -2611,28 +2747,32 @@ private void M() ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 10) (Syntax: '10') Before: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var j = int ... i) ? i : 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = int.Try ... i) ? i : 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'var j = int ... i) ? i : 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = int.Try ... i) ? i : 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= int.TryPa ... i) ? i : 0') + IConditionalOperation (OperationKind.Conditional, Type: System.Int32) (Syntax: 'int.TryPars ... i) ? i : 0') + Condition: + IInvocationOperation (System.Boolean System.Int32.TryParse(System.String s, out System.Int32 result)) (OperationKind.Invocation, Type: System.Boolean) (Syntax: 'int.TryPars ... out var i)') + Instance Receiver: + null + Arguments(2): + IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: s) (OperationKind.Argument, Type: System.String) (Syntax: 's') + ILocalReferenceOperation: s (OperationKind.LocalReference, Type: System.String) (Syntax: 's') + InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: result) (OperationKind.Argument, Type: System.Int32) (Syntax: 'out var i') + IDeclarationExpressionOperation (OperationKind.DeclarationExpression, Type: System.Int32) (Syntax: 'var i') + ILocalReferenceOperation: i (IsDeclaration: True) (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') + InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + WhenTrue: + ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') + WhenFalse: + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= int.TryPa ... i) ? i : 0') - IConditionalOperation (OperationKind.Conditional, Type: System.Int32) (Syntax: 'int.TryPars ... i) ? i : 0') - Condition: - IInvocationOperation (System.Boolean System.Int32.TryParse(System.String s, out System.Int32 result)) (OperationKind.Invocation, Type: System.Boolean) (Syntax: 'int.TryPars ... out var i)') - Instance Receiver: - null - Arguments(2): - IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: s) (OperationKind.Argument, Type: System.String) (Syntax: 's') - ILocalReferenceOperation: s (OperationKind.LocalReference, Type: System.String) (Syntax: 's') - InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: result) (OperationKind.Argument, Type: System.Int32) (Syntax: 'out var i') - IDeclarationExpressionOperation (OperationKind.DeclarationExpression, Type: System.Int32) (Syntax: 'var i') - ILocalReferenceOperation: i (IsDeclaration: True) (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') - InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - WhenTrue: - ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') - WhenFalse: - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null AtLoopBottom: IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null, IsImplicit) (Syntax: 'i++') Expression: diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IObjectCreationExpression.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IObjectCreationExpression.cs index 8cd61d4fd39..5fd06cab156 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IObjectCreationExpression.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IObjectCreationExpression.cs @@ -51,126 +51,154 @@ public void M1() Local_6: F e1 Local_7: F e2 IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var x1 = new F();') - ISingleVariableDeclarationOperation (Symbol: F x1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x1 = new F()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new F()') - IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F) (Syntax: 'new F()') - Arguments(0) + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'var x1 = new F()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: F x1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x1 = new F()') Initializer: - null - IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var x2 = ne ... ield = 2 };') - ISingleVariableDeclarationOperation (Symbol: F x2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x2 = new F( ... Field = 2 }') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new F()') + IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F) (Syntax: 'new F()') + Arguments(0) + Initializer: + null Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new F() { Field = 2 }') - IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F) (Syntax: 'new F() { Field = 2 }') - Arguments(0) + null + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var x2 = ne ... ield = 2 };') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'var x2 = ne ... Field = 2 }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: F x2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x2 = new F( ... Field = 2 }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: F) (Syntax: '{ Field = 2 }') - Initializers(1): - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.Int32) (Syntax: 'Field = 2') - Left: - IFieldReferenceOperation: System.Int32 F.Field (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'Field') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 'Field') - Right: - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') - IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var x3 = ne ... ty1 = """" };') - ISingleVariableDeclarationOperation (Symbol: F x3) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x3 = new F( ... rty1 = """" }') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new F() { Field = 2 }') + IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F) (Syntax: 'new F() { Field = 2 }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: F) (Syntax: '{ Field = 2 }') + Initializers(1): + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.Int32) (Syntax: 'Field = 2') + Left: + IFieldReferenceOperation: System.Int32 F.Field (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'Field') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 'Field') + Right: + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new F() { ... rty1 = """" }') - IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F) (Syntax: 'new F() { P ... rty1 = """" }') - Arguments(0) + null + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var x3 = ne ... ty1 = """" };') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'var x3 = ne ... rty1 = """" }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: F x3) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x3 = new F( ... rty1 = """" }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: F) (Syntax: '{ Property1 = """" }') - Initializers(1): - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.String) (Syntax: 'Property1 = """"') - Left: - IPropertyReferenceOperation: System.String F.Property1 { get; set; } (OperationKind.PropertyReference, Type: System.String) (Syntax: 'Property1') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 'Property1') - Right: - ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: """") (Syntax: '""""') - IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var x4 = ne ... ield = 2 };') - ISingleVariableDeclarationOperation (Symbol: F x4) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x4 = new F( ... Field = 2 }') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new F() { ... rty1 = """" }') + IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F) (Syntax: 'new F() { P ... rty1 = """" }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: F) (Syntax: '{ Property1 = """" }') + Initializers(1): + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.String) (Syntax: 'Property1 = """"') + Left: + IPropertyReferenceOperation: System.String F.Property1 { get; set; } (OperationKind.PropertyReference, Type: System.String) (Syntax: 'Property1') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 'Property1') + Right: + ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: """") (Syntax: '""""') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new F() { ... Field = 2 }') - IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F) (Syntax: 'new F() { P ... Field = 2 }') - Arguments(0) + null + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var x4 = ne ... ield = 2 };') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'var x4 = ne ... Field = 2 }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: F x4) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x4 = new F( ... Field = 2 }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: F) (Syntax: '{ Property1 ... Field = 2 }') - Initializers(2): - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.String) (Syntax: 'Property1 = """"') - Left: - IPropertyReferenceOperation: System.String F.Property1 { get; set; } (OperationKind.PropertyReference, Type: System.String) (Syntax: 'Property1') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 'Property1') - Right: - ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: """") (Syntax: '""""') - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.Int32) (Syntax: 'Field = 2') - Left: - IFieldReferenceOperation: System.Int32 F.Field (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'Field') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 'Field') - Right: - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') - IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var x5 = ne ... = true } };') - ISingleVariableDeclarationOperation (Symbol: F x5) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x5 = new F( ... = true } }') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new F() { ... Field = 2 }') + IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F) (Syntax: 'new F() { P ... Field = 2 }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: F) (Syntax: '{ Property1 ... Field = 2 }') + Initializers(2): + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.String) (Syntax: 'Property1 = """"') + Left: + IPropertyReferenceOperation: System.String F.Property1 { get; set; } (OperationKind.PropertyReference, Type: System.String) (Syntax: 'Property1') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 'Property1') + Right: + ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: """") (Syntax: '""""') + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.Int32) (Syntax: 'Field = 2') + Left: + IFieldReferenceOperation: System.Int32 F.Field (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'Field') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 'Field') + Right: + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new F() { ... = true } }') - IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F) (Syntax: 'new F() { P ... = true } }') - Arguments(0) + null + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var x5 = ne ... = true } };') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'var x5 = ne ... = true } }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: F x5) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x5 = new F( ... = true } }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: F) (Syntax: '{ Property2 ... = true } }') - Initializers(1): - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: B) (Syntax: 'Property2 = ... ld = true }') - Left: - IPropertyReferenceOperation: B F.Property2 { get; set; } (OperationKind.PropertyReference, Type: B) (Syntax: 'Property2') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 'Property2') - Right: - IObjectCreationOperation (Constructor: B..ctor()) (OperationKind.ObjectCreation, Type: B) (Syntax: 'new B { Field = true }') - Arguments(0) - Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: B) (Syntax: '{ Field = true }') - Initializers(1): - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.Boolean) (Syntax: 'Field = true') - Left: - IFieldReferenceOperation: System.Boolean B.Field (OperationKind.FieldReference, Type: System.Boolean) (Syntax: 'Field') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: B, IsImplicit) (Syntax: 'Field') - Right: - ILiteralOperation (OperationKind.Literal, Type: System.Boolean, Constant: True) (Syntax: 'true') - IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'var e1 = ne ... rty2 = 1 };') - ISingleVariableDeclarationOperation (Symbol: F e1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'e1 = new F( ... erty2 = 1 }') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new F() { ... = true } }') + IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F) (Syntax: 'new F() { P ... = true } }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: F) (Syntax: '{ Property2 ... = true } }') + Initializers(1): + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: B) (Syntax: 'Property2 = ... ld = true }') + Left: + IPropertyReferenceOperation: B F.Property2 { get; set; } (OperationKind.PropertyReference, Type: B) (Syntax: 'Property2') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 'Property2') + Right: + IObjectCreationOperation (Constructor: B..ctor()) (OperationKind.ObjectCreation, Type: B) (Syntax: 'new B { Field = true }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: B) (Syntax: '{ Field = true }') + Initializers(1): + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.Boolean) (Syntax: 'Field = true') + Left: + IFieldReferenceOperation: System.Boolean B.Field (OperationKind.FieldReference, Type: System.Boolean) (Syntax: 'Field') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: B, IsImplicit) (Syntax: 'Field') + Right: + ILiteralOperation (OperationKind.Literal, Type: System.Boolean, Constant: True) (Syntax: 'true') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new F() { ... erty2 = 1 }') - IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F, IsInvalid) (Syntax: 'new F() { P ... erty2 = 1 }') - Arguments(0) + null + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'var e1 = ne ... rty2 = 1 };') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'var e1 = ne ... erty2 = 1 }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: F e1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'e1 = new F( ... erty2 = 1 }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: F, IsInvalid) (Syntax: '{ Property2 = 1 }') - Initializers(1): - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: B, IsInvalid) (Syntax: 'Property2 = 1') - Left: - IPropertyReferenceOperation: B F.Property2 { get; set; } (OperationKind.PropertyReference, Type: B) (Syntax: 'Property2') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 'Property2') - Right: - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: B, IsInvalid, IsImplicit) (Syntax: '1') - Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') - IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'var e2 = new F() { """" };') - ISingleVariableDeclarationOperation (Symbol: F e2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'e2 = new F() { """" }') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new F() { ... erty2 = 1 }') + IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F, IsInvalid) (Syntax: 'new F() { P ... erty2 = 1 }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: F, IsInvalid) (Syntax: '{ Property2 = 1 }') + Initializers(1): + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: B, IsInvalid) (Syntax: 'Property2 = 1') + Left: + IPropertyReferenceOperation: B F.Property2 { get; set; } (OperationKind.PropertyReference, Type: B) (Syntax: 'Property2') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: F, IsImplicit) (Syntax: 'Property2') + Right: + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: B, IsInvalid, IsImplicit) (Syntax: '1') + Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new F() { """" }') - IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F, IsInvalid) (Syntax: 'new F() { """" }') - Arguments(0) + null + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'var e2 = new F() { """" };') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'var e2 = new F() { """" }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: F e2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'e2 = new F() { """" }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: F, IsInvalid) (Syntax: '{ """" }') - Initializers(1): - IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid, IsImplicit) (Syntax: '""""') - Children(1): - ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: """", IsInvalid) (Syntax: '""""') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new F() { """" }') + IObjectCreationOperation (Constructor: F..ctor()) (OperationKind.ObjectCreation, Type: F, IsInvalid) (Syntax: 'new F() { """" }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: F, IsInvalid) (Syntax: '{ """" }') + Initializers(1): + IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid, IsImplicit) (Syntax: '""""') + Children(1): + ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: """", IsInvalid) (Syntax: '""""') + Initializer: + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0029: Cannot implicitly convert type 'int' to 'B' diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_ITupleExpression.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_ITupleExpression.cs index 5cddfbe28e9..eb3ca52de8f 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_ITupleExpression.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_ITupleExpression.cs @@ -55,13 +55,17 @@ static void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: '(int, int) t = (1, 2);') - ISingleVariableDeclarationOperation (Symbol: (System.Int32, System.Int32) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (1, 2)') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: '(int, int) t = (1, 2)') + Declarations: + ISingleVariableDeclarationOperation (Symbol: (System.Int32, System.Int32) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (1, 2)') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (1, 2)') + ITupleOperation (OperationKind.Tuple, Type: (System.Int32, System.Int32)) (Syntax: '(1, 2)') + Elements(2): + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (1, 2)') - ITupleOperation (OperationKind.Tuple, Type: (System.Int32, System.Int32)) (Syntax: '(1, 2)') - Elements(2): - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -119,22 +123,26 @@ static void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: '(uint, uint) t = (1, 2);') - ISingleVariableDeclarationOperation (Symbol: (System.UInt32, System.UInt32) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (1, 2)') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: '(uint, uint) t = (1, 2)') + Declarations: + ISingleVariableDeclarationOperation (Symbol: (System.UInt32, System.UInt32) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (1, 2)') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (1, 2)') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.UInt32, System.UInt32), IsImplicit) (Syntax: '(1, 2)') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ITupleOperation (OperationKind.Tuple, Type: (System.UInt32, System.UInt32)) (Syntax: '(1, 2)') + Elements(2): + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.UInt32, Constant: 1, IsImplicit) (Syntax: '1') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.UInt32, Constant: 2, IsImplicit) (Syntax: '2') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (1, 2)') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.UInt32, System.UInt32), IsImplicit) (Syntax: '(1, 2)') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ITupleOperation (OperationKind.Tuple, Type: (System.UInt32, System.UInt32)) (Syntax: '(1, 2)') - Elements(2): - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.UInt32, Constant: 1, IsImplicit) (Syntax: '1') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.UInt32, Constant: 2, IsImplicit) (Syntax: '2') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -196,22 +204,26 @@ static void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: '(long, long) t = (a, b);') - ISingleVariableDeclarationOperation (Symbol: (System.Int64, System.Int64) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (a, b)') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: '(long, long) t = (a, b)') + Declarations: + ISingleVariableDeclarationOperation (Symbol: (System.Int64, System.Int64) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (a, b)') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (a, b)') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.Int64, System.Int64), IsImplicit) (Syntax: '(a, b)') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ITupleOperation (OperationKind.Tuple, Type: (System.Int64 a, System.Int64 b)) (Syntax: '(a, b)') + Elements(2): + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Int64, IsImplicit) (Syntax: 'a') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: True, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILocalReferenceOperation: a (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'a') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Int64, IsImplicit) (Syntax: 'b') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: True, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILocalReferenceOperation: b (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'b') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (a, b)') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.Int64, System.Int64), IsImplicit) (Syntax: '(a, b)') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ITupleOperation (OperationKind.Tuple, Type: (System.Int64 a, System.Int64 b)) (Syntax: '(a, b)') - Elements(2): - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Int64, IsImplicit) (Syntax: 'a') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: True, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILocalReferenceOperation: a (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'a') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Int64, IsImplicit) (Syntax: 'b') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: True, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILocalReferenceOperation: b (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'b') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -269,22 +281,26 @@ static void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: '(uint, stri ... (1, null);') - ISingleVariableDeclarationOperation (Symbol: (System.UInt32, System.String) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (1, null)') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: '(uint, stri ... = (1, null)') + Declarations: + ISingleVariableDeclarationOperation (Symbol: (System.UInt32, System.String) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (1, null)') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (1, null)') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.UInt32, System.String), IsImplicit) (Syntax: '(1, null)') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ITupleOperation (OperationKind.Tuple, Type: (System.UInt32, System.String)) (Syntax: '(1, null)') + Elements(2): + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.UInt32, Constant: 1, IsImplicit) (Syntax: '1') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.String, Constant: null, IsImplicit) (Syntax: 'null') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (1, null)') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.UInt32, System.String), IsImplicit) (Syntax: '(1, null)') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ITupleOperation (OperationKind.Tuple, Type: (System.UInt32, System.String)) (Syntax: '(1, null)') - Elements(2): - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.UInt32, Constant: 1, IsImplicit) (Syntax: '1') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.String, Constant: null, IsImplicit) (Syntax: 'null') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -336,13 +352,17 @@ static void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var t = (A: 1, B: 2);') - ISingleVariableDeclarationOperation (Symbol: (System.Int32 A, System.Int32 B) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (A: 1, B: 2)') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'var t = (A: 1, B: 2)') + Declarations: + ISingleVariableDeclarationOperation (Symbol: (System.Int32 A, System.Int32 B) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (A: 1, B: 2)') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (A: 1, B: 2)') + ITupleOperation (OperationKind.Tuple, Type: (System.Int32 A, System.Int32 B)) (Syntax: '(A: 1, B: 2)') + Elements(2): + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (A: 1, B: 2)') - ITupleOperation (OperationKind.Tuple, Type: (System.Int32 A, System.Int32 B)) (Syntax: '(A: 1, B: 2)') - Elements(2): - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -394,16 +414,20 @@ static void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: '(int A, int ... t = (1, 2);') - ISingleVariableDeclarationOperation (Symbol: (System.Int32 A, System.Int32 B) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (1, 2)') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: '(int A, int ... t = (1, 2)') + Declarations: + ISingleVariableDeclarationOperation (Symbol: (System.Int32 A, System.Int32 B) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (1, 2)') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (1, 2)') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.Int32 A, System.Int32 B), IsImplicit) (Syntax: '(1, 2)') + Conversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ITupleOperation (OperationKind.Tuple, Type: (System.Int32, System.Int32)) (Syntax: '(1, 2)') + Elements(2): + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (1, 2)') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.Int32 A, System.Int32 B), IsImplicit) (Syntax: '(1, 2)') - Conversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ITupleOperation (OperationKind.Tuple, Type: (System.Int32, System.Int32)) (Syntax: '(1, 2)') - Elements(2): - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -468,22 +492,26 @@ static void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: '(short, str ... , B: null);') - ISingleVariableDeclarationOperation (Symbol: (System.Int16, System.String) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (A: 1, B: null)') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: '(short, str ... 1, B: null)') + Declarations: + ISingleVariableDeclarationOperation (Symbol: (System.Int16, System.String) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (A: 1, B: null)') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (A: 1, B: null)') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.Int16, System.String), IsImplicit) (Syntax: '(A: 1, B: null)') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ITupleOperation (OperationKind.Tuple, Type: (System.Int16 A, System.String B)) (Syntax: '(A: 1, B: null)') + Elements(2): + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Int16, Constant: 1, IsImplicit) (Syntax: '1') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.String, Constant: null, IsImplicit) (Syntax: 'null') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (A: 1, B: null)') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.Int16, System.String), IsImplicit) (Syntax: '(A: 1, B: null)') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ITupleOperation (OperationKind.Tuple, Type: (System.Int16 A, System.String B)) (Syntax: '(A: 1, B: null)') - Elements(2): - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Int16, Constant: 1, IsImplicit) (Syntax: '1') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.String, Constant: null, IsImplicit) (Syntax: 'null') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS8123: The tuple element name 'A' is ignored because a different name or no name is specified by the target type '(short, string)'. @@ -597,29 +625,33 @@ public void M(C c1) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: '(short, str ... C(0), c1);') - ISingleVariableDeclarationOperation (Symbol: (System.Int16, System.String) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (new C(0), c1)') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: '(short, str ... w C(0), c1)') + Declarations: + ISingleVariableDeclarationOperation (Symbol: (System.Int16, System.String) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (new C(0), c1)') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (new C(0), c1)') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.Int16, System.String), IsImplicit) (Syntax: '(new C(0), c1)') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ITupleOperation (OperationKind.Tuple, Type: (System.Int16, System.String c1)) (Syntax: '(new C(0), c1)') + Elements(2): + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperatorMethod: System.Int16 C.op_Implicit(C c)) (OperationKind.Conversion, Type: System.Int16, IsImplicit) (Syntax: 'new C(0)') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: True) (MethodSymbol: System.Int16 C.op_Implicit(C c)) + Operand: + IObjectCreationOperation (Constructor: C..ctor(System.Int32 x)) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C(0)') + Arguments(1): + IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: x) (OperationKind.Argument, Type: System.Int32) (Syntax: '0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Initializer: + null + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperatorMethod: System.String C.op_Implicit(C c)) (OperationKind.Conversion, Type: System.String, IsImplicit) (Syntax: 'c1') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: True) (MethodSymbol: System.String C.op_Implicit(C c)) + Operand: + IParameterReferenceOperation: c1 (OperationKind.ParameterReference, Type: C) (Syntax: 'c1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (new C(0), c1)') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.Int16, System.String), IsImplicit) (Syntax: '(new C(0), c1)') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ITupleOperation (OperationKind.Tuple, Type: (System.Int16, System.String c1)) (Syntax: '(new C(0), c1)') - Elements(2): - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperatorMethod: System.Int16 C.op_Implicit(C c)) (OperationKind.Conversion, Type: System.Int16, IsImplicit) (Syntax: 'new C(0)') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: True) (MethodSymbol: System.Int16 C.op_Implicit(C c)) - Operand: - IObjectCreationOperation (Constructor: C..ctor(System.Int32 x)) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C(0)') - Arguments(1): - IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: x) (OperationKind.Argument, Type: System.Int32) (Syntax: '0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') - InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Initializer: - null - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperatorMethod: System.String C.op_Implicit(C c)) (OperationKind.Conversion, Type: System.String, IsImplicit) (Syntax: 'c1') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: True) (MethodSymbol: System.String C.op_Implicit(C c)) - Operand: - IParameterReferenceOperation: c1 (OperationKind.ParameterReference, Type: C) (Syntax: 'c1') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -706,22 +738,26 @@ public void M(C c1) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'C t = (0, null);') - ISingleVariableDeclarationOperation (Symbol: C t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (0, null)') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'C t = (0, null)') + Declarations: + ISingleVariableDeclarationOperation (Symbol: C t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = (0, null)') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (0, null)') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperatorMethod: C C.op_Implicit((System.Int32, System.String) x)) (OperationKind.Conversion, Type: C, IsImplicit) (Syntax: '(0, null)') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: True) (MethodSymbol: C C.op_Implicit((System.Int32, System.String) x)) + Operand: + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.Int32, System.String), IsImplicit) (Syntax: '(0, null)') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ITupleOperation (OperationKind.Tuple, Type: (System.Int32, System.String)) (Syntax: '(0, null)') + Elements(2): + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.String, Constant: null, IsImplicit) (Syntax: 'null') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= (0, null)') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperatorMethod: C C.op_Implicit((System.Int32, System.String) x)) (OperationKind.Conversion, Type: C, IsImplicit) (Syntax: '(0, null)') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: True) (MethodSymbol: C C.op_Implicit((System.Int32, System.String) x)) - Operand: - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.Int32, System.String), IsImplicit) (Syntax: '(0, null)') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ITupleOperation (OperationKind.Tuple, Type: (System.Int32, System.String)) (Syntax: '(0, null)') - Elements(2): - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.String, Constant: null, IsImplicit) (Syntax: 'null') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -802,13 +838,17 @@ public void M(C c1) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: '(int, string) t = c1;') - ISingleVariableDeclarationOperation (Symbol: (System.Int32, System.String) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = c1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: '(int, string) t = c1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: (System.Int32, System.String) t) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 't = c1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= c1') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperatorMethod: (System.Int32, System.String) C.op_Implicit(C c)) (OperationKind.Conversion, Type: (System.Int32, System.String), IsImplicit) (Syntax: 'c1') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: True) (MethodSymbol: (System.Int32, System.String) C.op_Implicit(C c)) + Operand: + IParameterReferenceOperation: c1 (OperationKind.ParameterReference, Type: C) (Syntax: 'c1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= c1') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperatorMethod: (System.Int32, System.String) C.op_Implicit(C c)) (OperationKind.Conversion, Type: (System.Int32, System.String), IsImplicit) (Syntax: 'c1') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: True) (MethodSymbol: (System.Int32, System.String) C.op_Implicit(C c)) - Operand: - IParameterReferenceOperation: c1 (OperationKind.ParameterReference, Type: C) (Syntax: 'c1') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -922,32 +962,36 @@ public void M(C c1) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: '(short, str ... C(0), c1);') - ISingleVariableDeclarationOperation (Symbol: (System.Int16, System.String) t) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 't = (new C(0), c1)') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: '(short, str ... w C(0), c1)') + Declarations: + ISingleVariableDeclarationOperation (Symbol: (System.Int16, System.String) t) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 't = (new C(0), c1)') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= (new C(0), c1)') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.Int16, System.String), IsInvalid, IsImplicit) (Syntax: '(new C(0), c1)') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ITupleOperation (OperationKind.Tuple, Type: (System.Int16, System.String c1), IsInvalid) (Syntax: '(new C(0), c1)') + Elements(2): + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Int16, IsInvalid, IsImplicit) (Syntax: 'new C(0)') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: True, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperatorMethod: System.Int32 C.op_Implicit(C c)) (OperationKind.Conversion, Type: System.Int32, IsInvalid, IsImplicit) (Syntax: 'new C(0)') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: True) (MethodSymbol: System.Int32 C.op_Implicit(C c)) + Operand: + IObjectCreationOperation (Constructor: C..ctor(System.Int32 x)) (OperationKind.ObjectCreation, Type: C, IsInvalid) (Syntax: 'new C(0)') + Arguments(1): + IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: x) (OperationKind.Argument, Type: System.Int32, IsInvalid) (Syntax: '0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0, IsInvalid) (Syntax: '0') + InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Initializer: + null + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperatorMethod: System.String C.op_Implicit(C c)) (OperationKind.Conversion, Type: System.String, IsImplicit) (Syntax: 'c1') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: True) (MethodSymbol: System.String C.op_Implicit(C c)) + Operand: + IParameterReferenceOperation: c1 (OperationKind.ParameterReference, Type: C) (Syntax: 'c1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= (new C(0), c1)') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.Int16, System.String), IsInvalid, IsImplicit) (Syntax: '(new C(0), c1)') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ITupleOperation (OperationKind.Tuple, Type: (System.Int16, System.String c1), IsInvalid) (Syntax: '(new C(0), c1)') - Elements(2): - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Int16, IsInvalid, IsImplicit) (Syntax: 'new C(0)') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: True, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperatorMethod: System.Int32 C.op_Implicit(C c)) (OperationKind.Conversion, Type: System.Int32, IsInvalid, IsImplicit) (Syntax: 'new C(0)') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: True) (MethodSymbol: System.Int32 C.op_Implicit(C c)) - Operand: - IObjectCreationOperation (Constructor: C..ctor(System.Int32 x)) (OperationKind.ObjectCreation, Type: C, IsInvalid) (Syntax: 'new C(0)') - Arguments(1): - IArgumentOperation (ArgumentKind.Explicit, Matching Parameter: x) (OperationKind.Argument, Type: System.Int32, IsInvalid) (Syntax: '0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0, IsInvalid) (Syntax: '0') - InConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - OutConversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Initializer: - null - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperatorMethod: System.String C.op_Implicit(C c)) (OperationKind.Conversion, Type: System.String, IsImplicit) (Syntax: 'c1') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: True) (MethodSymbol: System.String C.op_Implicit(C c)) - Operand: - IParameterReferenceOperation: c1 (OperationKind.ParameterReference, Type: C) (Syntax: 'c1') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0029: Cannot implicitly convert type 'C' to 'short' diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IUsingStatement.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IUsingStatement.cs index 029c148dcfe..288abd067c1 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IUsingStatement.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IUsingStatement.cs @@ -34,13 +34,17 @@ public static void M1() IUsingOperation (OperationKind.Using, Type: null) (Syntax: 'using (var ... }') Resources: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var c = new C()') - ISingleVariableDeclarationOperation (Symbol: C c) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c = new C()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') - IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') - Arguments(0) + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'var c = new C()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: C c) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c = new C()') Initializer: - null + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') + IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') + Arguments(0) + Initializer: + null + Initializer: + null Body: IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'Console.Wri ... oString());') @@ -88,21 +92,25 @@ public static void M1() string expectedOperationTree = @" IUsingOperation (OperationKind.Using, Type: null) (Syntax: 'using (C c1 ... }') Resources: - IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'C c1 = new ... 2 = new C()') - ISingleVariableDeclarationOperation (Symbol: C c1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c1 = new C()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') - IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') - Arguments(0) + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'C c1 = new ... 2 = new C()') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'C c1 = new ... 2 = new C()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: C c1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c1 = new C()') Initializer: - null - ISingleVariableDeclarationOperation (Symbol: C c2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c2 = new C()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') - IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') - Arguments(0) + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') + IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') + Arguments(0) + Initializer: + null + ISingleVariableDeclarationOperation (Symbol: C c2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c2 = new C()') Initializer: - null + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') + IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') + Arguments(0) + Initializer: + null + Initializer: + null Body: IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'Console.Wri ... oString());') @@ -199,24 +207,32 @@ public static void M1() IUsingOperation (OperationKind.Using, Type: null) (Syntax: 'using (var ... }') Resources: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var c1 = new C()') - ISingleVariableDeclarationOperation (Symbol: C c1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c1 = new C()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') - IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') - Arguments(0) + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'var c1 = new C()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: C c1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c1 = new C()') Initializer: - null + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') + IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') + Arguments(0) + Initializer: + null + Initializer: + null Body: IUsingOperation (OperationKind.Using, Type: null) (Syntax: 'using (var ... }') Resources: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var c2 = new C()') - ISingleVariableDeclarationOperation (Symbol: C c2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c2 = new C()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') - IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') - Arguments(0) + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'var c2 = new C()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: C c2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c2 = new C()') Initializer: - null + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') + IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') + Arguments(0) + Initializer: + null + Initializer: + null Body: IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'Console.Wri ... oString());') @@ -331,21 +347,25 @@ public static void M1() string expectedOperationTree = @" IUsingOperation (OperationKind.Using, Type: null, IsInvalid) (Syntax: 'using (var ... }') Resources: - IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'var c1 = ne ... 2 = new C()') - ISingleVariableDeclarationOperation (Symbol: C c1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'c1 = new C()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new C()') - IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C, IsInvalid) (Syntax: 'new C()') - Arguments(0) + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'var c1 = ne ... 2 = new C()') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'var c1 = ne ... 2 = new C()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: C c1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'c1 = new C()') Initializer: - null - ISingleVariableDeclarationOperation (Symbol: C c2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'c2 = new C()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new C()') - IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C, IsInvalid) (Syntax: 'new C()') - Arguments(0) + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new C()') + IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C, IsInvalid) (Syntax: 'new C()') + Arguments(0) + Initializer: + null + ISingleVariableDeclarationOperation (Symbol: C c2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'c2 = new C()') Initializer: - null + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new C()') + IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C, IsInvalid) (Syntax: 'new C()') + Arguments(0) + Initializer: + null + Initializer: + null Body: IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'Console.Wri ... oString());') @@ -409,21 +429,29 @@ public static void M1() Locals: Local_1: C c1 Local_2: C c2 IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var c1 = new C();') - ISingleVariableDeclarationOperation (Symbol: C c1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c1 = new C()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') - IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') - Arguments(0) + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'var c1 = new C()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: C c1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c1 = new C()') Initializer: - null - IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var c2 = new C();') - ISingleVariableDeclarationOperation (Symbol: C c2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c2 = new C()') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') + IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') + Arguments(0) + Initializer: + null Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') - IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') - Arguments(0) + null + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var c2 = new C();') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'var c2 = new C()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: C c2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c2 = new C()') Initializer: - null + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') + IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') + Arguments(0) + Initializer: + null + Initializer: + null IUsingOperation (OperationKind.Using, Type: null, IsInvalid) (Syntax: 'using (c1') Resources: ILocalReferenceOperation: c1 (OperationKind.LocalReference, Type: C, IsInvalid) (Syntax: 'c1') @@ -504,13 +532,17 @@ public static void M1() IUsingOperation (OperationKind.Using, Type: null, IsInvalid) (Syntax: 'using (var ... }') Resources: IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'var c1 = new C()') - ISingleVariableDeclarationOperation (Symbol: C c1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'c1 = new C()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new C()') - IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C, IsInvalid) (Syntax: 'new C()') - Arguments(0) + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'var c1 = new C()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: C c1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'c1 = new C()') Initializer: - null + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new C()') + IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C, IsInvalid) (Syntax: 'new C()') + Arguments(0) + Initializer: + null + Initializer: + null Body: IBlockOperation (1 statements) (OperationKind.Block, Type: null) (Syntax: '{ ... }') IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'Console.Wri ... oString());') @@ -758,13 +790,17 @@ public static void M1() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var c = new C()') - ISingleVariableDeclarationOperation (Symbol: C c) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c = new C()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') - IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') - Arguments(0) + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'var c = new C()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: C c) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'c = new C()') Initializer: - null + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new C()') + IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C) (Syntax: 'new C()') + Arguments(0) + Initializer: + null + Initializer: + null "; var expectedDiagnostics = DiagnosticDescription.None; diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IVariableDeclaration.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IVariableDeclaration.cs index 3225371c82d..2a46a7ff704 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IVariableDeclaration.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IVariableDeclaration.cs @@ -26,7 +26,11 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i1;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int i1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1') + Initializer: + null Initializer: null "; @@ -54,10 +58,14 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i1 = 1;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = 1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int i1 = 1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = 1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 1') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 1') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0219: The variable 'i1' is assigned but its value is never used @@ -83,11 +91,15 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int i1 = ;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1 = ') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'int i1 = ') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1 = ') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= ') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= ') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1525: Invalid expression term ';' @@ -112,11 +124,15 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i1, i2;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1') - Initializer: - null - ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i2') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i1, i2;') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int i1, i2') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1') + Initializer: + null + ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i2') + Initializer: + null Initializer: null "; @@ -146,15 +162,19 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i1 = 2, i2 = 2;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = 2') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 2') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i2 = 2') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i1 = 2, i2 = 2;') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int i1 = 2, i2 = 2') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = 2') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 2') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') + ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i2 = 2') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 2') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 2') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0219: The variable 'i1' is assigned but its value is never used @@ -182,16 +202,20 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int i1 = , i2 = 2;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1 = ') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= ') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) - ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i2 = 2') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int i1 = , i2 = 2;') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'int i1 = , i2 = 2') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1 = ') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= ') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) + ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i2 = 2') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 2') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 2') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1525: Invalid expression term ',' @@ -219,11 +243,15 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int i,;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i') - Initializer: - null - ISingleVariableDeclarationOperation (Symbol: System.Int32 ) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: '') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int i,;') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'int i,') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i') + Initializer: + null + ISingleVariableDeclarationOperation (Symbol: System.Int32 ) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: '') + Initializer: + null Initializer: null "; @@ -256,13 +284,17 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = GetInt();') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = GetInt()') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int i = GetInt()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = GetInt()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetInt()') + IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32) (Syntax: 'GetInt()') + Instance Receiver: + null + Arguments(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetInt()') - IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32) (Syntax: 'GetInt()') - Instance Receiver: - null - Arguments(0) + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -285,21 +317,25 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = Get ... = GetInt();') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = GetInt()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetInt()') - IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32) (Syntax: 'GetInt()') - Instance Receiver: - null - Arguments(0) - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = GetInt()') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = Get ... = GetInt();') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int i = Get ... = GetInt()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = GetInt()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetInt()') + IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32) (Syntax: 'GetInt()') + Instance Receiver: + null + Arguments(0) + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = GetInt()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetInt()') + IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32) (Syntax: 'GetInt()') + Instance Receiver: + null + Arguments(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetInt()') - IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32) (Syntax: 'GetInt()') - Instance Receiver: - null - Arguments(0) + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -324,10 +360,14 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i1 = i;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = i') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int i1 = i') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = i') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i') + ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i') - ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -351,15 +391,19 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i1 = i, i2 = i1;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = i') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i') - ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i2 = i1') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i1 = i, i2 = i1;') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int i1 = i, i2 = i1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = i') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i') + ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') + ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i2 = i1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i1') + ILocalReferenceOperation: i1 (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i1') - ILocalReferenceOperation: i1 (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i1') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -381,7 +425,11 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int[2, 3] a;') - ISingleVariableDeclarationOperation (Symbol: System.Int32[,] a) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'a') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'int[2, 3] a') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32[,] a) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'a') + Initializer: + null Initializer: null "; @@ -414,11 +462,15 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int[2, 3] a, b;') - ISingleVariableDeclarationOperation (Symbol: System.Int32[,] a) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'a') - Initializer: - null - ISingleVariableDeclarationOperation (Symbol: System.Int32[,] b) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'b') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int[2, 3] a, b;') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'int[2, 3] a, b') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32[,] a) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'a') + Initializer: + null + ISingleVariableDeclarationOperation (Symbol: System.Int32[,] b) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'b') + Initializer: + null Initializer: null "; @@ -492,16 +544,20 @@ static void Main(string[] args) string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int* p = &reference.i1') - ISingleVariableDeclarationOperation (Symbol: System.Int32* p) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p = &reference.i1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int* p = &reference.i1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32* p) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p = &reference.i1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &reference.i1') + IOperation: (OperationKind.None, Type: null) (Syntax: '&reference.i1') + Children(1): + IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&reference.i1') + Reference: + IFieldReferenceOperation: System.Int32 Program.i1 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'reference.i1') + Instance Receiver: + ILocalReferenceOperation: reference (OperationKind.LocalReference, Type: Program) (Syntax: 'reference') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &reference.i1') - IOperation: (OperationKind.None, Type: null) (Syntax: '&reference.i1') - Children(1): - IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&reference.i1') - Reference: - IFieldReferenceOperation: System.Int32 Program.i1 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'reference.i1') - Instance Receiver: - ILocalReferenceOperation: reference (OperationKind.LocalReference, Type: Program) (Syntax: 'reference') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0227: Unsafe code may only appear if compiling with /unsafe @@ -534,27 +590,31 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int* p1 = & ... eference.i2') - ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = &reference.i1') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &reference.i1') - IOperation: (OperationKind.None, Type: null) (Syntax: '&reference.i1') - Children(1): - IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&reference.i1') - Reference: - IFieldReferenceOperation: System.Int32 Program.i1 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'reference.i1') - Instance Receiver: - ILocalReferenceOperation: reference (OperationKind.LocalReference, Type: Program) (Syntax: 'reference') - ISingleVariableDeclarationOperation (Symbol: System.Int32* p2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p2 = &reference.i2') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int* p1 = & ... eference.i2') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int* p1 = & ... eference.i2') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = &reference.i1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &reference.i1') + IOperation: (OperationKind.None, Type: null) (Syntax: '&reference.i1') + Children(1): + IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&reference.i1') + Reference: + IFieldReferenceOperation: System.Int32 Program.i1 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'reference.i1') + Instance Receiver: + ILocalReferenceOperation: reference (OperationKind.LocalReference, Type: Program) (Syntax: 'reference') + ISingleVariableDeclarationOperation (Symbol: System.Int32* p2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p2 = &reference.i2') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &reference.i2') + IOperation: (OperationKind.None, Type: null) (Syntax: '&reference.i2') + Children(1): + IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&reference.i2') + Reference: + IFieldReferenceOperation: System.Int32 Program.i2 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'reference.i2') + Instance Receiver: + ILocalReferenceOperation: reference (OperationKind.LocalReference, Type: Program) (Syntax: 'reference') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &reference.i2') - IOperation: (OperationKind.None, Type: null) (Syntax: '&reference.i2') - Children(1): - IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&reference.i2') - Reference: - IFieldReferenceOperation: System.Int32 Program.i2 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'reference.i2') - Instance Receiver: - ILocalReferenceOperation: reference (OperationKind.LocalReference, Type: Program) (Syntax: 'reference') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0227: Unsafe code may only appear if compiling with /unsafe @@ -588,11 +648,15 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int* p = /**/') - ISingleVariableDeclarationOperation (Symbol: System.Int32* p) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p = /**/') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'int* p = /**/') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32* p) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p = /**/') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= /**/') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= /**/') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1525: Invalid expression term ')' @@ -631,17 +695,21 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int* p1 = , ... /**/') - ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p1 = ') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= ') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) - ISingleVariableDeclarationOperation (Symbol: System.Int32* p2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p2 = /**/') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int* p1 = , ... /**/') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'int* p1 = , ... /**/') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p1 = ') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= ') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) + ISingleVariableDeclarationOperation (Symbol: System.Int32* p2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p2 = /**/') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= /**/') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= /**/') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1525: Invalid expression term ',' @@ -687,7 +755,11 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int* p') - ISingleVariableDeclarationOperation (Symbol: System.Int32* p) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'int* p') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32* p) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p') + Initializer: + null Initializer: null "; @@ -728,11 +800,15 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int* p1, p2') - ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p1') - Initializer: - null - ISingleVariableDeclarationOperation (Symbol: System.Int32* p2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p2') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int* p1, p2') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'int* p1, p2') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p1') + Initializer: + null + ISingleVariableDeclarationOperation (Symbol: System.Int32* p2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p2') + Initializer: + null Initializer: null "; @@ -779,18 +855,22 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int* p1 = & ... /**/') - ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = &reference.i1') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &reference.i1') - IOperation: (OperationKind.None, Type: null) (Syntax: '&reference.i1') - Children(1): - IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&reference.i1') - Reference: - IFieldReferenceOperation: System.Int32 Program.i1 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'reference.i1') - Instance Receiver: - ILocalReferenceOperation: reference (OperationKind.LocalReference, Type: Program) (Syntax: 'reference') - ISingleVariableDeclarationOperation (Symbol: System.Int32* ) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: '') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int* p1 = & ... /**/') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'int* p1 = & ... /**/') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32* p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = &reference.i1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= &reference.i1') + IOperation: (OperationKind.None, Type: null) (Syntax: '&reference.i1') + Children(1): + IAddressOfOperation (OperationKind.AddressOf, Type: System.Int32*) (Syntax: '&reference.i1') + Reference: + IFieldReferenceOperation: System.Int32 Program.i1 (OperationKind.FieldReference, Type: System.Int32) (Syntax: 'reference.i1') + Instance Receiver: + ILocalReferenceOperation: reference (OperationKind.LocalReference, Type: Program) (Syntax: 'reference') + ISingleVariableDeclarationOperation (Symbol: System.Int32* ) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: '') + Initializer: + null Initializer: null "; @@ -837,13 +917,17 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Program p1 ... w Program()') - ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = new Program()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new Program()') - IObjectCreationOperation (Constructor: Program..ctor()) (OperationKind.ObjectCreation, Type: Program) (Syntax: 'new Program()') - Arguments(0) + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'Program p1 ... w Program()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = new Program()') Initializer: - null + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new Program()') + IObjectCreationOperation (Constructor: Program..ctor()) (OperationKind.ObjectCreation, Type: Program) (Syntax: 'new Program()') + Arguments(0) + Initializer: + null + Initializer: + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -870,21 +954,25 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Program p1 ... w Program()') - ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = new Program()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new Program()') - IObjectCreationOperation (Constructor: Program..ctor()) (OperationKind.ObjectCreation, Type: Program) (Syntax: 'new Program()') - Arguments(0) +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Program p1 ... w Program()') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'Program p1 ... w Program()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = new Program()') Initializer: - null - ISingleVariableDeclarationOperation (Symbol: Program p2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p2 = new Program()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new Program()') - IObjectCreationOperation (Constructor: Program..ctor()) (OperationKind.ObjectCreation, Type: Program) (Syntax: 'new Program()') - Arguments(0) + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new Program()') + IObjectCreationOperation (Constructor: Program..ctor()) (OperationKind.ObjectCreation, Type: Program) (Syntax: 'new Program()') + Arguments(0) + Initializer: + null + ISingleVariableDeclarationOperation (Symbol: Program p2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p2 = new Program()') Initializer: - null + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new Program()') + IObjectCreationOperation (Constructor: Program..ctor()) (OperationKind.ObjectCreation, Type: Program) (Syntax: 'new Program()') + Arguments(0) + Initializer: + null + Initializer: + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -912,11 +1000,15 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Program p1 =/**/') - ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p1 =/**/') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'Program p1 =/**/') + Declarations: + ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p1 =/**/') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=/**/') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=/**/') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1525: Invalid expression term ')' @@ -947,17 +1039,21 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Program p1 ... /**/') - ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p1 =') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) - ISingleVariableDeclarationOperation (Symbol: Program p2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p2 =/**/') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Program p1 ... /**/') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'Program p1 ... /**/') + Declarations: + ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p1 =') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) + ISingleVariableDeclarationOperation (Symbol: Program p2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p2 =/**/') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=/**/') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=/**/') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1525: Invalid expression term ',' @@ -992,7 +1088,11 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Program p1') - ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'Program p1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p1') + Initializer: + null Initializer: null "; @@ -1025,11 +1125,15 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Program p1, p2') - ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p1') - Initializer: - null - ISingleVariableDeclarationOperation (Symbol: Program p2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p2') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Program p1, p2') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'Program p1, p2') + Declarations: + ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p1') + Initializer: + null + ISingleVariableDeclarationOperation (Symbol: Program p2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'p2') + Initializer: + null Initializer: null "; @@ -1065,15 +1169,19 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Program p1 ... /**/') - ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = new Program()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new Program()') - IObjectCreationOperation (Constructor: Program..ctor()) (OperationKind.ObjectCreation, Type: Program) (Syntax: 'new Program()') - Arguments(0) +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Program p1 ... /**/') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'Program p1 ... /**/') + Declarations: + ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = new Program()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new Program()') + IObjectCreationOperation (Constructor: Program..ctor()) (OperationKind.ObjectCreation, Type: Program) (Syntax: 'new Program()') + Arguments(0) + Initializer: + null + ISingleVariableDeclarationOperation (Symbol: Program ) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: '') Initializer: null - ISingleVariableDeclarationOperation (Symbol: Program ) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: '') Initializer: null "; @@ -1112,13 +1220,17 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Program p1 ... etProgram()') - ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = GetProgram()') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'Program p1 ... etProgram()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = GetProgram()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetProgram()') + IInvocationOperation (Program Program.GetProgram()) (OperationKind.Invocation, Type: Program) (Syntax: 'GetProgram()') + Instance Receiver: + null + Arguments(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetProgram()') - IInvocationOperation (Program Program.GetProgram()) (OperationKind.Invocation, Type: Program) (Syntax: 'GetProgram()') - Instance Receiver: - null - Arguments(0) + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -1147,21 +1259,25 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Program p1 ... etProgram()') - ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = GetProgram()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetProgram()') - IInvocationOperation (Program Program.GetProgram()) (OperationKind.Invocation, Type: Program) (Syntax: 'GetProgram()') - Instance Receiver: - null - Arguments(0) - ISingleVariableDeclarationOperation (Symbol: Program p2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p2 = GetProgram()') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Program p1 ... etProgram()') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'Program p1 ... etProgram()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: Program p1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p1 = GetProgram()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetProgram()') + IInvocationOperation (Program Program.GetProgram()) (OperationKind.Invocation, Type: Program) (Syntax: 'GetProgram()') + Instance Receiver: + null + Arguments(0) + ISingleVariableDeclarationOperation (Symbol: Program p2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p2 = GetProgram()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetProgram()') + IInvocationOperation (Program Program.GetProgram()) (OperationKind.Invocation, Type: Program) (Syntax: 'GetProgram()') + Instance Receiver: + null + Arguments(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetProgram()') - IInvocationOperation (Program Program.GetProgram()) (OperationKind.Invocation, Type: Program) (Syntax: 'GetProgram()') - Instance Receiver: - null - Arguments(0) + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -1190,10 +1306,14 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Program p2 = p1') - ISingleVariableDeclarationOperation (Symbol: Program p2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p2 = p1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'Program p2 = p1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: Program p2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p2 = p1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= p1') + ILocalReferenceOperation: p1 (OperationKind.LocalReference, Type: Program) (Syntax: 'p1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= p1') - ILocalReferenceOperation: p1 (OperationKind.LocalReference, Type: Program) (Syntax: 'p1') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -1221,15 +1341,19 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Program p2 = p1, p3 = p1') - ISingleVariableDeclarationOperation (Symbol: Program p2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p2 = p1') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= p1') - ILocalReferenceOperation: p1 (OperationKind.LocalReference, Type: Program) (Syntax: 'p1') - ISingleVariableDeclarationOperation (Symbol: Program p3) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p3 = p1') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'Program p2 = p1, p3 = p1') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'Program p2 = p1, p3 = p1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: Program p2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p2 = p1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= p1') + ILocalReferenceOperation: p1 (OperationKind.LocalReference, Type: Program) (Syntax: 'p1') + ISingleVariableDeclarationOperation (Symbol: Program p3) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'p3 = p1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= p1') + ILocalReferenceOperation: p1 (OperationKind.LocalReference, Type: Program) (Syntax: 'p1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= p1') - ILocalReferenceOperation: p1 (OperationKind.LocalReference, Type: Program) (Syntax: 'p1') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -1258,10 +1382,14 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -1284,15 +1412,19 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0, j = 0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0, j = 0') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = 0, j = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0219: The variable 'j' is assigned but its value is never used @@ -1321,11 +1453,15 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int i =/**/') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i =/**/') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'int i =/**/') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i =/**/') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=/**/') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=/**/') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1525: Invalid expression term ';' @@ -1353,17 +1489,21 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int i =, j =/**/') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i =') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'j =/**/') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int i =, j =/**/') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'int i =, j =/**/') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i =') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'j =/**/') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=/**/') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=/**/') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1525: Invalid expression term ',' @@ -1395,7 +1535,11 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i') + Initializer: + null Initializer: null "; @@ -1425,11 +1569,15 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i, j') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i') - Initializer: - null - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i, j') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i, j') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i') + Initializer: + null + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j') + Initializer: + null Initializer: null "; @@ -1462,13 +1610,17 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int i =,/**/') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i =') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) - ISingleVariableDeclarationOperation (Symbol: System.Int32 ) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: '') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int i =,/**/') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'int i =,/**/') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i =') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '=') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) + ISingleVariableDeclarationOperation (Symbol: System.Int32 ) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: '') + Initializer: + null Initializer: null "; @@ -1504,13 +1656,17 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = GetInt()') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = GetInt()') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = GetInt()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = GetInt()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetInt()') + IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32) (Syntax: 'GetInt()') + Instance Receiver: + null + Arguments(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetInt()') - IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32) (Syntax: 'GetInt()') - Instance Receiver: - null - Arguments(0) + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -1536,21 +1692,25 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = Get ... = GetInt()') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = GetInt()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetInt()') - IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32) (Syntax: 'GetInt()') - Instance Receiver: - null - Arguments(0) - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = GetInt()') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = Get ... = GetInt()') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsImplicit) (Syntax: 'int i = Get ... = GetInt()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = GetInt()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetInt()') + IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32) (Syntax: 'GetInt()') + Instance Receiver: + null + Arguments(0) + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = GetInt()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetInt()') + IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32) (Syntax: 'GetInt()') + Instance Receiver: + null + Arguments(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= GetInt()') - IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32) (Syntax: 'GetInt()') - Instance Receiver: - null - Arguments(0) + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -1576,10 +1736,14 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'const int i1 = 1;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = 1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int i1 = 1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = 1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 1') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 1') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0219: The variable 'i1' is assigned but its value is never used @@ -1607,15 +1771,19 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'const int i ... 1, i2 = 2;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = 1') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 1') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i2 = 2') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'const int i ... 1, i2 = 2;') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int i1 = 1, i2 = 2') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = 1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 1') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i2 = 2') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 2') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 2') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0219: The variable 'i1' is assigned but its value is never used @@ -1644,11 +1812,15 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'const int i1 = ;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1 = ') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'int i1 = ') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1 = ') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= ') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= ') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1525: Invalid expression term ';' @@ -1673,17 +1845,21 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'const int i1 = , i2 = ;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1 = ') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= ') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) - ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i2 = ') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'const int i1 = , i2 = ;') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'int i1 = , i2 = ') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1 = ') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= ') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) + ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i2 = ') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= ') + IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') + Children(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= ') - IInvalidOperation (OperationKind.Invalid, Type: null, IsInvalid) (Syntax: '') - Children(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1525: Invalid expression term ',' @@ -1712,7 +1888,11 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'const int i1;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'int i1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1') + Initializer: + null Initializer: null "; @@ -1742,11 +1922,15 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'const int i1, i2;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1') - Initializer: - null - ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i2') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'const int i1, i2;') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'int i1, i2') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1') + Initializer: + null + ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i2') + Initializer: + null Initializer: null "; @@ -1782,11 +1966,15 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'const int i1,;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1') - Initializer: - null - ISingleVariableDeclarationOperation (Symbol: System.Int32 ) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: '') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'const int i1,;') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'int i1,') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1') + Initializer: + null + ISingleVariableDeclarationOperation (Symbol: System.Int32 ) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: '') + Initializer: + null Initializer: null "; @@ -1825,13 +2013,17 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'const int i1 = GetInt();') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1 = GetInt()') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'int i1 = GetInt()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1 = GetInt()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= GetInt()') + IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32, IsInvalid) (Syntax: 'GetInt()') + Instance Receiver: + null + Arguments(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= GetInt()') - IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32, IsInvalid) (Syntax: 'GetInt()') - Instance Receiver: - null - Arguments(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0133: The expression being assigned to 'i1' must be constant @@ -1858,21 +2050,25 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'const int i ... = GetInt();') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1 = GetInt()') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= GetInt()') - IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32, IsInvalid) (Syntax: 'GetInt()') - Instance Receiver: - null - Arguments(0) - ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i2 = GetInt()') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'const int i ... = GetInt();') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'int i1 = Ge ... = GetInt()') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i1 = GetInt()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= GetInt()') + IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32, IsInvalid) (Syntax: 'GetInt()') + Instance Receiver: + null + Arguments(0) + ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'i2 = GetInt()') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= GetInt()') + IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32, IsInvalid) (Syntax: 'GetInt()') + Instance Receiver: + null + Arguments(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= GetInt()') - IInvocationOperation (System.Int32 Program.GetInt()) (OperationKind.Invocation, Type: System.Int32, IsInvalid) (Syntax: 'GetInt()') - Instance Receiver: - null - Arguments(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0133: The expression being assigned to 'i1' must be constant @@ -1904,10 +2100,14 @@ static void Main(string[] args) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'const int i1 = i;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = i') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int i1 = i') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = i') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i') + ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32, Constant: 1) (Syntax: 'i') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i') - ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32, Constant: 1) (Syntax: 'i') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0219: The variable 'i1' is assigned but its value is never used @@ -1935,15 +2135,19 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'const int i ... i, i2 = i1;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = i') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i') - ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32, Constant: 1) (Syntax: 'i') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i2 = i1') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'const int i ... i, i2 = i1;') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int i1 = i, i2 = i1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i1 = i') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i') + ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32, Constant: 1) (Syntax: 'i') + ISingleVariableDeclarationOperation (Symbol: System.Int32 i2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i2 = i1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i1') + ILocalReferenceOperation: i1 (OperationKind.LocalReference, Type: System.Int32, Constant: 1) (Syntax: 'i1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= i1') - ILocalReferenceOperation: i1 (OperationKind.LocalReference, Type: System.Int32, Constant: 1) (Syntax: 'i1') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0219: The variable 'i2' is assigned but its value is never used diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IWhileUntilLoopStatement.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IWhileUntilLoopStatement.cs index 39313a9bf55..4c865a7c965 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IWhileUntilLoopStatement.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_IWhileUntilLoopStatement.cs @@ -145,12 +145,16 @@ static void Main() IBlockOperation (2 statements, 1 locals) (OperationKind.Block, Type: null) (Syntax: '{ ... }') Locals: Local_1: System.Int32 value IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int value = ++index;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 value) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'value = ++index') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int value = ++index') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 value) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'value = ++index') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= ++index') + IIncrementOrDecrementOperation (Prefix) (OperationKind.Increment, Type: System.Int32) (Syntax: '++index') + Target: + ILocalReferenceOperation: index (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'index') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= ++index') - IIncrementOrDecrementOperation (Prefix) (OperationKind.Increment, Type: System.Int32) (Syntax: '++index') - Target: - ILocalReferenceOperation: index (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'index') + null IConditionalOperation (OperationKind.Conditional, Type: null) (Syntax: 'if (value > ... }') Condition: IBinaryOperation (BinaryOperatorKind.GreaterThan) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 'value > 10') @@ -206,12 +210,16 @@ static void Main() IBlockOperation (3 statements, 1 locals) (OperationKind.Block, Type: null) (Syntax: '{ ... }') Locals: Local_1: System.Int32 value IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int value = ++index;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 value) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'value = ++index') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int value = ++index') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 value) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'value = ++index') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= ++index') + IIncrementOrDecrementOperation (Prefix) (OperationKind.Increment, Type: System.Int32) (Syntax: '++index') + Target: + ILocalReferenceOperation: index (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'index') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= ++index') - IIncrementOrDecrementOperation (Prefix) (OperationKind.Increment, Type: System.Int32) (Syntax: '++index') - Target: - ILocalReferenceOperation: index (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'index') + null IConditionalOperation (OperationKind.Conditional, Type: null) (Syntax: 'if (value > ... }') Condition: IBinaryOperation (BinaryOperatorKind.GreaterThan) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 'value > 5') @@ -280,12 +288,16 @@ static void Main() IBlockOperation (3 statements, 1 locals) (OperationKind.Block, Type: null) (Syntax: '{ ... }') Locals: Local_1: System.Int32 value IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int value = ++index;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 value) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'value = ++index') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int value = ++index') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 value) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'value = ++index') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= ++index') + IIncrementOrDecrementOperation (Prefix) (OperationKind.Increment, Type: System.Int32) (Syntax: '++index') + Target: + ILocalReferenceOperation: index (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'index') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= ++index') - IIncrementOrDecrementOperation (Prefix) (OperationKind.Increment, Type: System.Int32) (Syntax: '++index') - Target: - ILocalReferenceOperation: index (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'index') + null IConditionalOperation (OperationKind.Conditional, Type: null) (Syntax: 'if (value > ... }') Condition: IBinaryOperation (BinaryOperatorKind.GreaterThan) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 'value > 100') @@ -571,12 +583,16 @@ static void Main() IBlockOperation (2 statements, 1 locals) (OperationKind.Block, Type: null) (Syntax: '{ ... }') Locals: Local_1: System.Int32 value IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int value = ++index;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 value) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'value = ++index') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int value = ++index') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 value) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'value = ++index') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= ++index') + IIncrementOrDecrementOperation (Prefix) (OperationKind.Increment, Type: System.Int32) (Syntax: '++index') + Target: + ILocalReferenceOperation: index (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'index') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= ++index') - IIncrementOrDecrementOperation (Prefix) (OperationKind.Increment, Type: System.Int32) (Syntax: '++index') - Target: - ILocalReferenceOperation: index (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'index') + null IConditionalOperation (OperationKind.Conditional, Type: null) (Syntax: 'if (value > ... }') Condition: IBinaryOperation (BinaryOperatorKind.GreaterThan) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 'value > 100') @@ -734,10 +750,14 @@ static void Main() Target: ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int j = 0;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int j = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null IWhileLoopOperation (LoopKind.While) (OperationKind.Loop, Type: null) (Syntax: 'while (j < ... }') Condition: IBinaryOperation (BinaryOperatorKind.LessThan) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 'j < 10') @@ -818,10 +838,14 @@ static void Main() Target: ILocalReferenceOperation: i (OperationKind.LocalReference, Type: System.Int32) (Syntax: 'i') IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int j = 0;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int j = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null IWhileLoopOperation (LoopKind.While) (OperationKind.Loop, Type: null) (Syntax: 'while (j < ... }') Condition: IBinaryOperation (BinaryOperatorKind.LessThan) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 'j < 10') diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_InvalidExpression.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_InvalidExpression.cs index ca8addcbd7b..583be8d7fde 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_InvalidExpression.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_InvalidExpression.cs @@ -172,15 +172,19 @@ void F() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'string y = x.i1;') - ISingleVariableDeclarationOperation (Symbol: System.String y) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'y = x.i1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'string y = x.i1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.String y) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'y = x.i1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= x.i1') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.String, IsInvalid, IsImplicit) (Syntax: 'x.i1') + Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + IFieldReferenceOperation: System.Int32 Program.i1 (OperationKind.FieldReference, Type: System.Int32, IsInvalid) (Syntax: 'x.i1') + Instance Receiver: + ILocalReferenceOperation: x (OperationKind.LocalReference, Type: Program, IsInvalid) (Syntax: 'x') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= x.i1') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.String, IsInvalid, IsImplicit) (Syntax: 'x.i1') - Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - IFieldReferenceOperation: System.Int32 Program.i1 (OperationKind.FieldReference, Type: System.Int32, IsInvalid) (Syntax: 'x.i1') - Instance Receiver: - ILocalReferenceOperation: x (OperationKind.LocalReference, Type: Program, IsInvalid) (Syntax: 'x') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0029: Cannot implicitly convert type 'int' to 'string' @@ -217,15 +221,19 @@ void F() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'Program y = ... ogram)x.i1;') - ISingleVariableDeclarationOperation (Symbol: Program y) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'y = (Program)x.i1') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'Program y = ... rogram)x.i1') + Declarations: + ISingleVariableDeclarationOperation (Symbol: Program y) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'y = (Program)x.i1') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= (Program)x.i1') + IConversionOperation (Explicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: Program, IsInvalid) (Syntax: '(Program)x.i1') + Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + IFieldReferenceOperation: System.Int32 Program.i1 (OperationKind.FieldReference, Type: System.Int32, IsInvalid) (Syntax: 'x.i1') + Instance Receiver: + ILocalReferenceOperation: x (OperationKind.LocalReference, Type: Program, IsInvalid) (Syntax: 'x') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= (Program)x.i1') - IConversionOperation (Explicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: Program, IsInvalid) (Syntax: '(Program)x.i1') - Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - IFieldReferenceOperation: System.Int32 Program.i1 (OperationKind.FieldReference, Type: System.Int32, IsInvalid) (Syntax: 'x.i1') - Instance Receiver: - ILocalReferenceOperation: x (OperationKind.LocalReference, Type: Program, IsInvalid) (Syntax: 'x') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0030: Cannot convert type 'int' to 'Program' diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_InvalidStatement.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_InvalidStatement.cs index 9a0770b59b3..ffe0a9a3b91 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_InvalidStatement.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_InvalidStatement.cs @@ -27,11 +27,15 @@ static void Main(string[] args) } "; string expectedOperationTree = @" -IVariableDeclarationGroupOperation (2 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int x, ( 1 );') - ISingleVariableDeclarationOperation (Symbol: System.Int32 x) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x') - Initializer: - null - ISingleVariableDeclarationOperation (Symbol: System.Int32 ) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: '( 1 ') +IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'int x, ( 1 );') + IMultiVariableDeclarationOperation (2 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'int x, ( 1 ') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 x) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x') + Initializer: + null + ISingleVariableDeclarationOperation (Symbol: System.Int32 ) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: '( 1 ') + Initializer: + null Initializer: null "; diff --git a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_TryCatch.cs b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_TryCatch.cs index 0a9df57071a..8eb717de2f1 100644 --- a/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_TryCatch.cs +++ b/src/Compilers/CSharp/Test/Semantic/IOperation/IOperationTests_TryCatch.cs @@ -532,10 +532,14 @@ static void M(string s) IBlockOperation (1 statements, 1 locals) (OperationKind.Block, Type: null) (Syntax: '{ ... }') Locals: Local_1: System.Int32 i IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null Catch clauses(1): ICatchClauseOperation (Exception type: System.Exception) (OperationKind.CatchClause, Type: null) (Syntax: 'catch (Exce ... }') ExceptionDeclarationOrExpression: @@ -591,10 +595,14 @@ static void M(string s) IBlockOperation (1 statements, 1 locals) (OperationKind.Block, Type: null) (Syntax: '{ ... }') Locals: Local_1: System.Int32 i IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null Finally: null "; @@ -732,10 +740,14 @@ Catch clauses(0) IBlockOperation (1 statements, 1 locals) (OperationKind.Block, Type: null) (Syntax: '{ ... }') Locals: Local_1: System.Int32 i IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int i = 0;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int i = 0') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = 0') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= 0') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0219: The variable 'i' is assigned but its value is never used diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/DeconstructionTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/DeconstructionTests.cs index 4b4b9723a07..9b21f7a5eaf 100644 --- a/src/Compilers/CSharp/Test/Semantic/Semantics/DeconstructionTests.cs +++ b/src/Compilers/CSharp/Test/Semantic/Semantics/DeconstructionTests.cs @@ -3903,16 +3903,20 @@ static void Main() "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'const (int ... ) = (1, 2);') - ISingleVariableDeclarationOperation (Symbol: (System.Int32 x, System.Int32 y) ) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: '= (1, 2)') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: '(int x, int y) = (1, 2)') + Declarations: + ISingleVariableDeclarationOperation (Symbol: (System.Int32 x, System.Int32 y) ) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: '= (1, 2)') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= (1, 2)') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.Int32 x, System.Int32 y), IsImplicit) (Syntax: '(1, 2)') + Conversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ITupleOperation (OperationKind.Tuple, Type: (System.Int32, System.Int32)) (Syntax: '(1, 2)') + Elements(2): + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= (1, 2)') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: (System.Int32 x, System.Int32 y), IsImplicit) (Syntax: '(1, 2)') - Conversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ITupleOperation (OperationKind.Tuple, Type: (System.Int32, System.Int32)) (Syntax: '(1, 2)') - Elements(2): - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2) (Syntax: '2') + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1001: Identifier expected diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/ObjectAndCollectionInitializerTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/ObjectAndCollectionInitializerTests.cs index 91cdd73d1c5..ac970cbe8b6 100644 --- a/src/Compilers/CSharp/Test/Semantic/Semantics/ObjectAndCollectionInitializerTests.cs +++ b/src/Compilers/CSharp/Test/Semantic/Semantics/ObjectAndCollectionInitializerTests.cs @@ -307,40 +307,52 @@ public static void Main() Local_2: MemberInitializerTest j Local_3: MemberInitializerTest k IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var i = new ... int>() { };') - ISingleVariableDeclarationOperation (Symbol: System.Collections.Generic.List i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = new List() { }') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new List() { }') - IObjectCreationOperation (Constructor: System.Collections.Generic.List..ctor()) (OperationKind.ObjectCreation, Type: System.Collections.Generic.List) (Syntax: 'new List() { }') - Arguments(0) + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'var i = new ... () { }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Collections.Generic.List i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = new List() { }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: System.Collections.Generic.List) (Syntax: '{ }') - Initializers(0) - IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var j = new ... x = { } };') - ISingleVariableDeclarationOperation (Symbol: MemberInitializerTest j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = new Mem ... { x = { } }') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new List() { }') + IObjectCreationOperation (Constructor: System.Collections.Generic.List..ctor()) (OperationKind.ObjectCreation, Type: System.Collections.Generic.List) (Syntax: 'new List() { }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: System.Collections.Generic.List) (Syntax: '{ }') + Initializers(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new Membe ... { x = { } }') - IObjectCreationOperation (Constructor: MemberInitializerTest..ctor()) (OperationKind.ObjectCreation, Type: MemberInitializerTest) (Syntax: 'new MemberI ... { x = { } }') - Arguments(0) + null + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var j = new ... x = { } };') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'var j = new ... { x = { } }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: MemberInitializerTest j) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'j = new Mem ... { x = { } }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: MemberInitializerTest) (Syntax: '{ x = { } }') - Initializers(1): - IMemberInitializerOperation (OperationKind.MemberInitializer, Type: System.Collections.Generic.List) (Syntax: 'x = { }') - InitializedMember: - IFieldReferenceOperation: System.Collections.Generic.List MemberInitializerTest.x (OperationKind.FieldReference, Type: System.Collections.Generic.List) (Syntax: 'x') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: MemberInitializerTest, IsImplicit) (Syntax: 'x') - Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: System.Collections.Generic.List) (Syntax: '{ }') - Initializers(0) - IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var k = new ... Test() { };') - ISingleVariableDeclarationOperation (Symbol: MemberInitializerTest k) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'k = new Mem ... rTest() { }') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new Membe ... { x = { } }') + IObjectCreationOperation (Constructor: MemberInitializerTest..ctor()) (OperationKind.ObjectCreation, Type: MemberInitializerTest) (Syntax: 'new MemberI ... { x = { } }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: MemberInitializerTest) (Syntax: '{ x = { } }') + Initializers(1): + IMemberInitializerOperation (OperationKind.MemberInitializer, Type: System.Collections.Generic.List) (Syntax: 'x = { }') + InitializedMember: + IFieldReferenceOperation: System.Collections.Generic.List MemberInitializerTest.x (OperationKind.FieldReference, Type: System.Collections.Generic.List) (Syntax: 'x') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: MemberInitializerTest, IsImplicit) (Syntax: 'x') + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: System.Collections.Generic.List) (Syntax: '{ }') + Initializers(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new Membe ... rTest() { }') - IObjectCreationOperation (Constructor: MemberInitializerTest..ctor()) (OperationKind.ObjectCreation, Type: MemberInitializerTest) (Syntax: 'new MemberI ... rTest() { }') - Arguments(0) + null + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var k = new ... Test() { };') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'var k = new ... rTest() { }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: MemberInitializerTest k) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'k = new Mem ... rTest() { }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: MemberInitializerTest) (Syntax: '{ }') - Initializers(0) + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new Membe ... rTest() { }') + IObjectCreationOperation (Constructor: MemberInitializerTest..ctor()) (OperationKind.ObjectCreation, Type: MemberInitializerTest) (Syntax: 'new MemberI ... rTest() { }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: MemberInitializerTest) (Syntax: '{ }') + Initializers(0) + Initializer: + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -1909,22 +1921,26 @@ public static void Main() Locals: Local_1: MemberInitializerTest i Local_2: System.Collections.Generic.List> collection IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var i = new ... y = { } };') - ISingleVariableDeclarationOperation (Symbol: MemberInitializerTest i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = new Mem ... { y = { } }') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new Membe ... { y = { } }') - IObjectCreationOperation (Constructor: MemberInitializerTest..ctor()) (OperationKind.ObjectCreation, Type: MemberInitializerTest) (Syntax: 'new MemberI ... { y = { } }') - Arguments(0) + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'var i = new ... { y = { } }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: MemberInitializerTest i) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'i = new Mem ... { y = { } }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: MemberInitializerTest) (Syntax: '{ y = { } }') - Initializers(1): - IMemberInitializerOperation (OperationKind.MemberInitializer, Type: System.Collections.Generic.List) (Syntax: 'y = { }') - InitializedMember: - IFieldReferenceOperation: System.Collections.Generic.List MemberInitializerTest.y (OperationKind.FieldReference, Type: System.Collections.Generic.List) (Syntax: 'y') - Instance Receiver: - IInstanceReferenceOperation (OperationKind.InstanceReference, Type: MemberInitializerTest, IsImplicit) (Syntax: 'y') - Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: System.Collections.Generic.List) (Syntax: '{ }') - Initializers(0) + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new Membe ... { y = { } }') + IObjectCreationOperation (Constructor: MemberInitializerTest..ctor()) (OperationKind.ObjectCreation, Type: MemberInitializerTest) (Syntax: 'new MemberI ... { y = { } }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: MemberInitializerTest) (Syntax: '{ y = { } }') + Initializers(1): + IMemberInitializerOperation (OperationKind.MemberInitializer, Type: System.Collections.Generic.List) (Syntax: 'y = { }') + InitializedMember: + IFieldReferenceOperation: System.Collections.Generic.List MemberInitializerTest.y (OperationKind.FieldReference, Type: System.Collections.Generic.List) (Syntax: 'y') + Instance Receiver: + IInstanceReferenceOperation (OperationKind.InstanceReference, Type: MemberInitializerTest, IsImplicit) (Syntax: 'y') + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: System.Collections.Generic.List) (Syntax: '{ }') + Initializers(0) + Initializer: + null IExpressionStatementOperation (OperationKind.ExpressionStatement, Type: null) (Syntax: 'i = new Mem ... int> { } };') Expression: ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: MemberInitializerTest) (Syntax: 'i = new Mem ... { } }') @@ -1969,16 +1985,20 @@ public static void Main() IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid) (Syntax: '{ }') Children(0) IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'List> collection) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'collection ... >() { { } }') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new List< ... >() { { } }') - IObjectCreationOperation (Constructor: System.Collections.Generic.List>..ctor()) (OperationKind.ObjectCreation, Type: System.Collections.Generic.List>, IsInvalid) (Syntax: 'new List
  • () { { } }') - Arguments(0) + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'List() { { } }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Collections.Generic.List> collection) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'collection ... >() { { } }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: System.Collections.Generic.List>, IsInvalid) (Syntax: '{ { } }') - Initializers(1): - IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid) (Syntax: '{ }') - Children(0) + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new List< ... >() { { } }') + IObjectCreationOperation (Constructor: System.Collections.Generic.List>..ctor()) (OperationKind.ObjectCreation, Type: System.Collections.Generic.List>, IsInvalid) (Syntax: 'new List
  • () { { } }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: System.Collections.Generic.List>, IsInvalid) (Syntax: '{ { } }') + Initializers(1): + IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid) (Syntax: '{ }') + Children(0) + Initializer: + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1920: Element initializer cannot be empty @@ -2068,32 +2088,40 @@ class A Locals: Local_1: B coll Local_2: A tc IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'B coll = new B { 1 };') - ISingleVariableDeclarationOperation (Symbol: B coll) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'coll = new B { 1 }') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new B { 1 }') - IObjectCreationOperation (Constructor: B..ctor()) (OperationKind.ObjectCreation, Type: B, IsInvalid) (Syntax: 'new B { 1 }') - Arguments(0) + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'B coll = new B { 1 }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: B coll) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'coll = new B { 1 }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: B, IsInvalid) (Syntax: '{ 1 }') - Initializers(1): - IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid, IsImplicit) (Syntax: '1') - Children(1): - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') - IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'var tc = ne ... ""hello"" };') - ISingleVariableDeclarationOperation (Symbol: A tc) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'tc = new A ... , ""hello"" }') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new B { 1 }') + IObjectCreationOperation (Constructor: B..ctor()) (OperationKind.ObjectCreation, Type: B, IsInvalid) (Syntax: 'new B { 1 }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: B, IsInvalid) (Syntax: '{ 1 }') + Initializers(1): + IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid, IsImplicit) (Syntax: '1') + Children(1): + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new A { 1, ""hello"" }') - IObjectCreationOperation (Constructor: A..ctor()) (OperationKind.ObjectCreation, Type: A, IsInvalid) (Syntax: 'new A { 1, ""hello"" }') - Arguments(0) + null + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'var tc = ne ... ""hello"" };') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'var tc = ne ... , ""hello"" }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: A tc) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'tc = new A ... , ""hello"" }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: A, IsInvalid) (Syntax: '{ 1, ""hello"" }') - Initializers(2): - IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid, IsImplicit) (Syntax: '1') - Children(1): - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') - IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid, IsImplicit) (Syntax: '""hello""') - Children(1): - ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: ""hello"", IsInvalid) (Syntax: '""hello""') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new A { 1, ""hello"" }') + IObjectCreationOperation (Constructor: A..ctor()) (OperationKind.ObjectCreation, Type: A, IsInvalid) (Syntax: 'new A { 1, ""hello"" }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: A, IsInvalid) (Syntax: '{ 1, ""hello"" }') + Initializers(2): + IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid, IsImplicit) (Syntax: '1') + Children(1): + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') + IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid, IsImplicit) (Syntax: '""hello""') + Children(1): + ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: ""hello"", IsInvalid) (Syntax: '""hello""') + Initializer: + null IReturnOperation (OperationKind.Return, Type: null) (Syntax: 'return 0;') ReturnedValue: ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') @@ -2542,54 +2570,70 @@ public IEnumerator GetEnumerator() Local_3: D coll3 Local_4: E coll4 IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'B coll1 = new B { 1 };') - ISingleVariableDeclarationOperation (Symbol: B coll1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'coll1 = new B { 1 }') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new B { 1 }') - IObjectCreationOperation (Constructor: B..ctor()) (OperationKind.ObjectCreation, Type: B, IsInvalid) (Syntax: 'new B { 1 }') - Arguments(0) + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'B coll1 = new B { 1 }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: B coll1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'coll1 = new B { 1 }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: B, IsInvalid) (Syntax: '{ 1 }') - Initializers(1): - IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid, IsImplicit) (Syntax: '1') - Children(1): - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') - IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'C coll2 = new C { 1 };') - ISingleVariableDeclarationOperation (Symbol: C coll2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'coll2 = new C { 1 }') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new B { 1 }') + IObjectCreationOperation (Constructor: B..ctor()) (OperationKind.ObjectCreation, Type: B, IsInvalid) (Syntax: 'new B { 1 }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: B, IsInvalid) (Syntax: '{ 1 }') + Initializers(1): + IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid, IsImplicit) (Syntax: '1') + Children(1): + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new C { 1 }') - IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C, IsInvalid) (Syntax: 'new C { 1 }') - Arguments(0) + null + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'C coll2 = new C { 1 };') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'C coll2 = new C { 1 }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: C coll2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'coll2 = new C { 1 }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: C, IsInvalid) (Syntax: '{ 1 }') - Initializers(1): - IInvalidOperation (OperationKind.Invalid, Type: System.Void, IsInvalid, IsImplicit) (Syntax: '1') - Children(1): - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') - IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'D coll3 = n ... { 1, 2 } };') - ISingleVariableDeclarationOperation (Symbol: D coll3) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'coll3 = new ... { 1, 2 } }') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new C { 1 }') + IObjectCreationOperation (Constructor: C..ctor()) (OperationKind.ObjectCreation, Type: C, IsInvalid) (Syntax: 'new C { 1 }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: C, IsInvalid) (Syntax: '{ 1 }') + Initializers(1): + IInvalidOperation (OperationKind.Invalid, Type: System.Void, IsInvalid, IsImplicit) (Syntax: '1') + Children(1): + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new D { { 1, 2 } }') - IObjectCreationOperation (Constructor: D..ctor()) (OperationKind.ObjectCreation, Type: D, IsInvalid) (Syntax: 'new D { { 1, 2 } }') - Arguments(0) + null + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'D coll3 = n ... { 1, 2 } };') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'D coll3 = n ... { 1, 2 } }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: D coll3) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'coll3 = new ... { 1, 2 } }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: D, IsInvalid) (Syntax: '{ { 1, 2 } }') - Initializers(1): - IInvalidOperation (OperationKind.Invalid, Type: System.Void, IsInvalid, IsImplicit) (Syntax: '{ 1, 2 }') - Children(2): - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2, IsInvalid) (Syntax: '2') - IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'E coll4 = new E { 1 };') - ISingleVariableDeclarationOperation (Symbol: E coll4) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'coll4 = new E { 1 }') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new D { { 1, 2 } }') + IObjectCreationOperation (Constructor: D..ctor()) (OperationKind.ObjectCreation, Type: D, IsInvalid) (Syntax: 'new D { { 1, 2 } }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: D, IsInvalid) (Syntax: '{ { 1, 2 } }') + Initializers(1): + IInvalidOperation (OperationKind.Invalid, Type: System.Void, IsInvalid, IsImplicit) (Syntax: '{ 1, 2 }') + Children(2): + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 2, IsInvalid) (Syntax: '2') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new E { 1 }') - IObjectCreationOperation (Constructor: E..ctor()) (OperationKind.ObjectCreation, Type: E, IsInvalid) (Syntax: 'new E { 1 }') - Arguments(0) + null + IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'E coll4 = new E { 1 };') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'E coll4 = new E { 1 }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: E coll4) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'coll4 = new E { 1 }') Initializer: - IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: E, IsInvalid) (Syntax: '{ 1 }') - Initializers(1): - IInvalidOperation (OperationKind.Invalid, Type: System.Void, IsInvalid, IsImplicit) (Syntax: '1') - Children(1): - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new E { 1 }') + IObjectCreationOperation (Constructor: E..ctor()) (OperationKind.ObjectCreation, Type: E, IsInvalid) (Syntax: 'new E { 1 }') + Arguments(0) + Initializer: + IObjectOrCollectionInitializerOperation (OperationKind.ObjectOrCollectionInitializer, Type: E, IsInvalid) (Syntax: '{ 1 }') + Initializers(1): + IInvalidOperation (OperationKind.Invalid, Type: System.Void, IsInvalid, IsImplicit) (Syntax: '1') + Children(1): + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') + Initializer: + null IReturnOperation (OperationKind.Return, Type: null) (Syntax: 'return 0;') ReturnedValue: ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 0) (Syntax: '0') diff --git a/src/Compilers/CSharp/Test/Semantic/Semantics/OperatorTests.cs b/src/Compilers/CSharp/Test/Semantic/Semantics/OperatorTests.cs index 8887431373c..947a1558fbb 100644 --- a/src/Compilers/CSharp/Test/Semantic/Semantics/OperatorTests.cs +++ b/src/Compilers/CSharp/Test/Semantic/Semantics/OperatorTests.cs @@ -1821,103 +1821,115 @@ static void M(S s1, S s2, S? s3, S? s4, X xint) Local_2: System.Int32? q Local_3: System.Boolean[] b IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int x = xint + 123;') - ISingleVariableDeclarationOperation (Symbol: System.Int32 x) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x = xint + 123') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'int x = xint + 123') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Int32 x) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'x = xint + 123') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= xint + 123') + IBinaryOperation (BinaryOperatorKind.Add) (OperatorMethod: System.Int32 X.op_Addition(X x, System.Int32 y)) (OperationKind.BinaryOperator, Type: System.Int32) (Syntax: 'xint + 123') + Left: + IParameterReferenceOperation: xint (OperationKind.ParameterReference, Type: X) (Syntax: 'xint') + Right: + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 123) (Syntax: '123') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= xint + 123') - IBinaryOperation (BinaryOperatorKind.Add) (OperatorMethod: System.Int32 X.op_Addition(X x, System.Int32 y)) (OperationKind.BinaryOperator, Type: System.Int32) (Syntax: 'xint + 123') - Left: - IParameterReferenceOperation: xint (OperationKind.ParameterReference, Type: X) (Syntax: 'xint') - Right: - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 123) (Syntax: '123') + null IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'int? q = ne ... new int?();') - ISingleVariableDeclarationOperation (Symbol: System.Int32? q) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'q = new Q.op_Addition(Q x, System.Int32 y)) (OperationKind.BinaryOperator, Type: System.Int32?) (Syntax: 'new Q? ... new int?()') + Left: + IObjectCreationOperation (Constructor: Q?..ctor()) (OperationKind.ObjectCreation, Type: Q?) (Syntax: 'new Q?()') + Arguments(0) + Initializer: + null + Right: + IObjectCreationOperation (Constructor: System.Int32?..ctor()) (OperationKind.ObjectCreation, Type: System.Int32?) (Syntax: 'new int?()') + Arguments(0) + Initializer: + null Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new Q.op_Addition(Q x, System.Int32 y)) (OperationKind.BinaryOperator, Type: System.Int32?) (Syntax: 'new Q? ... new int?()') - Left: - IObjectCreationOperation (Constructor: Q?..ctor()) (OperationKind.ObjectCreation, Type: Q?) (Syntax: 'new Q?()') - Arguments(0) - Initializer: - null - Right: - IObjectCreationOperation (Constructor: System.Int32?..ctor()) (OperationKind.ObjectCreation, Type: System.Int32?) (Syntax: 'new int?()') - Arguments(0) - Initializer: - null + null IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'bool[] b = ... };') - ISingleVariableDeclarationOperation (Symbol: System.Boolean[] b) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'b = ... }') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= ... }') - IArrayCreationOperation (OperationKind.ArrayCreation, Type: System.Boolean[]) (Syntax: '{ ... }') - Dimension Sizes(1): - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 8, IsImplicit) (Syntax: '{ ... }') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'bool[] b = ... }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Boolean[] b) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'b = ... }') Initializer: - IArrayInitializerOperation (8 elements) (OperationKind.ArrayInitializer, Type: null) (Syntax: '{ ... }') - Element Values(8): - IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S x, S y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 's1 == s2') - Left: - IParameterReferenceOperation: s1 (OperationKind.ParameterReference, Type: S) (Syntax: 's1') - Right: - IParameterReferenceOperation: s2 (OperationKind.ParameterReference, Type: S) (Syntax: 's2') - IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S? x, S? y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 's1 == s3') - Left: - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, IsImplicit) (Syntax: 's1') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - IParameterReferenceOperation: s1 (OperationKind.ParameterReference, Type: S) (Syntax: 's1') - Right: - IParameterReferenceOperation: s3 (OperationKind.ParameterReference, Type: S?) (Syntax: 's3') - IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S? x, S? y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 's1 == null') - Left: - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, IsImplicit) (Syntax: 's1') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - IParameterReferenceOperation: s1 (OperationKind.ParameterReference, Type: S) (Syntax: 's1') - Right: - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, Constant: null, IsImplicit) (Syntax: 'null') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') - IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S? x, S? y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 's3 == s1') - Left: - IParameterReferenceOperation: s3 (OperationKind.ParameterReference, Type: S?) (Syntax: 's3') - Right: - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, IsImplicit) (Syntax: 's1') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - IParameterReferenceOperation: s1 (OperationKind.ParameterReference, Type: S) (Syntax: 's1') - IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S? x, S? y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 's3 == s4') - Left: - IParameterReferenceOperation: s3 (OperationKind.ParameterReference, Type: S?) (Syntax: 's3') - Right: - IParameterReferenceOperation: s4 (OperationKind.ParameterReference, Type: S?) (Syntax: 's4') - IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S? x, S? y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 's3 == null') - Left: - IParameterReferenceOperation: s3 (OperationKind.ParameterReference, Type: S?) (Syntax: 's3') - Right: - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, Constant: null, IsImplicit) (Syntax: 'null') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') - IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S? x, S? y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 'null == s1') - Left: - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, Constant: null, IsImplicit) (Syntax: 'null') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') - Right: - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, IsImplicit) (Syntax: 's1') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - IParameterReferenceOperation: s1 (OperationKind.ParameterReference, Type: S) (Syntax: 's1') - IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S? x, S? y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 'null == s3') - Left: - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, Constant: null, IsImplicit) (Syntax: 'null') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) - Operand: - ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') - Right: - IParameterReferenceOperation: s3 (OperationKind.ParameterReference, Type: S?) (Syntax: 's3') + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= ... }') + IArrayCreationOperation (OperationKind.ArrayCreation, Type: System.Boolean[]) (Syntax: '{ ... }') + Dimension Sizes(1): + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 8, IsImplicit) (Syntax: '{ ... }') + Initializer: + IArrayInitializerOperation (8 elements) (OperationKind.ArrayInitializer, Type: null) (Syntax: '{ ... }') + Element Values(8): + IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S x, S y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 's1 == s2') + Left: + IParameterReferenceOperation: s1 (OperationKind.ParameterReference, Type: S) (Syntax: 's1') + Right: + IParameterReferenceOperation: s2 (OperationKind.ParameterReference, Type: S) (Syntax: 's2') + IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S? x, S? y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 's1 == s3') + Left: + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, IsImplicit) (Syntax: 's1') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + IParameterReferenceOperation: s1 (OperationKind.ParameterReference, Type: S) (Syntax: 's1') + Right: + IParameterReferenceOperation: s3 (OperationKind.ParameterReference, Type: S?) (Syntax: 's3') + IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S? x, S? y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 's1 == null') + Left: + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, IsImplicit) (Syntax: 's1') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + IParameterReferenceOperation: s1 (OperationKind.ParameterReference, Type: S) (Syntax: 's1') + Right: + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, Constant: null, IsImplicit) (Syntax: 'null') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') + IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S? x, S? y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 's3 == s1') + Left: + IParameterReferenceOperation: s3 (OperationKind.ParameterReference, Type: S?) (Syntax: 's3') + Right: + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, IsImplicit) (Syntax: 's1') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + IParameterReferenceOperation: s1 (OperationKind.ParameterReference, Type: S) (Syntax: 's1') + IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S? x, S? y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 's3 == s4') + Left: + IParameterReferenceOperation: s3 (OperationKind.ParameterReference, Type: S?) (Syntax: 's3') + Right: + IParameterReferenceOperation: s4 (OperationKind.ParameterReference, Type: S?) (Syntax: 's4') + IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S? x, S? y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 's3 == null') + Left: + IParameterReferenceOperation: s3 (OperationKind.ParameterReference, Type: S?) (Syntax: 's3') + Right: + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, Constant: null, IsImplicit) (Syntax: 'null') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') + IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S? x, S? y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 'null == s1') + Left: + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, Constant: null, IsImplicit) (Syntax: 'null') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') + Right: + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, IsImplicit) (Syntax: 's1') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + IParameterReferenceOperation: s1 (OperationKind.ParameterReference, Type: S) (Syntax: 's1') + IBinaryOperation (BinaryOperatorKind.Equals) (OperatorMethod: System.Boolean S.op_Equality(S? x, S? y)) (OperationKind.BinaryOperator, Type: System.Boolean) (Syntax: 'null == s3') + Left: + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: S?, Constant: null, IsImplicit) (Syntax: 'null') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) + Operand: + ILiteralOperation (OperationKind.Literal, Type: null, Constant: null) (Syntax: 'null') + Right: + IParameterReferenceOperation: s3 (OperationKind.ParameterReference, Type: S?) (Syntax: 's3') + Initializer: + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS0458: The result of the expression is always 'null' of type 'int?' diff --git a/src/Compilers/CSharp/Test/Symbol/Symbols/AnonymousTypesSemanticsTests.cs b/src/Compilers/CSharp/Test/Symbol/Symbols/AnonymousTypesSemanticsTests.cs index 31ed4dc57bc..374c7cab6ab 100644 --- a/src/Compilers/CSharp/Test/Symbol/Symbols/AnonymousTypesSemanticsTests.cs +++ b/src/Compilers/CSharp/Test/Symbol/Symbols/AnonymousTypesSemanticsTests.cs @@ -136,99 +136,115 @@ public int aa Local_3: System.Object v3 Local_4: v4 IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'object v1 = ... };') - ISingleVariableDeclarationOperation (Symbol: System.Object v1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'v1 = new ... }') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'object v1 = ... }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Object v1) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'v1 = new ... }') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new ... }') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Object, IsImplicit) (Syntax: 'new ... }') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) + Operand: + IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: ) (Syntax: 'new ... }') + Initializers(3): + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.Int32, Constant: 1) (Syntax: 'aa = 1') + Left: + IPropertyReferenceOperation: System.Int32 .aa { get; } (OperationKind.PropertyReference, Type: System.Int32) (Syntax: 'aa') + Instance Receiver: + null + Right: + ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.String, Constant: """") (Syntax: 'BB = """"') + Left: + IPropertyReferenceOperation: System.String .BB { get; } (OperationKind.PropertyReference, Type: System.String) (Syntax: 'BB') + Instance Receiver: + null + Right: + ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: """") (Syntax: '""""') + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: ClassA.SSS) (Syntax: 'CCC = new SSS()') + Left: + IPropertyReferenceOperation: ClassA.SSS .CCC { get; } (OperationKind.PropertyReference, Type: ClassA.SSS) (Syntax: 'CCC') + Instance Receiver: + null + Right: + IObjectCreationOperation (Constructor: ClassA.SSS..ctor()) (OperationKind.ObjectCreation, Type: ClassA.SSS) (Syntax: 'new SSS()') + Arguments(0) + Initializer: + null Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new ... }') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Object, IsImplicit) (Syntax: 'new ... }') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) - Operand: - IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: ) (Syntax: 'new ... }') - Initializers(3): - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.Int32, Constant: 1) (Syntax: 'aa = 1') - Left: - IPropertyReferenceOperation: System.Int32 .aa { get; } (OperationKind.PropertyReference, Type: System.Int32) (Syntax: 'aa') - Instance Receiver: - null - Right: - ILiteralOperation (OperationKind.Literal, Type: System.Int32, Constant: 1) (Syntax: '1') - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.String, Constant: """") (Syntax: 'BB = """"') - Left: - IPropertyReferenceOperation: System.String .BB { get; } (OperationKind.PropertyReference, Type: System.String) (Syntax: 'BB') - Instance Receiver: - null - Right: - ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: """") (Syntax: '""""') - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: ClassA.SSS) (Syntax: 'CCC = new SSS()') - Left: - IPropertyReferenceOperation: ClassA.SSS .CCC { get; } (OperationKind.PropertyReference, Type: ClassA.SSS) (Syntax: 'CCC') - Instance Receiver: - null - Right: - IObjectCreationOperation (Constructor: ClassA.SSS..ctor()) (OperationKind.ObjectCreation, Type: ClassA.SSS) (Syntax: 'new SSS()') - Arguments(0) - Initializer: - null + null IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'object v2 = ... };') - ISingleVariableDeclarationOperation (Symbol: System.Object v2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'v2 = new ... }') - Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new ... }') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Object, IsImplicit) (Syntax: 'new ... }') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) - Operand: - IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: CCC>) (Syntax: 'new ... }') - Initializers(3): - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: ClassA.SSS) (Syntax: 'aa = new SSS()') - Left: - IPropertyReferenceOperation: ClassA.SSS CCC>.aa { get; } (OperationKind.PropertyReference, Type: ClassA.SSS) (Syntax: 'aa') - Instance Receiver: - null - Right: - IObjectCreationOperation (Constructor: ClassA.SSS..ctor()) (OperationKind.ObjectCreation, Type: ClassA.SSS) (Syntax: 'new SSS()') - Arguments(0) - Initializer: - null - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.Double, Constant: 123.456) (Syntax: 'BB = 123.456') - Left: - IPropertyReferenceOperation: System.Double CCC>.BB { get; } (OperationKind.PropertyReference, Type: System.Double) (Syntax: 'BB') - Instance Receiver: - null - Right: - ILiteralOperation (OperationKind.Literal, Type: System.Double, Constant: 123.456) (Syntax: '123.456') - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: ) (Syntax: 'CCC = new ... }') - Left: - IPropertyReferenceOperation: CCC>.CCC { get; } (OperationKind.PropertyReference, Type: ) (Syntax: 'CCC') - Instance Receiver: - null - Right: - IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: ) (Syntax: 'new ... }') - Initializers(3): - IPropertyReferenceOperation: System.Int32 ClassA.aa { get; } (OperationKind.PropertyReference, Type: System.Int32) (Syntax: '(new ClassA()).aa') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'object v2 = ... }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Object v2) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'v2 = new ... }') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new ... }') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Object, IsImplicit) (Syntax: 'new ... }') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) + Operand: + IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: CCC>) (Syntax: 'new ... }') + Initializers(3): + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: ClassA.SSS) (Syntax: 'aa = new SSS()') + Left: + IPropertyReferenceOperation: ClassA.SSS CCC>.aa { get; } (OperationKind.PropertyReference, Type: ClassA.SSS) (Syntax: 'aa') Instance Receiver: - IObjectCreationOperation (Constructor: ClassA..ctor()) (OperationKind.ObjectCreation, Type: ClassA) (Syntax: 'new ClassA()') - Arguments(0) - Initializer: - null - IFieldReferenceOperation: System.String ClassA.BB (Static) (OperationKind.FieldReference, Type: System.String, Constant: ""-=-= -"") (Syntax: 'ClassA.BB') + null + Right: + IObjectCreationOperation (Constructor: ClassA.SSS..ctor()) (OperationKind.ObjectCreation, Type: ClassA.SSS) (Syntax: 'new SSS()') + Arguments(0) + Initializer: + null + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.Double, Constant: 123.456) (Syntax: 'BB = 123.456') + Left: + IPropertyReferenceOperation: System.Double CCC>.BB { get; } (OperationKind.PropertyReference, Type: System.Double) (Syntax: 'BB') Instance Receiver: null - IFieldReferenceOperation: ClassA.SSS ClassA.CCC (Static) (OperationKind.FieldReference, Type: ClassA.SSS) (Syntax: 'ClassA.CCC') + Right: + ILiteralOperation (OperationKind.Literal, Type: System.Double, Constant: 123.456) (Syntax: '123.456') + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: ) (Syntax: 'CCC = new ... }') + Left: + IPropertyReferenceOperation: CCC>.CCC { get; } (OperationKind.PropertyReference, Type: ) (Syntax: 'CCC') Instance Receiver: null + Right: + IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: ) (Syntax: 'new ... }') + Initializers(3): + IPropertyReferenceOperation: System.Int32 ClassA.aa { get; } (OperationKind.PropertyReference, Type: System.Int32) (Syntax: '(new ClassA()).aa') + Instance Receiver: + IObjectCreationOperation (Constructor: ClassA..ctor()) (OperationKind.ObjectCreation, Type: ClassA) (Syntax: 'new ClassA()') + Arguments(0) + Initializer: + null + IFieldReferenceOperation: System.String ClassA.BB (Static) (OperationKind.FieldReference, Type: System.String, Constant: ""-=-= -"") (Syntax: 'ClassA.BB') + Instance Receiver: + null + IFieldReferenceOperation: ClassA.SSS ClassA.CCC (Static) (OperationKind.FieldReference, Type: ClassA.SSS) (Syntax: 'ClassA.CCC') + Instance Receiver: + null + Initializer: + null IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'object v3 = new { };') - ISingleVariableDeclarationOperation (Symbol: System.Object v3) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'v3 = new { }') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'object v3 = new { }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Object v3) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'v3 = new { }') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new { }') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Object, IsImplicit) (Syntax: 'new { }') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) + Operand: + IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: ) (Syntax: 'new { }') + Initializers(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new { }') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Object, IsImplicit) (Syntax: 'new { }') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) - Operand: - IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: ) (Syntax: 'new { }') - Initializers(0) + null IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null) (Syntax: 'var v4 = new { };') - ISingleVariableDeclarationOperation (Symbol: v4) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'v4 = new { }') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null) (Syntax: 'var v4 = new { }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: v4) (OperationKind.SingleVariableDeclaration, Type: null) (Syntax: 'v4 = new { }') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new { }') + IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: ) (Syntax: 'new { }') + Initializers(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null) (Syntax: '= new { }') - IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: ) (Syntax: 'new { }') - Initializers(0) + null "; var expectedDiagnostics = DiagnosticDescription.None; @@ -1100,81 +1116,90 @@ public static void Test1(int x) Locals: Local_1: System.Object v1 Local_2: System.Object v2 IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'object v1 = ... };') - ISingleVariableDeclarationOperation (Symbol: System.Object v1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'v1 = new ... }') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'object v1 = ... }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Object v1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'v1 = new ... }') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new ... }') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Object, IsInvalid, IsImplicit) (Syntax: 'new ... }') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) + Operand: + IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: , IsInvalid) (Syntax: 'new ... }') + Initializers(3): + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: ?, IsInvalid) (Syntax: 'aa = xyz') + Left: + IPropertyReferenceOperation: ? .aa { get; } (OperationKind.PropertyReference, Type: ?) (Syntax: 'aa') + Instance Receiver: + null + Right: + IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid) (Syntax: 'xyz') + Children(0) + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.String, Constant: """") (Syntax: 'BB = """"') + Left: + IPropertyReferenceOperation: System.String .BB { get; } (OperationKind.PropertyReference, Type: System.String) (Syntax: 'BB') + Instance Receiver: + null + Right: + ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: """") (Syntax: '""""') + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: SSS, IsInvalid) (Syntax: 'CCC = new SSS()') + Left: + IPropertyReferenceOperation: SSS .CCC { get; } (OperationKind.PropertyReference, Type: SSS) (Syntax: 'CCC') + Instance Receiver: + null + Right: + IInvalidOperation (OperationKind.Invalid, Type: SSS, IsInvalid) (Syntax: 'new SSS()') + Children(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new ... }') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Object, IsInvalid, IsImplicit) (Syntax: 'new ... }') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) - Operand: - IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: , IsInvalid) (Syntax: 'new ... }') - Initializers(3): - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: ?, IsInvalid) (Syntax: 'aa = xyz') - Left: - IPropertyReferenceOperation: ? .aa { get; } (OperationKind.PropertyReference, Type: ?) (Syntax: 'aa') - Instance Receiver: - null - Right: - IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid) (Syntax: 'xyz') - Children(0) - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.String, Constant: """") (Syntax: 'BB = """"') - Left: - IPropertyReferenceOperation: System.String .BB { get; } (OperationKind.PropertyReference, Type: System.String) (Syntax: 'BB') - Instance Receiver: - null - Right: - ILiteralOperation (OperationKind.Literal, Type: System.String, Constant: """") (Syntax: '""""') - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: SSS, IsInvalid) (Syntax: 'CCC = new SSS()') - Left: - IPropertyReferenceOperation: SSS .CCC { get; } (OperationKind.PropertyReference, Type: SSS) (Syntax: 'CCC') - Instance Receiver: - null - Right: - IInvalidOperation (OperationKind.Invalid, Type: SSS, IsInvalid) (Syntax: 'new SSS()') - Children(0) + null IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'object v2 = ... };') - ISingleVariableDeclarationOperation (Symbol: System.Object v2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'v2 = new ... }') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid) (Syntax: 'object v2 = ... }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: System.Object v2) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'v2 = new ... }') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new ... }') + IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Object, IsInvalid, IsImplicit) (Syntax: 'new ... }') + Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) + Operand: + IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: CCC>, IsInvalid) (Syntax: 'new ... }') + Initializers(3): + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: SSS, IsInvalid) (Syntax: 'aa = new SSS()') + Left: + IPropertyReferenceOperation: SSS CCC>.aa { get; } (OperationKind.PropertyReference, Type: SSS) (Syntax: 'aa') + Instance Receiver: + null + Right: + IInvalidOperation (OperationKind.Invalid, Type: SSS, IsInvalid) (Syntax: 'new SSS()') + Children(0) + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.Double, Constant: 123.456) (Syntax: 'BB = 123.456') + Left: + IPropertyReferenceOperation: System.Double CCC>.BB { get; } (OperationKind.PropertyReference, Type: System.Double) (Syntax: 'BB') + Instance Receiver: + null + Right: + ILiteralOperation (OperationKind.Literal, Type: System.Double, Constant: 123.456) (Syntax: '123.456') + ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: , IsInvalid) (Syntax: 'CCC = new ... }') + Left: + IPropertyReferenceOperation: CCC>.CCC { get; } (OperationKind.PropertyReference, Type: ) (Syntax: 'CCC') + Instance Receiver: + null + Right: + IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: , IsInvalid) (Syntax: 'new ... }') + Initializers(3): + IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid) (Syntax: '(new ClassA()).aa') + Children(1): + IObjectCreationOperation (Constructor: ClassA..ctor()) (OperationKind.ObjectCreation, Type: ClassA) (Syntax: 'new ClassA()') + Arguments(0) + Initializer: + null + IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid) (Syntax: 'ClassA.BB') + Children(1): + IOperation: (OperationKind.None, Type: null) (Syntax: 'ClassA') + IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid) (Syntax: 'ClassA.CCC') + Children(1): + IOperation: (OperationKind.None, Type: null) (Syntax: 'ClassA') Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new ... }') - IConversionOperation (Implicit, TryCast: False, Unchecked) (OperationKind.Conversion, Type: System.Object, IsInvalid, IsImplicit) (Syntax: 'new ... }') - Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) - Operand: - IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: CCC>, IsInvalid) (Syntax: 'new ... }') - Initializers(3): - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: SSS, IsInvalid) (Syntax: 'aa = new SSS()') - Left: - IPropertyReferenceOperation: SSS CCC>.aa { get; } (OperationKind.PropertyReference, Type: SSS) (Syntax: 'aa') - Instance Receiver: - null - Right: - IInvalidOperation (OperationKind.Invalid, Type: SSS, IsInvalid) (Syntax: 'new SSS()') - Children(0) - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: System.Double, Constant: 123.456) (Syntax: 'BB = 123.456') - Left: - IPropertyReferenceOperation: System.Double CCC>.BB { get; } (OperationKind.PropertyReference, Type: System.Double) (Syntax: 'BB') - Instance Receiver: - null - Right: - ILiteralOperation (OperationKind.Literal, Type: System.Double, Constant: 123.456) (Syntax: '123.456') - ISimpleAssignmentOperation (OperationKind.SimpleAssignment, Type: , IsInvalid) (Syntax: 'CCC = new ... }') - Left: - IPropertyReferenceOperation: CCC>.CCC { get; } (OperationKind.PropertyReference, Type: ) (Syntax: 'CCC') - Instance Receiver: - null - Right: - IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: , IsInvalid) (Syntax: 'new ... }') - Initializers(3): - IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid) (Syntax: '(new ClassA()).aa') - Children(1): - IObjectCreationOperation (Constructor: ClassA..ctor()) (OperationKind.ObjectCreation, Type: ClassA) (Syntax: 'new ClassA()') - Arguments(0) - Initializer: - null - IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid) (Syntax: 'ClassA.BB') - Children(1): - IOperation: (OperationKind.None, Type: null) (Syntax: 'ClassA') - IInvalidOperation (OperationKind.Invalid, Type: ?, IsInvalid) (Syntax: 'ClassA.CCC') - Children(1): - IOperation: (OperationKind.None, Type: null) (Syntax: 'ClassA')"; + null +"; var expectedDiagnostics = new DiagnosticDescription[] { // CS0103: The name 'xyz' does not exist in the current context // aa = xyz, @@ -1241,11 +1266,15 @@ public static void Test1(int x) "; string expectedOperationTree = @" IVariableDeclarationGroupOperation (1 declarations) (OperationKind.VariableDeclarationGroup, Type: null, IsInvalid) (Syntax: 'var v1 = new { }') - ISingleVariableDeclarationOperation (Symbol: v1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'v1 = new { }') + IMultiVariableDeclarationOperation (1 declarations) (OperationKind.MultiVariableDeclaration, Type: null, IsInvalid, IsImplicit) (Syntax: 'var v1 = new { }') + Declarations: + ISingleVariableDeclarationOperation (Symbol: v1) (OperationKind.SingleVariableDeclaration, Type: null, IsInvalid) (Syntax: 'v1 = new { }') + Initializer: + IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new { }') + IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: , IsInvalid) (Syntax: 'new { }') + Initializers(0) Initializer: - IVariableInitializerOperation (OperationKind.VariableInitializer, Type: null, IsInvalid) (Syntax: '= new { }') - IAnonymousObjectCreationOperation (OperationKind.AnonymousObjectCreation, Type: , IsInvalid) (Syntax: 'new { }') - Initializers(0) + null "; var expectedDiagnostics = new DiagnosticDescription[] { // CS1674: '': type used in a using statement must be implicitly convertible to 'System.IDisposable' diff --git a/src/Compilers/Core/Portable/Generated/Operations.xml.Generated.cs b/src/Compilers/Core/Portable/Generated/Operations.xml.Generated.cs index da3c1be4607..7833184f794 100644 --- a/src/Compilers/Core/Portable/Generated/Operations.xml.Generated.cs +++ b/src/Compilers/Core/Portable/Generated/Operations.xml.Generated.cs @@ -5418,7 +5418,7 @@ public LazyUsingStatement(Lazy resources, Lazy body, Sem /// /// Represents a local variable declaration. /// - internal abstract partial class BaseVariableDeclaration : Operation, IVariableDeclarationOperation + internal abstract partial class BaseVariableDeclaration : Operation { protected BaseVariableDeclaration(OperationKind kind, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional constantValue, bool isImplicit) : base(kind, semanticModel, syntax, type, constantValue, isImplicit) @@ -5571,7 +5571,7 @@ internal abstract partial class BaseVariableDeclarationGroupOperation : Operatio { } - protected abstract ImmutableArray DeclarationsImpl { get; } + protected abstract ImmutableArray DeclarationsImpl { get; } public override IEnumerable Children { get @@ -5588,7 +5588,7 @@ public override IEnumerable Children /// /// Variables declared by the statement. /// - public ImmutableArray Declarations => Operation.SetParentOperation(DeclarationsImpl, this); + public ImmutableArray Declarations => Operation.SetParentOperation(DeclarationsImpl, this); public override void Accept(OperationVisitor visitor) { visitor.VisitVariableDeclarationGroup(this); @@ -5604,13 +5604,13 @@ public override void Accept(OperationVisitor visitor) /// internal sealed partial class VariableDeclarationGroupOperation : BaseVariableDeclarationGroupOperation, IVariableDeclarationGroupOperation { - public VariableDeclarationGroupOperation(ImmutableArray declarations, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional constantValue, bool isImplicit) : + public VariableDeclarationGroupOperation(ImmutableArray declarations, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional constantValue, bool isImplicit) : base(semanticModel, syntax, type, constantValue, isImplicit) { DeclarationsImpl = declarations; } - protected override ImmutableArray DeclarationsImpl { get; } + protected override ImmutableArray DeclarationsImpl { get; } } /// @@ -5618,14 +5618,14 @@ internal sealed partial class VariableDeclarationGroupOperation : BaseVariableDe /// internal sealed partial class LazyVariableDeclarationGroupOperation : BaseVariableDeclarationGroupOperation, IVariableDeclarationGroupOperation { - private readonly Lazy> _lazyDeclarations; + private readonly Lazy> _lazyDeclarations; - public LazyVariableDeclarationGroupOperation(Lazy> declarations, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional constantValue, bool isImplicit) : base(semanticModel, syntax, type, constantValue, isImplicit) + public LazyVariableDeclarationGroupOperation(Lazy> declarations, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional constantValue, bool isImplicit) : base(semanticModel, syntax, type, constantValue, isImplicit) { _lazyDeclarations = declarations; } - protected override ImmutableArray DeclarationsImpl => _lazyDeclarations.Value; + protected override ImmutableArray DeclarationsImpl => _lazyDeclarations.Value; } /// diff --git a/src/Compilers/Core/Portable/Operations/IDeclarationExpressionOperation.cs b/src/Compilers/Core/Portable/Operations/IDeclarationExpressionOperation.cs index 10730e2c221..6bf875395f5 100644 --- a/src/Compilers/Core/Portable/Operations/IDeclarationExpressionOperation.cs +++ b/src/Compilers/Core/Portable/Operations/IDeclarationExpressionOperation.cs @@ -3,7 +3,7 @@ namespace Microsoft.CodeAnalysis.Operations { /// - /// Represents a declaration expression operation. Unlike a regular variable declaration , this operation represents an "expression" declaring a variable. + /// Represents a declaration expression operation. Unlike a regular variable declaration and , this operation represents an "expression" declaring a variable. /// /// Current usage: /// (1) C# declaration expression. For example, diff --git a/src/Compilers/Core/Portable/Operations/IMultiVariableDeclarationOperation.cs b/src/Compilers/Core/Portable/Operations/IMultiVariableDeclarationOperation.cs index ea9457d7e13..cf06ee403d0 100644 --- a/src/Compilers/Core/Portable/Operations/IMultiVariableDeclarationOperation.cs +++ b/src/Compilers/Core/Portable/Operations/IMultiVariableDeclarationOperation.cs @@ -5,25 +5,41 @@ namespace Microsoft.CodeAnalysis.Operations { /// - /// Represents multiple declared variables in a single declarator. + /// Represents a declarator that declares multiple individual variables. /// /// /// Current Usage: - /// (1) VB Dim statement declaration groups - /// (2) VB Using statement variable declarations + /// (1) C# VariableDeclaration + /// (2) C# fixed declarations + /// (3) C# using declarations + /// (4) VB Dim statement declaration groups + /// (5) VB Using statement variable declarations /// /// /// The initializer of this node is applied to all individual declarations in . There cannot /// be initializers in both locations except in invalid code scenarios. + /// In C#, this node will never have an initializer. /// /// This interface is reserved for implementation by its associated APIs. We reserve the right to /// change it in the future. /// - public interface IMultiVariableDeclarationOperation : IVariableDeclarationOperation + public interface IMultiVariableDeclarationOperation : IOperation { /// /// Individual variable declarations declared by this multiple declaration. /// + /// + /// All will have at least 1 IMultiVariableDeclarationOpertion, + /// even if the declaration group only declares 1 variable. + /// ImmutableArray Declarations { get; } + + /// + /// Optional initializer of the variable. + /// + /// + /// In C#, this will always be null. + /// + IVariableInitializerOperation Initializer { get; } } } diff --git a/src/Compilers/Core/Portable/Operations/ISingleVariableDeclarationOperation.cs b/src/Compilers/Core/Portable/Operations/ISingleVariableDeclarationOperation.cs index 0f7db965d92..c2f820f242e 100644 --- a/src/Compilers/Core/Portable/Operations/ISingleVariableDeclarationOperation.cs +++ b/src/Compilers/Core/Portable/Operations/ISingleVariableDeclarationOperation.cs @@ -18,11 +18,21 @@ namespace Microsoft.CodeAnalysis.Operations /// This interface is reserved for implementation by its associated APIs. We reserve the right to /// change it in the future. /// - public interface ISingleVariableDeclarationOperation : IVariableDeclarationOperation + public interface ISingleVariableDeclarationOperation : IOperation { /// /// Symbol declared by this variable declaration /// ILocalSymbol Symbol { get; } + + /// + /// Optional initializer of the variable. + /// + /// + /// If this variable is in an , the initializer may be located + /// in the parent operation. Call + /// to check in all locations. It is only possible to have initializers in both locations in VB invalid code scenarios. + /// + IVariableInitializerOperation Initializer { get; } } } diff --git a/src/Compilers/Core/Portable/Operations/IVariableDeclarationGroupOperation.cs b/src/Compilers/Core/Portable/Operations/IVariableDeclarationGroupOperation.cs index 01b08453b75..65632c9ab4b 100644 --- a/src/Compilers/Core/Portable/Operations/IVariableDeclarationGroupOperation.cs +++ b/src/Compilers/Core/Portable/Operations/IVariableDeclarationGroupOperation.cs @@ -5,7 +5,7 @@ namespace Microsoft.CodeAnalysis.Operations { /// - /// Represents a local variable declaration statement. + /// Represents a variable declaration statement. /// /// /// Current Usage: @@ -22,8 +22,11 @@ namespace Microsoft.CodeAnalysis.Operations public interface IVariableDeclarationGroupOperation : IOperation { /// - /// Variables declared by the statement. + /// Variable declaration in the statement. /// - ImmutableArray Declarations { get; } + /// + /// In C#, this will always be a single declaration, with all variables in . + /// + ImmutableArray Declarations { get; } } } diff --git a/src/Compilers/Core/Portable/Operations/IVariableDeclarationOperation.cs b/src/Compilers/Core/Portable/Operations/IVariableDeclarationOperation.cs deleted file mode 100644 index da8ddbec398..00000000000 --- a/src/Compilers/Core/Portable/Operations/IVariableDeclarationOperation.cs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. - -using System.Collections.Immutable; - -namespace Microsoft.CodeAnalysis.Operations -{ - /// - /// Represents a local variable declaration. - /// - /// Current usage: - /// (1) C# local variable declaration in local declaration statement, catch clause, etc. - /// (2) VB local variable declaration in Dim statement, catch clause, etc. - /// - /// - /// - /// This interface is reserved for implementation by its associated APIs. We reserve the right to - /// change it in the future. - /// - public interface IVariableDeclarationOperation : IOperation - { - /// - /// Optional initializer of the variable. - /// - IVariableInitializerOperation Initializer { get; } - } -} diff --git a/src/Compilers/Core/Portable/Operations/OperationExtensions.cs b/src/Compilers/Core/Portable/Operations/OperationExtensions.cs index 48441c2f0cc..e90834757a4 100644 --- a/src/Compilers/Core/Portable/Operations/OperationExtensions.cs +++ b/src/Compilers/Core/Portable/Operations/OperationExtensions.cs @@ -96,18 +96,18 @@ private static IEnumerable Descendants(IOperation operation, bool in } /// - /// Gets all the declared local variables in the given . + /// Gets all the declared local variables in the given . /// - /// Variable declaration statement - public static ImmutableArray GetDeclaredVariables(this IVariableDeclarationGroupOperation declarationStatement) + /// Variable declaration group + public static ImmutableArray GetDeclaredVariables(this IVariableDeclarationGroupOperation declarationGroup) { - if (declarationStatement == null) + if (declarationGroup == null) { - throw new ArgumentNullException(nameof(declarationStatement)); + throw new ArgumentNullException(nameof(declarationGroup)); } var arrayBuilder = ArrayBuilder.GetInstance(); - foreach (IVariableDeclarationOperation group in declarationStatement.Declarations) + foreach (IMultiVariableDeclarationOperation group in declarationGroup.Declarations) { group.GetDeclaredVariables(arrayBuilder); } @@ -115,7 +115,11 @@ public static ImmutableArray GetDeclaredVariables(this IVariableDe return arrayBuilder.ToImmutableAndFree(); } - public static ImmutableArray GetDeclaredVariables(this IVariableDeclarationOperation declaration) + /// + /// Gets all the declared local variables in the given . + /// + /// Variable declaration + public static ImmutableArray GetDeclaredVariables(this IMultiVariableDeclarationOperation declaration) { if (declaration == null) { @@ -127,22 +131,24 @@ public static ImmutableArray GetDeclaredVariables(this IVariableDe return arrayBuilder.ToImmutableAndFree(); } - private static void GetDeclaredVariables(this IVariableDeclarationOperation declaration, ArrayBuilder arrayBuilder) + private static void GetDeclaredVariables(this IMultiVariableDeclarationOperation declaration, ArrayBuilder arrayBuilder) { - switch (declaration.Kind) + foreach (var decl in declaration.Declarations) { - case OperationKind.SingleVariableDeclaration: - arrayBuilder.Add(((ISingleVariableDeclarationOperation)declaration).Symbol); - break; - case OperationKind.MultiVariableDeclaration: - foreach (var decl in ((IMultiVariableDeclarationOperation)declaration).Declarations) - { - arrayBuilder.Add(decl.Symbol); - } - break; + arrayBuilder.Add(decl.Symbol); } } + /// + /// Gets the variable initialzer for the given , checking to see if there is a parent initializer + /// if the single variable initializer is null. + /// + /// Single variable declaration to retrieve initializer for. + public static IVariableInitializerOperation GetVariableInitializer(this ISingleVariableDeclarationOperation declarationOperation) + { + return declarationOperation?.Initializer ?? (declarationOperation?.Parent as IMultiVariableDeclarationOperation)?.Initializer; + } + /// /// Get an optional argument name for a named argument to the given at the given . /// diff --git a/src/Compilers/Core/Portable/PublicAPI.Unshipped.txt b/src/Compilers/Core/Portable/PublicAPI.Unshipped.txt index 3ebc24c6261..850f36e5398 100644 --- a/src/Compilers/Core/Portable/PublicAPI.Unshipped.txt +++ b/src/Compilers/Core/Portable/PublicAPI.Unshipped.txt @@ -384,6 +384,7 @@ Microsoft.CodeAnalysis.Operations.IMethodReferenceOperation.IsVirtual.get -> boo Microsoft.CodeAnalysis.Operations.IMethodReferenceOperation.Method.get -> Microsoft.CodeAnalysis.IMethodSymbol Microsoft.CodeAnalysis.Operations.IMultiVariableDeclarationOperation Microsoft.CodeAnalysis.Operations.IMultiVariableDeclarationOperation.Declarations.get -> System.Collections.Immutable.ImmutableArray +Microsoft.CodeAnalysis.Operations.IMultiVariableDeclarationOperation.Initializer.get -> Microsoft.CodeAnalysis.Operations.IVariableInitializerOperation Microsoft.CodeAnalysis.Operations.INameOfOperation Microsoft.CodeAnalysis.Operations.INameOfOperation.Argument.get -> Microsoft.CodeAnalysis.IOperation Microsoft.CodeAnalysis.Operations.IObjectCreationOperation @@ -424,6 +425,7 @@ Microsoft.CodeAnalysis.Operations.ISimpleAssignmentOperation Microsoft.CodeAnalysis.Operations.ISingleValueCaseClauseOperation Microsoft.CodeAnalysis.Operations.ISingleValueCaseClauseOperation.Value.get -> Microsoft.CodeAnalysis.IOperation Microsoft.CodeAnalysis.Operations.ISingleVariableDeclarationOperation +Microsoft.CodeAnalysis.Operations.ISingleVariableDeclarationOperation.Initializer.get -> Microsoft.CodeAnalysis.Operations.IVariableInitializerOperation Microsoft.CodeAnalysis.Operations.ISingleVariableDeclarationOperation.Symbol.get -> Microsoft.CodeAnalysis.ILocalSymbol Microsoft.CodeAnalysis.Operations.ISizeOfOperation Microsoft.CodeAnalysis.Operations.ISizeOfOperation.TypeOperand.get -> Microsoft.CodeAnalysis.ITypeSymbol @@ -460,9 +462,7 @@ Microsoft.CodeAnalysis.Operations.IUsingOperation Microsoft.CodeAnalysis.Operations.IUsingOperation.Body.get -> Microsoft.CodeAnalysis.IOperation Microsoft.CodeAnalysis.Operations.IUsingOperation.Resources.get -> Microsoft.CodeAnalysis.IOperation Microsoft.CodeAnalysis.Operations.IVariableDeclarationGroupOperation -Microsoft.CodeAnalysis.Operations.IVariableDeclarationGroupOperation.Declarations.get -> System.Collections.Immutable.ImmutableArray -Microsoft.CodeAnalysis.Operations.IVariableDeclarationOperation -Microsoft.CodeAnalysis.Operations.IVariableDeclarationOperation.Initializer.get -> Microsoft.CodeAnalysis.Operations.IVariableInitializerOperation +Microsoft.CodeAnalysis.Operations.IVariableDeclarationGroupOperation.Declarations.get -> System.Collections.Immutable.ImmutableArray Microsoft.CodeAnalysis.Operations.IVariableInitializerOperation Microsoft.CodeAnalysis.Operations.IWhileLoopOperation Microsoft.CodeAnalysis.Operations.IWhileLoopOperation.Condition.get -> Microsoft.CodeAnalysis.IOperation @@ -516,8 +516,9 @@ static Microsoft.CodeAnalysis.Operations.OperationExtensions.GetArgumentName(thi static Microsoft.CodeAnalysis.Operations.OperationExtensions.GetArgumentRefKind(this Microsoft.CodeAnalysis.Operations.IDynamicIndexerAccessOperation dynamicExpression, int index) -> Microsoft.CodeAnalysis.RefKind? static Microsoft.CodeAnalysis.Operations.OperationExtensions.GetArgumentRefKind(this Microsoft.CodeAnalysis.Operations.IDynamicInvocationOperation dynamicExpression, int index) -> Microsoft.CodeAnalysis.RefKind? static Microsoft.CodeAnalysis.Operations.OperationExtensions.GetArgumentRefKind(this Microsoft.CodeAnalysis.Operations.IDynamicObjectCreationOperation dynamicExpression, int index) -> Microsoft.CodeAnalysis.RefKind? -static Microsoft.CodeAnalysis.Operations.OperationExtensions.GetDeclaredVariables(this Microsoft.CodeAnalysis.Operations.IVariableDeclarationGroupOperation declarationStatement) -> System.Collections.Immutable.ImmutableArray -static Microsoft.CodeAnalysis.Operations.OperationExtensions.GetDeclaredVariables(this Microsoft.CodeAnalysis.Operations.IVariableDeclarationOperation declaration) -> System.Collections.Immutable.ImmutableArray +static Microsoft.CodeAnalysis.Operations.OperationExtensions.GetDeclaredVariables(this Microsoft.CodeAnalysis.Operations.IMultiVariableDeclarationOperation declaration) -> System.Collections.Immutable.ImmutableArray +static Microsoft.CodeAnalysis.Operations.OperationExtensions.GetDeclaredVariables(this Microsoft.CodeAnalysis.Operations.IVariableDeclarationGroupOperation declarationGroup) -> System.Collections.Immutable.ImmutableArray +static Microsoft.CodeAnalysis.Operations.OperationExtensions.GetVariableInitializer(this Microsoft.CodeAnalysis.Operations.ISingleVariableDeclarationOperation declarationOperation) -> Microsoft.CodeAnalysis.Operations.IVariableInitializerOperation virtual Microsoft.CodeAnalysis.Diagnostics.AnalysisContext.RegisterOperationAction(System.Action action, System.Collections.Immutable.ImmutableArray operationKinds) -> void virtual Microsoft.CodeAnalysis.Diagnostics.AnalysisContext.RegisterOperationBlockAction(System.Action action) -> void virtual Microsoft.CodeAnalysis.Diagnostics.AnalysisContext.RegisterOperationBlockStartAction(System.Action action) -> void diff --git a/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory.vb b/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory.vb index b80bcea1e29..ce50c0e9ea5 100644 --- a/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory.vb +++ b/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory.vb @@ -1251,8 +1251,8 @@ Namespace Microsoft.CodeAnalysis.Operations End Function Private Function CreateBoundDimStatementOperation(boundDimStatement As BoundDimStatement) As IVariableDeclarationGroupOperation - Dim declarations As Lazy(Of ImmutableArray(Of IVariableDeclarationOperation)) = - New Lazy(Of ImmutableArray(Of IVariableDeclarationOperation))(Function() GetVariableDeclarationStatementVariables(boundDimStatement.LocalDeclarations)) + Dim declarations As Lazy(Of ImmutableArray(Of IMultiVariableDeclarationOperation)) = + New Lazy(Of ImmutableArray(Of IMultiVariableDeclarationOperation))(Function() GetVariableDeclarationStatementVariables(boundDimStatement.LocalDeclarations)) Dim syntax As SyntaxNode = boundDimStatement.Syntax Dim type As ITypeSymbol = Nothing Dim constantValue As [Optional](Of Object) = New [Optional](Of Object)() diff --git a/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory_Methods.vb b/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory_Methods.vb index 78722690715..ef90ce2e733 100644 --- a/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory_Methods.vb +++ b/src/Compilers/VisualBasic/Portable/Operations/VisualBasicOperationFactory_Methods.vb @@ -241,7 +241,7 @@ Namespace Microsoft.CodeAnalysis.Operations Return Nothing End Function - Private Function GetVariableDeclarationStatementVariables(declarations As ImmutableArray(Of BoundLocalDeclarationBase)) As ImmutableArray(Of IVariableDeclarationOperation) + Private Function GetVariableDeclarationStatementVariables(declarations As ImmutableArray(Of BoundLocalDeclarationBase)) As ImmutableArray(Of IMultiVariableDeclarationOperation) ' Group the declarations by their VariableDeclaratorSyntaxes. The issue we're compensating for here is that the ' the declarations that are BoundLocalDeclaration nodes have a ModifiedIdentifierSyntax as their syntax nodes, ' not a VariableDeclaratorSyntax. We want to group BoundLocalDeclarations by their parent VariableDeclaratorSyntax @@ -262,7 +262,7 @@ Namespace Microsoft.CodeAnalysis.Operations End If End Function) - Dim builder = ArrayBuilder(Of IVariableDeclarationOperation).GetInstance() + Dim builder = ArrayBuilder(Of IMultiVariableDeclarationOperation).GetInstance() For Each declarationGroup In groupedDeclarations Dim first = declarationGroup.First() Dim singleDeclarations As ImmutableArray(Of ISingleVariableDeclarationOperation) = Nothing diff --git a/src/Test/Utilities/Portable/Diagnostics/CouldHaveMoreSpecificTypeAnalyzer.cs b/src/Test/Utilities/Portable/Diagnostics/CouldHaveMoreSpecificTypeAnalyzer.cs index 1859a8478eb..c4d06037483 100644 --- a/src/Test/Utilities/Portable/Diagnostics/CouldHaveMoreSpecificTypeAnalyzer.cs +++ b/src/Test/Utilities/Portable/Diagnostics/CouldHaveMoreSpecificTypeAnalyzer.cs @@ -96,9 +96,16 @@ public sealed override void Initialize(AnalysisContext context) (operationContext) => { IVariableInitializerOperation initializer = (IVariableInitializerOperation)operationContext.Operation; - if (initializer.Parent is IVariableDeclarationOperation variableDeclaration) + // If the parent is a single variable declaration, just process that one variable. If it's a multi variable + // declaration, process all variables being assigned + if (initializer.Parent is ISingleVariableDeclarationOperation singleVariableDeclaration) { - foreach (ILocalSymbol local in variableDeclaration.GetDeclaredVariables()) + ILocalSymbol local = singleVariableDeclaration.Symbol; + AssignTo(local, local.Type, localsSourceTypes, initializer.Value); + } + else if (initializer.Parent is IMultiVariableDeclarationOperation multiVariableDeclaration) + { + foreach (ILocalSymbol local in multiVariableDeclaration.GetDeclaredVariables()) { AssignTo(local, local.Type, localsSourceTypes, initializer.Value); } diff --git a/src/Test/Utilities/Portable/Diagnostics/LocalCouldBeConstAnalyzer.cs b/src/Test/Utilities/Portable/Diagnostics/LocalCouldBeConstAnalyzer.cs index 0ab4c9ec8bd..d4a6b468153 100644 --- a/src/Test/Utilities/Portable/Diagnostics/LocalCouldBeConstAnalyzer.cs +++ b/src/Test/Utilities/Portable/Diagnostics/LocalCouldBeConstAnalyzer.cs @@ -76,19 +76,18 @@ public sealed override void Initialize(AnalysisContext context) (operationContext) => { IVariableDeclarationGroupOperation declaration = (IVariableDeclarationGroupOperation)operationContext.Operation; - foreach (IVariableDeclarationOperation variable in declaration.Declarations) + foreach (ISingleVariableDeclarationOperation variable in declaration.Declarations.SelectMany(decl => decl.Declarations)) { - foreach (ILocalSymbol local in variable.GetDeclaredVariables()) + ILocalSymbol local = variable.Symbol; + if (!local.IsConst && !assignedToLocals.Contains(local)) { - if (!local.IsConst && !assignedToLocals.Contains(local)) + var localType = local.Type; + if ((!localType.IsReferenceType || localType.SpecialType == SpecialType.System_String) && localType.SpecialType != SpecialType.None) { - var localType = local.Type; - if ((!localType.IsReferenceType || localType.SpecialType == SpecialType.System_String) && localType.SpecialType != SpecialType.None) + IVariableInitializerOperation initializer = variable.GetVariableInitializer(); + if (initializer != null && initializer.Value.ConstantValue.HasValue) { - if (variable.Initializer != null && variable.Initializer.Value.ConstantValue.HasValue) - { - mightBecomeConstLocals.Add(local); - } + mightBecomeConstLocals.Add(local); } } } diff --git a/src/Test/Utilities/Portable/Diagnostics/OperationTestAnalyzer.cs b/src/Test/Utilities/Portable/Diagnostics/OperationTestAnalyzer.cs index 0680d09207b..c7b2217ff1d 100644 --- a/src/Test/Utilities/Portable/Diagnostics/OperationTestAnalyzer.cs +++ b/src/Test/Utilities/Portable/Diagnostics/OperationTestAnalyzer.cs @@ -856,14 +856,12 @@ public sealed override void Initialize(AnalysisContext context) Report(operationContext, declarationStatement.Syntax, TooManyLocalVarDeclarationsDescriptor); } - foreach (var decl in declarationStatement.Declarations) + foreach (var decl in declarationStatement.Declarations.SelectMany(multiDecl => multiDecl.Declarations)) { - if (decl.Initializer != null && !decl.Initializer.HasErrors(operationContext.Compilation, operationContext.CancellationToken)) + var initializer = decl.GetVariableInitializer(); + if (initializer != null && !initializer.HasErrors(operationContext.Compilation, operationContext.CancellationToken)) { - foreach (var symbol in decl.GetDeclaredVariables()) - { - Report(operationContext, symbol.DeclaringSyntaxReferences.Single().GetSyntax(), LocalVarInitializedDeclarationDescriptor); - } + Report(operationContext, decl.Symbol.DeclaringSyntaxReferences.Single().GetSyntax(), LocalVarInitializedDeclarationDescriptor); } } }, @@ -1542,7 +1540,7 @@ public sealed override void Initialize(AnalysisContext context) (operationContext) => { IUnaryOperation unary = (IUnaryOperation)operationContext.Operation; - if (unary.OperatorKind == UnaryOperatorKind.Minus && unary.OperatorMethod != null && unary.OperatorMethod.Name.Contains("UnaryNegation")) + if (unary.OperatorKind == UnaryOperatorKind.Minus && unary.OperatorMethod != null && unary.OperatorMethod.Name.Contains("UnaryNegation")) { operationContext.ReportDiagnostic(Diagnostic.Create(OperatorMinusMethodDescriptor, unary.Syntax.GetLocation())); } -- GitLab