提交 fead3609 编写于 作者: A AlekseyTs

Follow up on CR feedback.

Fixes #9624.
上级 87d034c9
......@@ -778,7 +778,8 @@ internal Binder WithPatternVariablesIfAny(ArgumentListSyntax initializerArgument
CSharpSyntaxNode node = null,
ImmutableArray<CSharpSyntaxNode> nodes = default(ImmutableArray<CSharpSyntaxNode>))
{
var patterns = PatternVariableFinder.FindPatternVariables(node, nodes);
var patterns = ArrayBuilder<DeclarationPatternSyntax>.GetInstance();
PatternVariableFinder.FindPatternVariables(patterns, node, nodes);
foreach (var pattern in patterns)
{
builder.Add(SourceLocalSymbol.MakeLocal(ContainingMemberOrLambda, this, RefKind.None, pattern.Type, pattern.Identifier, LocalDeclarationKind.PatternVariable));
......
......@@ -796,9 +796,9 @@ private TypeSymbol BindVariableType(CSharpSyntaxNode declarationNode, Diagnostic
// Step out of the PatternVariableBinder for locals declared in variable declaration statement
if (this is PatternVariableBinder)
{
CSharpSyntaxNode parent;
if ((parent = declarator.Parent)?.Kind() == SyntaxKind.VariableDeclaration &&
parent.Parent?.Kind() == SyntaxKind.LocalDeclarationStatement)
CSharpSyntaxNode parent = declarator.Parent;
if (parent?.Kind() == SyntaxKind.VariableDeclaration &&
parent.Parent?.Kind() == SyntaxKind.LocalDeclarationStatement)
{
nameConflictChecker = this.Next;
}
......
......@@ -13,12 +13,14 @@ namespace Microsoft.CodeAnalysis.CSharp
class PatternVariableFinder : CSharpSyntaxWalker
{
ArrayBuilder<DeclarationPatternSyntax> declarationPatterns;
internal static ArrayBuilder<DeclarationPatternSyntax> FindPatternVariables(
internal static void FindPatternVariables(
ArrayBuilder<DeclarationPatternSyntax> builder,
CSharpSyntaxNode node = null,
ImmutableArray<CSharpSyntaxNode> nodes = default(ImmutableArray<CSharpSyntaxNode>))
{
var finder = s_poolInstance.Allocate();
finder.declarationPatterns = ArrayBuilder<DeclarationPatternSyntax>.GetInstance();
finder.declarationPatterns = builder;
finder.Visit(node);
if (!nodes.IsDefaultOrEmpty)
{
......@@ -28,10 +30,8 @@ class PatternVariableFinder : CSharpSyntaxWalker
}
}
var result = finder.declarationPatterns;
finder.declarationPatterns = null;
s_poolInstance.Free(finder);
return result;
}
public override void VisitDeclarationPattern(DeclarationPatternSyntax node)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册