Merge pull request #15328 from michaelnebel/csharp/inlinearrays

C# 12: Inline array support.
This commit is contained in:
Michael Nebel
2024-01-19 09:11:26 +01:00
committed by GitHub
115 changed files with 10847 additions and 2251 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,9 @@
class Type extends @type {
string toString() { none() }
}
from Type t, int k, int kind, string name
where
types(t, k, name) and
if k = 34 then kind = 15 else kind = k
select t, kind, name

View File

@@ -0,0 +1,3 @@
description: Remove support for inline arrays.
compatibility: backwards
types.rel: run types.qlo

View File

@@ -43,6 +43,9 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
public sealed override Microsoft.CodeAnalysis.Location? ReportingLocation => base.ReportingLocation;
private static bool IsArray(ITypeSymbol symbol) =>
symbol.TypeKind == Microsoft.CodeAnalysis.TypeKind.Array || symbol.IsInlineArray();
private static ExprKind GetKind(Context cx, ExpressionSyntax qualifier)
{
var qualifierType = cx.GetType(qualifier);
@@ -59,7 +62,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
return IsDynamic(cx, qualifier)
? ExprKind.DYNAMIC_ELEMENT_ACCESS
: qualifierType.Symbol.TypeKind == Microsoft.CodeAnalysis.TypeKind.Array
: IsArray(qualifierType.Symbol)
? ExprKind.ARRAY_ACCESS
: ExprKind.INDEXER_ACCESS;
}

View File

@@ -52,9 +52,15 @@ namespace Semmle.Extraction.CSharp.Entities
{
case TypeKind.Class: return Kinds.TypeKind.CLASS;
case TypeKind.Struct:
return ((INamedTypeSymbol)Symbol).IsTupleType && !constructUnderlyingTupleType
? Kinds.TypeKind.TUPLE
: Kinds.TypeKind.STRUCT;
{
if (((INamedTypeSymbol)Symbol).IsTupleType && !constructUnderlyingTupleType)
{
return Kinds.TypeKind.TUPLE;
}
return Symbol.IsInlineArray()
? Kinds.TypeKind.INLINE_ARRAY
: Kinds.TypeKind.STRUCT;
}
case TypeKind.Interface: return Kinds.TypeKind.INTERFACE;
case TypeKind.Array: return Kinds.TypeKind.ARRAY;
case TypeKind.Enum: return Kinds.TypeKind.ENUM;

View File

@@ -1,7 +1,8 @@
namespace Semmle.Extraction.Kinds // lgtm[cs/similar-file]
namespace Semmle.Extraction.Kinds
{
/// <summary>
/// This enum has been auto-generated from the C# DB scheme - do not edit.
/// Auto-generate command: `genkindenum.pl type`
/// </summary>
public enum TypeKind
{
@@ -35,6 +36,7 @@ namespace Semmle.Extraction.Kinds // lgtm[cs/similar-file]
ARGLIST = 30,
UNKNOWN = 31,
TUPLE = 32,
FUNCTION_POINTER = 33
FUNCTION_POINTER = 33,
INLINE_ARRAY = 34,
}
}

View File

@@ -524,6 +524,17 @@ namespace Semmle.Extraction.CSharp
public static bool IsUnboundReadOnlySpan(this ITypeSymbol type) =>
type.ToString() == "System.ReadOnlySpan<T>";
public static bool IsInlineArray(this ITypeSymbol type)
{
var attributes = type.GetAttributes();
var isInline = attributes.Any(attribute =>
attribute.AttributeClass is INamedTypeSymbol nt &&
nt.Name == "InlineArrayAttribute" &&
nt.ContainingNamespace.ToString() == "System.Runtime.CompilerServices"
);
return isInline;
}
/// <summary>
/// Holds if this type is of the form <code>System.ReadOnlySpan<byte></code>.
/// </summary>

View File

@@ -0,0 +1,4 @@
---
category: minorAnalysis
---
* C# 12: Add extractor support and QL library support for inline arrays.

View File

@@ -11,6 +11,7 @@ private import dotnet
private import semmle.code.csharp.metrics.Coupling
private import TypeRef
private import semmle.code.csharp.frameworks.System
private import semmle.code.csharp.frameworks.system.runtime.CompilerServices
/**
* A type.
@@ -1008,6 +1009,58 @@ class NullableType extends ValueType, ConstructedType, @nullable_type {
override string getAPrimaryQlClass() { result = "NullableType" }
}
/**
* An inline array type, for example `MyInlineArray` in
* ```csharp
* [System.Runtime.CompilerServices.InlineArray(10)]
* public struct MyInlineArray
* {
* private int _elements0;
* }
* ```
*/
class InlineArrayType extends ValueType, @inline_array_type {
private SystemRuntimeCompilerServicesInlineArrayAttribute inline_attribute;
private Field element_type_field;
InlineArrayType() {
inline_attribute = this.(Attributable).getAnAttribute() and
element_type_field = this.getAField() and
not element_type_field.isStatic() and
not element_type_field.isConst()
}
/**
* Gets the element type of this inline array.
*/
Type getElementType() { result = element_type_field.getType() }
/**
* Gets the rank of this inline array (inline arrays always have rank 1).
*/
int getRank() { result = 1 }
/**
* Gets the length of this inline array.
*/
int getLength() { result = inline_attribute.getLength() }
/**
* Gets the dimension of this inline array.
*/
int getDimension() {
exists(Type elem | elem = this.getElementType() |
result = elem.(InlineArrayType).getDimension() + 1
or
result = elem.(ArrayType).getDimension() + 1
or
not elem instanceof ArrayType and not elem instanceof InlineArrayType and result = 1
)
}
override string getAPrimaryQlClass() { result = "InlineArrayType" }
}
/**
* An array type, for example `int[]`.
*/

View File

@@ -70,3 +70,15 @@ class SystemRuntimeCompilerServicesConfiguredTaskAwaitableTConfiguredTaskAwaiter
/** Gets the field that stores the underlying task. */
Field getUnderlyingTaskField() { result = this.getAField() and result.hasName("m_task") }
}
/** An attribute of type `System.Runtime.CompilerServices.InlineArrayAttribute`. */
class SystemRuntimeCompilerServicesInlineArrayAttribute extends Attribute {
SystemRuntimeCompilerServicesInlineArrayAttribute() {
this.getType().hasFullyQualifiedName("System.Runtime.CompilerServices", "InlineArrayAttribute")
}
/**
* Gets the length of the inline array.
*/
int getLength() { result = this.getConstructorArgument(0).getValue().toInt() }
}

View File

