Browse Source

Splitted the goto statement cases: GotoStatement, GotoCaseStatement,

GotoDefaultStatement.
newNRvisualizers
Mike Krüger 15 years ago
parent
commit
83a7d2fcc0
  1. 10
      ICSharpCode.NRefactory/CSharp/Ast/DepthFirstAstVisitor.cs
  2. 2
      ICSharpCode.NRefactory/CSharp/Ast/IAstVisitor.cs
  3. 81
      ICSharpCode.NRefactory/CSharp/Ast/Statements/GotoStatement.cs
  4. 3
      ICSharpCode.NRefactory/CSharp/Ast/Statements/YieldStatement.cs
  5. 8
      ICSharpCode.NRefactory/CSharp/Ast/TypeMembers/IndexerDeclaration.cs
  6. 1
      ICSharpCode.NRefactory/CSharp/Ast/TypeMembers/MethodDeclaration.cs
  7. 1
      ICSharpCode.NRefactory/CSharp/Ast/TypeMembers/VariableInitializer.cs
  8. 36
      ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs
  9. 20
      ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs

10
ICSharpCode.NRefactory/CSharp/Ast/DepthFirstAstVisitor.cs

@ -250,6 +250,16 @@ namespace ICSharpCode.NRefactory.CSharp @@ -250,6 +250,16 @@ namespace ICSharpCode.NRefactory.CSharp
return VisitChildren (forStatement, data);
}
public virtual S VisitGotoCaseStatement (GotoCaseStatement gotoCaseStatement, T data)
{
return VisitChildren (gotoCaseStatement, data);
}
public virtual S VisitGotoDefaultStatement (GotoDefaultStatement gotoDefaultStatement, T data)
{
return VisitChildren (gotoDefaultStatement, data);
}
public virtual S VisitGotoStatement (GotoStatement gotoStatement, T data)
{
return VisitChildren (gotoStatement, data);

2
ICSharpCode.NRefactory/CSharp/Ast/IAstVisitor.cs

@ -71,6 +71,8 @@ namespace ICSharpCode.NRefactory.CSharp @@ -71,6 +71,8 @@ namespace ICSharpCode.NRefactory.CSharp
S VisitFixedStatement(FixedStatement fixedStatement, T data);
S VisitForeachStatement(ForeachStatement foreachStatement, T data);
S VisitForStatement(ForStatement forStatement, T data);
S VisitGotoCaseStatement(GotoCaseStatement gotoCaseStatement, T data);
S VisitGotoDefaultStatement(GotoDefaultStatement gotoDefaultStatement, T data);
S VisitGotoStatement(GotoStatement gotoStatement, T data);
S VisitIfElseStatement(IfElseStatement ifElseStatement, T data);
S VisitLabelStatement(LabelStatement labelStatement, T data);

81
ICSharpCode.NRefactory/CSharp/Ast/Statements/GotoStatement.cs

@ -28,19 +28,9 @@ namespace ICSharpCode.NRefactory.CSharp @@ -28,19 +28,9 @@ namespace ICSharpCode.NRefactory.CSharp
{
/// <summary>
/// "goto Label;"
/// or "goto case LabelExpression;"
/// or "goto default;"
/// </summary>
public class GotoStatement : Statement
{
public static readonly Role<CSharpTokenNode> DefaultKeywordRole = new Role<CSharpTokenNode>("DefaultKeyword", CSharpTokenNode.Null);
public static readonly Role<CSharpTokenNode> CaseKeywordRole = new Role<CSharpTokenNode>("CaseKeyword", CSharpTokenNode.Null);
public GotoType GotoType {
get;
set;
}
public CSharpTokenNode GotoToken {
get { return GetChildByRole (Roles.Keyword); }
}
@ -73,16 +63,75 @@ namespace ICSharpCode.NRefactory.CSharp @@ -73,16 +63,75 @@ namespace ICSharpCode.NRefactory.CSharp
{
return visitor.VisitGotoStatement (this, data);
}
}
/// <summary>
/// or "goto case LabelExpression;"
/// </summary>
public class GotoCaseStatement : Statement
{
public static readonly Role<CSharpTokenNode> CaseKeywordRole = new Role<CSharpTokenNode>("CaseKeyword", CSharpTokenNode.Null);
public CSharpTokenNode GotoToken {
get { return GetChildByRole (Roles.Keyword); }
}
public CSharpTokenNode CaseToken {
get { return GetChildByRole (CaseKeywordRole); }
}
public string Label {
get {
return GetChildByRole (Roles.Identifier).Name;
}
set {
if (string.IsNullOrEmpty(value))
SetChildByRole(Roles.Identifier, null);
else
SetChildByRole(Roles.Identifier, new Identifier(value, AstLocation.Empty));
}
}
public GotoStatement (GotoType gotoType)
/// <summary>
/// Used for "goto case LabelExpression;"
/// </summary>
public Expression LabelExpression {
get { return GetChildByRole (Roles.Expression); }
set { SetChildByRole (Roles.Expression, value); }
}
public CSharpTokenNode SemicolonToken {
get { return GetChildByRole (Roles.Semicolon); }
}
public override S AcceptVisitor<T, S> (AstVisitor<T, S> visitor, T data)
{
this.GotoType = gotoType;
return visitor.VisitGotoCaseStatement (this, data);
}
}
public enum GotoType {
Label,
Case,
CaseDefault
/// <summary>
/// or "goto default;"
/// </summary>
public class GotoDefaultStatement : Statement
{
public static readonly Role<CSharpTokenNode> DefaultKeywordRole = new Role<CSharpTokenNode>("DefaultKeyword", CSharpTokenNode.Null);
public CSharpTokenNode GotoToken {
get { return GetChildByRole (Roles.Keyword); }
}
public CSharpTokenNode DefaultToken {
get { return GetChildByRole (DefaultKeywordRole); }
}
public CSharpTokenNode SemicolonToken {
get { return GetChildByRole (Roles.Semicolon); }
}
public override S AcceptVisitor<T, S> (AstVisitor<T, S> visitor, T data)
{
return visitor.VisitGotoDefaultStatement (this, data);
}
}
}

3
ICSharpCode.NRefactory/CSharp/Ast/Statements/YieldStatement.cs

@ -56,7 +56,4 @@ namespace ICSharpCode.NRefactory.CSharp @@ -56,7 +56,4 @@ namespace ICSharpCode.NRefactory.CSharp
return visitor.VisitYieldStatement (this, data);
}
}
}

