Browse Source

Add C# 7 ThrowExpression

pull/844/head
Siegfried Pammer 8 years ago
parent
commit
870705c999
  1. 9
      ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs
  2. 21
      ICSharpCode.Decompiler/CSharp/Syntax/DepthFirstAstVisitor.cs
  3. 67
      ICSharpCode.Decompiler/CSharp/Syntax/Expressions/ThrowExpression.cs
  4. 15
      ICSharpCode.Decompiler/CSharp/Syntax/IAstVisitor.cs
  5. 1
      ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj

9
ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs

@ -970,6 +970,15 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor @@ -970,6 +970,15 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
WriteKeyword("this", thisReferenceExpression.Role);
EndNode(thisReferenceExpression);
}
public virtual void VisitThrowExpression(ThrowExpression throwExpression)
{
StartNode(throwExpression);
WriteKeyword(ThrowExpression.ThrowKeywordRole);
Space();
throwExpression.Expression.AcceptVisitor(this);
EndNode(throwExpression);
}
public virtual void VisitTypeOfExpression(TypeOfExpression typeOfExpression)
{

21
ICSharpCode.Decompiler/CSharp/Syntax/DepthFirstAstVisitor.cs

@ -515,7 +515,12 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -515,7 +515,12 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
{
VisitChildren (thisReferenceExpression);
}
public virtual void VisitThrowExpression (ThrowExpression throwExpression)
{
VisitChildren (throwExpression);
}
public virtual void VisitTypeOfExpression (TypeOfExpression typeOfExpression)
{
VisitChildren (typeOfExpression);
@ -1127,7 +1132,12 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -1127,7 +1132,12 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
{
return VisitChildren (thisReferenceExpression);
}
public virtual T VisitThrowExpression (ThrowExpression throwExpression)
{
return VisitChildren (throwExpression);
}
public virtual T VisitTypeOfExpression (TypeOfExpression typeOfExpression)
{
return VisitChildren (typeOfExpression);
@ -1739,7 +1749,12 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -1739,7 +1749,12 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
{
return VisitChildren (thisReferenceExpression, data);
}
public virtual S VisitThrowExpression (ThrowExpression throwExpression, T data)
{
return VisitChildren (throwExpression, data);
}
public virtual S VisitTypeOfExpression (TypeOfExpression typeOfExpression, T data)
{
return VisitChildren (typeOfExpression, data);

67
ICSharpCode.Decompiler/CSharp/Syntax/Expressions/ThrowExpression.cs

@ -0,0 +1,67 @@ @@ -0,0 +1,67 @@
// Copyright (c) 2017 Siegfried Pammer
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this
// software and associated documentation files (the "Software"), to deal in the Software
// without restriction, including without limitation the rights to use, copy, modify, merge,
// publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
// to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or
// substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
// INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE
// FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
// DEALINGS IN THE SOFTWARE.
namespace ICSharpCode.Decompiler.CSharp.Syntax
{
/// <summary>
/// throw Expression
/// </summary>
public class ThrowExpression : Expression
{
public static readonly TokenRole ThrowKeywordRole = ThrowStatement.ThrowKeywordRole;
public CSharpTokenNode ThrowToken {
get { return GetChildByRole (ThrowKeywordRole); }
}
public Expression Expression {
get { return GetChildByRole (Roles.Expression); }
set { SetChildByRole (Roles.Expression, value); }
}
public ThrowExpression()
{
}
public ThrowExpression(Expression expression)
{
AddChild (expression, Roles.Expression);
}
public override void AcceptVisitor (IAstVisitor visitor)
{
visitor.VisitThrowExpression(this);
}
public override T AcceptVisitor<T> (IAstVisitor<T> visitor)
{
return visitor.VisitThrowExpression(this);
}
public override S AcceptVisitor<T, S> (IAstVisitor<T, S> visitor, T data)
{
return visitor.VisitThrowExpression(this, data);
}
protected internal override bool DoMatch(AstNode other, PatternMatching.Match match)
{
ThrowExpression o = other as ThrowExpression;
return o != null && this.Expression.DoMatch(o.Expression, match);
}
}
}

15
ICSharpCode.Decompiler/CSharp/Syntax/IAstVisitor.cs

@ -25,7 +25,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -25,7 +25,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
public interface IAstVisitor
{
void VisitAnonymousMethodExpression(AnonymousMethodExpression anonymousMethodExpression);
void VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression);
void VisitAnonymousTypeCreateExpression(AnonymousTypeCreateExpression anonymousTypeCreateExpression);
void VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression);
void VisitArrayInitializerExpression(ArrayInitializerExpression arrayInitializerExpression);
void VisitAsExpression(AsExpression asExpression);
@ -48,17 +48,18 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -48,17 +48,18 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
void VisitNullReferenceExpression(NullReferenceExpression nullReferenceExpression);
void VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression);
void VisitOutVarDeclarationExpression(OutVarDeclarationExpression outVarDeclarationExpression);
void VisitAnonymousTypeCreateExpression(AnonymousTypeCreateExpression anonymousTypeCreateExpression);
void VisitParenthesizedExpression(ParenthesizedExpression parenthesizedExpression);
void VisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression);
void VisitPrimitiveExpression(PrimitiveExpression primitiveExpression);
void VisitSizeOfExpression(SizeOfExpression sizeOfExpression);
void VisitStackAllocExpression(StackAllocExpression stackAllocExpression);
void VisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression);
void VisitThrowExpression(ThrowExpression throwExpression);
void VisitTypeOfExpression(TypeOfExpression typeOfExpression);
void VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression);
void VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression);
void VisitUncheckedExpression(UncheckedExpression uncheckedExpression);
void VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression);
void VisitQueryExpression(QueryExpression queryExpression);
void VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause);
@ -158,7 +159,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -158,7 +159,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
public interface IAstVisitor<out S>
{
S VisitAnonymousMethodExpression(AnonymousMethodExpression anonymousMethodExpression);
S VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression);
S VisitAnonymousTypeCreateExpression(AnonymousTypeCreateExpression anonymousTypeCreateExpression);
S VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression);
S VisitArrayInitializerExpression(ArrayInitializerExpression arrayInitializerExpression);
S VisitAsExpression(AsExpression asExpression);
@ -181,17 +182,18 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -181,17 +182,18 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
S VisitNullReferenceExpression(NullReferenceExpression nullReferenceExpression);
S VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression);
S VisitOutVarDeclarationExpression(OutVarDeclarationExpression outVarDeclarationExpression);
S VisitAnonymousTypeCreateExpression(AnonymousTypeCreateExpression anonymousTypeCreateExpression);
S VisitParenthesizedExpression(ParenthesizedExpression parenthesizedExpression);
S VisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression);
S VisitPrimitiveExpression(PrimitiveExpression primitiveExpression);
S VisitSizeOfExpression(SizeOfExpression sizeOfExpression);
S VisitStackAllocExpression(StackAllocExpression stackAllocExpression);
S VisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression);
S VisitThrowExpression(ThrowExpression throwExpression);
S VisitTypeOfExpression(TypeOfExpression typeOfExpression);
S VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression);
S VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression);
S VisitUncheckedExpression(UncheckedExpression uncheckedExpression);
S VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression);
S VisitQueryExpression(QueryExpression queryExpression);
S VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause);
@ -291,7 +293,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -291,7 +293,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
public interface IAstVisitor<in T, out S>
{
S VisitAnonymousMethodExpression(AnonymousMethodExpression anonymousMethodExpression, T data);
S VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression, T data);
S VisitAnonymousTypeCreateExpression(AnonymousTypeCreateExpression anonymousTypeCreateExpression, T data);
S VisitArrayCreateExpression(ArrayCreateExpression arrayCreateExpression, T data);
S VisitArrayInitializerExpression(ArrayInitializerExpression arrayInitializerExpression, T data);
S VisitAsExpression(AsExpression asExpression, T data);
@ -314,17 +316,18 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -314,17 +316,18 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
S VisitNullReferenceExpression(NullReferenceExpression nullReferenceExpression, T data);
S VisitObjectCreateExpression(ObjectCreateExpression objectCreateExpression, T data);
S VisitOutVarDeclarationExpression(OutVarDeclarationExpression outVarDeclarationExpression, T data);
S VisitAnonymousTypeCreateExpression(AnonymousTypeCreateExpression anonymousTypeCreateExpression, T data);
S VisitParenthesizedExpression(ParenthesizedExpression parenthesizedExpression, T data);
S VisitPointerReferenceExpression(PointerReferenceExpression pointerReferenceExpression, T data);
S VisitPrimitiveExpression(PrimitiveExpression primitiveExpression, T data);
S VisitSizeOfExpression(SizeOfExpression sizeOfExpression, T data);
S VisitStackAllocExpression(StackAllocExpression stackAllocExpression, T data);
S VisitThisReferenceExpression(ThisReferenceExpression thisReferenceExpression, T data);
S VisitThrowExpression(ThrowExpression throwExpression, T data);
S VisitTypeOfExpression(TypeOfExpression typeOfExpression, T data);
S VisitTypeReferenceExpression(TypeReferenceExpression typeReferenceExpression, T data);
S VisitUnaryOperatorExpression(UnaryOperatorExpression unaryOperatorExpression, T data);
S VisitUncheckedExpression(UncheckedExpression uncheckedExpression, T data);
S VisitUndocumentedExpression(UndocumentedExpression undocumentedExpression, T data);
S VisitQueryExpression(QueryExpression queryExpression, T data);
S VisitQueryContinuationClause(QueryContinuationClause queryContinuationClause, T data);

1
ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj

@ -100,6 +100,7 @@ @@ -100,6 +100,7 @@
<Compile Include="CSharp\Syntax\Expressions\SizeOfExpression.cs" />
<Compile Include="CSharp\Syntax\Expressions\StackAllocExpression.cs" />
<Compile Include="CSharp\Syntax\Expressions\ThisReferenceExpression.cs" />
<Compile Include="CSharp\Syntax\Expressions\ThrowExpression.cs" />
<Compile Include="CSharp\Syntax\Expressions\TypeOfExpression.cs" />
<Compile Include="CSharp\Syntax\Expressions\TypeReferenceExpression.cs" />
<Compile Include="CSharp\Syntax\Expressions\UnaryOperatorExpression.cs" />

Loading…
Cancel
Save