Compare commits

..

51 Commits

Author SHA1 Message Date
Taus
a87a1a1efa Python: Fix broken queries 2026-01-20 13:25:41 +00:00
Ian Lynagh
f8f5094452 Merge pull request #20957 from igfoo/igfoo/consistent-metadata-and-overlay-support
C++ / JS / python: Be consistent in TRAP sections
2026-01-20 12:43:49 +00:00
Ian Lynagh
51b1ea84d3 ql for ql: Fix formatting 2026-01-20 12:12:20 +00:00
Ian Lynagh
49ced5fd9d C++: Add up/downgrade scripts 2026-01-20 11:57:29 +00:00
Ian Lynagh
d6d2855626 rust: Add up/downgrade scripts 2026-01-20 11:56:20 +00:00
Ian Lynagh
c37ab8f98e rust: Regenerate dbscheme 2026-01-20 11:56:16 +00:00
Ian Lynagh
1fd60c7671 Ruby: Add up/downgrade scripts 2026-01-20 11:56:16 +00:00
Ian Lynagh
82e9ea2da0 python: Add up/downgrade scripts 2026-01-20 11:56:16 +00:00
Ian Lynagh
a299174f4d javascript: Add up/downgrade scripts 2026-01-20 11:56:15 +00:00
Ian Lynagh
fdefb4d23a ql-for-ql: Regenerate dbscheme 2026-01-20 11:56:15 +00:00
Ian Lynagh
d2da49220b python: Regenerate dbscheme 2026-01-20 11:56:15 +00:00
Ian Lynagh
4b9c9e7a5a Ruby: Regenerate dbscheme 2026-01-20 11:56:15 +00:00
Ian Lynagh
df8029ff87 tree-sitter: Use more standard shared dbscheme sections
We now use the shared "Overlay support" and "Database metadata".
2026-01-20 11:56:15 +00:00
Ian Lynagh
4140121e96 javascript: Use more standard shared dbscheme sections
We now use the shared "Overlay support" and "Database metadata".
2026-01-20 11:56:14 +00:00
Ian Lynagh
7d6a1f72d5 C++: Use more standard shared dbscheme sections
We now use the shared "Overlay support" and "Database metadata".
2026-01-20 11:56:14 +00:00
Ian Lynagh
c6500e2759 tree-sitter: Add dbscheme regeneration instructions 2026-01-20 11:56:14 +00:00
Ian Lynagh
470bc7d6da ruby: Make 'dbscheme' a phony target 2026-01-20 11:56:14 +00:00
Ian Lynagh
d1175276ca python: Use more standard shared dbscheme sections
We now use the shared "Overlay support" and "Database metadata".
2026-01-20 11:56:13 +00:00
Ian Lynagh
d125e224ac python: Add dbscheme regeneration instructions 2026-01-20 11:56:13 +00:00
Philip Ginsbach-Chen
dc3b7aaab0 Merge pull request #21184 from github/ginsbach/OverlayDocumentation
add documentation for overlay annotations
2026-01-20 11:26:46 +00:00
Philip Ginsbach
8d5eb407ad incorporate additional suggestions from PR review 2026-01-20 11:17:15 +00:00
Tom Hvitved
224e5dece4 Merge pull request #21170 from paldepind/rust/type-inference-fns
Rust: Improve type inference for closures and function traits
2026-01-20 11:52:10 +01:00
Simon Friis Vindum
dd73399238 Rust: Tweak a comment
Co-authored-by: Tom Hvitved <hvitved@github.com>
2026-01-20 09:57:27 +01:00
Simon Friis Vindum
8e6f920ae2 Rust: Fix naming of mention_dyn_fn 2026-01-20 08:50:58 +01:00
Simon Friis Vindum
75cab960e2 Rust: Make AnyTraitFn abstract 2026-01-20 08:50:57 +01:00
Nick Rolfe
6fe76b3b11 Merge pull request #21190 from github/post-release-prep/codeql-cli-2.24.0
Post-release preparation for codeql-cli-2.24.0
2026-01-19 10:09:32 -08:00
github-actions[bot]
48475e66af Post-release preparation for codeql-cli-2.24.0 2026-01-19 15:49:08 +00:00
Michael Nebel
93b3f65388 Merge pull request #21158 from michaelnebel/csharp/cfgforaccess
C# 14: Null conditional assignments.
2026-01-19 16:22:55 +01:00
Philip Ginsbach
930b17a2e2 clarify compileForOverlayEval only needed in language packs 2026-01-19 14:06:45 +00:00
Philip Ginsbach
efe413cbd0 expand overlay introduction with base/overlay context 2026-01-19 13:59:01 +00:00
Michael Nebel
7ff1c12e8f C#: Add some more tests. 2026-01-19 13:17:47 +01:00
Michael Nebel
7ae2b7698e C#: Relax the condition for when a qualified expression might be null. 2026-01-19 13:17:07 +01:00
Philip Ginsbach
4e478c3629 add overlay documentation to handbook and language spec 2026-01-19 11:45:18 +00:00
Philip Ginsbach
948623e767 add overlay annotation support to QL syntax highlighter 2026-01-19 10:36:11 +00:00
Michael Nebel
33fc2bab33 C#: Update test expected output. 2026-01-19 10:19:15 +01:00
Michael Nebel
beb7750c21 C#: Address review comments. 2026-01-19 10:06:14 +01:00
Michael Nebel
86198e3c43 C#: Add tests for out writeacceses. 2026-01-16 11:54:10 +01:00
Michael Nebel
bd1c6e6352 C#: Exclude the field access cases from missing argument call. 2026-01-16 11:54:09 +01:00
Michael Nebel
3d988e8e94 C#: Add field access for out assignments in the CFG. 2026-01-16 11:54:07 +01:00
Michael Nebel
812fdbe412 C#: Add change-note. 2026-01-16 11:54:06 +01:00
Michael Nebel
ab432ec2e9 C#: Update test expected output. 2026-01-16 11:54:04 +01:00
Michael Nebel
5942edf2d9 C#: Take null conditional assignments into account in MaybeNullExpr. 2026-01-16 11:54:02 +01:00
Michael Nebel
f0135e93c5 C#: Add a tests for MaybeNullExpr. 2026-01-16 11:54:01 +01:00
Michael Nebel
4ba89230db C#: Update test expected output. 2026-01-16 11:53:59 +01:00
Michael Nebel
0bf0cbae8f C#: Add some null conditional assignments CFG tests. 2026-01-16 11:53:57 +01:00
Michael Nebel
b061c4d083 C#: Update test expected output. 2026-01-16 11:53:55 +01:00
Michael Nebel
98949937dd C#: Add CFG support for null conditional assignments and include eg. field access in the CFG. 2026-01-16 11:53:54 +01:00
Simon Friis Vindum
78b88d3a44 Rust: Fix grammar in QLDoc
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-01-16 11:26:05 +01:00
Simon Friis Vindum
9ab29f9be0 Rust: Add a change note for type inference improvements for closures 2026-01-16 10:05:45 +01:00
Simon Friis Vindum
dabc5d54c9 Rust: Improve type inference for closures and function traits 2026-01-16 10:01:00 +01:00
Simon Friis Vindum
196f6e1931 Rust: Add type inference tests for closures and function traits 2026-01-15 12:00:41 +01:00
127 changed files with 42529 additions and 432 deletions

View File

@@ -1,5 +1,5 @@
name: codeql/actions-all
version: 0.4.26
version: 0.4.27-dev
library: true
warnOnImplicitThis: true
dependencies:

View File

@@ -1,5 +1,5 @@
name: codeql/actions-queries
version: 0.6.18
version: 0.6.19-dev
library: false
warnOnImplicitThis: true
groups: [actions, queries]

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
description: Sections for databaseMetadata and overlayChangedFiles
compatibility: full

View File

@@ -1,5 +1,5 @@
name: codeql/cpp-all
version: 7.0.0
version: 7.0.1-dev
groups: cpp
dbscheme: semmlecode.cpp.dbscheme
extractor: cpp

View File