8
ICSharpCode.NRefactory/CSharp/Ast/TypeMembers/IndexerDeclaration.cs

@ -31,11 +31,19 @@ namespace ICSharpCode.NRefactory.CSharp @@ -31,11 +31,19 @@ namespace ICSharpCode.NRefactory.CSharp
{
public class IndexerDeclaration : PropertyDeclaration
{
public CSharpTokenNode LBracketToken {
get { return GetChildByRole (Roles.LBracket); }
}
public IEnumerable<ParameterDeclaration> Parameters {
get { return GetChildrenByRole (Roles.Parameter); }
set { SetChildrenByRole (Roles.Parameter, value); }
}
public CSharpTokenNode RBracketToken {
get { return GetChildByRole (Roles.RBracket); }
}
public override S AcceptVisitor<T, S> (AstVisitor<T, S> visitor, T data)
{
return visitor.VisitIndexerDeclaration (this, data);

1
ICSharpCode.NRefactory/CSharp/Ast/TypeMembers/MethodDeclaration.cs

@ -66,7 +66,6 @@ namespace ICSharpCode.NRefactory.CSharp @@ -66,7 +66,6 @@ namespace ICSharpCode.NRefactory.CSharp
}
}
public override S AcceptVisitor<T, S> (AstVisitor<T, S> visitor, T data)
{
return visitor.VisitMethodDeclaration (this, data);

1
ICSharpCode.NRefactory/CSharp/Ast/TypeMembers/VariableInitializer.cs

@ -56,6 +56,5 @@ namespace ICSharpCode.NRefactory.CSharp @@ -56,6 +56,5 @@ namespace ICSharpCode.NRefactory.CSharp
{
return visitor.VisitVariableInitializer (this, data);
}
}
}

36
ICSharpCode.NRefactory/CSharp/OutputVisitor/OutputVisitor.cs

