Browse Source

add ConditionalExpression and WhileStatement

newNRvisualizers
Siegfried Pammer 14 years ago
parent
commit
84b283be62
  1. 36
      ICSharpCode.NRefactory.VB/Ast/Expressions/Expression.cs
  2. 31
      ICSharpCode.NRefactory.VB/Ast/Statements/WhileStatement.cs
  3. 2
      ICSharpCode.NRefactory.VB/IAstVisitor.cs
  4. 1
      ICSharpCode.NRefactory.VB/ICSharpCode.NRefactory.VB.csproj
  5. 42
      ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs
  6. 15
      ICSharpCode.NRefactory.VB/Visitors/CSharpToVBConverterVisitor.cs

36
ICSharpCode.NRefactory.VB/Ast/Expressions/Expression.cs

@ -352,4 +352,40 @@ namespace ICSharpCode.NRefactory.VB.Ast @@ -352,4 +352,40 @@ namespace ICSharpCode.NRefactory.VB.Ast
return o != null && this.IsKey == o.IsKey && this.Identifier.DoMatch(o.Identifier, match) && this.Expression.DoMatch(o.Expression, match);
}
}
public class ConditionalExpression : Expression
{
public readonly static Role<Expression> ConditionExpressionRole = new Role<Expression>("ConditionExpressionRole", Expression.Null);
public readonly static Role<Expression> TrueExpressionRole = new Role<Expression>("TrueExpressionRole", Expression.Null);
public readonly static Role<Expression> FalseExpressionRole = new Role<Expression>("FalseExpressionRole", Expression.Null);
public VBTokenNode IfToken {
get { return GetChildByRole (Roles.Keyword); }
}
public Expression ConditionExpression {
get { return GetChildByRole (ConditionExpressionRole); }
set { SetChildByRole (ConditionExpressionRole, value); }
}
public Expression TrueExpression {
get { return GetChildByRole (TrueExpressionRole); }
set { SetChildByRole (TrueExpressionRole, value); }
}
public Expression FalseExpression {
get { return GetChildByRole (FalseExpressionRole); }
set { SetChildByRole (FalseExpressionRole, value); }
}
protected internal override bool DoMatch(AstNode other, ICSharpCode.NRefactory.PatternMatching.Match match)
{
throw new NotImplementedException();
}
public override S AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data)
{
return visitor.VisitConditionalExpression(this, data);
}
}
}

31
ICSharpCode.NRefactory.VB/Ast/Statements/WhileStatement.cs

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under MIT X11 license (for details please see \doc\license.txt)
using System;
using System.IO;
namespace ICSharpCode.NRefactory.VB.Ast
{
public class WhileStatement : Statement
{
public Expression Condition {
get { return GetChildByRole(Roles.Expression); }
set { SetChildByRole(Roles.Expression, value); }
}
public BlockStatement Body {
get { return GetChildByRole(Roles.Body); }
set { SetChildByRole(Roles.Body, value); }
}
protected internal override bool DoMatch(AstNode other, ICSharpCode.NRefactory.PatternMatching.Match match)
{
throw new NotImplementedException();
}
public override S AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data)
{
return visitor.VisitWhileStatement(this, data);
}
}
}

2
ICSharpCode.NRefactory.VB/IAstVisitor.cs

