提交 cbdf2f21 编写于 作者: H Heejae Chang

updated bunch of csharp tests

上级 f1ba17fe
...@@ -138,4 +138,21 @@ internal partial class BoundPropertyGroup ...@@ -138,4 +138,21 @@ internal partial class BoundPropertyGroup
{ {
protected override ImmutableArray<BoundNode> Children => ImmutableArray.Create<BoundNode>(this.ReceiverOpt); protected override ImmutableArray<BoundNode> Children => ImmutableArray.Create<BoundNode>(this.ReceiverOpt);
} }
internal partial class BoundSequence
{
protected override ImmutableArray<BoundNode> Children => StaticCast<BoundNode>.From(this.SideEffects.Add(this.Value));
}
internal partial class BoundStatementList
{
protected override ImmutableArray<BoundNode> Children
{
get
{
System.Diagnostics.Debug.Assert(this.Kind == BoundKind.StatementList || this.Kind == BoundKind.Scope);
return StaticCast<BoundNode>.From(this.Statements);
}
}
}
} }
...@@ -961,7 +961,7 @@ public override SyntaxTree SyntaxTree ...@@ -961,7 +961,7 @@ public override SyntaxTree SyntaxTree
internal override IOperation GetOperationWorker(CSharpSyntaxNode node, GetOperationOptions options, CancellationToken cancellationToken) internal override IOperation GetOperationWorker(CSharpSyntaxNode node, GetOperationOptions options, CancellationToken cancellationToken)
{ {
var bindingRoot = GetBindingRootOrFieldInitializer(node); var bindingRoot = GetBindingRootOrInitializer(node);
var statementOrRootOperation = GetStatementOrRootOperation(bindingRoot, options, cancellationToken); var statementOrRootOperation = GetStatementOrRootOperation(bindingRoot, options, cancellationToken);
if (statementOrRootOperation == null) if (statementOrRootOperation == null)
...@@ -973,18 +973,44 @@ internal override IOperation GetOperationWorker(CSharpSyntaxNode node, GetOperat ...@@ -973,18 +973,44 @@ internal override IOperation GetOperationWorker(CSharpSyntaxNode node, GetOperat
return statementOrRootOperation.DescendantsAndSelf().FirstOrDefault(o => !o.IsImplicit && o.Syntax == node); return statementOrRootOperation.DescendantsAndSelf().FirstOrDefault(o => !o.IsImplicit && o.Syntax == node);
} }
private CSharpSyntaxNode GetBindingRootOrFieldInitializer(CSharpSyntaxNode node) private CSharpSyntaxNode GetBindingRootOrInitializer(CSharpSyntaxNode node)
{ {
var bindingRoot = GetBindingRoot(node); var bindingRoot = GetBindingRoot(node);
// if binding root is parameter, make it equal value
var parameter = bindingRoot as ParameterSyntax;
if (parameter != null && parameter.Default?.FullSpan.Contains(node.Span) == true)
{
// we need to do this since node map doesn't contain bound node for parameter
bindingRoot = parameter.Default;
}
// if binding root is field variable declarator, make it initializer // if binding root is field variable declarator, make it initializer
var variableDeclarator = bindingRoot as VariableDeclaratorSyntax; var variableDeclarator = bindingRoot as VariableDeclaratorSyntax;
if (variableDeclarator != null && if (variableDeclarator != null && variableDeclarator.Initializer?.FullSpan.Contains(node.Span) == true)
variableDeclarator.Parent?.Parent.IsKind(SyntaxKind.FieldDeclaration) == true && {
variableDeclarator.Initializer?.FullSpan.Contains(node.Span) == true) if (variableDeclarator.Parent?.Parent.IsKind(SyntaxKind.FieldDeclaration) == true ||
variableDeclarator.Parent?.Parent.IsKind(SyntaxKind.EventFieldDeclaration) == true)
{
// we need to do this since node map doesn't contain bound node for field variable declarator
bindingRoot = variableDeclarator.Initializer;
}
}
// if binding root is enum member decleration, make it equal value
var enumMember = bindingRoot as EnumMemberDeclarationSyntax;
if (enumMember != null && enumMember.EqualsValue?.FullSpan.Contains(node.Span) == true)
{
// we need to do this since node map doesn't contain bound node for enum member decl
bindingRoot = enumMember.EqualsValue;
}
// if binding root is property member decleration, make it equal value
var propertyMember = bindingRoot as PropertyDeclarationSyntax;
if (propertyMember != null && propertyMember.Initializer?.FullSpan.Contains(node.Span) == true)
{ {
// we need to do this since node map doesn't contain bound node for field variable declarator // we need to do this since node map doesn't contain bound node for property initializer
bindingRoot = variableDeclarator.Initializer; bindingRoot = propertyMember.Initializer;
} }
return bindingRoot; return bindingRoot;
...@@ -992,7 +1018,7 @@ private CSharpSyntaxNode GetBindingRootOrFieldInitializer(CSharpSyntaxNode node) ...@@ -992,7 +1018,7 @@ private CSharpSyntaxNode GetBindingRootOrFieldInitializer(CSharpSyntaxNode node)
private IOperation GetStatementOrRootOperation(CSharpSyntaxNode node, GetOperationOptions options, CancellationToken cancellationToken) private IOperation GetStatementOrRootOperation(CSharpSyntaxNode node, GetOperationOptions options, CancellationToken cancellationToken)
{ {
Debug.Assert(node == GetBindingRootOrFieldInitializer(node)); Debug.Assert(node == GetBindingRootOrInitializer(node));
CSharpSyntaxNode bindableNode; CSharpSyntaxNode bindableNode;
...@@ -1591,7 +1617,7 @@ private static Binder GetQueryEnclosingBinder(int position, CSharpSyntaxNode sta ...@@ -1591,7 +1617,7 @@ private static Binder GetQueryEnclosingBinder(int position, CSharpSyntaxNode sta
} }
while (node != null); while (node != null);
done: done:
return GetEnclosingBinderInternalWithinRoot(AdjustStartingNodeAccordingToNewRoot(startingNode, queryClause.Syntax), return GetEnclosingBinderInternalWithinRoot(AdjustStartingNodeAccordingToNewRoot(startingNode, queryClause.Syntax),
position, queryClause.Binder, queryClause.Syntax); position, queryClause.Binder, queryClause.Syntax);
} }
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
using System.Linq; using System.Linq;
using Microsoft.CodeAnalysis.CSharp; using Microsoft.CodeAnalysis.CSharp;
using Microsoft.CodeAnalysis.CSharp.Symbols; using Microsoft.CodeAnalysis.CSharp.Symbols;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.PooledObjects; using Microsoft.CodeAnalysis.PooledObjects;
using Roslyn.Utilities; using Roslyn.Utilities;
...@@ -666,7 +667,7 @@ private IOperation CreateBoundConversionOperation(BoundConversion boundConversio ...@@ -666,7 +667,7 @@ private IOperation CreateBoundConversionOperation(BoundConversion boundConversio
bool isChecked = conversion.IsNumeric && boundConversion.Checked; bool isChecked = conversion.IsNumeric && boundConversion.Checked;
ITypeSymbol type = boundConversion.Type; ITypeSymbol type = boundConversion.Type;
Optional<object> constantValue = ConvertToOptional(boundConversion.ConstantValue); Optional<object> constantValue = ConvertToOptional(boundConversion.ConstantValue);
return new LazyCSharpConversionExpression(operand, conversion, isExplicit, isTryCast, isChecked, _semanticModel, syntax, type, constantValue, isImplicit); return new LazyCSharpConversionExpression(operand, conversion, isExplicit, isTryCast, isChecked, _semanticModel, syntax, type, constantValue, isImplicit || !isExplicit);
} }
} }
...@@ -1311,18 +1312,21 @@ private IOperation CreateBoundLocalDeclarationOperation(BoundLocalDeclaration bo ...@@ -1311,18 +1312,21 @@ private IOperation CreateBoundLocalDeclarationOperation(BoundLocalDeclaration bo
{ {
if (boundLocalDeclaration.Syntax.Kind() == SyntaxKind.LocalDeclarationStatement) if (boundLocalDeclaration.Syntax.Kind() == SyntaxKind.LocalDeclarationStatement)
{ {
Lazy<ImmutableArray<IVariableDeclaration>> declarations = new Lazy<ImmutableArray<IVariableDeclaration>>(() => ImmutableArray.Create(CreateVariableDeclaration(boundLocalDeclaration))); var statement = (LocalDeclarationStatementSyntax)boundLocalDeclaration.Syntax;
SyntaxNode syntax = boundLocalDeclaration.Syntax; var variableDeclarator = statement.Declaration.Variables.First();
Lazy<ImmutableArray<IVariableDeclaration>> declarations = new Lazy<ImmutableArray<IVariableDeclaration>>(() => ImmutableArray.Create(CreateVariableDeclaration(boundLocalDeclaration, variableDeclarator)));
ITypeSymbol type = null; ITypeSymbol type = null;
Optional<object> constantValue = default(Optional<object>); Optional<object> constantValue = default(Optional<object>);
bool isImplicit = boundLocalDeclaration.WasCompilerGenerated; bool isImplicit = boundLocalDeclaration.WasCompilerGenerated;
return new LazyVariableDeclarationStatement(declarations, _semanticModel, syntax, type, constantValue, isImplicit); return new LazyVariableDeclarationStatement(declarations, _semanticModel, statement, type, constantValue, isImplicit);
} }
else else
{ {
// we can get here if someone asked about 1 variable declarator on multi local declaration // we can get here if someone asked about 1 variable declarator on multi local declaration
Debug.Assert(boundLocalDeclaration.Syntax.Kind() == SyntaxKind.VariableDeclarator); Debug.Assert(boundLocalDeclaration.Syntax.Kind() == SyntaxKind.VariableDeclarator);
return CreateVariableDeclaration(boundLocalDeclaration); return CreateVariableDeclaration(boundLocalDeclaration, boundLocalDeclaration.Syntax);
} }
} }
......
...@@ -49,9 +49,9 @@ internal IArgument CreateArgumentOperation(ArgumentKind kind, IParameterSymbol p ...@@ -49,9 +49,9 @@ internal IArgument CreateArgumentOperation(ArgumentKind kind, IParameterSymbol p
isImplicit: expression.WasCompilerGenerated); isImplicit: expression.WasCompilerGenerated);
} }
private IVariableDeclaration CreateVariableDeclaration(BoundLocalDeclaration boundLocalDeclaration) private IVariableDeclaration CreateVariableDeclaration(BoundLocalDeclaration boundLocalDeclaration, SyntaxNode syntax)
{ {
return OperationFactory.CreateVariableDeclaration(boundLocalDeclaration.LocalSymbol, Create(boundLocalDeclaration.InitializerOpt), _semanticModel, boundLocalDeclaration.Syntax); return OperationFactory.CreateVariableDeclaration(boundLocalDeclaration.LocalSymbol, Create(boundLocalDeclaration.InitializerOpt), _semanticModel, syntax);
} }
private IOperation CreateBoundCallInstanceOperation(BoundCall boundCall) private IOperation CreateBoundCallInstanceOperation(BoundCall boundCall)
......
...@@ -2001,28 +2001,28 @@ void MixMethod() ...@@ -2001,28 +2001,28 @@ void MixMethod()
compilation.VerifyAnalyzerDiagnostics(analyzers, null, null, true, compilation.VerifyAnalyzerDiagnostics(analyzers, null, null, true,
Diagnostic("GeneratedCodeAnalyzerWarning", "var userVar = 0").WithArguments("Node: var userVar = 0").WithLocation(17, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "var userVar = 0").WithArguments("Node: var userVar = 0").WithLocation(17, 9),
Diagnostic("GeneratedCodeAnalyzerWarning", "var mixMethodUserVar = 0").WithArguments("Node: var mixMethodUserVar = 0").WithLocation(26, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "var mixMethodUserVar = 0").WithArguments("Node: var mixMethodUserVar = 0").WithLocation(26, 9),
Diagnostic("GeneratedCodeAnalyzerWarning", "var userVar = 0;").WithArguments("Operation: NonHiddenMethod").WithLocation(17, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "userVar = 0").WithArguments("Operation: NonHiddenMethod").WithLocation(17, 13),
Diagnostic("GeneratedCodeAnalyzerWarning", "var mixMethodUserVar = 0;").WithArguments("Operation: MixMethod").WithLocation(26, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "mixMethodUserVar = 0").WithArguments("Operation: MixMethod").WithLocation(26, 13),
Diagnostic("GeneratedCodeAnalyzerSummary").WithArguments("Node: var mixMethodUserVar = 0,Node: var userVar = 0,Operation: MixMethod,Operation: NonHiddenMethod").WithLocation(1, 1)); Diagnostic("GeneratedCodeAnalyzerSummary").WithArguments("Node: var mixMethodUserVar = 0,Node: var userVar = 0,Operation: MixMethod,Operation: NonHiddenMethod").WithLocation(1, 1));
analyzers = new DiagnosticAnalyzer[] { new GeneratedCodeSyntaxAndOperationAnalyzer(GeneratedCodeAnalysisFlags.Analyze, syntaxKinds, operationKinds) }; analyzers = new DiagnosticAnalyzer[] { new GeneratedCodeSyntaxAndOperationAnalyzer(GeneratedCodeAnalysisFlags.Analyze, syntaxKinds, operationKinds) };
compilation.VerifyAnalyzerDiagnostics(analyzers, null, null, true, compilation.VerifyAnalyzerDiagnostics(analyzers, null, null, true,
Diagnostic("GeneratedCodeAnalyzerWarning", "var userVar = 0").WithArguments("Node: var userVar = 0").WithLocation(17, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "var userVar = 0").WithArguments("Node: var userVar = 0").WithLocation(17, 9),
Diagnostic("GeneratedCodeAnalyzerWarning", "var userVar = 0;").WithArguments("Operation: NonHiddenMethod").WithLocation(17, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "userVar = 0").WithArguments("Operation: NonHiddenMethod").WithLocation(17, 13),
Diagnostic("GeneratedCodeAnalyzerWarning", "var mixMethodUserVar = 0").WithArguments("Node: var mixMethodUserVar = 0").WithLocation(26, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "var mixMethodUserVar = 0").WithArguments("Node: var mixMethodUserVar = 0").WithLocation(26, 9),
Diagnostic("GeneratedCodeAnalyzerWarning", "var mixMethodUserVar = 0;").WithArguments("Operation: MixMethod").WithLocation(26, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "mixMethodUserVar = 0").WithArguments("Operation: MixMethod").WithLocation(26, 13),
Diagnostic("GeneratedCodeAnalyzerSummary").WithArguments("Node: var hiddenVar = 0,Node: var mixMethodHiddenVar = 0,Node: var mixMethodUserVar = 0,Node: var userVar = 0,Operation: HiddenMethod,Operation: MixMethod,Operation: NonHiddenMethod").WithLocation(1, 1)); Diagnostic("GeneratedCodeAnalyzerSummary").WithArguments("Node: var hiddenVar = 0,Node: var mixMethodHiddenVar = 0,Node: var mixMethodUserVar = 0,Node: var userVar = 0,Operation: HiddenMethod,Operation: MixMethod,Operation: NonHiddenMethod").WithLocation(1, 1));
analyzers = new DiagnosticAnalyzer[] { new GeneratedCodeSyntaxAndOperationAnalyzer(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics, syntaxKinds, operationKinds) }; analyzers = new DiagnosticAnalyzer[] { new GeneratedCodeSyntaxAndOperationAnalyzer(GeneratedCodeAnalysisFlags.Analyze | GeneratedCodeAnalysisFlags.ReportDiagnostics, syntaxKinds, operationKinds) };
compilation.VerifyAnalyzerDiagnostics(analyzers, null, null, true, compilation.VerifyAnalyzerDiagnostics(analyzers, null, null, true,
Diagnostic("GeneratedCodeAnalyzerWarning", "var hiddenVar = 0").WithArguments("Node: var hiddenVar = 0").WithLocation(10, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "var hiddenVar = 0").WithArguments("Node: var hiddenVar = 0").WithLocation(10, 9),
Diagnostic("GeneratedCodeAnalyzerWarning", "var hiddenVar = 0;").WithArguments("Operation: HiddenMethod").WithLocation(10, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "hiddenVar = 0").WithArguments("Operation: HiddenMethod").WithLocation(10, 13),
Diagnostic("GeneratedCodeAnalyzerWarning", "var userVar = 0").WithArguments("Node: var userVar = 0").WithLocation(17, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "var userVar = 0").WithArguments("Node: var userVar = 0").WithLocation(17, 9),
Diagnostic("GeneratedCodeAnalyzerWarning", "var userVar = 0;").WithArguments("Operation: NonHiddenMethod").WithLocation(17, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "userVar = 0").WithArguments("Operation: NonHiddenMethod").WithLocation(17, 13),
Diagnostic("GeneratedCodeAnalyzerWarning", "var mixMethodHiddenVar = 0").WithArguments("Node: var mixMethodHiddenVar = 0").WithLocation(24, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "var mixMethodHiddenVar = 0").WithArguments("Node: var mixMethodHiddenVar = 0").WithLocation(24, 9),
Diagnostic("GeneratedCodeAnalyzerWarning", "var mixMethodUserVar = 0").WithArguments("Node: var mixMethodUserVar = 0").WithLocation(26, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "var mixMethodUserVar = 0").WithArguments("Node: var mixMethodUserVar = 0").WithLocation(26, 9),
Diagnostic("GeneratedCodeAnalyzerWarning", "var mixMethodHiddenVar = 0;").WithArguments("Operation: MixMethod").WithLocation(24, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "mixMethodHiddenVar = 0").WithArguments("Operation: MixMethod").WithLocation(24, 13),
Diagnostic("GeneratedCodeAnalyzerWarning", "var mixMethodUserVar = 0;").WithArguments("Operation: MixMethod").WithLocation(26, 9), Diagnostic("GeneratedCodeAnalyzerWarning", "mixMethodUserVar = 0").WithArguments("Operation: MixMethod").WithLocation(26, 13),
Diagnostic("GeneratedCodeAnalyzerSummary").WithArguments("Node: var hiddenVar = 0,Node: var mixMethodHiddenVar = 0,Node: var mixMethodUserVar = 0,Node: var userVar = 0,Operation: HiddenMethod,Operation: MixMethod,Operation: NonHiddenMethod").WithLocation(1, 1)); Diagnostic("GeneratedCodeAnalyzerSummary").WithArguments("Node: var hiddenVar = 0,Node: var mixMethodHiddenVar = 0,Node: var mixMethodUserVar = 0,Node: var userVar = 0,Operation: HiddenMethod,Operation: MixMethod,Operation: NonHiddenMethod").WithLocation(1, 1));
} }
......
...@@ -21,7 +21,7 @@ class Program ...@@ -21,7 +21,7 @@ class Program
{ {
static void Main(string[] args) static void Main(string[] args)
{ {
Action x /*<bind>*/= () => F()/*</bind>*/; /*<bind>*/Action x = () => F();/*</bind>*/
} }
static void F() static void F()
...@@ -30,8 +30,8 @@ static void F() ...@@ -30,8 +30,8 @@ static void F()
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'Action x /* ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'Action x = () => F();')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'Action x /* ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'x = () => F()')
Variables: Local_1: System.Action x Variables: Local_1: System.Action x
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Action) (Syntax: '() => F()') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Action) (Syntax: '() => F()')
Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
...@@ -46,7 +46,7 @@ static void F() ...@@ -46,7 +46,7 @@ static void F()
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
VerifyOperationTreeAndDiagnosticsForTest<EqualsValueClauseSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -60,7 +60,7 @@ class Program ...@@ -60,7 +60,7 @@ class Program
{ {
static void Main(string[] args) static void Main(string[] args)
{ {
var x /*<bind>*/= () => F()/*</bind>*/; /*<bind>*/var x = () => F();/*</bind>*/
} }
static void F() static void F()
...@@ -69,8 +69,8 @@ static void F() ...@@ -69,8 +69,8 @@ static void F()
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'var x /*<bi ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'var x = () => F();')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'var x /*<bi ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'x = () => F()')
Variables: Local_1: var x Variables: Local_1: var x
Initializer: IAnonymousFunctionExpression (Symbol: lambda expression) (OperationKind.AnonymousFunctionExpression, Type: null, IsInvalid) (Syntax: '() => F()') Initializer: IAnonymousFunctionExpression (Symbol: lambda expression) (OperationKind.AnonymousFunctionExpression, Type: null, IsInvalid) (Syntax: '() => F()')
IBlockStatement (1 statements) (OperationKind.BlockStatement, IsInvalid) (Syntax: 'F()') IBlockStatement (1 statements) (OperationKind.BlockStatement, IsInvalid) (Syntax: 'F()')
...@@ -81,11 +81,11 @@ static void F() ...@@ -81,11 +81,11 @@ static void F()
"; ";
var expectedDiagnostics = new DiagnosticDescription[] { var expectedDiagnostics = new DiagnosticDescription[] {
// CS0815: Cannot assign lambda expression to an implicitly-typed variable // CS0815: Cannot assign lambda expression to an implicitly-typed variable
// var x /*<bind>*/= () => F()/*</bind>*/; // /*<bind>*/var x = () => F();/*</bind>*/
Diagnostic(ErrorCode.ERR_ImplicitlyTypedVariableAssignedBadValue, "x /*<bind>*/= () => F()").WithArguments("lambda expression").WithLocation(8, 13), Diagnostic(ErrorCode.ERR_ImplicitlyTypedVariableAssignedBadValue, "x = () => F()").WithArguments("lambda expression").WithLocation(8, 23),
}; };
VerifyOperationTreeAndDiagnosticsForTest<EqualsValueClauseSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -99,7 +99,7 @@ class Program ...@@ -99,7 +99,7 @@ class Program
{ {
static void Main(string[] args) static void Main(string[] args)
{ {
Action<int> x /*<bind>*/= () => F()/*</bind>*/; /*<bind>*/Action<int> x = () => F();/*</bind>*/
} }
static void F() static void F()
...@@ -108,8 +108,8 @@ static void F() ...@@ -108,8 +108,8 @@ static void F()
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'Action<int> ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'Action<int> ... () => F();')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'Action<int> ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'x = () => F()')
Variables: Local_1: System.Action<System.Int32> x Variables: Local_1: System.Action<System.Int32> x
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Action<System.Int32>, IsInvalid) (Syntax: '() => F()') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Action<System.Int32>, IsInvalid) (Syntax: '() => F()')
Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
...@@ -126,7 +126,7 @@ static void F() ...@@ -126,7 +126,7 @@ static void F()
Diagnostic(ErrorCode.ERR_BadDelArgCount, "() => F()").WithArguments("System.Action<int>", "0").WithLocation(8, 35) Diagnostic(ErrorCode.ERR_BadDelArgCount, "() => F()").WithArguments("System.Action<int>", "0").WithLocation(8, 35)
}; };
VerifyOperationTreeAndDiagnosticsForTest<EqualsValueClauseSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -140,7 +140,7 @@ class Program ...@@ -140,7 +140,7 @@ class Program
{ {
static void Main(string[] args) static void Main(string[] args)
{ {
var x /*<bind>*/= () => F()/*</bind>*/; /*<bind>*/var x = () => F();/*</bind>*/
} }
static void F() static void F()
...@@ -153,8 +153,8 @@ static void F() ...@@ -153,8 +153,8 @@ static void F()
var syntaxTree = compilation.SyntaxTrees[0]; var syntaxTree = compilation.SyntaxTrees[0];
var semanticModel = compilation.GetSemanticModel(syntaxTree); var semanticModel = compilation.GetSemanticModel(syntaxTree);
var variableDeclaration = syntaxTree.GetRoot().DescendantNodes().OfType<VariableDeclarationSyntax>().Single(); var variableDeclaration = syntaxTree.GetRoot().DescendantNodes().OfType<LocalDeclarationStatementSyntax>().Single();
var lambdaSyntax = (LambdaExpressionSyntax)variableDeclaration.Variables.Single().Initializer.Value; var lambdaSyntax = (LambdaExpressionSyntax)variableDeclaration.Declaration.Variables.Single().Initializer.Value;
var variableDeclarationOperation = (IVariableDeclarationStatement)semanticModel.GetOperationInternal(variableDeclaration); var variableDeclarationOperation = (IVariableDeclarationStatement)semanticModel.GetOperationInternal(variableDeclaration);
var variableTreeLambdaOperation = (IAnonymousFunctionExpression)variableDeclarationOperation.Declarations.Single().Initializer; var variableTreeLambdaOperation = (IAnonymousFunctionExpression)variableDeclarationOperation.Declarations.Single().Initializer;
......
...@@ -1444,13 +1444,15 @@ void M1() ...@@ -1444,13 +1444,15 @@ void M1()
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IPropertyReferenceExpression: System.Int32 P.this[System.Int32 index] { set; } (OperationKind.PropertyReferenceExpression, Type: System.Int32, IsInvalid) (Syntax: 'this[10]') IInvalidExpression (OperationKind.InvalidExpression, Type: System.Int32, IsInvalid) (Syntax: 'this[10]')
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: P, IsInvalid) (Syntax: 'this') Children(1):
Arguments(1): IPropertyReferenceExpression: System.Int32 P.this[System.Int32 index] { set; } (OperationKind.PropertyReferenceExpression, Type: System.Int32, IsInvalid) (Syntax: 'this[10]')
IArgument (ArgumentKind.Explicit, Matching Parameter: null) (OperationKind.Argument, IsInvalid) (Syntax: '10') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: P, IsInvalid) (Syntax: 'this')
ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 10, IsInvalid) (Syntax: '10') Arguments(1):
InConversion: null IArgument (ArgumentKind.Explicit, Matching Parameter: null) (OperationKind.Argument, IsInvalid) (Syntax: '10')
OutConversion: null ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 10, IsInvalid) (Syntax: '10')
InConversion: null
OutConversion: null
"; ";
var expectedDiagnostics = new DiagnosticDescription[] { var expectedDiagnostics = new DiagnosticDescription[] {
// file.cs(12,27): error CS0154: The property or indexer 'P.this[int]' cannot be used in this context because it lacks the get accessor // file.cs(12,27): error CS0154: The property or indexer 'P.this[int]' cannot be used in this context because it lacks the get accessor
...@@ -1481,13 +1483,15 @@ void M1() ...@@ -1481,13 +1483,15 @@ void M1()
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IPropertyReferenceExpression: System.Int32 P.this[System.Int32 index] { get; } (OperationKind.PropertyReferenceExpression, Type: System.Int32, IsInvalid) (Syntax: 'this[10]') IInvalidExpression (OperationKind.InvalidExpression, Type: System.Int32, IsInvalid) (Syntax: 'this[10]')
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: P, IsInvalid) (Syntax: 'this') Children(1):
Arguments(1): IPropertyReferenceExpression: System.Int32 P.this[System.Int32 index] { get; } (OperationKind.PropertyReferenceExpression, Type: System.Int32, IsInvalid) (Syntax: 'this[10]')
IArgument (ArgumentKind.Explicit, Matching Parameter: null) (OperationKind.Argument, IsInvalid) (Syntax: '10') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: P, IsInvalid) (Syntax: 'this')
ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 10, IsInvalid) (Syntax: '10') Arguments(1):
InConversion: null IArgument (ArgumentKind.Explicit, Matching Parameter: null) (OperationKind.Argument, IsInvalid) (Syntax: '10')
OutConversion: null ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 10, IsInvalid) (Syntax: '10')
InConversion: null
OutConversion: null
"; ";
var expectedDiagnostics = new DiagnosticDescription[] { var expectedDiagnostics = new DiagnosticDescription[] {
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // 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 Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Test.Utilities; using Microsoft.CodeAnalysis.Test.Utilities;
......
...@@ -200,6 +200,8 @@ void M() ...@@ -200,6 +200,8 @@ void M()
Handler: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.EventHandler, IsInvalid) (Syntax: 'Handler') Handler: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.EventHandler, IsInvalid) (Syntax: 'Handler')
Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
Operand: IOperation: (OperationKind.None, IsInvalid) (Syntax: 'Handler') Operand: IOperation: (OperationKind.None, IsInvalid) (Syntax: 'Handler')
Children(1):
IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C, IsInvalid) (Syntax: 'Handler')
"; ";
var expectedDiagnostics = new[] { var expectedDiagnostics = new[] {
// file.cs(18,19): error CS0123: No overload for 'Handler' matches delegate 'EventHandler' // file.cs(18,19): error CS0123: No overload for 'Handler' matches delegate 'EventHandler'
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // 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 Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.CSharp.Test.Utilities; using Microsoft.CodeAnalysis.CSharp.Test.Utilities;
...@@ -51,8 +51,11 @@ public void M2(out int i ) ...@@ -51,8 +51,11 @@ public void M2(out int i )
M2(out /*<bind>*/int i/*</bind>*/); M2(out /*<bind>*/int i/*</bind>*/);
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IFieldReferenceExpression: System.Int32 Script.i (IsDeclaration: True) (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: 'int i') IArgument (ArgumentKind.Explicit, Matching Parameter: i) (OperationKind.Argument) (Syntax: 'int i')
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: Script) (Syntax: 'i') IFieldReferenceExpression: System.Int32 Script.i (IsDeclaration: True) (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: 'int i')
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: Script) (Syntax: 'i')
InConversion: null
OutConversion: null
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
...@@ -94,8 +97,11 @@ public void M2(out int i ) ...@@ -94,8 +97,11 @@ public void M2(out int i )
M2(out /*<bind>*/var i/*</bind>*/); M2(out /*<bind>*/var i/*</bind>*/);
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IFieldReferenceExpression: System.Int32 Script.i (IsDeclaration: True) (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: 'var i') IArgument (ArgumentKind.Explicit, Matching Parameter: i) (OperationKind.Argument) (Syntax: 'var i')
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: Script) (Syntax: 'i') IFieldReferenceExpression: System.Int32 Script.i (IsDeclaration: True) (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: 'var i')
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: Script) (Syntax: 'i')
InConversion: null
OutConversion: null
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
......
...@@ -470,13 +470,15 @@ static void Main() ...@@ -470,13 +470,15 @@ static void Main()
Body: IBlockStatement (1 statements, 1 locals) (OperationKind.BlockStatement) (Syntax: '{ ... }') Body: IBlockStatement (1 statements, 1 locals) (OperationKind.BlockStatement) (Syntax: '{ ... }')
Locals: Local_1: System.Boolean b Locals: Local_1: System.Boolean b
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'bool b = !x ... uals(null);') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'bool b = !x ... uals(null);')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'bool b = !x ... uals(null);') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'b = !x.Equals(null)')
Variables: Local_1: System.Boolean b Variables: Local_1: System.Boolean b
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Boolean) (Syntax: '!x.Equals(null)') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Boolean) (Syntax: '!x.Equals(null)')
Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
Operand: IUnaryOperatorExpression (UnaryOperatorKind.Not) (OperationKind.UnaryOperatorExpression, Type: System.Object) (Syntax: '!x.Equals(null)') Operand: IUnaryOperatorExpression (UnaryOperatorKind.Not) (OperationKind.UnaryOperatorExpression, Type: System.Object) (Syntax: '!x.Equals(null)')
Operand: IInvocationExpression ( ? C.()) (OperationKind.InvocationExpression, Type: ?) (Syntax: 'x.Equals(null)') Operand: IInvocationExpression ( ? C.()) (OperationKind.InvocationExpression, Type: ?) (Syntax: 'x.Equals(null)')
Instance Receiver: IOperation: (OperationKind.None) (Syntax: 'x.Equals') Instance Receiver: IOperation: (OperationKind.None) (Syntax: 'x.Equals')
Children(1):
ILocalReferenceExpression: x (OperationKind.LocalReferenceExpression, Type: MissingType) (Syntax: 'x')
Arguments(1): Arguments(1):
IArgument (ArgumentKind.Explicit, Matching Parameter: null) (OperationKind.Argument) (Syntax: 'null') IArgument (ArgumentKind.Explicit, Matching Parameter: null) (OperationKind.Argument) (Syntax: 'null')
ILiteralExpression (OperationKind.LiteralExpression, Type: null, Constant: null) (Syntax: 'null') ILiteralExpression (OperationKind.LiteralExpression, Type: null, Constant: null) (Syntax: 'null')
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // 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 Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.CSharp.Syntax;
...@@ -30,7 +30,10 @@ public void M2(out int i ) ...@@ -30,7 +30,10 @@ public void M2(out int i )
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
ILocalReferenceExpression: i (IsDeclaration: True) (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'var i') IArgument (ArgumentKind.Explicit, Matching Parameter: i) (OperationKind.Argument) (Syntax: 'var i')
ILocalReferenceExpression: i (IsDeclaration: True) (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'var i')
InConversion: null
OutConversion: null
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
......
...@@ -51,13 +51,13 @@ public void M1() ...@@ -51,13 +51,13 @@ public void M1()
Local_6: F e1 Local_6: F e1
Local_7: F e2 Local_7: F e2
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var x1 = new F();') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var x1 = new F();')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'var x1 = new F();') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'x1 = new F()')
Variables: Local_1: F x1 Variables: Local_1: F x1
Initializer: IObjectCreationExpression (Constructor: F..ctor()) (OperationKind.ObjectCreationExpression, Type: F) (Syntax: 'new F()') Initializer: IObjectCreationExpression (Constructor: F..ctor()) (OperationKind.ObjectCreationExpression, Type: F) (Syntax: 'new F()')
Arguments(0) Arguments(0)
Initializer: null Initializer: null
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var x2 = ne ... ield = 2 };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var x2 = ne ... ield = 2 };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'var x2 = ne ... ield = 2 };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'x2 = new F( ... Field = 2 }')
Variables: Local_1: F x2 Variables: Local_1: F x2
Initializer: IObjectCreationExpression (Constructor: F..ctor()) (OperationKind.ObjectCreationExpression, Type: F) (Syntax: 'new F() { Field = 2 }') Initializer: IObjectCreationExpression (Constructor: F..ctor()) (OperationKind.ObjectCreationExpression, Type: F) (Syntax: 'new F() { Field = 2 }')
Arguments(0) Arguments(0)
...@@ -68,7 +68,7 @@ public void M1() ...@@ -68,7 +68,7 @@ public void M1()
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: F) (Syntax: 'Field') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: F) (Syntax: 'Field')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 2) (Syntax: '2') Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 2) (Syntax: '2')
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var x3 = ne ... ty1 = """" };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var x3 = ne ... ty1 = """" };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'var x3 = ne ... ty1 = """" };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'x3 = new F( ... rty1 = """" }')
Variables: Local_1: F x3 Variables: Local_1: F x3
Initializer: IObjectCreationExpression (Constructor: F..ctor()) (OperationKind.ObjectCreationExpression, Type: F) (Syntax: 'new F() { P ... rty1 = """" }') Initializer: IObjectCreationExpression (Constructor: F..ctor()) (OperationKind.ObjectCreationExpression, Type: F) (Syntax: 'new F() { P ... rty1 = """" }')
Arguments(0) Arguments(0)
...@@ -79,7 +79,7 @@ public void M1() ...@@ -79,7 +79,7 @@ public void M1()
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: F) (Syntax: 'Property1') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: F) (Syntax: 'Property1')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.String, Constant: """") (Syntax: '""""') Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.String, Constant: """") (Syntax: '""""')
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var x4 = ne ... ield = 2 };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var x4 = ne ... ield = 2 };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'var x4 = ne ... ield = 2 };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'x4 = new F( ... Field = 2 }')
Variables: Local_1: F x4 Variables: Local_1: F x4
Initializer: IObjectCreationExpression (Constructor: F..ctor()) (OperationKind.ObjectCreationExpression, Type: F) (Syntax: 'new F() { P ... Field = 2 }') Initializer: IObjectCreationExpression (Constructor: F..ctor()) (OperationKind.ObjectCreationExpression, Type: F) (Syntax: 'new F() { P ... Field = 2 }')
Arguments(0) Arguments(0)
...@@ -94,7 +94,7 @@ public void M1() ...@@ -94,7 +94,7 @@ public void M1()
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: F) (Syntax: 'Field') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: F) (Syntax: 'Field')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 2) (Syntax: '2') Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 2) (Syntax: '2')
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var x5 = ne ... = true } };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var x5 = ne ... = true } };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'var x5 = ne ... = true } };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'x5 = new F( ... = true } }')
Variables: Local_1: F x5 Variables: Local_1: F x5
Initializer: IObjectCreationExpression (Constructor: F..ctor()) (OperationKind.ObjectCreationExpression, Type: F) (Syntax: 'new F() { P ... = true } }') Initializer: IObjectCreationExpression (Constructor: F..ctor()) (OperationKind.ObjectCreationExpression, Type: F) (Syntax: 'new F() { P ... = true } }')
Arguments(0) Arguments(0)
...@@ -112,7 +112,7 @@ public void M1() ...@@ -112,7 +112,7 @@ public void M1()
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: B) (Syntax: 'Field') Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: B) (Syntax: 'Field')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Boolean, Constant: True) (Syntax: 'true') Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Boolean, Constant: True) (Syntax: 'true')
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'var e1 = ne ... rty2 = 1 };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'var e1 = ne ... rty2 = 1 };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'var e1 = ne ... rty2 = 1 };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'e1 = new F( ... erty2 = 1 }')
Variables: Local_1: F e1 Variables: Local_1: F e1
Initializer: IObjectCreationExpression (Constructor: F..ctor()) (OperationKind.ObjectCreationExpression, Type: F, IsInvalid) (Syntax: 'new F() { P ... erty2 = 1 }') Initializer: IObjectCreationExpression (Constructor: F..ctor()) (OperationKind.ObjectCreationExpression, Type: F, IsInvalid) (Syntax: 'new F() { P ... erty2 = 1 }')
Arguments(0) Arguments(0)
...@@ -125,7 +125,7 @@ public void M1() ...@@ -125,7 +125,7 @@ public void M1()
Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
Operand: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') Operand: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1')
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'var e2 = new F() { """" };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'var e2 = new F() { """" };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'var e2 = new F() { """" };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'e2 = new F() { """" }')
Variables: Local_1: F e2 Variables: Local_1: F e2
Initializer: IObjectCreationExpression (Constructor: F..ctor()) (OperationKind.ObjectCreationExpression, Type: F, IsInvalid) (Syntax: 'new F() { """" }') Initializer: IObjectCreationExpression (Constructor: F..ctor()) (OperationKind.ObjectCreationExpression, Type: F, IsInvalid) (Syntax: 'new F() { """" }')
Arguments(0) Arguments(0)
......
...@@ -302,6 +302,8 @@ public void Method2(int x, int y) ...@@ -302,6 +302,8 @@ public void Method2(int x, int y)
IOperation: (OperationKind.None) (Syntax: 'new Delegate(Method2)') IOperation: (OperationKind.None) (Syntax: 'new Delegate(Method2)')
Children(1): Children(1):
IOperation: (OperationKind.None) (Syntax: 'Method2') IOperation: (OperationKind.None) (Syntax: 'Method2')
Children(1):
IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: Class) (Syntax: 'Method2')
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
...@@ -433,7 +435,7 @@ internal class Class ...@@ -433,7 +435,7 @@ internal class Class
{ {
public unsafe void M(int[] array) public unsafe void M(int[] array)
{ {
fixed (int* p /*<bind>*/= array/*</bind>*/) fixed (int* /*<bind>*/p = array/*</bind>*/)
{ {
*p = 1; *p = 1;
} }
...@@ -441,12 +443,11 @@ public unsafe void M(int[] array) ...@@ -441,12 +443,11 @@ public unsafe void M(int[] array)
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'p /*<bind>*/= array') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'p = array')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'p /*<bind>*/= array') Variables: Local_1: System.Int32* p
Variables: Local_1: System.Int32* p Initializer: IOperation: (OperationKind.None) (Syntax: 'array')
Initializer: IOperation: (OperationKind.None) (Syntax: 'array') Children(1):
Children(1): IParameterReferenceExpression: array (OperationKind.ParameterReferenceExpression, Type: System.Int32[]) (Syntax: 'array')
IParameterReferenceExpression: array (OperationKind.ParameterReferenceExpression, Type: System.Int32[]) (Syntax: 'array')
"; ";
var expectedDiagnostics = new DiagnosticDescription[] { var expectedDiagnostics = new DiagnosticDescription[] {
// CS0227: Unsafe code may only appear if compiling with /unsafe // CS0227: Unsafe code may only appear if compiling with /unsafe
...@@ -454,7 +455,7 @@ public unsafe void M(int[] array) ...@@ -454,7 +455,7 @@ public unsafe void M(int[] array)
Diagnostic(ErrorCode.ERR_IllegalUnsafe, "M").WithLocation(6, 24) Diagnostic(ErrorCode.ERR_IllegalUnsafe, "M").WithLocation(6, 24)
}; };
VerifyOperationTreeAndDiagnosticsForTest<EqualsValueClauseSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<VariableDeclaratorSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -535,13 +536,13 @@ class Class1 ...@@ -535,13 +536,13 @@ class Class1
{ {
public void M(dynamic d, int x) public void M(dynamic d, int x)
{ {
var y /*<bind>*/= d[x]/*</bind>*/; /*<bind>*/var y = d[x];/*</bind>*/
} }
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var y /*<bi ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var y = d[x];')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'var y /*<bi ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'y = d[x]')
Variables: Local_1: dynamic y Variables: Local_1: dynamic y
Initializer: IOperation: (OperationKind.None) (Syntax: 'd[x]') Initializer: IOperation: (OperationKind.None) (Syntax: 'd[x]')
Children(2): Children(2):
...@@ -550,7 +551,7 @@ public void M(dynamic d, int x) ...@@ -550,7 +551,7 @@ public void M(dynamic d, int x)
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
VerifyOperationTreeAndDiagnosticsForTest<EqualsValueClauseSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -680,26 +681,29 @@ public void M(string x, int y) ...@@ -680,26 +681,29 @@ public void M(string x, int y)
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IInterpolatedStringExpression (OperationKind.InterpolatedStringExpression, Type: System.String) (Syntax: '$""String {x ... nstant {1}""') IArgument (ArgumentKind.Explicit, Matching Parameter: value) (OperationKind.Argument) (Syntax: '$""String {x ... nstant {1}""')
Parts(6): IInterpolatedStringExpression (OperationKind.InterpolatedStringExpression, Type: System.String) (Syntax: '$""String {x ... nstant {1}""')
IInterpolatedStringText (OperationKind.InterpolatedStringText) (Syntax: 'String ') Parts(6):
Text: ILiteralExpression (OperationKind.LiteralExpression, Type: System.String, Constant: ""String "") (Syntax: 'String ') IInterpolatedStringText (OperationKind.InterpolatedStringText) (Syntax: 'String ')
IInterpolation (OperationKind.Interpolation) (Syntax: '{x,20}') Text: ILiteralExpression (OperationKind.LiteralExpression, Type: System.String, Constant: ""String "") (Syntax: 'String ')
Expression: IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.String) (Syntax: 'x') IInterpolation (OperationKind.Interpolation) (Syntax: '{x,20}')
Alignment: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 20) (Syntax: '20') Expression: IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.String) (Syntax: 'x')
FormatString: null Alignment: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 20) (Syntax: '20')
IInterpolatedStringText (OperationKind.InterpolatedStringText) (Syntax: ' and ') FormatString: null
Text: ILiteralExpression (OperationKind.LiteralExpression, Type: System.String, Constant: "" and "") (Syntax: ' and ') IInterpolatedStringText (OperationKind.InterpolatedStringText) (Syntax: ' and ')
IInterpolation (OperationKind.Interpolation) (Syntax: '{y:D3}') Text: ILiteralExpression (OperationKind.LiteralExpression, Type: System.String, Constant: "" and "") (Syntax: ' and ')
Expression: IParameterReferenceExpression: y (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'y') IInterpolation (OperationKind.Interpolation) (Syntax: '{y:D3}')
Alignment: null Expression: IParameterReferenceExpression: y (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'y')
FormatString: ILiteralExpression (OperationKind.LiteralExpression, Type: System.String, Constant: ""D3"") (Syntax: ':D3') Alignment: null
IInterpolatedStringText (OperationKind.InterpolatedStringText) (Syntax: ' and constant ') FormatString: ILiteralExpression (OperationKind.LiteralExpression, Type: System.String, Constant: ""D3"") (Syntax: ':D3')
Text: ILiteralExpression (OperationKind.LiteralExpression, Type: System.String, Constant: "" and constant "") (Syntax: ' and constant ') IInterpolatedStringText (OperationKind.InterpolatedStringText) (Syntax: ' and constant ')
IInterpolation (OperationKind.Interpolation) (Syntax: '{1}') Text: ILiteralExpression (OperationKind.LiteralExpression, Type: System.String, Constant: "" and constant "") (Syntax: ' and constant ')
Expression: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 1) (Syntax: '1') IInterpolation (OperationKind.Interpolation) (Syntax: '{1}')
Alignment: null Expression: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 1) (Syntax: '1')
FormatString: null Alignment: null
FormatString: null
InConversion: null
OutConversion: null
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
...@@ -755,18 +759,15 @@ public void M(int x) ...@@ -755,18 +759,15 @@ public void M(int x)
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
ISwitchStatement (1 cases) (OperationKind.SwitchStatement) (Syntax: 'switch (x) ... }') ISwitchCase (1 case clauses, 1 statements) (OperationKind.SwitchCase) (Syntax: 'case var y ... break;')
Switch expression: IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'x') Clauses:
Sections: IPatternCaseClause (Label Symbol: case var y when (x >= 10):) (CaseKind.Pattern) (OperationKind.PatternCaseClause) (Syntax: 'case var y ... (x >= 10):')
ISwitchCase (1 case clauses, 1 statements) (OperationKind.SwitchCase) (Syntax: 'case var y ... break;') Pattern: IDeclarationPattern (Declared Symbol: System.Int32 y) (OperationKind.DeclarationPattern) (Syntax: 'var y')
Clauses: Guard Expression: IBinaryOperatorExpression (BinaryOperatorKind.GreaterThanOrEqual) (OperationKind.BinaryOperatorExpression, Type: System.Boolean) (Syntax: 'x >= 10')
IPatternCaseClause (Label Symbol: case var y when (x >= 10):) (CaseKind.Pattern) (OperationKind.PatternCaseClause) (Syntax: 'case var y ... (x >= 10):') Left: IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'x')
Pattern: IDeclarationPattern (Declared Symbol: System.Int32 y) (OperationKind.DeclarationPattern) (Syntax: 'var y') Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 10) (Syntax: '10')
Guard Expression: IBinaryOperatorExpression (BinaryOperatorKind.GreaterThanOrEqual) (OperationKind.BinaryOperatorExpression, Type: System.Boolean) (Syntax: 'x >= 10') Body:
Left: IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'x') IBranchStatement (BranchKind.Break) (OperationKind.BranchStatement) (Syntax: 'break;')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 10) (Syntax: '10')
Body:
IBranchStatement (BranchKind.Break) (OperationKind.BranchStatement) (Syntax: 'break;')
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
...@@ -794,23 +795,7 @@ public void M(int x) ...@@ -794,23 +795,7 @@ public void M(int x)
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
ISwitchStatement (2 cases) (OperationKind.SwitchStatement) (Syntax: 'switch (x) ... }') IDefaultCaseClause (CaseKind.Default) (OperationKind.DefaultCaseClause) (Syntax: 'default:')
Switch expression: IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'x')
Sections:
ISwitchCase (1 case clauses, 1 statements) (OperationKind.SwitchCase) (Syntax: 'case var y ... break;')
Clauses:
IPatternCaseClause (Label Symbol: case var y when (x >= 10):) (CaseKind.Pattern) (OperationKind.PatternCaseClause) (Syntax: 'case var y ... (x >= 10):')
Pattern: IDeclarationPattern (Declared Symbol: System.Int32 y) (OperationKind.DeclarationPattern) (Syntax: 'var y')
Guard Expression: IBinaryOperatorExpression (BinaryOperatorKind.GreaterThanOrEqual) (OperationKind.BinaryOperatorExpression, Type: System.Boolean) (Syntax: 'x >= 10')
Left: IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'x')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 10) (Syntax: '10')
Body:
IBranchStatement (BranchKind.Break) (OperationKind.BranchStatement) (Syntax: 'break;')
ISwitchCase (1 case clauses, 1 statements) (OperationKind.SwitchCase) (Syntax: 'default:/*< ... break;')
Clauses:
IDefaultCaseClause (CaseKind.Default) (OperationKind.DefaultCaseClause) (Syntax: 'default:')
Body:
IBranchStatement (BranchKind.Break) (OperationKind.BranchStatement) (Syntax: 'break;')
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
...@@ -902,7 +887,10 @@ public I F(object x) ...@@ -902,7 +887,10 @@ public I F(object x)
references: new[] { MscorlibRef, SystemRef, compilation0.EmitToImageReference(embedInteropTypes: true) }); references: new[] { MscorlibRef, SystemRef, compilation0.EmitToImageReference(embedInteropTypes: true) });
string expectedOperationTree = @" string expectedOperationTree = @"
IOperation: (OperationKind.None, IsInvalid) (Syntax: 'new I(x)') IInvalidExpression (OperationKind.InvalidExpression, Type: I, IsInvalid) (Syntax: 'new I(x)')
Children(2):
IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Object, IsInvalid) (Syntax: 'x')
IOperation: (OperationKind.None, IsInvalid) (Syntax: 'new I(x)')
"; ";
var expectedDiagnostics = new DiagnosticDescription[] { var expectedDiagnostics = new DiagnosticDescription[] {
// (6,25): error CS1729: 'I' does not contain a constructor that takes 1 arguments // (6,25): error CS1729: 'I' does not contain a constructor that takes 1 arguments
...@@ -932,10 +920,13 @@ static void M(int x, __arglist) ...@@ -932,10 +920,13 @@ static void M(int x, __arglist)
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IOperation: (OperationKind.None) (Syntax: '__arglist(x, y)') IArgument (ArgumentKind.Explicit, Matching Parameter: null) (OperationKind.Argument) (Syntax: '__arglist(x, y)')
Children(2): IOperation: (OperationKind.None) (Syntax: '__arglist(x, y)')
IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'x') Children(2):
IParameterReferenceExpression: y (OperationKind.ParameterReferenceExpression, Type: System.Boolean) (Syntax: 'y') IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'x')
IParameterReferenceExpression: y (OperationKind.ParameterReferenceExpression, Type: System.Boolean) (Syntax: 'y')
InConversion: null
OutConversion: null
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
......
...@@ -48,14 +48,14 @@ class C ...@@ -48,14 +48,14 @@ class C
{ {
static void Main() static void Main()
{ {
/*<bind>*/(int, int) t = (1, 2)/*</bind>*/; /*<bind>*/(int, int) t = (1, 2);/*</bind>*/
Console.WriteLine(t); Console.WriteLine(t);
} }
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(int, int) ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(int, int) t = (1, 2);')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: '(int, int) ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 't = (1, 2)')
Variables: Local_1: (System.Int32, System.Int32) t Variables: Local_1: (System.Int32, System.Int32) t
Initializer: ITupleExpression (OperationKind.TupleExpression, Type: (System.Int32, System.Int32)) (Syntax: '(1, 2)') Initializer: ITupleExpression (OperationKind.TupleExpression, Type: (System.Int32, System.Int32)) (Syntax: '(1, 2)')
Elements(2): Elements(2):
...@@ -64,7 +64,7 @@ static void Main() ...@@ -64,7 +64,7 @@ static void Main()
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
VerifyOperationTreeAndDiagnosticsForTest<VariableDeclarationSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -109,14 +109,14 @@ class C ...@@ -109,14 +109,14 @@ class C
{ {
static void Main() static void Main()
{ {
/*<bind>*/(uint, uint) t = (1, 2)/*</bind>*/; /*<bind>*/(uint, uint) t = (1, 2);/*</bind>*/
Console.WriteLine(t); Console.WriteLine(t);
} }
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(uint, uint ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(uint, uint) t = (1, 2);')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: '(uint, uint ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 't = (1, 2)')
Variables: Local_1: (System.UInt32, System.UInt32) t Variables: Local_1: (System.UInt32, System.UInt32) t
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: (System.UInt32, System.UInt32)) (Syntax: '(1, 2)') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: (System.UInt32, System.UInt32)) (Syntax: '(1, 2)')
Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
...@@ -131,7 +131,7 @@ static void Main() ...@@ -131,7 +131,7 @@ static void Main()
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
VerifyOperationTreeAndDiagnosticsForTest<VariableDeclarationSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -180,14 +180,14 @@ static void Main() ...@@ -180,14 +180,14 @@ static void Main()
{ {
int a = 1; int a = 1;
int b = 2; int b = 2;
/*<bind>*/(long, long) t = (a, b)/*</bind>*/; /*<bind>*/(long, long) t = (a, b);/*</bind>*/
Console.WriteLine(t); Console.WriteLine(t);
} }
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(long, long ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(long, long) t = (a, b);')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: '(long, long ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 't = (a, b)')
Variables: Local_1: (System.Int64, System.Int64) t Variables: Local_1: (System.Int64, System.Int64) t
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: (System.Int64, System.Int64)) (Syntax: '(a, b)') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: (System.Int64, System.Int64)) (Syntax: '(a, b)')
Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
...@@ -202,7 +202,7 @@ static void Main() ...@@ -202,7 +202,7 @@ static void Main()
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
VerifyOperationTreeAndDiagnosticsForTest<VariableDeclarationSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -247,14 +247,14 @@ class C ...@@ -247,14 +247,14 @@ class C
{ {
static void Main() static void Main()
{ {
/*<bind>*/(uint, string) t = (1, null)/*</bind>*/; /*<bind>*/(uint, string) t = (1, null);/*</bind>*/
Console.WriteLine(t); Console.WriteLine(t);
} }
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(uint, stri ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(uint, stri ... (1, null);')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: '(uint, stri ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 't = (1, null)')
Variables: Local_1: (System.UInt32, System.String) t Variables: Local_1: (System.UInt32, System.String) t
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: (System.UInt32, System.String)) (Syntax: '(1, null)') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: (System.UInt32, System.String)) (Syntax: '(1, null)')
Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
...@@ -269,7 +269,7 @@ static void Main() ...@@ -269,7 +269,7 @@ static void Main()
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
VerifyOperationTreeAndDiagnosticsForTest<VariableDeclarationSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -310,14 +310,14 @@ class C ...@@ -310,14 +310,14 @@ class C
{ {
static void Main() static void Main()
{ {
/*<bind>*/var t = (A: 1, B: 2)/*</bind>*/; /*<bind>*/var t = (A: 1, B: 2);/*</bind>*/
Console.WriteLine(t); Console.WriteLine(t);
} }
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var t = (A: ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var t = (A: 1, B: 2);')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'var t = (A: ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 't = (A: 1, B: 2)')
Variables: Local_1: (System.Int32 A, System.Int32 B) t Variables: Local_1: (System.Int32 A, System.Int32 B) t
Initializer: ITupleExpression (OperationKind.TupleExpression, Type: (System.Int32 A, System.Int32 B)) (Syntax: '(A: 1, B: 2)') Initializer: ITupleExpression (OperationKind.TupleExpression, Type: (System.Int32 A, System.Int32 B)) (Syntax: '(A: 1, B: 2)')
Elements(2): Elements(2):
...@@ -326,7 +326,7 @@ static void Main() ...@@ -326,7 +326,7 @@ static void Main()
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
VerifyOperationTreeAndDiagnosticsForTest<VariableDeclarationSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -367,14 +367,14 @@ class C ...@@ -367,14 +367,14 @@ class C
{ {
static void Main() static void Main()
{ {
/*<bind>*/(int A, int B) t = (1, 2)/*</bind>*/; /*<bind>*/(int A, int B) t = (1, 2);/*</bind>*/
Console.WriteLine(t); Console.WriteLine(t);
} }
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(int A, int ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(int A, int ... t = (1, 2);')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: '(int A, int ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 't = (1, 2)')
Variables: Local_1: (System.Int32 A, System.Int32 B) t Variables: Local_1: (System.Int32 A, System.Int32 B) t
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: (System.Int32 A, System.Int32 B)) (Syntax: '(1, 2)') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: (System.Int32 A, System.Int32 B)) (Syntax: '(1, 2)')
Conversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: True, IsIdentity: True, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
...@@ -385,7 +385,7 @@ static void Main() ...@@ -385,7 +385,7 @@ static void Main()
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
VerifyOperationTreeAndDiagnosticsForTest<VariableDeclarationSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -437,14 +437,14 @@ class C ...@@ -437,14 +437,14 @@ class C
{ {
static void Main() static void Main()
{ {
/*<bind>*/(short, string) t = (A: 1, B: null)/*</bind>*/; /*<bind>*/(short, string) t = (A: 1, B: null);/*</bind>*/
Console.WriteLine(t); Console.WriteLine(t);
} }
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(short, str ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(short, str ... , B: null);')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: '(short, str ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 't = (A: 1, B: null)')
Variables: Local_1: (System.Int16, System.String) t Variables: Local_1: (System.Int16, System.String) t
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: (System.Int16, System.String)) (Syntax: '(A: 1, B: null)') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: (System.Int16, System.String)) (Syntax: '(A: 1, B: null)')
Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
...@@ -466,7 +466,7 @@ static void Main() ...@@ -466,7 +466,7 @@ static void Main()
Diagnostic(ErrorCode.WRN_TupleLiteralNameMismatch, "B: null").WithArguments("B", "(short, string)").WithLocation(8, 46) Diagnostic(ErrorCode.WRN_TupleLiteralNameMismatch, "B: null").WithArguments("B", "(short, string)").WithLocation(8, 46)
}; };
VerifyOperationTreeAndDiagnosticsForTest<VariableDeclarationSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -559,14 +559,14 @@ public C(int x) ...@@ -559,14 +559,14 @@ public C(int x)
public void M(C c1) public void M(C c1)
{ {
/*<bind>*/(short, string) t = (new C(0), c1)/*</bind>*/; /*<bind>*/(short, string) t = (new C(0), c1);/*</bind>*/
Console.WriteLine(t); Console.WriteLine(t);
} }
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(short, str ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(short, str ... C(0), c1);')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: '(short, str ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 't = (new C(0), c1)')
Variables: Local_1: (System.Int16, System.String) t Variables: Local_1: (System.Int16, System.String) t
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: (System.Int16, System.String)) (Syntax: '(new C(0), c1)') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: (System.Int16, System.String)) (Syntax: '(new C(0), c1)')
Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
...@@ -587,7 +587,7 @@ public void M(C c1) ...@@ -587,7 +587,7 @@ public void M(C c1)
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
VerifyOperationTreeAndDiagnosticsForTest<VariableDeclarationSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -662,14 +662,14 @@ public static implicit operator (int, string) (C c) ...@@ -662,14 +662,14 @@ public static implicit operator (int, string) (C c)
public void M(C c1) public void M(C c1)
{ {
/*<bind>*/C t = (0, null)/*</bind>*/; /*<bind>*/C t = (0, null);/*</bind>*/
Console.WriteLine(t); Console.WriteLine(t);
} }
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'C t = (0, n ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'C t = (0, null);')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'C t = (0, n ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 't = (0, null)')
Variables: Local_1: C t Variables: Local_1: C t
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperatorMethod: C C.op_Implicit((System.Int32, System.String) x)) (OperationKind.ConversionExpression, Type: C) (Syntax: '(0, null)') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperatorMethod: C C.op_Implicit((System.Int32, System.String) x)) (OperationKind.ConversionExpression, Type: C) (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)) Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: True) (MethodSymbol: C C.op_Implicit((System.Int32, System.String) x))
...@@ -684,7 +684,7 @@ public void M(C c1) ...@@ -684,7 +684,7 @@ public void M(C c1)
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
VerifyOperationTreeAndDiagnosticsForTest<VariableDeclarationSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -754,14 +754,14 @@ public static implicit operator (int, string) (C c) ...@@ -754,14 +754,14 @@ public static implicit operator (int, string) (C c)
public void M(C c1) public void M(C c1)
{ {
/*<bind>*/(int, string) t = c1/*</bind>*/; /*<bind>*/(int, string) t = c1;/*</bind>*/
Console.WriteLine(t); Console.WriteLine(t);
} }
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(int, strin ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: '(int, string) t = c1;')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: '(int, strin ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 't = c1')
Variables: Local_1: (System.Int32, System.String) t Variables: Local_1: (System.Int32, System.String) t
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperatorMethod: (System.Int32, System.String) C.op_Implicit(C c)) (OperationKind.ConversionExpression, Type: (System.Int32, System.String)) (Syntax: 'c1') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperatorMethod: (System.Int32, System.String) C.op_Implicit(C c)) (OperationKind.ConversionExpression, Type: (System.Int32, System.String)) (Syntax: 'c1')
Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: True) (MethodSymbol: (System.Int32, System.String) C.op_Implicit(C c)) Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: True) (MethodSymbol: (System.Int32, System.String) C.op_Implicit(C c))
...@@ -769,7 +769,7 @@ public void M(C c1) ...@@ -769,7 +769,7 @@ public void M(C c1)
"; ";
var expectedDiagnostics = DiagnosticDescription.None; var expectedDiagnostics = DiagnosticDescription.None;
VerifyOperationTreeAndDiagnosticsForTest<VariableDeclarationSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -862,14 +862,14 @@ public C(int x) ...@@ -862,14 +862,14 @@ public C(int x)
public void M(C c1) public void M(C c1)
{ {
/*<bind>*/(short, string) t = (new C(0), c1)/*</bind>*/; /*<bind>*/(short, string) t = (new C(0), c1);/*</bind>*/
Console.WriteLine(t); Console.WriteLine(t);
} }
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: '(short, str ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: '(short, str ... C(0), c1);')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: '(short, str ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 't = (new C(0), c1)')
Variables: Local_1: (System.Int16, System.String) t Variables: Local_1: (System.Int16, System.String) t
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: (System.Int16, System.String), IsInvalid) (Syntax: '(new C(0), c1)') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: (System.Int16, System.String), IsInvalid) (Syntax: '(new C(0), c1)')
Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
...@@ -890,7 +890,7 @@ public void M(C c1) ...@@ -890,7 +890,7 @@ public void M(C c1)
Diagnostic(ErrorCode.ERR_NoImplicitConv, "new C(0)").WithArguments("C", "short").WithLocation(29, 40) Diagnostic(ErrorCode.ERR_NoImplicitConv, "new C(0)").WithArguments("C", "short").WithLocation(29, 40)
}; };
VerifyOperationTreeAndDiagnosticsForTest<VariableDeclarationSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. // 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 Microsoft.CodeAnalysis.CSharp.Syntax; using Microsoft.CodeAnalysis.CSharp.Syntax;
using Microsoft.CodeAnalysis.Test.Utilities; using Microsoft.CodeAnalysis.Test.Utilities;
...@@ -122,7 +122,7 @@ static void Main() ...@@ -122,7 +122,7 @@ static void Main()
Body: IBlockStatement (2 statements, 1 locals) (OperationKind.BlockStatement) (Syntax: '{ ... }') Body: IBlockStatement (2 statements, 1 locals) (OperationKind.BlockStatement) (Syntax: '{ ... }')
Locals: Local_1: System.Int32 value Locals: Local_1: System.Int32 value
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int value = ++index;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int value = ++index;')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'int value = ++index;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'value = ++index')
Variables: Local_1: System.Int32 value Variables: Local_1: System.Int32 value
Initializer: IIncrementExpression (PrefixIncrement) (OperationKind.IncrementExpression, Type: System.Int32) (Syntax: '++index') Initializer: IIncrementExpression (PrefixIncrement) (OperationKind.IncrementExpression, Type: System.Int32) (Syntax: '++index')
Target: ILocalReferenceExpression: index (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'index') Target: ILocalReferenceExpression: index (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'index')
...@@ -171,7 +171,7 @@ static void Main() ...@@ -171,7 +171,7 @@ static void Main()
Body: IBlockStatement (3 statements, 1 locals) (OperationKind.BlockStatement) (Syntax: '{ ... }') Body: IBlockStatement (3 statements, 1 locals) (OperationKind.BlockStatement) (Syntax: '{ ... }')
Locals: Local_1: System.Int32 value Locals: Local_1: System.Int32 value
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int value = ++index;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int value = ++index;')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'int value = ++index;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'value = ++index')
Variables: Local_1: System.Int32 value Variables: Local_1: System.Int32 value
Initializer: IIncrementExpression (PrefixIncrement) (OperationKind.IncrementExpression, Type: System.Int32) (Syntax: '++index') Initializer: IIncrementExpression (PrefixIncrement) (OperationKind.IncrementExpression, Type: System.Int32) (Syntax: '++index')
Target: ILocalReferenceExpression: index (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'index') Target: ILocalReferenceExpression: index (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'index')
...@@ -232,7 +232,7 @@ static void Main() ...@@ -232,7 +232,7 @@ static void Main()
Body: IBlockStatement (3 statements, 1 locals) (OperationKind.BlockStatement) (Syntax: '{ ... }') Body: IBlockStatement (3 statements, 1 locals) (OperationKind.BlockStatement) (Syntax: '{ ... }')
Locals: Local_1: System.Int32 value Locals: Local_1: System.Int32 value
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int value = ++index;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int value = ++index;')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'int value = ++index;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'value = ++index')
Variables: Local_1: System.Int32 value Variables: Local_1: System.Int32 value
Initializer: IIncrementExpression (PrefixIncrement) (OperationKind.IncrementExpression, Type: System.Int32) (Syntax: '++index') Initializer: IIncrementExpression (PrefixIncrement) (OperationKind.IncrementExpression, Type: System.Int32) (Syntax: '++index')
Target: ILocalReferenceExpression: index (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'index') Target: ILocalReferenceExpression: index (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'index')
...@@ -470,7 +470,7 @@ static void Main() ...@@ -470,7 +470,7 @@ static void Main()
Body: IBlockStatement (2 statements, 1 locals) (OperationKind.BlockStatement) (Syntax: '{ ... }') Body: IBlockStatement (2 statements, 1 locals) (OperationKind.BlockStatement) (Syntax: '{ ... }')
Locals: Local_1: System.Int32 value Locals: Local_1: System.Int32 value
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int value = ++index;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int value = ++index;')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'int value = ++index;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'value = ++index')
Variables: Local_1: System.Int32 value Variables: Local_1: System.Int32 value
Initializer: IIncrementExpression (PrefixIncrement) (OperationKind.IncrementExpression, Type: System.Int32) (Syntax: '++index') Initializer: IIncrementExpression (PrefixIncrement) (OperationKind.IncrementExpression, Type: System.Int32) (Syntax: '++index')
Target: ILocalReferenceExpression: index (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'index') Target: ILocalReferenceExpression: index (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'index')
...@@ -600,7 +600,7 @@ static void Main() ...@@ -600,7 +600,7 @@ static void Main()
Expression: IIncrementExpression (PostfixIncrement) (OperationKind.IncrementExpression, Type: System.Int32) (Syntax: 'i++') Expression: IIncrementExpression (PostfixIncrement) (OperationKind.IncrementExpression, Type: System.Int32) (Syntax: 'i++')
Target: ILocalReferenceExpression: i (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'i') Target: ILocalReferenceExpression: i (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'i')
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int j = 0;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int j = 0;')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'int j = 0;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'j = 0')
Variables: Local_1: System.Int32 j Variables: Local_1: System.Int32 j
Initializer: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 0) (Syntax: '0')
IWhileUntilLoopStatement (IsTopTest: True, IsWhile: True) (LoopKind.WhileUntil) (OperationKind.LoopStatement) (Syntax: 'while (j < ... }') IWhileUntilLoopStatement (IsTopTest: True, IsWhile: True) (LoopKind.WhileUntil) (OperationKind.LoopStatement) (Syntax: 'while (j < ... }')
...@@ -667,7 +667,7 @@ static void Main() ...@@ -667,7 +667,7 @@ static void Main()
Expression: IIncrementExpression (PostfixIncrement) (OperationKind.IncrementExpression, Type: System.Int32) (Syntax: 'i++') Expression: IIncrementExpression (PostfixIncrement) (OperationKind.IncrementExpression, Type: System.Int32) (Syntax: 'i++')
Target: ILocalReferenceExpression: i (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'i') Target: ILocalReferenceExpression: i (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'i')
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int j = 0;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int j = 0;')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'int j = 0;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'j = 0')
Variables: Local_1: System.Int32 j Variables: Local_1: System.Int32 j
Initializer: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 0) (Syntax: '0') Initializer: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 0) (Syntax: '0')
IWhileUntilLoopStatement (IsTopTest: True, IsWhile: True) (LoopKind.WhileUntil) (OperationKind.LoopStatement) (Syntax: 'while (j < ... }') IWhileUntilLoopStatement (IsTopTest: True, IsWhile: True) (LoopKind.WhileUntil) (OperationKind.LoopStatement) (Syntax: 'while (j < ... }')
......
...@@ -124,7 +124,7 @@ class Program ...@@ -124,7 +124,7 @@ class Program
static void Main(string[] args) static void Main(string[] args)
{ {
var x = new Program(); var x = new Program();
var y /*<bind>*/= x.MissingField/*</bind>*/; var /*<bind>*/y = x.MissingField/*</bind>*/;
} }
void F() void F()
...@@ -133,12 +133,11 @@ void F() ...@@ -133,12 +133,11 @@ void F()
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'var y /*<bi ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'y = x.MissingField')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'var y /*<bi ... *</bind>*/;') Variables: Local_1: ? y
Variables: Local_1: ? y Initializer: IInvalidExpression (OperationKind.InvalidExpression, Type: ?, IsInvalid) (Syntax: 'x.MissingField')
Initializer: IInvalidExpression (OperationKind.InvalidExpression, Type: ?, IsInvalid) (Syntax: 'x.MissingField') Children(1):
Children(1): ILocalReferenceExpression: x (OperationKind.LocalReferenceExpression, Type: Program) (Syntax: 'x')
ILocalReferenceExpression: x (OperationKind.LocalReferenceExpression, Type: Program) (Syntax: 'x')
"; ";
var expectedDiagnostics = new DiagnosticDescription[] { var expectedDiagnostics = new DiagnosticDescription[] {
// CS1061: 'Program' does not contain a definition for 'MissingField' and no extension method 'MissingField' accepting a first argument of type 'Program' could be found (are you missing a using directive or an assembly reference?) // CS1061: 'Program' does not contain a definition for 'MissingField' and no extension method 'MissingField' accepting a first argument of type 'Program' could be found (are you missing a using directive or an assembly reference?)
...@@ -146,7 +145,7 @@ void F() ...@@ -146,7 +145,7 @@ void F()
Diagnostic(ErrorCode.ERR_NoSuchMemberOrExtension, "MissingField").WithArguments("Program", "MissingField").WithLocation(9, 29) Diagnostic(ErrorCode.ERR_NoSuchMemberOrExtension, "MissingField").WithArguments("Program", "MissingField").WithLocation(9, 29)
}; };
VerifyOperationTreeAndDiagnosticsForTest<EqualsValueClauseSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<VariableDeclaratorSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -162,7 +161,7 @@ class Program ...@@ -162,7 +161,7 @@ class Program
static void Main(string[] args) static void Main(string[] args)
{ {
var x = new Program(); var x = new Program();
string y /*<bind>*/= x.i1/*</bind>*/; /*<bind>*/string y = x.i1;/*</bind>*/
} }
void F() void F()
...@@ -171,8 +170,8 @@ void F() ...@@ -171,8 +170,8 @@ void F()
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'string y /* ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'string y = x.i1;')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'string y /* ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'y = x.i1')
Variables: Local_1: System.String y Variables: Local_1: System.String y
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.String, IsInvalid) (Syntax: 'x.i1') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.String, IsInvalid) (Syntax: 'x.i1')
Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
...@@ -188,7 +187,7 @@ void F() ...@@ -188,7 +187,7 @@ void F()
Diagnostic(ErrorCode.WRN_UnassignedInternalField, "i1").WithArguments("Program.i1", "0").WithLocation(6, 9) Diagnostic(ErrorCode.WRN_UnassignedInternalField, "i1").WithArguments("Program.i1", "0").WithLocation(6, 9)
}; };
VerifyOperationTreeAndDiagnosticsForTest<EqualsValueClauseSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -204,7 +203,7 @@ class Program ...@@ -204,7 +203,7 @@ class Program
static void Main(string[] args) static void Main(string[] args)
{ {
var x = new Program(); var x = new Program();
Program y /*<bind>*/= (Program)x.i1/*</bind>*/; /*<bind>*/Program y = (Program)x.i1;/*</bind>*/
} }
void F() void F()
...@@ -213,8 +212,8 @@ void F() ...@@ -213,8 +212,8 @@ void F()
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'Program y / ... *</bind>*/;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'Program y = ... ogram)x.i1;')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'Program y / ... *</bind>*/;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'y = (Program)x.i1')
Variables: Local_1: Program y Variables: Local_1: Program y
Initializer: IConversionExpression (Explicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: Program, IsInvalid) (Syntax: '(Program)x.i1') Initializer: IConversionExpression (Explicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: Program, IsInvalid) (Syntax: '(Program)x.i1')
Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: False, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
...@@ -230,7 +229,7 @@ void F() ...@@ -230,7 +229,7 @@ void F()
Diagnostic(ErrorCode.WRN_UnassignedInternalField, "i1").WithArguments("Program.i1", "0").WithLocation(6, 9) Diagnostic(ErrorCode.WRN_UnassignedInternalField, "i1").WithArguments("Program.i1", "0").WithLocation(6, 9)
}; };
VerifyOperationTreeAndDiagnosticsForTest<EqualsValueClauseSyntax>(source, expectedOperationTree, expectedDiagnostics); VerifyOperationTreeAndDiagnosticsForTest<LocalDeclarationStatementSyntax>(source, expectedOperationTree, expectedDiagnostics);
} }
[CompilerTrait(CompilerFeature.IOperation)] [CompilerTrait(CompilerFeature.IOperation)]
...@@ -288,13 +287,16 @@ void F() ...@@ -288,13 +287,16 @@ void F()
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IBinaryOperatorExpression (BinaryOperatorKind.Add) (OperationKind.BinaryOperatorExpression, Type: ?, IsInvalid) (Syntax: 'x + (y * args.Length)') IArgument (ArgumentKind.Explicit, Matching Parameter: null) (OperationKind.Argument, IsInvalid) (Syntax: 'x + (y * args.Length)')
Left: ILocalReferenceExpression: x (OperationKind.LocalReferenceExpression, Type: Program) (Syntax: 'x') IBinaryOperatorExpression (BinaryOperatorKind.Add) (OperationKind.BinaryOperatorExpression, Type: ?, IsInvalid) (Syntax: 'x + (y * args.Length)')
Right: IBinaryOperatorExpression (BinaryOperatorKind.Multiply) (OperationKind.BinaryOperatorExpression, Type: ?, IsInvalid) (Syntax: 'y * args.Length') Left: ILocalReferenceExpression: x (OperationKind.LocalReferenceExpression, Type: Program) (Syntax: 'x')
Left: IInvalidExpression (OperationKind.InvalidExpression, Type: ?, IsInvalid) (Syntax: 'y') Right: IBinaryOperatorExpression (BinaryOperatorKind.Multiply) (OperationKind.BinaryOperatorExpression, Type: ?, IsInvalid) (Syntax: 'y * args.Length')
Children(0) Left: IInvalidExpression (OperationKind.InvalidExpression, Type: ?, IsInvalid) (Syntax: 'y')
Right: IPropertyReferenceExpression: System.Int32 System.Array.Length { get; } (OperationKind.PropertyReferenceExpression, Type: System.Int32) (Syntax: 'args.Length') Children(0)
Instance Receiver: IParameterReferenceExpression: args (OperationKind.ParameterReferenceExpression, Type: System.String[]) (Syntax: 'args') Right: IPropertyReferenceExpression: System.Int32 System.Array.Length { get; } (OperationKind.PropertyReferenceExpression, Type: System.Int32) (Syntax: 'args.Length')
Instance Receiver: IParameterReferenceExpression: args (OperationKind.ParameterReferenceExpression, Type: System.String[]) (Syntax: 'args')
InConversion: null
OutConversion: null
"; ";
var expectedDiagnostics = new DiagnosticDescription[] { var expectedDiagnostics = new DiagnosticDescription[] {
// CS0103: The name 'y' does not exist in the current context // CS0103: The name 'y' does not exist in the current context
......
...@@ -286,14 +286,14 @@ public static void Main() ...@@ -286,14 +286,14 @@ public static void Main()
Local_2: MemberInitializerTest j Local_2: MemberInitializerTest j
Local_3: MemberInitializerTest k Local_3: MemberInitializerTest k
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var i = new ... int>() { };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var i = new ... int>() { };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'var i = new ... int>() { };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'i = new List<int>() { }')
Variables: Local_1: System.Collections.Generic.List<System.Int32> i Variables: Local_1: System.Collections.Generic.List<System.Int32> i
Initializer: IObjectCreationExpression (Constructor: System.Collections.Generic.List<System.Int32>..ctor()) (OperationKind.ObjectCreationExpression, Type: System.Collections.Generic.List<System.Int32>) (Syntax: 'new List<int>() { }') Initializer: IObjectCreationExpression (Constructor: System.Collections.Generic.List<System.Int32>..ctor()) (OperationKind.ObjectCreationExpression, Type: System.Collections.Generic.List<System.Int32>) (Syntax: 'new List<int>() { }')
Arguments(0) Arguments(0)
Initializer: IObjectOrCollectionInitializerExpression (OperationKind.ObjectOrCollectionInitializerExpression, Type: System.Collections.Generic.List<System.Int32>) (Syntax: '{ }') Initializer: IObjectOrCollectionInitializerExpression (OperationKind.ObjectOrCollectionInitializerExpression, Type: System.Collections.Generic.List<System.Int32>) (Syntax: '{ }')
Initializers(0) Initializers(0)
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var j = new ... x = { } };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var j = new ... x = { } };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'var j = new ... x = { } };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'j = new Mem ... { x = { } }')
Variables: Local_1: MemberInitializerTest j Variables: Local_1: MemberInitializerTest j
Initializer: IObjectCreationExpression (Constructor: MemberInitializerTest..ctor()) (OperationKind.ObjectCreationExpression, Type: MemberInitializerTest) (Syntax: 'new MemberI ... { x = { } }') Initializer: IObjectCreationExpression (Constructor: MemberInitializerTest..ctor()) (OperationKind.ObjectCreationExpression, Type: MemberInitializerTest) (Syntax: 'new MemberI ... { x = { } }')
Arguments(0) Arguments(0)
...@@ -305,7 +305,7 @@ public static void Main() ...@@ -305,7 +305,7 @@ public static void Main()
Initializer: IObjectOrCollectionInitializerExpression (OperationKind.ObjectOrCollectionInitializerExpression, Type: System.Collections.Generic.List<System.Int32>) (Syntax: '{ }') Initializer: IObjectOrCollectionInitializerExpression (OperationKind.ObjectOrCollectionInitializerExpression, Type: System.Collections.Generic.List<System.Int32>) (Syntax: '{ }')
Initializers(0) Initializers(0)
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var k = new ... Test() { };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var k = new ... Test() { };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'var k = new ... Test() { };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'k = new Mem ... rTest() { }')
Variables: Local_1: MemberInitializerTest k Variables: Local_1: MemberInitializerTest k
Initializer: IObjectCreationExpression (Constructor: MemberInitializerTest..ctor()) (OperationKind.ObjectCreationExpression, Type: MemberInitializerTest) (Syntax: 'new MemberI ... rTest() { }') Initializer: IObjectCreationExpression (Constructor: MemberInitializerTest..ctor()) (OperationKind.ObjectCreationExpression, Type: MemberInitializerTest) (Syntax: 'new MemberI ... rTest() { }')
Arguments(0) Arguments(0)
...@@ -912,6 +912,8 @@ public static void Main() ...@@ -912,6 +912,8 @@ public static void Main()
Left: IInvalidExpression (OperationKind.InvalidExpression, Type: ?, IsInvalid) (Syntax: 'x') Left: IInvalidExpression (OperationKind.InvalidExpression, Type: ?, IsInvalid) (Syntax: 'x')
Children(1): Children(1):
IOperation: (OperationKind.None, IsInvalid) (Syntax: 'x') IOperation: (OperationKind.None, IsInvalid) (Syntax: 'x')
Children(1):
IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: System.Int32) (Syntax: 'int')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 0) (Syntax: '0') Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 0) (Syntax: '0')
"; ";
var expectedDiagnostics = new DiagnosticDescription[] { var expectedDiagnostics = new DiagnosticDescription[] {
...@@ -1229,6 +1231,8 @@ public static void Main() ...@@ -1229,6 +1231,8 @@ public static void Main()
Left: IInvalidExpression (OperationKind.InvalidExpression, Type: ?) (Syntax: 'x') Left: IInvalidExpression (OperationKind.InvalidExpression, Type: ?) (Syntax: 'x')
Children(1): Children(1):
IOperation: (OperationKind.None) (Syntax: 'x') IOperation: (OperationKind.None) (Syntax: 'x')
Children(1):
IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: X, IsInvalid) (Syntax: 'X')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 0) (Syntax: '0') Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 0) (Syntax: '0')
"; ";
var expectedDiagnostics = new DiagnosticDescription[] { var expectedDiagnostics = new DiagnosticDescription[] {
...@@ -1268,6 +1272,8 @@ void M() ...@@ -1268,6 +1272,8 @@ void M()
Left: IInvalidExpression (OperationKind.InvalidExpression, Type: ?) (Syntax: 'Width') Left: IInvalidExpression (OperationKind.InvalidExpression, Type: ?) (Syntax: 'Width')
Children(1): Children(1):
IOperation: (OperationKind.None) (Syntax: 'Width') IOperation: (OperationKind.None) (Syntax: 'Width')
Children(1):
IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: Bar, IsInvalid) (Syntax: 'Bar')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 16) (Syntax: '16') Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 16) (Syntax: '16')
"; ";
var expectedDiagnostics = new DiagnosticDescription[] { var expectedDiagnostics = new DiagnosticDescription[] {
...@@ -1544,6 +1550,8 @@ public static void Main() ...@@ -1544,6 +1550,8 @@ public static void Main()
Left: IInvalidExpression (OperationKind.InvalidExpression, Type: ?, IsInvalid) (Syntax: 'Goo') Left: IInvalidExpression (OperationKind.InvalidExpression, Type: ?, IsInvalid) (Syntax: 'Goo')
Children(1): Children(1):
IOperation: (OperationKind.None, IsInvalid) (Syntax: 'Goo') IOperation: (OperationKind.None, IsInvalid) (Syntax: 'Goo')
Children(1):
IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: MemberInitializerTest) (Syntax: 'MemberInitializerTest')
Right: IObjectCreationExpression (Constructor: MemberInitializerTest..ctor()) (OperationKind.ObjectCreationExpression, Type: MemberInitializerTest) (Syntax: 'new MemberI ... lizerTest()') Right: IObjectCreationExpression (Constructor: MemberInitializerTest..ctor()) (OperationKind.ObjectCreationExpression, Type: MemberInitializerTest) (Syntax: 'new MemberI ... lizerTest()')
Arguments(0) Arguments(0)
Initializer: null Initializer: null
...@@ -1749,7 +1757,7 @@ public static void Main() ...@@ -1749,7 +1757,7 @@ public static void Main()
Locals: Local_1: MemberInitializerTest i Locals: Local_1: MemberInitializerTest i
Local_2: System.Collections.Generic.List<System.Collections.Generic.List<System.Int32>> collection Local_2: System.Collections.Generic.List<System.Collections.Generic.List<System.Int32>> collection
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var i = new ... y = { } };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var i = new ... y = { } };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'var i = new ... y = { } };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'i = new Mem ... { y = { } }')
Variables: Local_1: MemberInitializerTest i Variables: Local_1: MemberInitializerTest i
Initializer: IObjectCreationExpression (Constructor: MemberInitializerTest..ctor()) (OperationKind.ObjectCreationExpression, Type: MemberInitializerTest) (Syntax: 'new MemberI ... { y = { } }') Initializer: IObjectCreationExpression (Constructor: MemberInitializerTest..ctor()) (OperationKind.ObjectCreationExpression, Type: MemberInitializerTest) (Syntax: 'new MemberI ... { y = { } }')
Arguments(0) Arguments(0)
...@@ -1789,7 +1797,7 @@ public static void Main() ...@@ -1789,7 +1797,7 @@ public static void Main()
IInvalidExpression (OperationKind.InvalidExpression, Type: ?, IsInvalid) (Syntax: '{ }') IInvalidExpression (OperationKind.InvalidExpression, Type: ?, IsInvalid) (Syntax: '{ }')
Children(0) Children(0)
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'List<List<i ... () { { } };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'List<List<i ... () { { } };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'List<List<i ... () { { } };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'collection ... >() { { } }')
Variables: Local_1: System.Collections.Generic.List<System.Collections.Generic.List<System.Int32>> collection Variables: Local_1: System.Collections.Generic.List<System.Collections.Generic.List<System.Int32>> collection
Initializer: IObjectCreationExpression (Constructor: System.Collections.Generic.List<System.Collections.Generic.List<System.Int32>>..ctor()) (OperationKind.ObjectCreationExpression, Type: System.Collections.Generic.List<System.Collections.Generic.List<System.Int32>>, IsInvalid) (Syntax: 'new List<Li ... >() { { } }') Initializer: IObjectCreationExpression (Constructor: System.Collections.Generic.List<System.Collections.Generic.List<System.Int32>>..ctor()) (OperationKind.ObjectCreationExpression, Type: System.Collections.Generic.List<System.Collections.Generic.List<System.Int32>>, IsInvalid) (Syntax: 'new List<Li ... >() { { } }')
Arguments(0) Arguments(0)
...@@ -1885,7 +1893,7 @@ class A ...@@ -1885,7 +1893,7 @@ class A
Locals: Local_1: B coll Locals: Local_1: B coll
Local_2: A tc Local_2: A tc
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'B coll = new B { 1 };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'B coll = new B { 1 };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'B coll = new B { 1 };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'coll = new B { 1 }')
Variables: Local_1: B coll Variables: Local_1: B coll
Initializer: IObjectCreationExpression (Constructor: B..ctor()) (OperationKind.ObjectCreationExpression, Type: B, IsInvalid) (Syntax: 'new B { 1 }') Initializer: IObjectCreationExpression (Constructor: B..ctor()) (OperationKind.ObjectCreationExpression, Type: B, IsInvalid) (Syntax: 'new B { 1 }')
Arguments(0) Arguments(0)
...@@ -1895,7 +1903,7 @@ class A ...@@ -1895,7 +1903,7 @@ class A
Children(1): Children(1):
ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1')
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'var tc = ne ... ""hello"" };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'var tc = ne ... ""hello"" };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'var tc = ne ... ""hello"" };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'tc = new A ... , ""hello"" }')
Variables: Local_1: A tc Variables: Local_1: A tc
Initializer: IObjectCreationExpression (Constructor: A..ctor()) (OperationKind.ObjectCreationExpression, Type: A, IsInvalid) (Syntax: 'new A { 1, ""hello"" }') Initializer: IObjectCreationExpression (Constructor: A..ctor()) (OperationKind.ObjectCreationExpression, Type: A, IsInvalid) (Syntax: 'new A { 1, ""hello"" }')
Arguments(0) Arguments(0)
...@@ -2239,6 +2247,8 @@ public static void Main() ...@@ -2239,6 +2247,8 @@ public static void Main()
IInvalidExpression (OperationKind.InvalidExpression, Type: MemberInitializerTest.D<System.Int32>, IsInvalid) (Syntax: 'new D<int>( ... d<int>) { }') IInvalidExpression (OperationKind.InvalidExpression, Type: MemberInitializerTest.D<System.Int32>, IsInvalid) (Syntax: 'new D<int>( ... d<int>) { }')
Children(1): Children(1):
IOperation: (OperationKind.None, IsInvalid) (Syntax: 'GenericMethod<int>') IOperation: (OperationKind.None, IsInvalid) (Syntax: 'GenericMethod<int>')
Children(1):
IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: MemberInitializerTest, IsInvalid) (Syntax: 'GenericMethod<int>')
"; ";
var expectedDiagnostics = new DiagnosticDescription[] { var expectedDiagnostics = new DiagnosticDescription[] {
// CS1958: Object and collection initializer expressions may not be applied to a delegate creation expression // CS1958: Object and collection initializer expressions may not be applied to a delegate creation expression
...@@ -2348,7 +2358,7 @@ public IEnumerator GetEnumerator() ...@@ -2348,7 +2358,7 @@ public IEnumerator GetEnumerator()
Local_3: D coll3 Local_3: D coll3
Local_4: E coll4 Local_4: E coll4
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'B coll1 = new B { 1 };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'B coll1 = new B { 1 };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'B coll1 = new B { 1 };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'coll1 = new B { 1 }')
Variables: Local_1: B coll1 Variables: Local_1: B coll1
Initializer: IObjectCreationExpression (Constructor: B..ctor()) (OperationKind.ObjectCreationExpression, Type: B, IsInvalid) (Syntax: 'new B { 1 }') Initializer: IObjectCreationExpression (Constructor: B..ctor()) (OperationKind.ObjectCreationExpression, Type: B, IsInvalid) (Syntax: 'new B { 1 }')
Arguments(0) Arguments(0)
...@@ -2362,7 +2372,7 @@ public IEnumerator GetEnumerator() ...@@ -2362,7 +2372,7 @@ public IEnumerator GetEnumerator()
InConversion: null InConversion: null
OutConversion: null OutConversion: null
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'C coll2 = new C { 1 };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'C coll2 = new C { 1 };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'C coll2 = new C { 1 };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'coll2 = new C { 1 }')
Variables: Local_1: C coll2 Variables: Local_1: C coll2
Initializer: IObjectCreationExpression (Constructor: C..ctor()) (OperationKind.ObjectCreationExpression, Type: C, IsInvalid) (Syntax: 'new C { 1 }') Initializer: IObjectCreationExpression (Constructor: C..ctor()) (OperationKind.ObjectCreationExpression, Type: C, IsInvalid) (Syntax: 'new C { 1 }')
Arguments(0) Arguments(0)
...@@ -2376,7 +2386,7 @@ public IEnumerator GetEnumerator() ...@@ -2376,7 +2386,7 @@ public IEnumerator GetEnumerator()
InConversion: null InConversion: null
OutConversion: null OutConversion: null
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'D coll3 = n ... { 1, 2 } };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'D coll3 = n ... { 1, 2 } };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'D coll3 = n ... { 1, 2 } };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'coll3 = new ... { 1, 2 } }')
Variables: Local_1: D coll3 Variables: Local_1: D coll3
Initializer: IObjectCreationExpression (Constructor: D..ctor()) (OperationKind.ObjectCreationExpression, Type: D, IsInvalid) (Syntax: 'new D { { 1, 2 } }') Initializer: IObjectCreationExpression (Constructor: D..ctor()) (OperationKind.ObjectCreationExpression, Type: D, IsInvalid) (Syntax: 'new D { { 1, 2 } }')
Arguments(0) Arguments(0)
...@@ -2394,7 +2404,7 @@ public IEnumerator GetEnumerator() ...@@ -2394,7 +2404,7 @@ public IEnumerator GetEnumerator()
InConversion: null InConversion: null
OutConversion: null OutConversion: null
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'E coll4 = new E { 1 };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'E coll4 = new E { 1 };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'E coll4 = new E { 1 };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'coll4 = new E { 1 }')
Variables: Local_1: E coll4 Variables: Local_1: E coll4
Initializer: IObjectCreationExpression (Constructor: E..ctor()) (OperationKind.ObjectCreationExpression, Type: E, IsInvalid) (Syntax: 'new E { 1 }') Initializer: IObjectCreationExpression (Constructor: E..ctor()) (OperationKind.ObjectCreationExpression, Type: E, IsInvalid) (Syntax: 'new E { 1 }')
Arguments(0) Arguments(0)
...@@ -2515,6 +2525,8 @@ static void Main(string[] args) ...@@ -2515,6 +2525,8 @@ static void Main(string[] args)
Left: IInvalidExpression (OperationKind.InvalidExpression, Type: ?, IsInvalid) (Syntax: 'x') Left: IInvalidExpression (OperationKind.InvalidExpression, Type: ?, IsInvalid) (Syntax: 'x')
Children(1): Children(1):
IOperation: (OperationKind.None, IsInvalid) (Syntax: 'x') IOperation: (OperationKind.None, IsInvalid) (Syntax: 'x')
Children(1):
IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: Dictionary<System.Object, System.Object>, IsInvalid) (Syntax: 'Dictionary< ... ct, object>')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 1) (Syntax: '1') Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 1) (Syntax: '1')
"; ";
var expectedDiagnostics = new DiagnosticDescription[] { var expectedDiagnostics = new DiagnosticDescription[] {
...@@ -2923,13 +2935,14 @@ static void Main() ...@@ -2923,13 +2935,14 @@ static void Main()
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IObjectCreationExpression (Constructor: C..ctor()) (OperationKind.ObjectCreationExpression, Type: C, IsInvalid) (Syntax: 'new C { 1 }') IExpressionStatement (OperationKind.ExpressionStatement, IsInvalid) (Syntax: 'new C { 1 }')
Arguments(0) Expression: IObjectCreationExpression (Constructor: C..ctor()) (OperationKind.ObjectCreationExpression, Type: C, IsInvalid) (Syntax: 'new C { 1 }')
Initializer: IObjectOrCollectionInitializerExpression (OperationKind.ObjectOrCollectionInitializerExpression, Type: C, IsInvalid) (Syntax: '{ 1 }') Arguments(0)
Initializers(1): Initializer: IObjectOrCollectionInitializerExpression (OperationKind.ObjectOrCollectionInitializerExpression, Type: C, IsInvalid) (Syntax: '{ 1 }')
ICollectionElementInitializerExpression (AddMethod: void C.Add(System.Int32 i)) (IsDynamic: False) (OperationKind.CollectionElementInitializerExpression, Type: System.Void, IsInvalid) (Syntax: '1') Initializers(1):
Arguments(1): ICollectionElementInitializerExpression (AddMethod: void C.Add(System.Int32 i)) (IsDynamic: False) (OperationKind.CollectionElementInitializerExpression, Type: System.Void, IsInvalid) (Syntax: '1')
ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1') Arguments(1):
ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 1, IsInvalid) (Syntax: '1')
"; ";
var expectedDiagnostics = new DiagnosticDescription[] { var expectedDiagnostics = new DiagnosticDescription[] {
// CS0765: Partial methods with only a defining declaration or removed conditional methods cannot be used in expression trees // CS0765: Partial methods with only a defining declaration or removed conditional methods cannot be used in expression trees
......
...@@ -1133,39 +1133,44 @@ static void Main() ...@@ -1133,39 +1133,44 @@ static void Main()
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IBinaryOperatorExpression (BinaryOperatorKind.Or) (OperatorMethod: S S.op_BitwiseOr(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: '(a >> 10) + ... m <= o >= p') IArgument (ArgumentKind.Explicit, Matching Parameter: value) (OperationKind.Argument) (Syntax: '(a >> 10) + ... m <= o >= p')
Left: IBinaryOperatorExpression (BinaryOperatorKind.And) (OperatorMethod: S S.op_BitwiseAnd(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: '(a >> 10) + ... / e % f & g') IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Object) (Syntax: '(a >> 10) + ... m <= o >= p')
Left: IBinaryOperatorExpression (BinaryOperatorKind.Subtract) (OperatorMethod: S S.op_Subtraction(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: '(a >> 10) + ... * d / e % f') Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
Left: IBinaryOperatorExpression (BinaryOperatorKind.Add) (OperatorMethod: S S.op_Addition(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: '(a >> 10) + (b << 20)') Operand: IBinaryOperatorExpression (BinaryOperatorKind.Or) (OperatorMethod: S S.op_BitwiseOr(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: '(a >> 10) + ... m <= o >= p')
Left: IBinaryOperatorExpression (BinaryOperatorKind.RightShift) (OperatorMethod: S S.op_RightShift(S x, System.Int32 y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'a >> 10') Left: IBinaryOperatorExpression (BinaryOperatorKind.And) (OperatorMethod: S S.op_BitwiseAnd(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: '(a >> 10) + ... / e % f & g')
Left: ILocalReferenceExpression: a (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'a') Left: IBinaryOperatorExpression (BinaryOperatorKind.Subtract) (OperatorMethod: S S.op_Subtraction(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: '(a >> 10) + ... * d / e % f')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 10) (Syntax: '10') Left: IBinaryOperatorExpression (BinaryOperatorKind.Add) (OperatorMethod: S S.op_Addition(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: '(a >> 10) + (b << 20)')
Right: IBinaryOperatorExpression (BinaryOperatorKind.LeftShift) (OperatorMethod: S S.op_LeftShift(S x, System.Int32 y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'b << 20') Left: IBinaryOperatorExpression (BinaryOperatorKind.RightShift) (OperatorMethod: S S.op_RightShift(S x, System.Int32 y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'a >> 10')
Left: ILocalReferenceExpression: b (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'b') Left: ILocalReferenceExpression: a (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'a')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 20) (Syntax: '20') Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 10) (Syntax: '10')
Right: IBinaryOperatorExpression (BinaryOperatorKind.Remainder) (OperatorMethod: S S.op_Modulus(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'c * d / e % f') Right: IBinaryOperatorExpression (BinaryOperatorKind.LeftShift) (OperatorMethod: S S.op_LeftShift(S x, System.Int32 y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'b << 20')
Left: IBinaryOperatorExpression (BinaryOperatorKind.Divide) (OperatorMethod: S S.op_Division(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'c * d / e') Left: ILocalReferenceExpression: b (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'b')
Left: IBinaryOperatorExpression (BinaryOperatorKind.Multiply) (OperatorMethod: S S.op_Multiply(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'c * d') Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 20) (Syntax: '20')
Left: ILocalReferenceExpression: c (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'c') Right: IBinaryOperatorExpression (BinaryOperatorKind.Remainder) (OperatorMethod: S S.op_Modulus(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'c * d / e % f')
Right: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'd') Left: IBinaryOperatorExpression (BinaryOperatorKind.Divide) (OperatorMethod: S S.op_Division(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'c * d / e')
Right: ILocalReferenceExpression: e (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'e') Left: IBinaryOperatorExpression (BinaryOperatorKind.Multiply) (OperatorMethod: S S.op_Multiply(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'c * d')
Right: ILocalReferenceExpression: f (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'f') Left: ILocalReferenceExpression: c (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'c')
Right: ILocalReferenceExpression: g (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'g') Right: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'd')
Right: IBinaryOperatorExpression (BinaryOperatorKind.ExclusiveOr) (OperatorMethod: S S.op_ExclusiveOr(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'h ^ i == j ... m <= o >= p') Right: ILocalReferenceExpression: e (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'e')
Left: ILocalReferenceExpression: h (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'h') Right: ILocalReferenceExpression: f (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'f')
Right: IBinaryOperatorExpression (BinaryOperatorKind.NotEquals) (OperatorMethod: S S.op_Inequality(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'i == j != k ... m <= o >= p') Right: ILocalReferenceExpression: g (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'g')
Left: IBinaryOperatorExpression (BinaryOperatorKind.Equals) (OperatorMethod: S S.op_Equality(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'i == j') Right: IBinaryOperatorExpression (BinaryOperatorKind.ExclusiveOr) (OperatorMethod: S S.op_ExclusiveOr(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'h ^ i == j ... m <= o >= p')
Left: ILocalReferenceExpression: i (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'i') Left: ILocalReferenceExpression: h (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'h')
Right: ILocalReferenceExpression: j (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'j') Right: IBinaryOperatorExpression (BinaryOperatorKind.NotEquals) (OperatorMethod: S S.op_Inequality(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'i == j != k ... m <= o >= p')
Right: IBinaryOperatorExpression (BinaryOperatorKind.GreaterThanOrEqual) (OperatorMethod: S S.op_GreaterThanOrEqual(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'k < l > m <= o >= p') Left: IBinaryOperatorExpression (BinaryOperatorKind.Equals) (OperatorMethod: S S.op_Equality(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'i == j')
Left: IBinaryOperatorExpression (BinaryOperatorKind.LessThanOrEqual) (OperatorMethod: S S.op_LessThanOrEqual(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'k < l > m <= o') Left: ILocalReferenceExpression: i (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'i')
Left: IBinaryOperatorExpression (BinaryOperatorKind.GreaterThan) (OperatorMethod: S S.op_GreaterThan(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'k < l > m') Right: ILocalReferenceExpression: j (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'j')
Left: IBinaryOperatorExpression (BinaryOperatorKind.LessThan) (OperatorMethod: S S.op_LessThan(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'k < l') Right: IBinaryOperatorExpression (BinaryOperatorKind.GreaterThanOrEqual) (OperatorMethod: S S.op_GreaterThanOrEqual(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'k < l > m <= o >= p')
Left: ILocalReferenceExpression: k (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'k') Left: IBinaryOperatorExpression (BinaryOperatorKind.LessThanOrEqual) (OperatorMethod: S S.op_LessThanOrEqual(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'k < l > m <= o')
Right: ILocalReferenceExpression: l (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'l') Left: IBinaryOperatorExpression (BinaryOperatorKind.GreaterThan) (OperatorMethod: S S.op_GreaterThan(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'k < l > m')
Right: ILocalReferenceExpression: m (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'm') Left: IBinaryOperatorExpression (BinaryOperatorKind.LessThan) (OperatorMethod: S S.op_LessThan(S x, S y)) (OperationKind.BinaryOperatorExpression, Type: S) (Syntax: 'k < l')
Right: ILocalReferenceExpression: o (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'o') Left: ILocalReferenceExpression: k (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'k')
Right: ILocalReferenceExpression: p (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'p') Right: ILocalReferenceExpression: l (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'l')
Right: ILocalReferenceExpression: m (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'm')
Right: ILocalReferenceExpression: o (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'o')
Right: ILocalReferenceExpression: p (OperationKind.LocalReferenceExpression, Type: S) (Syntax: 'p')
InConversion: null
OutConversion: null
"; ";
var expectedDiagnostics = new DiagnosticDescription[] { var expectedDiagnostics = new DiagnosticDescription[] {
// CS0660: 'S' defines operator == or operator != but does not override Object.Equals(object o) // CS0660: 'S' defines operator == or operator != but does not override Object.Equals(object o)
...@@ -1680,13 +1685,13 @@ static void M(S s1, S s2, S? s3, S? s4, X<int> xint) ...@@ -1680,13 +1685,13 @@ static void M(S s1, S s2, S? s3, S? s4, X<int> xint)
Local_2: System.Int32? q Local_2: System.Int32? q
Local_3: System.Boolean[] b Local_3: System.Boolean[] b
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int x = xint + 123;') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int x = xint + 123;')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'int x = xint + 123;') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'x = xint + 123')
Variables: Local_1: System.Int32 x Variables: Local_1: System.Int32 x
Initializer: IBinaryOperatorExpression (BinaryOperatorKind.Add) (OperatorMethod: System.Int32 X<System.Int32>.op_Addition(X<System.Int32> x, System.Int32 y)) (OperationKind.BinaryOperatorExpression, Type: System.Int32) (Syntax: 'xint + 123') Initializer: IBinaryOperatorExpression (BinaryOperatorKind.Add) (OperatorMethod: System.Int32 X<System.Int32>.op_Addition(X<System.Int32> x, System.Int32 y)) (OperationKind.BinaryOperatorExpression, Type: System.Int32) (Syntax: 'xint + 123')
Left: IParameterReferenceExpression: xint (OperationKind.ParameterReferenceExpression, Type: X<System.Int32>) (Syntax: 'xint') Left: IParameterReferenceExpression: xint (OperationKind.ParameterReferenceExpression, Type: X<System.Int32>) (Syntax: 'xint')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 123) (Syntax: '123') Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 123) (Syntax: '123')
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int? q = ne ... new int?();') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'int? q = ne ... new int?();')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'int? q = ne ... new int?();') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'q = new Q<i ... new int?()')
Variables: Local_1: System.Int32? q Variables: Local_1: System.Int32? q
Initializer: IBinaryOperatorExpression (BinaryOperatorKind.Add, IsLifted) (OperatorMethod: System.Int32 Q<System.Int32>.op_Addition(Q<System.Int32> x, System.Int32 y)) (OperationKind.BinaryOperatorExpression, Type: System.Int32?) (Syntax: 'new Q<int>? ... new int?()') Initializer: IBinaryOperatorExpression (BinaryOperatorKind.Add, IsLifted) (OperatorMethod: System.Int32 Q<System.Int32>.op_Addition(Q<System.Int32> x, System.Int32 y)) (OperationKind.BinaryOperatorExpression, Type: System.Int32?) (Syntax: 'new Q<int>? ... new int?()')
Left: IObjectCreationExpression (Constructor: Q<System.Int32>?..ctor()) (OperationKind.ObjectCreationExpression, Type: Q<System.Int32>?) (Syntax: 'new Q<int>?()') Left: IObjectCreationExpression (Constructor: Q<System.Int32>?..ctor()) (OperationKind.ObjectCreationExpression, Type: Q<System.Int32>?) (Syntax: 'new Q<int>?()')
...@@ -1696,7 +1701,7 @@ static void M(S s1, S s2, S? s3, S? s4, X<int> xint) ...@@ -1696,7 +1701,7 @@ static void M(S s1, S s2, S? s3, S? s4, X<int> xint)
Arguments(0) Arguments(0)
Initializer: null Initializer: null
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'bool[] b = ... };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'bool[] b = ... };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'bool[] b = ... };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'b = ... }')
Variables: Local_1: System.Boolean[] b Variables: Local_1: System.Boolean[] b
Initializer: IArrayCreationExpression (Element Type: System.Boolean) (OperationKind.ArrayCreationExpression, Type: System.Boolean[]) (Syntax: '{ ... }') Initializer: IArrayCreationExpression (Element Type: System.Boolean) (OperationKind.ArrayCreationExpression, Type: System.Boolean[]) (Syntax: '{ ... }')
Dimension Sizes(1): Dimension Sizes(1):
......
...@@ -1015,7 +1015,9 @@ private static void VerifyModelForOutVarInNotExecutableCode(SemanticModel model, ...@@ -1015,7 +1015,9 @@ private static void VerifyModelForOutVarInNotExecutableCode(SemanticModel model,
var typeInfo = model.GetTypeInfo(decl); var typeInfo = model.GetTypeInfo(decl);
Assert.Equal(expectedType, typeInfo.Type); Assert.Equal(expectedType, typeInfo.Type);
Assert.Equal(expectedType, model.GetOperationInternal(decl)?.Type);
// skip cases where operation is not supported
AssertTypeFromOperation(model, expectedType, decl);
// Note: the following assertion is not, in general, correct for declaration expressions, // Note: the following assertion is not, in general, correct for declaration expressions,
// even though this helper is used to handle declaration expressions. // even though this helper is used to handle declaration expressions.
...@@ -1066,6 +1068,33 @@ private static void VerifyModelForOutVarInNotExecutableCode(SemanticModel model, ...@@ -1066,6 +1068,33 @@ private static void VerifyModelForOutVarInNotExecutableCode(SemanticModel model,
Assert.Null(model.GetDeclaredSymbol(decl)); Assert.Null(model.GetDeclaredSymbol(decl));
} }
private static void AssertTypeFromOperation(SemanticModel model, TypeSymbol expectedType, DeclarationExpressionSyntax decl)
{
var variableDeclarator = decl.Ancestors().OfType<VariableDeclaratorSyntax>().FirstOrDefault();
if (variableDeclarator?.ArgumentList?.FullSpan.Contains(decl.Span) == true)
{
// node in argument list is error case which operation doesn't support
return;
}
var foreachLoop = decl.Ancestors().OfType<ForEachVariableStatementSyntax>().FirstOrDefault();
if (foreachLoop?.Variable?.FullSpan.Contains(decl.Span) == true &&
foreachLoop?.Variable.IsKind(SyntaxKind.InvocationExpression) == true)
{
// invalid syntax case where operation is not supported
return;
}
var typeofExpression = decl.Ancestors().OfType<TypeOfExpressionSyntax>().FirstOrDefault();
if (typeofExpression?.Type?.FullSpan.Contains(decl.Span) == true)
{
// invalid syntax case where operation is not supported
return;
}
Assert.Equal(expectedType, model.GetOperationInternal(decl)?.Type);
}
private static void VerifyDataFlow(SemanticModel model, DeclarationExpressionSyntax decl, bool isDelegateCreation, bool isExecutableCode, IdentifierNameSyntax[] references, ISymbol symbol) private static void VerifyDataFlow(SemanticModel model, DeclarationExpressionSyntax decl, bool isDelegateCreation, bool isExecutableCode, IdentifierNameSyntax[] references, ISymbol symbol)
{ {
var dataFlowParent = decl.Parent.Parent.Parent as ExpressionSyntax; var dataFlowParent = decl.Parent.Parent.Parent as ExpressionSyntax;
...@@ -8650,7 +8679,7 @@ static bool TakeOutParam(int y, out int x) ...@@ -8650,7 +8679,7 @@ static bool TakeOutParam(int y, out int x)
var compilation = CreateCompilationWithMscorlib45(source, options: TestOptions.DebugExe, parseOptions: TestOptions.Regular); var compilation = CreateCompilationWithMscorlib45(source, options: TestOptions.DebugExe, parseOptions: TestOptions.Regular);
CompileAndVerify(compilation, expectedOutput: @"1 CompileAndVerify(compilation, expectedOutput: @"1
True"); True");
var tree = compilation.SyntaxTrees.Single(); var tree = compilation.SyntaxTrees.Single();
var model = compilation.GetSemanticModel(tree); var model = compilation.GetSemanticModel(tree);
...@@ -21605,7 +21634,7 @@ static class StaticType {} ...@@ -21605,7 +21634,7 @@ static class StaticType {}
Diagnostic(ErrorCode.ERR_VarDeclIsStaticClass, "StaticType").WithArguments("Cls.StaticType").WithLocation(6, 19) Diagnostic(ErrorCode.ERR_VarDeclIsStaticClass, "StaticType").WithArguments("Cls.StaticType").WithLocation(6, 19)
); );
} }
[Fact] [Fact]
public void GlobalCode_Catch_01() public void GlobalCode_Catch_01()
{ {
...@@ -32602,7 +32631,7 @@ void M<T>() ...@@ -32602,7 +32631,7 @@ void M<T>()
var varType = tree.GetRoot().DescendantNodes().OfType<IdentifierNameSyntax>().Where(id => id.Identifier.ValueText == "var").Single(); var varType = tree.GetRoot().DescendantNodes().OfType<IdentifierNameSyntax>().Where(id => id.Identifier.ValueText == "var").Single();
Assert.Equal("var", varType.ToString()); Assert.Equal("var", varType.ToString());
Assert.Null(model.GetAliasInfo(varType)); Assert.Null(model.GetAliasInfo(varType));
var decl = GetOutVarDeclaration(tree, "x"); var decl = GetOutVarDeclaration(tree, "x");
Assert.Equal("var", model.GetTypeInfo(decl).Type.ToTestDisplayString()); // crashes Assert.Equal("var", model.GetTypeInfo(decl).Type.ToTestDisplayString()); // crashes
...@@ -32638,7 +32667,7 @@ void M<T>() ...@@ -32638,7 +32667,7 @@ void M<T>()
var varType = tree.GetRoot().DescendantNodes().OfType<IdentifierNameSyntax>().Where(id => id.Identifier.ValueText == "var").Single(); var varType = tree.GetRoot().DescendantNodes().OfType<IdentifierNameSyntax>().Where(id => id.Identifier.ValueText == "var").Single();
Assert.Equal("var", varType.ToString()); Assert.Equal("var", varType.ToString());
Assert.Null(model.GetAliasInfo(varType)); Assert.Null(model.GetAliasInfo(varType));
var decl = GetOutVarDeclaration(tree, "x"); var decl = GetOutVarDeclaration(tree, "x");
Assert.Equal("var", model.GetTypeInfo(decl).Type.ToTestDisplayString()); // crashes Assert.Equal("var", model.GetTypeInfo(decl).Type.ToTestDisplayString()); // crashes
...@@ -32744,7 +32773,7 @@ void M<T>() ...@@ -32744,7 +32773,7 @@ void M<T>()
var varType = tree.GetRoot().DescendantNodes().OfType<IdentifierNameSyntax>().Where(id => id.Identifier.ValueText == "var").Single(); var varType = tree.GetRoot().DescendantNodes().OfType<IdentifierNameSyntax>().Where(id => id.Identifier.ValueText == "var").Single();
Assert.Equal("var", varType.ToString()); Assert.Equal("var", varType.ToString());
Assert.Null(model.GetAliasInfo(varType)); Assert.Null(model.GetAliasInfo(varType));
var decl = GetOutVarDeclaration(tree, "x"); var decl = GetOutVarDeclaration(tree, "x");
Assert.Equal("var", model.GetTypeInfo(decl).Type.ToTestDisplayString()); // crashes Assert.Equal("var", model.GetTypeInfo(decl).Type.ToTestDisplayString()); // crashes
...@@ -135,7 +135,7 @@ public int aa ...@@ -135,7 +135,7 @@ public int aa
Local_3: System.Object v3 Local_3: System.Object v3
Local_4: <empty anonymous type> v4 Local_4: <empty anonymous type> v4
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'object v1 = ... };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'object v1 = ... };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'object v1 = ... };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'v1 = new ... }')
Variables: Local_1: System.Object v1 Variables: Local_1: System.Object v1
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Object) (Syntax: 'new ... }') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Object) (Syntax: 'new ... }')
Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null)
...@@ -156,7 +156,7 @@ public int aa ...@@ -156,7 +156,7 @@ public int aa
Arguments(0) Arguments(0)
Initializer: null Initializer: null
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'object v2 = ... };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'object v2 = ... };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'object v2 = ... };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'v2 = new ... }')
Variables: Local_1: System.Object v2 Variables: Local_1: System.Object v2
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Object) (Syntax: 'new ... }') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Object) (Syntax: 'new ... }')
Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null)
...@@ -186,14 +186,14 @@ public int aa ...@@ -186,14 +186,14 @@ public int aa
IFieldReferenceExpression: ClassA.SSS ClassA.CCC (Static) (OperationKind.FieldReferenceExpression, Type: ClassA.SSS) (Syntax: 'ClassA.CCC') IFieldReferenceExpression: ClassA.SSS ClassA.CCC (Static) (OperationKind.FieldReferenceExpression, Type: ClassA.SSS) (Syntax: 'ClassA.CCC')
Instance Receiver: null Instance Receiver: null
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'object v3 = new { };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'object v3 = new { };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'object v3 = new { };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'v3 = new { }')
Variables: Local_1: System.Object v3 Variables: Local_1: System.Object v3
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Object) (Syntax: 'new { }') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Object) (Syntax: 'new { }')
Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null)
Operand: IAnonymousObjectCreationExpression (OperationKind.AnonymousObjectCreationExpression, Type: <empty anonymous type>) (Syntax: 'new { }') Operand: IAnonymousObjectCreationExpression (OperationKind.AnonymousObjectCreationExpression, Type: <empty anonymous type>) (Syntax: 'new { }')
Initializers(0) Initializers(0)
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var v4 = new { };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement) (Syntax: 'var v4 = new { };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'var v4 = new { };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration) (Syntax: 'v4 = new { }')
Variables: Local_1: <empty anonymous type> v4 Variables: Local_1: <empty anonymous type> v4
Initializer: IAnonymousObjectCreationExpression (OperationKind.AnonymousObjectCreationExpression, Type: <empty anonymous type>) (Syntax: 'new { }') Initializer: IAnonymousObjectCreationExpression (OperationKind.AnonymousObjectCreationExpression, Type: <empty anonymous type>) (Syntax: 'new { }')
Initializers(0) Initializers(0)
...@@ -1014,7 +1014,7 @@ public static void Test1(int x) ...@@ -1014,7 +1014,7 @@ public static void Test1(int x)
Locals: Local_1: System.Object v1 Locals: Local_1: System.Object v1
Local_2: System.Object v2 Local_2: System.Object v2
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'object v1 = ... };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'object v1 = ... };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'object v1 = ... };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'v1 = new ... }')
Variables: Local_1: System.Object v1 Variables: Local_1: System.Object v1
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Object, IsInvalid) (Syntax: 'new ... }') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Object, IsInvalid) (Syntax: 'new ... }')
Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null)
...@@ -1035,7 +1035,7 @@ public static void Test1(int x) ...@@ -1035,7 +1035,7 @@ public static void Test1(int x)
Right: IInvalidExpression (OperationKind.InvalidExpression, Type: SSS, IsInvalid) (Syntax: 'new SSS()') Right: IInvalidExpression (OperationKind.InvalidExpression, Type: SSS, IsInvalid) (Syntax: 'new SSS()')
Children(0) Children(0)
IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'object v2 = ... };') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'object v2 = ... };')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'object v2 = ... };') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'v2 = new ... }')
Variables: Local_1: System.Object v2 Variables: Local_1: System.Object v2
Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Object, IsInvalid) (Syntax: 'new ... }') Initializer: IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Object, IsInvalid) (Syntax: 'new ... }')
Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null) Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: True, IsUserDefined: False) (MethodSymbol: null)
...@@ -1131,14 +1131,11 @@ public static void Test1(int x) ...@@ -1131,14 +1131,11 @@ public static void Test1(int x)
} }
"; ";
string expectedOperationTree = @" string expectedOperationTree = @"
IUsingStatement (OperationKind.UsingStatement, IsInvalid) (Syntax: 'using (/*<b ... }') IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'var v1 = new { }')
Declaration: IVariableDeclarationStatement (1 declarations) (OperationKind.VariableDeclarationStatement, IsInvalid) (Syntax: 'var v1 = new { }') IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'v1 = new { }')
IVariableDeclaration (1 variables) (OperationKind.VariableDeclaration, IsInvalid) (Syntax: 'v1 = new { }') Variables: Local_1: <empty anonymous type> v1
Variables: Local_1: <empty anonymous type> v1 Initializer: IAnonymousObjectCreationExpression (OperationKind.AnonymousObjectCreationExpression, Type: <empty anonymous type>, IsInvalid) (Syntax: 'new { }')
Initializer: IAnonymousObjectCreationExpression (OperationKind.AnonymousObjectCreationExpression, Type: <empty anonymous type>, IsInvalid) (Syntax: 'new { }') Initializers(0)
Initializers(0)
Value: null
Body: IBlockStatement (0 statements) (OperationKind.BlockStatement) (Syntax: '{ ... }')
"; ";
var expectedDiagnostics = new DiagnosticDescription[] { var expectedDiagnostics = new DiagnosticDescription[] {
// CS1674: '<empty anonymous type>': type used in a using statement must be implicitly convertible to 'System.IDisposable' // CS1674: '<empty anonymous type>': type used in a using statement must be implicitly convertible to 'System.IDisposable'
......
...@@ -1100,7 +1100,7 @@ Namespace Microsoft.CodeAnalysis.Semantics ...@@ -1100,7 +1100,7 @@ Namespace Microsoft.CodeAnalysis.Semantics
Private Function CreateBoundGotoStatementOperation(boundGotoStatement As BoundGotoStatement) As IBranchStatement Private Function CreateBoundGotoStatementOperation(boundGotoStatement As BoundGotoStatement) As IBranchStatement
Dim target As ILabelSymbol = boundGotoStatement.Label Dim target As ILabelSymbol = boundGotoStatement.Label
Dim branchKind As BranchKind = branchKind.GoTo Dim branchKind As BranchKind = BranchKind.GoTo
Dim syntax As SyntaxNode = boundGotoStatement.Syntax Dim syntax As SyntaxNode = boundGotoStatement.Syntax
Dim type As ITypeSymbol = Nothing Dim type As ITypeSymbol = Nothing
Dim constantValue As [Optional](Of Object) = New [Optional](Of Object)() Dim constantValue As [Optional](Of Object) = New [Optional](Of Object)()
...@@ -1110,7 +1110,7 @@ Namespace Microsoft.CodeAnalysis.Semantics ...@@ -1110,7 +1110,7 @@ Namespace Microsoft.CodeAnalysis.Semantics
Private Function CreateBoundContinueStatementOperation(boundContinueStatement As BoundContinueStatement) As IBranchStatement Private Function CreateBoundContinueStatementOperation(boundContinueStatement As BoundContinueStatement) As IBranchStatement
Dim target As ILabelSymbol = boundContinueStatement.Label Dim target As ILabelSymbol = boundContinueStatement.Label
Dim branchKind As BranchKind = branchKind.Continue Dim branchKind As BranchKind = BranchKind.Continue
Dim syntax As SyntaxNode = boundContinueStatement.Syntax Dim syntax As SyntaxNode = boundContinueStatement.Syntax
Dim type As ITypeSymbol = Nothing Dim type As ITypeSymbol = Nothing
Dim constantValue As [Optional](Of Object) = New [Optional](Of Object)() Dim constantValue As [Optional](Of Object) = New [Optional](Of Object)()
...@@ -1120,7 +1120,7 @@ Namespace Microsoft.CodeAnalysis.Semantics ...@@ -1120,7 +1120,7 @@ Namespace Microsoft.CodeAnalysis.Semantics
Private Function CreateBoundExitStatementOperation(boundExitStatement As BoundExitStatement) As IBranchStatement Private Function CreateBoundExitStatementOperation(boundExitStatement As BoundExitStatement) As IBranchStatement
Dim target As ILabelSymbol = boundExitStatement.Label Dim target As ILabelSymbol = boundExitStatement.Label
Dim branchKind As BranchKind = branchKind.Break Dim branchKind As BranchKind = BranchKind.Break
Dim syntax As SyntaxNode = boundExitStatement.Syntax Dim syntax As SyntaxNode = boundExitStatement.Syntax
Dim type As ITypeSymbol = Nothing Dim type As ITypeSymbol = Nothing
Dim constantValue As [Optional](Of Object) = New [Optional](Of Object)() Dim constantValue As [Optional](Of Object) = New [Optional](Of Object)()
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册