Fix tests, refactor ReceiverSymbol.

上级 9d325729
......@@ -1324,7 +1324,7 @@
<Field Name="ResultKind" PropertyOverrides="true" Type="LookupResultKind"/>
<!-- Used by IOperation to reconstruct the receiver for this expression. -->
<Field Name="ReceiverSymbol" Type="TypeSymbol" Null="disallow"/>
<Field Name="ReceiverType" Type="TypeSymbol" Null="disallow"/>
<!-- BinderOpt is a temporary solution for IOperation implementation and should probably be removed in the future -->
<!-- Tracked by https://github.com/dotnet/roslyn/issues/20787 -->
......
......@@ -4765,12 +4765,12 @@ public BoundObjectInitializerExpression Update(ImmutableArray<BoundExpression> i
internal sealed partial class BoundObjectInitializerMember : BoundExpression
{
public BoundObjectInitializerMember(SyntaxNode syntax, Symbol memberSymbol, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, LookupResultKind resultKind, TypeSymbol receiverSymbol, Binder binderOpt, TypeSymbol type, bool hasErrors = false)
public BoundObjectInitializerMember(SyntaxNode syntax, Symbol memberSymbol, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, LookupResultKind resultKind, TypeSymbol receiverType, Binder binderOpt, TypeSymbol type, bool hasErrors = false)
: base(BoundKind.ObjectInitializerMember, syntax, type, hasErrors || arguments.HasErrors())
{
Debug.Assert(!arguments.IsDefault, "Field 'arguments' cannot be null (use Null=\"allow\" in BoundNodes.xml to remove this check)");
Debug.Assert(receiverSymbol != null, "Field 'receiverSymbol' cannot be null (use Null=\"allow\" in BoundNodes.xml to remove this check)");
Debug.Assert(receiverType != null, "Field 'receiverType' cannot be null (use Null=\"allow\" in BoundNodes.xml to remove this check)");
Debug.Assert(type != null, "Field 'type' cannot be null (use Null=\"allow\" in BoundNodes.xml to remove this check)");
this.MemberSymbol = memberSymbol;
......@@ -4780,7 +4780,7 @@ public BoundObjectInitializerMember(SyntaxNode syntax, Symbol memberSymbol, Immu
this.Expanded = expanded;
this.ArgsToParamsOpt = argsToParamsOpt;
this._ResultKind = resultKind;
this.ReceiverSymbol = receiverSymbol;
this.ReceiverType = receiverType;
this.BinderOpt = binderOpt;
}
......@@ -4800,7 +4800,7 @@ public BoundObjectInitializerMember(SyntaxNode syntax, Symbol memberSymbol, Immu
private readonly LookupResultKind _ResultKind;
public override LookupResultKind ResultKind { get { return _ResultKind;} }
public TypeSymbol ReceiverSymbol { get; }
public TypeSymbol ReceiverType { get; }
public Binder BinderOpt { get; }
......@@ -4809,11 +4809,11 @@ public override BoundNode Accept(BoundTreeVisitor visitor)
return visitor.VisitObjectInitializerMember(this);
}
public BoundObjectInitializerMember Update(Symbol memberSymbol, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, LookupResultKind resultKind, TypeSymbol receiverSymbol, Binder binderOpt, TypeSymbol type)
public BoundObjectInitializerMember Update(Symbol memberSymbol, ImmutableArray<BoundExpression> arguments, ImmutableArray<string> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, LookupResultKind resultKind, TypeSymbol receiverType, Binder binderOpt, TypeSymbol type)
{
if (memberSymbol != this.MemberSymbol || arguments != this.Arguments || argumentNamesOpt != this.ArgumentNamesOpt || argumentRefKindsOpt != this.ArgumentRefKindsOpt || expanded != this.Expanded || argsToParamsOpt != this.ArgsToParamsOpt || resultKind != this.ResultKind || receiverSymbol != this.ReceiverSymbol || binderOpt != this.BinderOpt || type != this.Type)
if (memberSymbol != this.MemberSymbol || arguments != this.Arguments || argumentNamesOpt != this.ArgumentNamesOpt || argumentRefKindsOpt != this.ArgumentRefKindsOpt || expanded != this.Expanded || argsToParamsOpt != this.ArgsToParamsOpt || resultKind != this.ResultKind || receiverType != this.ReceiverType || binderOpt != this.BinderOpt || type != this.Type)
{
var result = new BoundObjectInitializerMember(this.Syntax, memberSymbol, arguments, argumentNamesOpt, argumentRefKindsOpt, expanded, argsToParamsOpt, resultKind, receiverSymbol, binderOpt, type, this.HasErrors);
var result = new BoundObjectInitializerMember(this.Syntax, memberSymbol, arguments, argumentNamesOpt, argumentRefKindsOpt, expanded, argsToParamsOpt, resultKind, receiverType, binderOpt, type, this.HasErrors);
result.WasCompilerGenerated = this.WasCompilerGenerated;
return result;
}
......@@ -9048,9 +9048,9 @@ public override BoundNode VisitObjectInitializerExpression(BoundObjectInitialize
public override BoundNode VisitObjectInitializerMember(BoundObjectInitializerMember node)
{
ImmutableArray<BoundExpression> arguments = (ImmutableArray<BoundExpression>)this.VisitList(node.Arguments);
TypeSymbol receiverSymbol = this.VisitType(node.ReceiverSymbol);
TypeSymbol receiverType = this.VisitType(node.ReceiverType);
TypeSymbol type = this.VisitType(node.Type);
return node.Update(node.MemberSymbol, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, node.Expanded, node.ArgsToParamsOpt, node.ResultKind, receiverSymbol, node.BinderOpt, type);
return node.Update(node.MemberSymbol, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, node.Expanded, node.ArgsToParamsOpt, node.ResultKind, receiverType, node.BinderOpt, type);
}
public override BoundNode VisitDynamicObjectInitializerMember(BoundDynamicObjectInitializerMember node)
{
......@@ -10454,7 +10454,7 @@ public override TreeDumperNode VisitObjectInitializerMember(BoundObjectInitializ
new TreeDumperNode("expanded", node.Expanded, null),
new TreeDumperNode("argsToParamsOpt", node.ArgsToParamsOpt, null),
new TreeDumperNode("resultKind", node.ResultKind, null),
new TreeDumperNode("receiverSymbol", node.ReceiverSymbol, null),
new TreeDumperNode("receiverType", node.ReceiverType, null),
new TreeDumperNode("binderOpt", node.BinderOpt, null),
new TreeDumperNode("type", node.Type, null)
}
......
......@@ -239,7 +239,7 @@ private BoundExpression MakeCollectionInitializer(BoundExpression rewrittenRecei
memberInit.Expanded,
memberInit.ArgsToParamsOpt,
memberInit.ResultKind,
memberInit.ReceiverSymbol,
memberInit.ReceiverType,
memberInit.BinderOpt,
memberInit.Type);
}
......
......@@ -633,7 +633,7 @@ public override BoundNode VisitObjectInitializerMember(BoundObjectInitializerMem
break;
}
return node.Update(member, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, node.Expanded, node.ArgsToParamsOpt, node.ResultKind, node.ReceiverSymbol, node.BinderOpt, type);
return node.Update(member, arguments, node.ArgumentNamesOpt, node.ArgumentRefKindsOpt, node.Expanded, node.ArgsToParamsOpt, node.ResultKind, node.ReceiverType, node.BinderOpt, type);
}
private static bool BaseReferenceInReceiverWasRewritten(BoundExpression originalReceiver, BoundExpression rewrittenReceiver)
......
......@@ -573,7 +573,7 @@ private IMemberReferenceExpression CreateBoundObjectInitializerMemberOperation(B
Lazy<IOperation> instance = new Lazy<IOperation>(() => new InstanceReferenceExpression(
semanticModel: _semanticModel,
syntax: boundObjectInitializerMember.Syntax,
type: boundObjectInitializerMember.ReceiverSymbol,
type: boundObjectInitializerMember.ReceiverType,
constantValue: default(Optional<object>),
isImplicit: boundObjectInitializerMember.WasCompilerGenerated));
......
' 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.
Imports Microsoft.CodeAnalysis.VisualBasic.Syntax
Imports Microsoft.CodeAnalysis.Test.Utilities
......@@ -33,12 +33,12 @@ IWithStatement (OperationKind.None) (Syntax: 'With c'BIND ... End With')
IExpressionStatement (OperationKind.ExpressionStatement) (Syntax: '.I = 0')
Expression: ISimpleAssignmentExpression (OperationKind.SimpleAssignmentExpression, Type: System.Int32) (Syntax: '.I = 0')
Left: IFieldReferenceExpression: C.I As System.Int32 (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: '.I')
Instance Receiver: IOperation: (OperationKind.None) (Syntax: 'c')
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C) (Syntax: 'c')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 0) (Syntax: '0')
IExpressionStatement (OperationKind.ExpressionStatement) (Syntax: '.J = 0')
Expression: ISimpleAssignmentExpression (OperationKind.SimpleAssignmentExpression, Type: System.Int32) (Syntax: '.J = 0')
Left: IFieldReferenceExpression: C.J As System.Int32 (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: '.J')
Instance Receiver: IOperation: (OperationKind.None) (Syntax: 'c')
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C) (Syntax: 'c')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 0) (Syntax: '0')
]]>.Value
......@@ -73,12 +73,12 @@ IBlockStatement (3 statements) (OperationKind.BlockStatement) (Syntax: 'Private
IExpressionStatement (OperationKind.ExpressionStatement) (Syntax: '.I = 0')
Expression: ISimpleAssignmentExpression (OperationKind.SimpleAssignmentExpression, Type: System.Int32) (Syntax: '.I = 0')
Left: IFieldReferenceExpression: C.I As System.Int32 (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: '.I')
Instance Receiver: IOperation: (OperationKind.None) (Syntax: 'c')
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C) (Syntax: 'c')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 0) (Syntax: '0')
IExpressionStatement (OperationKind.ExpressionStatement) (Syntax: '.J = 0')
Expression: ISimpleAssignmentExpression (OperationKind.SimpleAssignmentExpression, Type: System.Int32) (Syntax: '.J = 0')
Left: IFieldReferenceExpression: C.J As System.Int32 (OperationKind.FieldReferenceExpression, Type: System.Int32) (Syntax: '.J')
Instance Receiver: IOperation: (OperationKind.None) (Syntax: 'c')
Instance Receiver: IInstanceReferenceExpression (OperationKind.InstanceReferenceExpression, Type: C) (Syntax: 'c')
Right: ILiteralExpression (OperationKind.LiteralExpression, Type: System.Int32, Constant: 0) (Syntax: '0')
ILabeledStatement (Label: exit) (OperationKind.LabeledStatement) (Syntax: 'End Sub')
Statement: null
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册