@ -67,6 +67,7 @@ namespace ICSharpCode.NRefactory.VB { @@ -67,6 +67,7 @@ namespace ICSharpCode.NRefactory.VB {
S VisitCastExpression(CastExpression castExpression, T data);
S VisitFieldInitializerExpression(FieldInitializerExpression fieldInitializerExpression, T data);
S VisitNamedArgumentExpression(NamedArgumentExpression namedArgumentExpression, T data);
S VisitConditionalExpression(ConditionalExpression conditionalExpression, T data);
// Statement scope
S VisitLabelDeclarationStatement(LabelDeclarationStatement labelDeclarationStatement, T data);
@ -79,6 +80,7 @@ namespace ICSharpCode.NRefactory.VB { @@ -79,6 +80,7 @@ namespace ICSharpCode.NRefactory.VB {
S VisitThrowStatement(ThrowStatement throwStatement, T data);
S VisitCatchBlock(CatchBlock catchBlock, T data);
S VisitReturnStatement(ReturnStatement returnStatement, T data);
S VisitWhileStatement(WhileStatement whileStatement, T data);
// TypeName
S VisitPrimitiveType(PrimitiveType primitiveType, T data);

1
ICSharpCode.NRefactory.VB/ICSharpCode.NRefactory.VB.csproj

@ -95,6 +95,7 @@ @@ -95,6 +95,7 @@
<Compile Include="Ast\Statements\SyncLockStatement.cs" />
<Compile Include="Ast\Statements\ThrowStatement.cs" />
<Compile Include="Ast\Statements\TryStatement.cs" />
<Compile Include="Ast\Statements\WhileStatement.cs" />
<Compile Include="Ast\Statements\WithStatement.cs" />
<Compile Include="Ast\TypeMembers\Accessor.cs" />
<Compile Include="Ast\TypeMembers\ConstructorDeclaration.cs" />

42
ICSharpCode.NRefactory.VB/OutputVisitor/OutputVisitor.cs

@ -191,6 +191,7 @@ namespace ICSharpCode.NRefactory.VB @@ -191,6 +191,7 @@ namespace ICSharpCode.NRefactory.VB
public object VisitNamespaceDeclaration(NamespaceDeclaration namespaceDeclaration, object data)
{
StartNode(namespaceDeclaration);
NewLine();
WriteKeyword("Namespace");
bool isFirst = true;
foreach (Identifier node in namespaceDeclaration.Identifiers) {
@ -1840,5 +1841,46 @@ namespace ICSharpCode.NRefactory.VB @@ -1840,5 +1841,46 @@ namespace ICSharpCode.NRefactory.VB
{
throw new NotImplementedException();
}
public object VisitConditionalExpression(ConditionalExpression conditionalExpression, object data)
{
StartNode(conditionalExpression);
WriteKeyword("If");
WriteToken("(", ConditionalExpression.Roles.LPar);
conditionalExpression.ConditionExpression.AcceptVisitor(this, data);
WriteToken(",", ConditionalExpression.Roles.Comma);
Space();
if (!conditionalExpression.TrueExpression.IsNull) {
conditionalExpression.TrueExpression.AcceptVisitor(this, data);
WriteToken(",", ConditionalExpression.Roles.Comma);
Space();
}
conditionalExpression.FalseExpression.AcceptVisitor(this, data);
WriteToken(")", ConditionalExpression.Roles.RPar);
return EndNode(conditionalExpression);
}
public object VisitWhileStatement(WhileStatement whileStatement, object data)
{
StartNode(whileStatement);
WriteKeyword("While");
Space();
whileStatement.Condition.AcceptVisitor(this, data);
NewLine();
Indent();
whileStatement.Body.AcceptVisitor(this, data);
Unindent();
WriteKeyword("End");
WriteKeyword("While");
return EndNode(whileStatement);
}
}
}

15
ICSharpCode.NRefactory.VB/Visitors/CSharpToVBConverterVisitor.cs

@ -233,7 +233,13 @@ namespace ICSharpCode.NRefactory.VB.Visitors @@ -233,7 +233,13 @@ namespace ICSharpCode.NRefactory.VB.Visitors
public AstNode VisitConditionalExpression(CSharp.ConditionalExpression conditionalExpression, object data)
{
throw new NotImplementedException();
var cond = new ConditionalExpression() {
ConditionExpression = (Expression)conditionalExpression.Condition.AcceptVisitor(this, data),
TrueExpression = (Expression)conditionalExpression.TrueExpression.AcceptVisitor(this, data),
FalseExpression = (Expression)conditionalExpression.FalseExpression.AcceptVisitor(this, data)
};
return EndNode(conditionalExpression, cond);
}
public AstNode VisitDefaultValueExpression(CSharp.DefaultValueExpression defaultValueExpression, object data)
@ -847,7 +853,12 @@ namespace ICSharpCode.NRefactory.VB.Visitors @@ -847,7 +853,12 @@ namespace ICSharpCode.NRefactory.VB.Visitors
public AstNode VisitWhileStatement(CSharp.WhileStatement whileStatement, object data)
{
throw new NotImplementedException();
var stmt = new WhileStatement() {
Condition = (Expression)whileStatement.Condition.AcceptVisitor(this, data),
Body = (BlockStatement)whileStatement.EmbeddedStatement.AcceptVisitor(this, data)
};
return EndNode(whileStatement, stmt);
}
public AstNode VisitYieldBreakStatement(CSharp.YieldBreakStatement yieldBreakStatement, object data)

Loading…
Cancel
Save