@@ -448,6 +448,7 @@ case @type.kind of
| 31 = @unknown_type
| 32 = @tuple_type
| 33 = @function_pointer_type
| 34 = @inline_array_type
;
@simple_type = @bool_type | @char_type | @integral_type | @floating_point_type | @decimal_type;
@@ -456,7 +457,7 @@ case @type.kind of
@unsigned_integral_type = @byte_type | @ushort_type | @uint_type | @ulong_type;
@floating_point_type = @float_type | @double_type;
@value_type = @simple_type | @enum_type | @struct_type | @nullable_type | @int_ptr_type
| @uint_ptr_type | @tuple_type | @void_type;
| @uint_ptr_type | @tuple_type | @void_type | @inline_array_type;
@ref_type = @class_type | @interface_type | @array_type | @delegate_type | @null_type
| @dynamic_type;
@value_or_ref_type = @value_type | @ref_type;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
description: Add support for inline arrays.
compatibility: backwards

View File

@@ -8,6 +8,32 @@ public class CollectionFlow
public A[] As;
public static void Sink<T>(T t) { }
public static void SinkElem<T>(T[] ts) => Sink(ts[0]);
public static void SinkListElem<T>(IList<T> list) => Sink(list[0]);
public static void SinkDictValue<T>(IDictionary<int, T> dict) => Sink(dict[0]);
public static void SinkDictKey<T>(IDictionary<T, int> dict) => Sink(dict.Keys.First());
public static T First<T>(T[] ts) => ts[0];
public static T ListFirst<T>(IList<T> list) => list[0];
public static T DictIndexZero<T>(IDictionary<int, T> dict) => dict[0];
public static T DictFirstValue<T>(IDictionary<int, T> dict) => dict.First().Value;
public static T DictValuesFirst<T>(IDictionary<int, T> dict) => dict.Values.First();
public static T DictKeysFirst<T>(IDictionary<T, int> dict) => dict.Keys.First();
public static T DictFirstKey<T>(IDictionary<T, int> dict) => dict.First().Key;
public static void SinkParams<T>(params T[] args) => Sink(args[0]);
public void ArrayInitializerFlow()
{
var a = new A();
@@ -368,29 +394,24 @@ public class CollectionFlow
Sink(ListFirst(list)); // no flow
}
public static void Sink<T>(T t) { }
[System.Runtime.CompilerServices.InlineArray(10)]
struct MyInlineArray
{
private A myInlineArrayElements;
}
public static void SinkElem<T>(T[] ts) => Sink(ts[0]);
public void InlineArraySetterFlow()
{
var a = new A();
var array = new MyInlineArray();
array[0] = a;
Sink(array[0]); // flow
}
public static void SinkListElem<T>(IList<T> list) => Sink(list[0]);
public static void SinkDictValue<T>(IDictionary<int, T> dict) => Sink(dict[0]);
public static void SinkDictKey<T>(IDictionary<T, int> dict) => Sink(dict.Keys.First());
public static T First<T>(T[] ts) => ts[0];
public static T ListFirst<T>(IList<T> list) => list[0];
public static T DictIndexZero<T>(IDictionary<int, T> dict) => dict[0];
public static T DictFirstValue<T>(IDictionary<int, T> dict) => dict.First().Value;
public static T DictValuesFirst<T>(IDictionary<int, T> dict) => dict.Values.First();
public static T DictKeysFirst<T>(IDictionary<T, int> dict) => dict.Keys.First();
public static T DictFirstKey<T>(IDictionary<T, int> dict) => dict.First().Key;
public static void SinkParams<T>(params T[] args) => Sink(args[0]);
public void InlineArraySetterNoFlow(A other)
{
var array = new MyInlineArray();
array[0] = other;
Sink(array[0]); // no flow
}
}

View File

@@ -248,4 +248,24 @@ namespace My.Qltest
static void Sink(object o) { }
}
[System.Runtime.CompilerServices.InlineArray(10)]
public struct MyInlineArray
{
private object myInlineArrayElements;
}
public class I
{
void M1(MyInlineArray a)
{
a[0] = new object();
var b = GetFirst(a);
Sink(b);
}
object GetFirst(MyInlineArray arr) => throw null;
static void Sink(object o) { }
}
}

View File

@@ -68,6 +68,10 @@ edges
| ExternalFlow.cs:244:21:244:28 | object creation of type HC : HC | ExternalFlow.cs:245:21:245:21 | access to local variable h : HC |
| ExternalFlow.cs:245:21:245:21 | access to local variable h : HC | ExternalFlow.cs:245:21:245:39 | call to method ExtensionMethod : HC |
| ExternalFlow.cs:245:21:245:39 | call to method ExtensionMethod : HC | ExternalFlow.cs:246:18:246:18 | access to local variable o |
| ExternalFlow.cs:262:13:262:13 | [post] access to parameter a : MyInlineArray [element] : Object | ExternalFlow.cs:263:30:263:30 | access to parameter a : MyInlineArray [element] : Object |
| ExternalFlow.cs:262:20:262:31 | object creation of type Object : Object | ExternalFlow.cs:262:13:262:13 | [post] access to parameter a : MyInlineArray [element] : Object |
| ExternalFlow.cs:263:21:263:31 | call to method GetFirst : Object | ExternalFlow.cs:264:18:264:18 | access to local variable b |
| ExternalFlow.cs:263:30:263:30 | access to parameter a : MyInlineArray [element] : Object | ExternalFlow.cs:263:21:263:31 | call to method GetFirst : Object |
nodes
| ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | semmle.label | object creation of type Object : Object |
| ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | semmle.label | call to method StepArgRes |
@@ -157,6 +161,11 @@ nodes
| ExternalFlow.cs:245:21:245:21 | access to local variable h : HC | semmle.label | access to local variable h : HC |
| ExternalFlow.cs:245:21:245:39 | call to method ExtensionMethod : HC | semmle.label | call to method ExtensionMethod : HC |
| ExternalFlow.cs:246:18:246:18 | access to local variable o | semmle.label | access to local variable o |
| ExternalFlow.cs:262:13:262:13 | [post] access to parameter a : MyInlineArray [element] : Object | semmle.label | [post] access to parameter a : MyInlineArray [element] : Object |
| ExternalFlow.cs:262:20:262:31 | object creation of type Object : Object | semmle.label | object creation of type Object : Object |
| ExternalFlow.cs:263:21:263:31 | call to method GetFirst : Object | semmle.label | call to method GetFirst : Object |
| ExternalFlow.cs:263:30:263:30 | access to parameter a : MyInlineArray [element] : Object | semmle.label | access to parameter a : MyInlineArray [element] : Object |
| ExternalFlow.cs:264:18:264:18 | access to local variable b | semmle.label | access to local variable b |
subpaths
#select
| ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | ExternalFlow.cs:10:18:10:33 | call to method StepArgRes | $@ | ExternalFlow.cs:9:27:9:38 | object creation of type Object : Object | object creation of type Object : Object |
@@ -182,3 +191,4 @@ subpaths
| ExternalFlow.cs:206:18:206:40 | call to method MixedFlowArgs | ExternalFlow.cs:205:22:205:33 | object creation of type Object : Object | ExternalFlow.cs:206:18:206:40 | call to method MixedFlowArgs | $@ | ExternalFlow.cs:205:22:205:33 | object creation of type Object : Object | object creation of type Object : Object |
| ExternalFlow.cs:212:18:212:54 | call to method GeneratedFlowWithGeneratedNeutral | ExternalFlow.cs:211:22:211:33 | object creation of type Object : Object | ExternalFlow.cs:212:18:212:54 | call to method GeneratedFlowWithGeneratedNeutral | $@ | ExternalFlow.cs:211:22:211:33 | object creation of type Object : Object | object creation of type Object : Object |
| ExternalFlow.cs:246:18:246:18 | access to local variable o | ExternalFlow.cs:244:21:244:28 | object creation of type HC : HC | ExternalFlow.cs:246:18:246:18 | access to local variable o | $@ | ExternalFlow.cs:244:21:244:28 | object creation of type HC : HC | object creation of type HC : HC |
| ExternalFlow.cs:264:18:264:18 | access to local variable b | ExternalFlow.cs:262:20:262:31 | object creation of type Object : Object | ExternalFlow.cs:264:18:264:18 | access to local variable b | $@ | ExternalFlow.cs:262:20:262:31 | object creation of type Object : Object | object creation of type Object : Object |

