提交 0bd479d6 编写于 作者: M Manish Vasani

Address PR feedback

1. Fix test issues
2. Remove IHasDynamicArgumentsExpression interface and move the Arguments property from it to individual IDynamicXXXExpression nodes.
3. Adjust the extension methods for GetArgumentName and GetArgumentRefKind accordingly.
上级 bf3005d0
......@@ -501,7 +501,6 @@ private IObjectCreationExpression CreateBoundObjectCreationExpressionOperation(B
private IDynamicObjectCreationExpression CreateBoundDynamicObjectCreationExpressionOperation(BoundDynamicObjectCreationExpression boundDynamicObjectCreationExpression)
{
ImmutableArray<ISymbol> applicableSymbols = StaticCast<ISymbol>.From(boundDynamicObjectCreationExpression.ApplicableMethods);
Lazy<ImmutableArray<IOperation>> arguments = new Lazy<ImmutableArray<IOperation>>(() => boundDynamicObjectCreationExpression.Arguments.SelectAsArray(n => Create(n)));
ImmutableArray<string> argumentNames = boundDynamicObjectCreationExpression.ArgumentNamesOpt.NullToEmpty();
ImmutableArray<RefKind> argumentRefKinds = boundDynamicObjectCreationExpression.ArgumentRefKindsOpt.NullToEmpty();
......@@ -510,13 +509,12 @@ private IDynamicObjectCreationExpression CreateBoundDynamicObjectCreationExpress
ITypeSymbol type = boundDynamicObjectCreationExpression.Type;
Optional<object> constantValue = ConvertToOptional(boundDynamicObjectCreationExpression.ConstantValue);
bool isImplicit = boundDynamicObjectCreationExpression.WasCompilerGenerated;
return new LazyDynamicObjectCreationExpression(applicableSymbols, arguments, argumentNames, argumentRefKinds, initializer, _semanticModel, syntax, type, constantValue, isImplicit);
return new LazyDynamicObjectCreationExpression(arguments, argumentNames, argumentRefKinds, initializer, _semanticModel, syntax, type, constantValue, isImplicit);
}
private IDynamicInvocationExpression CreateBoundDynamicInvocationExpressionOperation(BoundDynamicInvocation boundDynamicInvocation)
{
Lazy<IOperation> expression = new Lazy<IOperation>(() => Create(boundDynamicInvocation.Expression));
ImmutableArray<ISymbol> applicableSymbols = StaticCast<ISymbol>.From(boundDynamicInvocation.ApplicableMethods);
Lazy<ImmutableArray<IOperation>> arguments = new Lazy<ImmutableArray<IOperation>>(() => boundDynamicInvocation.Arguments.SelectAsArray(n => Create(n)));
ImmutableArray<string> argumentNames = boundDynamicInvocation.ArgumentNamesOpt.NullToEmpty();
ImmutableArray<RefKind> argumentRefKinds = boundDynamicInvocation.ArgumentRefKindsOpt.NullToEmpty();
......@@ -524,13 +522,12 @@ private IDynamicInvocationExpression CreateBoundDynamicInvocationExpressionOpera
ITypeSymbol type = boundDynamicInvocation.Type;
Optional<object> constantValue = ConvertToOptional(boundDynamicInvocation.ConstantValue);
bool isImplicit = boundDynamicInvocation.WasCompilerGenerated;
return new LazyDynamicInvocationExpression(expression, applicableSymbols, arguments, argumentNames, argumentRefKinds, _semanticModel, syntax, type, constantValue, isImplicit);
return new LazyDynamicInvocationExpression(expression, arguments, argumentNames, argumentRefKinds, _semanticModel, syntax, type, constantValue, isImplicit);
}
private IDynamicIndexerAccessExpression CreateBoundDynamicIndexerAccessExpressionOperation(BoundDynamicIndexerAccess boundDynamicIndexerAccess)
{
Lazy<IOperation> expression = new Lazy<IOperation>(() => Create(boundDynamicIndexerAccess.ReceiverOpt));
ImmutableArray<ISymbol> applicableSymbols = StaticCast<ISymbol>.From(boundDynamicIndexerAccess.ApplicableIndexers);
Lazy<ImmutableArray<IOperation>> arguments = new Lazy<ImmutableArray<IOperation>>(() => boundDynamicIndexerAccess.Arguments.SelectAsArray(n => Create(n)));
ImmutableArray<string> argumentNames = boundDynamicIndexerAccess.ArgumentNamesOpt.NullToEmpty();
ImmutableArray<RefKind> argumentRefKinds = boundDynamicIndexerAccess.ArgumentRefKindsOpt.NullToEmpty();
......@@ -538,7 +535,7 @@ private IDynamicIndexerAccessExpression CreateBoundDynamicIndexerAccessExpressio
ITypeSymbol type = boundDynamicIndexerAccess.Type;
Optional<object> constantValue = ConvertToOptional(boundDynamicIndexerAccess.ConstantValue);
bool isImplicit = boundDynamicIndexerAccess.WasCompilerGenerated;
return new LazyDynamicIndexerAccessExpression(expression, applicableSymbols, arguments, argumentNames, argumentRefKinds, _semanticModel, syntax, type, constantValue, isImplicit);
return new LazyDynamicIndexerAccessExpression(expression, arguments, argumentNames, argumentRefKinds, _semanticModel, syntax, type, constantValue, isImplicit);
}
private IObjectOrCollectionInitializerExpression CreateBoundObjectInitializerExpressionOperation(BoundObjectInitializerExpression boundObjectInitializerExpression)
......
// 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.Test.Utilities;
......@@ -26,8 +26,6 @@ void M(C c, dynamic d)
string expectedOperationTree = @"
IDynamicIndexerAccessExpression (OperationKind.DynamicIndexerAccessExpression, Type: dynamic) (Syntax: 'c[d]')
Expression: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: C) (Syntax: 'c')
ApplicableSymbols(1):
Symbol: System.Int32 C.this[System.Int32 i] { get; }
Arguments(1):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
ArgumentNames(0)
......@@ -58,9 +56,6 @@ void M(C c, dynamic d)
string expectedOperationTree = @"
IDynamicIndexerAccessExpression (OperationKind.DynamicIndexerAccessExpression, Type: dynamic) (Syntax: 'c[d]')
Expression: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: C) (Syntax: 'c')
ApplicableSymbols(2):
Symbol: System.Int32 C.this[System.Int32 i] { get; }
Symbol: System.Int32 C.this[System.Int64 i] { get; }
Arguments(1):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
ArgumentNames(0)
......@@ -92,9 +87,6 @@ void M(C c, dynamic d)
string expectedOperationTree = @"
IDynamicIndexerAccessExpression (OperationKind.DynamicIndexerAccessExpression, Type: dynamic) (Syntax: 'c[d, ch]')
Expression: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: C) (Syntax: 'c')
ApplicableSymbols(2):
Symbol: System.Int32 C.this[System.Int32 i, System.Char ch] { get; }
Symbol: System.Int32 C.this[System.Int64 i, System.Char ch] { get; }
Arguments(2):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
ILocalReferenceExpression: ch (OperationKind.LocalReferenceExpression, Type: System.Char) (Syntax: 'ch')
......@@ -126,9 +118,6 @@ void M(C c, dynamic d, dynamic e)
string expectedOperationTree = @"
IDynamicIndexerAccessExpression (OperationKind.DynamicIndexerAccessExpression, Type: dynamic) (Syntax: 'c[i: d, ch: e]')
Expression: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: C) (Syntax: 'c')
ApplicableSymbols(2):
Symbol: System.Int32 C.this[System.Int32 i, System.Char ch] { get; }
Symbol: System.Int32 C.this[System.Int64 i, System.Char ch] { get; }
Arguments(2):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
IParameterReferenceExpression: e (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'e')
......@@ -160,8 +149,6 @@ void M(C c, dynamic d, dynamic e)
string expectedOperationTree = @"
IDynamicIndexerAccessExpression (OperationKind.DynamicIndexerAccessExpression, Type: dynamic) (Syntax: 'c[i: d, ch: ref e]')
Expression: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: C) (Syntax: 'c')
ApplicableSymbols(1):
Symbol: System.Int32 C.this[System.Int32 i, ref dynamic ch] { get; }
Arguments(2):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
IParameterReferenceExpression: e (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'e')
......@@ -192,14 +179,11 @@ void M(dynamic d, int i)
{
var x = /*<bind>*/d[i]/*</bind>*/;
}
public int this[int i] => 0;
}
";
string expectedOperationTree = @"
IDynamicIndexerAccessExpression (OperationKind.DynamicIndexerAccessExpression, Type: dynamic) (Syntax: 'd[i]')
Expression: IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(1):
IParameterReferenceExpression: i (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'i')
ArgumentNames(0)
......@@ -221,8 +205,6 @@ void M(dynamic c, int i)
{
var x = /*<bind>*/c.M2[i]/*</bind>*/;
}
public int this[int i] => 0;
}
";
string expectedOperationTree = @"
......@@ -230,7 +212,6 @@ void M(dynamic c, int i)
Expression: IDynamicMemberReferenceExpression (Member Name: ""M2"", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: dynamic) (Syntax: 'c.M2')
Type Arguments(0)
Instance Receiver: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'c')
ApplicableSymbols(0)
Arguments(1):
IParameterReferenceExpression: i (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'i')
ArgumentNames(0)
......@@ -250,7 +231,7 @@ class C
{
dynamic M2 = null;
void M(dynamic c, int i)
void M(C c, int i)
{
var x = /*<bind>*/c.M2[i]/*</bind>*/;
}
......@@ -258,20 +239,14 @@ void M(dynamic c, int i)
";
string expectedOperationTree = @"
IDynamicIndexerAccessExpression (OperationKind.DynamicIndexerAccessExpression, Type: dynamic) (Syntax: 'c.M2[i]')
Expression: IDynamicMemberReferenceExpression (Member Name: ""M2"", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: dynamic) (Syntax: 'c.M2')
Type Arguments(0)
Instance Receiver: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'c')
ApplicableSymbols(0)
Expression: IFieldReferenceExpression: dynamic C.M2 (OperationKind.FieldReferenceExpression, Type: dynamic) (Syntax: 'c.M2')
Instance Receiver: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: C) (Syntax: 'c')
Arguments(1):
IParameterReferenceExpression: i (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'i')
ArgumentNames(0)
ArgumentRefKinds(0)
";
var expectedDiagnostics = new DiagnosticDescription[] {
// CS0414: The field 'C.M2' is assigned but its value is never used
// dynamic M2 = null;
Diagnostic(ErrorCode.WRN_UnreferencedFieldAssg, "M2").WithArguments("C.M2").WithLocation(4, 13)
};
var expectedDiagnostics = DiagnosticDescription.None;
VerifyOperationTreeAndDiagnosticsForTest<ElementAccessExpressionSyntax>(source, expectedOperationTree, expectedDiagnostics);
}
......@@ -296,9 +271,6 @@ void M(C c, dynamic d)
string expectedOperationTree = @"
IDynamicIndexerAccessExpression (OperationKind.DynamicIndexerAccessExpression, Type: dynamic) (Syntax: 'c[ref i, c: d]')
Expression: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: C) (Syntax: 'c')
ApplicableSymbols(2):
Symbol: System.Int32 C.this[ref System.Int32 i, System.Char c] { get; }
Symbol: System.Int32 C.this[ref System.Int32 i, System.Int64 c] { get; }
Arguments(2):
ILocalReferenceExpression: i (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'i')
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
......@@ -342,8 +314,6 @@ public void M(C c)
string expectedOperationTree = @"
IDynamicIndexerAccessExpression (OperationKind.DynamicIndexerAccessExpression, Type: dynamic, IsInvalid) (Syntax: 'c[delegate { }, y]')
Expression: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: C) (Syntax: 'c')
ApplicableSymbols(1):
Symbol: System.Int32 C.this[System.Action a, System.Action y] { get; }
Arguments(2):
IAnonymousFunctionExpression (Symbol: lambda expression) (OperationKind.AnonymousFunctionExpression, Type: null, IsInvalid) (Syntax: 'delegate { }')
IBlockStatement (1 statements) (OperationKind.BlockStatement, IsInvalid) (Syntax: '{ }')
......
......@@ -29,8 +29,6 @@ public void M2(int i)
string expectedOperationTree = @"
IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: dynamic) (Syntax: 'c.M2(d)')
Expression: IOperation: (OperationKind.None) (Syntax: 'c.M2')
ApplicableSymbols(1):
Symbol: void C.M2(System.Int32 i)
Arguments(1):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
ArgumentNames(0)
......@@ -65,9 +63,6 @@ public void M2(long i)
string expectedOperationTree = @"
IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: dynamic) (Syntax: 'c.M2(d)')
Expression: IOperation: (OperationKind.None) (Syntax: 'c.M2')
ApplicableSymbols(2):
Symbol: void C.M2(System.Int32 i)
Symbol: void C.M2(System.Int64 i)
Arguments(1):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
ArgumentNames(0)
......@@ -103,9 +98,6 @@ public void M2(long i, char ch)
string expectedOperationTree = @"
IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: dynamic) (Syntax: 'c.M2(d, ch)')
Expression: IOperation: (OperationKind.None) (Syntax: 'c.M2')
ApplicableSymbols(2):
Symbol: void C.M2(System.Int32 i, System.Char ch)
Symbol: void C.M2(System.Int64 i, System.Char ch)
Arguments(2):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
ILocalReferenceExpression: ch (OperationKind.LocalReferenceExpression, Type: System.Char) (Syntax: 'ch')
......@@ -141,9 +133,6 @@ public void M2(long i, char ch)
string expectedOperationTree = @"
IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: dynamic) (Syntax: 'c.M2(i: d, ch: e)')
Expression: IOperation: (OperationKind.None) (Syntax: 'c.M2')
ApplicableSymbols(2):
Symbol: void C.M2(System.Int32 i, System.Char ch)
Symbol: void C.M2(System.Int64 i, System.Char ch)
Arguments(2):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
IParameterReferenceExpression: e (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'e')
......@@ -179,8 +168,6 @@ public void M2(ref object i, out int j, char c)
string expectedOperationTree = @"
IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: dynamic) (Syntax: 'c.M2(ref d, out k, e)')
Expression: IOperation: (OperationKind.None) (Syntax: 'c.M2')
ApplicableSymbols(1):
Symbol: void C.M2(ref System.Object i, out System.Int32 j, System.Char c)
Arguments(3):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'd')
ILocalReferenceExpression: k (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'k')
......@@ -216,8 +203,6 @@ void M(dynamic i)
IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: dynamic) (Syntax: 'F(i)')
Expression: IFieldReferenceExpression: System.Action<System.Object> C.F (OperationKind.FieldReferenceExpression, Type: System.Action<System.Object>) (Syntax: 'F')
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C) (Syntax: 'F')
ApplicableSymbols(1):
Symbol: void System.Action<System.Object>.Invoke(System.Object obj)
Arguments(1):
IParameterReferenceExpression: i (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'i')
ArgumentNames(0)
......@@ -248,7 +233,6 @@ void M(dynamic d, int i)
string expectedOperationTree = @"
IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: dynamic) (Syntax: 'd(i)')
Expression: IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(1):
IParameterReferenceExpression: i (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'i')
ArgumentNames(0)
......@@ -277,7 +261,6 @@ void M(dynamic c, int i)
Expression: IDynamicMemberReferenceExpression (Member Name: ""M2"", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: dynamic) (Syntax: 'c.M2')
Type Arguments(0)
Instance Receiver: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'c')
ApplicableSymbols(0)
Arguments(1):
IParameterReferenceExpression: i (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'i')
ArgumentNames(0)
......@@ -306,7 +289,6 @@ void M(C c, int i)
IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: dynamic) (Syntax: 'c.M2(i)')
Expression: IFieldReferenceExpression: dynamic C.M2 (OperationKind.FieldReferenceExpression, Type: dynamic) (Syntax: 'c.M2')
Instance Receiver: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: C) (Syntax: 'c')
ApplicableSymbols(0)
Arguments(1):
IParameterReferenceExpression: i (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'i')
ArgumentNames(0)
......@@ -342,9 +324,6 @@ public void M2(ref int i, long c)
string expectedOperationTree = @"
IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: dynamic) (Syntax: 'c.M2(ref i, c: d)')
Expression: IOperation: (OperationKind.None) (Syntax: 'c.M2')
ApplicableSymbols(2):
Symbol: void C.M2(ref System.Int32 i, System.Char c)
Symbol: void C.M2(ref System.Int32 i, System.Int64 c)
Arguments(2):
ILocalReferenceExpression: i (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'i')
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
......@@ -383,8 +362,6 @@ public void M2(Action a, Action y)
string expectedOperationTree = @"
IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: dynamic, IsInvalid) (Syntax: 'c.M2(delegate { }, y)')
Expression: IOperation: (OperationKind.None) (Syntax: 'c.M2')
ApplicableSymbols(1):
Symbol: void C.M2(System.Action a, System.Action y)
Arguments(2):
IAnonymousFunctionExpression (Symbol: lambda expression) (OperationKind.AnonymousFunctionExpression, Type: null, IsInvalid) (Syntax: 'delegate { }')
IBlockStatement (1 statements) (OperationKind.BlockStatement, IsInvalid) (Syntax: '{ }')
......
// 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.Test.Utilities;
......@@ -94,7 +94,6 @@ static void M1()
Expression: IDynamicMemberReferenceExpression (Member Name: ""GetValue"", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: dynamic) (Syntax: 'd.GetValue')
Type Arguments(0)
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: dynamic) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -126,7 +125,6 @@ static void M1()
Expression: IDynamicMemberReferenceExpression (Member Name: """", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: dynamic, IsInvalid) (Syntax: 'd.')
Type Arguments(0)
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: dynamic) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -162,7 +160,6 @@ static void M1()
Expression: IDynamicMemberReferenceExpression (Member Name: ""GetValue"", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: dynamic) (Syntax: 'd.GetValue')
Type Arguments(0)
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: dynamic) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -199,7 +196,6 @@ static void M1()
Type Arguments(1):
Symbol: System.Int32
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: dynamic) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -233,7 +229,6 @@ static void M1()
Symbol: System.Int32
Symbol: ConsoleApp1.C1
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: dynamic) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -303,7 +298,6 @@ static void M1()
Symbol: System.Int32
Symbol: ?
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: dynamic) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -371,11 +365,9 @@ Type Arguments(0)
Expression: IDynamicMemberReferenceExpression (Member Name: ""Method1"", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: dynamic) (Syntax: 'd.Method1')
Type Arguments(0)
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: dynamic) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -412,7 +404,6 @@ Type Arguments(0)
Type Arguments(1):
Symbol: System.Int32
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: dynamic) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......
......@@ -28,8 +28,6 @@ void M(dynamic d)
";
string expectedOperationTree = @"
IDynamicObjectCreationExpression (OperationKind.DynamicObjectCreationExpression, Type: C) (Syntax: 'new C(d)')
ApplicableSymbols(1):
Symbol: C..ctor(System.Int32 i)
Arguments(1):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
ArgumentNames(0)
......@@ -64,9 +62,6 @@ void M(dynamic d)
";
string expectedOperationTree = @"
IDynamicObjectCreationExpression (OperationKind.DynamicObjectCreationExpression, Type: C) (Syntax: 'new C(d)')
ApplicableSymbols(2):
Symbol: C..ctor(System.Int32 i)
Symbol: C..ctor(System.Int64 i)
Arguments(1):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
ArgumentNames(0)
......@@ -102,9 +97,6 @@ void M(dynamic d)
";
string expectedOperationTree = @"
IDynamicObjectCreationExpression (OperationKind.DynamicObjectCreationExpression, Type: C) (Syntax: 'new C(d, c)')
ApplicableSymbols(2):
Symbol: C..ctor(System.Int32 i, System.Char c)
Symbol: C..ctor(System.Int64 i, System.Char c)
Arguments(2):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
ILocalReferenceExpression: c (OperationKind.LocalReferenceExpression, Type: System.Char) (Syntax: 'c')
......@@ -140,9 +132,6 @@ void M(dynamic d, dynamic e)
";
string expectedOperationTree = @"
IDynamicObjectCreationExpression (OperationKind.DynamicObjectCreationExpression, Type: C) (Syntax: 'new C(i: d, c: e)')
ApplicableSymbols(2):
Symbol: C..ctor(System.Int32 i, System.Char c)
Symbol: C..ctor(System.Int64 i, System.Char c)
Arguments(2):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
IParameterReferenceExpression: e (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'e')
......@@ -178,8 +167,6 @@ void M(object d, dynamic e)
";
string expectedOperationTree = @"
IDynamicObjectCreationExpression (OperationKind.DynamicObjectCreationExpression, Type: C) (Syntax: 'new C(ref d, out k, e)')
ApplicableSymbols(1):
Symbol: C..ctor(ref System.Object i, out System.Int32 j, System.Char c)
Arguments(3):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'd')
ILocalReferenceExpression: k (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'k')
......@@ -217,8 +204,6 @@ void M(dynamic d)
";
string expectedOperationTree = @"
IDynamicObjectCreationExpression (OperationKind.DynamicObjectCreationExpression, Type: C) (Syntax: 'new C(d) { X = 0 }')
ApplicableSymbols(1):
Symbol: C..ctor(System.Char c)
Arguments(1):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
ArgumentNames(0)
......@@ -261,9 +246,6 @@ void M(dynamic d)
";
string expectedOperationTree = @"
IDynamicObjectCreationExpression (OperationKind.DynamicObjectCreationExpression, Type: C) (Syntax: 'new C(ref i ... ) { X = 0 }')
ApplicableSymbols(2):
Symbol: C..ctor(ref System.Int32 i, System.Char c)
Symbol: C..ctor(ref System.Int32 i, System.Int64 c)
Arguments(2):
ILocalReferenceExpression: i (OperationKind.LocalReferenceExpression, Type: System.Int32) (Syntax: 'i')
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
......@@ -307,8 +289,6 @@ public C(Action a, Action y)
";
string expectedOperationTree = @"
IDynamicObjectCreationExpression (OperationKind.DynamicObjectCreationExpression, Type: C, IsInvalid) (Syntax: 'new C(delegate { }, y)')
ApplicableSymbols(1):
Symbol: C..ctor(System.Action a, System.Action y)
Arguments(2):
IAnonymousFunctionExpression (Symbol: lambda expression) (OperationKind.AnonymousFunctionExpression, Type: null, IsInvalid) (Syntax: 'delegate { }')
IBlockStatement (1 statements) (OperationKind.BlockStatement, IsInvalid) (Syntax: '{ }')
......
......@@ -1282,7 +1282,6 @@ Type Arguments(0)
Expression: IDynamicMemberReferenceExpression (Member Name: ""Initialize"", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: dynamic) (Syntax: 'd.Initialize')
Type Arguments(0)
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: dynamic) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(1):
ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 5) (Syntax: '5')
ArgumentNames(0)
......@@ -1293,7 +1292,6 @@ Type Arguments(0)
Expression: IDynamicMemberReferenceExpression (Member Name: ""Next"", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: dynamic) (Syntax: 'd.Next')
Type Arguments(0)
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: dynamic) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......
......@@ -952,7 +952,6 @@ class C
Expression: IDynamicMemberReferenceExpression (Member Name: ""GetType"", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: dynamic) (Syntax: 'd.GetType')
Type Arguments(0)
Instance Receiver: IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......
......@@ -546,7 +546,6 @@ public void M(dynamic d, int x)
Variables: Local_1: dynamic y
Initializer: IDynamicIndexerAccessExpression (OperationKind.DynamicIndexerAccessExpression, Type: dynamic) (Syntax: 'd[x]')
Expression: IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(1):
IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'x')
ArgumentNames(0)
......@@ -575,7 +574,6 @@ public void M(dynamic x, int y)
Expression: IDynamicMemberReferenceExpression (Member Name: ""M"", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: dynamic) (Syntax: 'x.M')
Type Arguments(0)
Instance Receiver: IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'x')
ApplicableSymbols(0)
Arguments(1):
IParameterReferenceExpression: y (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'y')
ArgumentNames(0)
......@@ -602,7 +600,6 @@ public void M(dynamic x, int y)
string expectedOperationTree = @"
IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: dynamic) (Syntax: 'x(y)')
Expression: IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'x')
ApplicableSymbols(0)
Arguments(1):
IParameterReferenceExpression: y (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'y')
ArgumentNames(0)
......@@ -631,9 +628,6 @@ public void M(dynamic x)
";
string expectedOperationTree = @"
IDynamicObjectCreationExpression (OperationKind.DynamicObjectCreationExpression, Type: Class) (Syntax: 'new Class(x)')
ApplicableSymbols(2):
Symbol: Class..ctor(Class x)
Symbol: Class..ctor(System.String x)
Arguments(1):
IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: dynamic) (Syntax: 'x')
ArgumentNames(0)
......
......@@ -759,7 +759,6 @@ Type Arguments(0)
Expression: IDynamicMemberReferenceExpression (Member Name: ""Next"", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: dynamic) (Syntax: 'd.Next')
Type Arguments(0)
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: dynamic) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......
......@@ -4549,22 +4549,17 @@ internal sealed partial class LazyTypeParameterObjectCreationExpression : BaseTy
/// <remarks>
/// Represents a dynamically bound new/New expression.
/// </remarks>
internal abstract partial class HasDynamicArgumentsExpression : Operation, IHasDynamicArgumentsExpression
internal abstract partial class HasDynamicArgumentsExpression : Operation
{
protected HasDynamicArgumentsExpression(OperationKind operationKind, ImmutableArray<ISymbol> applicableSymbols, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
protected HasDynamicArgumentsExpression(OperationKind operationKind, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(operationKind, semanticModel, syntax, type, constantValue, isImplicit)
{
ApplicableSymbols = applicableSymbols;
ArgumentNames = argumentNames;
ArgumentRefKinds = argumentRefKinds;
}
protected abstract ImmutableArray<IOperation> ArgumentsImpl { get; }
/// <summary>
/// List of applicable symbols that are dynamically bound.
/// </summary>
public ImmutableArray<ISymbol> ApplicableSymbols { get; }
/// <summary>
/// Optional argument names for named arguments.
/// </summary>
......@@ -4584,8 +4579,8 @@ internal abstract partial class HasDynamicArgumentsExpression : Operation, IHasD
/// </remarks>
internal abstract partial class BaseDynamicObjectCreationExpression : HasDynamicArgumentsExpression, IDynamicObjectCreationExpression
{
public BaseDynamicObjectCreationExpression(ImmutableArray<ISymbol> applicableSymbols, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(OperationKind.DynamicObjectCreationExpression, applicableSymbols, argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
public BaseDynamicObjectCreationExpression(ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(OperationKind.DynamicObjectCreationExpression, argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
{
}
protected abstract IObjectOrCollectionInitializerExpression InitializerImpl { get; }
......@@ -4618,10 +4613,10 @@ public override void Accept(OperationVisitor visitor)
/// <remarks>
/// Represents a dynamically bound new/New expression.
/// </remarks>
internal sealed partial class DynamicObjectCreationExpression : BaseDynamicObjectCreationExpression, IHasDynamicArgumentsExpression, IDynamicObjectCreationExpression
internal sealed partial class DynamicObjectCreationExpression : BaseDynamicObjectCreationExpression, IDynamicObjectCreationExpression
{
public DynamicObjectCreationExpression(ImmutableArray<ISymbol> applicableSymbols, ImmutableArray<IOperation> arguments, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, IObjectOrCollectionInitializerExpression initializer, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(applicableSymbols, argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
public DynamicObjectCreationExpression(ImmutableArray<IOperation> arguments, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, IObjectOrCollectionInitializerExpression initializer, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
{
ArgumentsImpl = arguments;
InitializerImpl = initializer;
......@@ -4633,12 +4628,12 @@ internal sealed partial class DynamicObjectCreationExpression : BaseDynamicObjec
/// <remarks>
/// Represents a dynamically bound new/New expression.
/// </remarks>
internal sealed partial class LazyDynamicObjectCreationExpression : BaseDynamicObjectCreationExpression, IHasDynamicArgumentsExpression, IDynamicObjectCreationExpression
internal sealed partial class LazyDynamicObjectCreationExpression : BaseDynamicObjectCreationExpression, IDynamicObjectCreationExpression
{
private readonly Lazy<IObjectOrCollectionInitializerExpression> _lazyInitializer;
private readonly Lazy<ImmutableArray<IOperation>> _lazyArguments;
public LazyDynamicObjectCreationExpression(ImmutableArray<ISymbol> applicableSymbols, Lazy<ImmutableArray<IOperation>> arguments, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, Lazy<IObjectOrCollectionInitializerExpression> initializer, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(applicableSymbols, argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
public LazyDynamicObjectCreationExpression(Lazy<ImmutableArray<IOperation>> arguments, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, Lazy<IObjectOrCollectionInitializerExpression> initializer, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
{
_lazyArguments = arguments ?? throw new System.ArgumentNullException(nameof(arguments));
_lazyInitializer = initializer ?? throw new System.ArgumentNullException(nameof(initializer));
......@@ -4652,8 +4647,8 @@ internal sealed partial class LazyDynamicObjectCreationExpression : BaseDynamicO
/// </remarks>
internal abstract partial class BaseDynamicInvocationExpression : HasDynamicArgumentsExpression, IDynamicInvocationExpression
{
public BaseDynamicInvocationExpression(ImmutableArray<ISymbol> applicableSymbols, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(OperationKind.DynamicInvocationExpression, applicableSymbols, argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
public BaseDynamicInvocationExpression(ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(OperationKind.DynamicInvocationExpression, argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
{
}
protected abstract IOperation ExpressionImpl { get; }
......@@ -4686,10 +4681,10 @@ public override void Accept(OperationVisitor visitor)
/// <remarks>
/// Represents a dynamically bound invocation expression in C# and late bound invocation in VB.
/// </remarks>
internal sealed partial class DynamicInvocationExpression : BaseDynamicInvocationExpression, IHasDynamicArgumentsExpression, IDynamicInvocationExpression
internal sealed partial class DynamicInvocationExpression : BaseDynamicInvocationExpression, IDynamicInvocationExpression
{
public DynamicInvocationExpression(IOperation expression, ImmutableArray<ISymbol> applicableSymbols, ImmutableArray<IOperation> arguments, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(applicableSymbols, argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
public DynamicInvocationExpression(IOperation expression, ImmutableArray<IOperation> arguments, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
{
ExpressionImpl = expression;
ArgumentsImpl = arguments;
......@@ -4701,12 +4696,12 @@ internal sealed partial class DynamicInvocationExpression : BaseDynamicInvocatio
/// <remarks>
/// Represents a dynamically bound invocation expression in C# and late bound invocation in VB.
/// </remarks>
internal sealed partial class LazyDynamicInvocationExpression : BaseDynamicInvocationExpression, IHasDynamicArgumentsExpression, IDynamicInvocationExpression
internal sealed partial class LazyDynamicInvocationExpression : BaseDynamicInvocationExpression, IDynamicInvocationExpression
{
private readonly Lazy<IOperation> _lazyExpression;
private readonly Lazy<ImmutableArray<IOperation>> _lazyArguments;
public LazyDynamicInvocationExpression(Lazy<IOperation> expression, ImmutableArray<ISymbol> applicableSymbols, Lazy<ImmutableArray<IOperation>> arguments, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(applicableSymbols, argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
public LazyDynamicInvocationExpression(Lazy<IOperation> expression, Lazy<ImmutableArray<IOperation>> arguments, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
{
_lazyExpression = expression ?? throw new System.ArgumentNullException(nameof(expression));
_lazyArguments = arguments ?? throw new System.ArgumentNullException(nameof(arguments));
......@@ -4720,8 +4715,8 @@ internal sealed partial class LazyDynamicInvocationExpression : BaseDynamicInvoc
/// </remarks>
internal abstract partial class BaseDynamicIndexerAccessExpression : HasDynamicArgumentsExpression, IDynamicIndexerAccessExpression
{
public BaseDynamicIndexerAccessExpression(ImmutableArray<ISymbol> applicableSymbols, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(OperationKind.DynamicIndexerAccessExpression, applicableSymbols, argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
public BaseDynamicIndexerAccessExpression(ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(OperationKind.DynamicIndexerAccessExpression, argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
{
}
protected abstract IOperation ExpressionImpl { get; }
......@@ -4754,10 +4749,10 @@ public override void Accept(OperationVisitor visitor)
/// <remarks>
/// Represents a dynamic indexer expression in C#.
/// </remarks>
internal sealed partial class DynamicIndexerAccessExpression : BaseDynamicIndexerAccessExpression, IHasDynamicArgumentsExpression, IDynamicIndexerAccessExpression
internal sealed partial class DynamicIndexerAccessExpression : BaseDynamicIndexerAccessExpression, IDynamicIndexerAccessExpression
{
public DynamicIndexerAccessExpression(IOperation expression, ImmutableArray<ISymbol> applicableSymbols, ImmutableArray<IOperation> arguments, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(applicableSymbols, argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
public DynamicIndexerAccessExpression(IOperation expression, ImmutableArray<IOperation> arguments, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
{
ExpressionImpl = expression;
ArgumentsImpl = arguments;
......@@ -4769,12 +4764,12 @@ internal sealed partial class DynamicIndexerAccessExpression : BaseDynamicIndexe
/// <remarks>
/// Represents a dynamic indexer expression in C#.
/// </remarks>
internal sealed partial class LazyDynamicIndexerAccessExpression : BaseDynamicIndexerAccessExpression, IHasDynamicArgumentsExpression, IDynamicIndexerAccessExpression
internal sealed partial class LazyDynamicIndexerAccessExpression : BaseDynamicIndexerAccessExpression, IDynamicIndexerAccessExpression
{
private readonly Lazy<IOperation> _lazyExpression;
private readonly Lazy<ImmutableArray<IOperation>> _lazyArguments;
public LazyDynamicIndexerAccessExpression(Lazy<IOperation> expression, ImmutableArray<ISymbol> applicableSymbols, Lazy<ImmutableArray<IOperation>> arguments, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(applicableSymbols, argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
public LazyDynamicIndexerAccessExpression(Lazy<IOperation> expression, Lazy<ImmutableArray<IOperation>> arguments, ImmutableArray<string> argumentNames, ImmutableArray<RefKind> argumentRefKinds, SemanticModel semanticModel, SyntaxNode syntax, ITypeSymbol type, Optional<object> constantValue, bool isImplicit) :
base(argumentNames, argumentRefKinds, semanticModel, syntax, type, constantValue, isImplicit)
{
_lazyExpression = expression ?? throw new System.ArgumentNullException(nameof(expression));
_lazyArguments = arguments ?? throw new System.ArgumentNullException(nameof(arguments));
......
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Immutable;
namespace Microsoft.CodeAnalysis.Semantics
{
/// <summary>
......@@ -9,11 +11,16 @@ namespace Microsoft.CodeAnalysis.Semantics
/// This interface is reserved for implementation by its associated APIs. We reserve the right to
/// change it in the future.
/// </remarks>
public interface IDynamicIndexerAccessExpression : IHasDynamicArgumentsExpression
public interface IDynamicIndexerAccessExpression : IOperation
{
/// <summary>
/// Dynamically indexed expression.
/// </summary>
IOperation Expression { get; }
/// <summary>
/// Dynamically bound arguments, excluding the instance argument.
/// </summary>
ImmutableArray<IOperation> Arguments { get; }
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Immutable;
namespace Microsoft.CodeAnalysis.Semantics
{
/// <summary>
......@@ -9,11 +11,16 @@ namespace Microsoft.CodeAnalysis.Semantics
/// This interface is reserved for implementation by its associated APIs. We reserve the right to
/// change it in the future.
/// </remarks>
public interface IDynamicInvocationExpression : IHasDynamicArgumentsExpression
public interface IDynamicInvocationExpression : IOperation
{
/// <summary>
/// Dynamically or late bound expression.
/// </summary>
IOperation Expression { get; }
/// <summary>
/// Dynamically bound arguments, excluding the instance argument.
/// </summary>
ImmutableArray<IOperation> Arguments { get; }
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Immutable;
namespace Microsoft.CodeAnalysis.Semantics
{
/// <summary>
......@@ -9,11 +11,16 @@ namespace Microsoft.CodeAnalysis.Semantics
/// This interface is reserved for implementation by its associated APIs. We reserve the right to
/// change it in the future.
/// </remarks>
public interface IDynamicObjectCreationExpression : IHasDynamicArgumentsExpression
public interface IDynamicObjectCreationExpression : IOperation
{
/// <summary>
/// Object or collection initializer, if any.
/// </summary>
IObjectOrCollectionInitializerExpression Initializer { get; }
/// <summary>
/// Dynamically bound arguments, excluding the instance argument.
/// </summary>
ImmutableArray<IOperation> Arguments { get; }
}
}
// Copyright (c) Microsoft. All Rights Reserved. Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Immutable;
namespace Microsoft.CodeAnalysis.Semantics
{
/// <remarks>
/// This interface is reserved for implementation by its associated APIs. We reserve the right to
/// change it in the future.
/// </remarks>
public interface IHasDynamicArgumentsExpression : IOperation
{
/// <summary>
/// List of applicable symbols that are dynamically bound.
/// </summary>
ImmutableArray<ISymbol> ApplicableSymbols { get; }
/// <summary>
/// Dynamically bound arguments, excluding the instance argument.
/// </summary>
ImmutableArray<IOperation> Arguments { get; }
}
}
......@@ -397,17 +397,17 @@ public override IOperation VisitDynamicMemberReferenceExpression(IDynamicMemberR
public override IOperation VisitDynamicObjectCreationExpression(IDynamicObjectCreationExpression operation, object argument)
{
return new DynamicObjectCreationExpression(operation.ApplicableSymbols, VisitArray(operation.Arguments), ((HasDynamicArgumentsExpression)operation).ArgumentNames, ((HasDynamicArgumentsExpression)operation).ArgumentRefKinds, Visit(operation.Initializer), ((Operation)operation).SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue, operation.IsImplicit);
return new DynamicObjectCreationExpression(VisitArray(operation.Arguments), ((HasDynamicArgumentsExpression)operation).ArgumentNames, ((HasDynamicArgumentsExpression)operation).ArgumentRefKinds, Visit(operation.Initializer), ((Operation)operation).SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue, operation.IsImplicit);
}
public override IOperation VisitDynamicInvocationExpression(IDynamicInvocationExpression operation, object argument)
{
return new DynamicInvocationExpression(Visit(operation.Expression), operation.ApplicableSymbols, VisitArray(operation.Arguments), ((HasDynamicArgumentsExpression)operation).ArgumentNames, ((HasDynamicArgumentsExpression)operation).ArgumentRefKinds, ((Operation)operation).SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue, operation.IsImplicit);
return new DynamicInvocationExpression(Visit(operation.Expression), VisitArray(operation.Arguments), ((HasDynamicArgumentsExpression)operation).ArgumentNames, ((HasDynamicArgumentsExpression)operation).ArgumentRefKinds, ((Operation)operation).SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue, operation.IsImplicit);
}
public override IOperation VisitDynamicIndexerAccessExpression(IDynamicIndexerAccessExpression operation, object argument)
{
return new DynamicIndexerAccessExpression(Visit(operation.Expression), operation.ApplicableSymbols, VisitArray(operation.Arguments), ((HasDynamicArgumentsExpression)operation).ArgumentNames, ((HasDynamicArgumentsExpression)operation).ArgumentRefKinds, ((Operation)operation).SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue, operation.IsImplicit);
return new DynamicIndexerAccessExpression(Visit(operation.Expression), VisitArray(operation.Arguments), ((HasDynamicArgumentsExpression)operation).ArgumentNames, ((HasDynamicArgumentsExpression)operation).ArgumentRefKinds, ((Operation)operation).SemanticModel, operation.Syntax, operation.Type, operation.ConstantValue, operation.IsImplicit);
}
public override IOperation VisitDefaultValueExpression(IDefaultValueExpression operation, object argument)
......
......@@ -130,25 +130,55 @@ public static ImmutableArray<ILocalSymbol> GetDeclaredVariables(this IVariableDe
/// </summary>
/// <param name="dynamicExpression">Dynamic or late bound expression.</param>
/// <param name="index">Argument index.</param>
public static string GetArgumentName(this IHasDynamicArgumentsExpression dynamicExpression, int index)
public static string GetArgumentName(this IDynamicInvocationExpression dynamicExpression, int index)
{
if (dynamicExpression == null)
{
throw new ArgumentNullException(nameof(dynamicExpression));
}
var expression = (HasDynamicArgumentsExpression)dynamicExpression;
if (expression.ArgumentNames.IsDefaultOrEmpty)
return GetArgumentName((HasDynamicArgumentsExpression)dynamicExpression, index);
}
/// <summary>
/// Get an optional argument name for a named argument to the given <paramref name="dynamicExpression"/> at the given <paramref name="index"/>.
/// </summary>
/// <param name="dynamicExpression">Dynamic or late bound expression.</param>
/// <param name="index">Argument index.</param>
public static string GetArgumentName(this IDynamicIndexerAccessExpression dynamicExpression, int index)
{
if (dynamicExpression == null)
{
return null;
throw new ArgumentNullException(nameof(dynamicExpression));
}
if (index < 0 || index >= expression.ArgumentNames.Length)
return GetArgumentName((HasDynamicArgumentsExpression)dynamicExpression, index);
}
/// <summary>
/// Get an optional argument name for a named argument to the given <paramref name="dynamicExpression"/> at the given <paramref name="index"/>.
/// </summary>
/// <param name="dynamicExpression">Dynamic or late bound expression.</param>
/// <param name="index">Argument index.</param>
public static string GetArgumentName(this IDynamicObjectCreationExpression dynamicExpression, int index)
{
if (dynamicExpression == null)
{
throw new ArgumentOutOfRangeException(nameof(index));
throw new ArgumentNullException(nameof(dynamicExpression));
}
return expression.ArgumentNames[index];
return GetArgumentName((HasDynamicArgumentsExpression)dynamicExpression, index);
}
/// <summary>
/// Get an optional argument name for a named argument to the given <paramref name="dynamicExpression"/> at the given <paramref name="index"/>.
/// </summary>
/// <param name="dynamicExpression">Dynamic or late bound expression.</param>
/// <param name="index">Argument index.</param>
internal static string GetArgumentName(this HasDynamicArgumentsExpression dynamicExpression, int index)
{
var argumentNames = dynamicExpression.ArgumentNames;
return argumentNames.IsDefaultOrEmpty ? null : argumentNames[index];
}
/// <summary>
......@@ -158,32 +188,66 @@ public static string GetArgumentName(this IHasDynamicArgumentsExpression dynamic
/// </summary>
/// <param name="dynamicExpression">Dynamic or late bound expression.</param>
/// <param name="index">Argument index.</param>
public static RefKind? GetArgumentRefKind(this IHasDynamicArgumentsExpression dynamicExpression, int index)
public static RefKind? GetArgumentRefKind(this IDynamicInvocationExpression dynamicExpression, int index)
{
if (dynamicExpression == null)
{
throw new ArgumentNullException(nameof(dynamicExpression));
}
var expression = (HasDynamicArgumentsExpression)dynamicExpression;
if (expression.ArgumentRefKinds.IsDefault)
return GetArgumentRefKind((HasDynamicArgumentsExpression)dynamicExpression, index);
}
/// <summary>
/// Get an optional argument <see cref="RefKind"/> for an argument at the given <paramref name="index"/> to the given <paramref name="dynamicExpression"/>.
/// Returns a non-null argument <see cref="RefKind"/> for C#.
/// Always returns null for VB as <see cref="RefKind"/> cannot be specified for an the argument in VB.
/// </summary>
/// <param name="dynamicExpression">Dynamic or late bound expression.</param>
/// <param name="index">Argument index.</param>
public static RefKind? GetArgumentRefKind(this IDynamicIndexerAccessExpression dynamicExpression, int index)
{
if (dynamicExpression == null)
{
throw new ArgumentNullException(nameof(dynamicExpression));
}
return GetArgumentRefKind((HasDynamicArgumentsExpression)dynamicExpression, index);
}
/// <summary>
/// Get an optional argument <see cref="RefKind"/> for an argument at the given <paramref name="index"/> to the given <paramref name="dynamicExpression"/>.
/// Returns a non-null argument <see cref="RefKind"/> for C#.
/// Always returns null for VB as <see cref="RefKind"/> cannot be specified for an the argument in VB.
/// </summary>
/// <param name="dynamicExpression">Dynamic or late bound expression.</param>
/// <param name="index">Argument index.</param>
public static RefKind? GetArgumentRefKind(this IDynamicObjectCreationExpression dynamicExpression, int index)
{
if (dynamicExpression == null)
{
throw new ArgumentNullException(nameof(dynamicExpression));
}
return GetArgumentRefKind((HasDynamicArgumentsExpression)dynamicExpression, index);
}
internal static RefKind? GetArgumentRefKind(this HasDynamicArgumentsExpression dynamicExpression, int index)
{
var argumentRefKinds = dynamicExpression.ArgumentRefKinds;
if (argumentRefKinds.IsDefault)
{
// VB case, arguments cannot have RefKind.
return null;
}
if (expression.ArgumentRefKinds.IsEmpty)
if (argumentRefKinds.IsEmpty)
{
// C# case where no explicit RefKind was specified for any argument, hence all arguments have RefKind.None.
return RefKind.None;
}
if (index < 0 || index >= expression.ArgumentRefKinds.Length)
{
throw new ArgumentOutOfRangeException(nameof(index));
}
return expression.ArgumentRefKinds[index];
return argumentRefKinds[index];
}
}
......
......@@ -266,8 +266,10 @@ Microsoft.CodeAnalysis.Semantics.IDeclarationPattern.DeclaredSymbol.get -> Micro
Microsoft.CodeAnalysis.Semantics.IDefaultCaseClause
Microsoft.CodeAnalysis.Semantics.IDefaultValueExpression
Microsoft.CodeAnalysis.Semantics.IDynamicIndexerAccessExpression
Microsoft.CodeAnalysis.Semantics.IDynamicIndexerAccessExpression.Arguments.get -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.IOperation>
Microsoft.CodeAnalysis.Semantics.IDynamicIndexerAccessExpression.Expression.get -> Microsoft.CodeAnalysis.IOperation
Microsoft.CodeAnalysis.Semantics.IDynamicInvocationExpression
Microsoft.CodeAnalysis.Semantics.IDynamicInvocationExpression.Arguments.get -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.IOperation>
Microsoft.CodeAnalysis.Semantics.IDynamicInvocationExpression.Expression.get -> Microsoft.CodeAnalysis.IOperation
Microsoft.CodeAnalysis.Semantics.IDynamicMemberReferenceExpression
Microsoft.CodeAnalysis.Semantics.IDynamicMemberReferenceExpression.ContainingType.get -> Microsoft.CodeAnalysis.ITypeSymbol
......@@ -275,6 +277,7 @@ Microsoft.CodeAnalysis.Semantics.IDynamicMemberReferenceExpression.Instance.get
Microsoft.CodeAnalysis.Semantics.IDynamicMemberReferenceExpression.MemberName.get -> string
Microsoft.CodeAnalysis.Semantics.IDynamicMemberReferenceExpression.TypeArguments.get -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.ITypeSymbol>
Microsoft.CodeAnalysis.Semantics.IDynamicObjectCreationExpression
Microsoft.CodeAnalysis.Semantics.IDynamicObjectCreationExpression.Arguments.get -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.IOperation>
Microsoft.CodeAnalysis.Semantics.IDynamicObjectCreationExpression.Initializer.get -> Microsoft.CodeAnalysis.Semantics.IObjectOrCollectionInitializerExpression
Microsoft.CodeAnalysis.Semantics.IEmptyStatement
Microsoft.CodeAnalysis.Semantics.IEndStatement
......@@ -302,9 +305,6 @@ Microsoft.CodeAnalysis.Semantics.IForWhileUntilLoopStatement
Microsoft.CodeAnalysis.Semantics.IForWhileUntilLoopStatement.Condition.get -> Microsoft.CodeAnalysis.IOperation
Microsoft.CodeAnalysis.Semantics.IHasArgumentsExpression
Microsoft.CodeAnalysis.Semantics.IHasArgumentsExpression.ArgumentsInEvaluationOrder.get -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.Semantics.IArgument>
Microsoft.CodeAnalysis.Semantics.IHasDynamicArgumentsExpression
Microsoft.CodeAnalysis.Semantics.IHasDynamicArgumentsExpression.ApplicableSymbols.get -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.ISymbol>
Microsoft.CodeAnalysis.Semantics.IHasDynamicArgumentsExpression.Arguments.get -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.IOperation>
Microsoft.CodeAnalysis.Semantics.IHasOperatorMethodExpression
Microsoft.CodeAnalysis.Semantics.IHasOperatorMethodExpression.OperatorMethod.get -> Microsoft.CodeAnalysis.IMethodSymbol
Microsoft.CodeAnalysis.Semantics.IHasOperatorMethodExpression.UsesOperatorMethod.get -> bool
......@@ -490,8 +490,12 @@ override Microsoft.CodeAnalysis.Semantics.OperationWalker.DefaultVisit(Microsoft
override Microsoft.CodeAnalysis.Semantics.OperationWalker.Visit(Microsoft.CodeAnalysis.IOperation operation) -> void
static Microsoft.CodeAnalysis.Semantics.OperationExtensions.Descendants(this Microsoft.CodeAnalysis.IOperation operation) -> System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.IOperation>
static Microsoft.CodeAnalysis.Semantics.OperationExtensions.DescendantsAndSelf(this Microsoft.CodeAnalysis.IOperation operation) -> System.Collections.Generic.IEnumerable<Microsoft.CodeAnalysis.IOperation>
static Microsoft.CodeAnalysis.Semantics.OperationExtensions.GetArgumentName(this Microsoft.CodeAnalysis.Semantics.IHasDynamicArgumentsExpression dynamicExpression, int index) -> string
static Microsoft.CodeAnalysis.Semantics.OperationExtensions.GetArgumentRefKind(this Microsoft.CodeAnalysis.Semantics.IHasDynamicArgumentsExpression dynamicExpression, int index) -> Microsoft.CodeAnalysis.RefKind?
static Microsoft.CodeAnalysis.Semantics.OperationExtensions.GetArgumentName(this Microsoft.CodeAnalysis.Semantics.IDynamicIndexerAccessExpression dynamicExpression, int index) -> string
static Microsoft.CodeAnalysis.Semantics.OperationExtensions.GetArgumentName(this Microsoft.CodeAnalysis.Semantics.IDynamicInvocationExpression dynamicExpression, int index) -> string
static Microsoft.CodeAnalysis.Semantics.OperationExtensions.GetArgumentName(this Microsoft.CodeAnalysis.Semantics.IDynamicObjectCreationExpression dynamicExpression, int index) -> string
static Microsoft.CodeAnalysis.Semantics.OperationExtensions.GetArgumentRefKind(this Microsoft.CodeAnalysis.Semantics.IDynamicIndexerAccessExpression dynamicExpression, int index) -> Microsoft.CodeAnalysis.RefKind?
static Microsoft.CodeAnalysis.Semantics.OperationExtensions.GetArgumentRefKind(this Microsoft.CodeAnalysis.Semantics.IDynamicInvocationExpression dynamicExpression, int index) -> Microsoft.CodeAnalysis.RefKind?
static Microsoft.CodeAnalysis.Semantics.OperationExtensions.GetArgumentRefKind(this Microsoft.CodeAnalysis.Semantics.IDynamicObjectCreationExpression dynamicExpression, int index) -> Microsoft.CodeAnalysis.RefKind?
static Microsoft.CodeAnalysis.Semantics.OperationExtensions.GetDeclaredVariables(this Microsoft.CodeAnalysis.Semantics.IVariableDeclarationStatement declarationStatement) -> System.Collections.Immutable.ImmutableArray<Microsoft.CodeAnalysis.ILocalSymbol>
static Microsoft.CodeAnalysis.Semantics.OperationExtensions.GetRootOperation(this Microsoft.CodeAnalysis.ISymbol symbol, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> Microsoft.CodeAnalysis.IOperation
static Microsoft.CodeAnalysis.Semantics.OperationExtensions.HasErrors(this Microsoft.CodeAnalysis.IOperation operation, Microsoft.CodeAnalysis.Compilation compilation, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) -> bool
......
......@@ -592,27 +592,19 @@ Namespace Microsoft.CodeAnalysis.Semantics
Private Function CreateBoundLateInvocationOperation(boundLateInvocation As BoundLateInvocation) As IOperation
Dim expression As Lazy(Of IOperation) = New Lazy(Of IOperation)(Function() Create(boundLateInvocation.Member))
Dim applicableSymbols As ImmutableArray(Of ISymbol)
If boundLateInvocation.MethodOrPropertyGroupOpt IsNot Nothing Then
applicableSymbols = If(boundLateInvocation.MethodOrPropertyGroupOpt.Kind = BoundKind.PropertyGroup,
DirectCast(boundLateInvocation.MethodOrPropertyGroupOpt, BoundPropertyGroup).Properties.As(Of ISymbol),
DirectCast(boundLateInvocation.MethodOrPropertyGroupOpt, BoundMethodGroup).Methods.As(Of ISymbol))
Else
applicableSymbols = ImmutableArray(Of ISymbol).Empty
End If
Dim arguments As Lazy(Of ImmutableArray(Of IOperation)) = New Lazy(Of ImmutableArray(Of IOperation))(Function()
Return If(boundLateInvocation.ArgumentsOpt.IsDefault,
ImmutableArray(Of IOperation).Empty,
boundLateInvocation.ArgumentsOpt.SelectAsArray(Function(n) Create(n)))
End Function)
Dim arguments As Lazy(Of ImmutableArray(Of IOperation)) = New Lazy(Of ImmutableArray(Of IOperation))(
Function()
Return If(boundLateInvocation.ArgumentsOpt.IsDefault,
ImmutableArray(Of IOperation).Empty,
boundLateInvocation.ArgumentsOpt.SelectAsArray(Function(n) Create(n)))
End Function)
Dim argumentNames As ImmutableArray(Of String) = boundLateInvocation.ArgumentNamesOpt
Dim argumentRefKinds As ImmutableArray(Of RefKind) = Nothing
Dim syntax As SyntaxNode = boundLateInvocation.Syntax
Dim type As ITypeSymbol = boundLateInvocation.Type
Dim constantValue As [Optional](Of Object) = ConvertToOptional(boundLateInvocation.ConstantValueOpt)
Dim isImplicit As Boolean = boundLateInvocation.WasCompilerGenerated
Return New LazyDynamicInvocationExpression(expression, applicableSymbols, arguments, argumentNames, argumentRefKinds, _semanticModel, syntax, type, constantValue, isImplicit)
Return New LazyDynamicInvocationExpression(expression, arguments, argumentNames, argumentRefKinds, _semanticModel, syntax, type, constantValue, isImplicit)
End Function
Private Function CreateBoundObjectCreationExpressionOperation(boundObjectCreationExpression As BoundObjectCreationExpression) As IObjectCreationExpression
......
......@@ -24,7 +24,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "M2", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'c.M2')
Type Arguments(0)
Instance Receiver: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'c')
ApplicableSymbols(0)
Arguments(1):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'd')
ArgumentNames(0)
......@@ -59,9 +58,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "M2", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'M2')
Type Arguments(0)
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C) (Syntax: 'M2')
ApplicableSymbols(2):
Symbol: Sub C.M2(c As System.Int32)
Symbol: Sub C.M2(c As System.Int64)
Arguments(1):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'd')
ArgumentNames(0)
......@@ -96,9 +92,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "M2", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'M2')
Type Arguments(0)
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C) (Syntax: 'M2')
ApplicableSymbols(2):
Symbol: Sub C.M2(c As System.Int32, d As System.Object)
Symbol: Sub C.M2(c As System.Int64, d As System.Object)
Arguments(2):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'd')
IParameterReferenceExpression: e (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'e')
......@@ -134,9 +127,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "M2", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'M2')
Type Arguments(0)
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C) (Syntax: 'M2')
ApplicableSymbols(2):
Symbol: Sub C.M2(c As System.Int32, d As System.Object)
Symbol: Sub C.M2(c As System.Int64, d As System.Object)
Arguments(2):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'd')
IParameterReferenceExpression: e (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'e')
......@@ -177,9 +167,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "M2", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'M2')
Type Arguments(0)
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C) (Syntax: 'M2')
ApplicableSymbols(2):
Symbol: Sub C.M2(ByRef c As System.Int32, ByRef d As System.Object)
Symbol: Sub C.M2(ByRef c As System.Int64, ByRef d As System.Object)
Arguments(2):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'd')
IParameterReferenceExpression: e (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'e')
......@@ -254,9 +241,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "P1", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'c')
Type Arguments(0)
Instance Receiver: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: C) (Syntax: 'c')
ApplicableSymbols(2):
Symbol: ReadOnly Property C.P1(x As System.Int32) As System.Int32
Symbol: ReadOnly Property C.P1(x As System.String) As System.Int32
Arguments(1):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'd')
ArgumentNames(0)
......@@ -297,9 +281,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "P1", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'c')
Type Arguments(0)
Instance Receiver: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: C) (Syntax: 'c')
ApplicableSymbols(2):
Symbol: ReadOnly Property C.P1(x As System.Int32, x2 As System.Object) As System.Int32
Symbol: ReadOnly Property C.P1(x As System.String, x2 As System.Object) As System.Int32
Arguments(2):
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'd')
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'd')
......@@ -341,9 +322,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "P1", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'c')
Type Arguments(0)
Instance Receiver: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: C) (Syntax: 'c')
ApplicableSymbols(2):
Symbol: ReadOnly Property C.P1(x As System.Int32, x2 As System.Object) As System.Int32
Symbol: ReadOnly Property C.P1(x As System.String, x2 As System.Object) As System.Int32
Arguments(2):
IParameterReferenceExpression: e (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'e')
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'd')
......@@ -388,9 +366,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "P1", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'c')
Type Arguments(0)
Instance Receiver: IParameterReferenceExpression: c (OperationKind.ParameterReferenceExpression, Type: C) (Syntax: 'c')
ApplicableSymbols(2):
Symbol: ReadOnly Property C.P1(x As System.Int32, x2 As System.Object) As System.Int32
Symbol: ReadOnly Property C.P1(x As System.String, x2 As System.Object) As System.Int32
Arguments(2):
IParameterReferenceExpression: e (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'e')
IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'd')
......
......@@ -25,7 +25,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "F", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'd.F')
Type Arguments(0)
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: System.Object) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -55,7 +54,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Type Arguments(1):
Symbol: System.String
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: System.Object) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -85,7 +83,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Type Arguments(1):
Symbol: ?
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: System.Object) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -118,7 +115,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "F", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'd.F')
Type Arguments(0)
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: System.Object) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -147,7 +143,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "F", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'd.F')
Type Arguments(0)
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: System.Object) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(1):
IInvalidExpression (OperationKind.InvalidExpression, Type: null, IsInvalid) (Syntax: '')
Children(0)
......@@ -186,7 +181,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Type Arguments(1):
Symbol: System.String
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: System.Object) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -217,7 +211,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Symbol: System.String
Symbol: System.Int32
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: System.Object) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -248,7 +241,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Symbol: System.String
Symbol: ?
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: System.Object) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -283,7 +275,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Instance Receiver: IDynamicMemberReferenceExpression (Member Name: "Prop1", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'd.Prop1')
Type Arguments(0)
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: System.Object) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -315,11 +306,9 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "Method1", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'd.Method1')
Type Arguments(0)
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: System.Object) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -350,7 +339,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Instance Receiver: IDynamicMemberReferenceExpression (Member Name: "Prop1", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'd.Prop1')
Type Arguments(0)
Instance Receiver: ILocalReferenceExpression: d (OperationKind.LocalReferenceExpression, Type: System.Object) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(0)
ArgumentNames(0)
ArgumentRefKinds(0)
......@@ -385,8 +373,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "fun", Containing Type: Module1) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'fun')
Type Arguments(0)
Instance Receiver: null
ApplicableSymbols(1):
Symbol: Sub Module1.fun(Of X)(a As System.Collections.Generic.List(Of X))
Arguments(1):
ILocalReferenceExpression: x (OperationKind.LocalReferenceExpression, Type: System.Object) (Syntax: 'x')
ArgumentNames(0)
......@@ -423,8 +409,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "fun", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'c1.fun')
Type Arguments(0)
Instance Receiver: ILocalReferenceExpression: c1 (OperationKind.LocalReferenceExpression, Type: Module1.C1) (Syntax: 'c1')
ApplicableSymbols(1):
Symbol: Sub Module1.C1.fun(Of X)(a As System.Collections.Generic.List(Of X))
Arguments(1):
ILocalReferenceExpression: x (OperationKind.LocalReferenceExpression, Type: System.Object) (Syntax: 'x')
ArgumentNames(0)
......
......@@ -511,7 +511,6 @@ End Class
Dim expectedOperationTree = <![CDATA[
IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: System.Object) (Syntax: 'd(x)')
Expression: IParameterReferenceExpression: d (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'd')
ApplicableSymbols(0)
Arguments(1):
IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Object) (Syntax: 'x')
Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
......@@ -543,7 +542,6 @@ IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: S
Expression: IDynamicMemberReferenceExpression (Member Name: "M", Containing Type: null) (OperationKind.DynamicMemberReferenceExpression, Type: System.Object) (Syntax: 'x.M')
Type Arguments(0)
Instance Receiver: IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'x')
ApplicableSymbols(0)
Arguments(1):
IParameterReferenceExpression: y (OperationKind.ParameterReferenceExpression, Type: System.Int32) (Syntax: 'y')
ArgumentNames(0)
......@@ -571,7 +569,6 @@ End Class
Dim expectedOperationTree = <![CDATA[
IDynamicInvocationExpression (OperationKind.DynamicInvocationExpression, Type: System.Object) (Syntax: 'x(y)')
Expression: IParameterReferenceExpression: x (OperationKind.ParameterReferenceExpression, Type: System.Object) (Syntax: 'x')
ApplicableSymbols(0)
Arguments(1):
IConversionExpression (Implicit, TryCast: False, Unchecked) (OperationKind.ConversionExpression, Type: System.Object) (Syntax: 'y')
Conversion: CommonConversion (Exists: True, IsIdentity: False, IsNumeric: False, IsReference: False, IsUserDefined: False) (MethodSymbol: null)
......
......@@ -621,19 +621,17 @@ private void VisitArguments(IHasArgumentsExpression operation)
VisitArray(operation.ArgumentsInEvaluationOrder, "Arguments", logElementCount: true);
}
private void VisitDynamicArguments(IHasDynamicArgumentsExpression operation)
private void VisitDynamicArguments(HasDynamicArgumentsExpression operation)
{
var dynamicOperation = (HasDynamicArgumentsExpression)operation;
VisitArray(dynamicOperation.ApplicableSymbols, "ApplicableSymbols", logElementCount: true);
VisitArray(dynamicOperation.Arguments, "Arguments", logElementCount: true);
VisitArray(dynamicOperation.ArgumentNames, "ArgumentNames", logElementCount: true);
VisitArray(dynamicOperation.ArgumentRefKinds, "ArgumentRefKinds", logElementCount: true);
VisitArray(operation.Arguments, "Arguments", logElementCount: true);
VisitArray(operation.ArgumentNames, "ArgumentNames", logElementCount: true);
VisitArray(operation.ArgumentRefKinds, "ArgumentRefKinds", logElementCount: true);
VerifyGetArgumentNamePublicApi(dynamicOperation, dynamicOperation.ArgumentNames);
VerifyGetArgumentRefKindPublicApi(dynamicOperation, dynamicOperation.ArgumentRefKinds);
VerifyGetArgumentNamePublicApi(operation, operation.ArgumentNames);
VerifyGetArgumentRefKindPublicApi(operation, operation.ArgumentRefKinds);
}
private static void VerifyGetArgumentNamePublicApi(IHasDynamicArgumentsExpression operation, ImmutableArray<string> argumentNames)
private static void VerifyGetArgumentNamePublicApi(HasDynamicArgumentsExpression operation, ImmutableArray<string> argumentNames)
{
var length = operation.Arguments.Length;
if (argumentNames.IsDefaultOrEmpty)
......@@ -653,7 +651,7 @@ private static void VerifyGetArgumentNamePublicApi(IHasDynamicArgumentsExpressio
}
}
private static void VerifyGetArgumentRefKindPublicApi(IHasDynamicArgumentsExpression operation, ImmutableArray<RefKind> argumentRefKinds)
private static void VerifyGetArgumentRefKindPublicApi(HasDynamicArgumentsExpression operation, ImmutableArray<RefKind> argumentRefKinds)
{
var length = operation.Arguments.Length;
if (argumentRefKinds.IsDefault)
......@@ -1050,7 +1048,7 @@ public override void VisitDynamicObjectCreationExpression(IDynamicObjectCreation
LogString(nameof(IDynamicObjectCreationExpression));
LogCommonPropertiesAndNewLine(operation);
VisitDynamicArguments(operation);
VisitDynamicArguments((HasDynamicArgumentsExpression)operation);
Visit(operation.Initializer, "Initializer");
}
......@@ -1060,7 +1058,7 @@ public override void VisitDynamicInvocationExpression(IDynamicInvocationExpressi
LogCommonPropertiesAndNewLine(operation);
Visit(operation.Expression, "Expression");
VisitDynamicArguments(operation);
VisitDynamicArguments((HasDynamicArgumentsExpression)operation);
}
public override void VisitDynamicIndexerAccessExpression(IDynamicIndexerAccessExpression operation)
......@@ -1069,7 +1067,7 @@ public override void VisitDynamicIndexerAccessExpression(IDynamicIndexerAccessEx
LogCommonPropertiesAndNewLine(operation);
Visit(operation.Expression, "Expression");
VisitDynamicArguments(operation);
VisitDynamicArguments((HasDynamicArgumentsExpression)operation);
}
public override void VisitObjectOrCollectionInitializerExpression(IObjectOrCollectionInitializerExpression operation)
......
......@@ -448,31 +448,29 @@ public override void VisitAnonymousObjectCreationExpression(IAnonymousObjectCrea
base.VisitAnonymousObjectCreationExpression(operation);
}
private void VisitDynamicArguments(IHasDynamicArgumentsExpression operation)
private void VisitDynamicArguments(HasDynamicArgumentsExpression operation)
{
var dynamicOperation = (HasDynamicArgumentsExpression)operation;
var applicableSymbols = dynamicOperation.ApplicableSymbols;
var names = dynamicOperation.ArgumentNames;
var refKinds = dynamicOperation.ArgumentRefKinds;
var names = operation.ArgumentNames;
var refKinds = operation.ArgumentRefKinds;
}
public override void VisitDynamicObjectCreationExpression(IDynamicObjectCreationExpression operation)
{
VisitDynamicArguments(operation);
VisitDynamicArguments((HasDynamicArgumentsExpression)operation);
base.VisitDynamicObjectCreationExpression(operation);
}
public override void VisitDynamicInvocationExpression(IDynamicInvocationExpression operation)
{
VisitDynamicArguments(operation);
VisitDynamicArguments((HasDynamicArgumentsExpression)operation);
base.VisitDynamicInvocationExpression(operation);
}
public override void VisitDynamicIndexerAccessExpression(IDynamicIndexerAccessExpression operation)
{
VisitDynamicArguments(operation);
VisitDynamicArguments((HasDynamicArgumentsExpression)operation);
base.VisitDynamicIndexerAccessExpression(operation);
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册