@ -1322,25 +1322,31 @@ namespace ICSharpCode.NRefactory.CSharp @@ -1322,25 +1322,31 @@ namespace ICSharpCode.NRefactory.CSharp
return EndNode(forStatement);
}
public object VisitGotoCaseStatement(GotoCaseStatement gotoCaseStatement, object data)
{
StartNode(gotoCaseStatement);
WriteKeyword("goto");
WriteKeyword("case", GotoCaseStatement.CaseKeywordRole);
Space();
gotoCaseStatement.LabelExpression.AcceptVisitor(this, data);
Semicolon();
return EndNode(gotoCaseStatement);
}
public object VisitGotoDefaultStatement(GotoDefaultStatement gotoDefaultStatement, object data)
{
StartNode(gotoDefaultStatement);
WriteKeyword("goto");
WriteKeyword("default", GotoDefaultStatement.DefaultKeywordRole);
Semicolon();
return EndNode(gotoDefaultStatement);
}
public object VisitGotoStatement(GotoStatement gotoStatement, object data)
{
StartNode(gotoStatement);
WriteKeyword("goto");
switch (gotoStatement.GotoType) {
case GotoType.Label:
WriteIdentifier(gotoStatement.Label);
break;
case GotoType.Case:
WriteKeyword("case", GotoStatement.CaseKeywordRole);
Space();
gotoStatement.LabelExpression.AcceptVisitor(this, data);
break;
case GotoType.CaseDefault:
WriteKeyword("default", GotoStatement.DefaultKeywordRole);
break;
default:
throw new NotSupportedException("Invalid value for GotoType");
}
WriteIdentifier(gotoStatement.Label);
Semicolon();
return EndNode(gotoStatement);
}

20
ICSharpCode.NRefactory/CSharp/Parser/CSharpParser.cs

@ -1009,7 +1009,7 @@ namespace ICSharpCode.NRefactory.CSharp @@ -1009,7 +1009,7 @@ namespace ICSharpCode.NRefactory.CSharp
public override object Visit (Goto gotoStatement)
{
var result = new GotoStatement (GotoType.Label);
var result = new GotoStatement ();
var location = LocationsBag.GetLocations (gotoStatement);
result.AddChild (new CSharpTokenNode (Convert (gotoStatement.loc), "goto".Length), GotoStatement.Roles.Keyword);
result.AddChild (new Identifier (gotoStatement.Target, Convert (gotoStatement.loc)), GotoStatement.Roles.Identifier);
@ -1028,12 +1028,12 @@ namespace ICSharpCode.NRefactory.CSharp @@ -1028,12 +1028,12 @@ namespace ICSharpCode.NRefactory.CSharp
public override object Visit (GotoDefault gotoDefault)
{
var result = new GotoStatement (GotoType.CaseDefault);
result.AddChild (new CSharpTokenNode (Convert (gotoDefault.loc), "goto".Length), GotoStatement.Roles.Keyword);
var result = new GotoDefaultStatement ();
result.AddChild (new CSharpTokenNode (Convert (gotoDefault.loc), "goto".Length), GotoDefaultStatement.Roles.Keyword);
var location = LocationsBag.GetLocations (gotoDefault);
if (location != null) {
result.AddChild (new CSharpTokenNode (Convert (location[0]), "default".Length), GotoStatement.DefaultKeywordRole);
result.AddChild (new CSharpTokenNode (Convert (location[1]), 1), GotoStatement.Roles.Semicolon);
result.AddChild (new CSharpTokenNode (Convert (location[0]), "default".Length), GotoDefaultStatement.DefaultKeywordRole);
result.AddChild (new CSharpTokenNode (Convert (location[1]), 1), GotoDefaultStatement.Roles.Semicolon);
}
return result;
@ -1041,15 +1041,15 @@ namespace ICSharpCode.NRefactory.CSharp @@ -1041,15 +1041,15 @@ namespace ICSharpCode.NRefactory.CSharp
public override object Visit (GotoCase gotoCase)
{
var result = new GotoStatement (GotoType.Case);
result.AddChild (new CSharpTokenNode (Convert (gotoCase.loc), "goto".Length), GotoStatement.Roles.Keyword);
var result = new GotoCaseStatement ();
result.AddChild (new CSharpTokenNode (Convert (gotoCase.loc), "goto".Length), GotoCaseStatement.Roles.Keyword);
var location = LocationsBag.GetLocations (gotoCase);
if (location != null)
result.AddChild (new CSharpTokenNode (Convert (location[0]), "case".Length), GotoStatement.CaseKeywordRole);
result.AddChild ((Expression)gotoCase.Expr.Accept (this), GotoStatement.Roles.Expression);
result.AddChild (new CSharpTokenNode (Convert (location[0]), "case".Length), GotoCaseStatement.CaseKeywordRole);
result.AddChild ((Expression)gotoCase.Expr.Accept (this), GotoCaseStatement.Roles.Expression);
if (location != null)
result.AddChild (new CSharpTokenNode (Convert (location[1]), 1), GotoStatement.Roles.Semicolon);
result.AddChild (new CSharpTokenNode (Convert (location[1]), 1), GotoCaseStatement.Roles.Semicolon);
return result;
}

Loading…
Cancel
Save