C#: Address review comments

This commit is contained in:
Tom Hvitved
2020-08-31 13:18:14 +02:00
parent 92bf830a8a
commit 51dc1515ab
6 changed files with 80 additions and 185 deletions

View File

@@ -171,15 +171,11 @@ namespace Semmle.Extraction.CSharp.Entities
trapFile.Write('(');
int index = 0;
if (method.MethodKind == MethodKind.ReducedExtension)
{
trapFile.WriteSeparator(",", ref index);
method.ReceiverType.BuildOrWriteId(cx, trapFile, method);
trapFile.Write(" ");
trapFile.Write(method.ReducedFrom.Parameters.First().Name);
}
var @params = method.MethodKind == MethodKind.ReducedExtension
? method.ReducedFrom.Parameters
: method.Parameters;
foreach (var param in method.Parameters)
foreach (var param in @params)
{
trapFile.WriteSeparator(",", ref index);
param.Type.BuildOrWriteId(cx, trapFile, method);

View File

@@ -288,7 +288,7 @@ namespace Semmle.Extraction.CSharp
}
else if (named.ContainingNamespace != null)
{
if (cx.AddAssemblyTrapPrefix && !(named.ContainingAssembly is null))
if (cx.ShouldAddAssemblyTrapPrefix && named.ContainingAssembly is object)
BuildAssembly(named.ContainingAssembly, trapFile);
named.ContainingNamespace.BuildNamespace(cx, trapFile);
}
@@ -354,7 +354,7 @@ namespace Semmle.Extraction.CSharp
// a base class, which in turn has `C1<C3<C4>>` as a base class. The latter has the original
// base class `C3<C4>` as a type argument, which would lead to infinite unfolding.
trapFile.Write(" : ");
@base.BuildOrWriteId(cx, trapFile, symbolBeingDefined, false);
@base.BuildOrWriteId(cx, trapFile, symbolBeingDefined, addBaseClass: false);
}
}

View File

@@ -44,7 +44,7 @@ namespace Semmle.Extraction
/// <summary>
/// Holds if assembly information should be prefixed to TRAP labels.
/// </summary>
public readonly bool AddAssemblyTrapPrefix;
public readonly bool ShouldAddAssemblyTrapPrefix;
int GetNewId() => TrapWriter.IdCounter++;
@@ -241,7 +241,7 @@ namespace Semmle.Extraction
Compilation = c;
Scope = scope;
TrapWriter = trapWriter;
AddAssemblyTrapPrefix = addAssemblyTrapPrefix;
ShouldAddAssemblyTrapPrefix = addAssemblyTrapPrefix;
}
public bool FromSource => Scope.FromSource;

View File