View File

@@ -32,6 +32,7 @@ extensions:
- ["My.Qltest", "G", false, "GeneratedFlowWithGeneratedNeutral", "(System.Object)", "", "Argument[0]", "ReturnValue", "value", "df-generated"]
- ["My.Qltest", "G", false, "GeneratedFlowWithManualNeutral", "(System.Object)", "", "Argument[0]", "ReturnValue", "value", "df-generated"]
- ["My.Qltest", "HE", false, "ExtensionMethod", "(My.Qltest.HI)", "", "Argument[0]", "ReturnValue", "value", "manual"]
- ["My.Qltest", "I", false, "GetFirst", "(My.Qltest.MyInlineArray)", "", "Argument[0].Element", "ReturnValue", "value", "manual"]
- addsTo:
pack: codeql/csharp-all
extensible: neutralModel

View File

@@ -1 +1 @@
| expressions.cs:249:16:249:26 | LoginDialog | expressions.cs:252:13:252:61 | ... += ... |
| expressions.cs:250:16:250:26 | LoginDialog | expressions.cs:253:13:253:61 | ... += ... |

View File

@@ -1 +1 @@
| expressions.cs:455:33:455:66 | delegate(...) { ... } |
| expressions.cs:456:33:456:66 | delegate(...) { ... } |

View File

@@ -1 +1 @@
| expressions.cs:455:33:455:66 | delegate(...) { ... } | expressions.cs:455:47:455:47 | x |
| expressions.cs:456:33:456:66 | delegate(...) { ... } | expressions.cs:456:47:456:47 | x |

View File

@@ -1 +1 @@
| expressions.cs:455:33:455:66 | delegate(...) { ... } |
| expressions.cs:456:33:456:66 | delegate(...) { ... } |

View File

@@ -1 +1 @@
| expressions.cs:457:28:457:53 | delegate(...) { ... } | expressions.cs:457:28:457:53 | delegate(...) { ... } |
| expressions.cs:458:28:458:53 | delegate(...) { ... } | expressions.cs:458:28:458:53 | delegate(...) { ... } |

View File

@@ -1 +1 @@
| expressions.cs:457:28:457:53 | delegate(...) { ... } | expressions.cs:457:46:457:46 | access to local variable j |
| expressions.cs:458:28:458:53 | delegate(...) { ... } | expressions.cs:458:46:458:46 | access to local variable j |

View File

@@ -1 +1 @@
| expressions.cs:428:44:428:56 | object creation of type <>__AnonType1<Int32> |
| expressions.cs:429:44:429:56 | object creation of type <>__AnonType1<Int32> |

View File

@@ -1 +1 @@
| expressions.cs:417:9:420:9 | object creation of type <>__AnonType0<String,String[]> | String |
| expressions.cs:418:9:421:9 | object creation of type <>__AnonType0<String,String[]> | String |

View File

@@ -1,2 +1,2 @@
| expressions.cs:417:9:420:9 | object creation of type <>__AnonType0<String,String[]> | String[] |
| expressions.cs:421:9:424:9 | object creation of type <>__AnonType0<String,String[]> | String[] |
| expressions.cs:418:9:421:9 | object creation of type <>__AnonType0<String,String[]> | String[] |
| expressions.cs:422:9:425:9 | object creation of type <>__AnonType0<String,String[]> | String[] |

View File

@@ -1,2 +1,2 @@
| expressions.cs:417:9:420:9 | object creation of type <>__AnonType0<String,String[]> | expressions.cs:421:9:424:9 | object creation of type <>__AnonType0<String,String[]> |
| expressions.cs:421:9:424:9 | object creation of type <>__AnonType0<String,String[]> | expressions.cs:417:9:420:9 | object creation of type <>__AnonType0<String,String[]> |
| expressions.cs:418:9:421:9 | object creation of type <>__AnonType0<String,String[]> | expressions.cs:422:9:425:9 | object creation of type <>__AnonType0<String,String[]> |
| expressions.cs:422:9:425:9 | object creation of type <>__AnonType0<String,String[]> | expressions.cs:418:9:421:9 | object creation of type <>__AnonType0<String,String[]> |

View File

@@ -0,0 +1 @@
| expressions.cs:79:14:79:25 | MainAccesses | expressions.cs:89:13:89:26 | access to array element |

View File

@@ -0,0 +1,13 @@
/**
* @name Test for inline array access
*/
import csharp
from Method m, ArrayAccess e
where
m.hasName("MainAccesses") and
e.getEnclosingCallable() = m and
e.getQualifier().(LocalVariableAccess).getTarget().getName() = "inlinearray" and
e.getIndex(0).(IntLiteral).getValue() = "2"
select m, e

View File

@@ -1 +1 @@
| expressions.cs:409:23:409:65 | array creation of type Int32[,] | expressions.cs:409:34:409:65 | { ..., ... } |
| expressions.cs:410:23:410:65 | array creation of type Int32[,] | expressions.cs:410:34:410:65 | { ..., ... } |

View File

@@ -1 +1 @@
| expressions.cs:168:27:168:44 | array creation of type Object[] | expressions.cs:168:42:168:42 | (...) ... |
| expressions.cs:169:27:169:44 | array creation of type Object[] | expressions.cs:169:42:169:42 | (...) ... |

View File