@@ -2389,6 +2389,8 @@ link_parent(
int link_target : @link_target ref
);
/*- Database metadata -*/
/**
* The CLI will automatically emit applicable tuples for this table,
* such as `databaseMetadata("isOverlay", "true")` when building an
@@ -2399,6 +2401,8 @@ databaseMetadata(
string value: string ref
);
/*- Overlay support -*/
/**
* The CLI will automatically emit tuples for each new/modified/deleted file
* when building an overlay database.

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
description: Sections for databaseMetadata and overlayChangedFiles
compatibility: full

View File

@@ -1,5 +1,5 @@
name: codeql/cpp-queries
version: 1.5.9
version: 1.5.10-dev
groups:
- cpp
- queries

View File

@@ -1,5 +1,5 @@
name: codeql/csharp-solorigate-all
version: 1.7.57
version: 1.7.58-dev
groups:
- csharp
- solorigate

View File

@@ -1,5 +1,5 @@
name: codeql/csharp-solorigate-queries
version: 1.7.57
version: 1.7.58-dev
groups:
- csharp
- solorigate

View File

@@ -0,0 +1,4 @@
---
category: minorAnalysis
---
* C# 14: Support for null-conditional assignments (such as `c?.Prop = p`). Furthermore, the `MaybeNullExpr` class now takes null-conditional access (such as `?.`) into account when modeling potential null values.

View File

@@ -1,5 +1,5 @@
name: codeql/csharp-all
version: 5.4.5
version: 5.4.6-dev
groups: csharp
dbscheme: semmlecode.csharp.dbscheme
extractor: csharp

View File

@@ -429,7 +429,7 @@ module Expressions {
not this instanceof ObjectCreation and
not this instanceof ArrayCreation and
not this instanceof QualifiedWriteAccess and
not this instanceof AccessorWrite and
not this instanceof QualifiedAccessorWrite and
not this instanceof NoNodeExpr and
not this instanceof SwitchExpr and
not this instanceof SwitchCaseExpr and
@@ -446,21 +446,29 @@ module Expressions {
}
/**
* A qualified write access. In a qualified write access, the access itself is
* not evaluated, only the qualifier and the indexer arguments (if any).
* A qualified write access.
*
* The successor declaration in `QualifiedAccessorWrite` ensures that the access itself
* is evaluated after the qualifier and the indexer arguments (if any)
* and the right hand side of the assignment.
*
* When a qualified write access is used as an `out/ref` argument, the access itself is evaluated immediately.
*/
private class QualifiedWriteAccess extends ControlFlowTree instanceof WriteAccess, QualifiableExpr
{
QualifiedWriteAccess() {
this.hasQualifier()
or
// Member initializers like
// ```csharp
// new Dictionary<int, string>() { [0] = "Zero", [1] = "One", [2] = "Two" }
// ```
// need special treatment, because the accesses `[0]`, `[1]`, and `[2]`
// have no qualifier.
this = any(MemberInitializer mi).getLValue()
(
this.hasQualifier()
or
// Member initializers like
// ```csharp
// new Dictionary<int, string>() { [0] = "Zero", [1] = "One", [2] = "Two" }
// ```
// need special treatment, because the accesses `[0]`, `[1]`, and `[2]`
// have no qualifier.
this = any(MemberInitializer mi).getLValue()
) and
not exists(AssignableDefinitions::OutRefDefinition def | def.getTargetAccess() = this)
}
final override predicate propagatesAbnormal(AstNode child) { child = getExprChild(this, _) }
@@ -470,25 +478,25 @@ module Expressions {
final override predicate last(AstNode last, Completion c) {
// Skip the access in a qualified write access
last(getLastExprChild(this), last, c)
or
// Qualifier exits with a null completion
super.isConditional() and
last(super.getQualifier(), last, c) and
c.(NullnessCompletion).isNull()
}
final override predicate succ(AstNode pred, AstNode succ, Completion c) {
exists(int i |
last(getExprChild(this, i), pred, c) and
c instanceof NormalCompletion and
(if i = 0 then not c.(NullnessCompletion).isNull() else any()) and
first(getExprChild(this, i + 1), succ)
)
}
}
private class StatOrDynAccessorCall_ =
@dynamic_member_access_expr or @dynamic_element_access_expr or @call_access_expr;
/** A normal or a (potential) dynamic call to an accessor. */
private class StatOrDynAccessorCall extends Expr, StatOrDynAccessorCall_ { }
/**
* An expression that writes via an accessor call, for example `x.Prop = 0`,
* An expression that writes via a qualifiable expression, for example `x.Prop = 0`,
* where `Prop` is a property.
*
* Accessor writes need special attention, because we need to model the fact
@@ -498,13 +506,21 @@ module Expressions {
* ```csharp
* x -> 0 -> set_Prop -> x.Prop = 0
* ```
*
* For consistency, control flow is implemented the same way for other qualified writes.
* For example, `x.Field = 0`, where `Field` is a field, we want a CFG that looks like
*
* ```csharp
* x -> 0 -> x.Field -> x.Field = 0
* ```
*/
class AccessorWrite extends PostOrderTree instanceof Expr {
private class QualifiedAccessorWrite extends PostOrderTree instanceof Expr {
AssignableDefinition def;
AccessorWrite() {
QualifiedAccessorWrite() {
def.getExpr() = this and
def.getTargetAccess().(WriteAccess) instanceof StatOrDynAccessorCall and
def.getTargetAccess().(WriteAccess) instanceof QualifiableExpr and
not def instanceof AssignableDefinitions::OutRefDefinition and
not this instanceof AssignOperationWithExpandedAssignment
}
@@ -512,10 +528,11 @@ module Expressions {
* Gets the `i`th accessor being called in this write. More than one call
* can happen in tuple assignments.
*/
StatOrDynAccessorCall getCall(int i) {
QualifiableExpr getAccess(int i) {
result =
rank[i + 1](AssignableDefinitions::TupleAssignmentDefinition tdef |
tdef.getExpr() = this and tdef.getTargetAccess() instanceof StatOrDynAccessorCall
tdef.getExpr() = this and
tdef.getTargetAccess() instanceof QualifiableExpr
|
tdef order by tdef.getEvaluationOrder()
).getTargetAccess()
@@ -528,7 +545,13 @@ module Expressions {
final override predicate propagatesAbnormal(AstNode child) {
child = getExprChild(this, _)
or
child = this.getCall(_)
child = this.getAccess(_)
}
final override predicate last(AstNode last, Completion c) {
PostOrderTree.super.last(last, c)
or
last(getExprChild(this, 0), last, c) and c.(NullnessCompletion).isNull()
}
final override predicate first(AstNode first) { first(getExprChild(this, 0), first) }
@@ -538,24 +561,25 @@ module Expressions {
exists(int i |
last(getExprChild(this, i), pred, c) and
c instanceof NormalCompletion and
(if i = 0 then not c.(NullnessCompletion).isNull() else any()) and
first(getExprChild(this, i + 1), succ)
)
or
// Flow from last element of last child to first accessor call
last(getLastExprChild(this), pred, c) and
succ = this.getCall(0) and
succ = this.getAccess(0) and
c instanceof NormalCompletion
or
// Flow from one call to the next
exists(int i | pred = this.getCall(i) |
succ = this.getCall(i + 1) and
exists(int i | pred = this.getAccess(i) |
succ = this.getAccess(i + 1) and
c.isValidFor(pred) and
c instanceof NormalCompletion
)
or
// Post-order: flow from last call to element itself
exists(int last | last = max(int i | exists(this.getCall(i))) |
pred = this.getCall(last) and
exists(int last | last = max(int i | exists(this.getAccess(i))) |
pred = this.getAccess(last) and
succ = this and
c.isValidFor(pred) and
c instanceof NormalCompletion
@@ -704,7 +728,9 @@ module Expressions {
private class ConditionallyQualifiedExpr extends PostOrderTree instanceof QualifiableExpr {
private Expr qualifier;
ConditionallyQualifiedExpr() { this.isConditional() and qualifier = getExprChild(this, 0) }
ConditionallyQualifiedExpr() {
this.isConditional() and qualifier = getExprChild(this, 0) and not this instanceof WriteAccess
}
final override predicate propagatesAbnormal(AstNode child) { child = qualifier }

View File

@@ -43,6 +43,13 @@ private Expr maybeNullExpr(Expr reason) {
)
or
result.(NullCoalescingExpr).getRightOperand() = maybeNullExpr(reason)
or
result =
any(QualifiableExpr qe |
qe.isConditional() and
reason = qe.getQualifier() and
not qe instanceof AssignableWrite
)
}
/** An expression that may be `null`. */

View File

@@ -1,5 +1,5 @@
name: codeql/csharp-queries
version: 1.6.0
version: 1.6.1-dev
groups:
- csharp
- queries

View File

@@ -21,4 +21,26 @@ class Assignments
delegate void EventHandler(object sender, object e);
event EventHandler Event;
int IntField;
string StringField;
void SetParamSingle(out int x)
{
x = 42;
}
void SetParamMulti(out int x, object o, out string y)
{
x = 42;
y = "Hello";
}
void M2()
{
int x1;
SetParamSingle(out x1);
SetParamSingle(out IntField);
SetParamMulti(out var y, null, out StringField);
SetParamMulti(out IntField, null, out StringField);
}
}

View File

@@ -3,14 +3,14 @@
| AccessorCalls.cs:5:33:5:35 | enter set_Item | AccessorCalls.cs:5:33:5:35 | exit set_Item | 4 |
| AccessorCalls.cs:7:32:7:34 | enter add_Event | AccessorCalls.cs:7:32:7:34 | exit add_Event | 4 |
| AccessorCalls.cs:7:40:7:45 | enter remove_Event | AccessorCalls.cs:7:40:7:45 | exit remove_Event | 4 |
| AccessorCalls.cs:10:10:10:11 | enter M1 | AccessorCalls.cs:10:10:10:11 | exit M1 | 33 |
| AccessorCalls.cs:19:10:19:11 | enter M2 | AccessorCalls.cs:19:10:19:11 | exit M2 | 41 |
| AccessorCalls.cs:10:10:10:11 | enter M1 | AccessorCalls.cs:10:10:10:11 | exit M1 | 34 |
| AccessorCalls.cs:19:10:19:11 | enter M2 | AccessorCalls.cs:19:10:19:11 | exit M2 | 42 |
| AccessorCalls.cs:28:10:28:11 | enter M3 | AccessorCalls.cs:28:10:28:11 | exit M3 | 17 |
| AccessorCalls.cs:35:10:35:11 | enter M4 | AccessorCalls.cs:35:10:35:11 | exit M4 | 20 |
| AccessorCalls.cs:42:10:42:11 | enter M5 | AccessorCalls.cs:42:10:42:11 | exit M5 | 33 |
| AccessorCalls.cs:49:10:49:11 | enter M6 | AccessorCalls.cs:49:10:49:11 | exit M6 | 42 |
| AccessorCalls.cs:56:10:56:11 | enter M7 | AccessorCalls.cs:56:10:56:11 | exit M7 | 24 |
| AccessorCalls.cs:61:10:61:11 | enter M8 | AccessorCalls.cs:61:10:61:11 | exit M8 | 30 |
| AccessorCalls.cs:42:10:42:11 | enter M5 | AccessorCalls.cs:42:10:42:11 | exit M5 | 34 |
| AccessorCalls.cs:49:10:49:11 | enter M6 | AccessorCalls.cs:49:10:49:11 | exit M6 | 43 |
| AccessorCalls.cs:56:10:56:11 | enter M7 | AccessorCalls.cs:56:10:56:11 | exit M7 | 25 |
| AccessorCalls.cs:61:10:61:11 | enter M8 | AccessorCalls.cs:61:10:61:11 | exit M8 | 31 |
| AccessorCalls.cs:66:10:66:11 | enter M9 | AccessorCalls.cs:66:10:66:11 | exit M9 | 58 |
| ArrayCreation.cs:1:7:1:19 | enter ArrayCreation | ArrayCreation.cs:1:7:1:19 | exit ArrayCreation | 7 |
| ArrayCreation.cs:3:11:3:12 | enter M1 | ArrayCreation.cs:3:11:3:12 | exit M1 | 5 |
@@ -167,6 +167,9 @@
| Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | exit M | 34 |
| Assignments.cs:14:18:14:35 | enter (...) => ... | Assignments.cs:14:18:14:35 | exit (...) => ... | 4 |
| Assignments.cs:17:40:17:40 | enter + | Assignments.cs:17:40:17:40 | exit + | 6 |
| Assignments.cs:27:10:27:23 | enter SetParamSingle | Assignments.cs:27:10:27:23 | exit SetParamSingle | 7 |
| Assignments.cs:32:10:32:22 | enter SetParamMulti | Assignments.cs:32:10:32:22 | exit SetParamMulti | 10 |
| Assignments.cs:38:10:38:11 | enter M2 | Assignments.cs:38:10:38:11 | exit M2 | 28 |
| BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | exit BreakInTry | 7 |
| BreakInTry.cs:3:10:3:11 | enter M1 | BreakInTry.cs:7:33:7:36 | access to parameter args | 5 |
| BreakInTry.cs:3:10:3:11 | exit M1 (normal) | BreakInTry.cs:3:10:3:11 | exit M1 | 2 |
@@ -244,7 +247,30 @@
| ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:35:9:35:12 | access to property Prop | 8 |
| ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:32:10:32:11 | exit M8 | 2 |
| ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:24 | call to method Out | 1 |
| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith | 8 |
| ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:9:42:11 | exit get_Item | 6 |
| ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:9:43:11 | exit set_Item | 4 |
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | 4 |
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | exit M9 | 2 |
| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:12:48:25 | ... = ... | 3 |
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | 2 |
| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:49:12:49:32 | ... = ... | 3 |
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | 2 |
| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:50:12:50:23 | ... = ... | 4 |
| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:9:51:16 | access to property Prop | 1 |
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | 2 |
| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:51:18:51:31 | ... = ... | 3 |
| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:9:52:16 | access to property Prop | 1 |
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | 2 |
| ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:18:52:38 | ... = ... | 3 |
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | 1 |
| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:20 | access to field IntField | 1 |
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | 2 |
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:12:53:25 | ... = ... | 4 |
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | 1 |
| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | 1 |
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | 2 |
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:12:54:29 | ... = ... | 4 |
| ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith | 8 |
| Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | exit Conditions | 7 |
| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:5:13:5:15 | access to parameter inc | 4 |
| Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:3:10:3:19 | exit IncrOrDecr | 2 |
@@ -490,8 +516,8 @@
| Finally.cs:205:31:205:46 | object creation of type ExceptionB | Finally.cs:205:31:205:46 | object creation of type ExceptionB | 1 |
| Finally.cs:208:13:210:13 | {...} | Finally.cs:209:21:209:22 | access to parameter b3 | 3 |
| Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:25:209:47 | throw ...; | 2 |
| Finally.cs:211:13:211:29 | ...; | Finally.cs:211:13:211:28 | ... = ... | 4 |
| Finally.cs:213:9:213:25 | ...; | Finally.cs:195:10:195:12 | exit M10 (normal) | 5 |
| Finally.cs:211:13:211:29 | ...; | Finally.cs:211:13:211:28 | ... = ... | 5 |
| Finally.cs:213:9:213:25 | ...; | Finally.cs:195:10:195:12 | exit M10 (normal) | 6 |
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:220:13:220:36 | call to method WriteLine | 7 |
| Finally.cs:222:9:225:9 | catch {...} | Finally.cs:224:13:224:38 | call to method WriteLine | 5 |
| Finally.cs:227:9:229:9 | {...} | Finally.cs:216:10:216:12 | exit M11 | 9 |
@@ -539,21 +565,21 @@
| Foreach.cs:36:10:36:11 | exit M6 (normal) | Foreach.cs:36:10:36:11 | exit M6 | 2 |
| Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | Foreach.cs:38:9:39:11 | foreach (... ... in ...) ... | 1 |
| Foreach.cs:38:26:38:26 | String x | Foreach.cs:39:11:39:11 | ; | 4 |
| Initializers.cs:3:7:3:18 | enter <object initializer> | Initializers.cs:3:7:3:18 | exit <object initializer> | 14 |
| Initializers.cs:3:7:3:18 | enter <object initializer> | Initializers.cs:3:7:3:18 | exit <object initializer> | 15 |
| Initializers.cs:3:7:3:18 | enter Initializers | Initializers.cs:3:7:3:18 | exit Initializers | 4 |
| Initializers.cs:8:5:8:16 | enter Initializers | Initializers.cs:8:5:8:16 | exit Initializers | 7 |
| Initializers.cs:10:5:10:16 | enter Initializers | Initializers.cs:10:5:10:16 | exit Initializers | 7 |
| Initializers.cs:12:10:12:10 | enter M | Initializers.cs:12:10:12:10 | exit M | 22 |
| Initializers.cs:18:16:18:16 | enter H | Initializers.cs:18:16:18:16 | exit H | 5 |
| Initializers.cs:20:11:20:23 | enter <object initializer> | Initializers.cs:20:11:20:23 | exit <object initializer> | 9 |
| Initializers.cs:12:10:12:10 | enter M | Initializers.cs:12:10:12:10 | exit M | 23 |
| Initializers.cs:18:16:18:16 | enter H | Initializers.cs:18:16:18:16 | exit H | 6 |
| Initializers.cs:20:11:20:23 | enter <object initializer> | Initializers.cs:20:11:20:23 | exit <object initializer> | 11 |
| Initializers.cs:20:11:20:23 | enter NoConstructor | Initializers.cs:20:11:20:23 | exit NoConstructor | 7 |
| Initializers.cs:26:11:26:13 | enter <object initializer> | Initializers.cs:26:11:26:13 | exit <object initializer> | 6 |
| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | exit Sub | 11 |
| Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:9:33:11 | exit Sub | 9 |
| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | exit Sub | 13 |
| Initializers.cs:26:11:26:13 | enter <object initializer> | Initializers.cs:26:11:26:13 | exit <object initializer> | 7 |
| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | exit Sub | 12 |
| Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:9:33:11 | exit Sub | 10 |
| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | exit Sub | 14 |
| Initializers.cs:39:7:39:23 | enter IndexInitializers | Initializers.cs:39:7:39:23 | exit IndexInitializers | 7 |
| Initializers.cs:41:11:41:18 | enter Compound | Initializers.cs:41:11:41:18 | exit Compound | 7 |
| Initializers.cs:51:10:51:13 | enter Test | Initializers.cs:51:10:51:13 | exit Test | 105 |
| Initializers.cs:51:10:51:13 | enter Test | Initializers.cs:51:10:51:13 | exit Test | 116 |
| LoopUnrolling.cs:5:7:5:19 | enter LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | exit LoopUnrolling | 7 |
| LoopUnrolling.cs:7:10:7:11 | enter M1 | LoopUnrolling.cs:9:13:9:28 | ... == ... | 7 |
| LoopUnrolling.cs:7:10:7:11 | exit M1 (normal) | LoopUnrolling.cs:7:10:7:11 | exit M1 | 2 |
@@ -629,7 +655,7 @@
| MultiImplementationA.cs:8:29:8:32 | null | MultiImplementationA.cs:8:16:8:16 | exit M (abnormal) | 3 |
| MultiImplementationA.cs:11:7:11:8 | enter <object initializer> | MultiImplementationA.cs:11:7:11:8 | enter <object initializer> | 1 |
| MultiImplementationA.cs:11:7:11:8 | exit <object initializer> (normal) | MultiImplementationA.cs:11:7:11:8 | exit <object initializer> | 2 |
| MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:24:32:24:34 | ... = ... | 7 |
| MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:24:32:24:34 | ... = ... | 8 |
| MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | exit get_Item (normal) | 2 |
| MultiImplementationA.cs:14:31:14:31 | enter get_Item | MultiImplementationA.cs:14:31:14:31 | enter get_Item | 1 |
| MultiImplementationA.cs:14:31:14:31 | exit get_Item | MultiImplementationA.cs:14:31:14:31 | exit get_Item | 1 |
@@ -645,7 +671,7 @@
| MultiImplementationA.cs:18:9:18:22 | enter M2 | MultiImplementationA.cs:18:9:18:22 | exit M2 | 4 |
| MultiImplementationA.cs:20:12:20:13 | enter C2 | MultiImplementationA.cs:20:12:20:13 | enter C2 | 1 |
| MultiImplementationA.cs:20:12:20:13 | exit C2 | MultiImplementationA.cs:20:12:20:13 | exit C2 | 1 |
| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | 9 |
| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | 10 |
| MultiImplementationA.cs:21:12:21:13 | enter C2 | MultiImplementationA.cs:21:12:21:13 | enter C2 | 1 |
| MultiImplementationA.cs:21:12:21:13 | exit C2 (normal) | MultiImplementationA.cs:21:12:21:13 | exit C2 | 2 |
| MultiImplementationA.cs:21:24:21:24 | 0 | MultiImplementationA.cs:21:27:21:29 | {...} | 3 |
@@ -671,7 +697,7 @@
| MultiImplementationB.cs:4:25:4:37 | {...} | MultiImplementationA.cs:7:21:7:23 | exit get_P2 (normal) | 4 |
| MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationA.cs:7:41:7:43 | exit set_P2 (normal) | 2 |
| MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationA.cs:8:16:8:16 | exit M (normal) | 2 |
| MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationB.cs:22:32:22:34 | ... = ... | 7 |
| MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationB.cs:22:32:22:34 | ... = ... | 8 |
| MultiImplementationB.cs:12:37:12:40 | null | MultiImplementationA.cs:14:31:14:31 | exit get_Item (abnormal) | 3 |
| MultiImplementationB.cs:13:40:13:54 | {...} | MultiImplementationA.cs:15:36:15:38 | exit get_Item (abnormal) | 4 |
| MultiImplementationB.cs:13:60:13:62 | {...} | MultiImplementationB.cs:13:60:13:62 | {...} | 1 |
@@ -722,7 +748,7 @@
| NullCoalescing.cs:15:31:15:31 | 0 | NullCoalescing.cs:16:17:16:18 | "" | 5 |
| NullCoalescing.cs:16:17:16:25 | ... ?? ... | NullCoalescing.cs:17:13:17:19 | (...) ... | 5 |
| NullCoalescing.cs:17:13:17:24 | ... ?? ... | NullCoalescing.cs:13:10:13:11 | exit M6 | 4 |
| PartialImplementationA.cs:1:15:1:21 | enter <object initializer> | PartialImplementationA.cs:1:15:1:21 | exit <object initializer> | 10 |
| PartialImplementationA.cs:1:15:1:21 | enter <object initializer> | PartialImplementationA.cs:1:15:1:21 | exit <object initializer> | 11 |
| PartialImplementationA.cs:3:12:3:18 | enter Partial | PartialImplementationA.cs:3:12:3:18 | exit Partial | 7 |
| PartialImplementationB.cs:4:12:4:18 | enter Partial | PartialImplementationB.cs:4:12:4:18 | exit Partial | 7 |
| Patterns.cs:3:7:3:14 | enter Patterns | Patterns.cs:3:7:3:14 | exit Patterns | 7 |
@@ -1041,8 +1067,8 @@
| cflow.cs:127:32:127:57 | ... ? ... : ... | cflow.cs:127:19:127:21 | exit get_Prop | 4 |
| cflow.cs:127:48:127:49 | "" | cflow.cs:127:48:127:49 | "" | 1 |
| cflow.cs:127:53:127:57 | this access | cflow.cs:127:53:127:57 | access to field Field | 2 |
| cflow.cs:127:62:127:64 | enter set_Prop | cflow.cs:127:62:127:64 | exit set_Prop | 8 |
| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | exit ControlFlow | 11 |
| cflow.cs:127:62:127:64 | enter set_Prop | cflow.cs:127:62:127:64 | exit set_Prop | 9 |
| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | exit ControlFlow | 12 |
| cflow.cs:134:5:134:15 | enter ControlFlow | cflow.cs:134:5:134:15 | exit ControlFlow | 9 |
| cflow.cs:136:12:136:22 | enter ControlFlow | cflow.cs:136:12:136:22 | exit ControlFlow | 8 |
| cflow.cs:138:40:138:40 | enter + | cflow.cs:138:40:138:40 | exit + | 9 |
@@ -1104,7 +1130,7 @@
| cflow.cs:201:9:205:9 | {...} | cflow.cs:193:10:193:17 | exit Booleans (abnormal) | 5 |
| cflow.cs:208:10:208:11 | enter Do | cflow.cs:210:9:221:36 | do ... while (...); | 3 |
| cflow.cs:208:10:208:11 | exit Do (normal) | cflow.cs:208:10:208:11 | exit Do | 2 |
| cflow.cs:211:9:221:9 | {...} | cflow.cs:213:17:213:32 | ... > ... | 14 |
| cflow.cs:211:9:221:9 | {...} | cflow.cs:213:17:213:32 | ... > ... | 15 |
| cflow.cs:214:13:216:13 | {...} | cflow.cs:215:17:215:25 | continue; | 2 |
| cflow.cs:217:13:220:13 | if (...) ... | cflow.cs:217:17:217:32 | ... < ... | 6 |
| cflow.cs:218:13:220:13 | {...} | cflow.cs:219:17:219:22 | break; | 2 |
@@ -1112,7 +1138,7 @@
| cflow.cs:224:10:224:16 | enter Foreach | cflow.cs:226:27:226:64 | call to method Repeat<String> | 5 |
| cflow.cs:224:10:224:16 | exit Foreach (normal) | cflow.cs:224:10:224:16 | exit Foreach | 2 |
| cflow.cs:226:9:237:9 | foreach (... ... in ...) ... | cflow.cs:226:9:237:9 | foreach (... ... in ...) ... | 1 |
| cflow.cs:226:22:226:22 | String x | cflow.cs:229:17:229:32 | ... > ... | 15 |
| cflow.cs:226:22:226:22 | String x | cflow.cs:229:17:229:32 | ... > ... | 16 |
| cflow.cs:230:13:232:13 | {...} | cflow.cs:231:17:231:25 | continue; | 2 |
| cflow.cs:233:13:236:13 | if (...) ... | cflow.cs:233:17:233:32 | ... < ... | 6 |
| cflow.cs:234:13:236:13 | {...} | cflow.cs:235:17:235:22 | break; | 2 |

View File

@@ -91,6 +91,23 @@ conditionBlock
| ConditionalAccess.cs:23:13:23:38 | Nullable<Int32> j = ... | ConditionalAccess.cs:25:31:25:31 | access to local variable s | false |
| ConditionalAccess.cs:24:17:24:37 | call to method ToString | ConditionalAccess.cs:25:31:25:31 | access to local variable s | false |
| ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:35:9:35:24 | call to method Out | false |
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:48:24:48:25 | 42 | false |
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:26:49:32 | "Hello" | false |
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:13:50:13 | 0 | false |
| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:30:51:31 | 84 | false |
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop | false |
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:30:51:31 | 84 | false |
| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:32:52:38 | "World" | false |
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | false |
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" | false |
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:20 | access to field IntField | false |
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | false |
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField | false |
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 | false |
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | false |
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | false |
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | false |
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" | false |
| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:6:13:6:16 | ...; | true |
| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:7:13:7:16 | [false] !... | true |
| Conditions.cs:7:9:8:16 | if (...) ... | Conditions.cs:7:13:7:16 | [true] !... | false |

View File

@@ -34,6 +34,25 @@ class ConditionalAccess
i = 0;
Prop?.Out(out i);
}
string StringProp { get; set; }
int IntField;
string this[int index]
{
get { return null; }
set { }
}
void M9(ConditionalAccess ca)
{
ca?.IntField = 42;
ca?.StringProp = "Hello";
ca?[0] = "Set0";
ca?.Prop?.IntField = 84;
ca?.Prop?.StringProp = "World";
ca?.IntField -= 1;
ca?.StringProp += "!";
}
}
static class Ext

View File

@@ -27,6 +27,7 @@ nodeEnclosing
| AccessorCalls.cs:10:10:10:11 | exit M1 (normal) | AccessorCalls.cs:10:10:10:11 | M1 |
| AccessorCalls.cs:11:5:17:5 | {...} | AccessorCalls.cs:10:10:10:11 | M1 |
| AccessorCalls.cs:12:9:12:12 | this access | AccessorCalls.cs:10:10:10:11 | M1 |
| AccessorCalls.cs:12:9:12:18 | access to field Field | AccessorCalls.cs:10:10:10:11 | M1 |
| AccessorCalls.cs:12:9:12:31 | ... = ... | AccessorCalls.cs:10:10:10:11 | M1 |
| AccessorCalls.cs:12:9:12:32 | ...; | AccessorCalls.cs:10:10:10:11 | M1 |
| AccessorCalls.cs:12:22:12:25 | this access | AccessorCalls.cs:10:10:10:11 | M1 |
@@ -61,6 +62,7 @@ nodeEnclosing
| AccessorCalls.cs:20:5:26:5 | {...} | AccessorCalls.cs:19:10:19:11 | M2 |
| AccessorCalls.cs:21:9:21:12 | this access | AccessorCalls.cs:19:10:19:11 | M2 |
| AccessorCalls.cs:21:9:21:14 | access to field x | AccessorCalls.cs:19:10:19:11 | M2 |
| AccessorCalls.cs:21:9:21:20 | access to field Field | AccessorCalls.cs:19:10:19:11 | M2 |
| AccessorCalls.cs:21:9:21:35 | ... = ... | AccessorCalls.cs:19:10:19:11 | M2 |
| AccessorCalls.cs:21:9:21:36 | ...; | AccessorCalls.cs:19:10:19:11 | M2 |
| AccessorCalls.cs:21:24:21:27 | this access | AccessorCalls.cs:19:10:19:11 | M2 |
@@ -140,6 +142,7 @@ nodeEnclosing
| AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:42:10:42:11 | M5 |
| AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:42:10:42:11 | M5 |
| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:42:10:42:11 | M5 |
| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:42:10:42:11 | M5 |
| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:42:10:42:11 | M5 |
| AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:42:10:42:11 | M5 |
| AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:42:10:42:11 | M5 |
@@ -175,6 +178,7 @@ nodeEnclosing
| AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 |
| AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 |
| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:49:10:49:11 | M6 |
| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:49:10:49:11 | M6 |
| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:49:10:49:11 | M6 |
| AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:49:10:49:11 | M6 |
| AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:49:10:49:11 | M6 |
@@ -216,6 +220,7 @@ nodeEnclosing
| AccessorCalls.cs:58:9:58:85 | ... = ... | AccessorCalls.cs:56:10:56:11 | M7 |
| AccessorCalls.cs:58:9:58:86 | ...; | AccessorCalls.cs:56:10:56:11 | M7 |
| AccessorCalls.cs:58:10:58:13 | this access | AccessorCalls.cs:56:10:56:11 | M7 |
| AccessorCalls.cs:58:10:58:19 | access to field Field | AccessorCalls.cs:56:10:56:11 | M7 |
| AccessorCalls.cs:58:22:58:25 | this access | AccessorCalls.cs:56:10:56:11 | M7 |
| AccessorCalls.cs:58:22:58:30 | access to property Prop | AccessorCalls.cs:56:10:56:11 | M7 |
| AccessorCalls.cs:58:33:58:44 | (..., ...) | AccessorCalls.cs:56:10:56:11 | M7 |
@@ -241,6 +246,7 @@ nodeEnclosing
| AccessorCalls.cs:63:9:63:98 | ...; | AccessorCalls.cs:61:10:61:11 | M8 |
| AccessorCalls.cs:63:10:63:13 | this access | AccessorCalls.cs:61:10:61:11 | M8 |
| AccessorCalls.cs:63:10:63:15 | access to field x | AccessorCalls.cs:61:10:61:11 | M8 |
| AccessorCalls.cs:63:10:63:21 | access to field Field | AccessorCalls.cs:61:10:61:11 | M8 |
| AccessorCalls.cs:63:24:63:27 | this access | AccessorCalls.cs:61:10:61:11 | M8 |
| AccessorCalls.cs:63:24:63:29 | access to field x | AccessorCalls.cs:61:10:61:11 | M8 |
| AccessorCalls.cs:63:24:63:34 | access to property Prop | AccessorCalls.cs:61:10:61:11 | M8 |
@@ -833,6 +839,51 @@ nodeEnclosing
| Assignments.cs:18:5:20:5 | {...} | Assignments.cs:17:40:17:40 | + |
| Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:17:40:17:40 | + |
| Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:17:40:17:40 | + |
| Assignments.cs:27:10:27:23 | enter SetParamSingle | Assignments.cs:27:10:27:23 | SetParamSingle |
| Assignments.cs:27:10:27:23 | exit SetParamSingle | Assignments.cs:27:10:27:23 | SetParamSingle |
| Assignments.cs:27:10:27:23 | exit SetParamSingle (normal) | Assignments.cs:27:10:27:23 | SetParamSingle |
| Assignments.cs:28:5:30:5 | {...} | Assignments.cs:27:10:27:23 | SetParamSingle |
| Assignments.cs:29:9:29:14 | ... = ... | Assignments.cs:27:10:27:23 | SetParamSingle |
| Assignments.cs:29:9:29:15 | ...; | Assignments.cs:27:10:27:23 | SetParamSingle |
| Assignments.cs:29:13:29:14 | 42 | Assignments.cs:27:10:27:23 | SetParamSingle |
| Assignments.cs:32:10:32:22 | enter SetParamMulti | Assignments.cs:32:10:32:22 | SetParamMulti |
| Assignments.cs:32:10:32:22 | exit SetParamMulti | Assignments.cs:32:10:32:22 | SetParamMulti |
| Assignments.cs:32:10:32:22 | exit SetParamMulti (normal) | Assignments.cs:32:10:32:22 | SetParamMulti |
| Assignments.cs:33:5:36:5 | {...} | Assignments.cs:32:10:32:22 | SetParamMulti |
| Assignments.cs:34:9:34:14 | ... = ... | Assignments.cs:32:10:32:22 | SetParamMulti |
| Assignments.cs:34:9:34:15 | ...; | Assignments.cs:32:10:32:22 | SetParamMulti |
| Assignments.cs:34:13:34:14 | 42 | Assignments.cs:32:10:32:22 | SetParamMulti |
| Assignments.cs:35:9:35:19 | ... = ... | Assignments.cs:32:10:32:22 | SetParamMulti |
| Assignments.cs:35:9:35:20 | ...; | Assignments.cs:32:10:32:22 | SetParamMulti |
| Assignments.cs:35:13:35:19 | "Hello" | Assignments.cs:32:10:32:22 | SetParamMulti |
| Assignments.cs:38:10:38:11 | enter M2 | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:38:10:38:11 | exit M2 | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:38:10:38:11 | exit M2 (normal) | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:39:5:45:5 | {...} | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:40:9:40:15 | ... ...; | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:40:13:40:14 | Int32 x1 | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:41:9:41:30 | call to method SetParamSingle | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:41:9:41:30 | this access | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:41:9:41:31 | ...; | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:42:9:42:36 | call to method SetParamSingle | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:42:9:42:36 | this access | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:42:9:42:37 | ...; | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:42:28:42:35 | access to field IntField | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:42:28:42:35 | this access | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:43:9:43:55 | call to method SetParamMulti | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:43:9:43:55 | this access | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:43:9:43:56 | ...; | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:43:34:43:37 | null | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:43:44:43:54 | access to field StringField | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:43:44:43:54 | this access | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:44:9:44:58 | call to method SetParamMulti | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:44:9:44:58 | this access | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:44:9:44:59 | ...; | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:44:27:44:34 | access to field IntField | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:44:27:44:34 | this access | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:44:37:44:40 | null | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:44:47:44:57 | access to field StringField | Assignments.cs:38:10:38:11 | M2 |
| Assignments.cs:44:47:44:57 | this access | Assignments.cs:38:10:38:11 | M2 |
| BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | BreakInTry |
| BreakInTry.cs:1:7:1:16 | call to method <object initializer> | BreakInTry.cs:1:7:1:16 | BreakInTry |
| BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | BreakInTry |
@@ -1071,14 +1122,72 @@ nodeEnclosing
| ConditionalAccess.cs:35:9:35:12 | this access | ConditionalAccess.cs:32:10:32:11 | M8 |
| ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:32:10:32:11 | M8 |
| ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:32:10:32:11 | M8 |
| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith |
| ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith |
| ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith (normal) | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith |
| ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith |
| ConditionalAccess.cs:41:70:41:78 | ... + ... | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith |
| ConditionalAccess.cs:41:70:41:83 | ... + ... | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith |
| ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith |
| ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith |
| ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:9:42:11 | get_Item |
| ConditionalAccess.cs:42:9:42:11 | exit get_Item | ConditionalAccess.cs:42:9:42:11 | get_Item |
| ConditionalAccess.cs:42:9:42:11 | exit get_Item (normal) | ConditionalAccess.cs:42:9:42:11 | get_Item |
| ConditionalAccess.cs:42:13:42:28 | {...} | ConditionalAccess.cs:42:9:42:11 | get_Item |
| ConditionalAccess.cs:42:15:42:26 | return ...; | ConditionalAccess.cs:42:9:42:11 | get_Item |
| ConditionalAccess.cs:42:22:42:25 | null | ConditionalAccess.cs:42:9:42:11 | get_Item |
| ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:9:43:11 | set_Item |
| ConditionalAccess.cs:43:9:43:11 | exit set_Item | ConditionalAccess.cs:43:9:43:11 | set_Item |
| ConditionalAccess.cs:43:9:43:11 | exit set_Item (normal) | ConditionalAccess.cs:43:9:43:11 | set_Item |
| ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:9:43:11 | set_Item |
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:46:10:46:11 | exit M9 | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:48:9:48:26 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:48:12:48:25 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:49:9:49:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:49:9:49:22 | access to property StringProp | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:49:12:49:32 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:50:9:50:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:50:9:50:14 | access to indexer | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:50:12:50:23 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:50:18:50:23 | "Set0" | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:51:9:51:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:51:9:51:26 | access to field IntField | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:51:18:51:31 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:52:9:52:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:52:9:52:28 | access to property StringProp | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith |
| ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith |
| ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith (normal) | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith |
| ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith |
| ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith |
| ConditionalAccess.cs:60:70:60:83 | ... + ... | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith |
| ConditionalAccess.cs:60:75:60:78 | ", " | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith |
| ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith |
| Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | Conditions |
| Conditions.cs:1:7:1:16 | call to method <object initializer> | Conditions.cs:1:7:1:16 | Conditions |
| Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | Conditions |
@@ -1943,10 +2052,12 @@ nodeEnclosing
| Finally.cs:209:25:209:47 | throw ...; | Finally.cs:195:10:195:12 | M10 |
| Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:195:10:195:12 | M10 |
| Finally.cs:211:13:211:16 | this access | Finally.cs:195:10:195:12 | M10 |
| Finally.cs:211:13:211:22 | access to field Field | Finally.cs:195:10:195:12 | M10 |
| Finally.cs:211:13:211:28 | ... = ... | Finally.cs:195:10:195:12 | M10 |
| Finally.cs:211:13:211:29 | ...; | Finally.cs:195:10:195:12 | M10 |
| Finally.cs:211:26:211:28 | "0" | Finally.cs:195:10:195:12 | M10 |
| Finally.cs:213:9:213:12 | this access | Finally.cs:195:10:195:12 | M10 |
| Finally.cs:213:9:213:18 | access to field Field | Finally.cs:195:10:195:12 | M10 |
| Finally.cs:213:9:213:24 | ... = ... | Finally.cs:195:10:195:12 | M10 |
| Finally.cs:213:9:213:25 | ...; | Finally.cs:195:10:195:12 | M10 |
| Finally.cs:213:22:213:24 | "1" | Finally.cs:195:10:195:12 | M10 |
@@ -2095,6 +2206,7 @@ nodeEnclosing
| Initializers.cs:3:7:3:18 | exit Initializers | Initializers.cs:3:7:3:18 | Initializers |
| Initializers.cs:3:7:3:18 | exit Initializers (normal) | Initializers.cs:3:7:3:18 | Initializers |
| Initializers.cs:3:7:3:18 | {...} | Initializers.cs:3:7:3:18 | Initializers |
| Initializers.cs:5:9:5:9 | access to field F | Initializers.cs:3:7:3:18 | <object initializer> |
| Initializers.cs:5:9:5:9 | this access | Initializers.cs:3:7:3:18 | <object initializer> |
| Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:3:7:3:18 | <object initializer> |
| Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:3:7:3:18 | <object initializer> |
@@ -2129,6 +2241,7 @@ nodeEnclosing
| Initializers.cs:14:17:14:53 | object creation of type Initializers | Initializers.cs:12:10:12:10 | M |
| Initializers.cs:14:34:14:35 | "" | Initializers.cs:12:10:12:10 | M |
| Initializers.cs:14:38:14:53 | { ..., ... } | Initializers.cs:12:10:12:10 | M |
| Initializers.cs:14:40:14:40 | access to field F | Initializers.cs:12:10:12:10 | M |
| Initializers.cs:14:40:14:44 | ... = ... | Initializers.cs:12:10:12:10 | M |
| Initializers.cs:14:44:14:44 | 0 | Initializers.cs:12:10:12:10 | M |
| Initializers.cs:14:47:14:47 | access to property G | Initializers.cs:12:10:12:10 | M |
@@ -2152,15 +2265,18 @@ nodeEnclosing
| Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | Initializers.cs:20:11:20:23 | NoConstructor |
| Initializers.cs:20:11:20:23 | this access | Initializers.cs:20:11:20:23 | NoConstructor |
| Initializers.cs:20:11:20:23 | {...} | Initializers.cs:20:11:20:23 | NoConstructor |
| Initializers.cs:22:23:22:23 | access to field F | Initializers.cs:20:11:20:23 | <object initializer> |
| Initializers.cs:22:23:22:23 | this access | Initializers.cs:20:11:20:23 | <object initializer> |
| Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:20:11:20:23 | <object initializer> |
| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:20:11:20:23 | <object initializer> |
| Initializers.cs:23:23:23:23 | access to field G | Initializers.cs:20:11:20:23 | <object initializer> |
| Initializers.cs:23:23:23:23 | this access | Initializers.cs:20:11:20:23 | <object initializer> |
| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:20:11:20:23 | <object initializer> |
| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:20:11:20:23 | <object initializer> |
| Initializers.cs:26:11:26:13 | enter <object initializer> | Initializers.cs:26:11:26:13 | <object initializer> |
| Initializers.cs:26:11:26:13 | exit <object initializer> | Initializers.cs:26:11:26:13 | <object initializer> |
| Initializers.cs:26:11:26:13 | exit <object initializer> (normal) | Initializers.cs:26:11:26:13 | <object initializer> |
| Initializers.cs:28:13:28:13 | access to field H | Initializers.cs:26:11:26:13 | <object initializer> |
| Initializers.cs:28:13:28:13 | this access | Initializers.cs:26:11:26:13 | <object initializer> |
| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:26:11:26:13 | <object initializer> |
| Initializers.cs:28:17:28:17 | 2 | Initializers.cs:26:11:26:13 | <object initializer> |
@@ -2171,6 +2287,7 @@ nodeEnclosing
| Initializers.cs:31:9:31:11 | this access | Initializers.cs:31:9:31:11 | Sub |
| Initializers.cs:31:17:31:20 | call to constructor NoConstructor | Initializers.cs:31:9:31:11 | Sub |
| Initializers.cs:31:24:31:33 | {...} | Initializers.cs:31:9:31:11 | Sub |
| Initializers.cs:31:26:31:26 | access to field I | Initializers.cs:31:9:31:11 | Sub |
| Initializers.cs:31:26:31:26 | this access | Initializers.cs:31:9:31:11 | Sub |
| Initializers.cs:31:26:31:30 | ... = ... | Initializers.cs:31:9:31:11 | Sub |
| Initializers.cs:31:26:31:31 | ...; | Initializers.cs:31:9:31:11 | Sub |
@@ -2180,6 +2297,7 @@ nodeEnclosing
| Initializers.cs:33:9:33:11 | exit Sub (normal) | Initializers.cs:33:9:33:11 | Sub |
| Initializers.cs:33:22:33:25 | call to constructor Sub | Initializers.cs:33:9:33:11 | Sub |
| Initializers.cs:33:29:33:38 | {...} | Initializers.cs:33:9:33:11 | Sub |
| Initializers.cs:33:31:33:31 | access to field I | Initializers.cs:33:9:33:11 | Sub |
| Initializers.cs:33:31:33:31 | this access | Initializers.cs:33:9:33:11 | Sub |
| Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:9:33:11 | Sub |
| Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:9:33:11 | Sub |
@@ -2191,6 +2309,7 @@ nodeEnclosing
| Initializers.cs:35:9:35:11 | exit Sub (normal) | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:35:29:35:29 | access to field I | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:35:29:35:37 | ... = ... | Initializers.cs:35:9:35:11 | Sub |
| Initializers.cs:35:29:35:38 | ...; | Initializers.cs:35:9:35:11 | Sub |
@@ -2237,6 +2356,7 @@ nodeEnclosing
| Initializers.cs:57:13:65:9 | Compound compound = ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:57:24:65:9 | object creation of type Compound | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:58:9:65:9 | { ..., ... } | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:59:13:59:27 | access to field DictionaryField | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:59:13:59:76 | ... = ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:59:31:59:76 | { ..., ... } | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:59:33:59:35 | access to indexer | Initializers.cs:51:10:51:13 | Test |
@@ -2270,22 +2390,28 @@ nodeEnclosing
| Initializers.cs:60:65:60:69 | ... + ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:60:69:60:69 | 1 | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:60:74:60:78 | "One" | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:61:13:61:22 | access to field ArrayField | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:61:13:61:58 | ... = ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:61:26:61:58 | { ..., ... } | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:61:28:61:30 | access to array element | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:61:28:61:39 | ... = ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:61:29:61:29 | 0 | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:61:34:61:39 | "Zero" | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:61:42:61:48 | access to array element | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:61:42:61:56 | ... = ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:61:43:61:43 | access to parameter i | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:61:43:61:47 | ... + ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:61:47:61:47 | 1 | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:61:52:61:56 | "One" | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:62:13:62:23 | access to field ArrayField2 | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:62:13:62:60 | ... = ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:62:27:62:60 | { ..., ... } | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:62:29:62:34 | access to array element | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:62:29:62:40 | ... = ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:62:30:62:30 | 0 | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:62:33:62:33 | 1 | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:62:38:62:40 | "i" | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:62:43:62:52 | access to array element | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:62:43:62:58 | ... = ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:62:44:62:44 | 1 | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:62:47:62:47 | access to parameter i | Initializers.cs:51:10:51:13 | Test |
@@ -2295,9 +2421,11 @@ nodeEnclosing
| Initializers.cs:63:13:63:25 | access to property ArrayProperty | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:63:13:63:60 | ... = ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:63:29:63:60 | { ..., ... } | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:63:31:63:33 | access to array element | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:63:31:63:41 | ... = ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:63:32:63:32 | 1 | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:63:37:63:41 | "One" | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:63:44:63:50 | access to array element | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:63:44:63:58 | ... = ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:63:45:63:45 | access to parameter i | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:63:45:63:49 | ... + ... | Initializers.cs:51:10:51:13 | Test |
@@ -2306,10 +2434,12 @@ nodeEnclosing
| Initializers.cs:64:13:64:26 | access to property ArrayProperty2 | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:64:13:64:63 | ... = ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:64:30:64:63 | { ..., ... } | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:64:32:64:37 | access to array element | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:64:32:64:43 | ... = ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:64:33:64:33 | 0 | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:64:36:64:36 | 1 | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:64:41:64:43 | "i" | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:64:46:64:55 | access to array element | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:64:46:64:61 | ... = ... | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:64:47:64:47 | 1 | Initializers.cs:51:10:51:13 | Test |
| Initializers.cs:64:50:64:50 | access to parameter i | Initializers.cs:51:10:51:13 | Test |
@@ -2565,6 +2695,7 @@ nodeEnclosing
| MultiImplementationA.cs:11:7:11:8 | enter <object initializer> | MultiImplementationA.cs:11:7:11:8 | <object initializer> |
| MultiImplementationA.cs:11:7:11:8 | exit <object initializer> | MultiImplementationA.cs:11:7:11:8 | <object initializer> |
| MultiImplementationA.cs:11:7:11:8 | exit <object initializer> (normal) | MultiImplementationA.cs:11:7:11:8 | <object initializer> |
| MultiImplementationA.cs:13:16:13:16 | access to field F | MultiImplementationA.cs:11:7:11:8 | <object initializer> |
| MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:11:7:11:8 | <object initializer> |
| MultiImplementationA.cs:13:16:13:20 | ... = ... | MultiImplementationA.cs:11:7:11:8 | <object initializer> |
| MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:11:7:11:8 | <object initializer> |
@@ -2601,6 +2732,7 @@ nodeEnclosing
| MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | MultiImplementationA.cs:20:12:20:13 | C2 |
| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | C2 |
| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:12:20:13 | C2 |
| MultiImplementationA.cs:20:24:20:24 | access to field F | MultiImplementationA.cs:20:12:20:13 | C2 |
| MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:12:20:13 | C2 |
| MultiImplementationA.cs:20:24:20:28 | ... = ... | MultiImplementationA.cs:20:12:20:13 | C2 |
| MultiImplementationA.cs:20:24:20:29 | ...; | MultiImplementationA.cs:20:12:20:13 | C2 |
@@ -2667,6 +2799,7 @@ nodeEnclosing
| MultiImplementationB.cs:4:34:4:34 | 1 | MultiImplementationA.cs:7:21:7:23 | get_P2 |
| MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationA.cs:7:41:7:43 | set_P2 |
| MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationA.cs:8:16:8:16 | M |
| MultiImplementationB.cs:11:16:11:16 | access to field F | MultiImplementationA.cs:11:7:11:8 | <object initializer> |
| MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationA.cs:11:7:11:8 | <object initializer> |
| MultiImplementationB.cs:11:16:11:20 | ... = ... | MultiImplementationA.cs:11:7:11:8 | <object initializer> |
| MultiImplementationB.cs:11:20:11:20 | 1 | MultiImplementationA.cs:11:7:11:8 | <object initializer> |
@@ -2794,6 +2927,7 @@ nodeEnclosing
| PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | PartialImplementationA.cs:3:12:3:18 | Partial |
| PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | Partial |
| PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:12:3:18 | Partial |
| PartialImplementationB.cs:3:16:3:16 | access to field F | PartialImplementationA.cs:1:15:1:21 | <object initializer> |
| PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationA.cs:1:15:1:21 | <object initializer> |
| PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationA.cs:1:15:1:21 | <object initializer> |
| PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationA.cs:1:15:1:21 | <object initializer> |
@@ -3824,6 +3958,7 @@ nodeEnclosing
| cflow.cs:127:62:127:64 | exit set_Prop | cflow.cs:127:62:127:64 | set_Prop |
| cflow.cs:127:62:127:64 | exit set_Prop (normal) | cflow.cs:127:62:127:64 | set_Prop |
| cflow.cs:127:66:127:83 | {...} | cflow.cs:127:62:127:64 | set_Prop |
| cflow.cs:127:68:127:72 | access to field Field | cflow.cs:127:62:127:64 | set_Prop |
| cflow.cs:127:68:127:72 | this access | cflow.cs:127:62:127:64 | set_Prop |
| cflow.cs:127:68:127:80 | ... = ... | cflow.cs:127:62:127:64 | set_Prop |
| cflow.cs:127:68:127:81 | ...; | cflow.cs:127:62:127:64 | set_Prop |
@@ -3835,6 +3970,7 @@ nodeEnclosing
| cflow.cs:129:5:129:15 | exit ControlFlow (normal) | cflow.cs:129:5:129:15 | ControlFlow |
| cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | ControlFlow |
| cflow.cs:130:5:132:5 | {...} | cflow.cs:129:5:129:15 | ControlFlow |
| cflow.cs:131:9:131:13 | access to field Field | cflow.cs:129:5:129:15 | ControlFlow |
| cflow.cs:131:9:131:13 | this access | cflow.cs:129:5:129:15 | ControlFlow |
| cflow.cs:131:9:131:17 | ... = ... | cflow.cs:129:5:129:15 | ControlFlow |
| cflow.cs:131:9:131:18 | ...; | cflow.cs:129:5:129:15 | ControlFlow |
@@ -4068,6 +4204,7 @@ nodeEnclosing
| cflow.cs:210:9:221:36 | do ... while (...); | cflow.cs:208:10:208:11 | Do |
| cflow.cs:211:9:221:9 | {...} | cflow.cs:208:10:208:11 | Do |
| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:208:10:208:11 | Do |
| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:208:10:208:11 | Do |
| cflow.cs:212:13:212:17 | this access | cflow.cs:208:10:208:11 | Do |
| cflow.cs:212:13:212:17 | this access | cflow.cs:208:10:208:11 | Do |
| cflow.cs:212:13:212:24 | ... + ... | cflow.cs:208:10:208:11 | Do |
@@ -4106,6 +4243,7 @@ nodeEnclosing
| cflow.cs:226:62:226:63 | 10 | cflow.cs:224:10:224:16 | Foreach |
| cflow.cs:227:9:237:9 | {...} | cflow.cs:224:10:224:16 | Foreach |
| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:224:10:224:16 | Foreach |
| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:224:10:224:16 | Foreach |
| cflow.cs:228:13:228:17 | this access | cflow.cs:224:10:224:16 | Foreach |
| cflow.cs:228:13:228:17 | this access | cflow.cs:224:10:224:16 | Foreach |
| cflow.cs:228:13:228:22 | ... + ... | cflow.cs:224:10:224:16 | Foreach |
@@ -4445,6 +4583,9 @@ blockEnclosing
| Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | M |
| Assignments.cs:14:18:14:35 | enter (...) => ... | Assignments.cs:14:18:14:35 | (...) => ... |
| Assignments.cs:17:40:17:40 | enter + | Assignments.cs:17:40:17:40 | + |
| Assignments.cs:27:10:27:23 | enter SetParamSingle | Assignments.cs:27:10:27:23 | SetParamSingle |
| Assignments.cs:32:10:32:22 | enter SetParamMulti | Assignments.cs:32:10:32:22 | SetParamMulti |
| Assignments.cs:38:10:38:11 | enter M2 | Assignments.cs:38:10:38:11 | M2 |
| BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | BreakInTry |
| BreakInTry.cs:3:10:3:11 | enter M1 | BreakInTry.cs:3:10:3:11 | M1 |
| BreakInTry.cs:3:10:3:11 | exit M1 (normal) | BreakInTry.cs:3:10:3:11 | M1 |
@@ -4522,7 +4663,30 @@ blockEnclosing
| ConditionalAccess.cs:32:10:32:11 | enter M8 | ConditionalAccess.cs:32:10:32:11 | M8 |
| ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | ConditionalAccess.cs:32:10:32:11 | M8 |
| ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:32:10:32:11 | M8 |
| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:26:41:38 | CommaJoinWith |
| ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:9:42:11 | get_Item |
| ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:9:43:11 | set_Item |
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:46:10:46:11 | M9 |
| ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | CommaJoinWith |
| Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | Conditions |
| Conditions.cs:3:10:3:19 | enter IncrOrDecr | Conditions.cs:3:10:3:19 | IncrOrDecr |
| Conditions.cs:3:10:3:19 | exit IncrOrDecr (normal) | Conditions.cs:3:10:3:19 | IncrOrDecr |

View File

@@ -722,6 +722,42 @@
| Assignments.cs:18:5:20:5 | {...} | Assignments.cs:18:5:20:5 | {...} |
| Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:19:16:19:16 | access to parameter x |
| Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:19:16:19:16 | access to parameter x |
| Assignments.cs:28:5:30:5 | {...} | Assignments.cs:28:5:30:5 | {...} |
| Assignments.cs:29:9:29:14 | ... = ... | Assignments.cs:29:13:29:14 | 42 |
| Assignments.cs:29:9:29:15 | ...; | Assignments.cs:29:9:29:15 | ...; |
| Assignments.cs:29:13:29:14 | 42 | Assignments.cs:29:13:29:14 | 42 |
| Assignments.cs:33:5:36:5 | {...} | Assignments.cs:33:5:36:5 | {...} |
| Assignments.cs:34:9:34:14 | ... = ... | Assignments.cs:34:13:34:14 | 42 |
| Assignments.cs:34:9:34:15 | ...; | Assignments.cs:34:9:34:15 | ...; |
| Assignments.cs:34:13:34:14 | 42 | Assignments.cs:34:13:34:14 | 42 |
| Assignments.cs:35:9:35:19 | ... = ... | Assignments.cs:35:13:35:19 | "Hello" |
| Assignments.cs:35:9:35:20 | ...; | Assignments.cs:35:9:35:20 | ...; |
| Assignments.cs:35:13:35:19 | "Hello" | Assignments.cs:35:13:35:19 | "Hello" |
| Assignments.cs:39:5:45:5 | {...} | Assignments.cs:39:5:45:5 | {...} |
| Assignments.cs:40:9:40:15 | ... ...; | Assignments.cs:40:9:40:15 | ... ...; |
| Assignments.cs:40:13:40:14 | Int32 x1 | Assignments.cs:40:13:40:14 | Int32 x1 |
| Assignments.cs:41:9:41:30 | call to method SetParamSingle | Assignments.cs:41:9:41:30 | this access |
| Assignments.cs:41:9:41:30 | this access | Assignments.cs:41:9:41:30 | this access |
| Assignments.cs:41:9:41:31 | ...; | Assignments.cs:41:9:41:31 | ...; |
| Assignments.cs:42:9:42:36 | call to method SetParamSingle | Assignments.cs:42:9:42:36 | this access |
| Assignments.cs:42:9:42:36 | this access | Assignments.cs:42:9:42:36 | this access |
| Assignments.cs:42:9:42:37 | ...; | Assignments.cs:42:9:42:37 | ...; |
| Assignments.cs:42:28:42:35 | access to field IntField | Assignments.cs:42:28:42:35 | this access |
| Assignments.cs:42:28:42:35 | this access | Assignments.cs:42:28:42:35 | this access |
| Assignments.cs:43:9:43:55 | call to method SetParamMulti | Assignments.cs:43:9:43:55 | this access |
| Assignments.cs:43:9:43:55 | this access | Assignments.cs:43:9:43:55 | this access |
| Assignments.cs:43:9:43:56 | ...; | Assignments.cs:43:9:43:56 | ...; |
| Assignments.cs:43:34:43:37 | null | Assignments.cs:43:34:43:37 | null |
| Assignments.cs:43:44:43:54 | access to field StringField | Assignments.cs:43:44:43:54 | this access |
| Assignments.cs:43:44:43:54 | this access | Assignments.cs:43:44:43:54 | this access |
| Assignments.cs:44:9:44:58 | call to method SetParamMulti | Assignments.cs:44:9:44:58 | this access |
| Assignments.cs:44:9:44:58 | this access | Assignments.cs:44:9:44:58 | this access |
| Assignments.cs:44:9:44:59 | ...; | Assignments.cs:44:9:44:59 | ...; |
| Assignments.cs:44:27:44:34 | access to field IntField | Assignments.cs:44:27:44:34 | this access |
| Assignments.cs:44:27:44:34 | this access | Assignments.cs:44:27:44:34 | this access |
| Assignments.cs:44:37:44:40 | null | Assignments.cs:44:37:44:40 | null |
| Assignments.cs:44:47:44:57 | access to field StringField | Assignments.cs:44:47:44:57 | this access |
| Assignments.cs:44:47:44:57 | this access | Assignments.cs:44:47:44:57 | this access |
| BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | call to constructor Object |
| BreakInTry.cs:1:7:1:16 | call to method <object initializer> | BreakInTry.cs:1:7:1:16 | this access |
| BreakInTry.cs:1:7:1:16 | this access | BreakInTry.cs:1:7:1:16 | this access |
@@ -896,11 +932,62 @@
| ConditionalAccess.cs:35:9:35:12 | this access | ConditionalAccess.cs:35:9:35:12 | this access |
| ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:12 | this access |
| ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:25 | ...; |
| ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 |
| ConditionalAccess.cs:41:70:41:78 | ... + ... | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 |
| ConditionalAccess.cs:41:70:41:83 | ... + ... | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 |
| ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:75:41:78 | ", " |
| ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 |
| ConditionalAccess.cs:42:13:42:28 | {...} | ConditionalAccess.cs:42:13:42:28 | {...} |
| ConditionalAccess.cs:42:15:42:26 | return ...; | ConditionalAccess.cs:42:22:42:25 | null |
| ConditionalAccess.cs:42:22:42:25 | null | ConditionalAccess.cs:42:22:42:25 | null |
| ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:13:43:15 | {...} |
| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:47:5:55:5 | {...} |
| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:9:48:10 | access to parameter ca |
| ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:48:9:48:10 | access to parameter ca |
| ConditionalAccess.cs:48:9:48:26 | ...; | ConditionalAccess.cs:48:9:48:26 | ...; |
| ConditionalAccess.cs:48:12:48:25 | ... = ... | ConditionalAccess.cs:48:9:48:10 | access to parameter ca |
| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:24:48:25 | 42 |
| ConditionalAccess.cs:49:9:49:10 | access to parameter ca | ConditionalAccess.cs:49:9:49:10 | access to parameter ca |
| ConditionalAccess.cs:49:9:49:22 | access to property StringProp | ConditionalAccess.cs:49:9:49:10 | access to parameter ca |
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:9:49:33 | ...; |
| ConditionalAccess.cs:49:12:49:32 | ... = ... | ConditionalAccess.cs:49:9:49:10 | access to parameter ca |
| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:49:26:49:32 | "Hello" |
| ConditionalAccess.cs:50:9:50:10 | access to parameter ca | ConditionalAccess.cs:50:9:50:10 | access to parameter ca |
| ConditionalAccess.cs:50:9:50:14 | access to indexer | ConditionalAccess.cs:50:9:50:10 | access to parameter ca |
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:9:50:24 | ...; |
| ConditionalAccess.cs:50:12:50:23 | ... = ... | ConditionalAccess.cs:50:9:50:10 | access to parameter ca |
| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:50:13:50:13 | 0 |
| ConditionalAccess.cs:50:18:50:23 | "Set0" | ConditionalAccess.cs:50:18:50:23 | "Set0" |
| ConditionalAccess.cs:51:9:51:10 | access to parameter ca | ConditionalAccess.cs:51:9:51:10 | access to parameter ca |
| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:9:51:10 | access to parameter ca |
| ConditionalAccess.cs:51:9:51:26 | access to field IntField | ConditionalAccess.cs:51:9:51:10 | access to parameter ca |
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:32 | ...; |
| ConditionalAccess.cs:51:18:51:31 | ... = ... | ConditionalAccess.cs:51:9:51:10 | access to parameter ca |
| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:51:30:51:31 | 84 |
| ConditionalAccess.cs:52:9:52:10 | access to parameter ca | ConditionalAccess.cs:52:9:52:10 | access to parameter ca |
| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:9:52:10 | access to parameter ca |
| ConditionalAccess.cs:52:9:52:28 | access to property StringProp | ConditionalAccess.cs:52:9:52:10 | access to parameter ca |
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; |
| ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:52:9:52:10 | access to parameter ca |
| ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:32:52:38 | "World" |
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; |
| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
| ConditionalAccess.cs:53:12:53:25 | ... -= ... | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:25:53:25 | 1 |
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; |
| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
| ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:27:54:29 | "!" |
| ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 |
| ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 |
| ConditionalAccess.cs:60:70:60:83 | ... + ... | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 |
| ConditionalAccess.cs:60:75:60:78 | ", " | ConditionalAccess.cs:60:75:60:78 | ", " |
| ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | ConditionalAccess.cs:60:82:60:83 | access to parameter s2 |
| Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | call to constructor Object |
| Conditions.cs:1:7:1:16 | call to method <object initializer> | Conditions.cs:1:7:1:16 | this access |
| Conditions.cs:1:7:1:16 | this access | Conditions.cs:1:7:1:16 | this access |

View File

@@ -821,6 +821,42 @@
| Assignments.cs:18:5:20:5 | {...} | Assignments.cs:19:9:19:17 | return ...; | return |
| Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:19:9:19:17 | return ...; | return |
| Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:19:16:19:16 | access to parameter x | normal |
| Assignments.cs:28:5:30:5 | {...} | Assignments.cs:29:9:29:14 | ... = ... | normal |
| Assignments.cs:29:9:29:14 | ... = ... | Assignments.cs:29:9:29:14 | ... = ... | normal |
| Assignments.cs:29:9:29:15 | ...; | Assignments.cs:29:9:29:14 | ... = ... | normal |
| Assignments.cs:29:13:29:14 | 42 | Assignments.cs:29:13:29:14 | 42 | normal |
| Assignments.cs:33:5:36:5 | {...} | Assignments.cs:35:9:35:19 | ... = ... | normal |
| Assignments.cs:34:9:34:14 | ... = ... | Assignments.cs:34:9:34:14 | ... = ... | normal |
| Assignments.cs:34:9:34:15 | ...; | Assignments.cs:34:9:34:14 | ... = ... | normal |
| Assignments.cs:34:13:34:14 | 42 | Assignments.cs:34:13:34:14 | 42 | normal |
| Assignments.cs:35:9:35:19 | ... = ... | Assignments.cs:35:9:35:19 | ... = ... | normal |
| Assignments.cs:35:9:35:20 | ...; | Assignments.cs:35:9:35:19 | ... = ... | normal |
| Assignments.cs:35:13:35:19 | "Hello" | Assignments.cs:35:13:35:19 | "Hello" | normal |
| Assignments.cs:39:5:45:5 | {...} | Assignments.cs:44:9:44:58 | call to method SetParamMulti | normal |
| Assignments.cs:40:9:40:15 | ... ...; | Assignments.cs:40:13:40:14 | Int32 x1 | normal |
| Assignments.cs:40:13:40:14 | Int32 x1 | Assignments.cs:40:13:40:14 | Int32 x1 | normal |
| Assignments.cs:41:9:41:30 | call to method SetParamSingle | Assignments.cs:41:9:41:30 | call to method SetParamSingle | normal |
| Assignments.cs:41:9:41:30 | this access | Assignments.cs:41:9:41:30 | this access | normal |
| Assignments.cs:41:9:41:31 | ...; | Assignments.cs:41:9:41:30 | call to method SetParamSingle | normal |
| Assignments.cs:42:9:42:36 | call to method SetParamSingle | Assignments.cs:42:9:42:36 | call to method SetParamSingle | normal |
| Assignments.cs:42:9:42:36 | this access | Assignments.cs:42:9:42:36 | this access | normal |
| Assignments.cs:42:9:42:37 | ...; | Assignments.cs:42:9:42:36 | call to method SetParamSingle | normal |
| Assignments.cs:42:28:42:35 | access to field IntField | Assignments.cs:42:28:42:35 | access to field IntField | normal |
| Assignments.cs:42:28:42:35 | this access | Assignments.cs:42:28:42:35 | this access | normal |
| Assignments.cs:43:9:43:55 | call to method SetParamMulti | Assignments.cs:43:9:43:55 | call to method SetParamMulti | normal |
| Assignments.cs:43:9:43:55 | this access | Assignments.cs:43:9:43:55 | this access | normal |
| Assignments.cs:43:9:43:56 | ...; | Assignments.cs:43:9:43:55 | call to method SetParamMulti | normal |
| Assignments.cs:43:34:43:37 | null | Assignments.cs:43:34:43:37 | null | normal |
| Assignments.cs:43:44:43:54 | access to field StringField | Assignments.cs:43:44:43:54 | access to field StringField | normal |
| Assignments.cs:43:44:43:54 | this access | Assignments.cs:43:44:43:54 | this access | normal |
| Assignments.cs:44:9:44:58 | call to method SetParamMulti | Assignments.cs:44:9:44:58 | call to method SetParamMulti | normal |
| Assignments.cs:44:9:44:58 | this access | Assignments.cs:44:9:44:58 | this access | normal |
| Assignments.cs:44:9:44:59 | ...; | Assignments.cs:44:9:44:58 | call to method SetParamMulti | normal |
| Assignments.cs:44:27:44:34 | access to field IntField | Assignments.cs:44:27:44:34 | access to field IntField | normal |
| Assignments.cs:44:27:44:34 | this access | Assignments.cs:44:27:44:34 | this access | normal |
| Assignments.cs:44:37:44:40 | null | Assignments.cs:44:37:44:40 | null | normal |
| Assignments.cs:44:47:44:57 | access to field StringField | Assignments.cs:44:47:44:57 | access to field StringField | normal |
| Assignments.cs:44:47:44:57 | this access | Assignments.cs:44:47:44:57 | this access | normal |
| BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | call to constructor Object | normal |
| BreakInTry.cs:1:7:1:16 | call to method <object initializer> | BreakInTry.cs:1:7:1:16 | call to method <object initializer> | normal |
| BreakInTry.cs:1:7:1:16 | this access | BreakInTry.cs:1:7:1:16 | this access | normal |
@@ -1080,11 +1116,107 @@
| ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:35:9:35:24 | call to method Out | normal |
| ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:12 | access to property Prop | null |
| ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:24 | call to method Out | normal |
| ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | normal |
| ConditionalAccess.cs:41:70:41:78 | ... + ... | ConditionalAccess.cs:41:70:41:78 | ... + ... | normal |
| ConditionalAccess.cs:41:70:41:83 | ... + ... | ConditionalAccess.cs:41:70:41:83 | ... + ... | normal |
| ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:75:41:78 | ", " | normal |
| ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | normal |
| ConditionalAccess.cs:42:13:42:28 | {...} | ConditionalAccess.cs:42:15:42:26 | return ...; | return |
| ConditionalAccess.cs:42:15:42:26 | return ...; | ConditionalAccess.cs:42:15:42:26 | return ...; | return |
| ConditionalAccess.cs:42:22:42:25 | null | ConditionalAccess.cs:42:22:42:25 | null | normal |
| ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:13:43:15 | {...} | normal |
| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null |
| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:54:12:54:29 | ... = ... | normal |
| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | non-null |
| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | null |
| ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | non-null |
| ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | null |
| ConditionalAccess.cs:48:9:48:26 | ...; | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | null |
| ConditionalAccess.cs:48:9:48:26 | ...; | ConditionalAccess.cs:48:12:48:25 | ... = ... | normal |
| ConditionalAccess.cs:48:12:48:25 | ... = ... | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | null |
| ConditionalAccess.cs:48:12:48:25 | ... = ... | ConditionalAccess.cs:48:12:48:25 | ... = ... | normal |
| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:24:48:25 | 42 | normal |
| ConditionalAccess.cs:49:9:49:10 | access to parameter ca | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | non-null |
| ConditionalAccess.cs:49:9:49:10 | access to parameter ca | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | null |
| ConditionalAccess.cs:49:9:49:22 | access to property StringProp | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | non-null |
| ConditionalAccess.cs:49:9:49:22 | access to property StringProp | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | null |
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | null |
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:12:49:32 | ... = ... | normal |
| ConditionalAccess.cs:49:12:49:32 | ... = ... | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | null |
| ConditionalAccess.cs:49:12:49:32 | ... = ... | ConditionalAccess.cs:49:12:49:32 | ... = ... | normal |
| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:49:26:49:32 | "Hello" | normal |
| ConditionalAccess.cs:50:9:50:10 | access to parameter ca | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | non-null |
| ConditionalAccess.cs:50:9:50:10 | access to parameter ca | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | null |
| ConditionalAccess.cs:50:9:50:14 | access to indexer | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | null |
| ConditionalAccess.cs:50:9:50:14 | access to indexer | ConditionalAccess.cs:50:13:50:13 | 0 | normal |
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | null |
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:12:50:23 | ... = ... | normal |
| ConditionalAccess.cs:50:12:50:23 | ... = ... | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | null |
| ConditionalAccess.cs:50:12:50:23 | ... = ... | ConditionalAccess.cs:50:12:50:23 | ... = ... | normal |
| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:50:13:50:13 | 0 | normal |
| ConditionalAccess.cs:50:18:50:23 | "Set0" | ConditionalAccess.cs:50:18:50:23 | "Set0" | normal |
| ConditionalAccess.cs:51:9:51:10 | access to parameter ca | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | non-null |
| ConditionalAccess.cs:51:9:51:10 | access to parameter ca | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | null |
| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | null |
| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:9:51:16 | access to property Prop | non-null |
| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:9:51:16 | access to property Prop | null |
| ConditionalAccess.cs:51:9:51:26 | access to field IntField | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | null |
| ConditionalAccess.cs:51:9:51:26 | access to field IntField | ConditionalAccess.cs:51:9:51:16 | access to property Prop | non-null |
| ConditionalAccess.cs:51:9:51:26 | access to field IntField | ConditionalAccess.cs:51:9:51:16 | access to property Prop | null |
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | null |
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop | null |
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:18:51:31 | ... = ... | normal |
| ConditionalAccess.cs:51:18:51:31 | ... = ... | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | null |
| ConditionalAccess.cs:51:18:51:31 | ... = ... | ConditionalAccess.cs:51:9:51:16 | access to property Prop | null |
| ConditionalAccess.cs:51:18:51:31 | ... = ... | ConditionalAccess.cs:51:18:51:31 | ... = ... | normal |
| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:51:30:51:31 | 84 | normal |
| ConditionalAccess.cs:52:9:52:10 | access to parameter ca | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | non-null |
| ConditionalAccess.cs:52:9:52:10 | access to parameter ca | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | null |
| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | null |
| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:9:52:16 | access to property Prop | non-null |
| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:9:52:16 | access to property Prop | null |
| ConditionalAccess.cs:52:9:52:28 | access to property StringProp | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | null |
| ConditionalAccess.cs:52:9:52:28 | access to property StringProp | ConditionalAccess.cs:52:9:52:16 | access to property Prop | non-null |
| ConditionalAccess.cs:52:9:52:28 | access to property StringProp | ConditionalAccess.cs:52:9:52:16 | access to property Prop | null |
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | null |
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop | null |
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:18:52:38 | ... = ... | normal |
| ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | null |
| ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:52:9:52:16 | access to property Prop | null |
| ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:52:18:52:38 | ... = ... | normal |
| ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:32:52:38 | "World" | normal |
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | non-null |
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | non-null |
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null |
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null |
| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | non-null |
| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null |
| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null |
| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:20 | access to field IntField | normal |
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null |
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:12:53:25 | ... = ... | normal |
| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:53:12:53:25 | ... - ... | normal |
| ConditionalAccess.cs:53:12:53:25 | ... -= ... | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null |
| ConditionalAccess.cs:53:12:53:25 | ... -= ... | ConditionalAccess.cs:53:12:53:25 | ... = ... | normal |
| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | null |
| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:53:12:53:25 | ... = ... | normal |
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:25:53:25 | 1 | normal |
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | non-null |
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | non-null |
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null |
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null |
| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | non-null |
| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null |
| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null |
| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | normal |
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null |
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:12:54:29 | ... = ... | normal |
| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:54:12:54:29 | ... + ... | normal |
| ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null |
| ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:54:12:54:29 | ... = ... | normal |
| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | null |
| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:54:12:54:29 | ... = ... | normal |
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:27:54:29 | "!" | normal |
| ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | normal |
| ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:70:60:78 | ... + ... | normal |
| ConditionalAccess.cs:60:70:60:83 | ... + ... | ConditionalAccess.cs:60:70:60:83 | ... + ... | normal |
| ConditionalAccess.cs:60:75:60:78 | ", " | ConditionalAccess.cs:60:75:60:78 | ", " | normal |
| ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | normal |
| Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | call to constructor Object | normal |
| Conditions.cs:1:7:1:16 | call to method <object initializer> | Conditions.cs:1:7:1:16 | call to method <object initializer> | normal |
| Conditions.cs:1:7:1:16 | this access | Conditions.cs:1:7:1:16 | this access | normal |

View File

@@ -20,10 +20,11 @@
| AccessorCalls.cs:10:10:10:11 | exit M1 (normal) | AccessorCalls.cs:10:10:10:11 | exit M1 | |
| AccessorCalls.cs:11:5:17:5 | {...} | AccessorCalls.cs:12:9:12:32 | ...; | |
| AccessorCalls.cs:12:9:12:12 | this access | AccessorCalls.cs:12:22:12:25 | this access | |
| AccessorCalls.cs:12:9:12:18 | access to field Field | AccessorCalls.cs:12:9:12:31 | ... = ... | |
| AccessorCalls.cs:12:9:12:31 | ... = ... | AccessorCalls.cs:13:9:13:30 | ...; | |
| AccessorCalls.cs:12:9:12:32 | ...; | AccessorCalls.cs:12:9:12:12 | this access | |
| AccessorCalls.cs:12:22:12:25 | this access | AccessorCalls.cs:12:22:12:31 | access to field Field | |
| AccessorCalls.cs:12:22:12:31 | access to field Field | AccessorCalls.cs:12:9:12:31 | ... = ... | |
| AccessorCalls.cs:12:22:12:31 | access to field Field | AccessorCalls.cs:12:9:12:18 | access to field Field | |
| AccessorCalls.cs:13:9:13:12 | this access | AccessorCalls.cs:13:21:13:24 | this access | |
| AccessorCalls.cs:13:9:13:17 | access to property Prop | AccessorCalls.cs:13:9:13:29 | ... = ... | |
| AccessorCalls.cs:13:9:13:29 | ... = ... | AccessorCalls.cs:14:9:14:26 | ...; | |
@@ -53,11 +54,12 @@
| AccessorCalls.cs:20:5:26:5 | {...} | AccessorCalls.cs:21:9:21:36 | ...; | |
| AccessorCalls.cs:21:9:21:12 | this access | AccessorCalls.cs:21:9:21:14 | access to field x | |
| AccessorCalls.cs:21:9:21:14 | access to field x | AccessorCalls.cs:21:24:21:27 | this access | |
| AccessorCalls.cs:21:9:21:20 | access to field Field | AccessorCalls.cs:21:9:21:35 | ... = ... | |
| AccessorCalls.cs:21:9:21:35 | ... = ... | AccessorCalls.cs:22:9:22:34 | ...; | |
| AccessorCalls.cs:21:9:21:36 | ...; | AccessorCalls.cs:21:9:21:12 | this access | |
| AccessorCalls.cs:21:24:21:27 | this access | AccessorCalls.cs:21:24:21:29 | access to field x | |
| AccessorCalls.cs:21:24:21:29 | access to field x | AccessorCalls.cs:21:24:21:35 | access to field Field | |
| AccessorCalls.cs:21:24:21:35 | access to field Field | AccessorCalls.cs:21:9:21:35 | ... = ... | |
| AccessorCalls.cs:21:24:21:35 | access to field Field | AccessorCalls.cs:21:9:21:20 | access to field Field | |
| AccessorCalls.cs:22:9:22:12 | this access | AccessorCalls.cs:22:9:22:14 | access to field x | |
| AccessorCalls.cs:22:9:22:14 | access to field x | AccessorCalls.cs:22:23:22:26 | this access | |
| AccessorCalls.cs:22:9:22:19 | access to property Prop | AccessorCalls.cs:22:9:22:33 | ... = ... | |
@@ -128,8 +130,9 @@
| AccessorCalls.cs:43:5:47:5 | {...} | AccessorCalls.cs:44:9:44:33 | ...; | |
| AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:12 | this access | |
| AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:18 | access to field Field | |
| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... = ... | |
| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:23:44:26 | this access | |
| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:44:9:44:32 | ... = ... | |
| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:44:9:44:18 | access to field Field | |
| AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:45:9:45:31 | ...; | |
| AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:44:9:44:12 | this access | |
| AccessorCalls.cs:44:23:44:26 | this access | AccessorCalls.cs:44:23:44:32 | access to field Field | |
@@ -162,8 +165,9 @@
| AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:14 | access to field x | |
| AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:12 | this access | |
| AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:20 | access to field Field | |
| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:36 | ... = ... | |
| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:25:51:28 | this access | |
| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:51:9:51:36 | ... = ... | |
| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:51:9:51:20 | access to field Field | |
| AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:52:9:52:35 | ...; | |
| AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:51:9:51:12 | this access | |
| AccessorCalls.cs:51:25:51:28 | this access | AccessorCalls.cs:51:25:51:30 | access to field x | |
@@ -203,13 +207,14 @@
| AccessorCalls.cs:58:9:58:85 | ... = ... | AccessorCalls.cs:56:10:56:11 | exit M7 (normal) | |
| AccessorCalls.cs:58:9:58:86 | ...; | AccessorCalls.cs:58:10:58:13 | this access | |
| AccessorCalls.cs:58:10:58:13 | this access | AccessorCalls.cs:58:22:58:25 | this access | |
| AccessorCalls.cs:58:10:58:19 | access to field Field | AccessorCalls.cs:58:22:58:30 | access to property Prop | |
| AccessorCalls.cs:58:22:58:25 | this access | AccessorCalls.cs:58:37:58:40 | this access | |
| AccessorCalls.cs:58:22:58:30 | access to property Prop | AccessorCalls.cs:58:37:58:43 | access to indexer | |
| AccessorCalls.cs:58:33:58:44 | (..., ...) | AccessorCalls.cs:58:9:58:45 | (..., ...) | |
| AccessorCalls.cs:58:37:58:40 | this access | AccessorCalls.cs:58:42:58:42 | 0 | |
| AccessorCalls.cs:58:37:58:43 | access to indexer | AccessorCalls.cs:58:9:58:85 | ... = ... | |
| AccessorCalls.cs:58:42:58:42 | 0 | AccessorCalls.cs:58:33:58:44 | (..., ...) | |
| AccessorCalls.cs:58:49:58:85 | (..., ...) | AccessorCalls.cs:58:22:58:30 | access to property Prop | |
| AccessorCalls.cs:58:49:58:85 | (..., ...) | AccessorCalls.cs:58:10:58:19 | access to field Field | |
| AccessorCalls.cs:58:50:58:53 | this access | AccessorCalls.cs:58:50:58:59 | access to field Field | |
| AccessorCalls.cs:58:50:58:59 | access to field Field | AccessorCalls.cs:58:62:58:65 | this access | |
| AccessorCalls.cs:58:62:58:65 | this access | AccessorCalls.cs:58:62:58:70 | access to property Prop | |
@@ -227,6 +232,7 @@
| AccessorCalls.cs:63:9:63:98 | ...; | AccessorCalls.cs:63:10:63:13 | this access | |
| AccessorCalls.cs:63:10:63:13 | this access | AccessorCalls.cs:63:10:63:15 | access to field x | |
| AccessorCalls.cs:63:10:63:15 | access to field x | AccessorCalls.cs:63:24:63:27 | this access | |
| AccessorCalls.cs:63:10:63:21 | access to field Field | AccessorCalls.cs:63:24:63:34 | access to property Prop | |
| AccessorCalls.cs:63:24:63:27 | this access | AccessorCalls.cs:63:24:63:29 | access to field x | |
| AccessorCalls.cs:63:24:63:29 | access to field x | AccessorCalls.cs:63:41:63:44 | this access | |
| AccessorCalls.cs:63:24:63:34 | access to property Prop | AccessorCalls.cs:63:41:63:49 | access to indexer | |
@@ -235,7 +241,7 @@
| AccessorCalls.cs:63:41:63:46 | access to field x | AccessorCalls.cs:63:48:63:48 | 0 | |
| AccessorCalls.cs:63:41:63:49 | access to indexer | AccessorCalls.cs:63:9:63:97 | ... = ... | |
| AccessorCalls.cs:63:48:63:48 | 0 | AccessorCalls.cs:63:37:63:50 | (..., ...) | |
| AccessorCalls.cs:63:55:63:97 | (..., ...) | AccessorCalls.cs:63:24:63:34 | access to property Prop | |
| AccessorCalls.cs:63:55:63:97 | (..., ...) | AccessorCalls.cs:63:10:63:21 | access to field Field | |
| AccessorCalls.cs:63:56:63:59 | this access | AccessorCalls.cs:63:56:63:61 | access to field x | |
| AccessorCalls.cs:63:56:63:61 | access to field x | AccessorCalls.cs:63:56:63:67 | access to field Field | |
| AccessorCalls.cs:63:56:63:67 | access to field Field | AccessorCalls.cs:63:70:63:73 | this access | |
@@ -847,6 +853,48 @@
| Assignments.cs:18:5:20:5 | {...} | Assignments.cs:19:16:19:16 | access to parameter x | |
| Assignments.cs:19:9:19:17 | return ...; | Assignments.cs:17:40:17:40 | exit + (normal) | return |
| Assignments.cs:19:16:19:16 | access to parameter x | Assignments.cs:19:9:19:17 | return ...; | |
| Assignments.cs:27:10:27:23 | enter SetParamSingle | Assignments.cs:28:5:30:5 | {...} | |
| Assignments.cs:27:10:27:23 | exit SetParamSingle (normal) | Assignments.cs:27:10:27:23 | exit SetParamSingle | |
| Assignments.cs:28:5:30:5 | {...} | Assignments.cs:29:9:29:15 | ...; | |
| Assignments.cs:29:9:29:14 | ... = ... | Assignments.cs:27:10:27:23 | exit SetParamSingle (normal) | |
| Assignments.cs:29:9:29:15 | ...; | Assignments.cs:29:13:29:14 | 42 | |
| Assignments.cs:29:13:29:14 | 42 | Assignments.cs:29:9:29:14 | ... = ... | |
| Assignments.cs:32:10:32:22 | enter SetParamMulti | Assignments.cs:33:5:36:5 | {...} | |
| Assignments.cs:32:10:32:22 | exit SetParamMulti (normal) | Assignments.cs:32:10:32:22 | exit SetParamMulti | |
| Assignments.cs:33:5:36:5 | {...} | Assignments.cs:34:9:34:15 | ...; | |
| Assignments.cs:34:9:34:14 | ... = ... | Assignments.cs:35:9:35:20 | ...; | |
| Assignments.cs:34:9:34:15 | ...; | Assignments.cs:34:13:34:14 | 42 | |
| Assignments.cs:34:13:34:14 | 42 | Assignments.cs:34:9:34:14 | ... = ... | |
| Assignments.cs:35:9:35:19 | ... = ... | Assignments.cs:32:10:32:22 | exit SetParamMulti (normal) | |
| Assignments.cs:35:9:35:20 | ...; | Assignments.cs:35:13:35:19 | "Hello" | |
| Assignments.cs:35:13:35:19 | "Hello" | Assignments.cs:35:9:35:19 | ... = ... | |
| Assignments.cs:38:10:38:11 | enter M2 | Assignments.cs:39:5:45:5 | {...} | |
| Assignments.cs:38:10:38:11 | exit M2 (normal) | Assignments.cs:38:10:38:11 | exit M2 | |
| Assignments.cs:39:5:45:5 | {...} | Assignments.cs:40:9:40:15 | ... ...; | |
| Assignments.cs:40:9:40:15 | ... ...; | Assignments.cs:40:13:40:14 | Int32 x1 | |
| Assignments.cs:40:13:40:14 | Int32 x1 | Assignments.cs:41:9:41:31 | ...; | |
| Assignments.cs:41:9:41:30 | call to method SetParamSingle | Assignments.cs:42:9:42:37 | ...; | |
| Assignments.cs:41:9:41:30 | this access | Assignments.cs:41:9:41:30 | call to method SetParamSingle | |
| Assignments.cs:41:9:41:31 | ...; | Assignments.cs:41:9:41:30 | this access | |
| Assignments.cs:42:9:42:36 | call to method SetParamSingle | Assignments.cs:43:9:43:56 | ...; | |
| Assignments.cs:42:9:42:36 | this access | Assignments.cs:42:28:42:35 | this access | |
| Assignments.cs:42:9:42:37 | ...; | Assignments.cs:42:9:42:36 | this access | |
| Assignments.cs:42:28:42:35 | access to field IntField | Assignments.cs:42:9:42:36 | call to method SetParamSingle | |
| Assignments.cs:42:28:42:35 | this access | Assignments.cs:42:28:42:35 | access to field IntField | |
| Assignments.cs:43:9:43:55 | call to method SetParamMulti | Assignments.cs:44:9:44:59 | ...; | |
| Assignments.cs:43:9:43:55 | this access | Assignments.cs:43:34:43:37 | null | |
| Assignments.cs:43:9:43:56 | ...; | Assignments.cs:43:9:43:55 | this access | |
| Assignments.cs:43:34:43:37 | null | Assignments.cs:43:44:43:54 | this access | |
| Assignments.cs:43:44:43:54 | access to field StringField | Assignments.cs:43:9:43:55 | call to method SetParamMulti | |
| Assignments.cs:43:44:43:54 | this access | Assignments.cs:43:44:43:54 | access to field StringField | |
| Assignments.cs:44:9:44:58 | call to method SetParamMulti | Assignments.cs:38:10:38:11 | exit M2 (normal) | |
| Assignments.cs:44:9:44:58 | this access | Assignments.cs:44:27:44:34 | this access | |
| Assignments.cs:44:9:44:59 | ...; | Assignments.cs:44:9:44:58 | this access | |
| Assignments.cs:44:27:44:34 | access to field IntField | Assignments.cs:44:37:44:40 | null | |
| Assignments.cs:44:27:44:34 | this access | Assignments.cs:44:27:44:34 | access to field IntField | |
| Assignments.cs:44:37:44:40 | null | Assignments.cs:44:47:44:57 | this access | |
| Assignments.cs:44:47:44:57 | access to field StringField | Assignments.cs:44:9:44:58 | call to method SetParamMulti | |
| Assignments.cs:44:47:44:57 | this access | Assignments.cs:44:47:44:57 | access to field StringField | |
| BreakInTry.cs:1:7:1:16 | call to constructor Object | BreakInTry.cs:1:7:1:16 | {...} | |
| BreakInTry.cs:1:7:1:16 | call to method <object initializer> | BreakInTry.cs:1:7:1:16 | call to constructor Object | |
| BreakInTry.cs:1:7:1:16 | enter BreakInTry | BreakInTry.cs:1:7:1:16 | this access | |
@@ -1093,13 +1141,79 @@
| ConditionalAccess.cs:35:9:35:12 | this access | ConditionalAccess.cs:35:9:35:12 | access to property Prop | |
| ConditionalAccess.cs:35:9:35:24 | call to method Out | ConditionalAccess.cs:32:10:32:11 | exit M8 (normal) | |
| ConditionalAccess.cs:35:9:35:25 | ...; | ConditionalAccess.cs:35:9:35:12 | this access | |
| ConditionalAccess.cs:41:26:41:38 | enter CommaJoinWith | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | |
| ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith (normal) | ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith | |
| ConditionalAccess.cs:41:70:41:71 | access to parameter s1 | ConditionalAccess.cs:41:75:41:78 | ", " | |
| ConditionalAccess.cs:41:70:41:78 | ... + ... | ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | |
| ConditionalAccess.cs:41:70:41:83 | ... + ... | ConditionalAccess.cs:41:26:41:38 | exit CommaJoinWith (normal) | |
| ConditionalAccess.cs:41:75:41:78 | ", " | ConditionalAccess.cs:41:70:41:78 | ... + ... | |
| ConditionalAccess.cs:41:82:41:83 | access to parameter s2 | ConditionalAccess.cs:41:70:41:83 | ... + ... | |
| ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:13:42:28 | {...} | |
| ConditionalAccess.cs:42:9:42:11 | exit get_Item (normal) | ConditionalAccess.cs:42:9:42:11 | exit get_Item | |
| ConditionalAccess.cs:42:13:42:28 | {...} | ConditionalAccess.cs:42:22:42:25 | null | |
| ConditionalAccess.cs:42:15:42:26 | return ...; | ConditionalAccess.cs:42:9:42:11 | exit get_Item (normal) | return |
| ConditionalAccess.cs:42:22:42:25 | null | ConditionalAccess.cs:42:15:42:26 | return ...; | |
| ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:13:43:15 | {...} | |
| ConditionalAccess.cs:43:9:43:11 | exit set_Item (normal) | ConditionalAccess.cs:43:9:43:11 | exit set_Item | |
| ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:9:43:11 | exit set_Item (normal) | |
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:47:5:55:5 | {...} | |
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | exit M9 | |
| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:48:9:48:26 | ...; | |
| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:24:48:25 | 42 | non-null |
| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:49:9:49:33 | ...; | null |
| ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:48:12:48:25 | ... = ... | |
| ConditionalAccess.cs:48:9:48:26 | ...; | ConditionalAccess.cs:48:9:48:10 | access to parameter ca | |
| ConditionalAccess.cs:48:12:48:25 | ... = ... | ConditionalAccess.cs:49:9:49:33 | ...; | |
| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:9:48:20 | access to field IntField | |
| ConditionalAccess.cs:49:9:49:10 | access to parameter ca | ConditionalAccess.cs:49:26:49:32 | "Hello" | non-null |
| ConditionalAccess.cs:49:9:49:10 | access to parameter ca | ConditionalAccess.cs:50:9:50:24 | ...; | null |
| ConditionalAccess.cs:49:9:49:22 | access to property StringProp | ConditionalAccess.cs:49:12:49:32 | ... = ... | |
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:9:49:10 | access to parameter ca | |
| ConditionalAccess.cs:49:12:49:32 | ... = ... | ConditionalAccess.cs:50:9:50:24 | ...; | |
| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:49:9:49:22 | access to property StringProp | |
| ConditionalAccess.cs:50:9:50:10 | access to parameter ca | ConditionalAccess.cs:50:13:50:13 | 0 | non-null |
| ConditionalAccess.cs:50:9:50:10 | access to parameter ca | ConditionalAccess.cs:51:9:51:32 | ...; | null |
| ConditionalAccess.cs:50:9:50:14 | access to indexer | ConditionalAccess.cs:50:12:50:23 | ... = ... | |
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:9:50:10 | access to parameter ca | |
| ConditionalAccess.cs:50:12:50:23 | ... = ... | ConditionalAccess.cs:51:9:51:32 | ...; | |
| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:50:18:50:23 | "Set0" | |
| ConditionalAccess.cs:50:18:50:23 | "Set0" | ConditionalAccess.cs:50:9:50:14 | access to indexer | |
| ConditionalAccess.cs:51:9:51:10 | access to parameter ca | ConditionalAccess.cs:51:9:51:16 | access to property Prop | non-null |
| ConditionalAccess.cs:51:9:51:10 | access to parameter ca | ConditionalAccess.cs:52:9:52:39 | ...; | null |
| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:30:51:31 | 84 | non-null |
| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:52:9:52:39 | ...; | null |
| ConditionalAccess.cs:51:9:51:26 | access to field IntField | ConditionalAccess.cs:51:18:51:31 | ... = ... | |
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:10 | access to parameter ca | |
| ConditionalAccess.cs:51:18:51:31 | ... = ... | ConditionalAccess.cs:52:9:52:39 | ...; | |
| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:51:9:51:26 | access to field IntField | |
| ConditionalAccess.cs:52:9:52:10 | access to parameter ca | ConditionalAccess.cs:52:9:52:16 | access to property Prop | non-null |
| ConditionalAccess.cs:52:9:52:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:26 | ...; | null |
| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:32:52:38 | "World" | non-null |
| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:53:9:53:26 | ...; | null |
| ConditionalAccess.cs:52:9:52:28 | access to property StringProp | ConditionalAccess.cs:52:18:52:38 | ... = ... | |
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:10 | access to parameter ca | |
| ConditionalAccess.cs:52:18:52:38 | ... = ... | ConditionalAccess.cs:53:9:53:26 | ...; | |
| ConditionalAccess.cs:52:32:52:38 | "World" | ConditionalAccess.cs:52:9:52:28 | access to property StringProp | |
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | non-null |
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:9:53:20 | access to field IntField | non-null |
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:25:53:25 | 1 | null |
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:30 | ...; | null |
| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:12:53:25 | ... = ... | |
| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:25:53:25 | 1 | |
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca | |
| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:53:9:53:20 | access to field IntField | |
| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:54:9:54:30 | ...; | |
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:12:53:25 | ... - ... | |
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | null |
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | non-null |
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | non-null |
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:27:54:29 | "!" | null |
| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:12:54:29 | ... = ... | |
| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:27:54:29 | "!" | |
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | |
| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | |
| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | |
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:12:54:29 | ... + ... | |
| ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | |
| ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith (normal) | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith | |
| ConditionalAccess.cs:60:70:60:71 | access to parameter s1 | ConditionalAccess.cs:60:75:60:78 | ", " | |
| ConditionalAccess.cs:60:70:60:78 | ... + ... | ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | |
| ConditionalAccess.cs:60:70:60:83 | ... + ... | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith (normal) | |
| ConditionalAccess.cs:60:75:60:78 | ", " | ConditionalAccess.cs:60:70:60:78 | ... + ... | |
| ConditionalAccess.cs:60:82:60:83 | access to parameter s2 | ConditionalAccess.cs:60:70:60:83 | ... + ... | |
| Conditions.cs:1:7:1:16 | call to constructor Object | Conditions.cs:1:7:1:16 | {...} | |
| Conditions.cs:1:7:1:16 | call to method <object initializer> | Conditions.cs:1:7:1:16 | call to constructor Object | |
| Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | this access | |
@@ -2007,14 +2121,16 @@
| Finally.cs:209:25:209:47 | throw ...; | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception |
| Finally.cs:209:31:209:46 | object creation of type ExceptionC | Finally.cs:209:25:209:47 | throw ...; | |
| Finally.cs:211:13:211:16 | this access | Finally.cs:211:26:211:28 | "0" | |
| Finally.cs:211:13:211:22 | access to field Field | Finally.cs:211:13:211:28 | ... = ... | |
| Finally.cs:211:13:211:28 | ... = ... | Finally.cs:195:10:195:12 | exit M10 (abnormal) | exception |
| Finally.cs:211:13:211:28 | ... = ... | Finally.cs:213:9:213:25 | ...; | |
| Finally.cs:211:13:211:29 | ...; | Finally.cs:211:13:211:16 | this access | |
| Finally.cs:211:26:211:28 | "0" | Finally.cs:211:13:211:28 | ... = ... | |
| Finally.cs:211:26:211:28 | "0" | Finally.cs:211:13:211:22 | access to field Field | |
| Finally.cs:213:9:213:12 | this access | Finally.cs:213:22:213:24 | "1" | |
| Finally.cs:213:9:213:18 | access to field Field | Finally.cs:213:9:213:24 | ... = ... | |
| Finally.cs:213:9:213:24 | ... = ... | Finally.cs:195:10:195:12 | exit M10 (normal) | |
| Finally.cs:213:9:213:25 | ...; | Finally.cs:213:9:213:12 | this access | |
| Finally.cs:213:22:213:24 | "1" | Finally.cs:213:9:213:24 | ... = ... | |
| Finally.cs:213:22:213:24 | "1" | Finally.cs:213:9:213:18 | access to field Field | |
| Finally.cs:216:10:216:12 | enter M11 | Finally.cs:217:5:231:5 | {...} | |
| Finally.cs:216:10:216:12 | exit M11 (normal) | Finally.cs:216:10:216:12 | exit M11 | |
| Finally.cs:217:5:231:5 | {...} | Finally.cs:218:9:229:9 | try {...} ... | |
@@ -2164,10 +2280,11 @@
| Initializers.cs:3:7:3:18 | exit <object initializer> (normal) | Initializers.cs:3:7:3:18 | exit <object initializer> | |
| Initializers.cs:3:7:3:18 | exit Initializers (normal) | Initializers.cs:3:7:3:18 | exit Initializers | |
| Initializers.cs:3:7:3:18 | {...} | Initializers.cs:3:7:3:18 | exit Initializers (normal) | |
| Initializers.cs:5:9:5:9 | access to field F | Initializers.cs:5:9:5:17 | ... = ... | |
| Initializers.cs:5:9:5:9 | this access | Initializers.cs:5:13:5:13 | access to field H | |
| Initializers.cs:5:9:5:17 | ... = ... | Initializers.cs:6:9:6:9 | this access | |
| Initializers.cs:5:13:5:13 | access to field H | Initializers.cs:5:17:5:17 | 1 | |
| Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:5:9:5:17 | ... = ... | |
| Initializers.cs:5:13:5:17 | ... + ... | Initializers.cs:5:9:5:9 | access to field F | |
| Initializers.cs:5:17:5:17 | 1 | Initializers.cs:5:13:5:17 | ... + ... | |
| Initializers.cs:6:9:6:9 | access to property G | Initializers.cs:6:25:6:31 | ... = ... | |
| Initializers.cs:6:9:6:9 | this access | Initializers.cs:6:27:6:27 | access to field H | |
@@ -2195,8 +2312,9 @@
| Initializers.cs:14:17:14:53 | object creation of type Initializers | Initializers.cs:14:44:14:44 | 0 | |
| Initializers.cs:14:34:14:35 | "" | Initializers.cs:14:17:14:53 | object creation of type Initializers | |
| Initializers.cs:14:38:14:53 | { ..., ... } | Initializers.cs:14:13:14:53 | Initializers i = ... | |
| Initializers.cs:14:40:14:40 | access to field F | Initializers.cs:14:40:14:44 | ... = ... | |
| Initializers.cs:14:40:14:44 | ... = ... | Initializers.cs:14:51:14:51 | 1 | |
| Initializers.cs:14:44:14:44 | 0 | Initializers.cs:14:40:14:44 | ... = ... | |
| Initializers.cs:14:44:14:44 | 0 | Initializers.cs:14:40:14:40 | access to field F | |
| Initializers.cs:14:47:14:47 | access to property G | Initializers.cs:14:47:14:51 | ... = ... | |
| Initializers.cs:14:47:14:51 | ... = ... | Initializers.cs:14:38:14:53 | { ..., ... } | |
| Initializers.cs:14:51:14:51 | 1 | Initializers.cs:14:47:14:47 | access to property G | |
@@ -2208,10 +2326,11 @@
| Initializers.cs:15:39:15:39 | access to local variable i | Initializers.cs:15:59:15:60 | "" | |
| Initializers.cs:15:42:15:61 | object creation of type Initializers | Initializers.cs:15:37:15:63 | { ..., ... } | |
| Initializers.cs:15:59:15:60 | "" | Initializers.cs:15:42:15:61 | object creation of type Initializers | |
| Initializers.cs:18:16:18:16 | access to field H | Initializers.cs:18:16:18:20 | ... = ... | |
| Initializers.cs:18:16:18:16 | enter H | Initializers.cs:18:20:18:20 | 1 | |
| Initializers.cs:18:16:18:16 | exit H (normal) | Initializers.cs:18:16:18:16 | exit H | |
| Initializers.cs:18:16:18:20 | ... = ... | Initializers.cs:18:16:18:16 | exit H (normal) | |
| Initializers.cs:18:20:18:20 | 1 | Initializers.cs:18:16:18:20 | ... = ... | |
| Initializers.cs:18:20:18:20 | 1 | Initializers.cs:18:16:18:16 | access to field H | |
| Initializers.cs:20:11:20:23 | call to constructor Object | Initializers.cs:20:11:20:23 | {...} | |
| Initializers.cs:20:11:20:23 | call to method <object initializer> | Initializers.cs:20:11:20:23 | call to constructor Object | |
| Initializers.cs:20:11:20:23 | enter <object initializer> | Initializers.cs:22:23:22:23 | this access | |
@@ -2220,46 +2339,52 @@
| Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | Initializers.cs:20:11:20:23 | exit NoConstructor | |
| Initializers.cs:20:11:20:23 | this access | Initializers.cs:20:11:20:23 | call to method <object initializer> | |
| Initializers.cs:20:11:20:23 | {...} | Initializers.cs:20:11:20:23 | exit NoConstructor (normal) | |
| Initializers.cs:22:23:22:23 | access to field F | Initializers.cs:22:23:22:27 | ... = ... | |
| Initializers.cs:22:23:22:23 | this access | Initializers.cs:22:27:22:27 | 0 | |
| Initializers.cs:22:23:22:27 | ... = ... | Initializers.cs:23:23:23:23 | this access | |
| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:27 | ... = ... | |
| Initializers.cs:22:27:22:27 | 0 | Initializers.cs:22:23:22:23 | access to field F | |
| Initializers.cs:23:23:23:23 | access to field G | Initializers.cs:23:23:23:27 | ... = ... | |
| Initializers.cs:23:23:23:23 | this access | Initializers.cs:23:27:23:27 | 1 | |
| Initializers.cs:23:23:23:27 | ... = ... | Initializers.cs:20:11:20:23 | exit <object initializer> (normal) | |
| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:27 | ... = ... | |
| Initializers.cs:23:27:23:27 | 1 | Initializers.cs:23:23:23:23 | access to field G | |
| Initializers.cs:26:11:26:13 | enter <object initializer> | Initializers.cs:28:13:28:13 | this access | |
| Initializers.cs:26:11:26:13 | exit <object initializer> (normal) | Initializers.cs:26:11:26:13 | exit <object initializer> | |
| Initializers.cs:28:13:28:13 | access to field H | Initializers.cs:28:13:28:17 | ... = ... | |
| Initializers.cs:28:13:28:13 | this access | Initializers.cs:28:17:28:17 | 2 | |
| Initializers.cs:28:13:28:17 | ... = ... | Initializers.cs:26:11:26:13 | exit <object initializer> (normal) | |
| Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:13:28:17 | ... = ... | |
| Initializers.cs:28:17:28:17 | 2 | Initializers.cs:28:13:28:13 | access to field H | |
| Initializers.cs:31:9:31:11 | call to method <object initializer> | Initializers.cs:31:17:31:20 | call to constructor NoConstructor | |
| Initializers.cs:31:9:31:11 | enter Sub | Initializers.cs:31:9:31:11 | this access | |
| Initializers.cs:31:9:31:11 | exit Sub (normal) | Initializers.cs:31:9:31:11 | exit Sub | |
| Initializers.cs:31:9:31:11 | this access | Initializers.cs:31:9:31:11 | call to method <object initializer> | |
| Initializers.cs:31:17:31:20 | call to constructor NoConstructor | Initializers.cs:31:24:31:33 | {...} | |
| Initializers.cs:31:24:31:33 | {...} | Initializers.cs:31:26:31:31 | ...; | |
| Initializers.cs:31:26:31:26 | access to field I | Initializers.cs:31:26:31:30 | ... = ... | |
| Initializers.cs:31:26:31:26 | this access | Initializers.cs:31:30:31:30 | 3 | |
| Initializers.cs:31:26:31:30 | ... = ... | Initializers.cs:31:9:31:11 | exit Sub (normal) | |
| Initializers.cs:31:26:31:31 | ...; | Initializers.cs:31:26:31:26 | this access | |
| Initializers.cs:31:30:31:30 | 3 | Initializers.cs:31:26:31:30 | ... = ... | |
| Initializers.cs:31:30:31:30 | 3 | Initializers.cs:31:26:31:26 | access to field I | |
| Initializers.cs:33:9:33:11 | enter Sub | Initializers.cs:33:22:33:25 | call to constructor Sub | |
| Initializers.cs:33:9:33:11 | exit Sub (normal) | Initializers.cs:33:9:33:11 | exit Sub | |
| Initializers.cs:33:22:33:25 | call to constructor Sub | Initializers.cs:33:29:33:38 | {...} | |
| Initializers.cs:33:29:33:38 | {...} | Initializers.cs:33:31:33:36 | ...; | |
| Initializers.cs:33:31:33:31 | access to field I | Initializers.cs:33:31:33:35 | ... = ... | |
| Initializers.cs:33:31:33:31 | this access | Initializers.cs:33:35:33:35 | access to parameter i | |
| Initializers.cs:33:31:33:35 | ... = ... | Initializers.cs:33:9:33:11 | exit Sub (normal) | |
| Initializers.cs:33:31:33:36 | ...; | Initializers.cs:33:31:33:31 | this access | |
| Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:31:33:35 | ... = ... | |
| Initializers.cs:33:35:33:35 | access to parameter i | Initializers.cs:33:31:33:31 | access to field I | |
| Initializers.cs:35:9:35:11 | call to constructor NoConstructor | Initializers.cs:35:27:35:40 | {...} | |
| Initializers.cs:35:9:35:11 | call to method <object initializer> | Initializers.cs:35:9:35:11 | call to constructor NoConstructor | |
| Initializers.cs:35:9:35:11 | enter Sub | Initializers.cs:35:9:35:11 | this access | |
| Initializers.cs:35:9:35:11 | exit Sub (normal) | Initializers.cs:35:9:35:11 | exit Sub | |
| Initializers.cs:35:9:35:11 | this access | Initializers.cs:35:9:35:11 | call to method <object initializer> | |
| Initializers.cs:35:27:35:40 | {...} | Initializers.cs:35:29:35:38 | ...; | |
| Initializers.cs:35:29:35:29 | access to field I | Initializers.cs:35:29:35:37 | ... = ... | |
| Initializers.cs:35:29:35:29 | this access | Initializers.cs:35:33:35:33 | access to parameter i | |
| Initializers.cs:35:29:35:37 | ... = ... | Initializers.cs:35:9:35:11 | exit Sub (normal) | |
| Initializers.cs:35:29:35:38 | ...; | Initializers.cs:35:29:35:29 | this access | |
| Initializers.cs:35:33:35:33 | access to parameter i | Initializers.cs:35:37:35:37 | access to parameter j | |
| Initializers.cs:35:33:35:37 | ... + ... | Initializers.cs:35:29:35:37 | ... = ... | |
| Initializers.cs:35:33:35:37 | ... + ... | Initializers.cs:35:29:35:29 | access to field I | |
| Initializers.cs:35:37:35:37 | access to parameter j | Initializers.cs:35:33:35:37 | ... + ... | |
| Initializers.cs:39:7:39:23 | call to constructor Object | Initializers.cs:39:7:39:23 | {...} | |
| Initializers.cs:39:7:39:23 | call to method <object initializer> | Initializers.cs:39:7:39:23 | call to constructor Object | |
@@ -2298,8 +2423,9 @@
| Initializers.cs:57:13:65:9 | Compound compound = ... | Initializers.cs:51:10:51:13 | exit Test (normal) | |
| Initializers.cs:57:24:65:9 | object creation of type Compound | Initializers.cs:59:34:59:34 | 0 | |
| Initializers.cs:58:9:65:9 | { ..., ... } | Initializers.cs:57:13:65:9 | Compound compound = ... | |
| Initializers.cs:59:13:59:27 | access to field DictionaryField | Initializers.cs:59:13:59:76 | ... = ... | |
| Initializers.cs:59:13:59:76 | ... = ... | Initializers.cs:60:37:60:37 | 3 | |
| Initializers.cs:59:31:59:76 | { ..., ... } | Initializers.cs:59:13:59:76 | ... = ... | |
| Initializers.cs:59:31:59:76 | { ..., ... } | Initializers.cs:59:13:59:27 | access to field DictionaryField | |
| Initializers.cs:59:33:59:35 | access to indexer | Initializers.cs:59:33:59:44 | ... = ... | |
| Initializers.cs:59:33:59:44 | ... = ... | Initializers.cs:59:48:59:48 | 1 | |
| Initializers.cs:59:34:59:34 | 0 | Initializers.cs:59:39:59:44 | "Zero" | |
@@ -2331,52 +2457,62 @@
| Initializers.cs:60:65:60:69 | ... + ... | Initializers.cs:60:74:60:78 | "One" | |
| Initializers.cs:60:69:60:69 | 1 | Initializers.cs:60:65:60:69 | ... + ... | |
| Initializers.cs:60:74:60:78 | "One" | Initializers.cs:60:64:60:70 | access to indexer | |
| Initializers.cs:61:13:61:22 | access to field ArrayField | Initializers.cs:61:13:61:58 | ... = ... | |
| Initializers.cs:61:13:61:58 | ... = ... | Initializers.cs:62:30:62:30 | 0 | |
| Initializers.cs:61:26:61:58 | { ..., ... } | Initializers.cs:61:13:61:58 | ... = ... | |
| Initializers.cs:61:26:61:58 | { ..., ... } | Initializers.cs:61:13:61:22 | access to field ArrayField | |
| Initializers.cs:61:28:61:30 | access to array element | Initializers.cs:61:28:61:39 | ... = ... | |
| Initializers.cs:61:28:61:39 | ... = ... | Initializers.cs:61:43:61:43 | access to parameter i | |
| Initializers.cs:61:29:61:29 | 0 | Initializers.cs:61:34:61:39 | "Zero" | |
| Initializers.cs:61:34:61:39 | "Zero" | Initializers.cs:61:28:61:39 | ... = ... | |
| Initializers.cs:61:34:61:39 | "Zero" | Initializers.cs:61:28:61:30 | access to array element | |
| Initializers.cs:61:42:61:48 | access to array element | Initializers.cs:61:42:61:56 | ... = ... | |
| Initializers.cs:61:42:61:56 | ... = ... | Initializers.cs:61:26:61:58 | { ..., ... } | |
| Initializers.cs:61:43:61:43 | access to parameter i | Initializers.cs:61:47:61:47 | 1 | |
| Initializers.cs:61:43:61:47 | ... + ... | Initializers.cs:61:52:61:56 | "One" | |
| Initializers.cs:61:47:61:47 | 1 | Initializers.cs:61:43:61:47 | ... + ... | |
| Initializers.cs:61:52:61:56 | "One" | Initializers.cs:61:42:61:56 | ... = ... | |
| Initializers.cs:61:52:61:56 | "One" | Initializers.cs:61:42:61:48 | access to array element | |
| Initializers.cs:62:13:62:23 | access to field ArrayField2 | Initializers.cs:62:13:62:60 | ... = ... | |
| Initializers.cs:62:13:62:60 | ... = ... | Initializers.cs:63:32:63:32 | 1 | |
| Initializers.cs:62:27:62:60 | { ..., ... } | Initializers.cs:62:13:62:60 | ... = ... | |
| Initializers.cs:62:27:62:60 | { ..., ... } | Initializers.cs:62:13:62:23 | access to field ArrayField2 | |
| Initializers.cs:62:29:62:34 | access to array element | Initializers.cs:62:29:62:40 | ... = ... | |
| Initializers.cs:62:29:62:40 | ... = ... | Initializers.cs:62:44:62:44 | 1 | |
| Initializers.cs:62:30:62:30 | 0 | Initializers.cs:62:33:62:33 | 1 | |
| Initializers.cs:62:33:62:33 | 1 | Initializers.cs:62:38:62:40 | "i" | |
| Initializers.cs:62:38:62:40 | "i" | Initializers.cs:62:29:62:40 | ... = ... | |
| Initializers.cs:62:38:62:40 | "i" | Initializers.cs:62:29:62:34 | access to array element | |
| Initializers.cs:62:43:62:52 | access to array element | Initializers.cs:62:43:62:58 | ... = ... | |
| Initializers.cs:62:43:62:58 | ... = ... | Initializers.cs:62:27:62:60 | { ..., ... } | |
| Initializers.cs:62:44:62:44 | 1 | Initializers.cs:62:47:62:47 | access to parameter i | |
| Initializers.cs:62:47:62:47 | access to parameter i | Initializers.cs:62:51:62:51 | 0 | |
| Initializers.cs:62:47:62:51 | ... + ... | Initializers.cs:62:56:62:58 | "1" | |
| Initializers.cs:62:51:62:51 | 0 | Initializers.cs:62:47:62:51 | ... + ... | |
| Initializers.cs:62:56:62:58 | "1" | Initializers.cs:62:43:62:58 | ... = ... | |
| Initializers.cs:62:56:62:58 | "1" | Initializers.cs:62:43:62:52 | access to array element | |
| Initializers.cs:63:13:63:25 | access to property ArrayProperty | Initializers.cs:63:13:63:60 | ... = ... | |
| Initializers.cs:63:13:63:60 | ... = ... | Initializers.cs:64:33:64:33 | 0 | |
| Initializers.cs:63:29:63:60 | { ..., ... } | Initializers.cs:63:13:63:25 | access to property ArrayProperty | |
| Initializers.cs:63:31:63:33 | access to array element | Initializers.cs:63:31:63:41 | ... = ... | |
| Initializers.cs:63:31:63:41 | ... = ... | Initializers.cs:63:45:63:45 | access to parameter i | |
| Initializers.cs:63:32:63:32 | 1 | Initializers.cs:63:37:63:41 | "One" | |
| Initializers.cs:63:37:63:41 | "One" | Initializers.cs:63:31:63:41 | ... = ... | |
| Initializers.cs:63:37:63:41 | "One" | Initializers.cs:63:31:63:33 | access to array element | |
| Initializers.cs:63:44:63:50 | access to array element | Initializers.cs:63:44:63:58 | ... = ... | |
| Initializers.cs:63:44:63:58 | ... = ... | Initializers.cs:63:29:63:60 | { ..., ... } | |
| Initializers.cs:63:45:63:45 | access to parameter i | Initializers.cs:63:49:63:49 | 2 | |
| Initializers.cs:63:45:63:49 | ... + ... | Initializers.cs:63:54:63:58 | "Two" | |
| Initializers.cs:63:49:63:49 | 2 | Initializers.cs:63:45:63:49 | ... + ... | |
| Initializers.cs:63:54:63:58 | "Two" | Initializers.cs:63:44:63:58 | ... = ... | |
| Initializers.cs:63:54:63:58 | "Two" | Initializers.cs:63:44:63:50 | access to array element | |
| Initializers.cs:64:13:64:26 | access to property ArrayProperty2 | Initializers.cs:64:13:64:63 | ... = ... | |
| Initializers.cs:64:13:64:63 | ... = ... | Initializers.cs:58:9:65:9 | { ..., ... } | |
| Initializers.cs:64:30:64:63 | { ..., ... } | Initializers.cs:64:13:64:26 | access to property ArrayProperty2 | |
| Initializers.cs:64:32:64:37 | access to array element | Initializers.cs:64:32:64:43 | ... = ... | |
| Initializers.cs:64:32:64:43 | ... = ... | Initializers.cs:64:47:64:47 | 1 | |
| Initializers.cs:64:33:64:33 | 0 | Initializers.cs:64:36:64:36 | 1 | |
| Initializers.cs:64:36:64:36 | 1 | Initializers.cs:64:41:64:43 | "i" | |
| Initializers.cs:64:41:64:43 | "i" | Initializers.cs:64:32:64:43 | ... = ... | |
| Initializers.cs:64:41:64:43 | "i" | Initializers.cs:64:32:64:37 | access to array element | |
| Initializers.cs:64:46:64:55 | access to array element | Initializers.cs:64:46:64:61 | ... = ... | |
| Initializers.cs:64:46:64:61 | ... = ... | Initializers.cs:64:30:64:63 | { ..., ... } | |
| Initializers.cs:64:47:64:47 | 1 | Initializers.cs:64:50:64:50 | access to parameter i | |
| Initializers.cs:64:50:64:50 | access to parameter i | Initializers.cs:64:54:64:54 | 0 | |
| Initializers.cs:64:50:64:54 | ... + ... | Initializers.cs:64:59:64:61 | "1" | |
| Initializers.cs:64:54:64:54 | 0 | Initializers.cs:64:50:64:54 | ... + ... | |
| Initializers.cs:64:59:64:61 | "1" | Initializers.cs:64:46:64:61 | ... = ... | |
| Initializers.cs:64:59:64:61 | "1" | Initializers.cs:64:46:64:55 | access to array element | |
| LoopUnrolling.cs:5:7:5:19 | call to constructor Object | LoopUnrolling.cs:5:7:5:19 | {...} | |
| LoopUnrolling.cs:5:7:5:19 | call to method <object initializer> | LoopUnrolling.cs:5:7:5:19 | call to constructor Object | |
| LoopUnrolling.cs:5:7:5:19 | enter LoopUnrolling | LoopUnrolling.cs:5:7:5:19 | this access | |
@@ -2631,9 +2767,10 @@
| MultiImplementationA.cs:11:7:11:8 | enter <object initializer> | MultiImplementationA.cs:13:16:13:16 | this access | |
| MultiImplementationA.cs:11:7:11:8 | enter <object initializer> | MultiImplementationB.cs:11:16:11:16 | this access | |
| MultiImplementationA.cs:11:7:11:8 | exit <object initializer> (normal) | MultiImplementationA.cs:11:7:11:8 | exit <object initializer> | |
| MultiImplementationA.cs:13:16:13:16 | access to field F | MultiImplementationA.cs:13:16:13:20 | ... = ... | |
| MultiImplementationA.cs:13:16:13:16 | this access | MultiImplementationA.cs:13:20:13:20 | 0 | |
| MultiImplementationA.cs:13:16:13:20 | ... = ... | MultiImplementationA.cs:24:16:24:16 | this access | |
| MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:13:16:13:20 | ... = ... | |
| MultiImplementationA.cs:13:20:13:20 | 0 | MultiImplementationA.cs:13:16:13:16 | access to field F | |
| MultiImplementationA.cs:14:31:14:31 | access to parameter i | MultiImplementationA.cs:14:31:14:31 | exit get_Item (normal) | |
| MultiImplementationA.cs:14:31:14:31 | enter get_Item | MultiImplementationA.cs:14:31:14:31 | access to parameter i | |
| MultiImplementationA.cs:14:31:14:31 | enter get_Item | MultiImplementationB.cs:12:37:12:40 | null | |
@@ -2666,10 +2803,11 @@
| MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | MultiImplementationA.cs:20:12:20:13 | exit C2 | |
| MultiImplementationA.cs:20:12:20:13 | this access | MultiImplementationA.cs:20:12:20:13 | call to method <object initializer> | |
| MultiImplementationA.cs:20:22:20:31 | {...} | MultiImplementationA.cs:20:24:20:29 | ...; | |
| MultiImplementationA.cs:20:24:20:24 | access to field F | MultiImplementationA.cs:20:24:20:28 | ... = ... | |
| MultiImplementationA.cs:20:24:20:24 | this access | MultiImplementationA.cs:20:28:20:28 | access to parameter i | |
| MultiImplementationA.cs:20:24:20:28 | ... = ... | MultiImplementationA.cs:20:12:20:13 | exit C2 (normal) | |
| MultiImplementationA.cs:20:24:20:29 | ...; | MultiImplementationA.cs:20:24:20:24 | this access | |
| MultiImplementationA.cs:20:28:20:28 | access to parameter i | MultiImplementationA.cs:20:24:20:28 | ... = ... | |
| MultiImplementationA.cs:20:28:20:28 | access to parameter i | MultiImplementationA.cs:20:24:20:24 | access to field F | |
| MultiImplementationA.cs:21:12:21:13 | enter C2 | MultiImplementationA.cs:21:24:21:24 | 0 | |
| MultiImplementationA.cs:21:12:21:13 | enter C2 | MultiImplementationB.cs:19:24:19:24 | 1 | |
| MultiImplementationA.cs:21:12:21:13 | exit C2 (normal) | MultiImplementationA.cs:21:12:21:13 | exit C2 | |
@@ -2730,9 +2868,10 @@
| MultiImplementationB.cs:4:34:4:34 | 1 | MultiImplementationB.cs:4:27:4:35 | return ...; | |
| MultiImplementationB.cs:4:43:4:45 | {...} | MultiImplementationA.cs:7:41:7:43 | exit set_P2 (normal) | |
| MultiImplementationB.cs:5:23:5:23 | 2 | MultiImplementationA.cs:8:16:8:16 | exit M (normal) | |
| MultiImplementationB.cs:11:16:11:16 | access to field F | MultiImplementationB.cs:11:16:11:20 | ... = ... | |
| MultiImplementationB.cs:11:16:11:16 | this access | MultiImplementationB.cs:11:20:11:20 | 1 | |
| MultiImplementationB.cs:11:16:11:20 | ... = ... | MultiImplementationB.cs:22:16:22:16 | this access | |
| MultiImplementationB.cs:11:20:11:20 | 1 | MultiImplementationB.cs:11:16:11:20 | ... = ... | |
| MultiImplementationB.cs:11:20:11:20 | 1 | MultiImplementationB.cs:11:16:11:16 | access to field F | |
| MultiImplementationB.cs:12:31:12:40 | throw ... | MultiImplementationA.cs:14:31:14:31 | exit get_Item (abnormal) | exception |
| MultiImplementationB.cs:12:37:12:40 | null | MultiImplementationB.cs:12:31:12:40 | throw ... | |
| MultiImplementationB.cs:13:40:13:54 | {...} | MultiImplementationB.cs:13:48:13:51 | null | |
@@ -2859,9 +2998,10 @@
| PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | PartialImplementationA.cs:3:12:3:18 | exit Partial | |
| PartialImplementationA.cs:3:12:3:18 | this access | PartialImplementationA.cs:3:12:3:18 | call to method <object initializer> | |
| PartialImplementationA.cs:3:27:3:29 | {...} | PartialImplementationA.cs:3:12:3:18 | exit Partial (normal) | |
| PartialImplementationB.cs:3:16:3:16 | access to field F | PartialImplementationB.cs:3:16:3:20 | ... = ... | |
| PartialImplementationB.cs:3:16:3:16 | this access | PartialImplementationB.cs:3:20:3:20 | 0 | |
| PartialImplementationB.cs:3:16:3:20 | ... = ... | PartialImplementationB.cs:5:16:5:16 | this access | |
| PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:3:16:3:20 | ... = ... | |
| PartialImplementationB.cs:3:20:3:20 | 0 | PartialImplementationB.cs:3:16:3:16 | access to field F | |
| PartialImplementationB.cs:4:12:4:18 | call to constructor Object | PartialImplementationB.cs:4:22:4:24 | {...} | |
| PartialImplementationB.cs:4:12:4:18 | call to method <object initializer> | PartialImplementationB.cs:4:12:4:18 | call to constructor Object | |
| PartialImplementationB.cs:4:12:4:18 | enter Partial | PartialImplementationB.cs:4:12:4:18 | this access | |
@@ -3922,20 +4062,22 @@
| cflow.cs:127:62:127:64 | enter set_Prop | cflow.cs:127:66:127:83 | {...} | |
| cflow.cs:127:62:127:64 | exit set_Prop (normal) | cflow.cs:127:62:127:64 | exit set_Prop | |
| cflow.cs:127:66:127:83 | {...} | cflow.cs:127:68:127:81 | ...; | |
| cflow.cs:127:68:127:72 | access to field Field | cflow.cs:127:68:127:80 | ... = ... | |
| cflow.cs:127:68:127:72 | this access | cflow.cs:127:76:127:80 | access to parameter value | |
| cflow.cs:127:68:127:80 | ... = ... | cflow.cs:127:62:127:64 | exit set_Prop (normal) | |
| cflow.cs:127:68:127:81 | ...; | cflow.cs:127:68:127:72 | this access | |
| cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:68:127:80 | ... = ... | |
| cflow.cs:127:76:127:80 | access to parameter value | cflow.cs:127:68:127:72 | access to field Field | |
| cflow.cs:129:5:129:15 | call to constructor Object | cflow.cs:130:5:132:5 | {...} | |
| cflow.cs:129:5:129:15 | call to method <object initializer> | cflow.cs:129:5:129:15 | call to constructor Object | |
| cflow.cs:129:5:129:15 | enter ControlFlow | cflow.cs:129:5:129:15 | this access | |
| cflow.cs:129:5:129:15 | exit ControlFlow (normal) | cflow.cs:129:5:129:15 | exit ControlFlow | |
| cflow.cs:129:5:129:15 | this access | cflow.cs:129:5:129:15 | call to method <object initializer> | |
| cflow.cs:130:5:132:5 | {...} | cflow.cs:131:9:131:18 | ...; | |
| cflow.cs:131:9:131:13 | access to field Field | cflow.cs:131:9:131:17 | ... = ... | |
| cflow.cs:131:9:131:13 | this access | cflow.cs:131:17:131:17 | access to parameter s | |
| cflow.cs:131:9:131:17 | ... = ... | cflow.cs:129:5:129:15 | exit ControlFlow (normal) | |
| cflow.cs:131:9:131:18 | ...; | cflow.cs:131:9:131:13 | this access | |
| cflow.cs:131:17:131:17 | access to parameter s | cflow.cs:131:9:131:17 | ... = ... | |
| cflow.cs:131:17:131:17 | access to parameter s | cflow.cs:131:9:131:13 | access to field Field | |
| cflow.cs:134:5:134:15 | enter ControlFlow | cflow.cs:134:31:134:31 | access to parameter i | |
| cflow.cs:134:5:134:15 | exit ControlFlow (normal) | cflow.cs:134:5:134:15 | exit ControlFlow | |
| cflow.cs:134:26:134:29 | call to constructor ControlFlow | cflow.cs:134:39:134:41 | {...} | |
@@ -4163,10 +4305,11 @@
| cflow.cs:209:5:222:5 | {...} | cflow.cs:210:9:221:36 | do ... while (...); | |
| cflow.cs:210:9:221:36 | do ... while (...); | cflow.cs:211:9:221:9 | {...} | |
| cflow.cs:211:9:221:9 | {...} | cflow.cs:212:13:212:25 | ...; | |
| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:24 | ... = ... | |
| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:22:212:24 | "a" | |
| cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | access to field Field | |
| cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | this access | |
| cflow.cs:212:13:212:24 | ... + ... | cflow.cs:212:13:212:24 | ... = ... | |
| cflow.cs:212:13:212:24 | ... + ... | cflow.cs:212:13:212:17 | access to field Field | |
| cflow.cs:212:13:212:24 | ... = ... | cflow.cs:213:13:216:13 | if (...) ... | |
| cflow.cs:212:13:212:25 | ...; | cflow.cs:212:13:212:17 | this access | |
| cflow.cs:212:22:212:24 | "a" | cflow.cs:212:13:212:24 | ... + ... | |
@@ -4204,10 +4347,11 @@
| cflow.cs:226:57:226:59 | "a" | cflow.cs:226:62:226:63 | 10 | |
| cflow.cs:226:62:226:63 | 10 | cflow.cs:226:27:226:64 | call to method Repeat<String> | |
| cflow.cs:227:9:237:9 | {...} | cflow.cs:228:13:228:23 | ...; | |
| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:22 | ... = ... | |
| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:22:228:22 | access to local variable x | |
| cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | access to field Field | |
| cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | this access | |
| cflow.cs:228:13:228:22 | ... + ... | cflow.cs:228:13:228:22 | ... = ... | |
| cflow.cs:228:13:228:22 | ... + ... | cflow.cs:228:13:228:17 | access to field Field | |
| cflow.cs:228:13:228:22 | ... = ... | cflow.cs:229:13:232:13 | if (...) ... | |
| cflow.cs:228:13:228:23 | ...; | cflow.cs:228:13:228:17 | this access | |
| cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:13:228:22 | ... + ... | |

View File

@@ -36,6 +36,9 @@
| Assignments.cs:3:10:3:10 | M | Assignments.cs:4:5:15:5 | {...} |
| Assignments.cs:14:18:14:35 | (...) => ... | Assignments.cs:14:33:14:35 | {...} |
| Assignments.cs:17:40:17:40 | + | Assignments.cs:18:5:20:5 | {...} |
| Assignments.cs:27:10:27:23 | SetParamSingle | Assignments.cs:28:5:30:5 | {...} |
| Assignments.cs:32:10:32:22 | SetParamMulti | Assignments.cs:33:5:36:5 | {...} |
| Assignments.cs:38:10:38:11 | M2 | Assignments.cs:39:5:45:5 | {...} |
| BreakInTry.cs:1:7:1:16 | BreakInTry | BreakInTry.cs:1:7:1:16 | this access |
| BreakInTry.cs:3:10:3:11 | M1 | BreakInTry.cs:4:5:18:5 | {...} |
| BreakInTry.cs:20:10:20:11 | M2 | BreakInTry.cs:21:5:36:5 | {...} |
@@ -58,7 +61,10 @@
| ConditionalAccess.cs:21:10:21:11 | M7 | ConditionalAccess.cs:22:5:26:5 | {...} |
| ConditionalAccess.cs:30:10:30:12 | Out | ConditionalAccess.cs:30:32:30:32 | 0 |
| ConditionalAccess.cs:32:10:32:11 | M8 | ConditionalAccess.cs:33:5:36:5 | {...} |
| ConditionalAccess.cs:41:26:41:38 | CommaJoinWith | ConditionalAccess.cs:41:70:41:71 | access to parameter s1 |
| ConditionalAccess.cs:42:9:42:11 | get_Item | ConditionalAccess.cs:42:13:42:28 | {...} |
| ConditionalAccess.cs:43:9:43:11 | set_Item | ConditionalAccess.cs:43:13:43:15 | {...} |
| ConditionalAccess.cs:46:10:46:11 | M9 | ConditionalAccess.cs:47:5:55:5 | {...} |
| ConditionalAccess.cs:60:26:60:38 | CommaJoinWith | ConditionalAccess.cs:60:70:60:71 | access to parameter s1 |
| Conditions.cs:1:7:1:16 | Conditions | Conditions.cs:1:7:1:16 | this access |
| Conditions.cs:3:10:3:19 | IncrOrDecr | Conditions.cs:4:5:9:5 | {...} |
| Conditions.cs:11:9:11:10 | M1 | Conditions.cs:12:5:20:5 | {...} |

View File

@@ -6,8 +6,9 @@
| patterns.cs:7:20:7:41 | (...) ... | patterns.cs:7:16:7:41 | Object o = ... | semmle.label | successor |
| patterns.cs:7:20:7:41 | object creation of type MyStruct | patterns.cs:7:39:7:39 | 2 | semmle.label | successor |
| patterns.cs:7:33:7:41 | { ..., ... } | patterns.cs:7:20:7:41 | (...) ... | semmle.label | successor |
| patterns.cs:7:35:7:35 | access to field X | patterns.cs:7:35:7:39 | ... = ... | semmle.label | successor |
| patterns.cs:7:35:7:39 | ... = ... | patterns.cs:7:33:7:41 | { ..., ... } | semmle.label | successor |
| patterns.cs:7:39:7:39 | 2 | patterns.cs:7:35:7:39 | ... = ... | semmle.label | successor |
| patterns.cs:7:39:7:39 | 2 | patterns.cs:7:35:7:35 | access to field X | semmle.label | successor |
| patterns.cs:9:9:11:9 | if (...) ... | patterns.cs:9:13:9:13 | access to local variable o | semmle.label | successor |
| patterns.cs:9:13:9:13 | access to local variable o | patterns.cs:9:18:9:29 | MyStruct ms1 | semmle.label | successor |
| patterns.cs:9:13:9:29 | [false] ... is ... | patterns.cs:13:9:15:9 | if (...) ... | semmle.label | false |

View File

@@ -108,8 +108,9 @@
| patterns.cs:125:13:125:38 | MyStruct s = ... | patterns.cs:126:9:132:10 | ... ...; | semmle.label | successor |
| patterns.cs:125:17:125:38 | object creation of type MyStruct | patterns.cs:125:36:125:36 | 0 | semmle.label | successor |
| patterns.cs:125:30:125:38 | { ..., ... } | patterns.cs:125:13:125:38 | MyStruct s = ... | semmle.label | successor |
| patterns.cs:125:32:125:32 | access to field X | patterns.cs:125:32:125:36 | ... = ... | semmle.label | successor |
| patterns.cs:125:32:125:36 | ... = ... | patterns.cs:125:30:125:38 | { ..., ... } | semmle.label | successor |
| patterns.cs:125:36:125:36 | 0 | patterns.cs:125:32:125:36 | ... = ... | semmle.label | successor |
| patterns.cs:125:36:125:36 | 0 | patterns.cs:125:32:125:32 | access to field X | semmle.label | successor |
| patterns.cs:126:9:132:10 | ... ...; | patterns.cs:126:17:126:17 | access to local variable s | semmle.label | successor |
| patterns.cs:126:13:132:9 | Int32 r = ... | patterns.cs:134:9:148:9 | try {...} ... | semmle.label | successor |
| patterns.cs:126:17:126:17 | access to local variable s | patterns.cs:128:13:128:20 | access to type MyStruct | semmle.label | successor |

View File

@@ -5,8 +5,9 @@
| patterns.cs:34:13:34:38 | MyStruct s = ... | patterns.cs:36:9:44:9 | switch (...) {...} | semmle.label | successor |
| patterns.cs:34:17:34:38 | object creation of type MyStruct | patterns.cs:34:36:34:36 | 0 | semmle.label | successor |
| patterns.cs:34:30:34:38 | { ..., ... } | patterns.cs:34:13:34:38 | MyStruct s = ... | semmle.label | successor |
| patterns.cs:34:32:34:32 | access to field X | patterns.cs:34:32:34:36 | ... = ... | semmle.label | successor |
| patterns.cs:34:32:34:36 | ... = ... | patterns.cs:34:30:34:38 | { ..., ... } | semmle.label | successor |
| patterns.cs:34:36:34:36 | 0 | patterns.cs:34:32:34:36 | ... = ... | semmle.label | successor |
| patterns.cs:34:36:34:36 | 0 | patterns.cs:34:32:34:32 | access to field X | semmle.label | successor |
| patterns.cs:36:9:44:9 | switch (...) {...} | patterns.cs:36:17:36:17 | access to local variable s | semmle.label | successor |
| patterns.cs:36:17:36:17 | access to local variable s | patterns.cs:38:13:38:47 | case ...: | semmle.label | successor |
| patterns.cs:38:13:38:47 | case ...: | patterns.cs:38:18:38:29 | MyStruct ms1 | semmle.label | successor |

View File

@@ -1124,6 +1124,7 @@
| Splitting.cs:51:30:51:36 | { ..., ... } | Splitting.cs:51:17:51:36 | array creation of type String[] |
| Splitting.cs:51:32:51:34 | "a" | Splitting.cs:51:30:51:36 | { ..., ... } |
| Splitting.cs:52:9:52:9 | [post] access to local variable y | Splitting.cs:53:17:53:17 | access to local variable y |
| Splitting.cs:52:9:52:9 | access to local variable y | Splitting.cs:52:9:52:12 | access to array element |
| Splitting.cs:52:9:52:9 | access to local variable y | Splitting.cs:53:17:53:17 | access to local variable y |
| Splitting.cs:52:16:52:18 | "b" | Splitting.cs:52:9:52:9 | [post] access to local variable y |
| Splitting.cs:52:16:52:18 | "b" | Splitting.cs:52:9:52:12 | access to array element |

View File

@@ -0,0 +1,24 @@
using System;
public class C
{
string Prop { get; set; }
void M(object o, bool b)
{
// Conditional expr might be null.
var conditionalExpr = b ? new object() : null;
// Null-coalescing expr might be null as the right operand is null.
var nullCoalescing = o ?? null;
// Cast might be null.
var c = o as C;
// Conditional access might be null as the qualifier might be null.
var s1 = (o as C)?.Prop;
// Conditional access might be null as the qualifier might be null.
var i = o?.GetHashCode();
}
}

View File

@@ -0,0 +1,8 @@
| MaybeNullExpr.cs:10:31:10:53 | ... ? ... : ... |
| MaybeNullExpr.cs:10:50:10:53 | null |
| MaybeNullExpr.cs:13:30:13:38 | ... ?? ... |
| MaybeNullExpr.cs:13:35:13:38 | null |
| MaybeNullExpr.cs:16:17:16:22 | ... as ... |
| MaybeNullExpr.cs:19:18:19:31 | access to property Prop |
| MaybeNullExpr.cs:19:19:19:24 | ... as ... |
| MaybeNullExpr.cs:22:17:22:32 | call to method GetHashCode |

View File

@@ -0,0 +1,6 @@
import csharp
import semmle.code.csharp.dataflow.Nullness
from MaybeNullExpr e
where e.fromSource()
select e

View File

@@ -0,0 +1,2 @@
semmle-extractor-options: /nostdlib /noconfig
semmle-extractor-options: --load-sources-from-project:${testdir}/../../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj

View File

@@ -95,6 +95,7 @@
| SignAnalysis.cs:120:9:120:10 | access to field f0 | positive |
| SignAnalysis.cs:120:9:120:12 | ...++ | positive |
| SignAnalysis.cs:121:34:121:35 | access to field f0 | strictlyPositive |
| SignAnalysis.cs:122:9:122:10 | access to field f0 | positive |
| SignAnalysis.cs:129:9:129:16 | ... = ... | strictlyNegative |
| SignAnalysis.cs:129:14:129:16 | -... | strictlyNegative |
| SignAnalysis.cs:129:15:129:16 | 10 | strictlyPositive |
@@ -213,6 +214,7 @@
| SignAnalysis.cs:414:13:414:13 | access to local variable i | strictlyPositive |
| SignAnalysis.cs:415:31:415:31 | access to local variable i | strictlyPositive |
| SignAnalysis.cs:424:31:424:31 | access to local variable x | strictlyNegative |
| SignAnalysis.cs:428:19:428:19 | access to constant A | strictlyPositive |
| SignAnalysis.cs:428:19:428:24 | ... = ... | strictlyPositive |
| SignAnalysis.cs:428:23:428:24 | 12 | strictlyPositive |
| SignAnalysis.cs:434:38:434:38 | access to local variable i | strictlyNegative |

View File

@@ -6,11 +6,13 @@ call
| obinit.cs:9:16:9:16 | call to method <object initializer> | obinit.cs:2:18:2:18 | <object initializer> | obinit.cs:9:16:9:16 | A |
| obinit.cs:15:16:15:16 | call to method <object initializer> | obinit.cs:14:18:14:18 | <object initializer> | obinit.cs:15:16:15:16 | B |
cfg
| obinit.cs:2:18:2:18 | <object initializer> | obinit.cs:3:13:3:13 | access to field x | obinit.cs:3:13:3:17 | ... = ... | normal | 2 |
| obinit.cs:2:18:2:18 | <object initializer> | obinit.cs:3:13:3:13 | this access | obinit.cs:3:17:3:17 | 1 | normal | 0 |
| obinit.cs:2:18:2:18 | <object initializer> | obinit.cs:3:13:3:17 | ... = ... | obinit.cs:5:23:5:23 | this access | normal | 2 |
| obinit.cs:2:18:2:18 | <object initializer> | obinit.cs:3:17:3:17 | 1 | obinit.cs:3:13:3:17 | ... = ... | normal | 1 |
| obinit.cs:2:18:2:18 | <object initializer> | obinit.cs:5:23:5:23 | this access | obinit.cs:5:27:5:34 | "source" | normal | 3 |
| obinit.cs:2:18:2:18 | <object initializer> | obinit.cs:5:27:5:34 | "source" | obinit.cs:5:23:5:34 | ... = ... | normal | 4 |
| obinit.cs:2:18:2:18 | <object initializer> | obinit.cs:3:13:3:17 | ... = ... | obinit.cs:5:23:5:23 | this access | normal | 3 |
| obinit.cs:2:18:2:18 | <object initializer> | obinit.cs:3:17:3:17 | 1 | obinit.cs:3:13:3:13 | access to field x | normal | 1 |
| obinit.cs:2:18:2:18 | <object initializer> | obinit.cs:5:23:5:23 | access to field s | obinit.cs:5:23:5:34 | ... = ... | normal | 6 |
| obinit.cs:2:18:2:18 | <object initializer> | obinit.cs:5:23:5:23 | this access | obinit.cs:5:27:5:34 | "source" | normal | 4 |
| obinit.cs:2:18:2:18 | <object initializer> | obinit.cs:5:27:5:34 | "source" | obinit.cs:5:23:5:23 | access to field s | normal | 5 |
| obinit.cs:7:16:7:16 | A | obinit.cs:7:16:7:16 | call to constructor Object | obinit.cs:7:20:7:22 | {...} | normal | 2 |
| obinit.cs:7:16:7:16 | A | obinit.cs:7:16:7:16 | call to method <object initializer> | obinit.cs:7:16:7:16 | call to constructor Object | normal | 1 |
| obinit.cs:7:16:7:16 | A | obinit.cs:7:16:7:16 | this access | obinit.cs:7:16:7:16 | call to method <object initializer> | normal | 0 |

View File

@@ -31,10 +31,12 @@
| ControlFlow.cs:10:9:10:87 | ...; | ControlFlow.cs:10:9:10:86 | Call (unknown target) |
| ControlFlow.cs:10:9:10:87 | ...; | ControlFlow.cs:10:9:10:86 | object creation of type <unknown type> |
| ControlFlow.cs:10:35:10:86 | { ..., ... } | ControlFlow.cs:5:10:5:10 | exit F (normal) |
| ControlFlow.cs:10:37:10:47 | access to array element | ControlFlow.cs:10:37:10:62 | ... = ... |
| ControlFlow.cs:10:37:10:62 | ... = ... | ControlFlow.cs:10:79:10:79 | access to local variable v |
| ControlFlow.cs:10:51:10:62 | access to field Empty | ControlFlow.cs:10:37:10:62 | ... = ... |
| ControlFlow.cs:10:51:10:62 | access to field Empty | ControlFlow.cs:10:37:10:47 | access to array element |
| ControlFlow.cs:10:65:10:75 | access to array element | ControlFlow.cs:10:65:10:84 | ... = ... |
| ControlFlow.cs:10:65:10:84 | ... = ... | ControlFlow.cs:10:35:10:86 | { ..., ... } |
| ControlFlow.cs:10:79:10:79 | access to local variable v | ControlFlow.cs:10:79:10:84 | Call (unknown target) |
| ControlFlow.cs:10:79:10:79 | access to local variable v | ControlFlow.cs:10:79:10:84 | access to property (unknown) |
| ControlFlow.cs:10:79:10:84 | Call (unknown target) | ControlFlow.cs:10:65:10:84 | ... = ... |
| ControlFlow.cs:10:79:10:84 | access to property (unknown) | ControlFlow.cs:10:65:10:84 | ... = ... |
| ControlFlow.cs:10:79:10:84 | Call (unknown target) | ControlFlow.cs:10:65:10:75 | access to array element |
| ControlFlow.cs:10:79:10:84 | access to property (unknown) | ControlFlow.cs:10:65:10:75 | access to array element |

View File

@@ -0,0 +1,11 @@
using System;
using System.ComponentModel;
class ConditionalAccessTest
{
void M1(object o)
{
var t = o?.GetType();
Console.WriteLine(t.FullName); // $ Alert[cs/dereferenced-value-may-be-null]
}
}

View File

@@ -51,6 +51,7 @@
| C.cs:229:22:229:30 | ... != ... | C.cs:229:22:229:22 | access to local variable s |
| C.cs:235:24:235:32 | ... == ... | C.cs:235:24:235:24 | access to local variable s |
| C.cs:235:24:235:32 | ... == ... | C.cs:235:29:235:32 | null |
| ConditionalAccess.cs:8:17:8:17 | access to parameter o | ConditionalAccess.cs:8:17:8:17 | access to parameter o |
| D.cs:28:13:28:25 | ... != ... | D.cs:28:13:28:17 | access to parameter param |
| D.cs:38:13:38:21 | ... == ... | D.cs:38:13:38:13 | access to parameter x |
| D.cs:39:16:39:24 | ... == ... | D.cs:39:16:39:16 | access to parameter x |

View File

@@ -6,6 +6,7 @@
| C.cs:203:13:203:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:185:13:185:13 | s | s | C.cs:204:13:204:20 | ... = ... | this |
| C.cs:223:9:223:9 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:210:13:210:13 | s | s | C.cs:222:13:222:20 | ... = ... | this |
| C.cs:242:13:242:13 | access to local variable s | Variable $@ may be null at this access because of $@ assignment. | C.cs:228:16:228:16 | s | s | C.cs:240:24:240:31 | ... = ... | this |
| ConditionalAccess.cs:9:27:9:27 | access to local variable t | Variable $@ may be null at this access because of $@ assignment. | ConditionalAccess.cs:8:13:8:13 | t | t | ConditionalAccess.cs:8:13:8:28 | Type t = ... | this |
| D.cs:23:9:23:13 | access to parameter param | Variable $@ may be null at this access because of $@ null argument. | D.cs:21:32:21:36 | param | param | D.cs:17:17:17:20 | null | this |
| D.cs:32:9:32:13 | access to parameter param | Variable $@ may be null at this access as suggested by $@ null check. | D.cs:26:32:26:36 | param | param | D.cs:28:13:28:25 | ... != ... | this |
| D.cs:73:13:73:14 | access to local variable o7 | Variable $@ may be null at this access because of $@ assignment. | D.cs:68:13:68:14 | o7 | o7 | D.cs:68:13:68:34 | String o7 = ... | this |

View File

@@ -88,7 +88,7 @@ JavaScript/TypeScript
* Data flow is now tracked through the :code:`Promise.try` and :code:`Array.prototype.with` functions.
* Query :code:`js/index-out-of-bounds` no longer produces a false-positive when a strictly-less-than check overrides a previous less-than-or-equal test.
* The query :code:`js/remote-property-injection` now detects property injection vulnerabilities through object enumeration patterns such as :code:`Object.keys()`.
* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query <https://github.com/github/codeql/pull/14342>`__\ !
* The query "Permissive CORS configuration" (:code:`js/cors-permissive-configuration`) has been promoted from experimental and is now part of the default security suite. Thank you to @maikypedia who `submitted the original experimental query <https://github.com/github/codeql/pull/14342>`__!
Python
""""""
@@ -126,7 +126,7 @@ Golang
""""""
* The second argument of the :code:`CreateTemp` function, from the :code:`os` package, is no longer a path-injection sink due to proper sanitization by Go.
* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or :code:`\` to the beginning.
* The query "Uncontrolled data used in path expression" (:code:`go/path-injection`) now detects sanitizing a path by adding :code:`os.PathSeparator` or ``\`` to the beginning.
Java/Kotlin
"""""""""""

View File

@@ -1,25 +0,0 @@
.. _codeql-cli-2.23.9:
==========================
CodeQL 2.23.9 (2026-01-09)
==========================
.. contents:: Contents
:depth: 2
:local:
:backlinks: none
This is an overview of changes in the CodeQL CLI and relevant CodeQL query and library packs. For additional updates on changes to the CodeQL code scanning experience, check out the `code scanning section on the GitHub blog <https://github.blog/tag/code-scanning/>`__, `relevant GitHub Changelog updates <https://github.blog/changelog/label/application-security/>`__, `changes in the CodeQL extension for Visual Studio Code <https://marketplace.visualstudio.com/items/GitHub.vscode-codeql/changelog>`__, and the `CodeQL Action changelog <https://github.com/github/codeql-action/blob/main/CHANGELOG.md>`__.
Security Coverage
-----------------
CodeQL 2.23.9 runs a total of 491 security queries when configured with the Default suite (covering 166 CWE). The Extended suite enables an additional 135 queries (covering 35 more CWE).
CodeQL CLI
----------
Deprecations
~~~~~~~~~~~~
* Support for Kotlin version 1.6 and 1.7 has been deprecated and will be removed from CodeQL version 2.24.1. Starting with version 2.24.1, users will need to use Kotlin version >= 1.8 to extract Kotlin databases.

View File

@@ -11,7 +11,6 @@ A list of queries for each suite and language `is available here <https://docs.g
.. toctree::
:maxdepth: 1
codeql-cli-2.23.9
codeql-cli-2.23.8
codeql-cli-2.23.7
codeql-cli-2.23.6

View File

@@ -17,7 +17,7 @@ For example, to declare a module ``M`` as private, you could use:
Note that some annotations act on an entity itself, whilst others act on a particular *name* for the entity:
- Act on an **entity**: ``abstract``, ``bindingset``, ``cached``, ``extensible``, ``external``, ``language``,
``override``, ``pragma``, and ``transient``
``overlay``, ``override``, ``pragma``, and ``transient``
- Act on a **name**: ``additional``, ``deprecated``, ``final``, ``library``, ``private``, and ``query``
For example, if you annotate an entity with ``private``, then only that particular name is
@@ -502,6 +502,193 @@ The ``bindingset`` annotation takes a comma-separated list of variables.
For more information, see ":ref:`predicate-binding`."
- When you annotate a class, each variable must be ``this`` or a field in the class.
.. _overlay:
Overlay annotations
===================
Overlay annotations control how predicates behave during **overlay evaluation**, a feature
that enables efficient incremental analysis of codebases.
In overlay evaluation, a *base database* is created from one version of a codebase, and an
*overlay database* is created by combining the base database with changes from a newer
version (such as a pull request). The goal is to analyze the overlay database as if it
were a fully extracted database at the newer commit, while reusing as much cached data
from the base database as possible. Ideally, analysis time is proportional to the size
of the diff rather than the full codebase.
To achieve this, predicates are divided into *local* and *global* categories, with global
being the default. Local predicates are evaluated independently on base and overlay data,
and thus typically take time proportional to the diff size; global predicates operate on
the combined data, and thus take time proportional to the full codebase. When a global
predicate calls a local predicate, results from both the base and overlay evaluations of
the local predicate are combined, with stale base results filtered out through a process
called "discarding".
Overlay evaluation is primarily used internally by GitHub Code Scanning to speed up
pull request analysis. Most QL developers do not need to use these annotations directly,
but understanding them can help resolve compilation errors that may occur when overlay
support is enabled for a language.
.. note::
Overlay annotations only affect evaluation when overlay compilation is enabled
(via ``compileForOverlayEval: true`` in ``qlpack.yml``) and the evaluator is running
in overlay mode. This setting is typically only needed in the language's library pack;
custom query packs do not need it. Outside of overlay mode, these annotations are
validated but have no effect on evaluation.
``overlay[local]``
------------------
**Available for**: |modules|, |classes|, |algebraic datatypes|, |type unions|, |characteristic predicates|, |member predicates|, |non-member predicates|
The ``overlay[local]`` annotation declares that a predicate is local. Local predicates are
evaluated separately on base and overlay data and may only depend on other local predicates.
The compiler reports an error if a local predicate depends on a global predicate.
.. code-block:: ql
// All dependencies are database extensionals, so this can be local
overlay[local]
predicate stmtInFile(@stmt s, string path) {
exists(@file f, @location loc |
hasLocation(s, loc) and
locations_default(loc, f, _, _, _, _) and
files(f, path)
)
}
``overlay[local?]``
-------------------
**Available for**: |modules|, |classes|, |algebraic datatypes|, |type unions|, |characteristic predicates|, |member predicates|, |non-member predicates|
The ``overlay[local?]`` annotation declares that a predicate should be local if all of
its dependencies are local, and global otherwise. This is particularly useful in
parameterized modules, where different instantiations may have different locality
depending on the module parameters.
.. code-block:: ql
// Locality depends on whether Expr.getType() and Type.getName() are local
overlay[local?]
predicate exprTypeName(Expr e, string name) {
name = e.getType().getName()
}
``overlay[global]``
-------------------
**Available for**: |modules|, |classes|, |algebraic datatypes|, |type unions|, |characteristic predicates|, |member predicates|, |non-member predicates|
The ``overlay[global]`` annotation explicitly declares that a predicate is global. This
is the default behavior, so this annotation is typically used to override an inherited
``overlay[local]`` or ``overlay[local?]`` annotation from an enclosing module or class.
See `Annotation inheritance`_ for an example.
``overlay[caller]``
-------------------
**Available for**: |modules|, |classes|, |algebraic datatypes|, |type unions|, |characteristic predicates|, |member predicates|, |non-member predicates|
The ``overlay[caller]`` annotation declares that the locality of a predicate depends on
its caller. The compiler may internally duplicate the predicate, creating separate local
and global versions. Local callers use the local version; global callers use the global
version.
.. code-block:: ql
overlay[caller]
predicate utilityPredicate(int x) {
x in [1..100]
}
``overlay[caller?]``
--------------------
**Available for**: |modules|, |classes|, |algebraic datatypes|, |type unions|, |characteristic predicates|, |member predicates|, |non-member predicates|
The ``overlay[caller?]`` annotation is like ``overlay[caller]``, but only applies if none
of the predicate's dependencies are global. If any dependency is global, the predicate
becomes global regardless of its callers, and calling it from a local predicate will
result in a compilation error. Like ``overlay[local?]``, this is useful in parameterized
modules where locality may vary between instantiations.
``overlay[discard_entity]``
---------------------------
**Available for**: |non-member predicates| (unary predicates on database types only)
The ``overlay[discard_entity]`` annotation designates an *entity discard predicate*.
These predicates identify database entities that should be filtered out from cached base
results when combining with overlay results during overlay evaluation.
Entity discard predicates must be:
- Unary predicates (taking exactly one argument)
- Defined on a database type (a type from the database schema, prefixed with ``@``)
- Only dependent on local predicates and other non-discarding predicates
.. code-block:: ql
overlay[discard_entity]
private predicate discardExpr(@expr e) {
exists(string file | discardableExpr(file, e) and overlayChangedFiles(file))
}
overlay[local]
private predicate discardableExpr(string file, @expr e) {
not isOverlay() and
file = getFile(e)
}
overlay[local]
predicate isOverlay() { databaseMetadata("isOverlay", "true") }
Annotation inheritance
----------------------
Overlay annotations can be applied to modules and types, in which case they are
inherited by enclosed declarations. Declarations without explicit overlay annotations
inherit from their innermost enclosing declaration that has an overlay annotation.
.. code-block:: ql
overlay[local?]
module M {
predicate foo(@expr x) { ... } // Inherits overlay[local?]
class C extends @expr {
predicate bar() { ... } // Inherits overlay[local?]
overlay[global]
predicate baz() { ... } // Explicitly global
}
}
Resolving overlay-related errors
--------------------------------
When overlay support is enabled for a language, you may encounter compilation errors in
custom QL libraries or queries. Here are common errors and their solutions:
**"Declaration is annotated overlay[local] but depends on global entity"**
A predicate marked ``overlay[local]`` (or ``overlay[caller]``) depends on a global predicate.
Solutions:
- Change the annotation to ``overlay[local?]`` (or ``overlay[caller?]``) if the predicate doesn't strictly need to be local
- Add appropriate overlay annotations to the dependency chain to make dependencies local
- Use the ``forceLocal`` higher-order predicate if you need to call global code from local code (advanced)
**"Cannot apply forceLocal to relation that is annotated overlay[...]"**
The ``forceLocal`` higher-order predicate cannot be applied to predicates that have overlay
annotations such as ``overlay[local]``, ``overlay[local?]``, ``overlay[caller]``, or
``overlay[caller?]``. The input to ``forceLocal`` must be a predicate without such annotations
(i.e., a global predicate or one with ``overlay[global]``).
.. Links to use in substitutions
.. |classes| replace:: :ref:`classes <classes>`

View File

@@ -776,6 +776,7 @@ Various kinds of syntax can have *annotations* applied to them. Annotations are
argsAnnotation ::= "pragma" "[" ("inline" | "inline_late" | "noinline" | "nomagic" | "noopt" | "assume_small_delta") "]"
| "language" "[" "monotonicAggregates" "]"
| "bindingset" "[" (variable ( "," variable)*)? "]"
| "overlay" "[" ("local" | "local?" | "global" | "caller" | "caller?" | "discard_entity") "]"
Each simple annotation adds a same-named attribute to the syntactic entity it precedes. For example, if a class is preceded by the ``abstract`` annotation, then the class is said to be abstract.
@@ -873,6 +874,26 @@ A predicate may have several different binding sets, which can be stated by usin
The ``bindingset`` pragma is usable with type signatures and predicate signatures, but not with module signatures.
The parameterized annotation ``overlay`` controls predicate behavior during overlay evaluation, which is a feature for incremental analysis. Overlay annotations apply at the scope level, and are inherited by nested scopes.
+---------------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+
| Overlay | Classes | Characters | Member predicates | Non-member predicates | Imports | Fields | Modules | Aliases |
+=====================+=========+============+===================+=======================+=========+========+=========+=========+
| ``local`` | yes | yes | yes | yes | | | yes | |
+---------------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+
| ``local?`` | yes | yes | yes | yes | | | yes | |
+---------------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+
| ``global`` | yes | yes | yes | yes | | | yes | |
+---------------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+
| ``caller`` | yes | yes | yes | yes | | | yes | |
+---------------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+
| ``caller?`` | yes | yes | yes | yes | | | yes | |
+---------------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+
| ``discard_entity`` | | | | yes | | | | |
+---------------------+---------+------------+-------------------+-----------------------+---------+--------+---------+---------+
The ``overlay[discard_entity]`` annotation is only valid on unary non-member predicates whose argument is a database type.
QLDoc
-----

View File

@@ -35,7 +35,7 @@ class QLLexer(RegexLexer):
# Keywords
(r'\b(boolean|date|float|int|string)\b', Keyword.Type),
(r'\b(abstract|cached|deprecated|external|final|library|override|private|query'
r'|(pragma|language|bindingset)\[\w*(,\s*\w*)*\])\s',
r'|(pragma|language|bindingset|overlay)\[\w*\??(,\s*\w*\??)*\])\s',
Keyword.Reserved),
(words((
'and', 'any', 'as', 'asc', 'avg', 'by', 'class','concat', 'count',

View File

@@ -1,5 +1,5 @@
name: codeql-go-consistency-queries
version: 1.0.40
version: 1.0.41-dev
groups:
- go
- queries

View File

@@ -1,5 +1,5 @@
name: codeql/go-all
version: 6.0.0
version: 6.0.1-dev
groups: go
dbscheme: go.dbscheme
extractor: go

View File

@@ -1,5 +1,5 @@
name: codeql/go-queries
version: 1.5.4
version: 1.5.5-dev
groups:
- go
- queries

View File

@@ -1,5 +1,5 @@
name: codeql/java-all
version: 7.8.4
version: 7.8.5-dev
groups: java
dbscheme: config/semmlecode.dbscheme
extractor: java

View File

@@ -1,5 +1,5 @@
name: codeql/java-queries
version: 1.10.5
version: 1.10.6-dev
groups:
- java
- queries

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
description: Sections for databaseMetadata and overlayChangedFiles
compatibility: full

View File

@@ -1,5 +1,5 @@
name: codeql/javascript-all
version: 2.6.20
version: 2.6.21-dev
groups: javascript
dbscheme: semmlecode.javascript.dbscheme
extractor: javascript

View File

@@ -1195,11 +1195,23 @@ configLocations(
@configLocatable = @config | @configName | @configValue;
/*- Database metadata -*/
/**
* The CLI will automatically emit applicable tuples for this table,
* such as `databaseMetadata("isOverlay", "true")` when building an
* overlay database.
*/
databaseMetadata(
string metadataKey: string ref,
string value: string ref
);
/*- Overlay support -*/
/**
* The CLI will automatically emit tuples for each new/modified/deleted file
* when building an overlay database.
*/
overlayChangedFiles(
string path: string ref
);

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
description: Sections for databaseMetadata and overlayChangedFiles
compatibility: full

View File

@@ -1,5 +1,5 @@
name: codeql/javascript-queries
version: 2.3.0
version: 2.3.1-dev
groups:
- javascript
- queries

View File

@@ -1,4 +1,4 @@
name: codeql/suite-helpers
version: 1.0.40
version: 1.0.41-dev
groups: shared
warnOnImplicitThis: true

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
description: Sections for databaseMetadata and overlayChangedFiles
compatibility: full

View File

@@ -40,20 +40,26 @@ externalData(
string value : string ref
);
/*- Database metadata -*/
/**
* The CLI will automatically emit applicable tuples for this table,
* such as `databaseMetadata("isOverlay", "true")` when building an
* overlay database.
*/
databaseMetadata(
string metadataKey: string ref,
string value: string ref
);
/*- Overlay support -*/
/**
* The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`,
* along with an `overlayChangedFiles` tuple for each new/modified/deleted file,
* when building an overlay database, and these can be used by the discard predicates.
* The CLI will automatically emit tuples for each new/modified/deleted file
* when building an overlay database.
*/
databaseMetadata(
string metadataKey : string ref,
string value : string ref
);
overlayChangedFiles(
string path : string ref
string path: string ref
);
/*- DEPRECATED: Snapshot date -*/

View File

@@ -62,6 +62,7 @@ def write(nodes, out):
HEADER = '''/*
* This dbscheme is auto-generated by '%s'.
* Run "make dbscheme" in python/extractor/ to regenerate.
* WARNING: Any modifications to this file will be lost.
* Relations can be changed by modifying master.py or
* by adding rules to dbscheme.template

View File

@@ -471,11 +471,10 @@ Definition getUniqueDefinition(Expr use) {
not result = TLocalDefinition(use)
}
/** A helper class to get suitable locations for attributes */
class NiceLocationExpr extends Expr {
/** Gets a textual representation of this element. */
override string toString() { result = this.(Expr).toString() }
final class FinalExpr = Expr;
/** A helper class to get suitable locations for attributes */
class NiceLocationExpr extends FinalExpr {
/**
* Holds if this element is at the specified location.
* The location spans column `bc` of line `bl` to

View File

@@ -1,5 +1,5 @@
name: codeql/python-all
version: 6.0.0
version: 6.0.1-dev
groups: python
dbscheme: semmlecode.python.dbscheme
extractor: python

View File

@@ -1,5 +1,6 @@
/*
* This dbscheme is auto-generated by 'semmle/dbscheme_gen.py'.
* Run "make dbscheme" in python/extractor/ to regenerate.
* WARNING: Any modifications to this file will be lost.
* Relations can be changed by modifying master.py or
* by adding rules to dbscheme.template
@@ -47,20 +48,26 @@ externalData(
string value : string ref
);
/*- Database metadata -*/
/**
* The CLI will automatically emit applicable tuples for this table,
* such as `databaseMetadata("isOverlay", "true")` when building an
* overlay database.
*/
databaseMetadata(
string metadataKey: string ref,
string value: string ref
);
/*- Overlay support -*/
/**
* The CLI will automatically emit the tuple `databaseMetadata("isOverlay", "true")`,
* along with an `overlayChangedFiles` tuple for each new/modified/deleted file,
* when building an overlay database, and these can be used by the discard predicates.
* The CLI will automatically emit tuples for each new/modified/deleted file
* when building an overlay database.
*/
databaseMetadata(
string metadataKey : string ref,
string value : string ref
);
overlayChangedFiles(
string path : string ref
string path: string ref
);
/*- DEPRECATED: Snapshot date -*/

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
description: Sections for databaseMetadata and overlayChangedFiles
compatibility: full

View File

@@ -3,8 +3,10 @@
import python
import semmle.python.dataflow.new.DataFlow
final class FinalAstNode = AstNode;
/** A looping construct. */
abstract class Loop extends AstNode {
abstract class Loop extends FinalAstNode {
/**
* Gets a loop variable of this loop.
* For example, `x` and `y` in `for x,y in pairs: print(x+y)`
@@ -13,9 +15,9 @@ abstract class Loop extends AstNode {
}
/** A `for` loop. */
private class ForLoop extends Loop, For {
private class ForLoop extends Loop instanceof For {
override Variable getALoopVariable() {
this.getTarget() = result.getAnAccess().getParentNode*() and
this.(For).getTarget() = result.getAnAccess().getParentNode*() and
result.getScope() = this.getScope()
}
}

View File

@@ -59,7 +59,9 @@ predicate ok_to_fail(ImportExpr ie) {
os_specific_import(ie) != get_os()
}
class VersionTest extends ControlFlowNode {
final class FinalControlFlowNode = ControlFlowNode;
class VersionTest extends FinalControlFlowNode {
VersionTest() {
exists(string name |
name.matches("%version%") and
@@ -70,7 +72,7 @@ class VersionTest extends ControlFlowNode {
)
}
override string toString() { result = "VersionTest" }
string toString() { result = "VersionTest" }
}
/** A guard on the version of the Python interpreter */

View File

@@ -1,5 +1,5 @@
name: codeql/python-queries
version: 1.7.5
version: 1.7.6-dev
groups:
- python
- queries

View File

@@ -36,5 +36,10 @@ pub fn run(options: Options) -> std::io::Result<()> {
},
];
generate(languages, options.dbscheme, options.library)
generate(
languages,
options.dbscheme,
options.library,
"run 'scripts/create-extractor-pack.sh' in ql/",
)
}

View File

@@ -1,5 +1,6 @@
// CodeQL database schema for QL
// Automatically generated from the tree-sitter grammar; do not edit
// To regenerate, run 'scripts/create-extractor-pack.sh' in ql/
/*- Files and folders -*/
@@ -109,11 +110,23 @@ yaml_locations(unique int locatable: @yaml_locatable ref,
@yaml_locatable = @yaml_node | @yaml_error;
/*- Database metadata -*/
/**
* The CLI will automatically emit applicable tuples for this table,
* such as `databaseMetadata("isOverlay", "true")` when building an
* overlay database.
*/
databaseMetadata(
string metadataKey: string ref,
string value: string ref
);
/*- Overlay support -*/
/**
* The CLI will automatically emit tuples for each new/modified/deleted file
* when building an overlay database.
*/
overlayChangedFiles(
string path: string ref
);

View File

@@ -42,6 +42,7 @@ tools: $(BIN_FILES)
../target/release/%$(EXE):
cd extractor && cargo build --release
.PHONY: dbscheme
dbscheme:
cd extractor && cargo build --release
../target/release/codeql-extractor-ruby generate --dbscheme ql/lib/ruby.dbscheme --library ql/lib/codeql/ruby/ast/internal/TreeSitter.qll

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
description: Sections for databaseMetadata and overlayChangedFiles
compatibility: full

View File

@@ -28,5 +28,10 @@ pub fn run(options: Options) -> std::io::Result<()> {
},
];
generate(languages, options.dbscheme, options.library)
generate(
languages,
options.dbscheme,
options.library,
"run 'make dbscheme' in ql/ruby/",
)
}

View File

@@ -1,5 +1,5 @@
name: codeql/ruby-all
version: 5.1.8
version: 5.1.9-dev
groups: ruby
extractor: ruby
dbscheme: ruby.dbscheme

View File

@@ -1,5 +1,6 @@
// CodeQL database schema for Ruby
// Automatically generated from the tree-sitter grammar; do not edit
// To regenerate, run 'make dbscheme' in ql/ruby/
/*- Files and folders -*/
@@ -109,11 +110,23 @@ yaml_locations(unique int locatable: @yaml_locatable ref,
@yaml_locatable = @yaml_node | @yaml_error;
/*- Database metadata -*/
/**
* The CLI will automatically emit applicable tuples for this table,
* such as `databaseMetadata("isOverlay", "true")` when building an
* overlay database.
*/
databaseMetadata(
string metadataKey: string ref,
string value: string ref
);
/*- Overlay support -*/
/**
* The CLI will automatically emit tuples for each new/modified/deleted file
* when building an overlay database.
*/
overlayChangedFiles(
string path: string ref
);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
description: Sections for databaseMetadata and overlayChangedFiles
compatibility: full

View File

@@ -1,5 +1,5 @@
name: codeql/ruby-queries
version: 1.5.5
version: 1.5.6-dev
groups:
- ruby
- queries

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
description: Sections for databaseMetadata and overlayChangedFiles
compatibility: full

View File

@@ -0,0 +1,4 @@
---
category: minorAnalysis
---
* Added type inference support for the `FnMut(..) -> ..` and `Fn(..) -> ..` traits. They now work in type parameter bounds and are implemented by closures.

View File

@@ -143,23 +143,48 @@ class FutureTrait extends Trait {
TypeAlias getOutputType() { result = this.(TraitItemNode).getAssocItem("Output") }
}
/** A function trait `FnOnce`, `FnMut`, or `Fn`. */
abstract private class AnyFnTraitImpl extends Trait {
/** Gets the `Args` type parameter of this trait. */
TypeParam getTypeParam() { result = this.getGenericParamList().getGenericParam(0) }
}
final class AnyFnTrait = AnyFnTraitImpl;
/**
* The [`FnOnce` trait][1].
*
* [1]: https://doc.rust-lang.org/std/ops/trait.FnOnce.html
*/
class FnOnceTrait extends Trait {
class FnOnceTrait extends AnyFnTraitImpl {
pragma[nomagic]
FnOnceTrait() { this.getCanonicalPath() = "core::ops::function::FnOnce" }
/** Gets the type parameter of this trait. */
TypeParam getTypeParam() { result = this.getGenericParamList().getGenericParam(0) }
/** Gets the `Output` associated type. */
pragma[nomagic]
TypeAlias getOutputType() { result = this.(TraitItemNode).getAssocItem("Output") }
}
/**
* The [`FnMut` trait][1].
*
* [1]: https://doc.rust-lang.org/std/ops/trait.FnMut.html
*/
class FnMutTrait extends AnyFnTraitImpl {
pragma[nomagic]
FnMutTrait() { this.getCanonicalPath() = "core::ops::function::FnMut" }
}
/**
* The [`Fn` trait][1].
*
* [1]: https://doc.rust-lang.org/std/ops/trait.Fn.html
*/
class FnTrait extends AnyFnTraitImpl {
pragma[nomagic]
FnTrait() { this.getCanonicalPath() = "core::ops::function::Fn" }
}
/**
* The [`Iterator` trait][1].
*

View File

@@ -3827,16 +3827,29 @@ private Type invokedClosureFnTypeAt(InvokedClosureExpr ce, TypePath path) {
_, path, result)
}
/** Gets the path to a closure's return type. */
private TypePath closureReturnPath() {
result = TypePath::singleton(getDynTraitTypeParameter(any(FnOnceTrait t).getOutputType()))
/**
* Gets the root type of a closure.
*
* We model closures as `dyn Fn` trait object types. A closure might implement
* only `Fn`, `FnMut`, or `FnOnce`. But since `Fn` is a subtrait of the others,
* giving closures the type `dyn Fn` works well in practice -- even if not
* entirely accurate.
*/
private DynTraitType closureRootType() {
result = TDynTraitType(any(FnTrait t)) // always exists because of the mention in `builtins/mentions.rs`
}
/** Gets the path to a closure with arity `arity`s `index`th parameter type. */
/** Gets the path to a closure's return type. */
private TypePath closureReturnPath() {
result =
TypePath::singleton(TDynTraitTypeParameter(any(FnTrait t), any(FnOnceTrait t).getOutputType()))
}
/** Gets the path to a closure with arity `arity`'s `index`th parameter type. */
pragma[nomagic]
private TypePath closureParameterPath(int arity, int index) {
result =
TypePath::cons(TDynTraitTypeParameter(_, any(FnOnceTrait t).getTypeParam()),
TypePath::cons(TDynTraitTypeParameter(_, any(FnTrait t).getTypeParam()),
TypePath::singleton(getTupleTypeParameter(arity, index)))
}
@@ -3874,9 +3887,7 @@ private Type inferDynamicCallExprType(Expr n, TypePath path) {
or
// _If_ the invoked expression has the type of a closure, then we propagate
// the surrounding types into the closure.
exists(int arity, TypePath path0 |
ce.getTypeAt(TypePath::nil()).(DynTraitType).getTrait() instanceof FnOnceTrait
|
exists(int arity, TypePath path0 | ce.getTypeAt(TypePath::nil()) = closureRootType() |
// Propagate the type of arguments to the parameter types of closure
exists(int index, ArgList args |
n = ce and
@@ -3900,10 +3911,10 @@ private Type inferClosureExprType(AstNode n, TypePath path) {
exists(ClosureExpr ce |
n = ce and
path.isEmpty() and
result = TDynTraitType(any(FnOnceTrait t)) // always exists because of the mention in `builtins/mentions.rs`
result = closureRootType()
or
n = ce and
path = TypePath::singleton(TDynTraitTypeParameter(_, any(FnOnceTrait t).getTypeParam())) and
path = TypePath::singleton(TDynTraitTypeParameter(_, any(FnTrait t).getTypeParam())) and
result.(TupleType).getArity() = ce.getNumberOfParams()
or
// Propagate return type annotation to body

View File

@@ -213,7 +213,7 @@ class NonAliasPathTypeMention extends PathTypeMention {
// associated types of `Fn` and `FnMut` yet.
//
// [1]: https://doc.rust-lang.org/reference/paths.html#grammar-TypePathFn
exists(FnOnceTrait t, PathSegment s |
exists(AnyFnTrait t, PathSegment s |
t = resolved and
s = this.getSegment() and
s.hasParenthesizedArgList()
@@ -221,7 +221,7 @@ class NonAliasPathTypeMention extends PathTypeMention {
tp = TTypeParamTypeParameter(t.getTypeParam()) and
result = s.getParenthesizedArgList().(TypeMention).resolveTypeAt(path)
or
tp = TAssociatedTypeTypeParameter(t, t.getOutputType()) and
tp = TAssociatedTypeTypeParameter(t, any(FnOnceTrait tr).getOutputType()) and
(
result = s.getRetType().getTypeRepr().(TypeMention).resolveTypeAt(path)
or

View File

@@ -1,5 +1,5 @@
name: codeql/rust-all
version: 0.2.4
version: 0.2.5-dev
groups: rust
extractor: rust
dbscheme: rust.dbscheme

View File

@@ -109,11 +109,23 @@ yaml_locations(unique int locatable: @yaml_locatable ref,
@yaml_locatable = @yaml_node | @yaml_error;
/*- Database metadata -*/
/**
* The CLI will automatically emit applicable tuples for this table,
* such as `databaseMetadata("isOverlay", "true")` when building an
* overlay database.
*/
databaseMetadata(
string metadataKey: string ref,
string value: string ref
);
/*- Overlay support -*/
/**
* The CLI will automatically emit tuples for each new/modified/deleted file
* when building an overlay database.
*/
overlayChangedFiles(
string path: string ref
);

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