@@ -950,147 +950,72 @@ ranges.cs:
# 9| 2: [IntLiteral] 3
# 9| 3: [IntLiteral] 4
# 9| 1: [LocalVariableAccess] access to local variable array
# 10| 1: [LocalVariableDeclStmt] ... ...;
# 10| 0: [LocalVariableDeclAndInitExpr] Int32[,] array2 = ...
# 10| 0: [ArrayCreation] array creation of type Int32[,]
# 10| 0: [IntLiteral] 2
# 10| 1: [IntLiteral] 3
# 10| 1: [LocalVariableAccess] access to local variable array2
# 11| 1: [LocalVariableDeclStmt] ... ...;
# 11| 0: [LocalVariableDeclAndInitExpr] Int32[] slice1 = ...
# 11| 0: [ArrayAccess] access to array element
# 11| -1: [LocalVariableAccess] access to local variable array
# 11| 0: [RangeExpr] ... .. ...
# 11| 0: [OperatorCall] call to operator implicit conversion
# 11| 0: [IntLiteral] 1
# 11| 1: [OperatorCall] call to operator implicit conversion
# 11| 0: [IntLiteral] 3
# 11| 1: [LocalVariableAccess] access to local variable slice1
# 12| 2: [LocalVariableDeclStmt] ... ...;
# 12| 0: [LocalVariableDeclAndInitExpr] Int32 slice1 = ...
# 12| 0: [LocalVariableDeclAndInitExpr] Int32[] slice2 = ...
# 12| 0: [ArrayAccess] access to array element
# 12| -1: [LocalVariableAccess] access to local variable array
# 12| 0: [OperatorCall] call to operator implicit conversion
# 12| 0: [RangeExpr] ... .. ...
# 12| 0: [OperatorCall] call to operator implicit conversion
# 12| 0: [IntLiteral] 1
# 12| 1: [OperatorCall] call to operator implicit conversion
# 12| 0: [IntLiteral] 3
# 12| 1: [LocalVariableAccess] access to local variable slice1
# 12| 0: [RangeExpr] ... .. ...
# 12| 0: [OperatorCall] call to operator implicit conversion
# 12| 0: [IntLiteral] 0
# 12| 1: [IndexExpr] ^...
# 12| 0: [IntLiteral] 1
# 12| 1: [LocalVariableAccess] access to local variable slice2
# 13| 3: [LocalVariableDeclStmt] ... ...;
# 13| 0: [LocalVariableDeclAndInitExpr] Int32 slice2 = ...
# 13| 0: [ArrayAccess] access to array element
# 13| -1: [LocalVariableAccess] access to local variable array
# 13| 0: [OperatorCall] call to operator implicit conversion
# 13| 0: [RangeExpr] ... .. ...
# 13| 0: [OperatorCall] call to operator implicit conversion
# 13| 0: [IntLiteral] 0
# 13| 1: [IndexExpr] ^...
# 13| 0: [IntLiteral] 1
# 13| 1: [LocalVariableAccess] access to local variable slice2
# 13| 0: [LocalVariableDeclAndInitExpr] Int32 x = ...
# 13| 0: [IntLiteral] 2
# 13| 1: [LocalVariableAccess] access to local variable x
# 13| 1: [LocalVariableDeclAndInitExpr] Int32 y = ...
# 13| 0: [IntLiteral] 3
# 13| 1: [LocalVariableAccess] access to local variable y
# 14| 4: [LocalVariableDeclStmt] ... ...;
# 14| 0: [LocalVariableDeclAndInitExpr] Int32 x = ...
# 14| 0: [IntLiteral] 2
# 14| 1: [LocalVariableAccess] access to local variable x
# 14| 1: [LocalVariableDeclAndInitExpr] Int32 y = ...
# 14| 0: [IntLiteral] 3
# 14| 1: [LocalVariableAccess] access to local variable y
# 14| 0: [LocalVariableDeclAndInitExpr] Int32[] slice3 = ...
# 14| 0: [ArrayAccess] access to array element
# 14| -1: [LocalVariableAccess] access to local variable array
# 14| 0: [RangeExpr] ... .. ...
# 14| 0: [OperatorCall] call to operator implicit conversion
# 14| 0: [LocalVariableAccess] access to local variable x
# 14| 1: [OperatorCall] call to operator implicit conversion
# 14| 0: [LocalVariableAccess] access to local variable y
# 14| 1: [LocalVariableAccess] access to local variable slice3
# 15| 5: [LocalVariableDeclStmt] ... ...;
# 15| 0: [LocalVariableDeclAndInitExpr] Int32 slice3 = ...
# 15| 0: [LocalVariableDeclAndInitExpr] Int32[] slice4 = ...
# 15| 0: [ArrayAccess] access to array element
# 15| -1: [LocalVariableAccess] access to local variable array
# 15| 0: [OperatorCall] call to operator implicit conversion
# 15| 0: [RangeExpr] ... .. ...
# 15| 0: [OperatorCall] call to operator implicit conversion
# 15| 0: [LocalVariableAccess] access to local variable x
# 15| 1: [OperatorCall] call to operator implicit conversion
# 15| 0: [LocalVariableAccess] access to local variable y
# 15| 1: [LocalVariableAccess] access to local variable slice3
# 15| 0: [RangeExpr] ... .. ...
# 15| 1: [OperatorCall] call to operator implicit conversion
# 15| 0: [LocalVariableAccess] access to local variable y
# 15| 1: [LocalVariableAccess] access to local variable slice4
# 16| 6: [LocalVariableDeclStmt] ... ...;
# 16| 0: [LocalVariableDeclAndInitExpr] Int32 slice4 = ...
# 16| 0: [LocalVariableDeclAndInitExpr] Int32[] slice5 = ...
# 16| 0: [ArrayAccess] access to array element
# 16| -1: [LocalVariableAccess] access to local variable array
# 16| 0: [OperatorCall] call to operator implicit conversion
# 16| 0: [RangeExpr] ... .. ...
# 16| 1: [OperatorCall] call to operator implicit conversion
# 16| 0: [LocalVariableAccess] access to local variable y
# 16| 1: [LocalVariableAccess] access to local variable slice4
# 16| 0: [RangeExpr] ... .. ...
# 16| 0: [OperatorCall] call to operator implicit conversion
# 16| 0: [LocalVariableAccess] access to local variable x
# 16| 1: [LocalVariableAccess] access to local variable slice5
# 17| 7: [LocalVariableDeclStmt] ... ...;
# 17| 0: [LocalVariableDeclAndInitExpr] Int32 slice5 = ...
# 17| 0: [LocalVariableDeclAndInitExpr] Int32[] slice6 = ...
# 17| 0: [ArrayAccess] access to array element
# 17| -1: [LocalVariableAccess] access to local variable array
# 17| 0: [OperatorCall] call to operator implicit conversion
# 17| 0: [RangeExpr] ... .. ...
# 17| 0: [OperatorCall] call to operator implicit conversion
# 17| 0: [LocalVariableAccess] access to local variable x
# 17| 1: [LocalVariableAccess] access to local variable slice5
# 17| 0: [RangeExpr] ... .. ...
# 17| 1: [LocalVariableAccess] access to local variable slice6
# 18| 8: [LocalVariableDeclStmt] ... ...;
# 18| 0: [LocalVariableDeclAndInitExpr] Int32 slice6 = ...
# 18| 0: [LocalVariableDeclAndInitExpr] Int32[] slice7 = ...
# 18| 0: [ArrayAccess] access to array element
# 18| -1: [LocalVariableAccess] access to local variable array
# 18| 0: [OperatorCall] call to operator implicit conversion
# 18| 0: [RangeExpr] ... .. ...
# 18| 1: [LocalVariableAccess] access to local variable slice6
# 19| 9: [LocalVariableDeclStmt] ... ...;
# 19| 0: [LocalVariableDeclAndInitExpr] Int32 slice7 = ...
# 19| 0: [ArrayAccess] access to array element
# 19| -1: [LocalVariableAccess] access to local variable array
# 19| 0: [OperatorCall] call to operator implicit conversion
# 19| 0: [RangeExpr] ... .. ...
# 19| 0: [IndexExpr] ^...
# 19| 0: [IntLiteral] 10
# 19| 1: [IndexExpr] ^...
# 19| 0: [IntLiteral] 5
# 19| 1: [LocalVariableAccess] access to local variable slice7
# 20| 10: [LocalVariableDeclStmt] ... ...;
# 20| 0: [LocalVariableDeclAndInitExpr] Int32 slice8 = ...
# 20| 0: [ArrayAccess] access to array element
# 20| -1: [LocalVariableAccess] access to local variable array2
# 20| 0: [OperatorCall] call to operator implicit conversion
# 20| 0: [RangeExpr] ... .. ...
# 20| 0: [OperatorCall] call to operator implicit conversion
# 20| 0: [IntLiteral] 1
# 20| 1: [OperatorCall] call to operator implicit conversion
# 20| 0: [IntLiteral] 2
# 20| 1: [OperatorCall] call to operator implicit conversion
# 20| 0: [RangeExpr] ... .. ...
# 20| 1: [LocalVariableAccess] access to local variable slice8
# 25| [NamespaceDeclaration] namespace ... { ... }
# 27| 1: [Struct] Index
#-----| 3: (Base types)
# 27| 1: [Interface] IEquatable<Index>
# 29| 17: [InstanceConstructor] Index
#-----| 2: (Parameters)
# 29| 0: [Parameter] value
# 29| 1: [Parameter] fromEnd
# 29| 1: [BoolLiteral] false
# 29| 4: [BlockStmt] {...}
# 30| 18: [ImplicitConversionOperator] implicit conversion
#-----| 2: (Parameters)
# 30| 0: [Parameter] value
# 30| 4: [DefaultValueExpr] default(...)
# 30| 0: [TypeAccess] access to type Index
# 33| 2: [Struct] Range
#-----| 3: (Base types)
# 33| 1: [Interface] IEquatable<Range>
# 35| 14: [InstanceConstructor] Range
#-----| 2: (Parameters)
# 35| 0: [Parameter] start
# 35| 1: [Parameter] end
# 35| 4: [ThrowExpr] throw ...
# 35| 0: [NullLiteral] null
# 36| 15: [Method] StartAt
#-----| 2: (Parameters)
# 36| 0: [Parameter] start
# 36| 4: [ThrowExpr] throw ...
# 36| 0: [NullLiteral] null
# 37| 16: [Method] EndAt
#-----| 2: (Parameters)
# 37| 0: [Parameter] end
# 37| 4: [ThrowExpr] throw ...
# 37| 0: [NullLiteral] null
# 38| 17: [Property] All
# 38| 3: [Getter] get_All
# 38| 4: [ThrowExpr] throw ...
# 38| 0: [NullLiteral] null
# 39| 18: [Method] Create
#-----| 2: (Parameters)
# 39| 0: [Parameter] start
# 39| 1: [Parameter] end
# 39| 4: [ThrowExpr] throw ...
# 39| 0: [NullLiteral] null
# 40| 19: [ImplicitConversionOperator] implicit conversion
#-----| 2: (Parameters)
# 40| 0: [Parameter] r
# 40| 4: [ThrowExpr] throw ...
# 40| 0: [NullLiteral] null
# 18| 0: [RangeExpr] ... .. ...
# 18| 0: [IndexExpr] ^...
# 18| 0: [IntLiteral] 10
# 18| 1: [IndexExpr] ^...
# 18| 0: [IntLiteral] 5
# 18| 1: [LocalVariableAccess] access to local variable slice7