@@ -1,27 +1,27 @@
| expressions.cs:168:27:168:44 | array creation of type Object[] | expressions.cs:168:27:168:44 | 1 | true |
| expressions.cs:409:23:409:65 | array creation of type Int32[,] | expressions.cs:409:23:409:65 | 2 | true |
| expressions.cs:409:23:409:65 | array creation of type Int32[,] | expressions.cs:409:23:409:65 | 3 | true |
| expressions.cs:437:24:437:66 | array creation of type Int32[,] | expressions.cs:437:24:437:66 | 2 | true |
| expressions.cs:437:24:437:66 | array creation of type Int32[,] | expressions.cs:437:24:437:66 | 3 | true |
| expressions.cs:438:17:438:93 | array creation of type Int32[,,] | expressions.cs:438:17:438:93 | 2 | true |
| expressions.cs:438:17:438:93 | array creation of type Int32[,,] | expressions.cs:438:17:438:93 | 2 | true |
| expressions.cs:438:17:438:93 | array creation of type Int32[,,] | expressions.cs:438:17:438:93 | 3 | true |
| expressions.cs:439:17:443:13 | array creation of type Int32[,][,] | expressions.cs:439:17:443:13 | 2 | true |
| expressions.cs:439:17:443:13 | array creation of type Int32[,][,] | expressions.cs:439:17:443:13 | 3 | true |
| expressions.cs:441:19:441:45 | array creation of type Int32[,] | expressions.cs:441:19:441:45 | 2 | true |
| expressions.cs:441:19:441:45 | array creation of type Int32[,] | expressions.cs:441:19:441:45 | 2 | true |
| expressions.cs:441:48:441:82 | array creation of type Int32[,] | expressions.cs:441:48:441:82 | 2 | true |
| expressions.cs:441:48:441:82 | array creation of type Int32[,] | expressions.cs:441:48:441:82 | 3 | true |
| expressions.cs:441:85:441:122 | array creation of type Int32[,] | expressions.cs:441:85:441:122 | 2 | true |
| expressions.cs:441:85:441:122 | array creation of type Int32[,] | expressions.cs:441:85:441:122 | 3 | true |
| expressions.cs:169:27:169:44 | array creation of type Object[] | expressions.cs:169:27:169:44 | 1 | true |
| expressions.cs:410:23:410:65 | array creation of type Int32[,] | expressions.cs:410:23:410:65 | 2 | true |
| expressions.cs:410:23:410:65 | array creation of type Int32[,] | expressions.cs:410:23:410:65 | 3 | true |
| expressions.cs:438:24:438:66 | array creation of type Int32[,] | expressions.cs:438:24:438:66 | 2 | true |
| expressions.cs:438:24:438:66 | array creation of type Int32[,] | expressions.cs:438:24:438:66 | 3 | true |
| expressions.cs:439:17:439:93 | array creation of type Int32[,,] | expressions.cs:439:17:439:93 | 2 | true |
| expressions.cs:439:17:439:93 | array creation of type Int32[,,] | expressions.cs:439:17:439:93 | 2 | true |
| expressions.cs:439:17:439:93 | array creation of type Int32[,,] | expressions.cs:439:17:439:93 | 3 | true |
| expressions.cs:440:17:444:13 | array creation of type Int32[,][,] | expressions.cs:440:17:444:13 | 2 | true |
| expressions.cs:440:17:444:13 | array creation of type Int32[,][,] | expressions.cs:440:17:444:13 | 3 | true |
| expressions.cs:442:19:442:45 | array creation of type Int32[,] | expressions.cs:442:19:442:45 | 2 | true |
| expressions.cs:442:19:442:45 | array creation of type Int32[,] | expressions.cs:442:19:442:45 | 2 | true |
| expressions.cs:442:48:442:82 | array creation of type Int32[,] | expressions.cs:442:48:442:82 | 2 | true |
| expressions.cs:442:48:442:82 | array creation of type Int32[,] | expressions.cs:442:48:442:82 | 3 | true |
| expressions.cs:442:85:442:122 | array creation of type Int32[,] | expressions.cs:442:85:442:122 | 2 | true |
| expressions.cs:442:85:442:122 | array creation of type Int32[,] | expressions.cs:442:85:442:122 | 3 | true |
| expressions.cs:444:17:444:123 | array creation of type Int32[,][] | expressions.cs:444:17:444:123 | 2 | true |
| expressions.cs:444:32:444:54 | array creation of type Int32[,] | expressions.cs:444:32:444:54 | 1 | true |
| expressions.cs:444:32:444:54 | array creation of type Int32[,] | expressions.cs:444:32:444:54 | 2 | true |
| expressions.cs:444:57:444:121 | array creation of type Int32[,] | expressions.cs:444:57:444:121 | 3 | true |
| expressions.cs:444:57:444:121 | array creation of type Int32[,] | expressions.cs:444:57:444:121 | 4 | true |
| expressions.cs:443:19:443:45 | array creation of type Int32[,] | expressions.cs:443:19:443:45 | 2 | true |
| expressions.cs:443:19:443:45 | array creation of type Int32[,] | expressions.cs:443:19:443:45 | 2 | true |
| expressions.cs:443:48:443:82 | array creation of type Int32[,] | expressions.cs:443:48:443:82 | 2 | true |
| expressions.cs:443:48:443:82 | array creation of type Int32[,] | expressions.cs:443:48:443:82 | 3 | true |
| expressions.cs:443:85:443:122 | array creation of type Int32[,] | expressions.cs:443:85:443:122 | 2 | true |
| expressions.cs:443:85:443:122 | array creation of type Int32[,] | expressions.cs:443:85:443:122 | 3 | true |
| expressions.cs:445:17:445:123 | array creation of type Int32[,][] | expressions.cs:445:17:445:123 | 2 | true |
| expressions.cs:445:32:445:54 | array creation of type Int32[,] | expressions.cs:445:32:445:54 | 1 | true |
| expressions.cs:445:32:445:54 | array creation of type Int32[,] | expressions.cs:445:32:445:54 | 2 | true |
| expressions.cs:445:57:445:121 | array creation of type Int32[,] | expressions.cs:445:57:445:121 | 3 | true |
| expressions.cs:445:57:445:121 | array creation of type Int32[,] | expressions.cs:445:57:445:121 | 4 | true |

View File

@@ -1 +1 @@
| expressions.cs:410:23:410:68 | array creation of type Int32[,] | expressions.cs:410:37:410:68 | { ..., ... } |
| expressions.cs:411:23:411:68 | array creation of type Int32[,] | expressions.cs:411:37:411:68 | { ..., ... } |

View File

@@ -1 +1 @@
| expressions.cs:411:27:411:40 | array creation of type Int32[][] |
| expressions.cs:412:27:412:40 | array creation of type Int32[][] |

View File

@@ -1 +1 @@
| expressions.cs:412:26:412:40 | array creation of type Int32[,] |
| expressions.cs:413:26:413:40 | array creation of type Int32[,] |

