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
WriteKeyword("this", thisReferenceExpression.Role); WriteKeyword("this", thisReferenceExpression.Role);
EndNode(thisReferenceExpression); 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) public virtual void VisitTypeOfExpression(TypeOfExpression typeOfExpression)
{ {

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

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

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

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

1
ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj

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

Loading…
Cancel
Save