Skip to content

Commit 8a647ea

Browse files
committed
C#: Do not change kind of unary expressions to operator invocations expressions and cleanup the implementation.
1 parent 6545cb3 commit 8a647ea

5 files changed

Lines changed: 24 additions & 38 deletions

File tree

csharp/extractor/Semmle.Extraction.CSharp/Entities/Expression.cs

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -263,16 +263,6 @@ type.SpecialType is SpecialType.System_IntPtr ||
263263
return si.Symbol as IMethodSymbol;
264264
}
265265

266-
/// <summary>
267-
/// Adapt the operator kind depending on whether it's a dynamic call or a user-operator call.
268-
/// </summary>
269-
/// <param name="cx"></param>
270-
/// <param name="node"></param>
271-
/// <param name="originalKind"></param>
272-
/// <returns></returns>
273-
public static ExprKind UnaryOperatorKind(Context cx, ExprKind originalKind, ExpressionSyntax node) =>
274-
GetCallType(cx, node).AdjustKind(originalKind);
275-
276266
/// <summary>
277267
/// If the expression calls an operator, add an expr_call()
278268
/// to show the target of the call. Also note the dynamic method

csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Cast.cs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,17 @@ internal class Cast : Expression<CastExpressionSyntax>
1010
private const int ExpressionIndex = 0;
1111
private const int TypeAccessIndex = 1;
1212

13-
private Cast(ExpressionNodeInfo info) : base(info.SetKind(UnaryOperatorKind(info.Context, ExprKind.CAST, info.Node))) { }
13+
private Cast(ExpressionNodeInfo info) : base(info.SetKind(GetKind(info.Context, ExprKind.CAST, info.Node))) { }
14+
15+
/// <summary>
16+
/// Adapt the operator kind depending on whether it's a dynamic call or a user-operator call.
17+
/// </summary>
18+
/// <param name="cx"></param>
19+
/// <param name="node"></param>
20+
/// <param name="originalKind"></param>
21+
/// <returns></returns>
22+
public static ExprKind GetKind(Context cx, ExprKind originalKind, ExpressionSyntax node) =>
23+
GetCallType(cx, node).AdjustKind(originalKind);
1424

1525
public static Expression Create(ExpressionNodeInfo info) => new Cast(info).TryPopulate();
1626

csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Factory.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ internal static Expression Create(ExpressionNodeInfo info)
5858
return Invocation.Create(info);
5959

6060
case SyntaxKind.PostIncrementExpression:
61-
return PostfixUnary.Create(info.SetKind(ExprKind.POST_INCR), ((PostfixUnaryExpressionSyntax)info.Node).Operand);
61+
return PostfixUnary.Create(info.SetKind(ExprKind.POST_INCR));
6262

6363
case SyntaxKind.PostDecrementExpression:
64-
return PostfixUnary.Create(info.SetKind(ExprKind.POST_DECR), ((PostfixUnaryExpressionSyntax)info.Node).Operand);
64+
return PostfixUnary.Create(info.SetKind(ExprKind.POST_DECR));
6565

6666
case SyntaxKind.AwaitExpression:
6767
return Await.Create(info);
@@ -254,7 +254,7 @@ internal static Expression Create(ExpressionNodeInfo info)
254254
return Switch.Create(info);
255255

256256
case SyntaxKind.SuppressNullableWarningExpression:
257-
return PostfixUnary.Create(info.SetKind(ExprKind.SUPPRESS_NULLABLE_WARNING), ((PostfixUnaryExpressionSyntax)info.Node).Operand);
257+
return PostfixUnary.Create(info.SetKind(ExprKind.SUPPRESS_NULLABLE_WARNING));
258258

259259
case SyntaxKind.WithExpression:
260260
return WithExpression.Create(info);

csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/PostfixUnary.cs

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,21 @@
44

55
namespace Semmle.Extraction.CSharp.Entities.Expressions
66
{
7-
internal class PostfixUnary : Expression<ExpressionSyntax>
7+
internal class PostfixUnary : Expression<PostfixUnaryExpressionSyntax>
88
{
9-
private PostfixUnary(ExpressionNodeInfo info, ExprKind kind, ExpressionSyntax operand)
10-
: base(info.SetKind(UnaryOperatorKind(info.Context, kind, info.Node)))
9+
private PostfixUnary(ExpressionNodeInfo info)
10+
: base(info)
1111
{
12-
this.operand = operand;
13-
operatorKind = kind;
1412
}
1513

16-
private readonly ExpressionSyntax operand;
17-
private readonly ExprKind operatorKind;
18-
19-
public static Expression Create(ExpressionNodeInfo info, ExpressionSyntax operand) => new PostfixUnary(info, info.Kind, operand).TryPopulate();
14+
public static Expression Create(ExpressionNodeInfo info) => new PostfixUnary(info).TryPopulate();
2015

2116
protected override void PopulateExpression(TextWriter trapFile)
2217
{
23-
Create(Context, operand, this, 0);
18+
Create(Context, Syntax.Operand, this, 0);
2419
AddOperatorCall(trapFile, Syntax);
2520

26-
if ((operatorKind == ExprKind.POST_INCR || operatorKind == ExprKind.POST_DECR) &&
27-
Kind == ExprKind.OPERATOR_INVOCATION)
21+
if (Kind == ExprKind.POST_INCR || Kind == ExprKind.POST_DECR)
2822
{
2923
trapFile.mutator_invocation_mode(this, 2);
3024
}

csharp/extractor/Semmle.Extraction.CSharp/Entities/Expressions/Unary.cs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,20 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
66
{
77
internal class Unary : Expression<PrefixUnaryExpressionSyntax>
88
{
9-
private Unary(ExpressionNodeInfo info, ExprKind kind)
10-
: base(info.SetKind(UnaryOperatorKind(info.Context, info.Kind, info.Node)))
9+
private Unary(ExpressionNodeInfo info)
10+
: base(info)
1111
{
12-
operatorKind = kind;
1312
}
1413

15-
private readonly ExprKind operatorKind;
1614

17-
public static Unary Create(ExpressionNodeInfo info)
18-
{
19-
var ret = new Unary(info, info.Kind);
20-
ret.TryPopulate();
21-
return ret;
22-
}
15+
public static Expression Create(ExpressionNodeInfo info) => new Unary(info).TryPopulate();
2316

2417
protected override void PopulateExpression(TextWriter trapFile)
2518
{
2619
Create(Context, Syntax.Operand, this, 0);
2720
AddOperatorCall(trapFile, Syntax);
2821

29-
if ((operatorKind == ExprKind.PRE_INCR || operatorKind == ExprKind.PRE_DECR) &&
30-
Kind == ExprKind.OPERATOR_INVOCATION)
22+
if (Kind == ExprKind.PRE_INCR || Kind == ExprKind.PRE_DECR)
3123
{
3224
trapFile.mutator_invocation_mode(this, 1);
3325
}

0 commit comments

Comments
 (0)