View File

@@ -1 +1 @@
| expressions.cs:413:23:413:48 | array creation of type Int32[] |
| expressions.cs:414:23:414:48 | array creation of type Int32[] |

View File

@@ -1 +1 @@
| expressions.cs:414:23:414:46 | array creation of type Double[] |
| expressions.cs:415:23:415:46 | array creation of type Double[] |

View File

@@ -1 +1 @@
| expressions.cs:415:23:415:68 | array creation of type String[,] |
| expressions.cs:416:23:416:68 | array creation of type String[,] |

View File

@@ -1 +1 @@
| expressions.cs:416:29:425:7 | array creation of type <>__AnonType0<String,String[]>[] |
| expressions.cs:417:29:426:7 | array creation of type <>__AnonType0<String,String[]>[] |

View File

@@ -1 +1 @@
| expressions.cs:112:28:123:9 | array creation of type Type[] |
| expressions.cs:113:28:124:9 | array creation of type Type[] |

View File

@@ -1 +1 @@
| expressions.cs:91:14:91:25 | MainIsAsCast | expressions.cs:95:27:95:36 | ... as ... |
| expressions.cs:92:14:92:25 | MainIsAsCast | expressions.cs:96:27:96:36 | ... as ... |

View File

@@ -1 +1 @@
| expressions.cs:135:18:135:30 | OtherAccesses | expressions.cs:138:17:138:20 | base access |
| expressions.cs:136:18:136:30 | OtherAccesses | expressions.cs:139:17:139:20 | base access |

View File

@@ -1,6 +1,6 @@
| expressions.cs:135:18:135:30 | OtherAccesses | expressions.cs:138:35:138:38 | this access | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:135:18:135:30 | OtherAccesses | expressions.cs:138:41:138:41 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:135:18:135:30 | OtherAccesses | expressions.cs:138:44:138:44 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:135:18:135:30 | OtherAccesses | expressions.cs:138:47:138:47 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:135:18:135:30 | OtherAccesses | expressions.cs:138:50:138:50 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:135:18:135:30 | OtherAccesses | expressions.cs:138:53:138:54 | "" | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:136:18:136:30 | OtherAccesses | expressions.cs:139:35:139:38 | this access | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:136:18:136:30 | OtherAccesses | expressions.cs:139:41:139:41 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:136:18:136:30 | OtherAccesses | expressions.cs:139:44:139:44 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:136:18:136:30 | OtherAccesses | expressions.cs:139:47:139:47 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:136:18:136:30 | OtherAccesses | expressions.cs:139:50:139:50 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:136:18:136:30 | OtherAccesses | expressions.cs:139:53:139:54 | "" | expressions.cs:79:14:79:25 | MainAccesses |

View File

@@ -1,6 +1,6 @@
| expressions.cs:135:18:135:30 | OtherAccesses | expressions.cs:138:35:138:38 | this access | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:135:18:135:30 | OtherAccesses | expressions.cs:138:41:138:41 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:135:18:135:30 | OtherAccesses | expressions.cs:138:44:138:44 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:135:18:135:30 | OtherAccesses | expressions.cs:138:47:138:47 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:135:18:135:30 | OtherAccesses | expressions.cs:138:50:138:50 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:135:18:135:30 | OtherAccesses | expressions.cs:138:53:138:54 | "" | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:136:18:136:30 | OtherAccesses | expressions.cs:139:35:139:38 | this access | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:136:18:136:30 | OtherAccesses | expressions.cs:139:41:139:41 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:136:18:136:30 | OtherAccesses | expressions.cs:139:44:139:44 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:136:18:136:30 | OtherAccesses | expressions.cs:139:47:139:47 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:136:18:136:30 | OtherAccesses | expressions.cs:139:50:139:50 | (...) ... | expressions.cs:79:14:79:25 | MainAccesses |
| expressions.cs:136:18:136:30 | OtherAccesses | expressions.cs:139:53:139:54 | "" | expressions.cs:79:14:79:25 | MainAccesses |

View File

@@ -1 +1 @@
| expressions.cs:143:14:143:29 | MainLocalVarDecl | expressions.cs:148:31:148:39 | ... + ... | WriteLine |
| expressions.cs:144:14:144:29 | MainLocalVarDecl | expressions.cs:149:31:149:39 | ... + ... | WriteLine |

View File

@@ -1 +1 @@
| expressions.cs:91:14:91:25 | MainIsAsCast | expressions.cs:96:27:96:34 | (...) ... |
| expressions.cs:92:14:92:25 | MainIsAsCast | expressions.cs:97:27:97:34 | (...) ... |

View File

@@ -1 +1 @@
| expressions.cs:133:13:133:18 | Nested | expressions.cs:133:29:133:32 | call to constructor Class |
| expressions.cs:134:13:134:18 | Nested | expressions.cs:134:29:134:32 | call to constructor Class |

View File

@@ -1,8 +1,8 @@
| expressions.cs:56:9:56:13 | Class | expressions.cs:56:19:56:22 | call to constructor Class | expressions.cs:58:19:58:23 | Class |
| expressions.cs:58:19:58:23 | Class | expressions.cs:58:19:58:23 | call to constructor Object | file://:0:0:0:0 | Object |
| expressions.cs:132:13:132:18 | Nested | expressions.cs:132:13:132:18 | call to constructor Class | expressions.cs:56:9:56:13 | Class |
| expressions.cs:133:13:133:18 | Nested | expressions.cs:133:29:133:32 | call to constructor Class | expressions.cs:58:19:58:23 | Class |
| expressions.cs:249:16:249:26 | LoginDialog | expressions.cs:249:16:249:26 | call to constructor Object | file://:0:0:0:0 | Object |
| expressions.cs:270:16:270:24 | IntVector | expressions.cs:270:16:270:24 | call to constructor Object | file://:0:0:0:0 | Object |
| expressions.cs:310:16:310:20 | Digit | expressions.cs:310:16:310:20 | call to constructor ValueType | file://:0:0:0:0 | ValueType |
| expressions.cs:480:20:480:22 | Num | expressions.cs:480:20:480:22 | call to constructor Object | file://:0:0:0:0 | Object |
| expressions.cs:133:13:133:18 | Nested | expressions.cs:133:13:133:18 | call to constructor Class | expressions.cs:56:9:56:13 | Class |
| expressions.cs:134:13:134:18 | Nested | expressions.cs:134:29:134:32 | call to constructor Class | expressions.cs:58:19:58:23 | Class |
| expressions.cs:250:16:250:26 | LoginDialog | expressions.cs:250:16:250:26 | call to constructor Object | file://:0:0:0:0 | Object |
| expressions.cs:271:16:271:24 | IntVector | expressions.cs:271:16:271:24 | call to constructor Object | file://:0:0:0:0 | Object |
| expressions.cs:311:16:311:20 | Digit | expressions.cs:311:16:311:20 | call to constructor ValueType | file://:0:0:0:0 | ValueType |
| expressions.cs:481:20:481:22 | Num | expressions.cs:481:20:481:22 | call to constructor Object | file://:0:0:0:0 | Object |