View File

@@ -7,36 +7,14 @@ class Ranges
void F()
{
var array = new int[] { 1, 2, 3, 4 };
var array2 = new int[2, 3];
var slice1 = array[1..3];
var slice2 = array[0..^1];
int x=2, y=3;
int x = 2, y = 3;
var slice3 = array[x..y];
var slice4 = array[..y];
var slice5 = array[x..];
var slice6 = array[..];
var slice7 = array[^10..^5];
var slice8 = array2[1..2, ..];
}
}
// These are temporary until qltest uses .NET Core 3.0.
namespace System
{
public readonly struct Index
{
public Index(int value, bool fromEnd = false) { }
public static implicit operator Index(int value) => default(Index);
}
public readonly struct Range
{
public Range(Index start, Index end) => throw null;
public static Range StartAt(System.Index start) => throw null;
public static Range EndAt(System.Index end) => throw null;
public static Range All => throw null;
public static Range Create(Index start, Index end) => throw null;
public static implicit operator int(Range r) => throw null;
}
}

View File

@@ -1,28 +1,24 @@
indexes
| ranges.cs:13:31:13:32 | ^... | ranges.cs:13:32:13:32 | 1 |
| ranges.cs:19:28:19:30 | ^... | ranges.cs:19:29:19:30 | 10 |
| ranges.cs:19:33:19:34 | ^... | ranges.cs:19:34:19:34 | 5 |
| ranges.cs:12:31:12:32 | ^... | ranges.cs:12:32:12:32 | 1 |
| ranges.cs:18:28:18:30 | ^... | ranges.cs:18:29:18:30 | 10 |
| ranges.cs:18:33:18:34 | ^... | ranges.cs:18:34:18:34 | 5 |
ranges
| ranges.cs:12:28:12:31 | ... .. ... |
| ranges.cs:13:28:13:32 | ... .. ... |
| ranges.cs:15:28:15:31 | ... .. ... |
| ranges.cs:11:28:11:31 | ... .. ... |
| ranges.cs:12:28:12:32 | ... .. ... |
| ranges.cs:14:28:14:31 | ... .. ... |
| ranges.cs:15:28:15:30 | ... .. ... |
| ranges.cs:16:28:16:30 | ... .. ... |
| ranges.cs:17:28:17:30 | ... .. ... |
| ranges.cs:18:28:18:29 | ... .. ... |
| ranges.cs:19:28:19:34 | ... .. ... |
| ranges.cs:20:29:20:32 | ... .. ... |
| ranges.cs:20:35:20:36 | ... .. ... |
| ranges.cs:17:28:17:29 | ... .. ... |
| ranges.cs:18:28:18:34 | ... .. ... |
rangeStart
| ranges.cs:12:28:12:31 | ... .. ... | ranges.cs:12:28:12:28 | 1 |
| ranges.cs:13:28:13:32 | ... .. ... | ranges.cs:13:28:13:28 | 0 |
| ranges.cs:15:28:15:31 | ... .. ... | ranges.cs:15:28:15:28 | access to local variable x |
| ranges.cs:17:28:17:30 | ... .. ... | ranges.cs:17:28:17:28 | access to local variable x |
| ranges.cs:19:28:19:34 | ... .. ... | ranges.cs:19:28:19:30 | ^... |
| ranges.cs:20:29:20:32 | ... .. ... | ranges.cs:20:29:20:29 | 1 |
| ranges.cs:11:28:11:31 | ... .. ... | ranges.cs:11:28:11:28 | 1 |
| ranges.cs:12:28:12:32 | ... .. ... | ranges.cs:12:28:12:28 | 0 |
| ranges.cs:14:28:14:31 | ... .. ... | ranges.cs:14:28:14:28 | access to local variable x |
| ranges.cs:16:28:16:30 | ... .. ... | ranges.cs:16:28:16:28 | access to local variable x |
| ranges.cs:18:28:18:34 | ... .. ... | ranges.cs:18:28:18:30 | ^... |
rangeEnd
| ranges.cs:12:28:12:31 | ... .. ... | ranges.cs:12:31:12:31 | 3 |
| ranges.cs:13:28:13:32 | ... .. ... | ranges.cs:13:31:13:32 | ^... |
| ranges.cs:15:28:15:31 | ... .. ... | ranges.cs:15:31:15:31 | access to local variable y |
| ranges.cs:16:28:16:30 | ... .. ... | ranges.cs:16:30:16:30 | access to local variable y |
| ranges.cs:19:28:19:34 | ... .. ... | ranges.cs:19:33:19:34 | ^... |
| ranges.cs:20:29:20:32 | ... .. ... | ranges.cs:20:32:20:32 | 2 |
| ranges.cs:11:28:11:31 | ... .. ... | ranges.cs:11:31:11:31 | 3 |
| ranges.cs:12:28:12:32 | ... .. ... | ranges.cs:12:31:12:32 | ^... |
| ranges.cs:14:28:14:31 | ... .. ... | ranges.cs:14:31:14:31 | access to local variable y |
| ranges.cs:15:28:15:30 | ... .. ... | ranges.cs:15:30:15:30 | access to local variable y |
| ranges.cs:18:28:18:34 | ... .. ... | ranges.cs:18:33:18:34 | ^... |