Skip to content

Commit

Permalink
Using Var Parsing (#28315)
Browse files Browse the repository at this point in the history
  • Loading branch information
fayrose authored Jul 16, 2018
1 parent 336e138 commit 98e5398
Show file tree
Hide file tree
Showing 11 changed files with 704 additions and 81 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12284,14 +12284,20 @@ static LocalFunctionStatementSyntax()

internal sealed partial class LocalDeclarationStatementSyntax : StatementSyntax
{
internal readonly SyntaxToken usingKeyword;
internal readonly GreenNode modifiers;
internal readonly VariableDeclarationSyntax declaration;
internal readonly SyntaxToken semicolonToken;

internal LocalDeclarationStatementSyntax(SyntaxKind kind, GreenNode modifiers, VariableDeclarationSyntax declaration, SyntaxToken semicolonToken, DiagnosticInfo[] diagnostics, SyntaxAnnotation[] annotations)
internal LocalDeclarationStatementSyntax(SyntaxKind kind, SyntaxToken usingKeyword, GreenNode modifiers, VariableDeclarationSyntax declaration, SyntaxToken semicolonToken, DiagnosticInfo[] diagnostics, SyntaxAnnotation[] annotations)
: base(kind, diagnostics, annotations)
{
this.SlotCount = 3;
this.SlotCount = 4;
if (usingKeyword != null)
{
this.AdjustFlagsAndWidth(usingKeyword);
this.usingKeyword = usingKeyword;
}
if (modifiers != null)
{
this.AdjustFlagsAndWidth(modifiers);
Expand All @@ -12304,11 +12310,16 @@ internal LocalDeclarationStatementSyntax(SyntaxKind kind, GreenNode modifiers, V
}


internal LocalDeclarationStatementSyntax(SyntaxKind kind, GreenNode modifiers, VariableDeclarationSyntax declaration, SyntaxToken semicolonToken, SyntaxFactoryContext context)
internal LocalDeclarationStatementSyntax(SyntaxKind kind, SyntaxToken usingKeyword, GreenNode modifiers, VariableDeclarationSyntax declaration, SyntaxToken semicolonToken, SyntaxFactoryContext context)
: base(kind)
{
this.SetFactoryContext(context);
this.SlotCount = 3;
this.SlotCount = 4;
if (usingKeyword != null)
{
this.AdjustFlagsAndWidth(usingKeyword);
this.usingKeyword = usingKeyword;
}
if (modifiers != null)
{
this.AdjustFlagsAndWidth(modifiers);
Expand All @@ -12321,10 +12332,15 @@ internal LocalDeclarationStatementSyntax(SyntaxKind kind, GreenNode modifiers, V
}


internal LocalDeclarationStatementSyntax(SyntaxKind kind, GreenNode modifiers, VariableDeclarationSyntax declaration, SyntaxToken semicolonToken)
internal LocalDeclarationStatementSyntax(SyntaxKind kind, SyntaxToken usingKeyword, GreenNode modifiers, VariableDeclarationSyntax declaration, SyntaxToken semicolonToken)
: base(kind)
{
this.SlotCount = 3;
this.SlotCount = 4;
if (usingKeyword != null)
{
this.AdjustFlagsAndWidth(usingKeyword);
this.usingKeyword = usingKeyword;
}
if (modifiers != null)
{
this.AdjustFlagsAndWidth(modifiers);
Expand All @@ -12336,6 +12352,7 @@ internal LocalDeclarationStatementSyntax(SyntaxKind kind, GreenNode modifiers, V
this.semicolonToken = semicolonToken;
}

public SyntaxToken UsingKeyword { get { return this.usingKeyword; } }
/// <summary>Gets the modifier list.</summary>
public Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList<SyntaxToken> Modifiers { get { return new Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList<SyntaxToken>(this.modifiers); } }
public VariableDeclarationSyntax Declaration { get { return this.declaration; } }
Expand All @@ -12345,9 +12362,10 @@ internal override GreenNode GetSlot(int index)
{
switch (index)
{
case 0: return this.modifiers;
case 1: return this.declaration;
case 2: return this.semicolonToken;
case 0: return this.usingKeyword;
case 1: return this.modifiers;
case 2: return this.declaration;
case 3: return this.semicolonToken;
default: return null;
}
}
Expand All @@ -12367,11 +12385,11 @@ public override void Accept(CSharpSyntaxVisitor visitor)
visitor.VisitLocalDeclarationStatement(this);
}

public LocalDeclarationStatementSyntax Update(Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList<SyntaxToken> modifiers, VariableDeclarationSyntax declaration, SyntaxToken semicolonToken)
public LocalDeclarationStatementSyntax Update(SyntaxToken usingKeyword, Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList<SyntaxToken> modifiers, VariableDeclarationSyntax declaration, SyntaxToken semicolonToken)
{
if (modifiers != this.Modifiers || declaration != this.Declaration || semicolonToken != this.SemicolonToken)
if (usingKeyword != this.UsingKeyword || modifiers != this.Modifiers || declaration != this.Declaration || semicolonToken != this.SemicolonToken)
{
var newNode = SyntaxFactory.LocalDeclarationStatement(modifiers, declaration, semicolonToken);
var newNode = SyntaxFactory.LocalDeclarationStatement(usingKeyword, modifiers, declaration, semicolonToken);
var diags = this.GetDiagnostics();
if (diags != null && diags.Length > 0)
newNode = newNode.WithDiagnosticsGreen(diags);
Expand All @@ -12386,18 +12404,24 @@ public LocalDeclarationStatementSyntax Update(Microsoft.CodeAnalysis.Syntax.Inte

internal override GreenNode SetDiagnostics(DiagnosticInfo[] diagnostics)
{
return new LocalDeclarationStatementSyntax(this.Kind, this.modifiers, this.declaration, this.semicolonToken, diagnostics, GetAnnotations());
return new LocalDeclarationStatementSyntax(this.Kind, this.usingKeyword, this.modifiers, this.declaration, this.semicolonToken, diagnostics, GetAnnotations());
}

internal override GreenNode SetAnnotations(SyntaxAnnotation[] annotations)
{
return new LocalDeclarationStatementSyntax(this.Kind, this.modifiers, this.declaration, this.semicolonToken, GetDiagnostics(), annotations);
return new LocalDeclarationStatementSyntax(this.Kind, this.usingKeyword, this.modifiers, this.declaration, this.semicolonToken, GetDiagnostics(), annotations);
}

internal LocalDeclarationStatementSyntax(ObjectReader reader)
: base(reader)
{
this.SlotCount = 3;
this.SlotCount = 4;
var usingKeyword = (SyntaxToken)reader.ReadValue();
if (usingKeyword != null)
{
AdjustFlagsAndWidth(usingKeyword);
this.usingKeyword = usingKeyword;
}
var modifiers = (GreenNode)reader.ReadValue();
if (modifiers != null)
{
Expand All @@ -12421,6 +12445,7 @@ internal LocalDeclarationStatementSyntax(ObjectReader reader)
internal override void WriteTo(ObjectWriter writer)
{
base.WriteTo(writer);
writer.WriteValue(this.usingKeyword);
writer.WriteValue(this.modifiers);
writer.WriteValue(this.declaration);
writer.WriteValue(this.semicolonToken);
Expand Down Expand Up @@ -36512,10 +36537,11 @@ public override CSharpSyntaxNode VisitLocalFunctionStatement(LocalFunctionStatem

public override CSharpSyntaxNode VisitLocalDeclarationStatement(LocalDeclarationStatementSyntax node)
{
var usingKeyword = (SyntaxToken)this.Visit(node.UsingKeyword);
var modifiers = this.VisitList(node.Modifiers);
var declaration = (VariableDeclarationSyntax)this.Visit(node.Declaration);
var semicolonToken = (SyntaxToken)this.Visit(node.SemicolonToken);
return node.Update(modifiers, declaration, semicolonToken);
return node.Update(usingKeyword, modifiers, declaration, semicolonToken);
}

public override CSharpSyntaxNode VisitVariableDeclaration(VariableDeclarationSyntax node)
Expand Down Expand Up @@ -40348,9 +40374,20 @@ public LocalFunctionStatementSyntax LocalFunctionStatement(Microsoft.CodeAnalysi
return new LocalFunctionStatementSyntax(SyntaxKind.LocalFunctionStatement, modifiers.Node, returnType, identifier, typeParameterList, parameterList, constraintClauses.Node, body, expressionBody, semicolonToken, this.context);
}

public LocalDeclarationStatementSyntax LocalDeclarationStatement(Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList<SyntaxToken> modifiers, VariableDeclarationSyntax declaration, SyntaxToken semicolonToken)
public LocalDeclarationStatementSyntax LocalDeclarationStatement(SyntaxToken usingKeyword, Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList<SyntaxToken> modifiers, VariableDeclarationSyntax declaration, SyntaxToken semicolonToken)
{
#if DEBUG
if (usingKeyword != null)
{
switch (usingKeyword.Kind)
{
case SyntaxKind.UsingKeyword:
case SyntaxKind.None:
break;
default:
throw new ArgumentException("usingKeyword");
}
}
if (declaration == null)
throw new ArgumentNullException(nameof(declaration));
if (semicolonToken == null)
Expand All @@ -40364,17 +40401,7 @@ public LocalDeclarationStatementSyntax LocalDeclarationStatement(Microsoft.CodeA
}
#endif

int hash;
var cached = CSharpSyntaxNodeCache.TryGetNode((int)SyntaxKind.LocalDeclarationStatement, modifiers.Node, declaration, semicolonToken, this.context, out hash);
if (cached != null) return (LocalDeclarationStatementSyntax)cached;

var result = new LocalDeclarationStatementSyntax(SyntaxKind.LocalDeclarationStatement, modifiers.Node, declaration, semicolonToken, this.context);
if (hash >= 0)
{
SyntaxNodeCache.AddNode(result, hash);
}

return result;
return new LocalDeclarationStatementSyntax(SyntaxKind.LocalDeclarationStatement, usingKeyword, modifiers.Node, declaration, semicolonToken, this.context);
}

public VariableDeclarationSyntax VariableDeclaration(TypeSyntax type, Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList<VariableDeclaratorSyntax> variables)
Expand Down Expand Up @@ -47311,9 +47338,20 @@ public static LocalFunctionStatementSyntax LocalFunctionStatement(Microsoft.Code
return new LocalFunctionStatementSyntax(SyntaxKind.LocalFunctionStatement, modifiers.Node, returnType, identifier, typeParameterList, parameterList, constraintClauses.Node, body, expressionBody, semicolonToken);
}

public static LocalDeclarationStatementSyntax LocalDeclarationStatement(Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList<SyntaxToken> modifiers, VariableDeclarationSyntax declaration, SyntaxToken semicolonToken)
public static LocalDeclarationStatementSyntax LocalDeclarationStatement(SyntaxToken usingKeyword, Microsoft.CodeAnalysis.Syntax.InternalSyntax.SyntaxList<SyntaxToken> modifiers, VariableDeclarationSyntax declaration, SyntaxToken semicolonToken)
{
#if DEBUG
if (usingKeyword != null)
{
switch (usingKeyword.Kind)
{
case SyntaxKind.UsingKeyword:
case SyntaxKind.None:
break;
default:
throw new ArgumentException("usingKeyword");
}
}
if (declaration == null)
throw new ArgumentNullException(nameof(declaration));
if (semicolonToken == null)
Expand All @@ -47327,17 +47365,7 @@ public static LocalDeclarationStatementSyntax LocalDeclarationStatement(Microsof
}
#endif

int hash;
var cached = SyntaxNodeCache.TryGetNode((int)SyntaxKind.LocalDeclarationStatement, modifiers.Node, declaration, semicolonToken, out hash);
if (cached != null) return (LocalDeclarationStatementSyntax)cached;

var result = new LocalDeclarationStatementSyntax(SyntaxKind.LocalDeclarationStatement, modifiers.Node, declaration, semicolonToken);
if (hash >= 0)
{
SyntaxNodeCache.AddNode(result, hash);
}

return result;
return new LocalDeclarationStatementSyntax(SyntaxKind.LocalDeclarationStatement, usingKeyword, modifiers.Node, declaration, semicolonToken);
}

public static VariableDeclarationSyntax VariableDeclaration(TypeSyntax type, Microsoft.CodeAnalysis.Syntax.InternalSyntax.SeparatedSyntaxList<VariableDeclaratorSyntax> variables)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3137,10 +3137,11 @@ public override SyntaxNode VisitLocalFunctionStatement(LocalFunctionStatementSyn

public override SyntaxNode VisitLocalDeclarationStatement(LocalDeclarationStatementSyntax node)
{
var usingKeyword = this.VisitToken(node.UsingKeyword);
var modifiers = this.VisitList(node.Modifiers);
var declaration = (VariableDeclarationSyntax)this.Visit(node.Declaration);
var semicolonToken = this.VisitToken(node.SemicolonToken);
return node.Update(modifiers, declaration, semicolonToken);
return node.Update(usingKeyword, modifiers, declaration, semicolonToken);
}

public override SyntaxNode VisitVariableDeclaration(VariableDeclarationSyntax node)
Expand Down Expand Up @@ -6776,8 +6777,16 @@ public static LocalFunctionStatementSyntax LocalFunctionStatement(TypeSyntax ret
}

/// <summary>Creates a new LocalDeclarationStatementSyntax instance.</summary>
public static LocalDeclarationStatementSyntax LocalDeclarationStatement(SyntaxTokenList modifiers, VariableDeclarationSyntax declaration, SyntaxToken semicolonToken)
public static LocalDeclarationStatementSyntax LocalDeclarationStatement(SyntaxToken usingKeyword, SyntaxTokenList modifiers, VariableDeclarationSyntax declaration, SyntaxToken semicolonToken)
{
switch (usingKeyword.Kind())
{
case SyntaxKind.UsingKeyword:
case SyntaxKind.None:
break;
default:
throw new ArgumentException("usingKeyword");
}
if (declaration == null)
throw new ArgumentNullException(nameof(declaration));
switch (semicolonToken.Kind())
Expand All @@ -6787,20 +6796,20 @@ public static LocalDeclarationStatementSyntax LocalDeclarationStatement(SyntaxTo
default:
throw new ArgumentException("semicolonToken");
}
return (LocalDeclarationStatementSyntax)Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxFactory.LocalDeclarationStatement(modifiers.Node.ToGreenList<Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxToken>(), declaration == null ? null : (Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.VariableDeclarationSyntax)declaration.Green, (Syntax.InternalSyntax.SyntaxToken)semicolonToken.Node).CreateRed();
return (LocalDeclarationStatementSyntax)Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxFactory.LocalDeclarationStatement((Syntax.InternalSyntax.SyntaxToken)usingKeyword.Node, modifiers.Node.ToGreenList<Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.SyntaxToken>(), declaration == null ? null : (Microsoft.CodeAnalysis.CSharp.Syntax.InternalSyntax.VariableDeclarationSyntax)declaration.Green, (Syntax.InternalSyntax.SyntaxToken)semicolonToken.Node).CreateRed();
}


/// <summary>Creates a new LocalDeclarationStatementSyntax instance.</summary>
public static LocalDeclarationStatementSyntax LocalDeclarationStatement(SyntaxTokenList modifiers, VariableDeclarationSyntax declaration)
{
return SyntaxFactory.LocalDeclarationStatement(modifiers, declaration, SyntaxFactory.Token(SyntaxKind.SemicolonToken));
return SyntaxFactory.LocalDeclarationStatement(default(SyntaxToken), modifiers, declaration, SyntaxFactory.Token(SyntaxKind.SemicolonToken));
}

/// <summary>Creates a new LocalDeclarationStatementSyntax instance.</summary>
public static LocalDeclarationStatementSyntax LocalDeclarationStatement(VariableDeclarationSyntax declaration)
{
return SyntaxFactory.LocalDeclarationStatement(default(SyntaxTokenList), declaration, SyntaxFactory.Token(SyntaxKind.SemicolonToken));
return SyntaxFactory.LocalDeclarationStatement(default(SyntaxToken), default(SyntaxTokenList), declaration, SyntaxFactory.Token(SyntaxKind.SemicolonToken));
}

/// <summary>Creates a new VariableDeclarationSyntax instance.</summary>
Expand Down
Loading

0 comments on commit 98e5398

Please sign in to comment.