View File

@@ -1 +1 @@
| expressions.cs:91:14:91:25 | MainIsAsCast | expressions.cs:99:21:99:32 | default(...) |
| expressions.cs:92:14:92:25 | MainIsAsCast | expressions.cs:100:21:100:32 | default(...) |

View File

@@ -1 +1 @@
| expressions.cs:110:32:110:41 | PrintTypes | expressions.cs:124:23:124:32 | default(...) | expressions.cs:107:17:107:17 | T |
| expressions.cs:111:32:111:41 | PrintTypes | expressions.cs:125:23:125:32 | default(...) | expressions.cs:108:17:108:17 | T |

View File

@@ -1 +1 @@
| expressions.cs:171:21:171:49 | MainDelegateAndMethodAccesses | expressions.cs:185:13:185:20 | delegate call | expressions.cs:185:13:185:15 | access to local variable cd1 |
| expressions.cs:172:21:172:49 | MainDelegateAndMethodAccesses | expressions.cs:186:13:186:20 | delegate call | expressions.cs:186:13:186:15 | access to local variable cd1 |

View File

@@ -1 +1 @@
| expressions.cs:171:21:171:49 | MainDelegateAndMethodAccesses | expressions.cs:187:13:187:23 | delegate call | expressions.cs:187:13:187:15 | access to local variable cd7 |
| expressions.cs:172:21:172:49 | MainDelegateAndMethodAccesses | expressions.cs:188:13:188:23 | delegate call | expressions.cs:188:13:188:15 | access to local variable cd7 |

View File

@@ -1 +1 @@
| expressions.cs:171:21:171:49 | MainDelegateAndMethodAccesses | expressions.cs:187:13:187:23 | delegate call | expressions.cs:187:13:187:15 | access to local variable cd7 |
| expressions.cs:172:21:172:49 | MainDelegateAndMethodAccesses | expressions.cs:188:13:188:23 | delegate call | expressions.cs:188:13:188:15 | access to local variable cd7 |

View File

@@ -1 +1 @@
| expressions.cs:171:21:171:49 | MainDelegateAndMethodAccesses | expressions.cs:183:21:183:30 | delegate creation of type D |
| expressions.cs:172:21:172:49 | MainDelegateAndMethodAccesses | expressions.cs:184:21:184:30 | delegate creation of type D |

View File

@@ -1 +1 @@
| expressions.cs:171:21:171:49 | MainDelegateAndMethodAccesses | expressions.cs:173:21:173:31 | delegate creation of type D |
| expressions.cs:172:21:172:49 | MainDelegateAndMethodAccesses | expressions.cs:174:21:174:31 | delegate creation of type D |

View File

@@ -1 +1 @@
| expressions.cs:171:21:171:49 | MainDelegateAndMethodAccesses | expressions.cs:182:21:182:31 | delegate creation of type D |
| expressions.cs:172:21:172:49 | MainDelegateAndMethodAccesses | expressions.cs:183:21:183:31 | delegate creation of type D |

View File

@@ -1 +1 @@
| expressions.cs:171:21:171:49 | MainDelegateAndMethodAccesses | expressions.cs:174:21:174:24 | delegate creation of type D |
| expressions.cs:172:21:172:49 | MainDelegateAndMethodAccesses | expressions.cs:175:21:175:24 | delegate creation of type D |

View File

@@ -1 +1 @@
| expressions.cs:171:21:171:49 | MainDelegateAndMethodAccesses | expressions.cs:197:19:197:38 | delegate creation of type D |
| expressions.cs:172:21:172:49 | MainDelegateAndMethodAccesses | expressions.cs:198:19:198:38 | delegate creation of type D |

View File

@@ -1 +1 @@
| expressions.cs:171:21:171:49 | MainDelegateAndMethodAccesses | expressions.cs:198:19:198:31 | delegate creation of type D |
| expressions.cs:172:21:172:49 | MainDelegateAndMethodAccesses | expressions.cs:199:19:199:31 | delegate creation of type D |

View File

@@ -1 +1 @@
| expressions.cs:231:24:231:30 | OnClick | expressions.cs:233:17:233:21 | access to event Click |
| expressions.cs:232:24:232:30 | OnClick | expressions.cs:234:17:234:21 | access to event Click |

View File

@@ -1 +1 @@
| expressions.cs:237:21:237:25 | Reset | expressions.cs:239:13:239:17 | access to event Click |
| expressions.cs:238:21:238:25 | Reset | expressions.cs:240:13:240:17 | access to event Click |

View File

@@ -1 +1 @@
| expressions.cs:231:24:231:30 | OnClick | expressions.cs:234:17:234:30 | delegate call | expressions.cs:234:17:234:21 | access to event Click |
| expressions.cs:232:24:232:30 | OnClick | expressions.cs:235:17:235:30 | delegate call | expressions.cs:235:17:235:21 | access to event Click |

View File

@@ -1 +1 @@
| expressions.cs:160:14:160:24 | MainChecked | expressions.cs:162:24:162:36 | checked (...) |
| expressions.cs:161:14:161:24 | MainChecked | expressions.cs:163:24:163:36 | checked (...) |

View File

@@ -1 +1 @@
| expressions.cs:160:14:160:24 | MainChecked | expressions.cs:163:21:163:37 | unchecked (...) |
| expressions.cs:161:14:161:24 | MainChecked | expressions.cs:164:21:164:37 | unchecked (...) |

View File

@@ -1 +1 @@
| expressions.cs:135:18:135:30 | OtherAccesses | expressions.cs:137:17:137:22 | access to field f |
| expressions.cs:136:18:136:30 | OtherAccesses | expressions.cs:138:17:138:22 | access to field f |

View File

@@ -1 +1 @@
| expressions.cs:91:14:91:25 | MainIsAsCast | expressions.cs:93:17:93:26 | ... is ... |
| expressions.cs:92:14:92:25 | MainIsAsCast | expressions.cs:94:17:94:26 | ... is ... |

View File

@@ -1 +1 @@
| expressions.cs:449:36:449:53 | (...) => ... |
| expressions.cs:450:36:450:53 | (...) => ... |

View File

@@ -1 +1 @@
| expressions.cs:450:38:450:59 | (...) => ... |
| expressions.cs:451:38:451:59 | (...) => ... |

View File

@@ -1 +1 @@
| expressions.cs:451:33:451:48 | (...) => ... |
| expressions.cs:452:33:452:48 | (...) => ... |

View File

