15 changed files with 671 additions and 440 deletions
@ -1,31 +0,0 @@ |
|||||||
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
|
||||||
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
|
||||||
|
|
||||||
using System; |
|
||||||
|
|
||||||
namespace ICSharpCode.NRefactory.VB.Ast |
|
||||||
{ |
|
||||||
public class AddressOfExpression : Expression |
|
||||||
{ |
|
||||||
public AddressOfExpression() |
|
||||||
{ |
|
||||||
} |
|
||||||
|
|
||||||
public Expression Expression { |
|
||||||
get { return GetChildByRole(Roles.Expression); } |
|
||||||
set { SetChildByRole(Roles.Expression, value); } |
|
||||||
} |
|
||||||
|
|
||||||
protected internal override bool DoMatch(AstNode other, ICSharpCode.NRefactory.PatternMatching.Match match) |
|
||||||
{ |
|
||||||
var expr = other as AddressOfExpression; |
|
||||||
return expr != null && |
|
||||||
Expression.DoMatch(expr.Expression, match); |
|
||||||
} |
|
||||||
|
|
||||||
public override S AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data) |
|
||||||
{ |
|
||||||
return visitor.VisitAddressOfExpression(this, data); |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
@ -0,0 +1,44 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
|
||||||
|
namespace ICSharpCode.NRefactory.VB.Ast |
||||||
|
{ |
||||||
|
public class AssignmentExpression : Expression |
||||||
|
{ |
||||||
|
public readonly static Role<Expression> LeftExpressionRole = BinaryOperatorExpression.LeftExpressionRole; |
||||||
|
public readonly static Role<VBTokenNode> OperatorRole = BinaryOperatorExpression.OperatorRole; |
||||||
|
public readonly static Role<Expression> RightExpressionRole = BinaryOperatorExpression.RightExpressionRole; |
||||||
|
|
||||||
|
public AssignmentExpression(Expression left, AssignmentOperatorType type, Expression right) |
||||||
|
{ |
||||||
|
AddChild(left, LeftExpressionRole); |
||||||
|
AddChild(right, RightExpressionRole); |
||||||
|
Operator = type; |
||||||
|
} |
||||||
|
|
||||||
|
public Expression Left { |
||||||
|
get { return GetChildByRole(LeftExpressionRole); } |
||||||
|
set { SetChildByRole(LeftExpressionRole, value); } |
||||||
|
} |
||||||
|
|
||||||
|
public AssignmentOperatorType Operator { get; set; } |
||||||
|
|
||||||
|
public Expression Right { |
||||||
|
get { return GetChildByRole(RightExpressionRole); } |
||||||
|
set { SetChildByRole(RightExpressionRole, 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.VisitAssignmentExpression(this, data); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,110 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
|
||||||
|
namespace ICSharpCode.NRefactory.VB.Ast |
||||||
|
{ |
||||||
|
public class BinaryOperatorExpression : Expression |
||||||
|
{ |
||||||
|
public readonly static Role<Expression> LeftExpressionRole = new Role<Expression>("Left"); |
||||||
|
public readonly static Role<VBTokenNode> OperatorRole = new Role<VBTokenNode>("Operator"); |
||||||
|
public readonly static Role<Expression> RightExpressionRole = new Role<Expression>("Right"); |
||||||
|
|
||||||
|
public BinaryOperatorExpression(Expression left, BinaryOperatorType type, Expression right) |
||||||
|
{ |
||||||
|
AddChild(left, LeftExpressionRole); |
||||||
|
AddChild(right, RightExpressionRole); |
||||||
|
Operator = type; |
||||||
|
} |
||||||
|
|
||||||
|
public Expression Left { |
||||||
|
get { return GetChildByRole(LeftExpressionRole); } |
||||||
|
set { SetChildByRole(LeftExpressionRole, value); } |
||||||
|
} |
||||||
|
|
||||||
|
public BinaryOperatorType Operator { get; set; } |
||||||
|
|
||||||
|
public Expression Right { |
||||||
|
get { return GetChildByRole(RightExpressionRole); } |
||||||
|
set { SetChildByRole(RightExpressionRole, 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.VisitBinaryOperatorExpression(this, data); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public enum BinaryOperatorType |
||||||
|
{ |
||||||
|
None, |
||||||
|
|
||||||
|
/// <summary>'&' in C#, 'And' in VB.</summary>
|
||||||
|
BitwiseAnd, |
||||||
|
/// <summary>'|' in C#, 'Or' in VB.</summary>
|
||||||
|
BitwiseOr, |
||||||
|
/// <summary>'&&' in C#, 'AndAlso' in VB.</summary>
|
||||||
|
LogicalAnd, |
||||||
|
/// <summary>'||' in C#, 'OrElse' in VB.</summary>
|
||||||
|
LogicalOr, |
||||||
|
/// <summary>'^' in C#, 'Xor' in VB.</summary>
|
||||||
|
ExclusiveOr, |
||||||
|
|
||||||
|
/// <summary>></summary>
|
||||||
|
GreaterThan, |
||||||
|
/// <summary>>=</summary>
|
||||||
|
GreaterThanOrEqual, |
||||||
|
/// <summary>'==' in C#, '=' in VB.</summary>
|
||||||
|
Equality, |
||||||
|
/// <summary>'!=' in C#, '<>' in VB.</summary>
|
||||||
|
InEquality, |
||||||
|
/// <summary><</summary>
|
||||||
|
LessThan, |
||||||
|
/// <summary><=</summary>
|
||||||
|
LessThanOrEqual, |
||||||
|
|
||||||
|
/// <summary>+</summary>
|
||||||
|
Add, |
||||||
|
/// <summary>-</summary>
|
||||||
|
Subtract, |
||||||
|
/// <summary>*</summary>
|
||||||
|
Multiply, |
||||||
|
/// <summary>/</summary>
|
||||||
|
Divide, |
||||||
|
/// <summary>'%' in C#, 'Mod' in VB.</summary>
|
||||||
|
Modulus, |
||||||
|
/// <summary>VB-only: \</summary>
|
||||||
|
DivideInteger, |
||||||
|
/// <summary>VB-only: ^</summary>
|
||||||
|
Power, |
||||||
|
/// <summary>VB-only: &</summary>
|
||||||
|
Concat, |
||||||
|
|
||||||
|
/// <summary>C#: <<</summary>
|
||||||
|
ShiftLeft, |
||||||
|
/// <summary>C#: >></summary>
|
||||||
|
ShiftRight, |
||||||
|
/// <summary>VB-only: Is</summary>
|
||||||
|
ReferenceEquality, |
||||||
|
/// <summary>VB-only: IsNot</summary>
|
||||||
|
ReferenceInequality, |
||||||
|
|
||||||
|
/// <summary>VB-only: Like</summary>
|
||||||
|
Like, |
||||||
|
/// <summary>
|
||||||
|
/// C#: ??
|
||||||
|
/// VB: IF(x, y)
|
||||||
|
/// </summary>
|
||||||
|
NullCoalescing, |
||||||
|
|
||||||
|
/// <summary>VB-only: !</summary>
|
||||||
|
DictionaryAccess |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
|
||||||
|
namespace ICSharpCode.NRefactory.VB.Ast |
||||||
|
{ |
||||||
|
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); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,49 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
|
||||||
|
namespace ICSharpCode.NRefactory.VB.Ast |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// [ Key ] .Identifier = Expression
|
||||||
|
/// </summary>
|
||||||
|
public class FieldInitializerExpression : Expression |
||||||
|
{ |
||||||
|
public bool IsKey { get; set; } |
||||||
|
|
||||||
|
public VBTokenNode KeyToken { |
||||||
|
get { return GetChildByRole (Roles.Keyword); } |
||||||
|
} |
||||||
|
|
||||||
|
public VBTokenNode DotToken { |
||||||
|
get { return GetChildByRole (Roles.Dot); } |
||||||
|
} |
||||||
|
|
||||||
|
public Identifier Identifier { |
||||||
|
get { return GetChildByRole(Roles.Identifier); } |
||||||
|
set { SetChildByRole(Roles.Identifier, value); } |
||||||
|
} |
||||||
|
|
||||||
|
public VBTokenNode AssignToken { |
||||||
|
get { return GetChildByRole (Roles.Assign); } |
||||||
|
} |
||||||
|
|
||||||
|
public Expression Expression { |
||||||
|
get { return GetChildByRole (Roles.Expression); } |
||||||
|
set { SetChildByRole (Roles.Expression, value); } |
||||||
|
} |
||||||
|
|
||||||
|
public override S AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data) |
||||||
|
{ |
||||||
|
return visitor.VisitFieldInitializerExpression(this, data); |
||||||
|
} |
||||||
|
|
||||||
|
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) |
||||||
|
{ |
||||||
|
FieldInitializerExpression o = other as FieldInitializerExpression; |
||||||
|
return o != null && this.IsKey == o.IsKey && this.Identifier.DoMatch(o.Identifier, match) && this.Expression.DoMatch(o.Expression, match); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,52 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
|
||||||
|
namespace ICSharpCode.NRefactory.VB.Ast |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Target(Arguments)
|
||||||
|
/// </summary>
|
||||||
|
public class InvocationExpression : Expression |
||||||
|
{ |
||||||
|
public Expression Target { |
||||||
|
get { return GetChildByRole (Roles.TargetExpression); } |
||||||
|
set { SetChildByRole(Roles.TargetExpression, value); } |
||||||
|
} |
||||||
|
|
||||||
|
public AstNodeCollection<Expression> Arguments { |
||||||
|
get { return GetChildrenByRole<Expression>(Roles.Argument); } |
||||||
|
} |
||||||
|
|
||||||
|
public override S AcceptVisitor<T, S> (IAstVisitor<T, S> visitor, T data) |
||||||
|
{ |
||||||
|
return visitor.VisitInvocationExpression(this, data); |
||||||
|
} |
||||||
|
|
||||||
|
public InvocationExpression () |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public InvocationExpression (Expression target, IEnumerable<Expression> arguments) |
||||||
|
{ |
||||||
|
AddChild (target, Roles.TargetExpression); |
||||||
|
if (arguments != null) { |
||||||
|
foreach (var arg in arguments) { |
||||||
|
AddChild (arg, Roles.Argument); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public InvocationExpression (Expression target, params Expression[] arguments) : this (target, (IEnumerable<Expression>)arguments) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) |
||||||
|
{ |
||||||
|
InvocationExpression o = other as InvocationExpression; |
||||||
|
return o != null && this.Target.DoMatch(o.Target, match) && this.Arguments.DoMatch(o.Arguments, match); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,124 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
using System.Linq; |
||||||
|
|
||||||
|
namespace ICSharpCode.NRefactory.VB.Ast |
||||||
|
{ |
||||||
|
public abstract class LambdaExpression : Expression |
||||||
|
{ |
||||||
|
public static readonly Role<VBModifierToken> ModifierRole = AttributedNode.ModifierRole; |
||||||
|
|
||||||
|
public LambdaExpressionModifiers Modifiers { |
||||||
|
get { return GetModifiers(this); } |
||||||
|
set { SetModifiers(this, value); } |
||||||
|
} |
||||||
|
|
||||||
|
public AstNodeCollection<VBModifierToken> ModifierTokens { |
||||||
|
get { return GetChildrenByRole (ModifierRole); } |
||||||
|
} |
||||||
|
|
||||||
|
internal static LambdaExpressionModifiers GetModifiers(AstNode node) |
||||||
|
{ |
||||||
|
LambdaExpressionModifiers m = 0; |
||||||
|
foreach (VBModifierToken t in node.GetChildrenByRole (ModifierRole)) { |
||||||
|
m |= (LambdaExpressionModifiers)t.Modifier; |
||||||
|
} |
||||||
|
return m; |
||||||
|
} |
||||||
|
|
||||||
|
internal static void SetModifiers(AstNode node, LambdaExpressionModifiers newValue) |
||||||
|
{ |
||||||
|
LambdaExpressionModifiers oldValue = GetModifiers(node); |
||||||
|
AstNode insertionPos = null; |
||||||
|
foreach (Modifiers m in VBModifierToken.AllModifiers) { |
||||||
|
if ((m & (Modifiers)newValue) != 0) { |
||||||
|
if ((m & (Modifiers)oldValue) == 0) { |
||||||
|
// Modifier was added
|
||||||
|
var newToken = new VBModifierToken(AstLocation.Empty, m); |
||||||
|
node.InsertChildAfter(insertionPos, newToken, ModifierRole); |
||||||
|
insertionPos = newToken; |
||||||
|
} else { |
||||||
|
// Modifier already exists
|
||||||
|
insertionPos = node.GetChildrenByRole(ModifierRole).First(t => t.Modifier == m); |
||||||
|
} |
||||||
|
} else { |
||||||
|
if ((m & (Modifiers)oldValue) != 0) { |
||||||
|
// Modifier was removed
|
||||||
|
node.GetChildrenByRole (ModifierRole).First(t => t.Modifier == m).Remove(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public AstNodeCollection<ParameterDeclaration> Parameters { |
||||||
|
get { return GetChildrenByRole(Roles.Parameter); } |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public class SingleLineSubLambdaExpression : LambdaExpression |
||||||
|
{ |
||||||
|
public static readonly Role<Statement> StatementRole = BlockStatement.StatementRole; |
||||||
|
|
||||||
|
public Statement EmbeddedStatement { |
||||||
|
get { return GetChildByRole(StatementRole); } |
||||||
|
set { SetChildByRole(StatementRole, 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.VisitSingleLineSubLambdaExpression(this, data); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public class SingleLineFunctionLambdaExpression : LambdaExpression |
||||||
|
{ |
||||||
|
public Expression EmbeddedExpression { |
||||||
|
get { return GetChildByRole(Roles.Expression); } |
||||||
|
set { SetChildByRole(Roles.Expression, 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.VisitSingleLineFunctionLambdaExpression(this, data); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public class MultiLineLambdaExpression : LambdaExpression |
||||||
|
{ |
||||||
|
public bool IsSub { get; set; } |
||||||
|
|
||||||
|
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.VisitMultiLineLambdaExpression(this, data); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public enum LambdaExpressionModifiers |
||||||
|
{ |
||||||
|
Async = Modifiers.Async, |
||||||
|
Iterator = Modifiers.Iterator |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,39 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
|
||||||
|
namespace ICSharpCode.NRefactory.VB.Ast |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Represents a named argument passed to a method or attribute.
|
||||||
|
/// </summary>
|
||||||
|
public class NamedArgumentExpression : Expression |
||||||
|
{ |
||||||
|
public Identifier Identifier { |
||||||
|
get { return GetChildByRole(Roles.Identifier); } |
||||||
|
set { SetChildByRole(Roles.Identifier, value); } |
||||||
|
} |
||||||
|
|
||||||
|
public VBTokenNode AssignToken { |
||||||
|
get { return GetChildByRole (Roles.Assign); } |
||||||
|
} |
||||||
|
|
||||||
|
public Expression Expression { |
||||||
|
get { return GetChildByRole (Roles.Expression); } |
||||||
|
set { SetChildByRole (Roles.Expression, value); } |
||||||
|
} |
||||||
|
|
||||||
|
public override S AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data) |
||||||
|
{ |
||||||
|
return visitor.VisitNamedArgumentExpression(this, data); |
||||||
|
} |
||||||
|
|
||||||
|
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) |
||||||
|
{ |
||||||
|
NamedArgumentExpression o = other as NamedArgumentExpression; |
||||||
|
return o != null && this.Identifier.DoMatch(o.Identifier, match) && this.Expression.DoMatch(o.Expression, match); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,80 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
|
||||||
|
namespace ICSharpCode.NRefactory.VB.Ast |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Operator Expression
|
||||||
|
/// </summary>
|
||||||
|
public class UnaryOperatorExpression : Expression |
||||||
|
{ |
||||||
|
public readonly static Role<VBTokenNode> OperatorRole = BinaryOperatorExpression.OperatorRole; |
||||||
|
|
||||||
|
public UnaryOperatorExpression() |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
public UnaryOperatorExpression(UnaryOperatorType op, Expression expression) |
||||||
|
{ |
||||||
|
this.Operator = op; |
||||||
|
this.Expression = expression; |
||||||
|
} |
||||||
|
|
||||||
|
public UnaryOperatorType Operator { |
||||||
|
get; |
||||||
|
set; |
||||||
|
} |
||||||
|
|
||||||
|
public VBTokenNode OperatorToken { |
||||||
|
get { return GetChildByRole (OperatorRole); } |
||||||
|
} |
||||||
|
|
||||||
|
public Expression Expression { |
||||||
|
get { return GetChildByRole (Roles.Expression); } |
||||||
|
set { SetChildByRole (Roles.Expression, value); } |
||||||
|
} |
||||||
|
|
||||||
|
public override S AcceptVisitor<T, S> (IAstVisitor<T, S> visitor, T data) |
||||||
|
{ |
||||||
|
return visitor.VisitUnaryOperatorExpression(this, data); |
||||||
|
} |
||||||
|
|
||||||
|
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) |
||||||
|
{ |
||||||
|
UnaryOperatorExpression o = other as UnaryOperatorExpression; |
||||||
|
return o != null && this.Operator == o.Operator && this.Expression.DoMatch(o.Expression, match); |
||||||
|
} |
||||||
|
|
||||||
|
public static string GetOperatorSymbol(UnaryOperatorType op) |
||||||
|
{ |
||||||
|
switch (op) { |
||||||
|
case UnaryOperatorType.Not: |
||||||
|
return "Not"; |
||||||
|
case UnaryOperatorType.Minus: |
||||||
|
return "-"; |
||||||
|
case UnaryOperatorType.Plus: |
||||||
|
return "+"; |
||||||
|
default: |
||||||
|
throw new NotSupportedException("Invalid value for UnaryOperatorType"); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public enum UnaryOperatorType |
||||||
|
{ |
||||||
|
/// <summary>Logical/Bitwise not (Not a)</summary>
|
||||||
|
Not, |
||||||
|
/// <summary>Unary minus (-a)</summary>
|
||||||
|
Minus, |
||||||
|
/// <summary>Unary plus (+a)</summary>
|
||||||
|
Plus, |
||||||
|
/// <summary>AddressOf</summary>
|
||||||
|
AddressOf, |
||||||
|
/// <summary>Await</summary>
|
||||||
|
Await |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,44 @@ |
|||||||
|
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
|
||||||
|
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
|
||||||
|
|
||||||
|
using System; |
||||||
|
using System.Collections.Generic; |
||||||
|
|
||||||
|
namespace ICSharpCode.NRefactory.VB.Ast |
||||||
|
{ |
||||||
|
/// <summary>
|
||||||
|
/// Identifier As Type = Expression
|
||||||
|
/// </summary>
|
||||||
|
public class VariableInitializer : AstNode |
||||||
|
{ |
||||||
|
public VariableIdentifier Identifier { |
||||||
|
get { return GetChildByRole(VariableIdentifier.VariableIdentifierRole); } |
||||||
|
set { SetChildByRole(VariableIdentifier.VariableIdentifierRole, value); } |
||||||
|
} |
||||||
|
|
||||||
|
public AstType Type { |
||||||
|
get { return GetChildByRole(Roles.Type); } |
||||||
|
set { SetChildByRole(Roles.Type, value); } |
||||||
|
} |
||||||
|
|
||||||
|
public VBTokenNode AssignToken { |
||||||
|
get { return GetChildByRole (Roles.Assign); } |
||||||
|
} |
||||||
|
|
||||||
|
public Expression Expression { |
||||||
|
get { return GetChildByRole (Roles.Expression); } |
||||||
|
set { SetChildByRole (Roles.Expression, value); } |
||||||
|
} |
||||||
|
|
||||||
|
public override S AcceptVisitor<T, S>(IAstVisitor<T, S> visitor, T data) |
||||||
|
{ |
||||||
|
return visitor.VisitVariableInitializer(this, data); |
||||||
|
} |
||||||
|
|
||||||
|
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match) |
||||||
|
{ |
||||||
|
VariableInitializer o = other as VariableInitializer; |
||||||
|
return o != null && this.Identifier.DoMatch(o.Identifier, match) && this.Expression.DoMatch(o.Expression, match); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue