Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -58,10 +58,10 @@ internal static Expression Create(ExpressionNodeInfo info)
return Invocation.Create(info);

case SyntaxKind.PostIncrementExpression:
return PostfixUnary.Create(info.SetKind(ExprKind.POST_INCR), ((PostfixUnaryExpressionSyntax)info.Node).Operand);
return PostfixUnary.Create(info.SetKind(ExprKind.POST_INCR));

case SyntaxKind.PostDecrementExpression:
return PostfixUnary.Create(info.SetKind(ExprKind.POST_DECR), ((PostfixUnaryExpressionSyntax)info.Node).Operand);
return PostfixUnary.Create(info.SetKind(ExprKind.POST_DECR));

case SyntaxKind.AwaitExpression:
return Await.Create(info);
Expand Down Expand Up @@ -109,10 +109,10 @@ internal static Expression Create(ExpressionNodeInfo info)
return MemberAccess.Create(info, (MemberAccessExpressionSyntax)info.Node);

case SyntaxKind.UnaryMinusExpression:
return Unary.Create(info.SetKind(ExprKind.MINUS));
return PrefixUnary.Create(info.SetKind(ExprKind.MINUS));

case SyntaxKind.UnaryPlusExpression:
return Unary.Create(info.SetKind(ExprKind.PLUS));
return PrefixUnary.Create(info.SetKind(ExprKind.PLUS));

case SyntaxKind.SimpleLambdaExpression:
return Lambda.Create(info, (SimpleLambdaExpressionSyntax)info.Node);
Expand Down Expand Up @@ -146,16 +146,16 @@ internal static Expression Create(ExpressionNodeInfo info)
return Name.Create(info);

case SyntaxKind.LogicalNotExpression:
return Unary.Create(info.SetKind(ExprKind.LOG_NOT));
return PrefixUnary.Create(info.SetKind(ExprKind.LOG_NOT));

case SyntaxKind.BitwiseNotExpression:
return Unary.Create(info.SetKind(ExprKind.BIT_NOT));
return PrefixUnary.Create(info.SetKind(ExprKind.BIT_NOT));

case SyntaxKind.PreIncrementExpression:
return Unary.Create(info.SetKind(ExprKind.PRE_INCR));
return PrefixUnary.Create(info.SetKind(ExprKind.PRE_INCR));

case SyntaxKind.PreDecrementExpression:
return Unary.Create(info.SetKind(ExprKind.PRE_DECR));
return PrefixUnary.Create(info.SetKind(ExprKind.PRE_DECR));

case SyntaxKind.ThisExpression:
return This.CreateExplicit(info);
Expand All @@ -164,10 +164,10 @@ internal static Expression Create(ExpressionNodeInfo info)
return PropertyFieldAccess.Create(info);

case SyntaxKind.AddressOfExpression:
return Unary.Create(info.SetKind(ExprKind.ADDRESS_OF));
return PrefixUnary.Create(info.SetKind(ExprKind.ADDRESS_OF));

case SyntaxKind.PointerIndirectionExpression:
return Unary.Create(info.SetKind(ExprKind.POINTER_INDIRECTION));
return PrefixUnary.Create(info.SetKind(ExprKind.POINTER_INDIRECTION));

case SyntaxKind.DefaultExpression:
return Default.Create(info);
Expand Down Expand Up @@ -248,13 +248,13 @@ internal static Expression Create(ExpressionNodeInfo info)
return RangeExpression.Create(info);

case SyntaxKind.IndexExpression:
return Unary.Create(info.SetKind(ExprKind.INDEX));
return PrefixUnary.Create(info.SetKind(ExprKind.INDEX));

case SyntaxKind.SwitchExpression:
return Switch.Create(info);

case SyntaxKind.SuppressNullableWarningExpression:
return PostfixUnary.Create(info.SetKind(ExprKind.SUPPRESS_NULLABLE_WARNING), ((PostfixUnaryExpressionSyntax)info.Node).Operand);
return PostfixUnary.Create(info.SetKind(ExprKind.SUPPRESS_NULLABLE_WARNING));

case SyntaxKind.WithExpression:
return WithExpression.Create(info);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,29 +4,30 @@

namespace Semmle.Extraction.CSharp.Entities.Expressions
{
internal class PostfixUnary : Expression<ExpressionSyntax>
internal class PostfixUnary : Expression<PostfixUnaryExpressionSyntax>
{
private PostfixUnary(ExpressionNodeInfo info, ExprKind kind, ExpressionSyntax operand)
private PostfixUnary(ExpressionNodeInfo info, ExprKind kind)
: base(info.SetKind(UnaryOperatorKind(info.Context, kind, info.Node)))
{
this.operand = operand;
operatorKind = kind;
}

private readonly ExpressionSyntax operand;
private readonly ExprKind operatorKind;

public static Expression Create(ExpressionNodeInfo info, ExpressionSyntax operand) => new PostfixUnary(info, info.Kind, operand).TryPopulate();
public static Expression Create(ExpressionNodeInfo info) => new PostfixUnary(info, info.Kind).TryPopulate();

protected override void PopulateExpression(TextWriter trapFile)
{
Create(Context, operand, this, 0);
Create(Context, Syntax.Operand, this, 0);

if ((operatorKind == ExprKind.POST_INCR || operatorKind == ExprKind.POST_DECR) &&
Kind == ExprKind.OPERATOR_INVOCATION)
if (Kind == ExprKind.OPERATOR_INVOCATION)
{
AddOperatorCall(trapFile, Syntax);
trapFile.mutator_invocation_mode(this, 2);

if (operatorKind == ExprKind.POST_INCR || operatorKind == ExprKind.POST_DECR)
{
trapFile.mutator_invocation_mode(this, 2);
}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
using System.IO;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using Semmle.Extraction.Kinds;

namespace Semmle.Extraction.CSharp.Entities.Expressions
{
internal class PrefixUnary : Expression<PrefixUnaryExpressionSyntax>
{
private PrefixUnary(ExpressionNodeInfo info, ExprKind kind)
: base(info.SetKind(UnaryOperatorKind(info.Context, info.Kind, info.Node)))
{
operatorKind = kind;
}

private readonly ExprKind operatorKind;

public static Expression Create(ExpressionNodeInfo info) => new PrefixUnary(info, info.Kind).TryPopulate();

protected override void PopulateExpression(TextWriter trapFile)
{
Create(Context, Syntax.Operand, this, 0);

if (Kind == ExprKind.OPERATOR_INVOCATION)
{
AddOperatorCall(trapFile, Syntax);

if (operatorKind == ExprKind.PRE_INCR || operatorKind == ExprKind.PRE_DECR)
{
trapFile.mutator_invocation_mode(this, 1);
}
}
}
}
}

This file was deleted.

Loading