@@ -1 +1 @@
| expressions.cs:452:36:452:64 | (...) => ... |
| expressions.cs:453:36:453:64 | (...) => ... |

View File

@@ -1 +1 @@
| expressions.cs:453:20:453:34 | (...) => ... |
| expressions.cs:454:20:454:34 | (...) => ... |

View File

@@ -1 +1 @@
| expressions.cs:454:23:454:47 | (...) => ... |
| expressions.cs:455:23:455:47 | (...) => ... |

View File

@@ -1 +1 @@
| expressions.cs:153:14:153:31 | MainLocalConstDecl | expressions.cs:157:31:157:32 | access to local variable pi |
| expressions.cs:154:14:154:31 | MainLocalConstDecl | expressions.cs:158:31:158:32 | access to local variable pi |

View File

@@ -1,3 +1,3 @@
| MethodAccess.cs:8:20:8:21 | access to local function M1 |
| expressions.cs:197:25:197:37 | access to local function LocalFunction |
| expressions.cs:198:19:198:31 | access to local function LocalFunction |
| expressions.cs:198:25:198:37 | access to local function LocalFunction |
| expressions.cs:199:19:199:31 | access to local function LocalFunction |

View File

@@ -1 +1 @@
| expressions.cs:143:14:143:29 | MainLocalVarDecl | expressions.cs:147:13:147:13 | access to local variable a |
| expressions.cs:144:14:144:29 | MainLocalVarDecl | expressions.cs:148:13:148:13 | access to local variable a |

View File

@@ -2,10 +2,10 @@
| MethodAccess.cs:10:13:10:19 | access to method M2 |
| MethodAccess.cs:11:13:11:14 | access to method M3 |
| MethodAccess.cs:12:13:12:27 | access to method M3 |
| expressions.cs:173:27:173:30 | access to method M1 |
| expressions.cs:174:21:174:24 | access to method M2 |
| expressions.cs:182:27:182:30 | access to method M3 |
| expressions.cs:189:52:189:54 | access to method F |
| expressions.cs:190:36:190:38 | access to method G |
| expressions.cs:252:48:252:60 | access to method OkButtonClick |
| expressions.cs:254:52:254:68 | access to method CancelButtonClick |
| expressions.cs:174:27:174:30 | access to method M1 |
| expressions.cs:175:21:175:24 | access to method M2 |
| expressions.cs:183:27:183:30 | access to method M3 |
| expressions.cs:190:52:190:54 | access to method F |
| expressions.cs:191:36:191:38 | access to method G |
| expressions.cs:253:48:253:60 | access to method OkButtonClick |
| expressions.cs:255:52:255:68 | access to method CancelButtonClick |

View File

@@ -1,2 +1,2 @@
| expressions.cs:249:16:249:26 | LoginDialog | expressions.cs:251:24:251:35 | object creation of type Button | expressions.cs:226:18:226:23 | Button |
| expressions.cs:249:16:249:26 | LoginDialog | expressions.cs:253:28:253:39 | object creation of type Button | expressions.cs:226:18:226:23 | Button |
| expressions.cs:250:16:250:26 | LoginDialog | expressions.cs:252:24:252:35 | object creation of type Button | expressions.cs:227:18:227:23 | Button |
| expressions.cs:250:16:250:26 | LoginDialog | expressions.cs:254:28:254:39 | object creation of type Button | expressions.cs:227:18:227:23 | Button |

View File

@@ -1,4 +1,4 @@
| expressions.cs:427:41:427:49 | call to method Add |
| expressions.cs:427:43:427:43 | access to local variable i |
| expressions.cs:427:43:427:47 | ... = ... |
| expressions.cs:427:47:427:47 | 2 |
| expressions.cs:428:41:428:49 | call to method Add |
| expressions.cs:428:43:428:43 | access to local variable i |
| expressions.cs:428:43:428:47 | ... = ... |
| expressions.cs:428:47:428:47 | 2 |

View File

@@ -1 +1 @@
| expressions.cs:428:42:428:58 | { ..., ... } | expressions.cs:428:44:428:56 | object creation of type <>__AnonType1<Int32> |
| expressions.cs:429:42:429:58 | { ..., ... } | expressions.cs:429:44:429:56 | object creation of type <>__AnonType1<Int32> |

View File

@@ -1 +1 @@
| expressions.cs:294:14:294:30 | MainUnaryOperator | expressions.cs:296:29:296:44 | object creation of type IntVector | expressions.cs:270:16:270:24 | IntVector |
| expressions.cs:295:14:295:30 | MainUnaryOperator | expressions.cs:297:29:297:44 | object creation of type IntVector | expressions.cs:271:16:271:24 | IntVector |

View File

@@ -1,3 +1,3 @@
| expressions.cs:385:14:385:26 | MainCreations | expressions.cs:387:23:387:48 | object creation of type Point | expressions.cs:340:18:340:22 | Point | expressions.cs:387:33:387:48 | { ..., ... } |
| expressions.cs:385:14:385:26 | MainCreations | expressions.cs:390:22:390:49 | object creation of type Point | expressions.cs:340:18:340:22 | Point | expressions.cs:390:34:390:49 | { ..., ... } |
| expressions.cs:385:14:385:26 | MainCreations | expressions.cs:391:22:391:49 | object creation of type Point | expressions.cs:340:18:340:22 | Point | expressions.cs:391:34:391:49 | { ..., ... } |
| expressions.cs:386:14:386:26 | MainCreations | expressions.cs:388:23:388:48 | object creation of type Point | expressions.cs:341:18:341:22 | Point | expressions.cs:388:33:388:48 | { ..., ... } |
| expressions.cs:386:14:386:26 | MainCreations | expressions.cs:391:22:391:49 | object creation of type Point | expressions.cs:341:18:341:22 | Point | expressions.cs:391:34:391:49 | { ..., ... } |
| expressions.cs:386:14:386:26 | MainCreations | expressions.cs:392:22:392:49 | object creation of type Point | expressions.cs:341:18:341:22 | Point | expressions.cs:392:34:392:49 | { ..., ... } |

View File

@@ -1,2 +1,2 @@
| expressions.cs:387:23:387:48 | object creation of type Point | expressions.cs:387:33:387:48 | { ..., ... } | expressions.cs:387:35:387:39 | ... = ... | expressions.cs:387:42:387:46 | ... = ... |
| expressions.cs:390:22:390:49 | object creation of type Point | expressions.cs:390:34:390:49 | { ..., ... } | expressions.cs:390:36:390:40 | ... = ... | expressions.cs:390:43:390:47 | ... = ... |
| expressions.cs:388:23:388:48 | object creation of type Point | expressions.cs:388:33:388:48 | { ..., ... } | expressions.cs:388:35:388:39 | ... = ... | expressions.cs:388:42:388:46 | ... = ... |
| expressions.cs:391:22:391:49 | object creation of type Point | expressions.cs:391:34:391:49 | { ..., ... } | expressions.cs:391:36:391:40 | ... = ... | expressions.cs:391:43:391:47 | ... = ... |

