mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
C#: Address review comments
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 | ^... |
|
||||
|
||||
Reference in New Issue
Block a user