View File

@@ -1 +1 @@
| expressions.cs:391:34:391:49 | { ..., ... } | expressions.cs:391:36:391:40 | ... = ... | expressions.cs:391:43:391:47 | ... = ... |
| expressions.cs:392:34:392:49 | { ..., ... } | expressions.cs:392:36:392:40 | ... = ... | expressions.cs:392:43:392:47 | ... = ... |

View File

@@ -1 +1 @@
| expressions.cs:389:13:392:13 | { ..., ... } | expressions.cs:390:17:390:49 | ... = ... | expressions.cs:391:17:391:49 | ... = ... |
| expressions.cs:390:13:393:13 | { ..., ... } | expressions.cs:391:17:391:49 | ... = ... | expressions.cs:392:17:392:49 | ... = ... |

View File

@@ -1 +1 @@
| expressions.cs:385:14:385:26 | MainCreations | expressions.cs:393:29:397:13 | object creation of type Rectangle2 |
| expressions.cs:386:14:386:26 | MainCreations | expressions.cs:394:29:398:13 | object creation of type Rectangle2 |

View File

@@ -1 +1 @@
| expressions.cs:385:14:385:26 | MainCreations | expressions.cs:398:32:398:77 | object creation of type List<Int32> | expressions.cs:398:46:398:77 | { ..., ... } |
| expressions.cs:386:14:386:26 | MainCreations | expressions.cs:399:32:399:77 | object creation of type List<Int32> | expressions.cs:399:46:399:77 | { ..., ... } |

View File

@@ -1 +1 @@
| expressions.cs:385:14:385:26 | MainCreations | expressions.cs:399:28:408:7 | object creation of type List<Contact> | expressions.cs:399:46:408:7 | { ..., ... } |
| expressions.cs:386:14:386:26 | MainCreations | expressions.cs:400:28:409:7 | object creation of type List<Contact> | expressions.cs:400:46:409:7 | { ..., ... } |

View File

@@ -1 +1 @@
| expressions.cs:294:14:294:30 | MainUnaryOperator | expressions.cs:300:29:300:37 | call to operator + | expressions.cs:284:42:284:42 | + |
| expressions.cs:295:14:295:30 | MainUnaryOperator | expressions.cs:301:29:301:37 | call to operator + | expressions.cs:285:42:285:42 | + |

View File

@@ -1 +1 @@
| expressions.cs:332:14:332:35 | MainConversionOperator | expressions.cs:334:23:334:30 | call to operator explicit conversion | expressions.cs:322:32:322:39 | explicit conversion |
| expressions.cs:333:14:333:35 | MainConversionOperator | expressions.cs:335:23:335:30 | call to operator explicit conversion | expressions.cs:323:32:323:39 | explicit conversion |

View File

@@ -1 +1 @@
| expressions.cs:332:14:332:35 | MainConversionOperator | expressions.cs:335:22:335:22 | call to operator implicit conversion | expressions.cs:317:32:317:39 | implicit conversion |
| expressions.cs:333:14:333:35 | MainConversionOperator | expressions.cs:336:22:336:22 | call to operator implicit conversion | expressions.cs:318:32:318:39 | implicit conversion |

View File

@@ -1 +1 @@
| expressions.cs:294:14:294:30 | MainUnaryOperator | expressions.cs:298:19:298:23 | call to operator ++ | expressions.cs:276:42:276:43 | ++ |
| expressions.cs:295:14:295:30 | MainUnaryOperator | expressions.cs:299:19:299:23 | call to operator ++ | expressions.cs:277:42:277:43 | ++ |

View File

@@ -1 +1 @@
| expressions.cs:294:14:294:30 | MainUnaryOperator | expressions.cs:299:19:299:23 | call to operator ++ | expressions.cs:276:42:276:43 | ++ |
| expressions.cs:295:14:295:30 | MainUnaryOperator | expressions.cs:300:19:300:23 | call to operator ++ | expressions.cs:277:42:277:43 | ++ |

View File

@@ -1,4 +1,4 @@
| expressions.cs:470:20:470:27 | addition | expressions.cs:472:26:472:26 | access to parameter a | expressions.cs:485:40:485:40 | + |
| expressions.cs:470:20:470:27 | addition | expressions.cs:472:30:472:30 | access to parameter b | expressions.cs:485:40:485:40 | + |
| expressions.cs:470:20:470:27 | addition | expressions.cs:473:13:473:18 | access to local variable result | expressions.cs:485:40:485:40 | + |
| expressions.cs:470:20:470:27 | addition | expressions.cs:473:23:473:23 | access to parameter c | expressions.cs:485:40:485:40 | + |
| expressions.cs:471:20:471:27 | addition | expressions.cs:473:26:473:26 | access to parameter a | expressions.cs:486:40:486:40 | + |
| expressions.cs:471:20:471:27 | addition | expressions.cs:473:30:473:30 | access to parameter b | expressions.cs:486:40:486:40 | + |
| expressions.cs:471:20:471:27 | addition | expressions.cs:474:13:474:18 | access to local variable result | expressions.cs:486:40:486:40 | + |
| expressions.cs:471:20:471:27 | addition | expressions.cs:474:23:474:23 | access to parameter c | expressions.cs:486:40:486:40 | + |

View File

@@ -1,2 +1,2 @@
| expressions.cs:464:21:464:35 | delegateCombine | expressions.cs:462:11:462:23 | OperatorCalls | expressions.cs:467:13:467:27 | access to local variable PropertyChanged | expressions.cs:491:30:491:39 | MyDelegate |
| expressions.cs:464:21:464:35 | delegateCombine | expressions.cs:462:11:462:23 | OperatorCalls | expressions.cs:467:32:467:34 | access to parameter fun | expressions.cs:491:30:491:39 | MyDelegate |
| expressions.cs:465:21:465:35 | delegateCombine | expressions.cs:463:11:463:23 | OperatorCalls | expressions.cs:468:13:468:27 | access to local variable PropertyChanged | expressions.cs:492:30:492:39 | MyDelegate |
| expressions.cs:465:21:465:35 | delegateCombine | expressions.cs:463:11:463:23 | OperatorCalls | expressions.cs:468:32:468:34 | access to parameter fun | expressions.cs:492:30:492:39 | MyDelegate |

View File

@@ -1,2 +1,2 @@
| expressions.cs:67:16:67:19 | Name | expressions.cs:70:26:70:30 | access to parameter value |
| expressions.cs:377:23:377:26 | Name | expressions.cs:377:64:377:68 | access to parameter value |
| expressions.cs:378:23:378:26 | Name | expressions.cs:378:64:378:68 | access to parameter value |

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More