mirror of
https://github.com/github/codeql.git
synced 2026-04-25 00:35:20 +02:00
Merge pull request #21452 from michaelnebel/csharp/expandedassignment
C#: Remove expanded assignments.
This commit is contained in:
@@ -0,0 +1,177 @@
|
||||
class Expr extends @expr {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class Location extends @location {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
newtype TAddedElement =
|
||||
TAssignment(CompoundAssignmentExpr e) or
|
||||
TLhs(CompoundAssignmentExpr e) or
|
||||
TRhs(CompoundAssignmentExpr e)
|
||||
|
||||
module Fresh = QlBuiltins::NewEntity<TAddedElement>;
|
||||
|
||||
class TNewExpr = @expr or Fresh::EntityId;
|
||||
|
||||
class NewExpr extends TNewExpr {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class TNewControlFlowElement = @control_flow_element or Fresh::EntityId;
|
||||
|
||||
class NewControlFlowElement extends TNewControlFlowElement {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class TypeOrRef extends @type_or_ref {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class Callable extends @callable {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class Accessible extends @accessible {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
predicate assignmentKind(int kind) {
|
||||
// | 63 = @simple_assign_expr
|
||||
// | 80 = @add_event_expr
|
||||
// | 81 = @remove_event_expr
|
||||
// | 83 = @local_var_decl_expr
|
||||
kind = [63, 80, 81, 83]
|
||||
}
|
||||
|
||||
predicate compoundAssignmentKind(int kind) {
|
||||
// | 64 = @assign_add_expr
|
||||
// | 65 = @assign_sub_expr
|
||||
// | 66 = @assign_mul_expr
|
||||
// | 67 = @assign_div_expr
|
||||
// | 68 = @assign_rem_expr
|
||||
// | 69 = @assign_and_expr
|
||||
// | 70 = @assign_xor_expr
|
||||
// | 71 = @assign_or_expr
|
||||
// | 72 = @assign_lshift_expr
|
||||
// | 73 = @assign_rshift_expr
|
||||
// | 119 = @assign_coalesce_expr
|
||||
// | 134 = @assign_urshift_expr
|
||||
kind = [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 119, 134]
|
||||
}
|
||||
|
||||
int getOperatorKindFromAssignmentKind(int kind) {
|
||||
kind = 64 and result = 44 // @assign_add_expr -> @add_expr
|
||||
or
|
||||
kind = 65 and result = 45 // @assign_sub_expr -> @sub_expr
|
||||
or
|
||||
kind = 66 and result = 41 // @assign_mul_expr -> @mul_expr
|
||||
or
|
||||
kind = 67 and result = 42 // @assign_div_expr -> @div_expr
|
||||
or
|
||||
kind = 68 and result = 43 // @assign_rem_expr -> @rem_expr
|
||||
or
|
||||
kind = 69 and result = 54 // @assign_and_expr -> @bit_and_expr
|
||||
or
|
||||
kind = 70 and result = 55 // @assign_xor_expr -> @bit_xor_expr
|
||||
or
|
||||
kind = 71 and result = 56 // @assign_or_expr -> @bit_or_expr
|
||||
or
|
||||
kind = 72 and result = 46 // @assign_lshift_expr -> @lshift_expr
|
||||
or
|
||||
kind = 73 and result = 47 // @assign_rshift_expr -> @rshift_expr
|
||||
or
|
||||
kind = 119 and result = 61 // @assign_coalesce_expr -> @coalesce_expr
|
||||
or
|
||||
kind = 134 and result = 133 // @assign_urshift_expr -> @urshift_expr
|
||||
}
|
||||
|
||||
predicate isAssignment(Expr ass) {
|
||||
exists(int kind | assignmentKind(kind) | expressions(ass, kind, _))
|
||||
}
|
||||
|
||||
class CompoundAssignmentExpr extends Expr {
|
||||
CompoundAssignmentExpr() {
|
||||
exists(int kind | compoundAssignmentKind(kind) | expressions(this, kind, _))
|
||||
}
|
||||
}
|
||||
|
||||
query predicate new_expressions(NewExpr e, int kind, TypeOrRef t) {
|
||||
expressions(e, kind, t)
|
||||
or
|
||||
// Introduce expanded expression nodes.
|
||||
exists(CompoundAssignmentExpr compound, int kind0, Expr e1, int kind1 |
|
||||
expressions(compound, kind0, t) and
|
||||
expressions(e1, kind1, _) and
|
||||
expr_parent(e1, 0, compound)
|
||||
|
|
||||
Fresh::map(TAssignment(compound)) = e and kind = 63
|
||||
or
|
||||
Fresh::map(TLhs(compound)) = e and kind = kind1
|
||||
or
|
||||
Fresh::map(TRhs(compound)) = e and kind = getOperatorKindFromAssignmentKind(kind0)
|
||||
)
|
||||
}
|
||||
|
||||
query predicate new_expr_parent(NewExpr e, int child, NewControlFlowElement parent) {
|
||||
if isAssignment(parent)
|
||||
then
|
||||
// Swap children for assignments, local variable declarations and add/remove event.
|
||||
child = 0 and expr_parent(e, 1, parent)
|
||||
or
|
||||
child = 1 and expr_parent(e, 0, parent)
|
||||
else (
|
||||
exists(CompoundAssignmentExpr compound |
|
||||
Fresh::map(TAssignment(compound)) = e and child = 2 and parent = compound
|
||||
or
|
||||
Fresh::map(TLhs(compound)) = e and child = 1 and parent = Fresh::map(TAssignment(compound))
|
||||
or
|
||||
Fresh::map(TRhs(compound)) = e and child = 0 and parent = Fresh::map(TAssignment(compound))
|
||||
or
|
||||
expr_parent(e, child, compound) and parent = Fresh::map(TRhs(compound))
|
||||
)
|
||||
or
|
||||
// Copy the expr_parent relation except for compound assignment edges.
|
||||
expr_parent(e, child, parent) and not parent instanceof CompoundAssignmentExpr
|
||||
)
|
||||
}
|
||||
|
||||
query predicate new_expr_location(NewExpr e, Location loc) {
|
||||
expr_location(e, loc)
|
||||
or
|
||||
exists(CompoundAssignmentExpr compound |
|
||||
Fresh::map(TAssignment(compound)) = e and expr_location(compound, loc)
|
||||
or
|
||||
Fresh::map(TLhs(compound)) = e and
|
||||
exists(Expr child | expr_location(child, loc) and expr_parent(child, 0, compound))
|
||||
or
|
||||
Fresh::map(TRhs(compound)) = e and expr_location(compound, loc)
|
||||
)
|
||||
}
|
||||
|
||||
query predicate new_expr_call(NewExpr e, Callable c) {
|
||||
expr_call(e, c) and not e instanceof CompoundAssignmentExpr
|
||||
or
|
||||
exists(CompoundAssignmentExpr compound |
|
||||
Fresh::map(TRhs(compound)) = e and expr_call(compound, c)
|
||||
)
|
||||
}
|
||||
|
||||
query predicate new_dynamic_member_name(NewExpr e, string name) {
|
||||
dynamic_member_name(e, name) and not e instanceof CompoundAssignmentExpr
|
||||
or
|
||||
exists(CompoundAssignmentExpr compound |
|
||||
Fresh::map(TRhs(compound)) = e and dynamic_member_name(compound, name)
|
||||
)
|
||||
}
|
||||
|
||||
query predicate new_expr_access(NewExpr e, Accessible a) {
|
||||
expr_access(e, a)
|
||||
or
|
||||
exists(CompoundAssignmentExpr compound, Expr access |
|
||||
expr_parent(access, 0, compound) and
|
||||
expr_access(access, a) and
|
||||
Fresh::map(TLhs(compound)) = e
|
||||
)
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
description: Remove operation kinds for operations, introduce expanded assignments and rotate assignment child expressions.
|
||||
compatibility: partial
|
||||
expr_parent.rel: run assignments.ql new_expr_parent
|
||||
expressions.rel: run assignments.ql new_expressions
|
||||
expr_location.rel: run assignments.ql new_expr_location
|
||||
expr_call.rel: run assignments.ql new_expr_call
|
||||
dynamic_member_name.rel: run assignments.ql new_dynamic_member_name
|
||||
expr_access.rel: run assignments.ql new_expr_access
|
||||
@@ -22,26 +22,12 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
|
||||
protected override void PopulateExpression(TextWriter trapFile)
|
||||
{
|
||||
var operatorKind = OperatorKind;
|
||||
if (operatorKind.HasValue)
|
||||
{
|
||||
// Convert assignment such as `a += b` into `a = a + b`.
|
||||
var simpleAssignExpr = new Expression(new ExpressionInfo(Context, Type, Location, ExprKind.SIMPLE_ASSIGN, this, 2, isCompilerGenerated: true, null));
|
||||
Create(Context, Syntax.Left, simpleAssignExpr, 1);
|
||||
var opexpr = new Expression(new ExpressionInfo(Context, Type, Location, operatorKind.Value, simpleAssignExpr, 0, isCompilerGenerated: true, null));
|
||||
Create(Context, Syntax.Left, opexpr, 0, isCompilerGenerated: true);
|
||||
Create(Context, Syntax.Right, opexpr, 1);
|
||||
opexpr.OperatorCall(trapFile, Syntax);
|
||||
}
|
||||
else
|
||||
{
|
||||
Create(Context, Syntax.Left, this, 1);
|
||||
Create(Context, Syntax.Right, this, 0);
|
||||
Create(Context, Syntax.Left, this, 0);
|
||||
Create(Context, Syntax.Right, this, 1);
|
||||
|
||||
if (Kind == ExprKind.ADD_EVENT || Kind == ExprKind.REMOVE_EVENT)
|
||||
{
|
||||
OperatorCall(trapFile, Syntax);
|
||||
}
|
||||
if (Kind != ExprKind.SIMPLE_ASSIGN && Kind != ExprKind.ASSIGN_COALESCE)
|
||||
{
|
||||
OperatorCall(trapFile, Syntax);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -108,56 +94,5 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
|
||||
return kind;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the kind of this assignment operator (<code>null</code> if the
|
||||
/// assignment is not an assignment operator). For example, the operator
|
||||
/// kind of `*=` is `*`.
|
||||
/// </summary>
|
||||
private ExprKind? OperatorKind
|
||||
{
|
||||
get
|
||||
{
|
||||
var kind = Kind;
|
||||
if (kind == ExprKind.REMOVE_EVENT || kind == ExprKind.ADD_EVENT || kind == ExprKind.SIMPLE_ASSIGN)
|
||||
return null;
|
||||
|
||||
if (CallType.AdjustKind(kind) == ExprKind.OPERATOR_INVOCATION)
|
||||
return ExprKind.OPERATOR_INVOCATION;
|
||||
|
||||
switch (kind)
|
||||
{
|
||||
case ExprKind.ASSIGN_ADD:
|
||||
return ExprKind.ADD;
|
||||
case ExprKind.ASSIGN_AND:
|
||||
return ExprKind.BIT_AND;
|
||||
case ExprKind.ASSIGN_DIV:
|
||||
return ExprKind.DIV;
|
||||
case ExprKind.ASSIGN_LSHIFT:
|
||||
return ExprKind.LSHIFT;
|
||||
case ExprKind.ASSIGN_MUL:
|
||||
return ExprKind.MUL;
|
||||
case ExprKind.ASSIGN_OR:
|
||||
return ExprKind.BIT_OR;
|
||||
case ExprKind.ASSIGN_REM:
|
||||
return ExprKind.REM;
|
||||
case ExprKind.ASSIGN_RSHIFT:
|
||||
return ExprKind.RSHIFT;
|
||||
case ExprKind.ASSIGN_URSHIFT:
|
||||
return ExprKind.URSHIFT;
|
||||
case ExprKind.ASSIGN_SUB:
|
||||
return ExprKind.SUB;
|
||||
case ExprKind.ASSIGN_XOR:
|
||||
return ExprKind.BIT_XOR;
|
||||
case ExprKind.ASSIGN_COALESCE:
|
||||
return ExprKind.NULL_COALESCING;
|
||||
default:
|
||||
Context.ModelError(Syntax, $"Couldn't unfold assignment of type {kind}");
|
||||
return ExprKind.UNKNOWN;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public new CallType CallType => GetCallType(Context, Syntax);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -83,8 +83,22 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
{
|
||||
var assignmentInfo = new ExpressionNodeInfo(Context, init, this, child++).SetKind(ExprKind.SIMPLE_ASSIGN);
|
||||
var assignmentEntity = new Expression(assignmentInfo);
|
||||
var target = Context.GetSymbolInfo(assignment.Left);
|
||||
|
||||
// If the target is null, then assume that this is an array initializer (of the form `[...] = ...`)
|
||||
var access = target.Symbol is null ?
|
||||
new Expression(new ExpressionNodeInfo(Context, assignment.Left, assignmentEntity, 0).SetKind(ExprKind.ARRAY_ACCESS)) :
|
||||
Access.Create(new ExpressionNodeInfo(Context, assignment.Left, assignmentEntity, 0), target.Symbol, false, Context.CreateEntity(target.Symbol));
|
||||
|
||||
if (assignment.Left is ImplicitElementAccessSyntax iea)
|
||||
{
|
||||
// An array/indexer initializer of the form `[...] = ...`
|
||||
access.PopulateArguments(trapFile, iea.ArgumentList.Arguments, 0);
|
||||
}
|
||||
|
||||
var typeInfoRight = Context.GetTypeInfo(assignment.Right);
|
||||
if (typeInfoRight.Type is null)
|
||||
{
|
||||
// The type may be null for nested initializers such as
|
||||
// ```csharp
|
||||
// new ClassWithArrayField() { As = { [0] = a } }
|
||||
@@ -92,21 +106,8 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
// In this case we take the type from the assignment
|
||||
// `As = { [0] = a }` instead
|
||||
typeInfoRight = assignmentInfo.TypeInfo;
|
||||
CreateFromNode(new ExpressionNodeInfo(Context, assignment.Right, assignmentEntity, 0, typeInfoRight));
|
||||
|
||||
var target = Context.GetSymbolInfo(assignment.Left);
|
||||
|
||||
// If the target is null, then assume that this is an array initializer (of the form `[...] = ...`)
|
||||
|
||||
var access = target.Symbol is null ?
|
||||
new Expression(new ExpressionNodeInfo(Context, assignment.Left, assignmentEntity, 1).SetKind(ExprKind.ARRAY_ACCESS)) :
|
||||
Access.Create(new ExpressionNodeInfo(Context, assignment.Left, assignmentEntity, 1), target.Symbol, false, Context.CreateEntity(target.Symbol));
|
||||
|
||||
if (assignment.Left is ImplicitElementAccessSyntax iea)
|
||||
{
|
||||
// An array/indexer initializer of the form `[...] = ...`
|
||||
access.PopulateArguments(trapFile, iea.ArgumentList.Arguments, 0);
|
||||
}
|
||||
CreateFromNode(new ExpressionNodeInfo(Context, assignment.Right, assignmentEntity, 1, typeInfoRight));
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -41,11 +41,11 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
var loc = Context.CreateLocation(init.GetLocation());
|
||||
|
||||
var assignment = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.SIMPLE_ASSIGN, objectInitializer, child++, isCompilerGenerated: false, null));
|
||||
Create(Context, init.Expression, assignment, 0);
|
||||
Property.Create(Context, property);
|
||||
|
||||
var access = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.PROPERTY_ACCESS, assignment, 1, isCompilerGenerated: false, null));
|
||||
var access = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.PROPERTY_ACCESS, assignment, 0, isCompilerGenerated: false, null));
|
||||
trapFile.expr_access(access, propEntity);
|
||||
|
||||
Create(Context, init.Expression, assignment, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,12 +94,12 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
child
|
||||
);
|
||||
|
||||
Expression.Create(cx, Expr, decl, 0);
|
||||
|
||||
var nameLoc = cx.CreateLocation(name.GetLocation());
|
||||
var access = new Expression(new ExpressionInfo(cx, type, nameLoc, ExprKind.LOCAL_VARIABLE_ACCESS, decl, 1, isCompilerGenerated: false, null));
|
||||
var access = new Expression(new ExpressionInfo(cx, type, nameLoc, ExprKind.LOCAL_VARIABLE_ACCESS, decl, 0, isCompilerGenerated: false, null));
|
||||
cx.TrapWriter.Writer.expr_access(access, LocalVariable.Create(cx, variableSymbol));
|
||||
|
||||
Expression.Create(cx, Expr, decl, 1);
|
||||
|
||||
return decl;
|
||||
}
|
||||
|
||||
|
||||
@@ -176,11 +176,11 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
|
||||
if (d.Initializer is not null)
|
||||
{
|
||||
Create(cx, d.Initializer.Value, ret, 0);
|
||||
|
||||
// Create an access
|
||||
var access = new Expression(new ExpressionInfo(cx, type, localVar.Location, ExprKind.LOCAL_VARIABLE_ACCESS, ret, 1, isCompilerGenerated: false, null));
|
||||
var access = new Expression(new ExpressionInfo(cx, type, localVar.Location, ExprKind.LOCAL_VARIABLE_ACCESS, ret, 0, isCompilerGenerated: false, null));
|
||||
cx.TrapWriter.Writer.expr_access(access, localVar);
|
||||
|
||||
Create(cx, d.Initializer.Value, ret, 1);
|
||||
}
|
||||
|
||||
if (d.Parent is VariableDeclarationSyntax decl)
|
||||
|
||||
@@ -116,9 +116,9 @@ namespace Semmle.Extraction.CSharp.Entities
|
||||
{
|
||||
var type = Symbol.GetAnnotatedType();
|
||||
var simpleAssignExpr = new Expression(new ExpressionInfo(Context, type, loc, ExprKind.SIMPLE_ASSIGN, this, child++, isCompilerGenerated: true, constValue));
|
||||
Expression.CreateFromNode(new ExpressionNodeInfo(Context, initializer, simpleAssignExpr, 0));
|
||||
var access = new Expression(new ExpressionInfo(Context, type, Location, ExprKind.FIELD_ACCESS, simpleAssignExpr, 1, isCompilerGenerated: true, constValue));
|
||||
var access = new Expression(new ExpressionInfo(Context, type, Location, ExprKind.FIELD_ACCESS, simpleAssignExpr, 0, isCompilerGenerated: true, constValue));
|
||||
trapFile.expr_access(access, this);
|
||||
Expression.CreateFromNode(new ExpressionNodeInfo(Context, initializer, simpleAssignExpr, 1));
|
||||
return access;
|
||||
}
|
||||
|
||||
|
||||
@@ -94,9 +94,9 @@ namespace Semmle.Extraction.CSharp.Entities
|
||||
var loc = Context.CreateLocation(initializer!.GetLocation());
|
||||
var annotatedType = AnnotatedTypeSymbol.CreateNotAnnotated(Symbol.Type);
|
||||
var simpleAssignExpr = new Expression(new ExpressionInfo(Context, annotatedType, loc, ExprKind.SIMPLE_ASSIGN, this, child++, isCompilerGenerated: true, null));
|
||||
Expression.CreateFromNode(new ExpressionNodeInfo(Context, initializer.Value, simpleAssignExpr, 0));
|
||||
var access = new Expression(new ExpressionInfo(Context, annotatedType, Location, ExprKind.PROPERTY_ACCESS, simpleAssignExpr, 1, isCompilerGenerated: true, null));
|
||||
var access = new Expression(new ExpressionInfo(Context, annotatedType, Location, ExprKind.PROPERTY_ACCESS, simpleAssignExpr, 0, isCompilerGenerated: true, null));
|
||||
trapFile.expr_access(access, this);
|
||||
Expression.CreateFromNode(new ExpressionNodeInfo(Context, initializer.Value, simpleAssignExpr, 1));
|
||||
if (!Symbol.IsStatic)
|
||||
{
|
||||
This.CreateImplicit(Context, Symbol.ContainingType, Location, access, -1);
|
||||
|
||||
@@ -16,16 +16,9 @@ import experimental.code.csharp.Cryptography.NonCryptographicHashes
|
||||
from Variable v, Literal l, LoopStmt loop, Expr additional_xor
|
||||
where
|
||||
maybeUsedInFnvFunction(v, _, _, loop) and
|
||||
(
|
||||
exists(BitwiseXorExpr xor2 | xor2.getAnOperand() = l and additional_xor = xor2 |
|
||||
loop.getAControlFlowExitNode().getASuccessor*() = xor2.getAControlFlowNode() and
|
||||
xor2.getAnOperand() = v.getAnAccess()
|
||||
)
|
||||
or
|
||||
exists(AssignXorExpr xor2 | xor2.getAnOperand() = l and additional_xor = xor2 |
|
||||
loop.getAControlFlowExitNode().getASuccessor*() = xor2.getAControlFlowNode() and
|
||||
xor2.getAnOperand() = v.getAnAccess()
|
||||
)
|
||||
exists(BitwiseXorOperation xor2 | xor2.getAnOperand() = l and additional_xor = xor2 |
|
||||
loop.getAControlFlowExitNode().getASuccessor*() = xor2.getAControlFlowNode() and
|
||||
xor2.getAnOperand() = v.getAnAccess()
|
||||
)
|
||||
select l, "This literal is used in an $@ after an FNV-like hash calculation with variable $@.",
|
||||
additional_xor, "additional xor", v, v.toString()
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* The extractor no longer synthesizes expanded forms of compound assignments. This may have a small impact on the results of queries that explicitly or implicitly rely on the expanded form of compound assignments.
|
||||
@@ -48,7 +48,7 @@ private predicate maybeUsedInElfHashFunction(Variable v, Operation xor, Operatio
|
||||
Expr e1, Expr e2, AssignExpr addAssign, AssignExpr xorAssign, Operation notOp,
|
||||
AssignExpr notAssign
|
||||
|
|
||||
(add instanceof AddExpr or add instanceof AssignAddExpr) and
|
||||
add instanceof AddOperation and
|
||||
e1.getAChild*() = add.getAnOperand() and
|
||||
e1 instanceof BinaryBitwiseOperation and
|
||||
e2 = e1.(BinaryBitwiseOperation).getLeftOperand() and
|
||||
|
||||
@@ -78,6 +78,8 @@ class AssignableRead extends AssignableAccess {
|
||||
this.isRefArgument()
|
||||
or
|
||||
this = any(AssignableDefinitions::AddressOfDefinition def).getTargetAccess()
|
||||
or
|
||||
this = any(AssignableDefinitions::AssignOperationDefinition def).getTargetAccess()
|
||||
) and
|
||||
not nameOfChild(_, this)
|
||||
}
|
||||
@@ -271,6 +273,8 @@ module AssignableInternal {
|
||||
def = TAddressOfDefinition(result)
|
||||
or
|
||||
def = TPatternDefinition(result)
|
||||
or
|
||||
def = TAssignOperationDefinition(result)
|
||||
}
|
||||
|
||||
/** A local variable declaration at the top-level of a pattern. */
|
||||
@@ -286,7 +290,11 @@ module AssignableInternal {
|
||||
private module Cached {
|
||||
cached
|
||||
newtype TAssignableDefinition =
|
||||
TAssignmentDefinition(Assignment a) { not a.getLValue() instanceof TupleExpr } or
|
||||
TAssignmentDefinition(Assignment a) {
|
||||
not a.getLValue() instanceof TupleExpr and
|
||||
not a instanceof AssignCallOperation and
|
||||
not a instanceof AssignCoalesceExpr
|
||||
} or
|
||||
TTupleAssignmentDefinition(AssignExpr ae, Expr leaf) { tupleAssignmentDefinition(ae, leaf) } or
|
||||
TOutRefDefinition(AssignableAccess aa) {
|
||||
aa.isOutArgument()
|
||||
@@ -309,7 +317,11 @@ module AssignableInternal {
|
||||
)
|
||||
} or
|
||||
TAddressOfDefinition(AddressOfExpr aoe) or
|
||||
TPatternDefinition(TopLevelPatternDecl tlpd)
|
||||
TPatternDefinition(TopLevelPatternDecl tlpd) or
|
||||
TAssignOperationDefinition(AssignOperation ao) {
|
||||
ao instanceof AssignCallOperation or
|
||||
ao instanceof AssignCoalesceExpr
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the source expression assigned in tuple definition `def`, if any.
|
||||
@@ -355,6 +367,8 @@ module AssignableInternal {
|
||||
def = TMutationDefinition(any(MutatorOperation mo | mo.getOperand() = result))
|
||||
or
|
||||
def = TAddressOfDefinition(any(AddressOfExpr aoe | aoe.getOperand() = result))
|
||||
or
|
||||
def = TAssignOperationDefinition(any(AssignOperation ao | ao.getLeftOperand() = result))
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -369,8 +383,10 @@ module AssignableInternal {
|
||||
or
|
||||
exists(Assignment ass | ac = ass.getLValue() |
|
||||
result = ass.getRValue() and
|
||||
not ass.(AssignOperation).hasExpandedAssignment()
|
||||
not ass instanceof AssignOperation
|
||||
)
|
||||
or
|
||||
exists(AssignOperation ao | ac = ao.getLeftOperand() | result = ao)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -388,8 +404,9 @@ private import AssignableInternal
|
||||
* a mutation update (`AssignableDefinitions::MutationDefinition`), a local variable
|
||||
* declaration without an initializer (`AssignableDefinitions::LocalVariableDefinition`),
|
||||
* an implicit parameter definition (`AssignableDefinitions::ImplicitParameterDefinition`),
|
||||
* an address-of definition (`AssignableDefinitions::AddressOfDefinition`), or a pattern
|
||||
* definition (`AssignableDefinitions::PatternDefinition`).
|
||||
* an address-of definition (`AssignableDefinitions::AddressOfDefinition`), a pattern
|
||||
* definition (`AssignableDefinitions::PatternDefinition`), or a compound assignment
|
||||
* operation definition (`AssignableDefinitions::AssignOperationDefinition`)
|
||||
*/
|
||||
class AssignableDefinition extends TAssignableDefinition {
|
||||
/**
|
||||
@@ -511,7 +528,7 @@ module AssignableDefinitions {
|
||||
|
||||
override Expr getSource() {
|
||||
result = a.getRValue() and
|
||||
not a instanceof AssignOperation
|
||||
not a instanceof AddOrRemoveEventExpr
|
||||
}
|
||||
|
||||
override string toString() { result = a.toString() }
|
||||
@@ -735,4 +752,17 @@ module AssignableDefinitions {
|
||||
/** Gets the assignable (field or property) being initialized. */
|
||||
Assignable getAssignable() { result = fieldOrProp }
|
||||
}
|
||||
|
||||
/**
|
||||
* A definition by a compound assignment operation, for example `x += y`.
|
||||
*/
|
||||
class AssignOperationDefinition extends AssignableDefinition, TAssignOperationDefinition {
|
||||
AssignOperation ao;
|
||||
|
||||
AssignOperationDefinition() { this = TAssignOperationDefinition(ao) }
|
||||
|
||||
override Expr getSource() { result = ao }
|
||||
|
||||
override string toString() { result = ao.toString() }
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ class ExprOrStmtParent extends Element, @exprorstmt_parent {
|
||||
|
||||
/** Gets the `i`th child expression of this element (zero-based). */
|
||||
final Expr getChildExpr(int i) {
|
||||
expr_parent_adjusted(result, i, this) or
|
||||
expr_parent(result, i, this) or
|
||||
expr_parent_top_level_adjusted(result, i, this)
|
||||
}
|
||||
|
||||
@@ -118,67 +118,9 @@ private module Cached {
|
||||
i = 0
|
||||
}
|
||||
|
||||
/**
|
||||
* The `expr_parent()` relation adjusted for expandable assignments. For example,
|
||||
* the assignment `x += y` is extracted as
|
||||
*
|
||||
* ```
|
||||
* +=
|
||||
* |
|
||||
* 2
|
||||
* |
|
||||
* =
|
||||
* / \
|
||||
* 1 0
|
||||
* / \
|
||||
* x +
|
||||
* / \
|
||||
* 1 0
|
||||
* / \
|
||||
* x y
|
||||
* ```
|
||||
*
|
||||
* in order to be able to retrieve the expanded assignment `x = x + y` as the 2nd
|
||||
* child. This predicate changes the diagram above into
|
||||
*
|
||||
* ```
|
||||
* +=
|
||||
* / \
|
||||
* 1 0
|
||||
* / \
|
||||
* x y
|
||||
* ```
|
||||
*/
|
||||
cached
|
||||
predicate expr_parent_adjusted(Expr child, int i, ControlFlowElement parent) {
|
||||
if parent instanceof AssignOperation
|
||||
then
|
||||
parent =
|
||||
any(AssignOperation ao |
|
||||
exists(AssignExpr ae | ae = ao.getExpandedAssignment() |
|
||||
i = 0 and
|
||||
exists(Expr right |
|
||||
// right = `x + y`
|
||||
expr_parent(right, 0, ae)
|
||||
|
|
||||
expr_parent(child, 1, right)
|
||||
)
|
||||
or
|
||||
i = 1 and
|
||||
expr_parent(child, 1, ae)
|
||||
)
|
||||
or
|
||||
not ao.hasExpandedAssignment() and
|
||||
expr_parent(child, i, parent)
|
||||
)
|
||||
else expr_parent(child, i, parent)
|
||||
}
|
||||
|
||||
private Expr getAChildExpr(ExprOrStmtParent parent) {
|
||||
result = parent.getAChildExpr() and
|
||||
not result = parent.(DeclarationWithGetSetAccessors).getExpressionBody()
|
||||
or
|
||||
result = parent.(AssignOperation).getExpandedAssignment()
|
||||
}
|
||||
|
||||
private ControlFlowElement getAChild(ExprOrStmtParent parent) {
|
||||
|
||||
@@ -226,7 +226,7 @@ class Property extends DeclarationWithGetSetAccessors, @property {
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
Expr getInitializer() { result = this.getChildExpr(1).getChildExpr(0) }
|
||||
Expr getInitializer() { result = this.getChildExpr(1).getChildExpr(1) }
|
||||
|
||||
/**
|
||||
* Holds if this property has an initial value. For example, the initial
|
||||
|
||||
@@ -408,7 +408,7 @@ class Field extends Variable, AssignableMember, Attributable, TopLevelExprParent
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
final override Expr getInitializer() { result = this.getChildExpr(0).getChildExpr(0) }
|
||||
final override Expr getInitializer() { result = this.getChildExpr(0).getChildExpr(1) }
|
||||
|
||||
/**
|
||||
* Holds if this field has an initial value. For example, the initial
|
||||
|
||||
@@ -49,6 +49,11 @@ class ImplicitToStringExpr extends Expr {
|
||||
this = add.getOtherOperand(o).stripImplicit()
|
||||
)
|
||||
or
|
||||
exists(AssignAddExpr add, Expr o | o = add.getLeftOperand() |
|
||||
o.stripImplicit().getType() instanceof StringType and
|
||||
this = add.getRightOperand().stripImplicit()
|
||||
)
|
||||
or
|
||||
this = any(InterpolatedStringExpr ise).getAnInsert().stripImplicit()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -119,14 +119,14 @@ private module GuardsInput implements
|
||||
class AndExpr extends BinExpr {
|
||||
AndExpr() {
|
||||
this instanceof LogicalAndExpr or
|
||||
this instanceof BitwiseAndExpr
|
||||
this instanceof BitwiseAndOperation
|
||||
}
|
||||
}
|
||||
|
||||
class OrExpr extends BinExpr {
|
||||
OrExpr() {
|
||||
this instanceof LogicalOrExpr or
|
||||
this instanceof BitwiseOrExpr
|
||||
this instanceof BitwiseOrOperation
|
||||
}
|
||||
}
|
||||
|
||||
@@ -292,7 +292,7 @@ private module LogicInput implements GuardsImpl::LogicInputSig {
|
||||
v1.isNonNullValue() and
|
||||
v2 = v1
|
||||
or
|
||||
g2 = g1.(NullCoalescingExpr).getAnOperand() and
|
||||
g2 = g1.(NullCoalescingOperation).getAnOperand() and
|
||||
v1.isNullValue() and
|
||||
v2 = v1
|
||||
or
|
||||
@@ -840,14 +840,14 @@ module Internal {
|
||||
or
|
||||
e1 = e2.(Cast).getExpr()
|
||||
or
|
||||
e2 = e1.(NullCoalescingExpr).getAnOperand()
|
||||
e2 = e1.(NullCoalescingOperation).getAnOperand()
|
||||
}
|
||||
|
||||
/** Holds if expression `e3` is a `null` value whenever `e1` and `e2` are. */
|
||||
predicate nullValueImpliedBinary(Expr e1, Expr e2, Expr e3) {
|
||||
e3 = any(ConditionalExpr ce | e1 = ce.getThen() and e2 = ce.getElse())
|
||||
or
|
||||
e3 = any(NullCoalescingExpr nce | e1 = nce.getLeftOperand() and e2 = nce.getRightOperand())
|
||||
e3 = any(NullCoalescingOperation no | e1 = no.getLeftOperand() and e2 = no.getRightOperand())
|
||||
}
|
||||
|
||||
predicate nullValueImplied(Expr e) {
|
||||
@@ -907,7 +907,7 @@ module Internal {
|
||||
or
|
||||
// "In string concatenation operations, the C# compiler treats a null string the same as an empty string."
|
||||
// (https://docs.microsoft.com/en-us/dotnet/csharp/how-to/concatenate-multiple-strings)
|
||||
e instanceof AddExpr and
|
||||
e instanceof AddOperation and
|
||||
e.getType() instanceof StringType
|
||||
or
|
||||
e.(DefaultValueExpr).getType().isValueType()
|
||||
@@ -922,11 +922,9 @@ module Internal {
|
||||
|
||||
/** Holds if expression `e2` is a non-`null` value whenever `e1` is. */
|
||||
predicate nonNullValueImpliedUnary(Expr e1, Expr e2) {
|
||||
e1 = e2.(CastExpr).getExpr()
|
||||
or
|
||||
e1 = e2.(AssignExpr).getRValue()
|
||||
or
|
||||
e1 = e2.(NullCoalescingExpr).getAnOperand()
|
||||
e1 = e2.(CastExpr).getExpr() or
|
||||
e1 = e2.(AssignExpr).getRValue() or
|
||||
e1 = e2.(NullCoalescingOperation).getAnOperand()
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -953,10 +951,13 @@ module Internal {
|
||||
)
|
||||
or
|
||||
// In C#, `null + 1` has type `int?` with value `null`
|
||||
exists(BinaryArithmeticOperation bao, Expr o |
|
||||
result = bao and
|
||||
bao.getAnOperand() = e and
|
||||
bao.getAnOperand() = o and
|
||||
exists(BinaryOperation bo, Expr o |
|
||||
bo instanceof BinaryArithmeticOperation or
|
||||
bo instanceof AssignArithmeticOperation
|
||||
|
|
||||
result = bo and
|
||||
bo.getAnOperand() = e and
|
||||
bo.getAnOperand() = o and
|
||||
// The other operand must be provably non-null in order
|
||||
// for `only if` to hold
|
||||
nonNullValueImplied(o) and
|
||||
@@ -972,10 +973,10 @@ module Internal {
|
||||
any(QualifiableExpr qe |
|
||||
qe.isConditional() and
|
||||
result = qe.getQualifier()
|
||||
)
|
||||
or
|
||||
) or
|
||||
// In C#, `null + 1` has type `int?` with value `null`
|
||||
e = any(BinaryArithmeticOperation bao | result = bao.getAnOperand())
|
||||
e = any(BinaryArithmeticOperation bao | result = bao.getAnOperand()) or
|
||||
e = any(AssignArithmeticOperation aao | result = aao.getAnOperand())
|
||||
}
|
||||
|
||||
deprecated predicate isGuard(Expr e, GuardValue val) {
|
||||
|
||||
@@ -344,7 +344,7 @@ private class TriedControlFlowElement extends ControlFlowElement {
|
||||
result instanceof SystemOutOfMemoryExceptionClass
|
||||
or
|
||||
this =
|
||||
any(AddExpr ae |
|
||||
any(AddOperation ae |
|
||||
ae.getType() instanceof StringType and
|
||||
result instanceof SystemOutOfMemoryExceptionClass
|
||||
or
|
||||
@@ -353,24 +353,24 @@ private class TriedControlFlowElement extends ControlFlowElement {
|
||||
)
|
||||
or
|
||||
this =
|
||||
any(SubExpr se |
|
||||
any(SubOperation se |
|
||||
se.getType() instanceof IntegralType and
|
||||
result instanceof SystemOverflowExceptionClass
|
||||
)
|
||||
or
|
||||
this =
|
||||
any(MulExpr me |
|
||||
any(MulOperation me |
|
||||
me.getType() instanceof IntegralType and
|
||||
result instanceof SystemOverflowExceptionClass
|
||||
)
|
||||
or
|
||||
this =
|
||||
any(DivExpr de |
|
||||
any(DivOperation de |
|
||||
not de.getDenominator().getValue().toFloat() != 0 and
|
||||
result instanceof SystemDivideByZeroExceptionClass
|
||||
)
|
||||
or
|
||||
this instanceof RemExpr and
|
||||
this instanceof RemOperation and
|
||||
result instanceof SystemDivideByZeroExceptionClass
|
||||
or
|
||||
this instanceof DynamicExpr and
|
||||
@@ -447,7 +447,7 @@ private predicate inBooleanContext(Expr e) {
|
||||
e in [ce.getThen(), ce.getElse()]
|
||||
)
|
||||
or
|
||||
e = any(NullCoalescingExpr nce | inBooleanContext(nce)).getAnOperand()
|
||||
e = any(NullCoalescingOperation nce | inBooleanContext(nce)).getAnOperand()
|
||||
or
|
||||
e = any(SwitchExpr se | inBooleanContext(se)).getACase()
|
||||
or
|
||||
@@ -467,13 +467,13 @@ private predicate mustHaveNullnessCompletion(Expr e) {
|
||||
* that `e` evaluates to determines a `null`/non-`null` branch successor.
|
||||
*/
|
||||
private predicate inNullnessContext(Expr e) {
|
||||
e = any(NullCoalescingExpr nce).getLeftOperand()
|
||||
e = any(NullCoalescingOperation nce).getLeftOperand()
|
||||
or
|
||||
exists(QualifiableExpr qe | qe.isConditional() | e = qe.getChildExpr(-1))
|
||||
or
|
||||
exists(ConditionalExpr ce | inNullnessContext(ce) | (e = ce.getThen() or e = ce.getElse()))
|
||||
or
|
||||
exists(NullCoalescingExpr nce | inNullnessContext(nce) | e = nce.getRightOperand())
|
||||
exists(NullCoalescingOperation nce | inNullnessContext(nce) | e = nce.getRightOperand())
|
||||
or
|
||||
e = any(SwitchExpr se | inNullnessContext(se)).getACase()
|
||||
or
|
||||
|
||||
@@ -62,18 +62,13 @@ class CfgScope extends Element, @top_level_exprorstmt_parent {
|
||||
|
||||
private class TAstNode = @callable or @control_flow_element;
|
||||
|
||||
private Element getAChild(Element p) {
|
||||
result = p.getAChild() or
|
||||
result = p.(AssignOperation).getExpandedAssignment()
|
||||
}
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate astNode(Element e) {
|
||||
e = any(@top_level_exprorstmt_parent p | not p instanceof Attribute)
|
||||
or
|
||||
exists(Element parent |
|
||||
astNode(parent) and
|
||||
e = getAChild(parent)
|
||||
e = parent.getAChild()
|
||||
)
|
||||
}
|
||||
|
||||
@@ -447,7 +442,6 @@ module Expressions {
|
||||
private AstNode getExprChild0(Expr e, int i) {
|
||||
not e instanceof NameOfExpr and
|
||||
not e instanceof QualifiableExpr and
|
||||
not e instanceof Assignment and
|
||||
not e instanceof AnonymousFunctionExpr and
|
||||
result = e.getChild(i)
|
||||
or
|
||||
@@ -458,14 +452,6 @@ module Expressions {
|
||||
not qe instanceof ExtensionMethodCall and
|
||||
result = qe.getChild(i)
|
||||
)
|
||||
or
|
||||
e =
|
||||
any(Assignment a |
|
||||
// The left-hand side of an assignment is evaluated before the right-hand side
|
||||
i = 0 and result = a.getLValue()
|
||||
or
|
||||
i = 1 and result = a.getRValue()
|
||||
)
|
||||
}
|
||||
|
||||
private AstNode getExprChild(Expr e, int i) {
|
||||
@@ -491,9 +477,8 @@ module Expressions {
|
||||
not this instanceof LogicalNotExpr and
|
||||
not this instanceof LogicalAndExpr and
|
||||
not this instanceof LogicalOrExpr and
|
||||
not this instanceof NullCoalescingExpr and
|
||||
not this instanceof NullCoalescingOperation and
|
||||
not this instanceof ConditionalExpr and
|
||||
not this instanceof AssignOperationWithExpandedAssignment and
|
||||
not this instanceof ConditionallyQualifiedExpr and
|
||||
not this instanceof ThrowExpr and
|
||||
not this instanceof ObjectCreation and
|
||||
@@ -590,8 +575,7 @@ module Expressions {
|
||||
QualifiedAccessorWrite() {
|
||||
def.getExpr() = this and
|
||||
def.getTargetAccess().(WriteAccess) instanceof QualifiableExpr and
|
||||
not def instanceof AssignableDefinitions::OutRefDefinition and
|
||||
not this instanceof AssignOperationWithExpandedAssignment
|
||||
not def instanceof AssignableDefinitions::OutRefDefinition
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -723,7 +707,8 @@ module Expressions {
|
||||
}
|
||||
}
|
||||
|
||||
private class NullCoalescingExprTree extends PostOrderTree instanceof NullCoalescingExpr {
|
||||
private class NullCoalescingOperationTree extends PostOrderTree instanceof NullCoalescingOperation
|
||||
{
|
||||
final override predicate propagatesAbnormal(AstNode child) {
|
||||
child in [super.getLeftOperand(), super.getRightOperand()]
|
||||
}
|
||||
@@ -774,26 +759,6 @@ module Expressions {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* An assignment operation that has an expanded version. We use the expanded
|
||||
* version in the control flow graph in order to get better data flow / taint
|
||||
* tracking.
|
||||
*/
|
||||
private class AssignOperationWithExpandedAssignment extends ControlFlowTree instanceof AssignOperation
|
||||
{
|
||||
private Expr expanded;
|
||||
|
||||
AssignOperationWithExpandedAssignment() { expanded = this.getExpandedAssignment() }
|
||||
|
||||
final override predicate first(AstNode first) { first(expanded, first) }
|
||||
|
||||
final override predicate last(AstNode last, Completion c) { last(expanded, last, c) }
|
||||
|
||||
final override predicate propagatesAbnormal(AstNode child) { none() }
|
||||
|
||||
final override predicate succ(AstNode pred, AstNode succ, Completion c) { none() }
|
||||
}
|
||||
|
||||
/** A conditionally qualified expression. */
|
||||
private class ConditionallyQualifiedExpr extends PostOrderTree instanceof QualifiableExpr {
|
||||
private Expr qualifier;
|
||||
@@ -1551,7 +1516,7 @@ module Statements {
|
||||
/** Gets a child of `cfe` that is in CFG scope `scope`. */
|
||||
pragma[noinline]
|
||||
private ControlFlowElement getAChildInScope(AstNode cfe, Callable scope) {
|
||||
result = getAChild(cfe) and
|
||||
result = cfe.getAChild() and
|
||||
scope = result.getEnclosingCallable()
|
||||
}
|
||||
|
||||
|
||||
@@ -95,7 +95,7 @@ module ConditionalCompletionSplitting {
|
||||
child = parent.(SwitchCaseExpr).getBody()
|
||||
or
|
||||
parent =
|
||||
any(NullCoalescingExpr nce |
|
||||
any(NullCoalescingOperation nce |
|
||||
if childCompletion instanceof NullnessCompletion
|
||||
then child = nce.getRightOperand()
|
||||
else child = nce.getAnOperand()
|
||||
|
||||
@@ -42,7 +42,7 @@ private Expr maybeNullExpr(Expr reason) {
|
||||
ce.getElse() = maybeNullExpr(reason)
|
||||
)
|
||||
or
|
||||
result.(NullCoalescingExpr).getRightOperand() = maybeNullExpr(reason)
|
||||
result.(NullCoalescingOperation).getRightOperand() = maybeNullExpr(reason)
|
||||
or
|
||||
result =
|
||||
any(QualifiableExpr qe |
|
||||
|
||||
@@ -512,7 +512,7 @@ module LocalFlow {
|
||||
predicate localExprStep(Expr e1, Expr e2) {
|
||||
e1 = e2.(ParenthesizedExpr).getExpr()
|
||||
or
|
||||
e1 = e2.(NullCoalescingExpr).getAnOperand()
|
||||
e1 = e2.(NullCoalescingOperation).getAnOperand()
|
||||
or
|
||||
e1 = e2.(SuppressNullableWarningExpr).getExpr()
|
||||
or
|
||||
@@ -623,7 +623,7 @@ module LocalFlow {
|
||||
(
|
||||
e instanceof ConditionalExpr or
|
||||
e instanceof Cast or
|
||||
e instanceof NullCoalescingExpr or
|
||||
e instanceof NullCoalescingOperation or
|
||||
e instanceof SwitchExpr or
|
||||
e instanceof SuppressNullableWarningExpr or
|
||||
e instanceof AssignExpr
|
||||
|
||||
@@ -47,7 +47,7 @@ predicate defaultImplicitTaintRead(DataFlow::Node node, DataFlow::ContentSet c)
|
||||
private predicate localTaintExprStep(Expr e1, Expr e2) {
|
||||
e1 = e2.(ElementAccess).getQualifier()
|
||||
or
|
||||
e1 = e2.(AddExpr).getAnOperand()
|
||||
e1 = e2.(AddOperation).getAnOperand()
|
||||
or
|
||||
// A comparison expression where taint can flow from one of the
|
||||
// operands if the other operand is a constant value.
|
||||
|
||||
@@ -20,17 +20,17 @@ module Private {
|
||||
|
||||
class ConditionalExpr = RU::ExprNode::ConditionalExpr;
|
||||
|
||||
class AddExpr = RU::ExprNode::AddExpr;
|
||||
class AddExpr = RU::ExprNode::AddOperation;
|
||||
|
||||
class SubExpr = RU::ExprNode::SubExpr;
|
||||
class SubExpr = RU::ExprNode::SubOperation;
|
||||
|
||||
class RemExpr = RU::ExprNode::RemExpr;
|
||||
class RemExpr = RU::ExprNode::RemOperation;
|
||||
|
||||
class BitwiseAndExpr = RU::ExprNode::BitwiseAndExpr;
|
||||
class BitwiseAndExpr = RU::ExprNode::BitwiseAndOperation;
|
||||
|
||||
class MulExpr = RU::ExprNode::MulExpr;
|
||||
class MulExpr = RU::ExprNode::MulOperation;
|
||||
|
||||
class LeftShiftExpr = RU::ExprNode::LeftShiftExpr;
|
||||
class LeftShiftExpr = RU::ExprNode::LeftShiftOperation;
|
||||
|
||||
predicate guardControlsSsaRead = RU::guardControlsSsaRead/3;
|
||||
|
||||
|
||||
@@ -21,7 +21,11 @@ private module Impl {
|
||||
/** Holds if SSA definition `def` equals `e + delta`. */
|
||||
predicate ssaUpdateStep(ExplicitDefinition def, ExprNode e, int delta) {
|
||||
exists(ControlFlow::Node cfn | cfn = def.getControlFlowNode() |
|
||||
e = cfn.(ExprNode::Assignment).getRValue() and delta = 0
|
||||
e = cfn.(ExprNode::Assignment).getRValue() and
|
||||
delta = 0 and
|
||||
not cfn instanceof ExprNode::AssignOperation
|
||||
or
|
||||
e = cfn.(ExprNode::AssignOperation) and delta = 0
|
||||
or
|
||||
e = cfn.(ExprNode::PostIncrExpr).getOperand() and delta = 1
|
||||
or
|
||||
@@ -48,15 +52,15 @@ private module Impl {
|
||||
e2.(ExprNode::PreDecrExpr).getOperand() = e1 and delta = -1
|
||||
or
|
||||
exists(ConstantIntegerExpr x |
|
||||
e2.(ExprNode::AddExpr).getAnOperand() = e1 and
|
||||
e2.(ExprNode::AddExpr).getAnOperand() = x and
|
||||
e2.(ExprNode::AddOperation).getAnOperand() = e1 and
|
||||
e2.(ExprNode::AddOperation).getAnOperand() = x and
|
||||
e1 != x and
|
||||
x.getIntValue() = delta
|
||||
)
|
||||
or
|
||||
exists(ConstantIntegerExpr x |
|
||||
e2.(ExprNode::SubExpr).getLeftOperand() = e1 and
|
||||
e2.(ExprNode::SubExpr).getRightOperand() = x and
|
||||
e2.(ExprNode::SubOperation).getLeftOperand() = e1 and
|
||||
e2.(ExprNode::SubOperation).getRightOperand() = x and
|
||||
x.getIntValue() = -delta
|
||||
)
|
||||
or
|
||||
@@ -218,6 +222,11 @@ module ExprNode {
|
||||
override CS::AssignExpr e;
|
||||
}
|
||||
|
||||
/** A compound assignment operation. */
|
||||
class AssignOperation extends Assignment, BinaryOperation {
|
||||
override CS::AssignOperation e;
|
||||
}
|
||||
|
||||
/** A unary operation. */
|
||||
class UnaryOperation extends ExprNode {
|
||||
override CS::UnaryOperation e;
|
||||
@@ -309,78 +318,78 @@ module ExprNode {
|
||||
}
|
||||
|
||||
/** An addition operation. */
|
||||
class AddExpr extends BinaryOperation {
|
||||
override CS::AddExpr e;
|
||||
class AddOperation extends BinaryOperation {
|
||||
override CS::AddOperation e;
|
||||
|
||||
override TAddOp getOp() { any() }
|
||||
}
|
||||
|
||||
/** A subtraction operation. */
|
||||
class SubExpr extends BinaryOperation {
|
||||
override CS::SubExpr e;
|
||||
class SubOperation extends BinaryOperation {
|
||||
override CS::SubOperation e;
|
||||
|
||||
override TSubOp getOp() { any() }
|
||||
}
|
||||
|
||||
/** A multiplication operation. */
|
||||
class MulExpr extends BinaryOperation {
|
||||
override CS::MulExpr e;
|
||||
class MulOperation extends BinaryOperation {
|
||||
override CS::MulOperation e;
|
||||
|
||||
override TMulOp getOp() { any() }
|
||||
}
|
||||
|
||||
/** A division operation. */
|
||||
class DivExpr extends BinaryOperation {
|
||||
override CS::DivExpr e;
|
||||
class DivOperation extends BinaryOperation {
|
||||
override CS::DivOperation e;
|
||||
|
||||
override TDivOp getOp() { any() }
|
||||
}
|
||||
|
||||
/** A remainder operation. */
|
||||
class RemExpr extends BinaryOperation {
|
||||
override CS::RemExpr e;
|
||||
class RemOperation extends BinaryOperation {
|
||||
override CS::RemOperation e;
|
||||
|
||||
override TRemOp getOp() { any() }
|
||||
}
|
||||
|
||||
/** A bitwise-and operation. */
|
||||
class BitwiseAndExpr extends BinaryOperation {
|
||||
override CS::BitwiseAndExpr e;
|
||||
class BitwiseAndOperation extends BinaryOperation {
|
||||
override CS::BitwiseAndOperation e;
|
||||
|
||||
override TBitAndOp getOp() { any() }
|
||||
}
|
||||
|
||||
/** A bitwise-or operation. */
|
||||
class BitwiseOrExpr extends BinaryOperation {
|
||||
override CS::BitwiseOrExpr e;
|
||||
class BitwiseOrOperation extends BinaryOperation {
|
||||
override CS::BitwiseOrOperation e;
|
||||
|
||||
override TBitOrOp getOp() { any() }
|
||||
}
|
||||
|
||||
/** A bitwise-xor operation. */
|
||||
class BitwiseXorExpr extends BinaryOperation {
|
||||
override CS::BitwiseXorExpr e;
|
||||
class BitwiseXorOperation extends BinaryOperation {
|
||||
override CS::BitwiseXorOperation e;
|
||||
|
||||
override TBitXorOp getOp() { any() }
|
||||
}
|
||||
|
||||
/** A left-shift operation. */
|
||||
class LeftShiftExpr extends BinaryOperation {
|
||||
override CS::LeftShiftExpr e;
|
||||
class LeftShiftOperation extends BinaryOperation {
|
||||
override CS::LeftShiftOperation e;
|
||||
|
||||
override TLeftShiftOp getOp() { any() }
|
||||
}
|
||||
|
||||
/** A right-shift operation. */
|
||||
class RightShiftExpr extends BinaryOperation {
|
||||
override CS::RightShiftExpr e;
|
||||
class RightShiftOperation extends BinaryOperation {
|
||||
override CS::RightShiftOperation e;
|
||||
|
||||
override TRightShiftOp getOp() { any() }
|
||||
}
|
||||
|
||||
/** An unsigned right-shift operation. */
|
||||
class UnsignedRightShiftExpr extends BinaryOperation {
|
||||
override CS::UnsignedRightShiftExpr e;
|
||||
class UnsignedRightShiftOperation extends BinaryOperation {
|
||||
override CS::UnsignedRightShiftOperation e;
|
||||
|
||||
override TUnsignedRightShiftOp getOp() { any() }
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ module Private {
|
||||
|
||||
class RealLiteral = RU::ExprNode::RealLiteral;
|
||||
|
||||
class DivExpr = RU::ExprNode::DivExpr;
|
||||
class DivExpr = RU::ExprNode::DivOperation;
|
||||
|
||||
class UnaryOperation = RU::ExprNode::UnaryOperation;
|
||||
|
||||
@@ -130,6 +130,11 @@ private module Impl {
|
||||
adef = def.getADefinition() and
|
||||
hasChild(adef.getExpr(), adef.getSource(), def.getControlFlowNode(), result)
|
||||
)
|
||||
or
|
||||
exists(AssignableDefinitions::AssignOperationDefinition adef |
|
||||
adef = def.getADefinition() and
|
||||
result.getExpr() = adef.getSource()
|
||||
)
|
||||
}
|
||||
|
||||
/** Holds if `def` can have any sign. */
|
||||
|
||||
@@ -29,7 +29,7 @@ ExprNode getAnExplicitDefinitionRead(ExprNode src) {
|
||||
ExprNode ssaRead(Definition v, int delta) {
|
||||
exists(v.getAReadAtNode(result)) and delta = 0
|
||||
or
|
||||
exists(ExprNode::AddExpr add, int d1, ConstantIntegerExpr c |
|
||||
exists(ExprNode::AddOperation add, int d1, ConstantIntegerExpr c |
|
||||
result = add and
|
||||
delta = d1 - c.getIntValue()
|
||||
|
|
||||
@@ -38,7 +38,7 @@ ExprNode ssaRead(Definition v, int delta) {
|
||||
add.getRightOperand() = ssaRead(v, d1) and add.getLeftOperand() = c
|
||||
)
|
||||
or
|
||||
exists(ExprNode::SubExpr sub, int d1, ConstantIntegerExpr c |
|
||||
exists(ExprNode::SubOperation sub, int d1, ConstantIntegerExpr c |
|
||||
result = sub and
|
||||
sub.getLeftOperand() = ssaRead(v, d1) and
|
||||
sub.getRightOperand() = c and
|
||||
|
||||
@@ -202,11 +202,9 @@ private module Internal {
|
||||
private predicate isPotentialEventCall(
|
||||
AssignArithmeticOperation aao, DynamicMemberAccess dma, string name
|
||||
) {
|
||||
exists(DynamicOperatorCall doc, AssignExpr ae |
|
||||
ae = aao.getExpandedAssignment() and
|
||||
dma = ae.getLValue() and
|
||||
doc = ae.getRValue()
|
||||
|
|
||||
aao instanceof DynamicOperatorCall and
|
||||
dma = aao.getLeftOperand() and
|
||||
(
|
||||
aao instanceof AssignAddExpr and
|
||||
name = "add_" + dma.getLateBoundTargetName()
|
||||
or
|
||||
|
||||
@@ -107,7 +107,7 @@ class BinaryArithmeticOperation extends ArithmeticOperation, BinaryOperation, @b
|
||||
/**
|
||||
* An addition operation, for example `x + y`.
|
||||
*/
|
||||
class AddExpr extends BinaryArithmeticOperation, @add_expr {
|
||||
class AddExpr extends BinaryArithmeticOperation, AddOperation, @add_expr {
|
||||
override string getOperator() { result = "+" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "AddExpr" }
|
||||
@@ -116,7 +116,7 @@ class AddExpr extends BinaryArithmeticOperation, @add_expr {
|
||||
/**
|
||||
* A subtraction operation, for example `x - y`.
|
||||
*/
|
||||
class SubExpr extends BinaryArithmeticOperation, @sub_expr {
|
||||
class SubExpr extends BinaryArithmeticOperation, SubOperation, @sub_expr {
|
||||
override string getOperator() { result = "-" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "SubExpr" }
|
||||
@@ -125,7 +125,7 @@ class SubExpr extends BinaryArithmeticOperation, @sub_expr {
|
||||
/**
|
||||
* A multiplication operation, for example `x * y`.
|
||||
*/
|
||||
class MulExpr extends BinaryArithmeticOperation, @mul_expr {
|
||||
class MulExpr extends BinaryArithmeticOperation, MulOperation, @mul_expr {
|
||||
override string getOperator() { result = "*" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "MulExpr" }
|
||||
@@ -134,22 +134,16 @@ class MulExpr extends BinaryArithmeticOperation, @mul_expr {
|
||||
/**
|
||||
* A division operation, for example `x / y`.
|
||||
*/
|
||||
class DivExpr extends BinaryArithmeticOperation, @div_expr {
|
||||
class DivExpr extends BinaryArithmeticOperation, DivOperation, @div_expr {
|
||||
override string getOperator() { result = "/" }
|
||||
|
||||
/** Gets the numerator of this division operation. */
|
||||
Expr getNumerator() { result = this.getLeftOperand() }
|
||||
|
||||
/** Gets the denominator of this division operation. */
|
||||
Expr getDenominator() { result = this.getRightOperand() }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "DivExpr" }
|
||||
}
|
||||
|
||||
/**
|
||||
* A remainder operation, for example `x % y`.
|
||||
*/
|
||||
class RemExpr extends BinaryArithmeticOperation, @rem_expr {
|
||||
class RemExpr extends BinaryArithmeticOperation, RemOperation, @rem_expr {
|
||||
override string getOperator() { result = "%" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "RemExpr" }
|
||||
|
||||
@@ -17,18 +17,14 @@ class Assignment extends BinaryOperation, @assign_expr {
|
||||
implies
|
||||
// Same as `this.(LocalVariableDeclExpr).hasInitializer()` but avoids
|
||||
// negative recursion
|
||||
expr_parent(_, 0, this)
|
||||
expr_parent(_, 1, this)
|
||||
}
|
||||
|
||||
override Expr getLeftOperand() { result = this.getChild(1) }
|
||||
|
||||
override Expr getRightOperand() { result = this.getChild(0) }
|
||||
|
||||
/** Gets the left operand of this assignment. */
|
||||
Expr getLValue() { result = this.getChild(1) }
|
||||
Expr getLValue() { result = this.getLeftOperand() }
|
||||
|
||||
/** Gets the right operand of this assignment. */
|
||||
Expr getRValue() { result = this.getChild(0) }
|
||||
Expr getRValue() { result = this.getRightOperand() }
|
||||
|
||||
/** Gets the variable being assigned to, if any. */
|
||||
Variable getTargetVariable() { result.getAnAccess() = this.getLValue() }
|
||||
@@ -65,36 +61,36 @@ class AssignExpr extends Assignment, @simple_assign_expr {
|
||||
/**
|
||||
* An assignment operation. Either an arithmetic assignment operation
|
||||
* (`AssignArithmeticOperation`), a bitwise assignment operation
|
||||
* (`AssignBitwiseOperation`), or an event assignment (`AddOrRemoveEventExpr`).
|
||||
* (`AssignBitwiseOperation`), an event assignment (`AddOrRemoveEventExpr`), or
|
||||
* a null-coalescing assignment (`AssignCoalesceExpr`).
|
||||
*/
|
||||
class AssignOperation extends Assignment, @assign_op_expr {
|
||||
override string getOperator() { none() }
|
||||
|
||||
/**
|
||||
* Gets the expanded version of this assignment operation, if any.
|
||||
*
|
||||
* For example, if this assignment operation is `x += y` then
|
||||
* the expanded assignment is `x = x + y`.
|
||||
*
|
||||
* If an expanded version exists, then it is used in the control
|
||||
* flow graph.
|
||||
* Expanded versions of compound assignments are no longer extracted.
|
||||
*/
|
||||
AssignExpr getExpandedAssignment() { expr_parent(result, 2, this) }
|
||||
deprecated AssignExpr getExpandedAssignment() { none() }
|
||||
|
||||
/**
|
||||
* Holds if this assignment operation has an expanded version.
|
||||
*
|
||||
* For example, if this assignment operation is `x += y` then
|
||||
* it has the expanded version `x = x + y`.
|
||||
*
|
||||
* If an expanded version exists, then it is used in the control
|
||||
* flow graph.
|
||||
* Expanded versions of compound assignments are no longer extracted.
|
||||
*/
|
||||
predicate hasExpandedAssignment() { exists(this.getExpandedAssignment()) }
|
||||
deprecated predicate hasExpandedAssignment() { none() }
|
||||
|
||||
override string toString() { result = "... " + this.getOperator() + " ..." }
|
||||
}
|
||||
|
||||
/**
|
||||
* A compound assignment operation that implicitly invokes an operator.
|
||||
* For example, `x += y` assigns the result of `x + y` to `x`.
|
||||
*
|
||||
* Either an arithmetic assignment operation (`AssignArithmeticOperation`) or a bitwise
|
||||
* assignment operation (`AssignBitwiseOperation`).
|
||||
*/
|
||||
class AssignCallOperation extends AssignOperation, OperatorCall, @assign_op_call_expr {
|
||||
override string toString() { result = AssignOperation.super.toString() }
|
||||
}
|
||||
|
||||
/**
|
||||
* An arithmetic assignment operation. Either an addition assignment operation
|
||||
* (`AssignAddExpr`), a subtraction assignment operation (`AssignSubExpr`), a
|
||||
@@ -102,12 +98,12 @@ class AssignOperation extends Assignment, @assign_op_expr {
|
||||
* operation (`AssignDivExpr`), or a remainder assignment operation
|
||||
* (`AssignRemExpr`).
|
||||
*/
|
||||
class AssignArithmeticOperation extends AssignOperation, @assign_arith_expr { }
|
||||
class AssignArithmeticOperation extends AssignCallOperation, @assign_arith_expr { }
|
||||
|
||||
/**
|
||||
* An addition assignment operation, for example `x += y`.
|
||||
*/
|
||||
class AssignAddExpr extends AssignArithmeticOperation, @assign_add_expr {
|
||||
class AssignAddExpr extends AssignArithmeticOperation, AddOperation, @assign_add_expr {
|
||||
override string getOperator() { result = "+=" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "AssignAddExpr" }
|
||||
@@ -116,7 +112,7 @@ class AssignAddExpr extends AssignArithmeticOperation, @assign_add_expr {
|
||||
/**
|
||||
* A subtraction assignment operation, for example `x -= y`.
|
||||
*/
|
||||
class AssignSubExpr extends AssignArithmeticOperation, @assign_sub_expr {
|
||||
class AssignSubExpr extends AssignArithmeticOperation, SubOperation, @assign_sub_expr {
|
||||
override string getOperator() { result = "-=" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "AssignSubExpr" }
|
||||
@@ -125,7 +121,7 @@ class AssignSubExpr extends AssignArithmeticOperation, @assign_sub_expr {
|
||||
/**
|
||||
* An multiplication assignment operation, for example `x *= y`.
|
||||
*/
|
||||
class AssignMulExpr extends AssignArithmeticOperation, @assign_mul_expr {
|
||||
class AssignMulExpr extends AssignArithmeticOperation, MulOperation, @assign_mul_expr {
|
||||
override string getOperator() { result = "*=" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "AssignMulExpr" }
|
||||
@@ -134,7 +130,7 @@ class AssignMulExpr extends AssignArithmeticOperation, @assign_mul_expr {
|
||||
/**
|
||||
* An division assignment operation, for example `x /= y`.
|
||||
*/
|
||||
class AssignDivExpr extends AssignArithmeticOperation, @assign_div_expr {
|
||||
class AssignDivExpr extends AssignArithmeticOperation, DivOperation, @assign_div_expr {
|
||||
override string getOperator() { result = "/=" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "AssignDivExpr" }
|
||||
@@ -143,7 +139,7 @@ class AssignDivExpr extends AssignArithmeticOperation, @assign_div_expr {
|
||||
/**
|
||||
* A remainder assignment operation, for example `x %= y`.
|
||||
*/
|
||||
class AssignRemExpr extends AssignArithmeticOperation, @assign_rem_expr {
|
||||
class AssignRemExpr extends AssignArithmeticOperation, RemOperation, @assign_rem_expr {
|
||||
override string getOperator() { result = "%=" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "AssignRemExpr" }
|
||||
@@ -158,12 +154,12 @@ class AssignRemExpr extends AssignArithmeticOperation, @assign_rem_expr {
|
||||
* operation (`AssignRightShiftExpr`), or an unsigned right-shift assignment
|
||||
* operation (`AssignUnsignedRightShiftExpr`).
|
||||
*/
|
||||
class AssignBitwiseOperation extends AssignOperation, @assign_bitwise_expr { }
|
||||
class AssignBitwiseOperation extends AssignCallOperation, @assign_bitwise_expr { }
|
||||
|
||||
/**
|
||||
* A bitwise-and assignment operation, for example `x &= y`.
|
||||
*/
|
||||
class AssignAndExpr extends AssignBitwiseOperation, @assign_and_expr {
|
||||
class AssignAndExpr extends AssignBitwiseOperation, BitwiseAndOperation, @assign_and_expr {
|
||||
override string getOperator() { result = "&=" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "AssignAndExpr" }
|
||||
@@ -172,7 +168,7 @@ class AssignAndExpr extends AssignBitwiseOperation, @assign_and_expr {
|
||||
/**
|
||||
* A bitwise-or assignment operation, for example `x |= y`.
|
||||
*/
|
||||
class AssignOrExpr extends AssignBitwiseOperation, @assign_or_expr {
|
||||
class AssignOrExpr extends AssignBitwiseOperation, BitwiseOrOperation, @assign_or_expr {
|
||||
override string getOperator() { result = "|=" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "AssignOrExpr" }
|
||||
@@ -181,7 +177,7 @@ class AssignOrExpr extends AssignBitwiseOperation, @assign_or_expr {
|
||||
/**
|
||||
* A bitwise exclusive-or assignment operation, for example `x ^= y`.
|
||||
*/
|
||||
class AssignXorExpr extends AssignBitwiseOperation, @assign_xor_expr {
|
||||
class AssignXorExpr extends AssignBitwiseOperation, BitwiseXorOperation, @assign_xor_expr {
|
||||
override string getOperator() { result = "^=" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "AssignXorExpr" }
|
||||
@@ -190,7 +186,7 @@ class AssignXorExpr extends AssignBitwiseOperation, @assign_xor_expr {
|
||||
/**
|
||||
* A left-shift assignment operation, for example `x <<= y`.
|
||||
*/
|
||||
class AssignLeftShiftExpr extends AssignBitwiseOperation, @assign_lshift_expr {
|
||||
class AssignLeftShiftExpr extends AssignBitwiseOperation, LeftShiftOperation, @assign_lshift_expr {
|
||||
override string getOperator() { result = "<<=" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "AssignLeftShiftExpr" }
|
||||
@@ -199,7 +195,7 @@ class AssignLeftShiftExpr extends AssignBitwiseOperation, @assign_lshift_expr {
|
||||
/**
|
||||
* A right-shift assignment operation, for example `x >>= y`.
|
||||
*/
|
||||
class AssignRightShiftExpr extends AssignBitwiseOperation, @assign_rshift_expr {
|
||||
class AssignRightShiftExpr extends AssignBitwiseOperation, RightShiftOperation, @assign_rshift_expr {
|
||||
override string getOperator() { result = ">>=" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "AssignRightShiftExpr" }
|
||||
@@ -208,12 +204,19 @@ class AssignRightShiftExpr extends AssignBitwiseOperation, @assign_rshift_expr {
|
||||
/**
|
||||
* An unsigned right-shift assignment operation, for example `x >>>= y`.
|
||||
*/
|
||||
class AssignUnsighedRightShiftExpr extends AssignBitwiseOperation, @assign_urshift_expr {
|
||||
class AssignUnsignedRightShiftExpr extends AssignBitwiseOperation, UnsignedRightShiftOperation,
|
||||
@assign_urshift_expr
|
||||
{
|
||||
override string getOperator() { result = ">>>=" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "AssignUnsighedRightShiftExpr" }
|
||||
override string getAPrimaryQlClass() { result = "AssignUnsignedRightShiftExpr" }
|
||||
}
|
||||
|
||||
/**
|
||||
* DEPRECATED: Use `AssignUnsignedRightShiftExpr` instead.
|
||||
*/
|
||||
deprecated class AssignUnsighedRightShiftExpr = AssignUnsignedRightShiftExpr;
|
||||
|
||||
/**
|
||||
* An event assignment. Either an event addition (`AddEventExpr`) or an event
|
||||
* removal (`RemoveEventExpr`).
|
||||
@@ -222,9 +225,9 @@ class AddOrRemoveEventExpr extends AssignOperation, @assign_event_expr {
|
||||
/** Gets the event targeted by this event assignment. */
|
||||
Event getTarget() { result = this.getLValue().getTarget() }
|
||||
|
||||
override EventAccess getLValue() { result = this.getChild(1) }
|
||||
override EventAccess getLValue() { result = this.getChild(0) }
|
||||
|
||||
override Expr getRValue() { result = this.getChild(0) }
|
||||
override EventAccess getLeftOperand() { result = this.getChild(0) }
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -276,7 +279,7 @@ class RemoveEventExpr extends AddOrRemoveEventExpr, @remove_event_expr {
|
||||
/**
|
||||
* A null-coalescing assignment operation, for example `x ??= y`.
|
||||
*/
|
||||
class AssignCoalesceExpr extends AssignOperation, @assign_coalesce_expr {
|
||||
class AssignCoalesceExpr extends AssignOperation, NullCoalescingOperation, @assign_coalesce_expr {
|
||||
override string toString() { result = "... ??= ..." }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "AssignCoalesceExpr" }
|
||||
|
||||
@@ -41,7 +41,7 @@ class BinaryBitwiseOperation extends BitwiseOperation, BinaryOperation, @bin_bit
|
||||
/**
|
||||
* A left-shift operation, for example `x << y`.
|
||||
*/
|
||||
class LeftShiftExpr extends BinaryBitwiseOperation, @lshift_expr {
|
||||
class LeftShiftExpr extends BinaryBitwiseOperation, LeftShiftOperation, @lshift_expr {
|
||||
override string getOperator() { result = "<<" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "LeftShiftExpr" }
|
||||
@@ -50,7 +50,7 @@ class LeftShiftExpr extends BinaryBitwiseOperation, @lshift_expr {
|
||||
/**
|
||||
* A right-shift operation, for example `x >> y`.
|
||||
*/
|
||||
class RightShiftExpr extends BinaryBitwiseOperation, @rshift_expr {
|
||||
class RightShiftExpr extends BinaryBitwiseOperation, RightShiftOperation, @rshift_expr {
|
||||
override string getOperator() { result = ">>" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "RightShiftExpr" }
|
||||
@@ -59,7 +59,9 @@ class RightShiftExpr extends BinaryBitwiseOperation, @rshift_expr {
|
||||
/**
|
||||
* An unsigned right-shift operation, for example `x >>> y`.
|
||||
*/
|
||||
class UnsignedRightShiftExpr extends BinaryBitwiseOperation, @urshift_expr {
|
||||
class UnsignedRightShiftExpr extends BinaryBitwiseOperation, UnsignedRightShiftOperation,
|
||||
@urshift_expr
|
||||
{
|
||||
override string getOperator() { result = ">>>" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "UnsignedRightShiftExpr" }
|
||||
@@ -68,7 +70,7 @@ class UnsignedRightShiftExpr extends BinaryBitwiseOperation, @urshift_expr {
|
||||
/**
|
||||
* A bitwise-and operation, for example `x & y`.
|
||||
*/
|
||||
class BitwiseAndExpr extends BinaryBitwiseOperation, @bit_and_expr {
|
||||
class BitwiseAndExpr extends BinaryBitwiseOperation, BitwiseAndOperation, @bit_and_expr {
|
||||
override string getOperator() { result = "&" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "BitwiseAndExpr" }
|
||||
@@ -77,7 +79,7 @@ class BitwiseAndExpr extends BinaryBitwiseOperation, @bit_and_expr {
|
||||
/**
|
||||
* A bitwise-or operation, for example `x | y`.
|
||||
*/
|
||||
class BitwiseOrExpr extends BinaryBitwiseOperation, @bit_or_expr {
|
||||
class BitwiseOrExpr extends BinaryBitwiseOperation, BitwiseOrOperation, @bit_or_expr {
|
||||
override string getOperator() { result = "|" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "BitwiseOrExpr" }
|
||||
@@ -86,7 +88,7 @@ class BitwiseOrExpr extends BinaryBitwiseOperation, @bit_or_expr {
|
||||
/**
|
||||
* A bitwise exclusive-or operation, for example `x ^ y`.
|
||||
*/
|
||||
class BitwiseXorExpr extends BinaryBitwiseOperation, @bit_xor_expr {
|
||||
class BitwiseXorExpr extends BinaryBitwiseOperation, BitwiseXorOperation, @bit_xor_expr {
|
||||
override string getOperator() { result = "^" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "BitwiseXorExpr" }
|
||||
|
||||
@@ -478,7 +478,7 @@ class ConstructorInitializer extends Call, @constructor_init_expr {
|
||||
}
|
||||
|
||||
/**
|
||||
* A call to a user-defined operator, for example `this + other`
|
||||
* A call to an operator, for example `this + other`
|
||||
* on line 7 in
|
||||
*
|
||||
* ```csharp
|
||||
@@ -493,12 +493,16 @@ class ConstructorInitializer extends Call, @constructor_init_expr {
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
class OperatorCall extends Call, LateBindableExpr, @operator_invocation_expr {
|
||||
class OperatorCall extends Call, LateBindableExpr, @op_invoke_expr {
|
||||
override Operator getTarget() { expr_call(this, result) }
|
||||
|
||||
override Operator getARuntimeTarget() { result = Call.super.getARuntimeTarget() }
|
||||
|
||||
override string toString() { result = "call to operator " + this.getTarget().getName() }
|
||||
override string toString() {
|
||||
if this instanceof DynamicOperatorCall
|
||||
then result = "dynamic call to operator " + this.getLateBoundTargetName()
|
||||
else result = "call to operator " + this.getTarget().getName()
|
||||
}
|
||||
|
||||
override string getAPrimaryQlClass() { result = "OperatorCall" }
|
||||
}
|
||||
|
||||
@@ -96,13 +96,7 @@ class DynamicMethodCall extends DynamicExpr, MethodCall {
|
||||
* Unlike an ordinary call to a user-defined operator (`OperatorCall`), the
|
||||
* target operator may not be known at compile-time (as in the example above).
|
||||
*/
|
||||
class DynamicOperatorCall extends DynamicExpr, OperatorCall {
|
||||
override string toString() {
|
||||
result = "dynamic call to operator " + this.getLateBoundTargetName()
|
||||
}
|
||||
|
||||
override string getAPrimaryQlClass() { result = "DynamicOperatorCall" }
|
||||
}
|
||||
class DynamicOperatorCall extends DynamicExpr, OperatorCall { }
|
||||
|
||||
/**
|
||||
* A call to a user-defined mutator operator where the operand is a `dynamic`
|
||||
|
||||
@@ -14,6 +14,7 @@ import Creation
|
||||
import Dynamic
|
||||
import Literal
|
||||
import LogicalOperation
|
||||
import Operation
|
||||
import semmle.code.csharp.controlflow.ControlFlowElement
|
||||
import semmle.code.csharp.Location
|
||||
import semmle.code.csharp.Stmt
|
||||
@@ -65,25 +66,11 @@ class Expr extends ControlFlowElement, @expr {
|
||||
/** Gets the enclosing callable of this expression, if any. */
|
||||
override Callable getEnclosingCallable() { enclosingCallable(this, result) }
|
||||
|
||||
pragma[nomagic]
|
||||
private predicate isExpandedAssignmentRValueDescendant() {
|
||||
this =
|
||||
any(AssignOperation op).getExpandedAssignment().getRValue().getChildExpr(0).getAChildExpr()
|
||||
or
|
||||
exists(Expr parent |
|
||||
parent.isExpandedAssignmentRValueDescendant() and
|
||||
this = parent.getAChildExpr()
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds if this expression is generated by the compiler and does not appear
|
||||
* explicitly in the source code.
|
||||
*/
|
||||
final predicate isImplicit() {
|
||||
compiler_generated(this) or
|
||||
this.isExpandedAssignmentRValueDescendant()
|
||||
}
|
||||
final predicate isImplicit() { compiler_generated(this) }
|
||||
|
||||
/**
|
||||
* Gets an expression that is the result of stripping (recursively) all
|
||||
@@ -168,7 +155,7 @@ class LocalVariableDeclExpr extends Expr, @local_var_decl_expr {
|
||||
string getName() { result = this.getVariable().getName() }
|
||||
|
||||
/** Gets the initializer expression of this local variable declaration, if any. */
|
||||
Expr getInitializer() { result = this.getChild(0) }
|
||||
Expr getInitializer() { result = this.getChild(1) }
|
||||
|
||||
/** Holds if this local variable declaration has an initializer. */
|
||||
predicate hasInitializer() { exists(this.getInitializer()) }
|
||||
@@ -188,7 +175,7 @@ class LocalVariableDeclExpr extends Expr, @local_var_decl_expr {
|
||||
|
||||
/** Gets the variable access used in this declaration, if any. */
|
||||
LocalVariableAccess getAccess() {
|
||||
result = this.getChild(1) or
|
||||
result = this.getChild(0) or
|
||||
result = this // `out` argument
|
||||
}
|
||||
|
||||
|
||||
@@ -65,7 +65,9 @@ class LogicalOrExpr extends BinaryLogicalOperation, @log_or_expr {
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
class NullCoalescingExpr extends BinaryLogicalOperation, @null_coalescing_expr {
|
||||
class NullCoalescingExpr extends BinaryLogicalOperation, NullCoalescingOperation,
|
||||
@null_coalescing_expr
|
||||
{
|
||||
override string getOperator() { result = "??" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "NullCoalescingExpr" }
|
||||
|
||||
71
csharp/ql/lib/semmle/code/csharp/exprs/Operation.qll
Normal file
71
csharp/ql/lib/semmle/code/csharp/exprs/Operation.qll
Normal file
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* Provides classes for operations that also have compound assignment forms.
|
||||
*/
|
||||
|
||||
import Expr
|
||||
|
||||
/**
|
||||
* An addition operation, either `x + y` or `x += y`.
|
||||
*/
|
||||
class AddOperation extends BinaryOperation, @add_operation { }
|
||||
|
||||
/**
|
||||
* A subtraction operation, either `x - y` or `x -= y`.
|
||||
*/
|
||||
class SubOperation extends BinaryOperation, @sub_operation { }
|
||||
|
||||
/**
|
||||
* A multiplication operation, either `x * y` or `x *= y`.
|
||||
*/
|
||||
class MulOperation extends BinaryOperation, @mul_operation { }
|
||||
|
||||
/**
|
||||
* A division operation, either `x / y` or `x /= y`.
|
||||
*/
|
||||
class DivOperation extends BinaryOperation, @div_operation {
|
||||
/** Gets the numerator of this division operation. */
|
||||
Expr getNumerator() { result = this.getLeftOperand() }
|
||||
|
||||
/** Gets the denominator of this division operation. */
|
||||
Expr getDenominator() { result = this.getRightOperand() }
|
||||
}
|
||||
|
||||
/**
|
||||
* A remainder operation, either `x % y` or `x %= y`.
|
||||
*/
|
||||
class RemOperation extends BinaryOperation, @rem_operation { }
|
||||
|
||||
/**
|
||||
* A bitwise-and operation, either `x & y` or `x &= y`.
|
||||
*/
|
||||
class BitwiseAndOperation extends BinaryOperation, @and_operation { }
|
||||
|
||||
/**
|
||||
* A bitwise-or operation, either `x | y` or `x |= y`.
|
||||
*/
|
||||
class BitwiseOrOperation extends BinaryOperation, @or_operation { }
|
||||
|
||||
/**
|
||||
* A bitwise exclusive-or operation, either `x ^ y` or `x ^= y`.
|
||||
*/
|
||||
class BitwiseXorOperation extends BinaryOperation, @xor_operation { }
|
||||
|
||||
/**
|
||||
* A left-shift operation, either `x << y` or `x <<= y`.
|
||||
*/
|
||||
class LeftShiftOperation extends BinaryOperation, @lshift_operation { }
|
||||
|
||||
/**
|
||||
* A right-shift operation, either `x >> y` or `x >>= y`.
|
||||
*/
|
||||
class RightShiftOperation extends BinaryOperation, @rshift_operation { }
|
||||
|
||||
/**
|
||||
* An unsigned right-shift operation, either `x >>> y` or `x >>>= y`.
|
||||
*/
|
||||
class UnsignedRightShiftOperation extends BinaryOperation, @urshift_operation { }
|
||||
|
||||
/**
|
||||
* A null-coalescing operation, either `x ?? y` or `x ??= y`.
|
||||
*/
|
||||
class NullCoalescingOperation extends BinaryOperation, @null_coalescing_operation { }
|
||||
@@ -131,7 +131,7 @@ class SystemXmlSchemaXmlSchemaValidationFlags extends EnumConstant {
|
||||
}
|
||||
}
|
||||
|
||||
private Expr getBitwiseOrOperand(Expr e) { result = e.(BitwiseOrExpr).getAnOperand() }
|
||||
private Expr getBitwiseOrOperand(Expr e) { result = e.(BitwiseOrOperation).getAnOperand() }
|
||||
|
||||
/** A creation of an instance of `System.Xml.XmlReaderSettings`. */
|
||||
class XmlReaderSettingsCreation extends ObjectCreation {
|
||||
|
||||
@@ -32,7 +32,7 @@ private predicate branchingExpr(Expr expr) {
|
||||
expr instanceof ConditionalExpr or
|
||||
expr instanceof LogicalAndExpr or
|
||||
expr instanceof LogicalOrExpr or
|
||||
expr instanceof NullCoalescingExpr
|
||||
expr instanceof NullCoalescingOperation
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -1216,9 +1216,23 @@ case @expr.kind of
|
||||
| @string_literal_expr | @null_literal_expr;
|
||||
|
||||
@assign_expr = @simple_assign_expr | @assign_op_expr | @local_var_decl_expr;
|
||||
@assign_op_expr = @assign_arith_expr | @assign_bitwise_expr | @assign_event_expr | @assign_coalesce_expr;
|
||||
@assign_op_call_expr = @assign_arith_expr | @assign_bitwise_expr
|
||||
@assign_op_expr = @assign_op_call_expr | @assign_event_expr | @assign_coalesce_expr;
|
||||
@assign_event_expr = @add_event_expr | @remove_event_expr;
|
||||
|
||||
@add_operation = @add_expr | @assign_add_expr;
|
||||
@sub_operation = @sub_expr | @assign_sub_expr;
|
||||
@mul_operation = @mul_expr | @assign_mul_expr;
|
||||
@div_operation = @div_expr | @assign_div_expr;
|
||||
@rem_operation = @rem_expr | @assign_rem_expr;
|
||||
@and_operation = @bit_and_expr | @assign_and_expr;
|
||||
@xor_operation = @bit_xor_expr | @assign_xor_expr;
|
||||
@or_operation = @bit_or_expr | @assign_or_expr;
|
||||
@lshift_operation = @lshift_expr | @assign_lshift_expr;
|
||||
@rshift_operation = @rshift_expr | @assign_rshift_expr;
|
||||
@urshift_operation = @urshift_expr | @assign_urshift_expr;
|
||||
@null_coalescing_operation = @null_coalescing_expr | @assign_coalesce_expr;
|
||||
|
||||
@assign_arith_expr = @assign_add_expr | @assign_sub_expr | @assign_mul_expr | @assign_div_expr
|
||||
| @assign_rem_expr
|
||||
@assign_bitwise_expr = @assign_and_expr | @assign_or_expr | @assign_xor_expr
|
||||
@@ -1270,14 +1284,15 @@ case @expr.kind of
|
||||
|
||||
@anonymous_function_expr = @lambda_expr | @anonymous_method_expr;
|
||||
|
||||
@call = @method_invocation_expr | @constructor_init_expr | @operator_invocation_expr
|
||||
@op_invoke_expr = @operator_invocation_expr | @assign_op_call_expr
|
||||
@call = @method_invocation_expr | @constructor_init_expr | @op_invoke_expr
|
||||
| @delegate_invocation_expr | @object_creation_expr | @call_access_expr
|
||||
| @local_function_invocation_expr | @function_pointer_invocation_expr;
|
||||
|
||||
@call_access_expr = @property_access_expr | @event_access_expr | @indexer_access_expr;
|
||||
|
||||
@late_bindable_expr = @dynamic_element_access_expr | @dynamic_member_access_expr
|
||||
| @object_creation_expr | @method_invocation_expr | @operator_invocation_expr;
|
||||
| @object_creation_expr | @method_invocation_expr | @op_invoke_expr;
|
||||
|
||||
@throw_element = @throw_expr | @throw_stmt;
|
||||
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
class Expr extends @expr {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class Location extends @location {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class ControlFlowElement extends @control_flow_element {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class TypeOrRef extends @type_or_ref {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class Callable extends @callable {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class Accessible extends @accessible {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
predicate assignmentKind(int kind) {
|
||||
// | 63 = @simple_assign_expr
|
||||
// | 80 = @add_event_expr
|
||||
// | 81 = @remove_event_expr
|
||||
// | 83 = @local_var_decl_expr
|
||||
kind = [63, 80, 81, 83]
|
||||
}
|
||||
|
||||
predicate compoundAssignmentKind(int kind) {
|
||||
// | 64 = @assign_add_expr
|
||||
// | 65 = @assign_sub_expr
|
||||
// | 66 = @assign_mul_expr
|
||||
// | 67 = @assign_div_expr
|
||||
// | 68 = @assign_rem_expr
|
||||
// | 69 = @assign_and_expr
|
||||
// | 70 = @assign_xor_expr
|
||||
// | 71 = @assign_or_expr
|
||||
// | 72 = @assign_lshift_expr
|
||||
// | 73 = @assign_rshift_expr
|
||||
// | 119 = @assign_coalesce_expr
|
||||
// | 134 = @assign_urshift_expr
|
||||
kind = [64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 119, 134]
|
||||
}
|
||||
|
||||
class CompoundAssignmentExpr extends Expr {
|
||||
CompoundAssignmentExpr() {
|
||||
exists(int kind | compoundAssignmentKind(kind) | expressions(this, kind, _))
|
||||
}
|
||||
}
|
||||
|
||||
predicate isAssignment(Expr ass) {
|
||||
exists(int kind | assignmentKind(kind) |
|
||||
expressions(ass, kind, _) and
|
||||
// Exclude assignments that are part of a compound assignment. These are handled seperatly.
|
||||
not exists(CompoundAssignmentExpr e | expr_parent(ass, 2, e))
|
||||
)
|
||||
}
|
||||
|
||||
Expr getOperatorCall(CompoundAssignmentExpr e) {
|
||||
exists(Expr assignment |
|
||||
expr_parent(assignment, 2, e) and
|
||||
expr_parent(result, 0, assignment)
|
||||
)
|
||||
}
|
||||
|
||||
query predicate new_expressions(Expr e, int kind, TypeOrRef t) {
|
||||
expressions(e, kind, t) and
|
||||
// Remove the unused expanded assignment expressions.
|
||||
not exists(CompoundAssignmentExpr parent, Expr assignment | expr_parent(assignment, 2, parent) |
|
||||
e = assignment or
|
||||
expr_parent(e, 0, assignment) or
|
||||
expr_parent(e, 1, assignment)
|
||||
)
|
||||
}
|
||||
|
||||
query predicate new_expr_parent(Expr e, int child, ControlFlowElement parent) {
|
||||
if isAssignment(parent)
|
||||
then
|
||||
// Swap children for assignments, local variable declarations and add/remove event.
|
||||
child = 0 and expr_parent(e, 1, parent)
|
||||
or
|
||||
child = 1 and expr_parent(e, 0, parent)
|
||||
else (
|
||||
// Case for compound assignments. The parent child relation is contracted.
|
||||
exists(Expr op | op = getOperatorCall(parent) | expr_parent(e, child, op))
|
||||
or
|
||||
// For other expressions (as long as they are included in the new expressions
|
||||
// table), the parent child relation is unchanged.
|
||||
expr_parent(e, child, parent) and
|
||||
new_expressions(e, _, _) and
|
||||
(not parent instanceof Expr or new_expressions(parent, _, _))
|
||||
)
|
||||
}
|
||||
|
||||
query predicate new_expr_location(Expr e, Location loc) {
|
||||
expr_location(e, loc) and new_expressions(e, _, _)
|
||||
}
|
||||
|
||||
query predicate new_expr_call(Expr e, Callable c) {
|
||||
exists(Expr op | op = getOperatorCall(e) | expr_call(op, c))
|
||||
or
|
||||
expr_call(e, c) and not e = getOperatorCall(_)
|
||||
}
|
||||
|
||||
query predicate new_dynamic_member_name(Expr e, string name) {
|
||||
exists(Expr op | op = getOperatorCall(e) | dynamic_member_name(op, name))
|
||||
or
|
||||
dynamic_member_name(e, name) and not e = getOperatorCall(_)
|
||||
}
|
||||
|
||||
query predicate new_expr_access(Expr e, Accessible a) {
|
||||
expr_access(e, a) and new_expressions(e, _, _)
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,8 @@
|
||||
description: Add operation kinds for operations, cleanup expanded assignments and rotate assignment child expressions.
|
||||
compatibility: partial
|
||||
expr_parent.rel: run assignments.ql new_expr_parent
|
||||
expressions.rel: run assignments.ql new_expressions
|
||||
expr_location.rel: run assignments.ql new_expr_location
|
||||
expr_call.rel: run assignments.ql new_expr_call
|
||||
dynamic_member_name.rel: run assignments.ql new_dynamic_member_name
|
||||
expr_access.rel: run assignments.ql new_expr_access
|
||||
@@ -43,7 +43,7 @@ module ConstCondImpl = ConstCond::Make<Location, Cfg, ConstCondInput>;
|
||||
predicate nullCheck(Expr e, boolean direct) {
|
||||
exists(QualifiableExpr qe | qe.isConditional() and qe.getQualifier() = e and direct = true)
|
||||
or
|
||||
exists(NullCoalescingExpr nce | nce.getLeftOperand() = e and direct = true)
|
||||
exists(NullCoalescingOperation nce | nce.getLeftOperand() = e and direct = true)
|
||||
or
|
||||
exists(ConditionalExpr ce | ce.getThen() = e or ce.getElse() = e |
|
||||
nullCheck(ce, _) and direct = false
|
||||
@@ -114,7 +114,7 @@ class ConstantBooleanCondition extends ConstantCondition {
|
||||
|
||||
override predicate isWhiteListed() {
|
||||
// E.g. `x ?? false`
|
||||
this.(BoolLiteral) = any(NullCoalescingExpr nce).getRightOperand() or
|
||||
this.(BoolLiteral) = any(NullCoalescingOperation nce).getRightOperand() or
|
||||
// No need to flag logical operations when the operands are constant
|
||||
isConstantCondition(this.(LogicalNotExpr).getOperand(), _) or
|
||||
this =
|
||||
|
||||
@@ -12,19 +12,38 @@
|
||||
|
||||
import csharp
|
||||
|
||||
predicate nontrivialLogicalOperator(BinaryLogicalOperation e) {
|
||||
not exists(BinaryLogicalOperation parent |
|
||||
abstract class RelevantBinaryOperations extends Operation { }
|
||||
|
||||
private class AddBinaryLogicalOperationRelevantBinaryOperations extends RelevantBinaryOperations,
|
||||
BinaryLogicalOperation
|
||||
{ }
|
||||
|
||||
private class AddAssignCoalesceExprRelevantBinaryOperations extends RelevantBinaryOperations,
|
||||
AssignCoalesceExpr
|
||||
{ }
|
||||
|
||||
abstract class RelevantOperations extends Operation { }
|
||||
|
||||
private class AddLogicalOperationRelevantOperations extends RelevantOperations, LogicalOperation { }
|
||||
|
||||
private class AddAssignCoalesceExprRelevantOperations extends RelevantOperations, AssignCoalesceExpr
|
||||
{ }
|
||||
|
||||
predicate nontrivialLogicalOperator(RelevantBinaryOperations e) {
|
||||
not exists(RelevantBinaryOperations parent |
|
||||
parent = e.getParent() and
|
||||
parent.getOperator() = e.getOperator()
|
||||
)
|
||||
}
|
||||
|
||||
predicate logicalParent(LogicalOperation op, LogicalOperation parent) { parent = op.getParent() }
|
||||
predicate logicalParent(RelevantOperations op, RelevantOperations parent) {
|
||||
parent = op.getParent()
|
||||
}
|
||||
|
||||
from Expr e, int operators
|
||||
where
|
||||
not e.getParent() instanceof LogicalOperation and
|
||||
not e.getParent() instanceof RelevantOperations and
|
||||
operators =
|
||||
count(BinaryLogicalOperation op | logicalParent*(op, e) and nontrivialLogicalOperator(op)) and
|
||||
count(RelevantBinaryOperations op | logicalParent*(op, e) and nontrivialLogicalOperator(op)) and
|
||||
operators > 3
|
||||
select e, "Complex condition: too many logical operations in this expression."
|
||||
|
||||
@@ -84,6 +84,8 @@ class RelevantDefinition extends AssignableDefinition {
|
||||
)
|
||||
or
|
||||
this instanceof AssignableDefinitions::PatternDefinition
|
||||
or
|
||||
this instanceof AssignableDefinitions::AssignOperationDefinition
|
||||
}
|
||||
|
||||
/** Holds if this assignment may be live. */
|
||||
|
||||
@@ -15,22 +15,30 @@
|
||||
import csharp
|
||||
import semmle.code.csharp.commons.StructuralComparison
|
||||
|
||||
pragma[noinline]
|
||||
private predicate same(AssignableAccess x, AssignableAccess y) {
|
||||
exists(NullCoalescingExpr nce |
|
||||
x = nce.getLeftOperand() and
|
||||
y = nce.getRightOperand().getAChildExpr*()
|
||||
) and
|
||||
sameGvn(x, y)
|
||||
pragma[nomagic]
|
||||
private predicate relevant(Expr left, Expr right) {
|
||||
exists(NullCoalescingOperation nce |
|
||||
left = nce.getLeftOperand() and
|
||||
right = nce.getRightOperand()
|
||||
)
|
||||
}
|
||||
|
||||
private predicate uselessNullCoalescingExpr(NullCoalescingExpr nce) {
|
||||
pragma[noinline]
|
||||
private predicate same(AssignableAccess x, AssignableAccess y) {
|
||||
exists(Expr e |
|
||||
relevant(x, e) and
|
||||
y = e.getAChildExpr*() and
|
||||
sameGvn(x, y)
|
||||
)
|
||||
}
|
||||
|
||||
private predicate uselessNullCoalescingOperation(NullCoalescingOperation nce) {
|
||||
exists(AssignableAccess x |
|
||||
nce.getLeftOperand() = x and
|
||||
forex(AssignableAccess y | same(x, y) | y instanceof AssignableRead and not y.isRefArgument())
|
||||
)
|
||||
}
|
||||
|
||||
from NullCoalescingExpr nce
|
||||
where uselessNullCoalescingExpr(nce)
|
||||
from NullCoalescingOperation nce
|
||||
where uselessNullCoalescingOperation(nce)
|
||||
select nce, "Both operands of this null-coalescing expression access the same variable or property."
|
||||
|
||||
@@ -23,7 +23,9 @@ where
|
||||
) and
|
||||
forex(Access a | a = v.getAnAccess() |
|
||||
a = any(ModifierMethodCall m).getQualifier() or
|
||||
a = any(Assignment ass | ass.getRValue() instanceof ObjectCreation).getLValue()
|
||||
a = any(AssignExpr ass | ass.getRValue() instanceof ObjectCreation).getLValue() or
|
||||
a =
|
||||
any(LocalVariableDeclAndInitExpr ass | ass.getRValue() instanceof ObjectCreation).getLValue()
|
||||
) and
|
||||
not v = any(ForeachStmt fs).getVariable() and
|
||||
not v = any(BindingPatternExpr vpe).getVariableDeclExpr().getVariable() and
|
||||
|
||||
@@ -23,7 +23,6 @@ class NonShortCircuit extends BinaryBitwiseOperation {
|
||||
or
|
||||
this instanceof BitwiseOrExpr
|
||||
) and
|
||||
not exists(AssignBitwiseOperation abo | abo.getExpandedAssignment().getRValue() = this) and
|
||||
this.getLeftOperand().getType() instanceof BoolType and
|
||||
this.getRightOperand().getType() instanceof BoolType
|
||||
}
|
||||
|
||||
@@ -27,13 +27,13 @@ predicate convertedToFloatOrDecimal(Expr e, Type t) {
|
||||
t instanceof DecimalType
|
||||
)
|
||||
or
|
||||
exists(BinaryArithmeticOperation op |
|
||||
exists(BinaryOperation op |
|
||||
op.getAnOperand() = e and
|
||||
convertedToFloatOrDecimal(op, t)
|
||||
|
|
||||
op instanceof AddExpr or
|
||||
op instanceof SubExpr or
|
||||
op instanceof MulExpr
|
||||
op instanceof AddOperation or
|
||||
op instanceof SubOperation or
|
||||
op instanceof MulOperation
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -23,7 +23,6 @@ class StringCat extends AddExpr {
|
||||
* where `v` is a simple variable (and not, for example, a property).
|
||||
*/
|
||||
predicate isSelfConcatAssignExpr(AssignExpr e, Variable v) {
|
||||
not e = any(AssignAddExpr a).getExpandedAssignment() and
|
||||
exists(VariableAccess use |
|
||||
stringCatContains(e.getRValue(), use) and
|
||||
use.getTarget() = e.getTargetVariable() and
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
import csharp
|
||||
import semmle.code.csharp.controlflow.Guards
|
||||
|
||||
from AddExpr add, VirtualMethodCall taintSrc
|
||||
from AddOperation add, VirtualMethodCall taintSrc
|
||||
where
|
||||
// `add` is performing pointer arithmetic
|
||||
add.getType() instanceof PointerType and
|
||||
|
||||
@@ -89,11 +89,7 @@ module Random {
|
||||
e = any(SensitiveLibraryParameter v).getAnAssignedArgument()
|
||||
or
|
||||
// Assignment operation, e.g. += or similar
|
||||
exists(AssignOperation ao |
|
||||
ao.getRValue() = e and
|
||||
// "expanded" assignments will be covered by simple assignment
|
||||
not ao.hasExpandedAssignment()
|
||||
|
|
||||
exists(AssignOperation ao | ao.getRValue() = e |
|
||||
ao.getLValue() = any(SensitiveVariable v).getAnAccess() or
|
||||
ao.getLValue() = any(SensitiveProperty v).getAnAccess() or
|
||||
ao.getLValue() = any(SensitiveLibraryParameter v).getAnAccess()
|
||||
|
||||
@@ -211,7 +211,7 @@ module RequestForgery {
|
||||
}
|
||||
|
||||
private predicate stringConcatStep(DataFlow::Node prev, DataFlow::Node succ) {
|
||||
exists(AddExpr a |
|
||||
exists(AddOperation a |
|
||||
a.getLeftOperand() = prev.asExpr()
|
||||
or
|
||||
a.getRightOperand() = prev.asExpr() and
|
||||
|
||||
@@ -174,7 +174,7 @@ module HashWithoutSaltConfig implements DataFlow::ConfigSig {
|
||||
mc.getAnArgument() = node.asExpr()
|
||||
)
|
||||
or
|
||||
exists(AddExpr e | node.asExpr() = e.getAnOperand()) // password+salt
|
||||
exists(AddOperation e | node.asExpr() = e.getAnOperand()) // password+salt
|
||||
or
|
||||
exists(InterpolatedStringExpr e | node.asExpr() = e.getAnInsert())
|
||||
or
|
||||
|
||||
@@ -33,14 +33,16 @@
|
||||
| arguments.cs:59:16:59:25 | access to indexer | arguments.cs:59:21:59:21 | 3 | a |
|
||||
| arguments.cs:59:16:59:25 | access to indexer | arguments.cs:59:24:59:24 | 4 | b |
|
||||
| arguments.cs:59:16:59:25 | access to indexer | arguments.cs:59:34:59:34 | 6 | value |
|
||||
| arguments.cs:61:9:61:12 | access to property Prop | arguments.cs:61:9:61:17 | ... + ... | value |
|
||||
| arguments.cs:61:9:61:12 | access to property Prop | arguments.cs:61:9:61:17 | ... += ... | value |
|
||||
| arguments.cs:61:9:61:17 | ... += ... | arguments.cs:61:9:61:12 | access to property Prop | left |
|
||||
| arguments.cs:61:9:61:17 | ... += ... | arguments.cs:61:17:61:17 | 7 | right |
|
||||
| arguments.cs:62:9:62:18 | access to indexer | arguments.cs:62:14:62:14 | 8 | a |
|
||||
| arguments.cs:62:9:62:18 | access to indexer | arguments.cs:62:17:62:17 | 9 | b |
|
||||
| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:9:63:26 | ... + ... | value |
|
||||
| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:14:63:15 | 10 | a |
|
||||
| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:9:63:26 | ... += ... | value |
|
||||
| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:14:63:15 | 10 | a |
|
||||
| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:18:63:19 | 11 | b |
|
||||
| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:18:63:19 | 11 | b |
|
||||
| arguments.cs:63:9:63:26 | ... += ... | arguments.cs:63:9:63:20 | access to indexer | left |
|
||||
| arguments.cs:63:9:63:26 | ... += ... | arguments.cs:63:25:63:26 | 12 | right |
|
||||
| arguments.cs:65:16:65:27 | access to indexer | arguments.cs:65:21:65:22 | 15 | a |
|
||||
| arguments.cs:65:16:65:27 | access to indexer | arguments.cs:65:25:65:26 | 16 | b |
|
||||
| arguments.cs:76:9:76:31 | call to method f8`1 | arguments.cs:76:12:76:12 | 0 | o |
|
||||
|
||||
@@ -33,12 +33,12 @@
|
||||
| arguments.cs:59:16:59:25 | access to indexer | arguments.cs:59:21:59:21 | 3 | arguments.cs:53:18:53:18 | a |
|
||||
| arguments.cs:59:16:59:25 | access to indexer | arguments.cs:59:24:59:24 | 4 | arguments.cs:53:25:53:25 | b |
|
||||
| arguments.cs:59:16:59:25 | access to indexer | arguments.cs:59:34:59:34 | 6 | arguments.cs:53:44:53:46 | value |
|
||||
| arguments.cs:61:9:61:12 | access to property Prop | arguments.cs:61:9:61:17 | ... + ... | arguments.cs:51:21:51:23 | value |
|
||||
| arguments.cs:61:9:61:12 | access to property Prop | arguments.cs:61:9:61:17 | ... += ... | arguments.cs:51:21:51:23 | value |
|
||||
| arguments.cs:62:9:62:18 | access to indexer | arguments.cs:62:14:62:14 | 8 | arguments.cs:53:18:53:18 | a |
|
||||
| arguments.cs:62:9:62:18 | access to indexer | arguments.cs:62:14:62:14 | 8 | arguments.cs:53:18:53:18 | a |
|
||||
| arguments.cs:62:9:62:18 | access to indexer | arguments.cs:62:17:62:17 | 9 | arguments.cs:53:25:53:25 | b |
|
||||
| arguments.cs:62:9:62:18 | access to indexer | arguments.cs:62:17:62:17 | 9 | arguments.cs:53:25:53:25 | b |
|
||||
| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:9:63:26 | ... + ... | arguments.cs:53:44:53:46 | value |
|
||||
| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:9:63:26 | ... += ... | arguments.cs:53:44:53:46 | value |
|
||||
| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:14:63:15 | 10 | arguments.cs:53:18:53:18 | a |
|
||||
| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:14:63:15 | 10 | arguments.cs:53:18:53:18 | a |
|
||||
| arguments.cs:63:9:63:20 | access to indexer | arguments.cs:63:18:63:19 | 11 | arguments.cs:53:25:53:25 | b |
|
||||
|
||||
@@ -36,8 +36,6 @@
|
||||
| arguments.cs:62:14:62:14 | 8 | 0 |
|
||||
| arguments.cs:62:17:62:17 | 9 | 0 |
|
||||
| arguments.cs:63:14:63:15 | 10 | 0 |
|
||||
| arguments.cs:63:14:63:15 | 10 | 0 |
|
||||
| arguments.cs:63:18:63:19 | 11 | 0 |
|
||||
| arguments.cs:63:18:63:19 | 11 | 0 |
|
||||
| arguments.cs:64:22:64:23 | 13 | 0 |
|
||||
| arguments.cs:64:26:64:27 | 14 | 0 |
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
| arguments.cs:51:21:51:23 | value | arguments.cs:57:16:57:16 | 0 |
|
||||
| arguments.cs:51:21:51:23 | value | arguments.cs:58:16:58:25 | access to indexer |
|
||||
| arguments.cs:51:21:51:23 | value | arguments.cs:59:31:59:31 | 5 |
|
||||
| arguments.cs:51:21:51:23 | value | arguments.cs:61:9:61:17 | ... + ... |
|
||||
| arguments.cs:51:21:51:23 | value | arguments.cs:61:9:61:17 | ... += ... |
|
||||
| arguments.cs:53:18:53:18 | a | arguments.cs:58:21:58:21 | 1 |
|
||||
| arguments.cs:53:18:53:18 | a | arguments.cs:59:21:59:21 | 3 |
|
||||
| arguments.cs:53:18:53:18 | a | arguments.cs:62:14:62:14 | 8 |
|
||||
@@ -44,7 +44,7 @@
|
||||
| arguments.cs:53:25:53:25 | b | arguments.cs:63:18:63:19 | 11 |
|
||||
| arguments.cs:53:25:53:25 | b | arguments.cs:65:25:65:26 | 16 |
|
||||
| arguments.cs:53:44:53:46 | value | arguments.cs:59:34:59:34 | 6 |
|
||||
| arguments.cs:53:44:53:46 | value | arguments.cs:63:9:63:26 | ... + ... |
|
||||
| arguments.cs:53:44:53:46 | value | arguments.cs:63:9:63:26 | ... += ... |
|
||||
| arguments.cs:74:20:74:20 | o | arguments.cs:76:12:76:12 | 0 |
|
||||
| arguments.cs:74:20:74:20 | o | arguments.cs:77:12:77:12 | 0 |
|
||||
| arguments.cs:74:20:74:20 | o | arguments.cs:78:12:78:12 | 0 |
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
| Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:6:9:6:14 | ... = ... | Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:6:9:6:14 | ... + ... | Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:6:14:6:14 | 1 |
|
||||
| Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:9:9:9:14 | ... = ... | Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:9:9:9:14 | dynamic call to operator - | Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:9:14:9:14 | 2 |
|
||||
| Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:12:9:12:17 | ... = ... | Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:12:9:12:17 | call to operator + | Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:12:14:12:17 | this access |
|
||||
@@ -1,22 +0,0 @@
|
||||
import csharp
|
||||
|
||||
predicate getExpandedOperatorArgs(Expr e, Expr left, Expr right) {
|
||||
e =
|
||||
any(BinaryArithmeticOperation bo |
|
||||
bo.getLeftOperand() = left and
|
||||
bo.getRightOperand() = right
|
||||
)
|
||||
or
|
||||
e =
|
||||
any(OperatorCall oc |
|
||||
oc.getArgument(0) = left and
|
||||
oc.getArgument(1) = right
|
||||
)
|
||||
}
|
||||
|
||||
from AssignOperation ao, AssignExpr ae, Expr op, Expr left, Expr right
|
||||
where
|
||||
ae = ao.getExpandedAssignment() and
|
||||
op = ae.getRValue() and
|
||||
getExpandedOperatorArgs(op, left, right)
|
||||
select ao, ae, ae.getLValue(), op, left, right
|
||||
@@ -7,11 +7,11 @@
|
||||
| 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 | 34 |
|
||||
| AccessorCalls.cs:49:10:49:11 | enter M6 | AccessorCalls.cs:49:10:49:11 | exit M6 | 43 |
|
||||
| AccessorCalls.cs:42:10:42:11 | enter M5 | AccessorCalls.cs:42:10:42:11 | exit M5 | 24 |
|
||||
| AccessorCalls.cs:49:10:49:11 | enter M6 | AccessorCalls.cs:49:10:49:11 | exit M6 | 30 |
|
||||
| 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 |
|
||||
| AccessorCalls.cs:66:10:66:11 | enter M9 | AccessorCalls.cs:66:10:66:11 | exit M9 | 51 |
|
||||
| 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 |
|
||||
| ArrayCreation.cs:5:12:5:13 | enter M2 | ArrayCreation.cs:5:12:5:13 | exit M2 | 6 |
|
||||
@@ -164,7 +164,7 @@
|
||||
| Assert.cs:138:10:138:12 | exit M13 (abnormal) | Assert.cs:138:10:138:12 | exit M13 (abnormal) | 1 |
|
||||
| Assert.cs:141:9:141:15 | return ...; | Assert.cs:138:10:138:12 | exit M13 (normal) | 2 |
|
||||
| Assignments.cs:1:7:1:17 | enter Assignments | Assignments.cs:1:7:1:17 | exit Assignments | 7 |
|
||||
| Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | exit M | 34 |
|
||||
| Assignments.cs:3:10:3:10 | enter M | Assignments.cs:3:10:3:10 | exit M | 31 |
|
||||
| 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 |
|
||||
@@ -250,7 +250,6 @@
|
||||
| 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 |
|
||||
@@ -262,14 +261,11 @@
|
||||
| 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:53:25:53:25 | 1 | ConditionalAccess.cs:54:9:54:10 | access to parameter ca | 4 |
|
||||
| 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:54:27:54:29 | "!" | ConditionalAccess.cs:46:10:46:11 | exit M9 | 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 |
|
||||
@@ -331,12 +327,12 @@
|
||||
| Conditions.cs:97:17:97:20 | ...; | Conditions.cs:97:17:97:19 | ...++ | 3 |
|
||||
| Conditions.cs:99:16:99:16 | access to local variable x | Conditions.cs:86:9:86:10 | exit M7 | 4 |
|
||||
| Conditions.cs:102:12:102:13 | enter M8 | Conditions.cs:105:13:105:13 | access to parameter b | 8 |
|
||||
| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:19 | ... = ... | 5 |
|
||||
| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:19 | ... += ... | 4 |
|
||||
| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:107:13:107:24 | ... > ... | 5 |
|
||||
| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:108:18:108:18 | access to parameter b | 2 |
|
||||
| Conditions.cs:108:17:108:18 | [false] !... | Conditions.cs:108:17:108:18 | [false] !... | 1 |
|
||||
| Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:108:17:108:18 | [true] !... | 1 |
|
||||
| Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:23 | ... = ... | 5 |
|
||||
| Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:23 | ... += ... | 4 |
|
||||
| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:102:12:102:13 | exit M8 | 4 |
|
||||
| Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:116:18:116:22 | Int32 i = ... | 8 |
|
||||
| Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:113:10:113:11 | exit M9 | 2 |
|
||||
@@ -533,7 +529,7 @@
|
||||
| Finally.cs:254:13:254:45 | ...; | Finally.cs:254:13:254:44 | call to method WriteLine | 3 |
|
||||
| Finally.cs:257:9:259:9 | {...} | Finally.cs:258:13:258:46 | call to method WriteLine | 4 |
|
||||
| Finally.cs:260:9:260:34 | ...; | Finally.cs:233:10:233:12 | exit M12 (normal) | 4 |
|
||||
| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:272:13:272:18 | ... = ... | 16 |
|
||||
| Finally.cs:263:10:263:12 | enter M13 | Finally.cs:272:13:272:18 | ... += ... | 15 |
|
||||
| Finally.cs:263:10:263:12 | exit M13 | Finally.cs:263:10:263:12 | exit M13 | 1 |
|
||||
| Finally.cs:263:10:263:12 | exit M13 (abnormal) | Finally.cs:263:10:263:12 | exit M13 (abnormal) | 1 |
|
||||
| Finally.cs:263:10:263:12 | exit M13 (normal) | Finally.cs:263:10:263:12 | exit M13 (normal) | 1 |
|
||||
@@ -1130,7 +1126,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 | ... > ... | 15 |
|
||||
| cflow.cs:211:9:221:9 | {...} | cflow.cs:213:17:213:32 | ... > ... | 12 |
|
||||
| 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 |
|
||||
@@ -1138,7 +1134,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 | ... > ... | 16 |
|
||||
| cflow.cs:226:22:226:22 | String x | cflow.cs:229:17:229:32 | ... > ... | 13 |
|
||||
| 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 |
|
||||
|
||||
@@ -100,14 +100,8 @@ conditionBlock
|
||||
| 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 |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:54:9:54:22 | access to property StringProp | 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 |
|
||||
|
||||
@@ -129,77 +129,54 @@ dominance
|
||||
| AccessorCalls.cs:42:10:42:11 | enter M5 | AccessorCalls.cs:43:5:47:5 | {...} |
|
||||
| AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | AccessorCalls.cs:42:10:42:11 | exit M5 |
|
||||
| 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:18 | access to field Field |
|
||||
| AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:45:9:45:31 | ...; |
|
||||
| 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 |
|
||||
| AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... + ... |
|
||||
| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:12 | this access |
|
||||
| AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... += ... |
|
||||
| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:17 | access to property Prop |
|
||||
| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:30 | ... = ... |
|
||||
| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:22:45:25 | this access |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... + ... | AccessorCalls.cs:45:9:45:17 | access to property Prop |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... = ... | AccessorCalls.cs:46:9:46:27 | ...; |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... += ... | AccessorCalls.cs:46:9:46:27 | ...; |
|
||||
| AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:45:9:45:12 | this access |
|
||||
| AccessorCalls.cs:45:22:45:25 | this access | AccessorCalls.cs:45:22:45:30 | access to property Prop |
|
||||
| AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:45:9:45:30 | ... + ... |
|
||||
| AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:45:9:45:30 | ... += ... |
|
||||
| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:14:46:14 | 0 |
|
||||
| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:14:46:14 | 0 |
|
||||
| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:9:46:26 | ... = ... |
|
||||
| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:20:46:23 | this access |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... + ... | AccessorCalls.cs:46:9:46:15 | access to indexer |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... = ... | AccessorCalls.cs:42:10:42:11 | exit M5 (normal) |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... += ... | AccessorCalls.cs:42:10:42:11 | exit M5 (normal) |
|
||||
| AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:46:9:46:12 | this access |
|
||||
| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:9:46:12 | this access |
|
||||
| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:9:46:15 | access to indexer |
|
||||
| AccessorCalls.cs:46:20:46:23 | this access | AccessorCalls.cs:46:25:46:25 | 0 |
|
||||
| AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:46:9:46:26 | ... + ... |
|
||||
| AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:46:9:46:26 | ... += ... |
|
||||
| AccessorCalls.cs:46:25:46:25 | 0 | AccessorCalls.cs:46:20:46:26 | access to indexer |
|
||||
| AccessorCalls.cs:49:10:49:11 | enter M6 | AccessorCalls.cs:50:5:54:5 | {...} |
|
||||
| AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | AccessorCalls.cs:49:10:49:11 | exit M6 |
|
||||
| AccessorCalls.cs:50:5:54:5 | {...} | AccessorCalls.cs:51:9:51:37 | ...; |
|
||||
| AccessorCalls.cs:51:9:51:12 | this access | 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: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:20 | access to field Field |
|
||||
| AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:52:9:52:35 | ...; |
|
||||
| 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 |
|
||||
| AccessorCalls.cs:51:25:51:30 | access to field x | AccessorCalls.cs:51:25:51:36 | access to field Field |
|
||||
| AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:51:9:51:36 | ... + ... |
|
||||
| AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:51:9:51:36 | ... += ... |
|
||||
| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:14 | access to field x |
|
||||
| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:14 | access to field x |
|
||||
| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:12 | this access |
|
||||
| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:19 | access to property Prop |
|
||||
| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:34 | ... = ... |
|
||||
| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:24:52:27 | this access |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... + ... | AccessorCalls.cs:52:9:52:19 | access to property Prop |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... = ... | AccessorCalls.cs:53:9:53:31 | ...; |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... += ... | AccessorCalls.cs:53:9:53:31 | ...; |
|
||||
| AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:52:9:52:12 | this access |
|
||||
| AccessorCalls.cs:52:24:52:27 | this access | AccessorCalls.cs:52:24:52:29 | access to field x |
|
||||
| AccessorCalls.cs:52:24:52:29 | access to field x | AccessorCalls.cs:52:24:52:34 | access to property Prop |
|
||||
| AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:52:9:52:34 | ... + ... |
|
||||
| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:14 | access to field x |
|
||||
| AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:52:9:52:34 | ... += ... |
|
||||
| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:14 | access to field x |
|
||||
| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:16:53:16 | 0 |
|
||||
| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:16:53:16 | 0 |
|
||||
| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:9:53:30 | ... = ... |
|
||||
| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:22:53:25 | this access |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... + ... | AccessorCalls.cs:53:9:53:17 | access to indexer |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... = ... | AccessorCalls.cs:49:10:49:11 | exit M6 (normal) |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... += ... | AccessorCalls.cs:49:10:49:11 | exit M6 (normal) |
|
||||
| AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:53:9:53:12 | this access |
|
||||
| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:9:53:12 | this access |
|
||||
| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:9:53:17 | access to indexer |
|
||||
| AccessorCalls.cs:53:22:53:25 | this access | AccessorCalls.cs:53:22:53:27 | access to field x |
|
||||
| AccessorCalls.cs:53:22:53:27 | access to field x | AccessorCalls.cs:53:29:53:29 | 0 |
|
||||
| AccessorCalls.cs:53:22:53:30 | access to indexer | AccessorCalls.cs:53:9:53:30 | ... + ... |
|
||||
| AccessorCalls.cs:53:22:53:30 | access to indexer | AccessorCalls.cs:53:9:53:30 | ... += ... |
|
||||
| AccessorCalls.cs:53:29:53:29 | 0 | AccessorCalls.cs:53:22:53:30 | access to indexer |
|
||||
| AccessorCalls.cs:56:10:56:11 | enter M7 | AccessorCalls.cs:57:5:59:5 | {...} |
|
||||
| AccessorCalls.cs:56:10:56:11 | exit M7 (normal) | AccessorCalls.cs:56:10:56:11 | exit M7 |
|
||||
@@ -271,25 +248,18 @@ dominance
|
||||
| AccessorCalls.cs:70:9:70:19 | dynamic access to member MaybeProp | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ |
|
||||
| AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | AccessorCalls.cs:71:9:71:26 | ...; |
|
||||
| AccessorCalls.cs:70:9:70:22 | ...; | AccessorCalls.cs:70:9:70:9 | access to local variable d |
|
||||
| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:9 | access to local variable d |
|
||||
| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent |
|
||||
| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:25 | ... = ... |
|
||||
| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:25:71:25 | access to parameter e |
|
||||
| AccessorCalls.cs:71:9:71:25 | ... = ... | AccessorCalls.cs:72:9:72:21 | ...; |
|
||||
| AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent |
|
||||
| AccessorCalls.cs:71:9:71:25 | ... += ... | AccessorCalls.cs:72:9:72:21 | ...; |
|
||||
| AccessorCalls.cs:71:9:71:26 | ...; | AccessorCalls.cs:71:9:71:9 | access to local variable d |
|
||||
| AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:71:9:71:25 | dynamic call to operator + |
|
||||
| AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:71:9:71:25 | ... += ... |
|
||||
| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:11:72:11 | 0 |
|
||||
| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:11:72:11 | 0 |
|
||||
| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:9:72:20 | ... = ... |
|
||||
| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:17:72:17 | access to local variable d |
|
||||
| AccessorCalls.cs:72:9:72:20 | ... = ... | AccessorCalls.cs:73:9:73:84 | ...; |
|
||||
| AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | AccessorCalls.cs:72:9:72:12 | dynamic access to element |
|
||||
| AccessorCalls.cs:72:9:72:20 | ... += ... | AccessorCalls.cs:73:9:73:84 | ...; |
|
||||
| AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:72:9:72:9 | access to local variable d |
|
||||
| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:9:72:9 | access to local variable d |
|
||||
| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:9:72:12 | dynamic access to element |
|
||||
| AccessorCalls.cs:72:17:72:17 | access to local variable d | AccessorCalls.cs:72:19:72:19 | 1 |
|
||||
| AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:72:9:72:20 | dynamic call to operator + |
|
||||
| AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:72:9:72:20 | ... += ... |
|
||||
| AccessorCalls.cs:72:19:72:19 | 1 | AccessorCalls.cs:72:17:72:20 | dynamic access to element |
|
||||
| AccessorCalls.cs:73:9:73:44 | (..., ...) | AccessorCalls.cs:73:49:73:49 | access to local variable d |
|
||||
| AccessorCalls.cs:73:9:73:83 | ... = ... | AccessorCalls.cs:66:10:66:11 | exit M9 (normal) |
|
||||
@@ -732,27 +702,24 @@ dominance
|
||||
| Assignments.cs:5:13:5:17 | Int32 x = ... | Assignments.cs:6:9:6:15 | ...; |
|
||||
| Assignments.cs:5:17:5:17 | 0 | Assignments.cs:5:13:5:17 | Int32 x = ... |
|
||||
| Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:6:14:6:14 | 1 |
|
||||
| Assignments.cs:6:9:6:14 | ... + ... | Assignments.cs:6:9:6:14 | ... = ... |
|
||||
| Assignments.cs:6:9:6:14 | ... = ... | Assignments.cs:8:9:8:22 | ... ...; |
|
||||
| Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:8:9:8:22 | ... ...; |
|
||||
| Assignments.cs:6:9:6:15 | ...; | Assignments.cs:6:9:6:9 | access to local variable x |
|
||||
| Assignments.cs:6:14:6:14 | 1 | Assignments.cs:6:9:6:14 | ... + ... |
|
||||
| Assignments.cs:6:14:6:14 | 1 | Assignments.cs:6:9:6:14 | ... += ... |
|
||||
| Assignments.cs:8:9:8:22 | ... ...; | Assignments.cs:8:21:8:21 | 0 |
|
||||
| Assignments.cs:8:17:8:21 | dynamic d = ... | Assignments.cs:9:9:9:15 | ...; |
|
||||
| Assignments.cs:8:21:8:21 | 0 | Assignments.cs:8:21:8:21 | (...) ... |
|
||||
| Assignments.cs:8:21:8:21 | (...) ... | Assignments.cs:8:17:8:21 | dynamic d = ... |
|
||||
| Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:9:14:9:14 | 2 |
|
||||
| Assignments.cs:9:9:9:14 | ... = ... | Assignments.cs:11:9:11:34 | ... ...; |
|
||||
| Assignments.cs:9:9:9:14 | dynamic call to operator - | Assignments.cs:9:9:9:14 | ... = ... |
|
||||
| Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:11:9:11:34 | ... ...; |
|
||||
| Assignments.cs:9:9:9:15 | ...; | Assignments.cs:9:9:9:9 | access to local variable d |
|
||||
| Assignments.cs:9:14:9:14 | 2 | Assignments.cs:9:9:9:14 | dynamic call to operator - |
|
||||
| Assignments.cs:9:14:9:14 | 2 | Assignments.cs:9:9:9:14 | ... -= ... |
|
||||
| Assignments.cs:11:9:11:34 | ... ...; | Assignments.cs:11:17:11:33 | object creation of type Assignments |
|
||||
| Assignments.cs:11:13:11:33 | Assignments a = ... | Assignments.cs:12:9:12:18 | ...; |
|
||||
| Assignments.cs:11:17:11:33 | object creation of type Assignments | Assignments.cs:11:13:11:33 | Assignments a = ... |
|
||||
| Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:12:14:12:17 | this access |
|
||||
| Assignments.cs:12:9:12:17 | ... = ... | Assignments.cs:14:9:14:36 | ...; |
|
||||
| Assignments.cs:12:9:12:17 | call to operator + | Assignments.cs:12:9:12:17 | ... = ... |
|
||||
| Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:14:9:14:36 | ...; |
|
||||
| Assignments.cs:12:9:12:18 | ...; | Assignments.cs:12:9:12:9 | access to local variable a |
|
||||
| Assignments.cs:12:14:12:17 | this access | Assignments.cs:12:9:12:17 | call to operator + |
|
||||
| Assignments.cs:12:14:12:17 | this access | Assignments.cs:12:9:12:17 | ... += ... |
|
||||
| Assignments.cs:14:9:14:13 | access to event Event | Assignments.cs:14:9:14:35 | ... += ... |
|
||||
| Assignments.cs:14:9:14:13 | this access | Assignments.cs:14:18:14:35 | (...) => ... |
|
||||
| Assignments.cs:14:9:14:35 | ... += ... | Assignments.cs:3:10:3:10 | exit M (normal) |
|
||||
@@ -1058,22 +1025,16 @@ dominance
|
||||
| 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: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 |
|
||||
| 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:25:53:25 | 1 |
|
||||
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:30 | ...; |
|
||||
| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:12:53:25 | ... = ... |
|
||||
| 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: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) |
|
||||
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
|
||||
| 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:54:9:54:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:27:54:29 | "!" |
|
||||
| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:12: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:27:54:29 | "!" | ConditionalAccess.cs:54:12:54:29 | ... + ... |
|
||||
| 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 | ", " |
|
||||
@@ -1295,9 +1256,8 @@ dominance
|
||||
| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:106:13:106:20 | ...; |
|
||||
| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:107:9:109:24 | if (...) ... |
|
||||
| Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:106:18:106:19 | "" |
|
||||
| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:106:13:106:19 | ... = ... |
|
||||
| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:13 | access to local variable x |
|
||||
| Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:13:106:19 | ... + ... |
|
||||
| Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:13:106:19 | ... += ... |
|
||||
| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:107:13:107:13 | access to local variable x |
|
||||
| Conditions.cs:107:13:107:13 | access to local variable x | Conditions.cs:107:13:107:20 | access to property Length |
|
||||
| Conditions.cs:107:13:107:20 | access to property Length | Conditions.cs:107:24:107:24 | 0 |
|
||||
@@ -1309,9 +1269,8 @@ dominance
|
||||
| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:17:108:18 | [false] !... |
|
||||
| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:17:108:18 | [true] !... |
|
||||
| Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:109:22:109:23 | "" |
|
||||
| Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:109:17:109:23 | ... = ... |
|
||||
| Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:17 | access to local variable x |
|
||||
| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:17:109:23 | ... + ... |
|
||||
| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:17:109:23 | ... += ... |
|
||||
| Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:102:12:102:13 | exit M8 (normal) |
|
||||
| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:9:110:17 | return ...; |
|
||||
| Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:114:5:124:5 | {...} |
|
||||
@@ -1939,11 +1898,10 @@ dominance
|
||||
| Finally.cs:271:13:271:35 | ...; | Finally.cs:271:31:271:33 | "3" |
|
||||
| Finally.cs:271:31:271:33 | "3" | Finally.cs:271:13:271:34 | call to method WriteLine |
|
||||
| Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:18:272:18 | 3 |
|
||||
| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:13:272:18 | ... = ... |
|
||||
| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) |
|
||||
| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | exit M13 (normal) |
|
||||
| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) |
|
||||
| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:263:10:263:12 | exit M13 (normal) |
|
||||
| Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:13 | access to parameter i |
|
||||
| Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:18 | ... + ... |
|
||||
| Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:18 | ... += ... |
|
||||
| Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | {...} |
|
||||
| Foreach.cs:4:7:4:13 | call to method <object initializer> | Foreach.cs:4:7:4:13 | call to constructor Object |
|
||||
| Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | this access |
|
||||
@@ -3819,14 +3777,11 @@ dominance
|
||||
| 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:17 | access to field Field |
|
||||
| cflow.cs:212:13:212:24 | ... = ... | cflow.cs:213:13:216:13 | if (...) ... |
|
||||
| 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 | ... + ... |
|
||||
| cflow.cs:212:22:212:24 | "a" | cflow.cs:212:13:212:24 | ... += ... |
|
||||
| cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:213:17:213:21 | this access |
|
||||
| cflow.cs:213:17:213:21 | access to field Field | cflow.cs:213:17:213:28 | access to property Length |
|
||||
| cflow.cs:213:17:213:21 | this access | cflow.cs:213:17:213:21 | access to field Field |
|
||||
@@ -3856,14 +3811,11 @@ dominance
|
||||
| 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:17 | access to field Field |
|
||||
| cflow.cs:228:13:228:22 | ... = ... | cflow.cs:229:13:232:13 | if (...) ... |
|
||||
| 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 | ... + ... |
|
||||
| cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:13:228:22 | ... += ... |
|
||||
| cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:229:17:229:21 | this access |
|
||||
| cflow.cs:229:17:229:21 | access to field Field | cflow.cs:229:17:229:28 | access to property Length |
|
||||
| cflow.cs:229:17:229:21 | this access | cflow.cs:229:17:229:21 | access to field Field |
|
||||
@@ -4138,75 +4090,52 @@ postDominance
|
||||
| AccessorCalls.cs:39:9:39:20 | ...; | AccessorCalls.cs:38:9:38:21 | ...++ |
|
||||
| AccessorCalls.cs:39:16:39:16 | 0 | AccessorCalls.cs:39:9:39:14 | access to field x |
|
||||
| AccessorCalls.cs:42:10:42:11 | exit M5 | AccessorCalls.cs:42:10:42:11 | exit M5 (normal) |
|
||||
| AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | AccessorCalls.cs:46:9:46:26 | ... = ... |
|
||||
| AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | AccessorCalls.cs:46:9:46:26 | ... += ... |
|
||||
| AccessorCalls.cs:43:5:47:5 | {...} | AccessorCalls.cs:42:10:42:11 | enter M5 |
|
||||
| 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:33 | ...; |
|
||||
| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:12 | this access |
|
||||
| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... + ... |
|
||||
| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:44:23:44:32 | access to field Field |
|
||||
| AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:44:9:44:18 | access to field Field |
|
||||
| AccessorCalls.cs:44:9:44:32 | ... += ... | AccessorCalls.cs:44:23:44:32 | access to field Field |
|
||||
| AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:43:5:47:5 | {...} |
|
||||
| AccessorCalls.cs:44:23:44:26 | this access | AccessorCalls.cs:44:9:44:18 | access to field Field |
|
||||
| AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:44:23:44:26 | this access |
|
||||
| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:12 | this access |
|
||||
| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:31 | ...; |
|
||||
| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:12 | this access |
|
||||
| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:30 | ... + ... |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... + ... | AccessorCalls.cs:45:22:45:30 | access to property Prop |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... = ... | AccessorCalls.cs:45:9:45:17 | access to property Prop |
|
||||
| AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:44:9:44:32 | ... = ... |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... += ... | AccessorCalls.cs:45:22:45:30 | access to property Prop |
|
||||
| AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:44:9:44:32 | ... += ... |
|
||||
| AccessorCalls.cs:45:22:45:25 | this access | AccessorCalls.cs:45:9:45:17 | access to property Prop |
|
||||
| AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:45:22:45:25 | this access |
|
||||
| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:9:46:27 | ...; |
|
||||
| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:14:46:14 | 0 |
|
||||
| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:9:46:26 | ... + ... |
|
||||
| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:14:46:14 | 0 |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... + ... | AccessorCalls.cs:46:20:46:26 | access to indexer |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... = ... | AccessorCalls.cs:46:9:46:15 | access to indexer |
|
||||
| AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:45:9:45:30 | ... = ... |
|
||||
| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:9:46:12 | this access |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... += ... | AccessorCalls.cs:46:20:46:26 | access to indexer |
|
||||
| AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:45:9:45:30 | ... += ... |
|
||||
| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:9:46:12 | this access |
|
||||
| AccessorCalls.cs:46:20:46:23 | this access | AccessorCalls.cs:46:9:46:15 | access to indexer |
|
||||
| AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:46:25:46:25 | 0 |
|
||||
| AccessorCalls.cs:46:25:46:25 | 0 | AccessorCalls.cs:46:20:46:23 | this access |
|
||||
| AccessorCalls.cs:49:10:49:11 | exit M6 | AccessorCalls.cs:49:10:49:11 | exit M6 (normal) |
|
||||
| AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | AccessorCalls.cs:53:9:53:30 | ... = ... |
|
||||
| AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | AccessorCalls.cs:53:9:53:30 | ... += ... |
|
||||
| AccessorCalls.cs:50:5:54:5 | {...} | AccessorCalls.cs:49:10:49:11 | enter M6 |
|
||||
| AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:14 | access to field x |
|
||||
| AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:37 | ...; |
|
||||
| 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:12 | this access |
|
||||
| AccessorCalls.cs:51:9:51:20 | access to field Field | 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:36 | ... + ... |
|
||||
| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:51:25:51:36 | access to field Field |
|
||||
| AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:51:9:51:20 | access to field Field |
|
||||
| AccessorCalls.cs:51:9:51:36 | ... += ... | AccessorCalls.cs:51:25:51:36 | access to field Field |
|
||||
| AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:50:5:54:5 | {...} |
|
||||
| AccessorCalls.cs:51:25:51:28 | this access | AccessorCalls.cs:51:9:51:20 | access to field Field |
|
||||
| AccessorCalls.cs:51:25:51:30 | access to field x | AccessorCalls.cs:51:25:51:28 | this access |
|
||||
| AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:51:25:51:30 | access to field x |
|
||||
| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:14 | access to field x |
|
||||
| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:35 | ...; |
|
||||
| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:12 | this access |
|
||||
| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:12 | this access |
|
||||
| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:14 | access to field x |
|
||||
| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:34 | ... + ... |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... + ... | AccessorCalls.cs:52:24:52:34 | access to property Prop |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... = ... | AccessorCalls.cs:52:9:52:19 | access to property Prop |
|
||||
| AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:51:9:51:36 | ... = ... |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... += ... | AccessorCalls.cs:52:24:52:34 | access to property Prop |
|
||||
| AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:51:9:51:36 | ... += ... |
|
||||
| AccessorCalls.cs:52:24:52:27 | this access | AccessorCalls.cs:52:9:52:19 | access to property Prop |
|
||||
| AccessorCalls.cs:52:24:52:29 | access to field x | AccessorCalls.cs:52:24:52:27 | this access |
|
||||
| AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:52:24:52:29 | access to field x |
|
||||
| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:31 | ...; |
|
||||
| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:16:53:16 | 0 |
|
||||
| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:9:53:12 | this access |
|
||||
| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:9:53:12 | this access |
|
||||
| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:9:53:30 | ... + ... |
|
||||
| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:16:53:16 | 0 |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... + ... | AccessorCalls.cs:53:22:53:30 | access to indexer |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... = ... | AccessorCalls.cs:53:9:53:17 | access to indexer |
|
||||
| AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:52:9:52:34 | ... = ... |
|
||||
| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:9:53:14 | access to field x |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... += ... | AccessorCalls.cs:53:22:53:30 | access to indexer |
|
||||
| AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:52:9:52:34 | ... += ... |
|
||||
| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:9:53:14 | access to field x |
|
||||
| AccessorCalls.cs:53:22:53:25 | this access | AccessorCalls.cs:53:9:53:17 | access to indexer |
|
||||
| AccessorCalls.cs:53:22:53:27 | access to field x | AccessorCalls.cs:53:22:53:25 | this access |
|
||||
@@ -4282,29 +4211,22 @@ postDominance
|
||||
| AccessorCalls.cs:70:9:70:19 | dynamic access to member MaybeProp | AccessorCalls.cs:70:9:70:9 | access to local variable d |
|
||||
| AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | AccessorCalls.cs:70:9:70:19 | dynamic access to member MaybeProp |
|
||||
| AccessorCalls.cs:70:9:70:22 | ...; | AccessorCalls.cs:69:9:69:35 | ... = ... |
|
||||
| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:9 | access to local variable d |
|
||||
| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:26 | ...; |
|
||||
| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:9 | access to local variable d |
|
||||
| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:25 | dynamic call to operator + |
|
||||
| AccessorCalls.cs:71:9:71:25 | ... = ... | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent |
|
||||
| AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | AccessorCalls.cs:71:25:71:25 | access to parameter e |
|
||||
| AccessorCalls.cs:71:9:71:25 | ... += ... | AccessorCalls.cs:71:25:71:25 | access to parameter e |
|
||||
| AccessorCalls.cs:71:9:71:26 | ...; | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ |
|
||||
| AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent |
|
||||
| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:9:72:21 | ...; |
|
||||
| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:11:72:11 | 0 |
|
||||
| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:9:72:20 | dynamic call to operator + |
|
||||
| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:11:72:11 | 0 |
|
||||
| AccessorCalls.cs:72:9:72:20 | ... = ... | AccessorCalls.cs:72:9:72:12 | dynamic access to element |
|
||||
| AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | AccessorCalls.cs:72:17:72:20 | dynamic access to element |
|
||||
| AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:71:9:71:25 | ... = ... |
|
||||
| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:9:72:9 | access to local variable d |
|
||||
| AccessorCalls.cs:72:9:72:20 | ... += ... | AccessorCalls.cs:72:17:72:20 | dynamic access to element |
|
||||
| AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:71:9:71:25 | ... += ... |
|
||||
| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:9:72:9 | access to local variable d |
|
||||
| AccessorCalls.cs:72:17:72:17 | access to local variable d | AccessorCalls.cs:72:9:72:12 | dynamic access to element |
|
||||
| AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:72:19:72:19 | 1 |
|
||||
| AccessorCalls.cs:72:19:72:19 | 1 | AccessorCalls.cs:72:17:72:17 | access to local variable d |
|
||||
| AccessorCalls.cs:73:9:73:44 | (..., ...) | AccessorCalls.cs:73:35:73:43 | (..., ...) |
|
||||
| AccessorCalls.cs:73:9:73:83 | ... = ... | AccessorCalls.cs:73:39:73:42 | dynamic access to element |
|
||||
| AccessorCalls.cs:73:9:73:84 | ...; | AccessorCalls.cs:72:9:72:20 | ... = ... |
|
||||
| AccessorCalls.cs:73:9:73:84 | ...; | AccessorCalls.cs:72:9:72:20 | ... += ... |
|
||||
| AccessorCalls.cs:73:10:73:10 | access to local variable d | AccessorCalls.cs:73:9:73:84 | ...; |
|
||||
| AccessorCalls.cs:73:10:73:21 | dynamic access to member MaybeProp1 | AccessorCalls.cs:73:48:73:83 | (..., ...) |
|
||||
| AccessorCalls.cs:73:24:73:27 | this access | AccessorCalls.cs:73:10:73:10 | access to local variable d |
|
||||
@@ -4730,31 +4652,28 @@ postDominance
|
||||
| Assignments.cs:5:13:5:17 | Int32 x = ... | Assignments.cs:5:17:5:17 | 0 |
|
||||
| Assignments.cs:5:17:5:17 | 0 | Assignments.cs:5:9:5:18 | ... ...; |
|
||||
| Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:6:9:6:15 | ...; |
|
||||
| Assignments.cs:6:9:6:14 | ... + ... | Assignments.cs:6:14:6:14 | 1 |
|
||||
| Assignments.cs:6:9:6:14 | ... = ... | Assignments.cs:6:9:6:14 | ... + ... |
|
||||
| Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:6:14:6:14 | 1 |
|
||||
| Assignments.cs:6:9:6:15 | ...; | Assignments.cs:5:13:5:17 | Int32 x = ... |
|
||||
| Assignments.cs:6:14:6:14 | 1 | Assignments.cs:6:9:6:9 | access to local variable x |
|
||||
| Assignments.cs:8:9:8:22 | ... ...; | Assignments.cs:6:9:6:14 | ... = ... |
|
||||
| Assignments.cs:8:9:8:22 | ... ...; | Assignments.cs:6:9:6:14 | ... += ... |
|
||||
| Assignments.cs:8:17:8:21 | dynamic d = ... | Assignments.cs:8:21:8:21 | (...) ... |
|
||||
| Assignments.cs:8:21:8:21 | 0 | Assignments.cs:8:9:8:22 | ... ...; |
|
||||
| Assignments.cs:8:21:8:21 | (...) ... | Assignments.cs:8:21:8:21 | 0 |
|
||||
| Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:9:9:9:15 | ...; |
|
||||
| Assignments.cs:9:9:9:14 | ... = ... | Assignments.cs:9:9:9:14 | dynamic call to operator - |
|
||||
| Assignments.cs:9:9:9:14 | dynamic call to operator - | Assignments.cs:9:14:9:14 | 2 |
|
||||
| Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:9:14:9:14 | 2 |
|
||||
| Assignments.cs:9:9:9:15 | ...; | Assignments.cs:8:17:8:21 | dynamic d = ... |
|
||||
| Assignments.cs:9:14:9:14 | 2 | Assignments.cs:9:9:9:9 | access to local variable d |
|
||||
| Assignments.cs:11:9:11:34 | ... ...; | Assignments.cs:9:9:9:14 | ... = ... |
|
||||
| Assignments.cs:11:9:11:34 | ... ...; | Assignments.cs:9:9:9:14 | ... -= ... |
|
||||
| Assignments.cs:11:13:11:33 | Assignments a = ... | Assignments.cs:11:17:11:33 | object creation of type Assignments |
|
||||
| Assignments.cs:11:17:11:33 | object creation of type Assignments | Assignments.cs:11:9:11:34 | ... ...; |
|
||||
| Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:12:9:12:18 | ...; |
|
||||
| Assignments.cs:12:9:12:17 | ... = ... | Assignments.cs:12:9:12:17 | call to operator + |
|
||||
| Assignments.cs:12:9:12:17 | call to operator + | Assignments.cs:12:14:12:17 | this access |
|
||||
| Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:12:14:12:17 | this access |
|
||||
| Assignments.cs:12:9:12:18 | ...; | Assignments.cs:11:13:11:33 | Assignments a = ... |
|
||||
| Assignments.cs:12:14:12:17 | this access | Assignments.cs:12:9:12:9 | access to local variable a |
|
||||
| Assignments.cs:14:9:14:13 | access to event Event | Assignments.cs:14:18:14:35 | (...) => ... |
|
||||
| Assignments.cs:14:9:14:13 | this access | Assignments.cs:14:9:14:36 | ...; |
|
||||
| Assignments.cs:14:9:14:35 | ... += ... | Assignments.cs:14:9:14:13 | access to event Event |
|
||||
| Assignments.cs:14:9:14:36 | ...; | Assignments.cs:12:9:12:17 | ... = ... |
|
||||
| Assignments.cs:14:9:14:36 | ...; | Assignments.cs:12:9:12:17 | ... += ... |
|
||||
| Assignments.cs:14:18:14:35 | (...) => ... | Assignments.cs:14:9:14:13 | this access |
|
||||
| Assignments.cs:14:18:14:35 | exit (...) => ... | Assignments.cs:14:18:14:35 | exit (...) => ... (normal) |
|
||||
| Assignments.cs:14:18:14:35 | exit (...) => ... (normal) | Assignments.cs:14:33:14:35 | {...} |
|
||||
@@ -5022,8 +4941,7 @@ postDominance
|
||||
| ConditionalAccess.cs:43:9:43:11 | exit set_Item (normal) | ConditionalAccess.cs:43:13:43:15 | {...} |
|
||||
| ConditionalAccess.cs:43:13:43:15 | {...} | ConditionalAccess.cs:43:9:43:11 | enter set_Item |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:12:54:29 | ... = ... |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:12:54:29 | ... += ... |
|
||||
| ConditionalAccess.cs:47:5:55:5 | {...} | ConditionalAccess.cs:46:10:46:11 | enter M9 |
|
||||
| ConditionalAccess.cs:48:9:48:10 | access to parameter ca | ConditionalAccess.cs:48:9:48:26 | ...; |
|
||||
| ConditionalAccess.cs:48:9:48:20 | access to field IntField | ConditionalAccess.cs:48:24:48:25 | 42 |
|
||||
@@ -5052,20 +4970,15 @@ postDominance
|
||||
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:51:18:51:31 | ... = ... |
|
||||
| ConditionalAccess.cs:52:18:52:38 | ... = ... | 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:26 | ...; |
|
||||
| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:12:53:25 | ... - ... |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:9:52:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:18:52:38 | ... = ... |
|
||||
| ConditionalAccess.cs:53:12:53:25 | ... - ... | ConditionalAccess.cs:53:25:53:25 | 1 |
|
||||
| ConditionalAccess.cs:53:12:53:25 | ... = ... | ConditionalAccess.cs:53:9:53:20 | access to field IntField |
|
||||
| ConditionalAccess.cs:53:12:53:25 | ... -= ... | ConditionalAccess.cs:53:25:53:25 | 1 |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:9:53:20 | access to field IntField |
|
||||
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:9:54:30 | ...; |
|
||||
| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:12:54:29 | ... + ... |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:12:53:25 | ... = ... |
|
||||
| ConditionalAccess.cs:54:12:54:29 | ... + ... | ConditionalAccess.cs:54:27:54:29 | "!" |
|
||||
| ConditionalAccess.cs:54:12:54:29 | ... = ... | ConditionalAccess.cs:54:9:54:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:12:53:25 | ... -= ... |
|
||||
| ConditionalAccess.cs:54:12:54:29 | ... += ... | ConditionalAccess.cs:54:27:54:29 | "!" |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:9:54:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | exit CommaJoinWith (normal) |
|
||||
@@ -5287,25 +5200,23 @@ postDominance
|
||||
| Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:104:13:104:28 | String x = ... |
|
||||
| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:105:9:106:20 | if (...) ... |
|
||||
| Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:106:13:106:20 | ...; |
|
||||
| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:106:18:106:19 | "" |
|
||||
| Conditions.cs:106:13:106:19 | ... = ... | Conditions.cs:106:13:106:19 | ... + ... |
|
||||
| Conditions.cs:106:13:106:19 | ... += ... | Conditions.cs:106:18:106:19 | "" |
|
||||
| Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:13:106:13 | access to local variable x |
|
||||
| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:105:13:105:13 | access to parameter b |
|
||||
| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:106:13:106:19 | ... = ... |
|
||||
| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:106:13:106:19 | ... += ... |
|
||||
| Conditions.cs:107:13:107:13 | access to local variable x | Conditions.cs:107:9:109:24 | if (...) ... |
|
||||
| Conditions.cs:107:13:107:20 | access to property Length | Conditions.cs:107:13:107:13 | access to local variable x |
|
||||
| Conditions.cs:107:13:107:24 | ... > ... | Conditions.cs:107:24:107:24 | 0 |
|
||||
| Conditions.cs:107:24:107:24 | 0 | Conditions.cs:107:13:107:20 | access to property Length |
|
||||
| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:13:109:24 | if (...) ... |
|
||||
| Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:109:17:109:24 | ...; |
|
||||
| Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:109:22:109:23 | "" |
|
||||
| Conditions.cs:109:17:109:23 | ... = ... | Conditions.cs:109:17:109:23 | ... + ... |
|
||||
| Conditions.cs:109:17:109:23 | ... += ... | Conditions.cs:109:22:109:23 | "" |
|
||||
| Conditions.cs:109:17:109:24 | ...; | Conditions.cs:108:17:108:18 | [true] !... |
|
||||
| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:17:109:17 | access to local variable x |
|
||||
| Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:110:16:110:16 | access to local variable x |
|
||||
| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:107:13:107:24 | ... > ... |
|
||||
| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:108:17:108:18 | [false] !... |
|
||||
| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:109:17:109:23 | ... = ... |
|
||||
| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:109:17:109:23 | ... += ... |
|
||||
| Conditions.cs:113:10:113:11 | exit M9 | Conditions.cs:113:10:113:11 | exit M9 (normal) |
|
||||
| Conditions.cs:113:10:113:11 | exit M9 (normal) | Conditions.cs:116:25:116:39 | ... < ... |
|
||||
| Conditions.cs:114:5:124:5 | {...} | Conditions.cs:113:10:113:11 | enter M9 |
|
||||
@@ -5890,7 +5801,7 @@ postDominance
|
||||
| Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:260:27:260:32 | "Done" |
|
||||
| Finally.cs:260:9:260:34 | ...; | Finally.cs:258:13:258:46 | call to method WriteLine |
|
||||
| Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:9:260:34 | ...; |
|
||||
| Finally.cs:263:10:263:12 | exit M13 (normal) | Finally.cs:272:13:272:18 | ... = ... |
|
||||
| Finally.cs:263:10:263:12 | exit M13 (normal) | Finally.cs:272:13:272:18 | ... += ... |
|
||||
| Finally.cs:264:5:274:5 | {...} | Finally.cs:263:10:263:12 | enter M13 |
|
||||
| Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:264:5:274:5 | {...} |
|
||||
| Finally.cs:266:9:268:9 | {...} | Finally.cs:265:9:273:9 | try {...} ... |
|
||||
@@ -5902,8 +5813,7 @@ postDominance
|
||||
| Finally.cs:271:13:271:35 | ...; | Finally.cs:270:9:273:9 | {...} |
|
||||
| Finally.cs:271:31:271:33 | "3" | Finally.cs:271:13:271:35 | ...; |
|
||||
| Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:13:272:19 | ...; |
|
||||
| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:18:272:18 | 3 |
|
||||
| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:272:13:272:18 | ... + ... |
|
||||
| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:272:18:272:18 | 3 |
|
||||
| Finally.cs:272:13:272:19 | ...; | Finally.cs:271:13:271:34 | call to method WriteLine |
|
||||
| Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:13 | access to parameter i |
|
||||
| Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | call to method <object initializer> |
|
||||
@@ -7720,14 +7630,11 @@ postDominance
|
||||
| cflow.cs:210:9:221:36 | do ... while (...); | cflow.cs:209:5:222:5 | {...} |
|
||||
| cflow.cs:211:9:221:9 | {...} | cflow.cs:210:9:221:36 | do ... while (...); |
|
||||
| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:17 | this access |
|
||||
| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:24 | ... + ... |
|
||||
| cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | this access |
|
||||
| cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:25 | ...; |
|
||||
| cflow.cs:212:13:212:24 | ... + ... | cflow.cs:212:22:212:24 | "a" |
|
||||
| cflow.cs:212:13:212:24 | ... = ... | cflow.cs:212:13:212:17 | access to field Field |
|
||||
| cflow.cs:212:13:212:24 | ... += ... | cflow.cs:212:22:212:24 | "a" |
|
||||
| cflow.cs:212:13:212:25 | ...; | cflow.cs:211:9:221:9 | {...} |
|
||||
| cflow.cs:212:22:212:24 | "a" | cflow.cs:212:13:212:17 | access to field Field |
|
||||
| cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:212:13:212:24 | ... = ... |
|
||||
| cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:212:13:212:24 | ... += ... |
|
||||
| cflow.cs:213:17:213:21 | access to field Field | cflow.cs:213:17:213:21 | this access |
|
||||
| cflow.cs:213:17:213:21 | this access | cflow.cs:213:13:216:13 | if (...) ... |
|
||||
| cflow.cs:213:17:213:28 | access to property Length | cflow.cs:213:17:213:21 | access to field Field |
|
||||
@@ -7756,14 +7663,11 @@ postDominance
|
||||
| cflow.cs:226:62:226:63 | 10 | cflow.cs:226:57:226:59 | "a" |
|
||||
| cflow.cs:227:9:237:9 | {...} | cflow.cs:226:22:226:22 | String x |
|
||||
| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:17 | this access |
|
||||
| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:22 | ... + ... |
|
||||
| cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | this access |
|
||||
| cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:23 | ...; |
|
||||
| cflow.cs:228:13:228:22 | ... + ... | cflow.cs:228:22:228:22 | access to local variable x |
|
||||
| cflow.cs:228:13:228:22 | ... = ... | cflow.cs:228:13:228:17 | access to field Field |
|
||||
| cflow.cs:228:13:228:22 | ... += ... | cflow.cs:228:22:228:22 | access to local variable x |
|
||||
| cflow.cs:228:13:228:23 | ...; | cflow.cs:227:9:237:9 | {...} |
|
||||
| cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:13:228:17 | access to field Field |
|
||||
| cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:228:13:228:22 | ... = ... |
|
||||
| cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:228:13:228:22 | ... += ... |
|
||||
| cflow.cs:229:17:229:21 | access to field Field | cflow.cs:229:17:229:21 | this access |
|
||||
| cflow.cs:229:17:229:21 | this access | cflow.cs:229:13:232:13 | if (...) ... |
|
||||
| cflow.cs:229:17:229:28 | access to property Length | cflow.cs:229:17:229:21 | access to field Field |
|
||||
@@ -9077,7 +8981,6 @@ blockDominance
|
||||
| ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:9:42:11 | enter get_Item |
|
||||
| ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:9:43:11 | enter set_Item |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:46:10:46:11 | enter M9 |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:48:24:48:25 | 42 |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:49:9:49:33 | ...; |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:49:26:49:32 | "Hello" |
|
||||
@@ -9089,17 +8992,12 @@ blockDominance
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:52:9:52:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:52:9:52:39 | ...; |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:52:32:52:38 | "World" |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:53:9:53:20 | access to field IntField |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:53:9:53:26 | ...; |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:53:25:53:25 | 1 |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:54:9:54:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:54:9:54:30 | ...; |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:54:27:54:29 | "!" |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) |
|
||||
| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:24:48:25 | 42 |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:9:49:33 | ...; |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:49:26:49:32 | "Hello" |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:50:9:50:24 | ...; |
|
||||
@@ -9110,16 +9008,12 @@ blockDominance
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" |
|
||||
| ConditionalAccess.cs:49:26:49:32 | "Hello" | ConditionalAccess.cs:49:26:49:32 | "Hello" |
|
||||
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) |
|
||||
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:9:50:24 | ...; |
|
||||
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:50:13:50:13 | 0 |
|
||||
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop |
|
||||
@@ -9128,71 +9022,47 @@ blockDominance
|
||||
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; |
|
||||
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" |
|
||||
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField |
|
||||
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; |
|
||||
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 |
|
||||
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; |
|
||||
| ConditionalAccess.cs:50:9:50:24 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" |
|
||||
| ConditionalAccess.cs:50:13:50:13 | 0 | ConditionalAccess.cs:50:13:50:13 | 0 |
|
||||
| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:9:51:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:51:9:51:16 | access to property Prop | ConditionalAccess.cs:51:30:51:31 | 84 |
|
||||
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) |
|
||||
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:9:51:32 | ...; |
|
||||
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:51:30:51:31 | 84 |
|
||||
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; |
|
||||
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" |
|
||||
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField |
|
||||
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; |
|
||||
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 |
|
||||
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; |
|
||||
| ConditionalAccess.cs:51:9:51:32 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" |
|
||||
| ConditionalAccess.cs:51:30:51:31 | 84 | ConditionalAccess.cs:51:30:51:31 | 84 |
|
||||
| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:9:52:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:52:9:52:16 | access to property Prop | ConditionalAccess.cs:52:32:52:38 | "World" |
|
||||
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) |
|
||||
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; |
|
||||
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" |
|
||||
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField |
|
||||
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; |
|
||||
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 |
|
||||
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; |
|
||||
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" |
|
||||
| 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:20 | access to field IntField |
|
||||
| ConditionalAccess.cs:53:9:53:10 | access to parameter ca | ConditionalAccess.cs:53:25:53:25 | 1 |
|
||||
| ConditionalAccess.cs:53:9:53:20 | access to field IntField | ConditionalAccess.cs:53:9:53:20 | access to field IntField |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" |
|
||||
| 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:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:54:9:54:10 | access to parameter ca | ConditionalAccess.cs:54:27:54:29 | "!" |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:54:9:54:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:54:27:54:29 | "!" |
|
||||
| ConditionalAccess.cs:54:9:54:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:27:54:29 | "!" |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:27:54:29 | "!" |
|
||||
| ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith |
|
||||
| Conditions.cs:1:7:1:16 | enter Conditions | Conditions.cs:1:7:1:16 | enter Conditions |
|
||||
@@ -13005,27 +12875,6 @@ postBlockDominance
|
||||
| ConditionalAccess.cs:42:9:42:11 | enter get_Item | ConditionalAccess.cs:42:9:42:11 | enter get_Item |
|
||||
| ConditionalAccess.cs:43:9:43:11 | enter set_Item | ConditionalAccess.cs:43:9:43:11 | enter set_Item |
|
||||
| ConditionalAccess.cs:46:10:46:11 | enter M9 | ConditionalAccess.cs:46:10:46:11 | enter M9 |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | enter M9 |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:48:24:48:25 | 42 |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:49:9:49:33 | ...; |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:49:26:49:32 | "Hello" |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:50:9:50:24 | ...; |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:50:13:50:13 | 0 |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:51:9:51:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:51:9:51:32 | ...; |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:51:30:51:31 | 84 |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:52:9:52:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:52:9:52:39 | ...; |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:52:32:52:38 | "World" |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:53:9:53:20 | access to field IntField |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:53:9:53:26 | ...; |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:53:25:53:25 | 1 |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:9:54:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:9:54:30 | ...; |
|
||||
| ConditionalAccess.cs:46:10:46:11 | exit M9 (normal) | ConditionalAccess.cs:54:27:54:29 | "!" |
|
||||
| ConditionalAccess.cs:48:24:48:25 | 42 | ConditionalAccess.cs:48:24:48:25 | 42 |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:46:10:46:11 | enter M9 |
|
||||
| ConditionalAccess.cs:49:9:49:33 | ...; | ConditionalAccess.cs:48:24:48:25 | 42 |
|
||||
@@ -13058,7 +12907,6 @@ postBlockDominance
|
||||
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:51:30:51:31 | 84 |
|
||||
| ConditionalAccess.cs:52:9:52:39 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; |
|
||||
| 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:20 | access to field IntField | ConditionalAccess.cs:53:9:53:20 | access to field IntField |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:46:10:46:11 | enter M9 |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:48:24:48:25 | 42 |
|
||||
@@ -13073,29 +12921,37 @@ postBlockDominance
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" |
|
||||
| ConditionalAccess.cs:53:9:53:26 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:46:10:46:11 | enter M9 |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:48:24:48:25 | 42 |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:49:9:49:33 | ...; |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:49:26:49:32 | "Hello" |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:50:9:50:24 | ...; |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:50:13:50:13 | 0 |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:51:9:51:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:51:9:51:32 | ...; |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:51:30:51:31 | 84 |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:52:9:52:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:52:9:52:39 | ...; |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | ConditionalAccess.cs:52:32:52:38 | "World" |
|
||||
| ConditionalAccess.cs:53:25:53:25 | 1 | 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: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:22 | access to property StringProp | ConditionalAccess.cs:54:9:54:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:46:10:46:11 | enter M9 |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:48:24:48:25 | 42 |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:49:9:49:33 | ...; |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:49:26:49:32 | "Hello" |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:50:9:50:24 | ...; |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:50:13:50:13 | 0 |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:51:9:51:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:51:9:51:32 | ...; |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:51:30:51:31 | 84 |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:52:9:52:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:52:9:52:39 | ...; |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:52:32:52:38 | "World" |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:9:53:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:9:53:20 | access to field IntField |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:9:53:26 | ...; |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:53:25:53:25 | 1 |
|
||||
| ConditionalAccess.cs:54:9:54:30 | ...; | ConditionalAccess.cs:54:9:54:30 | ...; |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:9:54:10 | access to parameter ca |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:46:10:46:11 | enter M9 |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:48:24:48:25 | 42 |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:49:9:49:33 | ...; |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:49:26:49:32 | "Hello" |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:50:9:50:24 | ...; |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:50:13:50:13 | 0 |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:51:9:51:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:51:9:51:32 | ...; |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:51:30:51:31 | 84 |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:52:9:52:16 | access to property Prop |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:52:9:52:39 | ...; |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:52:32:52:38 | "World" |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:53:9:53:20 | access to field IntField |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:53:9:53:26 | ...; |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:53:25:53:25 | 1 |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:9:54:22 | access to property StringProp |
|
||||
| ConditionalAccess.cs:54:27:54:29 | "!" | ConditionalAccess.cs:54:27:54:29 | "!" |
|
||||
| ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith | ConditionalAccess.cs:60:26:60:38 | enter CommaJoinWith |
|
||||
|
||||
@@ -140,32 +140,22 @@ nodeEnclosing
|
||||
| AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:43:5:47:5 | {...} | 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: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:32 | ... += ... | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:44:23:44:26 | this access | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... + ... | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... = ... | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... += ... | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:45:22:45:25 | this access | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... + ... | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... = ... | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... += ... | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:46:20:46:23 | this access | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
| AccessorCalls.cs:46:25:46:25 | 0 | AccessorCalls.cs:42:10:42:11 | M5 |
|
||||
@@ -174,40 +164,27 @@ nodeEnclosing
|
||||
| AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:50:5:54:5 | {...} | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:51:9:51:12 | this access | 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: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:36 | ... += ... | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:51:25:51:28 | this access | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:51:25:51:30 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... + ... | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... = ... | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... += ... | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:52:24:52:27 | this access | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:52:24:52:29 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... + ... | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... = ... | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... += ... | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:53:22:53:25 | this access | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:53:22:53:27 | access to field x | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
| AccessorCalls.cs:53:22:53:30 | access to indexer | AccessorCalls.cs:49:10:49:11 | M6 |
|
||||
@@ -286,22 +263,15 @@ nodeEnclosing
|
||||
| AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:70:9:70:22 | ...; | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:71:9:71:25 | ... = ... | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:71:9:71:25 | ... += ... | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:71:9:71:26 | ...; | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:72:9:72:20 | ... = ... | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:72:9:72:20 | ... += ... | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:72:17:72:17 | access to local variable d | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
| AccessorCalls.cs:72:19:72:19 | 1 | AccessorCalls.cs:66:10:66:11 | M9 |
|
||||
@@ -803,8 +773,7 @@ nodeEnclosing
|
||||
| Assignments.cs:5:13:5:17 | Int32 x = ... | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:5:17:5:17 | 0 | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:6:9:6:14 | ... + ... | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:6:9:6:14 | ... = ... | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:6:9:6:15 | ...; | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:6:14:6:14 | 1 | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:8:9:8:22 | ... ...; | Assignments.cs:3:10:3:10 | M |
|
||||
@@ -812,16 +781,14 @@ nodeEnclosing
|
||||
| Assignments.cs:8:21:8:21 | 0 | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:8:21:8:21 | (...) ... | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:9:9:9:14 | ... = ... | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:9:9:9:14 | dynamic call to operator - | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:9:9:9:15 | ...; | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:9:14:9:14 | 2 | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:11:9:11:34 | ... ...; | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:11:13:11:33 | Assignments a = ... | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:11:17:11:33 | object creation of type Assignments | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:12:9:12:17 | ... = ... | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:12:9:12:17 | call to operator + | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:12:9:12:18 | ...; | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:12:14:12:17 | this access | Assignments.cs:3:10:3:10 | M |
|
||||
| Assignments.cs:14:9:14:13 | access to event Event | Assignments.cs:3:10:3:10 | M |
|
||||
@@ -1165,20 +1132,14 @@ nodeEnclosing
|
||||
| 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: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: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 |
|
||||
@@ -1412,8 +1373,7 @@ nodeEnclosing
|
||||
| Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:106:13:106:19 | ... = ... | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:106:13:106:19 | ... += ... | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:106:18:106:19 | "" | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:102:12:102:13 | M8 |
|
||||
@@ -1426,8 +1386,7 @@ nodeEnclosing
|
||||
| Conditions.cs:108:17:108:18 | [true] !... | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:109:17:109:23 | ... = ... | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:109:17:109:23 | ... += ... | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:109:17:109:24 | ...; | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:109:22:109:23 | "" | Conditions.cs:102:12:102:13 | M8 |
|
||||
| Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:102:12:102:13 | M8 |
|
||||
@@ -2131,8 +2090,7 @@ nodeEnclosing
|
||||
| Finally.cs:271:13:271:35 | ...; | Finally.cs:263:10:263:12 | M13 |
|
||||
| Finally.cs:271:31:271:33 | "3" | Finally.cs:263:10:263:12 | M13 |
|
||||
| Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:263:10:263:12 | M13 |
|
||||
| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:263:10:263:12 | M13 |
|
||||
| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | M13 |
|
||||
| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:263:10:263:12 | M13 |
|
||||
| Finally.cs:272:13:272:19 | ...; | Finally.cs:263:10:263:12 | M13 |
|
||||
| Finally.cs:272:18:272:18 | 3 | Finally.cs:263:10:263:12 | M13 |
|
||||
| Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | Foreach |
|
||||
@@ -4204,11 +4162,8 @@ 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 |
|
||||
| cflow.cs:212:13:212:24 | ... = ... | cflow.cs:208:10:208:11 | Do |
|
||||
| cflow.cs:212:13:212:24 | ... += ... | cflow.cs:208:10:208:11 | Do |
|
||||
| cflow.cs:212:13:212:25 | ...; | cflow.cs:208:10:208:11 | Do |
|
||||
| cflow.cs:212:22:212:24 | "a" | cflow.cs:208:10:208:11 | Do |
|
||||
| cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:208:10:208:11 | Do |
|
||||
@@ -4243,11 +4198,8 @@ 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 |
|
||||
| cflow.cs:228:13:228:22 | ... = ... | cflow.cs:224:10:224:16 | Foreach |
|
||||
| cflow.cs:228:13:228:22 | ... += ... | cflow.cs:224:10:224:16 | Foreach |
|
||||
| cflow.cs:228:13:228:23 | ...; | cflow.cs:224:10:224:16 | Foreach |
|
||||
| cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:224:10:224:16 | Foreach |
|
||||
| cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:224:10:224:16 | Foreach |
|
||||
@@ -4666,7 +4618,6 @@ blockEnclosing
|
||||
| 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 |
|
||||
@@ -4678,13 +4629,10 @@ blockEnclosing
|
||||
| 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 |
|
||||
|
||||
@@ -109,77 +109,48 @@
|
||||
| AccessorCalls.cs:39:16:39:16 | 0 | AccessorCalls.cs:39:16:39:16 | 0 |
|
||||
| AccessorCalls.cs:43:5:47:5 | {...} | AccessorCalls.cs:43:5:47:5 | {...} |
|
||||
| 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:12 | this access |
|
||||
| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:12 | this access |
|
||||
| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:12 | this access |
|
||||
| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:44:9:44:12 | this access |
|
||||
| AccessorCalls.cs:44:9:44:32 | ... += ... | AccessorCalls.cs:44:9:44:12 | this access |
|
||||
| AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:44:9:44:12 | this access |
|
||||
| AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:44:9:44:33 | ...; |
|
||||
| AccessorCalls.cs:44:23:44:26 | this access | AccessorCalls.cs:44:23:44:26 | this access |
|
||||
| AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:44:23:44:26 | this access |
|
||||
| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:12 | this access |
|
||||
| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:12 | this access |
|
||||
| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:12 | this access |
|
||||
| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:12 | this access |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... + ... | AccessorCalls.cs:45:9:45:12 | this access |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... += ... | AccessorCalls.cs:45:9:45:12 | this access |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... = ... | AccessorCalls.cs:45:9:45:12 | this access |
|
||||
| AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:45:9:45:31 | ...; |
|
||||
| AccessorCalls.cs:45:22:45:25 | this access | AccessorCalls.cs:45:22:45:25 | this access |
|
||||
| AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:45:22:45:25 | this access |
|
||||
| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:9:46:12 | this access |
|
||||
| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:9:46:12 | this access |
|
||||
| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:9:46:12 | this access |
|
||||
| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:9:46:12 | this access |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... + ... | AccessorCalls.cs:46:9:46:12 | this access |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... += ... | AccessorCalls.cs:46:9:46:12 | this access |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... = ... | AccessorCalls.cs:46:9:46:12 | this access |
|
||||
| AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:46:9:46:27 | ...; |
|
||||
| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:14:46:14 | 0 |
|
||||
| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:14:46:14 | 0 |
|
||||
| AccessorCalls.cs:46:20:46:23 | this access | AccessorCalls.cs:46:20:46:23 | this access |
|
||||
| AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:46:20:46:23 | this access |
|
||||
| AccessorCalls.cs:46:25:46:25 | 0 | AccessorCalls.cs:46:25:46:25 | 0 |
|
||||
| AccessorCalls.cs:50:5:54:5 | {...} | AccessorCalls.cs:50:5:54:5 | {...} |
|
||||
| AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:12 | this access |
|
||||
| AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:12 | this access |
|
||||
| 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:12 | this access |
|
||||
| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:12 | this access |
|
||||
| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:12 | this access |
|
||||
| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:51:9:51:12 | this access |
|
||||
| AccessorCalls.cs:51:9:51:36 | ... += ... | AccessorCalls.cs:51:9:51:12 | this access |
|
||||
| AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:51:9:51:12 | this access |
|
||||
| AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:51:9:51:37 | ...; |
|
||||
| AccessorCalls.cs:51:25:51:28 | this access | AccessorCalls.cs:51:25:51:28 | this access |
|
||||
| AccessorCalls.cs:51:25:51:30 | access to field x | AccessorCalls.cs:51:25:51:28 | this access |
|
||||
| AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:51:25:51:28 | this access |
|
||||
| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:12 | this access |
|
||||
| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:12 | this access |
|
||||
| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:12 | this access |
|
||||
| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:12 | this access |
|
||||
| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:12 | this access |
|
||||
| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:12 | this access |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... + ... | AccessorCalls.cs:52:9:52:12 | this access |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... += ... | AccessorCalls.cs:52:9:52:12 | this access |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... = ... | AccessorCalls.cs:52:9:52:12 | this access |
|
||||
| AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:52:9:52:35 | ...; |
|
||||
| AccessorCalls.cs:52:24:52:27 | this access | AccessorCalls.cs:52:24:52:27 | this access |
|
||||
| AccessorCalls.cs:52:24:52:29 | access to field x | AccessorCalls.cs:52:24:52:27 | this access |
|
||||
| AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:52:24:52:27 | this access |
|
||||
| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:12 | this access |
|
||||
| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:12 | this access |
|
||||
| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:9:53:12 | this access |
|
||||
| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:9:53:12 | this access |
|
||||
| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:9:53:12 | this access |
|
||||
| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:9:53:12 | this access |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... + ... | AccessorCalls.cs:53:9:53:12 | this access |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... += ... | AccessorCalls.cs:53:9:53:12 | this access |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... = ... | AccessorCalls.cs:53:9:53:12 | this access |
|
||||
| AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:53:9:53:31 | ...; |
|
||||
| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:16:53:16 | 0 |
|
||||
| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:16:53:16 | 0 |
|
||||
| AccessorCalls.cs:53:22:53:25 | this access | AccessorCalls.cs:53:22:53:25 | this access |
|
||||
| AccessorCalls.cs:53:22:53:27 | access to field x | AccessorCalls.cs:53:22:53:25 | this access |
|
||||
| AccessorCalls.cs:53:22:53:30 | access to indexer | AccessorCalls.cs:53:22:53:25 | this access |
|
||||
@@ -249,24 +220,15 @@
|
||||
| AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | AccessorCalls.cs:70:9:70:9 | access to local variable d |
|
||||
| AccessorCalls.cs:70:9:70:22 | ...; | AccessorCalls.cs:70:9:70:22 | ...; |
|
||||
| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:9 | access to local variable d |
|
||||
| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:9 | access to local variable d |
|
||||
| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:9 | access to local variable d |
|
||||
| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:9 | access to local variable d |
|
||||
| AccessorCalls.cs:71:9:71:25 | ... += ... | AccessorCalls.cs:71:9:71:9 | access to local variable d |
|
||||
| AccessorCalls.cs:71:9:71:25 | ... = ... | AccessorCalls.cs:71:9:71:9 | access to local variable d |
|
||||
| AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | AccessorCalls.cs:71:9:71:9 | access to local variable d |
|
||||
| AccessorCalls.cs:71:9:71:26 | ...; | AccessorCalls.cs:71:9:71:26 | ...; |
|
||||
| AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:71:25:71:25 | access to parameter e |
|
||||
| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:9:72:9 | access to local variable d |
|
||||
| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:9:72:9 | access to local variable d |
|
||||
| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:9:72:9 | access to local variable d |
|
||||
| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:9:72:9 | access to local variable d |
|
||||
| AccessorCalls.cs:72:9:72:20 | ... += ... | AccessorCalls.cs:72:9:72:9 | access to local variable d |
|
||||
| AccessorCalls.cs:72:9:72:20 | ... = ... | AccessorCalls.cs:72:9:72:9 | access to local variable d |
|
||||
| AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | AccessorCalls.cs:72:9:72:9 | access to local variable d |
|
||||
| AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:72:9:72:21 | ...; |
|
||||
| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:11:72:11 | 0 |
|
||||
| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:11:72:11 | 0 |
|
||||
| AccessorCalls.cs:72:17:72:17 | access to local variable d | AccessorCalls.cs:72:17:72:17 | access to local variable d |
|
||||
| AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:72:17:72:17 | access to local variable d |
|
||||
| AccessorCalls.cs:72:19:72:19 | 1 | AccessorCalls.cs:72:19:72:19 | 1 |
|
||||
@@ -689,9 +651,7 @@
|
||||
| Assignments.cs:5:13:5:17 | Int32 x = ... | Assignments.cs:5:17:5:17 | 0 |
|
||||
| Assignments.cs:5:17:5:17 | 0 | Assignments.cs:5:17:5:17 | 0 |
|
||||
| Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:6:9:6:9 | access to local variable x |
|
||||
| Assignments.cs:6:9:6:14 | ... + ... | Assignments.cs:6:9:6:9 | access to local variable x |
|
||||
| Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:6:9:6:9 | access to local variable x |
|
||||
| Assignments.cs:6:9:6:14 | ... = ... | Assignments.cs:6:9:6:9 | access to local variable x |
|
||||
| Assignments.cs:6:9:6:15 | ...; | Assignments.cs:6:9:6:15 | ...; |
|
||||
| Assignments.cs:6:14:6:14 | 1 | Assignments.cs:6:14:6:14 | 1 |
|
||||
| Assignments.cs:8:9:8:22 | ... ...; | Assignments.cs:8:9:8:22 | ... ...; |
|
||||
@@ -700,8 +660,6 @@
|
||||
| Assignments.cs:8:21:8:21 | (...) ... | Assignments.cs:8:21:8:21 | 0 |
|
||||
| Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:9:9:9:9 | access to local variable d |
|
||||
| Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:9:9:9:9 | access to local variable d |
|
||||
| Assignments.cs:9:9:9:14 | ... = ... | Assignments.cs:9:9:9:9 | access to local variable d |
|
||||
| Assignments.cs:9:9:9:14 | dynamic call to operator - | Assignments.cs:9:9:9:9 | access to local variable d |
|
||||
| Assignments.cs:9:9:9:15 | ...; | Assignments.cs:9:9:9:15 | ...; |
|
||||
| Assignments.cs:9:14:9:14 | 2 | Assignments.cs:9:14:9:14 | 2 |
|
||||
| Assignments.cs:11:9:11:34 | ... ...; | Assignments.cs:11:9:11:34 | ... ...; |
|
||||
@@ -709,8 +667,6 @@
|
||||
| Assignments.cs:11:17:11:33 | object creation of type Assignments | Assignments.cs:11:17:11:33 | object creation of type Assignments |
|
||||
| Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:12:9:12:9 | access to local variable a |
|
||||
| Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:12:9:12:9 | access to local variable a |
|
||||
| Assignments.cs:12:9:12:17 | ... = ... | Assignments.cs:12:9:12:9 | access to local variable a |
|
||||
| Assignments.cs:12:9:12:17 | call to operator + | Assignments.cs:12:9:12:9 | access to local variable a |
|
||||
| Assignments.cs:12:9:12:18 | ...; | Assignments.cs:12:9:12:18 | ...; |
|
||||
| Assignments.cs:12:14:12:17 | this access | Assignments.cs:12:14:12:17 | this access |
|
||||
| Assignments.cs:14:9:14:13 | access to event Event | Assignments.cs:14:9:14:13 | this access |
|
||||
@@ -966,22 +922,14 @@
|
||||
| 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 |
|
||||
@@ -1180,9 +1128,7 @@
|
||||
| Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:105:9:106:20 | if (...) ... |
|
||||
| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:105:13:105:13 | access to parameter b |
|
||||
| Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:106:13:106:13 | access to local variable x |
|
||||
| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:106:13:106:13 | access to local variable x |
|
||||
| Conditions.cs:106:13:106:19 | ... += ... | Conditions.cs:106:13:106:13 | access to local variable x |
|
||||
| Conditions.cs:106:13:106:19 | ... = ... | Conditions.cs:106:13:106:13 | access to local variable x |
|
||||
| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:20 | ...; |
|
||||
| Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:18:106:19 | "" |
|
||||
| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:107:9:109:24 | if (...) ... |
|
||||
@@ -1194,9 +1140,7 @@
|
||||
| Conditions.cs:108:17:108:18 | !... | Conditions.cs:108:18:108:18 | access to parameter b |
|
||||
| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:18:108:18 | access to parameter b |
|
||||
| Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:109:17:109:17 | access to local variable x |
|
||||
| Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:109:17:109:17 | access to local variable x |
|
||||
| Conditions.cs:109:17:109:23 | ... += ... | Conditions.cs:109:17:109:17 | access to local variable x |
|
||||
| Conditions.cs:109:17:109:23 | ... = ... | Conditions.cs:109:17:109:17 | access to local variable x |
|
||||
| Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:24 | ...; |
|
||||
| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:22:109:23 | "" |
|
||||
| Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:110:16:110:16 | access to local variable x |
|
||||
@@ -1776,9 +1720,7 @@
|
||||
| Finally.cs:271:13:271:35 | ...; | Finally.cs:271:13:271:35 | ...; |
|
||||
| Finally.cs:271:31:271:33 | "3" | Finally.cs:271:31:271:33 | "3" |
|
||||
| Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:13:272:13 | access to parameter i |
|
||||
| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:13:272:13 | access to parameter i |
|
||||
| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:272:13:272:13 | access to parameter i |
|
||||
| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:272:13:272:13 | access to parameter i |
|
||||
| Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:19 | ...; |
|
||||
| Finally.cs:272:18:272:18 | 3 | Finally.cs:272:18:272:18 | 3 |
|
||||
| Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | call to constructor Object |
|
||||
@@ -3417,12 +3359,8 @@
|
||||
| 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:17 | access to field Field | 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:17 | this access |
|
||||
| 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:17 | this access |
|
||||
| cflow.cs:212:13:212:24 | ... += ... | cflow.cs:212:13:212:17 | this access |
|
||||
| cflow.cs:212:13:212:24 | ... = ... | cflow.cs:212:13:212:17 | this access |
|
||||
| cflow.cs:212:13:212:25 | ...; | cflow.cs:212:13:212:25 | ...; |
|
||||
| cflow.cs:212:22:212:24 | "a" | cflow.cs:212:22:212:24 | "a" |
|
||||
| cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:213:13:216:13 | if (...) ... |
|
||||
@@ -3454,12 +3392,8 @@
|
||||
| cflow.cs:226:62:226:63 | 10 | cflow.cs:226:62:226:63 | 10 |
|
||||
| cflow.cs:227:9:237:9 | {...} | cflow.cs:227:9:237:9 | {...} |
|
||||
| cflow.cs:228:13:228:17 | access to field Field | 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:17 | this access |
|
||||
| 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:17 | this access |
|
||||
| cflow.cs:228:13:228:22 | ... += ... | cflow.cs:228:13:228:17 | this access |
|
||||
| cflow.cs:228:13:228:22 | ... = ... | cflow.cs:228:13:228:17 | this access |
|
||||
| cflow.cs:228:13:228:23 | ...; | cflow.cs:228:13:228:23 | ...; |
|
||||
| cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:22:228:22 | access to local variable x |
|
||||
| cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:229:13:232:13 | if (...) ... |
|
||||
|
||||
@@ -107,78 +107,49 @@
|
||||
| AccessorCalls.cs:39:9:39:19 | ...++ | AccessorCalls.cs:39:9:39:19 | ...++ | normal |
|
||||
| AccessorCalls.cs:39:9:39:20 | ...; | AccessorCalls.cs:39:9:39:19 | ...++ | normal |
|
||||
| AccessorCalls.cs:39:16:39:16 | 0 | AccessorCalls.cs:39:16:39:16 | 0 | normal |
|
||||
| AccessorCalls.cs:43:5:47:5 | {...} | AccessorCalls.cs:46:9:46:26 | ... = ... | normal |
|
||||
| AccessorCalls.cs:43:5:47:5 | {...} | AccessorCalls.cs:46:9:46:26 | ... += ... | normal |
|
||||
| AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:12 | this access | normal |
|
||||
| AccessorCalls.cs:44:9:44:12 | this access | AccessorCalls.cs:44:9:44:12 | this access | normal |
|
||||
| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:12 | this access | normal |
|
||||
| AccessorCalls.cs:44:9:44:18 | access to field Field | AccessorCalls.cs:44:9:44:18 | access to field Field | normal |
|
||||
| AccessorCalls.cs:44:9:44:32 | ... + ... | AccessorCalls.cs:44:9:44:32 | ... + ... | normal |
|
||||
| AccessorCalls.cs:44:9:44:32 | ... += ... | AccessorCalls.cs:44:9:44:32 | ... = ... | normal |
|
||||
| AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:44:9:44:32 | ... = ... | normal |
|
||||
| AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:44:9:44:32 | ... = ... | normal |
|
||||
| AccessorCalls.cs:44:9:44:32 | ... += ... | AccessorCalls.cs:44:9:44:32 | ... += ... | normal |
|
||||
| AccessorCalls.cs:44:9:44:33 | ...; | AccessorCalls.cs:44:9:44:32 | ... += ... | normal |
|
||||
| AccessorCalls.cs:44:23:44:26 | this access | AccessorCalls.cs:44:23:44:26 | this access | normal |
|
||||
| AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:44:23:44:32 | access to field Field | normal |
|
||||
| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:12 | this access | normal |
|
||||
| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:12 | this access | normal |
|
||||
| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:12 | this access | normal |
|
||||
| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:17 | access to property Prop | normal |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... + ... | AccessorCalls.cs:45:9:45:30 | ... + ... | normal |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... += ... | AccessorCalls.cs:45:9:45:30 | ... = ... | normal |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... = ... | AccessorCalls.cs:45:9:45:30 | ... = ... | normal |
|
||||
| AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:45:9:45:30 | ... = ... | normal |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... += ... | AccessorCalls.cs:45:9:45:30 | ... += ... | normal |
|
||||
| AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:45:9:45:30 | ... += ... | normal |
|
||||
| AccessorCalls.cs:45:22:45:25 | this access | AccessorCalls.cs:45:22:45:25 | this access | normal |
|
||||
| AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:45:22:45:30 | access to property Prop | normal |
|
||||
| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:9:46:12 | this access | normal |
|
||||
| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:9:46:12 | this access | normal |
|
||||
| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:9:46:15 | access to indexer | normal |
|
||||
| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:14:46:14 | 0 | normal |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... + ... | AccessorCalls.cs:46:9:46:26 | ... + ... | normal |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... += ... | AccessorCalls.cs:46:9:46:26 | ... = ... | normal |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... = ... | AccessorCalls.cs:46:9:46:26 | ... = ... | normal |
|
||||
| AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:46:9:46:26 | ... = ... | normal |
|
||||
| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:14:46:14 | 0 | normal |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... += ... | AccessorCalls.cs:46:9:46:26 | ... += ... | normal |
|
||||
| AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:46:9:46:26 | ... += ... | normal |
|
||||
| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:14:46:14 | 0 | normal |
|
||||
| AccessorCalls.cs:46:20:46:23 | this access | AccessorCalls.cs:46:20:46:23 | this access | normal |
|
||||
| AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:46:20:46:26 | access to indexer | normal |
|
||||
| AccessorCalls.cs:46:25:46:25 | 0 | AccessorCalls.cs:46:25:46:25 | 0 | normal |
|
||||
| AccessorCalls.cs:50:5:54:5 | {...} | AccessorCalls.cs:53:9:53:30 | ... = ... | normal |
|
||||
| AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:12 | this access | normal |
|
||||
| AccessorCalls.cs:50:5:54:5 | {...} | AccessorCalls.cs:53:9:53:30 | ... += ... | normal |
|
||||
| AccessorCalls.cs:51:9:51:12 | this access | AccessorCalls.cs:51:9:51:12 | this access | normal |
|
||||
| AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:14 | access to field x | normal |
|
||||
| AccessorCalls.cs:51:9:51:14 | access to field x | AccessorCalls.cs:51:9:51:14 | access to field x | normal |
|
||||
| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:14 | access to field x | normal |
|
||||
| AccessorCalls.cs:51:9:51:20 | access to field Field | AccessorCalls.cs:51:9:51:20 | access to field Field | normal |
|
||||
| AccessorCalls.cs:51:9:51:36 | ... + ... | AccessorCalls.cs:51:9:51:36 | ... + ... | normal |
|
||||
| AccessorCalls.cs:51:9:51:36 | ... += ... | AccessorCalls.cs:51:9:51:36 | ... = ... | normal |
|
||||
| AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:51:9:51:36 | ... = ... | normal |
|
||||
| AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:51:9:51:36 | ... = ... | normal |
|
||||
| AccessorCalls.cs:51:9:51:36 | ... += ... | AccessorCalls.cs:51:9:51:36 | ... += ... | normal |
|
||||
| AccessorCalls.cs:51:9:51:37 | ...; | AccessorCalls.cs:51:9:51:36 | ... += ... | normal |
|
||||
| AccessorCalls.cs:51:25:51:28 | this access | AccessorCalls.cs:51:25:51:28 | this access | normal |
|
||||
| AccessorCalls.cs:51:25:51:30 | access to field x | AccessorCalls.cs:51:25:51:30 | access to field x | normal |
|
||||
| AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:51:25:51:36 | access to field Field | normal |
|
||||
| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:12 | this access | normal |
|
||||
| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:12 | this access | normal |
|
||||
| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:14 | access to field x | normal |
|
||||
| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:14 | access to field x | normal |
|
||||
| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:14 | access to field x | normal |
|
||||
| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:19 | access to property Prop | normal |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... + ... | AccessorCalls.cs:52:9:52:34 | ... + ... | normal |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... += ... | AccessorCalls.cs:52:9:52:34 | ... = ... | normal |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... = ... | AccessorCalls.cs:52:9:52:34 | ... = ... | normal |
|
||||
| AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:52:9:52:34 | ... = ... | normal |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... += ... | AccessorCalls.cs:52:9:52:34 | ... += ... | normal |
|
||||
| AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:52:9:52:34 | ... += ... | normal |
|
||||
| AccessorCalls.cs:52:24:52:27 | this access | AccessorCalls.cs:52:24:52:27 | this access | normal |
|
||||
| AccessorCalls.cs:52:24:52:29 | access to field x | AccessorCalls.cs:52:24:52:29 | access to field x | normal |
|
||||
| AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:52:24:52:34 | access to property Prop | normal |
|
||||
| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:12 | this access | normal |
|
||||
| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:12 | this access | normal |
|
||||
| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:9:53:14 | access to field x | normal |
|
||||
| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:9:53:14 | access to field x | normal |
|
||||
| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:9:53:17 | access to indexer | normal |
|
||||
| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:16:53:16 | 0 | normal |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... + ... | AccessorCalls.cs:53:9:53:30 | ... + ... | normal |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... += ... | AccessorCalls.cs:53:9:53:30 | ... = ... | normal |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... = ... | AccessorCalls.cs:53:9:53:30 | ... = ... | normal |
|
||||
| AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:53:9:53:30 | ... = ... | normal |
|
||||
| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:16:53:16 | 0 | normal |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... += ... | AccessorCalls.cs:53:9:53:30 | ... += ... | normal |
|
||||
| AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:53:9:53:30 | ... += ... | normal |
|
||||
| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:16:53:16 | 0 | normal |
|
||||
| AccessorCalls.cs:53:22:53:25 | this access | AccessorCalls.cs:53:22:53:25 | this access | normal |
|
||||
| AccessorCalls.cs:53:22:53:27 | access to field x | AccessorCalls.cs:53:22:53:27 | access to field x | normal |
|
||||
@@ -249,23 +220,14 @@
|
||||
| AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | normal |
|
||||
| AccessorCalls.cs:70:9:70:22 | ...; | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | normal |
|
||||
| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:9 | access to local variable d | normal |
|
||||
| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:9 | access to local variable d | normal |
|
||||
| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:9 | access to local variable d | normal |
|
||||
| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | normal |
|
||||
| AccessorCalls.cs:71:9:71:25 | ... += ... | AccessorCalls.cs:71:9:71:25 | ... = ... | normal |
|
||||
| AccessorCalls.cs:71:9:71:25 | ... = ... | AccessorCalls.cs:71:9:71:25 | ... = ... | normal |
|
||||
| AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | normal |
|
||||
| AccessorCalls.cs:71:9:71:26 | ...; | AccessorCalls.cs:71:9:71:25 | ... = ... | normal |
|
||||
| AccessorCalls.cs:71:9:71:25 | ... += ... | AccessorCalls.cs:71:9:71:25 | ... += ... | normal |
|
||||
| AccessorCalls.cs:71:9:71:26 | ...; | AccessorCalls.cs:71:9:71:25 | ... += ... | normal |
|
||||
| AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:71:25:71:25 | access to parameter e | normal |
|
||||
| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:9:72:9 | access to local variable d | normal |
|
||||
| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:9:72:9 | access to local variable d | normal |
|
||||
| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:9:72:12 | dynamic access to element | normal |
|
||||
| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:11:72:11 | 0 | normal |
|
||||
| AccessorCalls.cs:72:9:72:20 | ... += ... | AccessorCalls.cs:72:9:72:20 | ... = ... | normal |
|
||||
| AccessorCalls.cs:72:9:72:20 | ... = ... | AccessorCalls.cs:72:9:72:20 | ... = ... | normal |
|
||||
| AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | normal |
|
||||
| AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:72:9:72:20 | ... = ... | normal |
|
||||
| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:11:72:11 | 0 | normal |
|
||||
| AccessorCalls.cs:72:9:72:20 | ... += ... | AccessorCalls.cs:72:9:72:20 | ... += ... | normal |
|
||||
| AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:72:9:72:20 | ... += ... | normal |
|
||||
| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:11:72:11 | 0 | normal |
|
||||
| AccessorCalls.cs:72:17:72:17 | access to local variable d | AccessorCalls.cs:72:17:72:17 | access to local variable d | normal |
|
||||
| AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:72:17:72:20 | dynamic access to element | normal |
|
||||
@@ -788,29 +750,23 @@
|
||||
| Assignments.cs:5:13:5:17 | Int32 x = ... | Assignments.cs:5:13:5:17 | Int32 x = ... | normal |
|
||||
| Assignments.cs:5:17:5:17 | 0 | Assignments.cs:5:17:5:17 | 0 | normal |
|
||||
| Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:6:9:6:9 | access to local variable x | normal |
|
||||
| Assignments.cs:6:9:6:14 | ... + ... | Assignments.cs:6:9:6:14 | ... + ... | normal |
|
||||
| Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:6:9:6:14 | ... = ... | normal |
|
||||
| Assignments.cs:6:9:6:14 | ... = ... | Assignments.cs:6:9:6:14 | ... = ... | normal |
|
||||
| Assignments.cs:6:9:6:15 | ...; | Assignments.cs:6:9:6:14 | ... = ... | normal |
|
||||
| Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:6:9:6:14 | ... += ... | normal |
|
||||
| Assignments.cs:6:9:6:15 | ...; | Assignments.cs:6:9:6:14 | ... += ... | normal |
|
||||
| Assignments.cs:6:14:6:14 | 1 | Assignments.cs:6:14:6:14 | 1 | normal |
|
||||
| Assignments.cs:8:9:8:22 | ... ...; | Assignments.cs:8:17:8:21 | dynamic d = ... | normal |
|
||||
| Assignments.cs:8:17:8:21 | dynamic d = ... | Assignments.cs:8:17:8:21 | dynamic d = ... | normal |
|
||||
| Assignments.cs:8:21:8:21 | 0 | Assignments.cs:8:21:8:21 | 0 | normal |
|
||||
| Assignments.cs:8:21:8:21 | (...) ... | Assignments.cs:8:21:8:21 | (...) ... | normal |
|
||||
| Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:9:9:9:9 | access to local variable d | normal |
|
||||
| Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:9:9:9:14 | ... = ... | normal |
|
||||
| Assignments.cs:9:9:9:14 | ... = ... | Assignments.cs:9:9:9:14 | ... = ... | normal |
|
||||
| Assignments.cs:9:9:9:14 | dynamic call to operator - | Assignments.cs:9:9:9:14 | dynamic call to operator - | normal |
|
||||
| Assignments.cs:9:9:9:15 | ...; | Assignments.cs:9:9:9:14 | ... = ... | normal |
|
||||
| Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:9:9:9:14 | ... -= ... | normal |
|
||||
| Assignments.cs:9:9:9:15 | ...; | Assignments.cs:9:9:9:14 | ... -= ... | normal |
|
||||
| Assignments.cs:9:14:9:14 | 2 | Assignments.cs:9:14:9:14 | 2 | normal |
|
||||
| Assignments.cs:11:9:11:34 | ... ...; | Assignments.cs:11:13:11:33 | Assignments a = ... | normal |
|
||||
| Assignments.cs:11:13:11:33 | Assignments a = ... | Assignments.cs:11:13:11:33 | Assignments a = ... | normal |
|
||||
| Assignments.cs:11:17:11:33 | object creation of type Assignments | Assignments.cs:11:17:11:33 | object creation of type Assignments | normal |
|
||||
| Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:12:9:12:9 | access to local variable a | normal |
|
||||
| Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:12:9:12:17 | ... = ... | normal |
|
||||
| Assignments.cs:12:9:12:17 | ... = ... | Assignments.cs:12:9:12:17 | ... = ... | normal |
|
||||
| Assignments.cs:12:9:12:17 | call to operator + | Assignments.cs:12:9:12:17 | call to operator + | normal |
|
||||
| Assignments.cs:12:9:12:18 | ...; | Assignments.cs:12:9:12:17 | ... = ... | normal |
|
||||
| Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:12:9:12:17 | ... += ... | normal |
|
||||
| Assignments.cs:12:9:12:18 | ...; | Assignments.cs:12:9:12:17 | ... += ... | normal |
|
||||
| Assignments.cs:12:14:12:17 | this access | Assignments.cs:12:14:12:17 | this access | normal |
|
||||
| Assignments.cs:14:9:14:13 | access to event Event | Assignments.cs:14:9:14:13 | this access | normal |
|
||||
| Assignments.cs:14:9:14:13 | this access | Assignments.cs:14:9:14:13 | this access | normal |
|
||||
@@ -1120,8 +1076,7 @@
|
||||
| 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: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 |
|
||||
@@ -1181,36 +1136,18 @@
|
||||
| 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: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: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: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: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 |
|
||||
@@ -1458,34 +1395,30 @@
|
||||
| Conditions.cs:104:17:104:17 | access to parameter b | Conditions.cs:104:17:104:17 | access to parameter b | normal |
|
||||
| Conditions.cs:104:17:104:28 | call to method ToString | Conditions.cs:104:17:104:28 | call to method ToString | normal |
|
||||
| Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:105:13:105:13 | access to parameter b | false |
|
||||
| Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:106:13:106:19 | ... = ... | normal |
|
||||
| Conditions.cs:105:9:106:20 | if (...) ... | Conditions.cs:106:13:106:19 | ... += ... | normal |
|
||||
| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:105:13:105:13 | access to parameter b | false |
|
||||
| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:105:13:105:13 | access to parameter b | true |
|
||||
| Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:106:13:106:13 | access to local variable x | normal |
|
||||
| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:106:13:106:19 | ... + ... | normal |
|
||||
| Conditions.cs:106:13:106:19 | ... += ... | Conditions.cs:106:13:106:19 | ... = ... | normal |
|
||||
| Conditions.cs:106:13:106:19 | ... = ... | Conditions.cs:106:13:106:19 | ... = ... | normal |
|
||||
| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:19 | ... = ... | normal |
|
||||
| Conditions.cs:106:13:106:19 | ... += ... | Conditions.cs:106:13:106:19 | ... += ... | normal |
|
||||
| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:19 | ... += ... | normal |
|
||||
| Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:18:106:19 | "" | normal |
|
||||
| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:107:13:107:24 | ... > ... | false |
|
||||
| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:108:17:108:18 | !... | false |
|
||||
| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:109:17:109:23 | ... = ... | normal |
|
||||
| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:109:17:109:23 | ... += ... | normal |
|
||||
| Conditions.cs:107:13:107:13 | access to local variable x | Conditions.cs:107:13:107:13 | access to local variable x | normal |
|
||||
| Conditions.cs:107:13:107:20 | access to property Length | Conditions.cs:107:13:107:20 | access to property Length | normal |
|
||||
| Conditions.cs:107:13:107:24 | ... > ... | Conditions.cs:107:13:107:24 | ... > ... | false |
|
||||
| Conditions.cs:107:13:107:24 | ... > ... | Conditions.cs:107:13:107:24 | ... > ... | true |
|
||||
| Conditions.cs:107:24:107:24 | 0 | Conditions.cs:107:24:107:24 | 0 | normal |
|
||||
| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:108:17:108:18 | !... | false |
|
||||
| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:109:17:109:23 | ... = ... | normal |
|
||||
| Conditions.cs:108:13:109:24 | if (...) ... | Conditions.cs:109:17:109:23 | ... += ... | normal |
|
||||
| Conditions.cs:108:17:108:18 | !... | Conditions.cs:108:17:108:18 | !... | false |
|
||||
| Conditions.cs:108:17:108:18 | !... | Conditions.cs:108:17:108:18 | !... | true |
|
||||
| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:18:108:18 | access to parameter b | false |
|
||||
| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:18:108:18 | access to parameter b | true |
|
||||
| Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:109:17:109:17 | access to local variable x | normal |
|
||||
| Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:109:17:109:23 | ... + ... | normal |
|
||||
| Conditions.cs:109:17:109:23 | ... += ... | Conditions.cs:109:17:109:23 | ... = ... | normal |
|
||||
| Conditions.cs:109:17:109:23 | ... = ... | Conditions.cs:109:17:109:23 | ... = ... | normal |
|
||||
| Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:23 | ... = ... | normal |
|
||||
| Conditions.cs:109:17:109:23 | ... += ... | Conditions.cs:109:17:109:23 | ... += ... | normal |
|
||||
| Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:23 | ... += ... | normal |
|
||||
| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:22:109:23 | "" | normal |
|
||||
| Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:110:9:110:17 | return ...; | return |
|
||||
| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:16:110:16 | access to local variable x | normal |
|
||||
@@ -2405,10 +2338,10 @@
|
||||
| Finally.cs:260:9:260:33 | call to method WriteLine | Finally.cs:260:9:260:33 | call to method WriteLine | normal |
|
||||
| Finally.cs:260:9:260:34 | ...; | Finally.cs:260:9:260:33 | call to method WriteLine | normal |
|
||||
| Finally.cs:260:27:260:32 | "Done" | Finally.cs:260:27:260:32 | "Done" | normal |
|
||||
| Finally.cs:264:5:274:5 | {...} | Finally.cs:272:13:272:18 | ... = ... | normal |
|
||||
| Finally.cs:264:5:274:5 | {...} | Finally.cs:272:13:272:18 | ... = ... | throw(Exception) [normal] (0) |
|
||||
| Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:272:13:272:18 | ... = ... | normal |
|
||||
| Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:272:13:272:18 | ... = ... | throw(Exception) [normal] (0) |
|
||||
| Finally.cs:264:5:274:5 | {...} | Finally.cs:272:13:272:18 | ... += ... | normal |
|
||||
| Finally.cs:264:5:274:5 | {...} | Finally.cs:272:13:272:18 | ... += ... | throw(Exception) [normal] (0) |
|
||||
| Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:272:13:272:18 | ... += ... | normal |
|
||||
| Finally.cs:265:9:273:9 | try {...} ... | Finally.cs:272:13:272:18 | ... += ... | throw(Exception) [normal] (0) |
|
||||
| Finally.cs:266:9:268:9 | {...} | Finally.cs:267:13:267:34 | call to method WriteLine | normal |
|
||||
| Finally.cs:266:9:268:9 | {...} | Finally.cs:267:13:267:34 | call to method WriteLine | throw(Exception) |
|
||||
| Finally.cs:267:13:267:34 | call to method WriteLine | Finally.cs:267:13:267:34 | call to method WriteLine | normal |
|
||||
@@ -2416,15 +2349,13 @@
|
||||
| Finally.cs:267:13:267:35 | ...; | Finally.cs:267:13:267:34 | call to method WriteLine | normal |
|
||||
| Finally.cs:267:13:267:35 | ...; | Finally.cs:267:13:267:34 | call to method WriteLine | throw(Exception) |
|
||||
| Finally.cs:267:31:267:33 | "1" | Finally.cs:267:31:267:33 | "1" | normal |
|
||||
| Finally.cs:270:9:273:9 | {...} | Finally.cs:272:13:272:18 | ... = ... | normal |
|
||||
| Finally.cs:270:9:273:9 | {...} | Finally.cs:272:13:272:18 | ... += ... | normal |
|
||||
| Finally.cs:271:13:271:34 | call to method WriteLine | Finally.cs:271:13:271:34 | call to method WriteLine | normal |
|
||||
| Finally.cs:271:13:271:35 | ...; | Finally.cs:271:13:271:34 | call to method WriteLine | normal |
|
||||
| Finally.cs:271:31:271:33 | "3" | Finally.cs:271:31:271:33 | "3" | normal |
|
||||
| Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:13:272:13 | access to parameter i | normal |
|
||||
| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:13:272:18 | ... + ... | normal |
|
||||
| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:272:13:272:18 | ... = ... | normal |
|
||||
| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:272:13:272:18 | ... = ... | normal |
|
||||
| Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:18 | ... = ... | normal |
|
||||
| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:272:13:272:18 | ... += ... | normal |
|
||||
| Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:18 | ... += ... | normal |
|
||||
| Finally.cs:272:18:272:18 | 3 | Finally.cs:272:18:272:18 | 3 | normal |
|
||||
| Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | call to constructor Object | normal |
|
||||
| Foreach.cs:4:7:4:13 | call to method <object initializer> | Foreach.cs:4:7:4:13 | call to method <object initializer> | normal |
|
||||
@@ -4403,13 +4334,9 @@
|
||||
| cflow.cs:211:9:221:9 | {...} | cflow.cs:217:17:217:32 | ... < ... | false |
|
||||
| cflow.cs:211:9:221:9 | {...} | cflow.cs:219:17:219:22 | break; | break |
|
||||
| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:17 | access to field Field | normal |
|
||||
| cflow.cs:212:13:212:17 | access to field Field | cflow.cs:212:13:212:17 | this access | normal |
|
||||
| cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | this access | normal |
|
||||
| cflow.cs:212:13:212:17 | this access | cflow.cs:212:13:212:17 | this access | normal |
|
||||
| cflow.cs:212:13:212:24 | ... + ... | cflow.cs:212:13:212:24 | ... + ... | normal |
|
||||
| cflow.cs:212:13:212:24 | ... += ... | cflow.cs:212:13:212:24 | ... = ... | normal |
|
||||
| cflow.cs:212:13:212:24 | ... = ... | cflow.cs:212:13:212:24 | ... = ... | normal |
|
||||
| cflow.cs:212:13:212:25 | ...; | cflow.cs:212:13:212:24 | ... = ... | normal |
|
||||
| cflow.cs:212:13:212:24 | ... += ... | cflow.cs:212:13:212:24 | ... += ... | normal |
|
||||
| cflow.cs:212:13:212:25 | ...; | cflow.cs:212:13:212:24 | ... += ... | normal |
|
||||
| cflow.cs:212:22:212:24 | "a" | cflow.cs:212:22:212:24 | "a" | normal |
|
||||
| cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:213:17:213:32 | ... > ... | false |
|
||||
| cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:215:17:215:25 | continue; | continue |
|
||||
@@ -4449,13 +4376,9 @@
|
||||
| cflow.cs:227:9:237:9 | {...} | cflow.cs:233:17:233:32 | ... < ... | false |
|
||||
| cflow.cs:227:9:237:9 | {...} | cflow.cs:235:17:235:22 | break; | break |
|
||||
| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:17 | access to field Field | normal |
|
||||
| cflow.cs:228:13:228:17 | access to field Field | cflow.cs:228:13:228:17 | this access | normal |
|
||||
| cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | this access | normal |
|
||||
| cflow.cs:228:13:228:17 | this access | cflow.cs:228:13:228:17 | this access | normal |
|
||||
| cflow.cs:228:13:228:22 | ... + ... | cflow.cs:228:13:228:22 | ... + ... | normal |
|
||||
| cflow.cs:228:13:228:22 | ... += ... | cflow.cs:228:13:228:22 | ... = ... | normal |
|
||||
| cflow.cs:228:13:228:22 | ... = ... | cflow.cs:228:13:228:22 | ... = ... | normal |
|
||||
| cflow.cs:228:13:228:23 | ...; | cflow.cs:228:13:228:22 | ... = ... | normal |
|
||||
| cflow.cs:228:13:228:22 | ... += ... | cflow.cs:228:13:228:22 | ... += ... | normal |
|
||||
| cflow.cs:228:13:228:23 | ...; | cflow.cs:228:13:228:22 | ... += ... | normal |
|
||||
| cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:22:228:22 | access to local variable x | normal |
|
||||
| cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:229:17:229:32 | ... > ... | false |
|
||||
| cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:231:17:231:25 | continue; | continue |
|
||||
|
||||
@@ -128,77 +128,54 @@
|
||||
| AccessorCalls.cs:42:10:42:11 | enter M5 | AccessorCalls.cs:43:5:47:5 | {...} | |
|
||||
| AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | AccessorCalls.cs:42:10:42:11 | exit M5 | |
|
||||
| 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:18 | access to field Field | |
|
||||
| AccessorCalls.cs:44:9:44:32 | ... = ... | AccessorCalls.cs:45:9:45:31 | ...; | |
|
||||
| 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 | |
|
||||
| AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... + ... | |
|
||||
| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:12 | this access | |
|
||||
| AccessorCalls.cs:44:23:44:32 | access to field Field | AccessorCalls.cs:44:9:44:32 | ... += ... | |
|
||||
| AccessorCalls.cs:45:9:45:12 | this access | AccessorCalls.cs:45:9:45:17 | access to property Prop | |
|
||||
| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:9:45:30 | ... = ... | |
|
||||
| AccessorCalls.cs:45:9:45:17 | access to property Prop | AccessorCalls.cs:45:22:45:25 | this access | |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... + ... | AccessorCalls.cs:45:9:45:17 | access to property Prop | |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... = ... | AccessorCalls.cs:46:9:46:27 | ...; | |
|
||||
| AccessorCalls.cs:45:9:45:30 | ... += ... | AccessorCalls.cs:46:9:46:27 | ...; | |
|
||||
| AccessorCalls.cs:45:9:45:31 | ...; | AccessorCalls.cs:45:9:45:12 | this access | |
|
||||
| AccessorCalls.cs:45:22:45:25 | this access | AccessorCalls.cs:45:22:45:30 | access to property Prop | |
|
||||
| AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:45:9:45:30 | ... + ... | |
|
||||
| AccessorCalls.cs:45:22:45:30 | access to property Prop | AccessorCalls.cs:45:9:45:30 | ... += ... | |
|
||||
| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:14:46:14 | 0 | |
|
||||
| AccessorCalls.cs:46:9:46:12 | this access | AccessorCalls.cs:46:14:46:14 | 0 | |
|
||||
| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:9:46:26 | ... = ... | |
|
||||
| AccessorCalls.cs:46:9:46:15 | access to indexer | AccessorCalls.cs:46:20:46:23 | this access | |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... + ... | AccessorCalls.cs:46:9:46:15 | access to indexer | |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... = ... | AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | |
|
||||
| AccessorCalls.cs:46:9:46:26 | ... += ... | AccessorCalls.cs:42:10:42:11 | exit M5 (normal) | |
|
||||
| AccessorCalls.cs:46:9:46:27 | ...; | AccessorCalls.cs:46:9:46:12 | this access | |
|
||||
| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:9:46:12 | this access | |
|
||||
| AccessorCalls.cs:46:14:46:14 | 0 | AccessorCalls.cs:46:9:46:15 | access to indexer | |
|
||||
| AccessorCalls.cs:46:20:46:23 | this access | AccessorCalls.cs:46:25:46:25 | 0 | |
|
||||
| AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:46:9:46:26 | ... + ... | |
|
||||
| AccessorCalls.cs:46:20:46:26 | access to indexer | AccessorCalls.cs:46:9:46:26 | ... += ... | |
|
||||
| AccessorCalls.cs:46:25:46:25 | 0 | AccessorCalls.cs:46:20:46:26 | access to indexer | |
|
||||
| AccessorCalls.cs:49:10:49:11 | enter M6 | AccessorCalls.cs:50:5:54:5 | {...} | |
|
||||
| AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | AccessorCalls.cs:49:10:49:11 | exit M6 | |
|
||||
| AccessorCalls.cs:50:5:54:5 | {...} | AccessorCalls.cs:51:9:51:37 | ...; | |
|
||||
| AccessorCalls.cs:51:9:51:12 | this access | 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: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:20 | access to field Field | |
|
||||
| AccessorCalls.cs:51:9:51:36 | ... = ... | AccessorCalls.cs:52:9:52:35 | ...; | |
|
||||
| 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 | |
|
||||
| AccessorCalls.cs:51:25:51:30 | access to field x | AccessorCalls.cs:51:25:51:36 | access to field Field | |
|
||||
| AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:51:9:51:36 | ... + ... | |
|
||||
| AccessorCalls.cs:51:25:51:36 | access to field Field | AccessorCalls.cs:51:9:51:36 | ... += ... | |
|
||||
| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:14 | access to field x | |
|
||||
| AccessorCalls.cs:52:9:52:12 | this access | AccessorCalls.cs:52:9:52:14 | access to field x | |
|
||||
| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:12 | this access | |
|
||||
| AccessorCalls.cs:52:9:52:14 | access to field x | AccessorCalls.cs:52:9:52:19 | access to property Prop | |
|
||||
| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:9:52:34 | ... = ... | |
|
||||
| AccessorCalls.cs:52:9:52:19 | access to property Prop | AccessorCalls.cs:52:24:52:27 | this access | |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... + ... | AccessorCalls.cs:52:9:52:19 | access to property Prop | |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... = ... | AccessorCalls.cs:53:9:53:31 | ...; | |
|
||||
| AccessorCalls.cs:52:9:52:34 | ... += ... | AccessorCalls.cs:53:9:53:31 | ...; | |
|
||||
| AccessorCalls.cs:52:9:52:35 | ...; | AccessorCalls.cs:52:9:52:12 | this access | |
|
||||
| AccessorCalls.cs:52:24:52:27 | this access | AccessorCalls.cs:52:24:52:29 | access to field x | |
|
||||
| AccessorCalls.cs:52:24:52:29 | access to field x | AccessorCalls.cs:52:24:52:34 | access to property Prop | |
|
||||
| AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:52:9:52:34 | ... + ... | |
|
||||
| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:14 | access to field x | |
|
||||
| AccessorCalls.cs:52:24:52:34 | access to property Prop | AccessorCalls.cs:52:9:52:34 | ... += ... | |
|
||||
| AccessorCalls.cs:53:9:53:12 | this access | AccessorCalls.cs:53:9:53:14 | access to field x | |
|
||||
| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:16:53:16 | 0 | |
|
||||
| AccessorCalls.cs:53:9:53:14 | access to field x | AccessorCalls.cs:53:16:53:16 | 0 | |
|
||||
| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:9:53:30 | ... = ... | |
|
||||
| AccessorCalls.cs:53:9:53:17 | access to indexer | AccessorCalls.cs:53:22:53:25 | this access | |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... + ... | AccessorCalls.cs:53:9:53:17 | access to indexer | |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... = ... | AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | |
|
||||
| AccessorCalls.cs:53:9:53:30 | ... += ... | AccessorCalls.cs:49:10:49:11 | exit M6 (normal) | |
|
||||
| AccessorCalls.cs:53:9:53:31 | ...; | AccessorCalls.cs:53:9:53:12 | this access | |
|
||||
| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:9:53:12 | this access | |
|
||||
| AccessorCalls.cs:53:16:53:16 | 0 | AccessorCalls.cs:53:9:53:17 | access to indexer | |
|
||||
| AccessorCalls.cs:53:22:53:25 | this access | AccessorCalls.cs:53:22:53:27 | access to field x | |
|
||||
| AccessorCalls.cs:53:22:53:27 | access to field x | AccessorCalls.cs:53:29:53:29 | 0 | |
|
||||
| AccessorCalls.cs:53:22:53:30 | access to indexer | AccessorCalls.cs:53:9:53:30 | ... + ... | |
|
||||
| AccessorCalls.cs:53:22:53:30 | access to indexer | AccessorCalls.cs:53:9:53:30 | ... += ... | |
|
||||
| AccessorCalls.cs:53:29:53:29 | 0 | AccessorCalls.cs:53:22:53:30 | access to indexer | |
|
||||
| AccessorCalls.cs:56:10:56:11 | enter M7 | AccessorCalls.cs:57:5:59:5 | {...} | |
|
||||
| AccessorCalls.cs:56:10:56:11 | exit M7 (normal) | AccessorCalls.cs:56:10:56:11 | exit M7 | |
|
||||
@@ -270,25 +247,18 @@
|
||||
| AccessorCalls.cs:70:9:70:19 | dynamic access to member MaybeProp | AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | |
|
||||
| AccessorCalls.cs:70:9:70:21 | dynamic call to operator ++ | AccessorCalls.cs:71:9:71:26 | ...; | |
|
||||
| AccessorCalls.cs:70:9:70:22 | ...; | AccessorCalls.cs:70:9:70:9 | access to local variable d | |
|
||||
| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:9 | access to local variable d | |
|
||||
| AccessorCalls.cs:71:9:71:9 | access to local variable d | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | |
|
||||
| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:9:71:25 | ... = ... | |
|
||||
| AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | AccessorCalls.cs:71:25:71:25 | access to parameter e | |
|
||||
| AccessorCalls.cs:71:9:71:25 | ... = ... | AccessorCalls.cs:72:9:72:21 | ...; | |
|
||||
| AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | AccessorCalls.cs:71:9:71:20 | dynamic access to member MaybeEvent | |
|
||||
| AccessorCalls.cs:71:9:71:25 | ... += ... | AccessorCalls.cs:72:9:72:21 | ...; | |
|
||||
| AccessorCalls.cs:71:9:71:26 | ...; | AccessorCalls.cs:71:9:71:9 | access to local variable d | |
|
||||
| AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:71:9:71:25 | dynamic call to operator + | |
|
||||
| AccessorCalls.cs:71:25:71:25 | access to parameter e | AccessorCalls.cs:71:9:71:25 | ... += ... | |
|
||||
| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:11:72:11 | 0 | |
|
||||
| AccessorCalls.cs:72:9:72:9 | access to local variable d | AccessorCalls.cs:72:11:72:11 | 0 | |
|
||||
| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:9:72:20 | ... = ... | |
|
||||
| AccessorCalls.cs:72:9:72:12 | dynamic access to element | AccessorCalls.cs:72:17:72:17 | access to local variable d | |
|
||||
| AccessorCalls.cs:72:9:72:20 | ... = ... | AccessorCalls.cs:73:9:73:84 | ...; | |
|
||||
| AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | AccessorCalls.cs:72:9:72:12 | dynamic access to element | |
|
||||
| AccessorCalls.cs:72:9:72:20 | ... += ... | AccessorCalls.cs:73:9:73:84 | ...; | |
|
||||
| AccessorCalls.cs:72:9:72:21 | ...; | AccessorCalls.cs:72:9:72:9 | access to local variable d | |
|
||||
| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:9:72:9 | access to local variable d | |
|
||||
| AccessorCalls.cs:72:11:72:11 | 0 | AccessorCalls.cs:72:9:72:12 | dynamic access to element | |
|
||||
| AccessorCalls.cs:72:17:72:17 | access to local variable d | AccessorCalls.cs:72:19:72:19 | 1 | |
|
||||
| AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:72:9:72:20 | dynamic call to operator + | |
|
||||
| AccessorCalls.cs:72:17:72:20 | dynamic access to element | AccessorCalls.cs:72:9:72:20 | ... += ... | |
|
||||
| AccessorCalls.cs:72:19:72:19 | 1 | AccessorCalls.cs:72:17:72:20 | dynamic access to element | |
|
||||
| AccessorCalls.cs:73:9:73:44 | (..., ...) | AccessorCalls.cs:73:49:73:49 | access to local variable d | |
|
||||
| AccessorCalls.cs:73:9:73:83 | ... = ... | AccessorCalls.cs:66:10:66:11 | exit M9 (normal) | |
|
||||
@@ -819,27 +789,24 @@
|
||||
| Assignments.cs:5:13:5:17 | Int32 x = ... | Assignments.cs:6:9:6:15 | ...; | |
|
||||
| Assignments.cs:5:17:5:17 | 0 | Assignments.cs:5:13:5:17 | Int32 x = ... | |
|
||||
| Assignments.cs:6:9:6:9 | access to local variable x | Assignments.cs:6:14:6:14 | 1 | |
|
||||
| Assignments.cs:6:9:6:14 | ... + ... | Assignments.cs:6:9:6:14 | ... = ... | |
|
||||
| Assignments.cs:6:9:6:14 | ... = ... | Assignments.cs:8:9:8:22 | ... ...; | |
|
||||
| Assignments.cs:6:9:6:14 | ... += ... | Assignments.cs:8:9:8:22 | ... ...; | |
|
||||
| Assignments.cs:6:9:6:15 | ...; | Assignments.cs:6:9:6:9 | access to local variable x | |
|
||||
| Assignments.cs:6:14:6:14 | 1 | Assignments.cs:6:9:6:14 | ... + ... | |
|
||||
| Assignments.cs:6:14:6:14 | 1 | Assignments.cs:6:9:6:14 | ... += ... | |
|
||||
| Assignments.cs:8:9:8:22 | ... ...; | Assignments.cs:8:21:8:21 | 0 | |
|
||||
| Assignments.cs:8:17:8:21 | dynamic d = ... | Assignments.cs:9:9:9:15 | ...; | |
|
||||
| Assignments.cs:8:21:8:21 | 0 | Assignments.cs:8:21:8:21 | (...) ... | |
|
||||
| Assignments.cs:8:21:8:21 | (...) ... | Assignments.cs:8:17:8:21 | dynamic d = ... | |
|
||||
| Assignments.cs:9:9:9:9 | access to local variable d | Assignments.cs:9:14:9:14 | 2 | |
|
||||
| Assignments.cs:9:9:9:14 | ... = ... | Assignments.cs:11:9:11:34 | ... ...; | |
|
||||
| Assignments.cs:9:9:9:14 | dynamic call to operator - | Assignments.cs:9:9:9:14 | ... = ... | |
|
||||
| Assignments.cs:9:9:9:14 | ... -= ... | Assignments.cs:11:9:11:34 | ... ...; | |
|
||||
| Assignments.cs:9:9:9:15 | ...; | Assignments.cs:9:9:9:9 | access to local variable d | |
|
||||
| Assignments.cs:9:14:9:14 | 2 | Assignments.cs:9:9:9:14 | dynamic call to operator - | |
|
||||
| Assignments.cs:9:14:9:14 | 2 | Assignments.cs:9:9:9:14 | ... -= ... | |
|
||||
| Assignments.cs:11:9:11:34 | ... ...; | Assignments.cs:11:17:11:33 | object creation of type Assignments | |
|
||||
| Assignments.cs:11:13:11:33 | Assignments a = ... | Assignments.cs:12:9:12:18 | ...; | |
|
||||
| Assignments.cs:11:17:11:33 | object creation of type Assignments | Assignments.cs:11:13:11:33 | Assignments a = ... | |
|
||||
| Assignments.cs:12:9:12:9 | access to local variable a | Assignments.cs:12:14:12:17 | this access | |
|
||||
| Assignments.cs:12:9:12:17 | ... = ... | Assignments.cs:14:9:14:36 | ...; | |
|
||||
| Assignments.cs:12:9:12:17 | call to operator + | Assignments.cs:12:9:12:17 | ... = ... | |
|
||||
| Assignments.cs:12:9:12:17 | ... += ... | Assignments.cs:14:9:14:36 | ...; | |
|
||||
| Assignments.cs:12:9:12:18 | ...; | Assignments.cs:12:9:12:9 | access to local variable a | |
|
||||
| Assignments.cs:12:14:12:17 | this access | Assignments.cs:12:9:12:17 | call to operator + | |
|
||||
| Assignments.cs:12:14:12:17 | this access | Assignments.cs:12:9:12:17 | ... += ... | |
|
||||
| Assignments.cs:14:9:14:13 | access to event Event | Assignments.cs:14:9:14:35 | ... += ... | |
|
||||
| Assignments.cs:14:9:14:13 | this access | Assignments.cs:14:18:14:35 | (...) => ... | |
|
||||
| Assignments.cs:14:9:14:35 | ... += ... | Assignments.cs:3:10:3:10 | exit M (normal) | |
|
||||
@@ -1187,26 +1154,18 @@
|
||||
| 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: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: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: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 | ", " | |
|
||||
@@ -1453,10 +1412,9 @@
|
||||
| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:106:13:106:20 | ...; | true |
|
||||
| Conditions.cs:105:13:105:13 | access to parameter b | Conditions.cs:107:9:109:24 | if (...) ... | false |
|
||||
| Conditions.cs:106:13:106:13 | access to local variable x | Conditions.cs:106:18:106:19 | "" | |
|
||||
| Conditions.cs:106:13:106:19 | ... + ... | Conditions.cs:106:13:106:19 | ... = ... | |
|
||||
| Conditions.cs:106:13:106:19 | ... = ... | Conditions.cs:107:9:109:24 | if (...) ... | |
|
||||
| Conditions.cs:106:13:106:19 | ... += ... | Conditions.cs:107:9:109:24 | if (...) ... | |
|
||||
| Conditions.cs:106:13:106:20 | ...; | Conditions.cs:106:13:106:13 | access to local variable x | |
|
||||
| Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:13:106:19 | ... + ... | |
|
||||
| Conditions.cs:106:18:106:19 | "" | Conditions.cs:106:13:106:19 | ... += ... | |
|
||||
| Conditions.cs:107:9:109:24 | if (...) ... | Conditions.cs:107:13:107:13 | access to local variable x | |
|
||||
| Conditions.cs:107:13:107:13 | access to local variable x | Conditions.cs:107:13:107:20 | access to property Length | |
|
||||
| Conditions.cs:107:13:107:20 | access to property Length | Conditions.cs:107:24:107:24 | 0 | |
|
||||
@@ -1469,10 +1427,9 @@
|
||||
| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:17:108:18 | [false] !... | true |
|
||||
| Conditions.cs:108:18:108:18 | access to parameter b | Conditions.cs:108:17:108:18 | [true] !... | false |
|
||||
| Conditions.cs:109:17:109:17 | access to local variable x | Conditions.cs:109:22:109:23 | "" | |
|
||||
| Conditions.cs:109:17:109:23 | ... + ... | Conditions.cs:109:17:109:23 | ... = ... | |
|
||||
| Conditions.cs:109:17:109:23 | ... = ... | Conditions.cs:110:16:110:16 | access to local variable x | |
|
||||
| Conditions.cs:109:17:109:23 | ... += ... | Conditions.cs:110:16:110:16 | access to local variable x | |
|
||||
| Conditions.cs:109:17:109:24 | ...; | Conditions.cs:109:17:109:17 | access to local variable x | |
|
||||
| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:17:109:23 | ... + ... | |
|
||||
| Conditions.cs:109:22:109:23 | "" | Conditions.cs:109:17:109:23 | ... += ... | |
|
||||
| Conditions.cs:110:9:110:17 | return ...; | Conditions.cs:102:12:102:13 | exit M8 (normal) | return |
|
||||
| Conditions.cs:110:16:110:16 | access to local variable x | Conditions.cs:110:9:110:17 | return ...; | |
|
||||
| Conditions.cs:113:10:113:11 | enter M9 | Conditions.cs:114:5:124:5 | {...} | |
|
||||
@@ -2205,11 +2162,10 @@
|
||||
| Finally.cs:271:13:271:35 | ...; | Finally.cs:271:31:271:33 | "3" | |
|
||||
| Finally.cs:271:31:271:33 | "3" | Finally.cs:271:13:271:34 | call to method WriteLine | |
|
||||
| Finally.cs:272:13:272:13 | access to parameter i | Finally.cs:272:18:272:18 | 3 | |
|
||||
| Finally.cs:272:13:272:18 | ... + ... | Finally.cs:272:13:272:18 | ... = ... | |
|
||||
| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) | exception |
|
||||
| Finally.cs:272:13:272:18 | ... = ... | Finally.cs:263:10:263:12 | exit M13 (normal) | |
|
||||
| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:263:10:263:12 | exit M13 (abnormal) | exception |
|
||||
| Finally.cs:272:13:272:18 | ... += ... | Finally.cs:263:10:263:12 | exit M13 (normal) | |
|
||||
| Finally.cs:272:13:272:19 | ...; | Finally.cs:272:13:272:13 | access to parameter i | |
|
||||
| Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:18 | ... + ... | |
|
||||
| Finally.cs:272:18:272:18 | 3 | Finally.cs:272:13:272:18 | ... += ... | |
|
||||
| Foreach.cs:4:7:4:13 | call to constructor Object | Foreach.cs:4:7:4:13 | {...} | |
|
||||
| Foreach.cs:4:7:4:13 | call to method <object initializer> | Foreach.cs:4:7:4:13 | call to constructor Object | |
|
||||
| Foreach.cs:4:7:4:13 | enter Foreach | Foreach.cs:4:7:4:13 | this access | |
|
||||
@@ -4305,14 +4261,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:17 | access to field Field | |
|
||||
| cflow.cs:212:13:212:24 | ... = ... | cflow.cs:213:13:216:13 | if (...) ... | |
|
||||
| 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 | ... + ... | |
|
||||
| cflow.cs:212:22:212:24 | "a" | cflow.cs:212:13:212:24 | ... += ... | |
|
||||
| cflow.cs:213:13:216:13 | if (...) ... | cflow.cs:213:17:213:21 | this access | |
|
||||
| cflow.cs:213:17:213:21 | access to field Field | cflow.cs:213:17:213:28 | access to property Length | |
|
||||
| cflow.cs:213:17:213:21 | this access | cflow.cs:213:17:213:21 | access to field Field | |
|
||||
@@ -4347,14 +4300,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:17 | access to field Field | |
|
||||
| cflow.cs:228:13:228:22 | ... = ... | cflow.cs:229:13:232:13 | if (...) ... | |
|
||||
| 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 | ... + ... | |
|
||||
| cflow.cs:228:22:228:22 | access to local variable x | cflow.cs:228:13:228:22 | ... += ... | |
|
||||
| cflow.cs:229:13:232:13 | if (...) ... | cflow.cs:229:17:229:21 | this access | |
|
||||
| cflow.cs:229:17:229:21 | access to field Field | cflow.cs:229:17:229:28 | access to property Length | |
|
||||
| cflow.cs:229:17:229:21 | this access | cflow.cs:229:17:229:21 | access to field Field | |
|
||||
|
||||
@@ -614,7 +614,7 @@ Operators.cs:
|
||||
# 12| 1: [UnaryMinusExpr] -...
|
||||
# 12| 0: [IntLiteral] 4
|
||||
# 13| 5: [ExprStmt] ...;
|
||||
# 13| 0: [AssignUnsighedRightShiftExpr] ... >>>= ...
|
||||
# 13| 0: [AssignUnsignedRightShiftExpr] ... >>>= ...
|
||||
# 13| 0: [LocalVariableAccess] access to local variable z
|
||||
# 13| 1: [IntLiteral] 5
|
||||
# 17| [Class] MyOperatorClass
|
||||
|
||||
@@ -1,8 +1,7 @@
|
||||
binarybitwise
|
||||
| Operators.cs:7:18:7:25 | ... >>> ... | Operators.cs:7:18:7:19 | access to local variable x1 | Operators.cs:7:25:7:25 | 2 | >>> | UnsignedRightShiftExpr |
|
||||
| Operators.cs:10:18:10:25 | ... >>> ... | Operators.cs:10:18:10:19 | access to local variable y1 | Operators.cs:10:25:10:25 | 3 | >>> | UnsignedRightShiftExpr |
|
||||
| Operators.cs:13:9:13:16 | ... >>> ... | Operators.cs:13:9:13:9 | access to local variable z | Operators.cs:13:16:13:16 | 5 | >>> | UnsignedRightShiftExpr |
|
||||
assignbitwise
|
||||
| Operators.cs:13:9:13:16 | ... >>>= ... | Operators.cs:13:9:13:9 | access to local variable z | Operators.cs:13:16:13:16 | 5 | >>>= | AssignUnsighedRightShiftExpr |
|
||||
| Operators.cs:13:9:13:16 | ... >>>= ... | Operators.cs:13:9:13:9 | access to local variable z | Operators.cs:13:16:13:16 | 5 | >>>= | AssignUnsignedRightShiftExpr |
|
||||
userdefined
|
||||
| Operators.cs:19:44:19:46 | >>> | op_UnsignedRightShift | UnsignedRightShiftOperator |
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
nullcoalescing
|
||||
| NullCoalescingAssignment.cs:8:9:8:18 | ... ?? ... |
|
||||
| NullableRefTypes.cs:94:17:94:25 | ... ?? ... |
|
||||
assignments
|
||||
| NullCoalescingAssignment.cs:8:9:8:18 | ... ??= ... | NullCoalescingAssignment.cs:8:9:8:18 | ... = ... |
|
||||
| NullCoalescingAssignment.cs:8:9:8:18 | ... ??= ... |
|
||||
|
||||
@@ -2,6 +2,4 @@ import csharp
|
||||
|
||||
query predicate nullcoalescing(NullCoalescingExpr expr) { any() }
|
||||
|
||||
query predicate assignments(AssignCoalesceExpr expr, Expr expanded) {
|
||||
expanded = expr.getExpandedAssignment()
|
||||
}
|
||||
query predicate assignments(AssignCoalesceExpr expr) { any() }
|
||||
|
||||
@@ -4,9 +4,8 @@
|
||||
| NullCoalescingAssignment.cs:7:9:7:24 | ... ...; | NullCoalescingAssignment.cs:7:20:7:23 | null | semmle.label | successor |
|
||||
| NullCoalescingAssignment.cs:7:16:7:23 | Object o = ... | NullCoalescingAssignment.cs:8:9:8:19 | ...; | semmle.label | successor |
|
||||
| NullCoalescingAssignment.cs:7:20:7:23 | null | NullCoalescingAssignment.cs:7:16:7:23 | Object o = ... | semmle.label | successor |
|
||||
| NullCoalescingAssignment.cs:8:9:8:9 | access to local variable o | NullCoalescingAssignment.cs:8:9:8:18 | ... ?? ... | semmle.label | non-null |
|
||||
| NullCoalescingAssignment.cs:8:9:8:9 | access to local variable o | NullCoalescingAssignment.cs:8:9:8:18 | ... ??= ... | semmle.label | non-null |
|
||||
| NullCoalescingAssignment.cs:8:9:8:9 | access to local variable o | NullCoalescingAssignment.cs:8:15:8:18 | this access | semmle.label | null |
|
||||
| NullCoalescingAssignment.cs:8:9:8:18 | ... = ... | NullCoalescingAssignment.cs:5:10:5:23 | exit NullCoalescing (normal) | semmle.label | successor |
|
||||
| NullCoalescingAssignment.cs:8:9:8:18 | ... ?? ... | NullCoalescingAssignment.cs:8:9:8:18 | ... = ... | semmle.label | successor |
|
||||
| NullCoalescingAssignment.cs:8:9:8:18 | ... ??= ... | NullCoalescingAssignment.cs:5:10:5:23 | exit NullCoalescing (normal) | semmle.label | successor |
|
||||
| NullCoalescingAssignment.cs:8:9:8:19 | ...; | NullCoalescingAssignment.cs:8:9:8:9 | access to local variable o | semmle.label | successor |
|
||||
| NullCoalescingAssignment.cs:8:15:8:18 | this access | NullCoalescingAssignment.cs:8:9:8:18 | ... ?? ... | semmle.label | successor |
|
||||
| NullCoalescingAssignment.cs:8:15:8:18 | this access | NullCoalescingAssignment.cs:8:9:8:18 | ... ??= ... | semmle.label | successor |
|
||||
|
||||
@@ -32,13 +32,14 @@
|
||||
| LocalDataFlow.cs:59:13:59:25 | SSA def(sink1) | LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 |
|
||||
| LocalDataFlow.cs:59:21:59:25 | "abc" | LocalDataFlow.cs:59:13:59:17 | access to local variable sink1 |
|
||||
| LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 | LocalDataFlow.cs:60:9:60:22 | SSA def(sink1) |
|
||||
| LocalDataFlow.cs:60:9:60:22 | ... + ... | LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 |
|
||||
| LocalDataFlow.cs:60:9:60:22 | ... += ... | LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 |
|
||||
| LocalDataFlow.cs:60:9:60:22 | SSA def(sink1) | LocalDataFlow.cs:61:15:61:19 | access to local variable sink1 |
|
||||
| LocalDataFlow.cs:60:18:60:22 | [post] access to local variable sink0 | LocalDataFlow.cs:168:20:168:24 | access to local variable sink0 |
|
||||
| LocalDataFlow.cs:60:18:60:22 | access to local variable sink0 | LocalDataFlow.cs:168:20:168:24 | access to local variable sink0 |
|
||||
| LocalDataFlow.cs:61:15:61:19 | [post] access to local variable sink1 | LocalDataFlow.cs:68:21:68:25 | access to local variable sink1 |
|
||||
| LocalDataFlow.cs:61:15:61:19 | access to local variable sink1 | LocalDataFlow.cs:68:21:68:25 | access to local variable sink1 |
|
||||
| LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 | LocalDataFlow.cs:64:9:64:25 | SSA def(nonSink0) |
|
||||
| LocalDataFlow.cs:64:9:64:25 | ... + ... | LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 |
|
||||
| LocalDataFlow.cs:64:9:64:25 | ... += ... | LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 |
|
||||
| LocalDataFlow.cs:64:9:64:25 | SSA def(nonSink0) | LocalDataFlow.cs:65:15:65:22 | access to local variable nonSink0 |
|
||||
| LocalDataFlow.cs:65:15:65:22 | [post] access to local variable nonSink0 | LocalDataFlow.cs:72:20:72:27 | access to local variable nonSink0 |
|
||||
| LocalDataFlow.cs:65:15:65:22 | access to local variable nonSink0 | LocalDataFlow.cs:72:20:72:27 | access to local variable nonSink0 |
|
||||
|
||||
@@ -31,19 +31,20 @@
|
||||
| LocalDataFlow.cs:59:13:59:17 | access to local variable sink1 | LocalDataFlow.cs:59:13:59:25 | SSA def(sink1) |
|
||||
| LocalDataFlow.cs:59:13:59:25 | SSA def(sink1) | LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 |
|
||||
| LocalDataFlow.cs:59:21:59:25 | "abc" | LocalDataFlow.cs:59:13:59:17 | access to local variable sink1 |
|
||||
| LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 | LocalDataFlow.cs:60:9:60:22 | ... + ... |
|
||||
| LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 | LocalDataFlow.cs:60:9:60:22 | ... += ... |
|
||||
| LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 | LocalDataFlow.cs:60:9:60:22 | SSA def(sink1) |
|
||||
| LocalDataFlow.cs:60:9:60:22 | ... + ... | LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 |
|
||||
| LocalDataFlow.cs:60:9:60:22 | ... += ... | LocalDataFlow.cs:60:9:60:13 | access to local variable sink1 |
|
||||
| LocalDataFlow.cs:60:9:60:22 | SSA def(sink1) | LocalDataFlow.cs:61:15:61:19 | access to local variable sink1 |
|
||||
| LocalDataFlow.cs:60:18:60:22 | access to local variable sink0 | LocalDataFlow.cs:60:9:60:22 | ... + ... |
|
||||
| LocalDataFlow.cs:60:18:60:22 | [post] access to local variable sink0 | LocalDataFlow.cs:168:20:168:24 | access to local variable sink0 |
|
||||
| LocalDataFlow.cs:60:18:60:22 | access to local variable sink0 | LocalDataFlow.cs:60:9:60:22 | ... += ... |
|
||||
| LocalDataFlow.cs:60:18:60:22 | access to local variable sink0 | LocalDataFlow.cs:168:20:168:24 | access to local variable sink0 |
|
||||
| LocalDataFlow.cs:61:15:61:19 | [post] access to local variable sink1 | LocalDataFlow.cs:68:21:68:25 | access to local variable sink1 |
|
||||
| LocalDataFlow.cs:61:15:61:19 | access to local variable sink1 | LocalDataFlow.cs:68:21:68:25 | access to local variable sink1 |
|
||||
| LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 | LocalDataFlow.cs:64:9:64:25 | ... + ... |
|
||||
| LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 | LocalDataFlow.cs:64:9:64:25 | ... += ... |
|
||||
| LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 | LocalDataFlow.cs:64:9:64:25 | SSA def(nonSink0) |
|
||||
| LocalDataFlow.cs:64:9:64:25 | ... + ... | LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 |
|
||||
| LocalDataFlow.cs:64:9:64:25 | ... += ... | LocalDataFlow.cs:64:9:64:16 | access to local variable nonSink0 |
|
||||
| LocalDataFlow.cs:64:9:64:25 | SSA def(nonSink0) | LocalDataFlow.cs:65:15:65:22 | access to local variable nonSink0 |
|
||||
| LocalDataFlow.cs:64:21:64:25 | "abc" | LocalDataFlow.cs:64:9:64:25 | ... + ... |
|
||||
| LocalDataFlow.cs:64:21:64:25 | "abc" | LocalDataFlow.cs:64:9:64:25 | ... += ... |
|
||||
| LocalDataFlow.cs:65:15:65:22 | [post] access to local variable nonSink0 | LocalDataFlow.cs:72:20:72:27 | access to local variable nonSink0 |
|
||||
| LocalDataFlow.cs:65:15:65:22 | access to local variable nonSink0 | LocalDataFlow.cs:72:20:72:27 | access to local variable nonSink0 |
|
||||
| LocalDataFlow.cs:68:13:68:17 | access to local variable sink5 | LocalDataFlow.cs:68:13:68:32 | SSA def(sink5) |
|
||||
|
||||
@@ -153,8 +153,7 @@
|
||||
| ModulusAnalysis.cs:92:25:92:25 | access to local variable j | SSA phi(j) | 0 | 0 |
|
||||
| ModulusAnalysis.cs:92:29:92:31 | access to parameter cap | SSA param(cap) | 0 | 0 |
|
||||
| ModulusAnalysis.cs:92:34:92:34 | access to local variable j | SSA phi(j) | 0 | 0 |
|
||||
| ModulusAnalysis.cs:92:34:92:39 | ... + ... | SSA phi(j) | 1 | 0 |
|
||||
| ModulusAnalysis.cs:92:34:92:39 | ... = ... | SSA phi(j) | 1 | 0 |
|
||||
| ModulusAnalysis.cs:92:34:92:39 | ... += ... | SSA phi(j) | 1 | 0 |
|
||||
| ModulusAnalysis.cs:92:39:92:39 | 1 | 0 | 1 | 0 |
|
||||
| ModulusAnalysis.cs:93:38:93:38 | access to local variable j | SSA phi(j) | 0 | 0 |
|
||||
| ModulusAnalysis.cs:95:22:95:22 | 0 | 0 | 0 | 0 |
|
||||
@@ -165,12 +164,9 @@
|
||||
| ModulusAnalysis.cs:95:34:95:34 | access to local variable k | 0 | 0 | 3 |
|
||||
| ModulusAnalysis.cs:95:34:95:34 | access to local variable k | SSA def(k) | 0 | 3 |
|
||||
| ModulusAnalysis.cs:95:34:95:34 | access to local variable k | SSA phi(k) | 0 | 0 |
|
||||
| ModulusAnalysis.cs:95:34:95:39 | ... + ... | 0 | 0 | 3 |
|
||||
| ModulusAnalysis.cs:95:34:95:39 | ... + ... | SSA def(k) | 0 | 3 |
|
||||
| ModulusAnalysis.cs:95:34:95:39 | ... + ... | SSA phi(k) | 3 | 0 |
|
||||
| ModulusAnalysis.cs:95:34:95:39 | ... = ... | 0 | 0 | 3 |
|
||||
| ModulusAnalysis.cs:95:34:95:39 | ... = ... | SSA def(k) | 0 | 3 |
|
||||
| ModulusAnalysis.cs:95:34:95:39 | ... = ... | SSA phi(k) | 3 | 0 |
|
||||
| ModulusAnalysis.cs:95:34:95:39 | ... += ... | 0 | 0 | 3 |
|
||||
| ModulusAnalysis.cs:95:34:95:39 | ... += ... | SSA def(k) | 0 | 3 |
|
||||
| ModulusAnalysis.cs:95:34:95:39 | ... += ... | SSA phi(k) | 3 | 0 |
|
||||
| ModulusAnalysis.cs:95:39:95:39 | 3 | 0 | 3 | 0 |
|
||||
| ModulusAnalysis.cs:96:38:96:38 | access to local variable k | 0 | 0 | 3 |
|
||||
| ModulusAnalysis.cs:96:38:96:38 | access to local variable k | SSA def(k) | 0 | 3 |
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
public class NullCoalescing
|
||||
{
|
||||
public void M1()
|
||||
{
|
||||
var i = Source<int?>(1);
|
||||
int? x = null;
|
||||
x = x ?? i;
|
||||
Sink(x); // $ hasValueFlow=1
|
||||
}
|
||||
|
||||
public void M2()
|
||||
{
|
||||
var i = Source<int?>(2);
|
||||
int? x = null;
|
||||
x ??= i;
|
||||
Sink(x); // $ hasValueFlow=2
|
||||
}
|
||||
|
||||
public void M3(int? x)
|
||||
{
|
||||
var i = Source<int?>(3);
|
||||
x = x ?? i;
|
||||
Sink(x); // $ hasValueFlow=3
|
||||
}
|
||||
|
||||
public void M4(int? x)
|
||||
{
|
||||
var i = Source<int?>(4);
|
||||
x ??= i;
|
||||
Sink(x); // $ hasValueFlow=4
|
||||
}
|
||||
|
||||
public static void Sink(object o) { }
|
||||
static T Source<T>(object source) => throw null;
|
||||
}
|
||||
@@ -0,0 +1,70 @@
|
||||
models
|
||||
edges
|
||||
| NullCoalescing.cs:5:13:5:13 | access to local variable i : Nullable<Int32> | NullCoalescing.cs:7:9:7:9 | access to local variable x : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:5:13:5:13 | access to local variable i : Nullable<Int32> | NullCoalescing.cs:7:9:7:9 | access to local variable x : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:5:17:5:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:5:13:5:13 | access to local variable i : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:5:17:5:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:5:13:5:13 | access to local variable i : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:7:9:7:9 | access to local variable x : Nullable<Int32> | NullCoalescing.cs:8:14:8:14 | (...) ... | provenance | |
|
||||
| NullCoalescing.cs:7:9:7:9 | access to local variable x : Nullable<Int32> | NullCoalescing.cs:8:14:8:14 | (...) ... | provenance | |
|
||||
| NullCoalescing.cs:13:13:13:13 | access to local variable i : Nullable<Int32> | NullCoalescing.cs:15:9:15:9 | access to local variable x : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:13:13:13:13 | access to local variable i : Nullable<Int32> | NullCoalescing.cs:15:9:15:9 | access to local variable x : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:13:17:13:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:13:13:13:13 | access to local variable i : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:13:17:13:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:13:13:13:13 | access to local variable i : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:15:9:15:9 | access to local variable x : Nullable<Int32> | NullCoalescing.cs:16:14:16:14 | (...) ... | provenance | |
|
||||
| NullCoalescing.cs:15:9:15:9 | access to local variable x : Nullable<Int32> | NullCoalescing.cs:16:14:16:14 | (...) ... | provenance | |
|
||||
| NullCoalescing.cs:21:13:21:13 | access to local variable i : Nullable<Int32> | NullCoalescing.cs:22:9:22:9 | access to parameter x : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:21:13:21:13 | access to local variable i : Nullable<Int32> | NullCoalescing.cs:22:9:22:9 | access to parameter x : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:21:17:21:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:21:13:21:13 | access to local variable i : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:21:17:21:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:21:13:21:13 | access to local variable i : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:22:9:22:9 | access to parameter x : Nullable<Int32> | NullCoalescing.cs:23:14:23:14 | (...) ... | provenance | |
|
||||
| NullCoalescing.cs:22:9:22:9 | access to parameter x : Nullable<Int32> | NullCoalescing.cs:23:14:23:14 | (...) ... | provenance | |
|
||||
| NullCoalescing.cs:28:13:28:13 | access to local variable i : Nullable<Int32> | NullCoalescing.cs:29:9:29:9 | access to parameter x : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:28:13:28:13 | access to local variable i : Nullable<Int32> | NullCoalescing.cs:29:9:29:9 | access to parameter x : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:28:17:28:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:28:13:28:13 | access to local variable i : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:28:17:28:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:28:13:28:13 | access to local variable i : Nullable<Int32> | provenance | |
|
||||
| NullCoalescing.cs:29:9:29:9 | access to parameter x : Nullable<Int32> | NullCoalescing.cs:30:14:30:14 | (...) ... | provenance | |
|
||||
| NullCoalescing.cs:29:9:29:9 | access to parameter x : Nullable<Int32> | NullCoalescing.cs:30:14:30:14 | (...) ... | provenance | |
|
||||
nodes
|
||||
| NullCoalescing.cs:5:13:5:13 | access to local variable i : Nullable<Int32> | semmle.label | access to local variable i : Nullable<Int32> |
|
||||
| NullCoalescing.cs:5:13:5:13 | access to local variable i : Nullable<Int32> | semmle.label | access to local variable i : Nullable<Int32> |
|
||||
| NullCoalescing.cs:5:17:5:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | semmle.label | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
| NullCoalescing.cs:5:17:5:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | semmle.label | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
| NullCoalescing.cs:7:9:7:9 | access to local variable x : Nullable<Int32> | semmle.label | access to local variable x : Nullable<Int32> |
|
||||
| NullCoalescing.cs:7:9:7:9 | access to local variable x : Nullable<Int32> | semmle.label | access to local variable x : Nullable<Int32> |
|
||||
| NullCoalescing.cs:8:14:8:14 | (...) ... | semmle.label | (...) ... |
|
||||
| NullCoalescing.cs:8:14:8:14 | (...) ... | semmle.label | (...) ... |
|
||||
| NullCoalescing.cs:13:13:13:13 | access to local variable i : Nullable<Int32> | semmle.label | access to local variable i : Nullable<Int32> |
|
||||
| NullCoalescing.cs:13:13:13:13 | access to local variable i : Nullable<Int32> | semmle.label | access to local variable i : Nullable<Int32> |
|
||||
| NullCoalescing.cs:13:17:13:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | semmle.label | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
| NullCoalescing.cs:13:17:13:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | semmle.label | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
| NullCoalescing.cs:15:9:15:9 | access to local variable x : Nullable<Int32> | semmle.label | access to local variable x : Nullable<Int32> |
|
||||
| NullCoalescing.cs:15:9:15:9 | access to local variable x : Nullable<Int32> | semmle.label | access to local variable x : Nullable<Int32> |
|
||||
| NullCoalescing.cs:16:14:16:14 | (...) ... | semmle.label | (...) ... |
|
||||
| NullCoalescing.cs:16:14:16:14 | (...) ... | semmle.label | (...) ... |
|
||||
| NullCoalescing.cs:21:13:21:13 | access to local variable i : Nullable<Int32> | semmle.label | access to local variable i : Nullable<Int32> |
|
||||
| NullCoalescing.cs:21:13:21:13 | access to local variable i : Nullable<Int32> | semmle.label | access to local variable i : Nullable<Int32> |
|
||||
| NullCoalescing.cs:21:17:21:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | semmle.label | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
| NullCoalescing.cs:21:17:21:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | semmle.label | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
| NullCoalescing.cs:22:9:22:9 | access to parameter x : Nullable<Int32> | semmle.label | access to parameter x : Nullable<Int32> |
|
||||
| NullCoalescing.cs:22:9:22:9 | access to parameter x : Nullable<Int32> | semmle.label | access to parameter x : Nullable<Int32> |
|
||||
| NullCoalescing.cs:23:14:23:14 | (...) ... | semmle.label | (...) ... |
|
||||
| NullCoalescing.cs:23:14:23:14 | (...) ... | semmle.label | (...) ... |
|
||||
| NullCoalescing.cs:28:13:28:13 | access to local variable i : Nullable<Int32> | semmle.label | access to local variable i : Nullable<Int32> |
|
||||
| NullCoalescing.cs:28:13:28:13 | access to local variable i : Nullable<Int32> | semmle.label | access to local variable i : Nullable<Int32> |
|
||||
| NullCoalescing.cs:28:17:28:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | semmle.label | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
| NullCoalescing.cs:28:17:28:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | semmle.label | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
| NullCoalescing.cs:29:9:29:9 | access to parameter x : Nullable<Int32> | semmle.label | access to parameter x : Nullable<Int32> |
|
||||
| NullCoalescing.cs:29:9:29:9 | access to parameter x : Nullable<Int32> | semmle.label | access to parameter x : Nullable<Int32> |
|
||||
| NullCoalescing.cs:30:14:30:14 | (...) ... | semmle.label | (...) ... |
|
||||
| NullCoalescing.cs:30:14:30:14 | (...) ... | semmle.label | (...) ... |
|
||||
subpaths
|
||||
testFailures
|
||||
#select
|
||||
| NullCoalescing.cs:8:14:8:14 | (...) ... | NullCoalescing.cs:5:17:5:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:8:14:8:14 | (...) ... | $@ | NullCoalescing.cs:5:17:5:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
| NullCoalescing.cs:8:14:8:14 | (...) ... | NullCoalescing.cs:5:17:5:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:8:14:8:14 | (...) ... | $@ | NullCoalescing.cs:5:17:5:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
| NullCoalescing.cs:16:14:16:14 | (...) ... | NullCoalescing.cs:13:17:13:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:16:14:16:14 | (...) ... | $@ | NullCoalescing.cs:13:17:13:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
| NullCoalescing.cs:16:14:16:14 | (...) ... | NullCoalescing.cs:13:17:13:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:16:14:16:14 | (...) ... | $@ | NullCoalescing.cs:13:17:13:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
| NullCoalescing.cs:23:14:23:14 | (...) ... | NullCoalescing.cs:21:17:21:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:23:14:23:14 | (...) ... | $@ | NullCoalescing.cs:21:17:21:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
| NullCoalescing.cs:23:14:23:14 | (...) ... | NullCoalescing.cs:21:17:21:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:23:14:23:14 | (...) ... | $@ | NullCoalescing.cs:21:17:21:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
| NullCoalescing.cs:30:14:30:14 | (...) ... | NullCoalescing.cs:28:17:28:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:30:14:30:14 | (...) ... | $@ | NullCoalescing.cs:28:17:28:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
| NullCoalescing.cs:30:14:30:14 | (...) ... | NullCoalescing.cs:28:17:28:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | NullCoalescing.cs:30:14:30:14 | (...) ... | $@ | NullCoalescing.cs:28:17:28:31 | call to method Source<Nullable<Int32>> : Nullable<Int32> | call to method Source<Nullable<Int32>> : Nullable<Int32> |
|
||||
@@ -0,0 +1,12 @@
|
||||
/**
|
||||
* @kind path-problem
|
||||
*/
|
||||
|
||||
import csharp
|
||||
import utils.test.InlineFlowTest
|
||||
import DefaultFlowTest
|
||||
import PathGraph
|
||||
|
||||
from PathNode source, PathNode sink
|
||||
where flowPath(source, sink)
|
||||
select sink, source, sink, "$@", source, source.toString()
|
||||
@@ -52,8 +52,7 @@
|
||||
| SignAnalysis.cs:80:13:80:17 | ... = ... | strictlyNegative |
|
||||
| SignAnalysis.cs:80:17:80:17 | access to parameter i | strictlyNegative |
|
||||
| SignAnalysis.cs:81:13:81:13 | access to local variable x | strictlyNegative |
|
||||
| SignAnalysis.cs:81:13:81:18 | ... + ... | strictlyNegative |
|
||||
| SignAnalysis.cs:81:13:81:18 | ... = ... | strictlyNegative |
|
||||
| SignAnalysis.cs:81:13:81:18 | ... += ... | strictlyNegative |
|
||||
| SignAnalysis.cs:81:18:81:18 | access to parameter i | strictlyNegative |
|
||||
| SignAnalysis.cs:82:38:82:38 | access to local variable x | strictlyNegative |
|
||||
| SignAnalysis.cs:87:21:87:21 | access to parameter i | strictlyNegative |
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
| DefUse.cs:89:13:89:14 | x3 | DefUse.cs:89:13:89:18 | Int32 x3 = ... | DefUse.cs:92:15:92:16 | access to local variable x3 |
|
||||
| DefUse.cs:89:13:89:14 | x3 | DefUse.cs:92:15:92:16 | access to local variable x3 | DefUse.cs:94:13:94:14 | access to local variable x3 |
|
||||
| DefUse.cs:90:13:90:14 | x4 | DefUse.cs:93:15:93:16 | access to local variable x4 | DefUse.cs:95:13:95:14 | access to local variable x4 |
|
||||
| DefUse.cs:97:13:97:14 | x5 | DefUse.cs:104:9:104:15 | ... = ... | DefUse.cs:105:13:105:14 | access to local variable x5 |
|
||||
| DefUse.cs:97:13:97:14 | x5 | DefUse.cs:104:9:104:15 | ... += ... | DefUse.cs:105:13:105:14 | access to local variable x5 |
|
||||
| DefUse.cs:118:45:118:45 | i | DefUse.cs:118:45:118:45 | i | DefUse.cs:118:65:118:65 | access to parameter i |
|
||||
| DefUse.cs:120:17:120:21 | Field | DefUse.cs:53:9:53:17 | ... = ... | DefUse.cs:54:13:54:17 | access to field Field |
|
||||
| DefUse.cs:122:16:122:21 | Field2 | DefUse.cs:63:9:63:18 | ... = ... | DefUse.cs:64:13:64:18 | access to field Field2 |
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
| DefUse.cs:97:13:97:18 | SSA def(x5) | DefUse.cs:97:13:97:18 | Int32 x5 = ... |
|
||||
| DefUse.cs:98:16:98:17 | SSA phi(x5) | DefUse.cs:98:16:98:17 | access to local variable x5 |
|
||||
| DefUse.cs:101:13:101:23 | SSA def(x5) | DefUse.cs:101:13:101:23 | ... = ... |
|
||||
| DefUse.cs:104:9:104:15 | SSA def(x5) | DefUse.cs:104:9:104:15 | ... = ... |
|
||||
| DefUse.cs:104:9:104:15 | SSA def(x5) | DefUse.cs:104:9:104:15 | ... += ... |
|
||||
| DefUse.cs:114:47:114:52 | SSA def(i) | DefUse.cs:114:47:114:52 | ... = ... |
|
||||
| DefUse.cs:116:47:116:51 | SSA def(i) | DefUse.cs:116:47:116:51 | ... = ... |
|
||||
| DefUse.cs:118:45:118:45 | SSA param(i) | DefUse.cs:118:45:118:45 | i |
|
||||
@@ -245,7 +245,7 @@
|
||||
| Test.cs:14:17:14:19 | SSA def(x) | Test.cs:14:17:14:19 | ++... |
|
||||
| Test.cs:15:13:15:17 | SSA def(z) | Test.cs:15:13:15:17 | ... = ... |
|
||||
| Test.cs:19:13:19:17 | SSA def(y) | Test.cs:19:13:19:17 | ... = ... |
|
||||
| Test.cs:20:13:20:18 | SSA def(y) | Test.cs:20:13:20:18 | ... = ... |
|
||||
| Test.cs:20:13:20:18 | SSA def(y) | Test.cs:20:13:20:18 | ... += ... |
|
||||
| Test.cs:21:13:21:22 | SSA def(this.field) | Test.cs:21:13:21:22 | ... = ... |
|
||||
| Test.cs:22:13:22:17 | SSA def(z) | Test.cs:22:13:22:17 | ... = ... |
|
||||
| Test.cs:24:9:24:15 | SSA phi(this.field) | Test.cs:24:9:24:15 | ...; |
|
||||
@@ -255,16 +255,16 @@
|
||||
| Test.cs:25:16:25:16 | SSA phi(param1) | Test.cs:25:16:25:16 | access to local variable x |
|
||||
| Test.cs:25:16:25:16 | SSA phi(y) | Test.cs:25:16:25:16 | access to local variable x |
|
||||
| Test.cs:27:17:27:24 | SSA def(param1) | Test.cs:27:17:27:24 | ...++ |
|
||||
| Test.cs:31:13:31:18 | SSA def(y) | Test.cs:31:13:31:18 | ... = ... |
|
||||
| Test.cs:31:13:31:18 | SSA def(y) | Test.cs:31:13:31:18 | ... -= ... |
|
||||
| Test.cs:33:9:33:19 | SSA phi(param1) | Test.cs:33:9:33:19 | ...; |
|
||||
| Test.cs:34:18:34:22 | SSA def(i) | Test.cs:34:18:34:22 | Int32 i = ... |
|
||||
| Test.cs:34:25:34:25 | SSA phi(i) | Test.cs:34:25:34:25 | access to local variable i |
|
||||
| Test.cs:34:25:34:25 | SSA phi(x) | Test.cs:34:25:34:25 | access to local variable i |
|
||||
| Test.cs:34:33:34:35 | SSA def(i) | Test.cs:34:33:34:35 | ...++ |
|
||||
| Test.cs:36:13:36:18 | SSA def(x) | Test.cs:36:13:36:18 | ... = ... |
|
||||
| Test.cs:36:13:36:18 | SSA def(x) | Test.cs:36:13:36:18 | ... += ... |
|
||||
| Test.cs:39:9:42:9 | SSA phi(param1) | Test.cs:39:9:42:9 | foreach (... ... in ...) ... |
|
||||
| Test.cs:39:22:39:22 | SSA def(w) | Test.cs:39:22:39:22 | Int32 w |
|
||||
| Test.cs:41:13:41:23 | SSA def(param1) | Test.cs:41:13:41:23 | ... = ... |
|
||||
| Test.cs:41:13:41:23 | SSA def(param1) | Test.cs:41:13:41:23 | ... += ... |
|
||||
| Test.cs:46:10:46:10 | SSA entry def(this.field) | Test.cs:46:10:46:10 | g |
|
||||
| Test.cs:46:16:46:18 | SSA param(in) | Test.cs:46:16:46:18 | in |
|
||||
| Test.cs:50:13:50:20 | SSA def(out) | Test.cs:50:13:50:20 | ... = ... |
|
||||
|
||||
@@ -47,7 +47,7 @@
|
||||
| DefUse.cs:90:13:90:14 | x4 | DefUse.cs:93:15:93:16 | SSA def(x4) | DefUse.cs:93:15:93:16 | access to local variable x4 |
|
||||
| DefUse.cs:97:13:97:14 | x5 | DefUse.cs:97:13:97:18 | SSA def(x5) | DefUse.cs:97:13:97:18 | Int32 x5 = ... |
|
||||
| DefUse.cs:97:13:97:14 | x5 | DefUse.cs:101:13:101:23 | SSA def(x5) | DefUse.cs:101:13:101:23 | ... = ... |
|
||||
| DefUse.cs:97:13:97:14 | x5 | DefUse.cs:104:9:104:15 | SSA def(x5) | DefUse.cs:104:9:104:15 | ... = ... |
|
||||
| DefUse.cs:97:13:97:14 | x5 | DefUse.cs:104:9:104:15 | SSA def(x5) | DefUse.cs:104:9:104:15 | ... += ... |
|
||||
| DefUse.cs:114:42:114:42 | i | DefUse.cs:114:47:114:52 | SSA def(i) | DefUse.cs:114:47:114:52 | ... = ... |
|
||||
| DefUse.cs:116:42:116:42 | i | DefUse.cs:116:47:116:51 | SSA def(i) | DefUse.cs:116:47:116:51 | ... = ... |
|
||||
| DefUse.cs:118:45:118:45 | i | DefUse.cs:118:68:118:72 | SSA def(i) | DefUse.cs:118:68:118:72 | ... = ... |
|
||||
@@ -117,17 +117,17 @@
|
||||
| Properties.cs:78:9:78:15 | this.xs | Properties.cs:81:9:81:22 | SSA def(this.xs) | Properties.cs:81:9:81:22 | ... = ... |
|
||||
| Properties.cs:78:9:78:15 | this.xs | Properties.cs:83:9:83:22 | SSA def(this.xs) | Properties.cs:83:9:83:22 | ... = ... |
|
||||
| Test.cs:5:15:5:20 | param1 | Test.cs:27:17:27:24 | SSA def(param1) | Test.cs:27:17:27:24 | ...++ |
|
||||
| Test.cs:5:15:5:20 | param1 | Test.cs:41:13:41:23 | SSA def(param1) | Test.cs:41:13:41:23 | ... = ... |
|
||||
| Test.cs:5:15:5:20 | param1 | Test.cs:41:13:41:23 | SSA def(param1) | Test.cs:41:13:41:23 | ... += ... |
|
||||
| Test.cs:7:9:7:13 | this.field | Test.cs:7:9:7:17 | SSA def(this.field) | Test.cs:7:9:7:17 | ... = ... |
|
||||
| Test.cs:7:9:7:13 | this.field | Test.cs:21:13:21:22 | SSA def(this.field) | Test.cs:21:13:21:22 | ... = ... |
|
||||
| Test.cs:8:13:8:13 | x | Test.cs:8:13:8:17 | SSA def(x) | Test.cs:8:13:8:17 | Int32 x = ... |
|
||||
| Test.cs:8:13:8:13 | x | Test.cs:13:13:13:15 | SSA def(x) | Test.cs:13:13:13:15 | ...++ |
|
||||
| Test.cs:8:13:8:13 | x | Test.cs:14:17:14:19 | SSA def(x) | Test.cs:14:17:14:19 | ++... |
|
||||
| Test.cs:8:13:8:13 | x | Test.cs:36:13:36:18 | SSA def(x) | Test.cs:36:13:36:18 | ... = ... |
|
||||
| Test.cs:8:13:8:13 | x | Test.cs:36:13:36:18 | SSA def(x) | Test.cs:36:13:36:18 | ... += ... |
|
||||
| Test.cs:9:13:9:13 | y | Test.cs:14:13:14:19 | SSA def(y) | Test.cs:14:13:14:19 | ... = ... |
|
||||
| Test.cs:9:13:9:13 | y | Test.cs:19:13:19:17 | SSA def(y) | Test.cs:19:13:19:17 | ... = ... |
|
||||
| Test.cs:9:13:9:13 | y | Test.cs:20:13:20:18 | SSA def(y) | Test.cs:20:13:20:18 | ... = ... |
|
||||
| Test.cs:9:13:9:13 | y | Test.cs:31:13:31:18 | SSA def(y) | Test.cs:31:13:31:18 | ... = ... |
|
||||
| Test.cs:9:13:9:13 | y | Test.cs:20:13:20:18 | SSA def(y) | Test.cs:20:13:20:18 | ... += ... |
|
||||
| Test.cs:9:13:9:13 | y | Test.cs:31:13:31:18 | SSA def(y) | Test.cs:31:13:31:18 | ... -= ... |
|
||||
| Test.cs:10:13:10:13 | z | Test.cs:15:13:15:17 | SSA def(z) | Test.cs:15:13:15:17 | ... = ... |
|
||||
| Test.cs:10:13:10:13 | z | Test.cs:22:13:22:17 | SSA def(z) | Test.cs:22:13:22:17 | ... = ... |
|
||||
| Test.cs:34:18:34:18 | i | Test.cs:34:18:34:22 | SSA def(i) | Test.cs:34:18:34:22 | Int32 i = ... |
|
||||
|
||||
@@ -20,12 +20,12 @@ mayBenefitFromCallContext
|
||||
| ViableCallable.cs:245:9:245:15 | call to method M<Int32> |
|
||||
| ViableCallable.cs:294:9:294:15 | call to method M<Int32> |
|
||||
| ViableCallable.cs:297:9:297:20 | call to method M<Int32> |
|
||||
| ViableCallable.cs:425:9:425:18 | call to method M<Int32> |
|
||||
| ViableCallable.cs:469:9:469:30 | call to method M2<T> |
|
||||
| ViableCallable.cs:475:9:475:30 | call to method M2<T> |
|
||||
| ViableCallable.cs:577:18:577:22 | call to operator / |
|
||||
| ViableCallable.cs:580:26:580:30 | call to operator checked / |
|
||||
| ViableCallable.cs:586:9:586:15 | call to method M12 |
|
||||
| ViableCallable.cs:619:9:619:13 | call to method M |
|
||||
| ViableCallable.cs:683:9:683:16 | call to method M |
|
||||
| ViableCallable.cs:687:9:687:16 | call to method M |
|
||||
| ViableCallable.cs:426:9:426:18 | call to method M<Int32> |
|
||||
| ViableCallable.cs:470:9:470:30 | call to method M2<T> |
|
||||
| ViableCallable.cs:476:9:476:30 | call to method M2<T> |
|
||||
| ViableCallable.cs:578:18:578:22 | call to operator / |
|
||||
| ViableCallable.cs:581:26:581:30 | call to operator checked / |
|
||||
| ViableCallable.cs:587:9:587:15 | call to method M12 |
|
||||
| ViableCallable.cs:620:9:620:13 | call to method M |
|
||||
| ViableCallable.cs:684:9:684:16 | call to method M |
|
||||
| ViableCallable.cs:688:9:688:16 | call to method M |
|
||||
|
||||
@@ -219,62 +219,62 @@
|
||||
| ViableCallable.cs:308:17:308:19 | Run | ViableCallable.cs:286:24:286:28 | M`1 |
|
||||
| ViableCallable.cs:308:17:308:19 | Run | ViableCallable.cs:303:26:303:30 | M`1 |
|
||||
| ViableCallable.cs:361:17:361:19 | Run | ViableCallable.cs:359:10:359:10 | M |
|
||||
| ViableCallable.cs:361:17:361:19 | Run | ViableCallable.cs:375:5:375:7 | C11 |
|
||||
| ViableCallable.cs:389:10:389:16 | Run`1 | ViableCallable.cs:385:33:385:33 | M |
|
||||
| ViableCallable.cs:395:10:395:17 | Run2`1 | ViableCallable.cs:389:10:389:16 | Run<T2> |
|
||||
| ViableCallable.cs:400:10:400:13 | Run3 | ViableCallable.cs:395:10:395:17 | Run2<C13> |
|
||||
| ViableCallable.cs:422:10:422:12 | Run | ViableCallable.cs:213:21:213:27 | Mock<A4> |
|
||||
| ViableCallable.cs:422:10:422:12 | Run | ViableCallable.cs:410:36:410:40 | M`1 |
|
||||
| ViableCallable.cs:422:10:422:12 | Run | ViableCallable.cs:416:53:416:57 | M`1 |
|
||||
| ViableCallable.cs:422:10:422:12 | Run | ViableCallable.cs:418:42:418:46 | M`1 |
|
||||
| ViableCallable.cs:444:22:444:26 | M2`1 | ViableCallable.cs:469:14:469:29 | (...) => ... |
|
||||
| ViableCallable.cs:444:22:444:26 | M2`1 | ViableCallable.cs:475:14:475:29 | (...) => ... |
|
||||
| ViableCallable.cs:449:10:449:11 | M1 | ViableCallable.cs:443:23:443:24 | M1 |
|
||||
| ViableCallable.cs:449:10:449:11 | M1 | ViableCallable.cs:458:23:458:27 | M2`1 |
|
||||
| ViableCallable.cs:458:23:458:27 | M2`1 | ViableCallable.cs:455:17:455:23 | (...) => ... |
|
||||
| ViableCallable.cs:458:23:458:27 | M2`1 | ViableCallable.cs:463:14:463:20 | (...) => ... |
|
||||
| ViableCallable.cs:458:23:458:27 | M2`1 | ViableCallable.cs:469:14:469:29 | (...) => ... |
|
||||
| ViableCallable.cs:458:23:458:27 | M2`1 | ViableCallable.cs:475:14:475:29 | (...) => ... |
|
||||
| ViableCallable.cs:460:10:460:14 | M3`1 | ViableCallable.cs:458:23:458:27 | M2`1 |
|
||||
| ViableCallable.cs:466:10:466:14 | M4`1 | ViableCallable.cs:444:22:444:26 | M2`1 |
|
||||
| ViableCallable.cs:466:10:466:14 | M4`1 | ViableCallable.cs:458:23:458:27 | M2`1 |
|
||||
| ViableCallable.cs:472:10:472:14 | M5`1 | ViableCallable.cs:444:22:444:26 | M2`1 |
|
||||
| ViableCallable.cs:472:10:472:14 | M5`1 | ViableCallable.cs:458:23:458:27 | M2`1 |
|
||||
| ViableCallable.cs:489:10:489:12 | Run | ViableCallable.cs:482:10:482:11 | M2 |
|
||||
| ViableCallable.cs:489:10:489:12 | Run | ViableCallable.cs:487:17:487:18 | M1 |
|
||||
| ViableCallable.cs:506:10:506:12 | Run | ViableCallable.cs:501:32:501:32 | + |
|
||||
| ViableCallable.cs:506:10:506:12 | Run | ViableCallable.cs:502:40:502:40 | checked + |
|
||||
| ViableCallable.cs:506:10:506:12 | Run | ViableCallable.cs:503:28:503:35 | explicit conversion |
|
||||
| ViableCallable.cs:506:10:506:12 | Run | ViableCallable.cs:504:28:504:35 | checked explicit conversion |
|
||||
| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:528:39:528:39 | checked - |
|
||||
| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:530:31:530:31 | * |
|
||||
| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:531:39:531:39 | checked * |
|
||||
| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:533:31:533:31 | / |
|
||||
| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:534:39:534:39 | checked / |
|
||||
| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:538:18:538:20 | M12 |
|
||||
| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:540:18:540:20 | M13 |
|
||||
| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:545:32:545:32 | + |
|
||||
| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:546:40:546:40 | checked + |
|
||||
| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:548:32:548:32 | - |
|
||||
| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:550:32:550:32 | / |
|
||||
| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:551:40:551:40 | checked / |
|
||||
| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:553:17:553:19 | M11 |
|
||||
| ViableCallable.cs:556:10:556:15 | Run`1 | ViableCallable.cs:554:17:554:19 | M12 |
|
||||
| ViableCallable.cs:610:17:610:23 | Run1`1 | ViableCallable.cs:602:21:602:21 | M |
|
||||
| ViableCallable.cs:616:17:616:23 | Run2`1 | ViableCallable.cs:602:21:602:21 | M |
|
||||
| ViableCallable.cs:616:17:616:23 | Run2`1 | ViableCallable.cs:607:21:607:21 | M |
|
||||
| ViableCallable.cs:657:17:657:20 | Run1 | ViableCallable.cs:635:21:635:21 | M |
|
||||
| ViableCallable.cs:657:17:657:20 | Run1 | ViableCallable.cs:637:21:637:21 | M |
|
||||
| ViableCallable.cs:668:17:668:20 | Run2 | ViableCallable.cs:651:21:651:21 | M |
|
||||
| ViableCallable.cs:668:17:668:20 | Run2 | ViableCallable.cs:654:21:654:21 | M |
|
||||
| ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:635:21:635:21 | M |
|
||||
| ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:637:21:637:21 | M |
|
||||
| ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:646:21:646:21 | M |
|
||||
| ViableCallable.cs:679:17:679:20 | Run3 | ViableCallable.cs:648:21:648:21 | M |
|
||||
| ViableCallable.cs:711:17:711:20 | Run1 | ViableCallable.cs:704:24:704:31 | Partial1 |
|
||||
| ViableCallable.cs:711:17:711:20 | Run1 | ViableCallable.cs:705:42:705:44 | get_Property |
|
||||
| ViableCallable.cs:711:17:711:20 | Run1 | ViableCallable.cs:705:63:705:65 | set_Property |
|
||||
| ViableCallable.cs:711:17:711:20 | Run1 | ViableCallable.cs:707:49:707:51 | get_Item |
|
||||
| ViableCallable.cs:711:17:711:20 | Run1 | ViableCallable.cs:707:70:707:72 | set_Item |
|
||||
| ViableCallable.cs:711:17:711:20 | Run1 | ViableCallable.cs:708:51:708:53 | add_Event |
|
||||
| ViableCallable.cs:711:17:711:20 | Run1 | ViableCallable.cs:708:59:708:64 | remove_Event |
|
||||
| ViableCallable.cs:361:17:361:19 | Run | ViableCallable.cs:376:5:376:7 | C11 |
|
||||
| ViableCallable.cs:390:10:390:16 | Run`1 | ViableCallable.cs:386:33:386:33 | M |
|
||||
| ViableCallable.cs:396:10:396:17 | Run2`1 | ViableCallable.cs:390:10:390:16 | Run<T2> |
|
||||
| ViableCallable.cs:401:10:401:13 | Run3 | ViableCallable.cs:396:10:396:17 | Run2<C13> |
|
||||
| ViableCallable.cs:423:10:423:12 | Run | ViableCallable.cs:213:21:213:27 | Mock<A4> |
|
||||
| ViableCallable.cs:423:10:423:12 | Run | ViableCallable.cs:411:36:411:40 | M`1 |
|
||||
| ViableCallable.cs:423:10:423:12 | Run | ViableCallable.cs:417:53:417:57 | M`1 |
|
||||
| ViableCallable.cs:423:10:423:12 | Run | ViableCallable.cs:419:42:419:46 | M`1 |
|
||||
| ViableCallable.cs:445:22:445:26 | M2`1 | ViableCallable.cs:470:14:470:29 | (...) => ... |
|
||||
| ViableCallable.cs:445:22:445:26 | M2`1 | ViableCallable.cs:476:14:476:29 | (...) => ... |
|
||||
| ViableCallable.cs:450:10:450:11 | M1 | ViableCallable.cs:444:23:444:24 | M1 |
|
||||
| ViableCallable.cs:450:10:450:11 | M1 | ViableCallable.cs:459:23:459:27 | M2`1 |
|
||||
| ViableCallable.cs:459:23:459:27 | M2`1 | ViableCallable.cs:456:17:456:23 | (...) => ... |
|
||||
| ViableCallable.cs:459:23:459:27 | M2`1 | ViableCallable.cs:464:14:464:20 | (...) => ... |
|
||||
| ViableCallable.cs:459:23:459:27 | M2`1 | ViableCallable.cs:470:14:470:29 | (...) => ... |
|
||||
| ViableCallable.cs:459:23:459:27 | M2`1 | ViableCallable.cs:476:14:476:29 | (...) => ... |
|
||||
| ViableCallable.cs:461:10:461:14 | M3`1 | ViableCallable.cs:459:23:459:27 | M2`1 |
|
||||
| ViableCallable.cs:467:10:467:14 | M4`1 | ViableCallable.cs:445:22:445:26 | M2`1 |
|
||||
| ViableCallable.cs:467:10:467:14 | M4`1 | ViableCallable.cs:459:23:459:27 | M2`1 |
|
||||
| ViableCallable.cs:473:10:473:14 | M5`1 | ViableCallable.cs:445:22:445:26 | M2`1 |
|
||||
| ViableCallable.cs:473:10:473:14 | M5`1 | ViableCallable.cs:459:23:459:27 | M2`1 |
|
||||
| ViableCallable.cs:490:10:490:12 | Run | ViableCallable.cs:483:10:483:11 | M2 |
|
||||
| ViableCallable.cs:490:10:490:12 | Run | ViableCallable.cs:488:17:488:18 | M1 |
|
||||
| ViableCallable.cs:507:10:507:12 | Run | ViableCallable.cs:502:32:502:32 | + |
|
||||
| ViableCallable.cs:507:10:507:12 | Run | ViableCallable.cs:503:40:503:40 | checked + |
|
||||
| ViableCallable.cs:507:10:507:12 | Run | ViableCallable.cs:504:28:504:35 | explicit conversion |
|
||||
| ViableCallable.cs:507:10:507:12 | Run | ViableCallable.cs:505:28:505:35 | checked explicit conversion |
|
||||
| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:529:39:529:39 | checked - |
|
||||
| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:531:31:531:31 | * |
|
||||
| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:532:39:532:39 | checked * |
|
||||
| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:534:31:534:31 | / |
|
||||
| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:535:39:535:39 | checked / |
|
||||
| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:539:18:539:20 | M12 |
|
||||
| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:541:18:541:20 | M13 |
|
||||
| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:546:32:546:32 | + |
|
||||
| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:547:40:547:40 | checked + |
|
||||
| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:549:32:549:32 | - |
|
||||
| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:551:32:551:32 | / |
|
||||
| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:552:40:552:40 | checked / |
|
||||
| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:554:17:554:19 | M11 |
|
||||
| ViableCallable.cs:557:10:557:15 | Run`1 | ViableCallable.cs:555:17:555:19 | M12 |
|
||||
| ViableCallable.cs:611:17:611:23 | Run1`1 | ViableCallable.cs:603:21:603:21 | M |
|
||||
| ViableCallable.cs:617:17:617:23 | Run2`1 | ViableCallable.cs:603:21:603:21 | M |
|
||||
| ViableCallable.cs:617:17:617:23 | Run2`1 | ViableCallable.cs:608:21:608:21 | M |
|
||||
| ViableCallable.cs:658:17:658:20 | Run1 | ViableCallable.cs:636:21:636:21 | M |
|
||||
| ViableCallable.cs:658:17:658:20 | Run1 | ViableCallable.cs:638:21:638:21 | M |
|
||||
| ViableCallable.cs:669:17:669:20 | Run2 | ViableCallable.cs:652:21:652:21 | M |
|
||||
| ViableCallable.cs:669:17:669:20 | Run2 | ViableCallable.cs:655:21:655:21 | M |
|
||||
| ViableCallable.cs:680:17:680:20 | Run3 | ViableCallable.cs:636:21:636:21 | M |
|
||||
| ViableCallable.cs:680:17:680:20 | Run3 | ViableCallable.cs:638:21:638:21 | M |
|
||||
| ViableCallable.cs:680:17:680:20 | Run3 | ViableCallable.cs:647:21:647:21 | M |
|
||||
| ViableCallable.cs:680:17:680:20 | Run3 | ViableCallable.cs:649:21:649:21 | M |
|
||||
| ViableCallable.cs:712:17:712:20 | Run1 | ViableCallable.cs:705:24:705:31 | Partial1 |
|
||||
| ViableCallable.cs:712:17:712:20 | Run1 | ViableCallable.cs:706:42:706:44 | get_Property |
|
||||
| ViableCallable.cs:712:17:712:20 | Run1 | ViableCallable.cs:706:63:706:65 | set_Property |
|
||||
| ViableCallable.cs:712:17:712:20 | Run1 | ViableCallable.cs:708:49:708:51 | get_Item |
|
||||
| ViableCallable.cs:712:17:712:20 | Run1 | ViableCallable.cs:708:70:708:72 | set_Item |
|
||||
| ViableCallable.cs:712:17:712:20 | Run1 | ViableCallable.cs:709:51:709:53 | add_Event |
|
||||
| ViableCallable.cs:712:17:712:20 | Run1 | ViableCallable.cs:709:59:709:64 | remove_Event |
|
||||
|
||||
@@ -467,61 +467,61 @@
|
||||
| ViableCallable.cs:311:9:311:15 | call to method M<Int32> | C7`1.M<T3>(T1, T3) |
|
||||
| ViableCallable.cs:314:9:314:20 | call to method M<Int32> | C7`1.M<T3>(T1, T3) |
|
||||
| ViableCallable.cs:317:9:317:20 | call to method M<Int32> | C6<T1,System.Byte>.M<T3>(T1, T3) |
|
||||
| ViableCallable.cs:367:9:367:14 | dynamic call to method M | C11.M(dynamic) |
|
||||
| ViableCallable.cs:369:9:369:18 | dynamic object creation of type C11 | C11.C11(C11) |
|
||||
| ViableCallable.cs:392:9:392:13 | call to method M | C12+C13.M() |
|
||||
| ViableCallable.cs:397:9:397:14 | call to method Run<T2> | C12.Run<T2>(T2) |
|
||||
| ViableCallable.cs:402:9:402:23 | call to method Run2<C13> | C12.Run2<C13>(C13) |
|
||||
| ViableCallable.cs:425:9:425:18 | call to method M<Int32> | C15+A1.M<T1>() |
|
||||
| ViableCallable.cs:425:9:425:18 | call to method M<Int32> | C15+A4.M<T1>() |
|
||||
| ViableCallable.cs:425:9:425:18 | call to method M<Int32> | C15+A5.M<T1>() |
|
||||
| ViableCallable.cs:429:9:429:19 | call to method M<Boolean> | C15+A1.M<T1>() |
|
||||
| ViableCallable.cs:433:9:433:21 | call to method M<String> | C15+A4.M<T1>() |
|
||||
| ViableCallable.cs:435:13:435:37 | call to method Mock<A4> | ViableCallable.Mock<A4>() |
|
||||
| ViableCallable.cs:437:9:437:21 | call to method M<String> | C15+A4.M<T1>() |
|
||||
| ViableCallable.cs:437:9:437:21 | call to method M<String> | C15+A5.M<T1>() |
|
||||
| ViableCallable.cs:452:9:452:19 | call to method M1 | C16<System.String,System.Int32>.M1(string) |
|
||||
| ViableCallable.cs:455:9:455:24 | call to method M2<Int32> | C17.M2<T>(Func<T>) |
|
||||
| ViableCallable.cs:463:9:463:21 | call to method M2<String> | C17.M2<T>(Func<T>) |
|
||||
| ViableCallable.cs:469:9:469:30 | call to method M2<T> | C16<T,System.Int32>.M2<T>(Func<T>) |
|
||||
| ViableCallable.cs:469:9:469:30 | call to method M2<T> | C17.M2<T>(Func<T>) |
|
||||
| ViableCallable.cs:475:9:475:30 | call to method M2<T> | C16<T,System.Int32>.M2<T>(Func<T>) |
|
||||
| ViableCallable.cs:475:9:475:30 | call to method M2<T> | C17.M2<T>(Func<T>) |
|
||||
| ViableCallable.cs:492:9:492:14 | call to method M1 | C18.M1() |
|
||||
| ViableCallable.cs:495:9:495:14 | call to method M2 | I2.M2() |
|
||||
| ViableCallable.cs:509:18:509:22 | call to operator + | C19.+(C19, C19) |
|
||||
| ViableCallable.cs:512:26:512:30 | call to operator checked + | C19.checked +(C19, C19) |
|
||||
| ViableCallable.cs:515:18:515:23 | call to operator explicit conversion | C19.explicit conversion(C19) |
|
||||
| ViableCallable.cs:518:26:518:31 | call to operator checked explicit conversion | C19.checked explicit conversion(C19) |
|
||||
| ViableCallable.cs:559:18:559:22 | call to operator + | C20.+(C20, C20) |
|
||||
| ViableCallable.cs:562:26:562:30 | call to operator checked + | C20.checked +(C20, C20) |
|
||||
| ViableCallable.cs:565:18:565:22 | call to operator - | C20.-(C20, C20) |
|
||||
| ViableCallable.cs:568:26:568:30 | call to operator checked - | I3<T>.checked -(T, T) |
|
||||
| ViableCallable.cs:571:18:571:22 | call to operator * | I3<T>.*(T, T) |
|
||||
| ViableCallable.cs:574:26:574:30 | call to operator checked * | I3<T>.checked *(T, T) |
|
||||
| ViableCallable.cs:577:18:577:22 | call to operator / | C20./(C20, C20) |
|
||||
| ViableCallable.cs:577:18:577:22 | call to operator / | I3<T>./(T, T) |
|
||||
| ViableCallable.cs:580:26:580:30 | call to operator checked / | C20.checked /(C20, C20) |
|
||||
| ViableCallable.cs:580:26:580:30 | call to operator checked / | I3<T>.checked /(T, T) |
|
||||
| ViableCallable.cs:583:9:583:15 | call to method M11 | C20.M11() |
|
||||
| ViableCallable.cs:586:9:586:15 | call to method M12 | C20.M12() |
|
||||
| ViableCallable.cs:586:9:586:15 | call to method M12 | I3<T>.M12() |
|
||||
| ViableCallable.cs:589:9:589:15 | call to method M13 | I3<T>.M13() |
|
||||
| ViableCallable.cs:613:9:613:13 | call to method M | C21+A1.M() |
|
||||
| ViableCallable.cs:619:9:619:13 | call to method M | C21+A1.M() |
|
||||
| ViableCallable.cs:619:9:619:13 | call to method M | C21+A2.M() |
|
||||
| ViableCallable.cs:661:9:661:16 | call to method M | C22+TestOverloadResolution1<System.Int32>.M(Int32[]) |
|
||||
| ViableCallable.cs:665:9:665:16 | call to method M | C22+TestOverloadResolution1<System.Int32>.M(List<int>) |
|
||||
| ViableCallable.cs:672:9:672:16 | call to method M | C22+TestOverloadResolution2<System.Int32>.M(ReadOnlySpan<int>) |
|
||||
| ViableCallable.cs:676:9:676:16 | call to method M | C22+TestOverloadResolution2<System.Int32>.M(IEnumerable<int>) |
|
||||
| ViableCallable.cs:683:9:683:16 | call to method M | C22+TestOverloadResolution1<System.Int32>.M(Int32[]) |
|
||||
| ViableCallable.cs:683:9:683:16 | call to method M | C22+TestOverloadResolution2<System.Int32>.M(Int32[]) |
|
||||
| ViableCallable.cs:687:9:687:16 | call to method M | C22+TestOverloadResolution1<System.Int32>.M(List<int>) |
|
||||
| ViableCallable.cs:687:9:687:16 | call to method M | C22+TestOverloadResolution2<System.Int32>.M(List<int>) |
|
||||
| ViableCallable.cs:716:9:716:18 | access to property Property | C23+Partial1.set_Property(object) |
|
||||
| ViableCallable.cs:719:13:719:22 | access to property Property | C23+Partial1.get_Property() |
|
||||
| ViableCallable.cs:722:9:722:12 | access to indexer | C23+Partial1.set_Item(int, object) |
|
||||
| ViableCallable.cs:725:13:725:16 | access to indexer | C23+Partial1.get_Item(int) |
|
||||
| ViableCallable.cs:728:9:728:15 | access to event Event | C23+Partial1.add_Event(EventHandler) |
|
||||
| ViableCallable.cs:731:9:731:15 | access to event Event | C23+Partial1.remove_Event(EventHandler) |
|
||||
| ViableCallable.cs:734:18:734:43 | object creation of type Partial1 | C23+Partial1.Partial1(object) |
|
||||
| ViableCallable.cs:368:9:368:14 | dynamic call to method M | C11.M(dynamic) |
|
||||
| ViableCallable.cs:370:9:370:18 | dynamic object creation of type C11 | C11.C11(C11) |
|
||||
| ViableCallable.cs:393:9:393:13 | call to method M | C12+C13.M() |
|
||||
| ViableCallable.cs:398:9:398:14 | call to method Run<T2> | C12.Run<T2>(T2) |
|
||||
| ViableCallable.cs:403:9:403:23 | call to method Run2<C13> | C12.Run2<C13>(C13) |
|
||||
| ViableCallable.cs:426:9:426:18 | call to method M<Int32> | C15+A1.M<T1>() |
|
||||
| ViableCallable.cs:426:9:426:18 | call to method M<Int32> | C15+A4.M<T1>() |
|
||||
| ViableCallable.cs:426:9:426:18 | call to method M<Int32> | C15+A5.M<T1>() |
|
||||
| ViableCallable.cs:430:9:430:19 | call to method M<Boolean> | C15+A1.M<T1>() |
|
||||
| ViableCallable.cs:434:9:434:21 | call to method M<String> | C15+A4.M<T1>() |
|
||||
| ViableCallable.cs:436:13:436:37 | call to method Mock<A4> | ViableCallable.Mock<A4>() |
|
||||
| ViableCallable.cs:438:9:438:21 | call to method M<String> | C15+A4.M<T1>() |
|
||||
| ViableCallable.cs:438:9:438:21 | call to method M<String> | C15+A5.M<T1>() |
|
||||
| ViableCallable.cs:453:9:453:19 | call to method M1 | C16<System.String,System.Int32>.M1(string) |
|
||||
| ViableCallable.cs:456:9:456:24 | call to method M2<Int32> | C17.M2<T>(Func<T>) |
|
||||
| ViableCallable.cs:464:9:464:21 | call to method M2<String> | C17.M2<T>(Func<T>) |
|
||||
| ViableCallable.cs:470:9:470:30 | call to method M2<T> | C16<T,System.Int32>.M2<T>(Func<T>) |
|
||||
| ViableCallable.cs:470:9:470:30 | call to method M2<T> | C17.M2<T>(Func<T>) |
|
||||
| ViableCallable.cs:476:9:476:30 | call to method M2<T> | C16<T,System.Int32>.M2<T>(Func<T>) |
|
||||
| ViableCallable.cs:476:9:476:30 | call to method M2<T> | C17.M2<T>(Func<T>) |
|
||||
| ViableCallable.cs:493:9:493:14 | call to method M1 | C18.M1() |
|
||||
| ViableCallable.cs:496:9:496:14 | call to method M2 | I2.M2() |
|
||||
| ViableCallable.cs:510:18:510:22 | call to operator + | C19.+(C19, C19) |
|
||||
| ViableCallable.cs:513:26:513:30 | call to operator checked + | C19.checked +(C19, C19) |
|
||||
| ViableCallable.cs:516:18:516:23 | call to operator explicit conversion | C19.explicit conversion(C19) |
|
||||
| ViableCallable.cs:519:26:519:31 | call to operator checked explicit conversion | C19.checked explicit conversion(C19) |
|
||||
| ViableCallable.cs:560:18:560:22 | call to operator + | C20.+(C20, C20) |
|
||||
| ViableCallable.cs:563:26:563:30 | call to operator checked + | C20.checked +(C20, C20) |
|
||||
| ViableCallable.cs:566:18:566:22 | call to operator - | C20.-(C20, C20) |
|
||||
| ViableCallable.cs:569:26:569:30 | call to operator checked - | I3<T>.checked -(T, T) |
|
||||
| ViableCallable.cs:572:18:572:22 | call to operator * | I3<T>.*(T, T) |
|
||||
| ViableCallable.cs:575:26:575:30 | call to operator checked * | I3<T>.checked *(T, T) |
|
||||
| ViableCallable.cs:578:18:578:22 | call to operator / | C20./(C20, C20) |
|
||||
| ViableCallable.cs:578:18:578:22 | call to operator / | I3<T>./(T, T) |
|
||||
| ViableCallable.cs:581:26:581:30 | call to operator checked / | C20.checked /(C20, C20) |
|
||||
| ViableCallable.cs:581:26:581:30 | call to operator checked / | I3<T>.checked /(T, T) |
|
||||
| ViableCallable.cs:584:9:584:15 | call to method M11 | C20.M11() |
|
||||
| ViableCallable.cs:587:9:587:15 | call to method M12 | C20.M12() |
|
||||
| ViableCallable.cs:587:9:587:15 | call to method M12 | I3<T>.M12() |
|
||||
| ViableCallable.cs:590:9:590:15 | call to method M13 | I3<T>.M13() |
|
||||
| ViableCallable.cs:614:9:614:13 | call to method M | C21+A1.M() |
|
||||
| ViableCallable.cs:620:9:620:13 | call to method M | C21+A1.M() |
|
||||
| ViableCallable.cs:620:9:620:13 | call to method M | C21+A2.M() |
|
||||
| ViableCallable.cs:662:9:662:16 | call to method M | C22+TestOverloadResolution1<System.Int32>.M(Int32[]) |
|
||||
| ViableCallable.cs:666:9:666:16 | call to method M | C22+TestOverloadResolution1<System.Int32>.M(List<int>) |
|
||||
| ViableCallable.cs:673:9:673:16 | call to method M | C22+TestOverloadResolution2<System.Int32>.M(ReadOnlySpan<int>) |
|
||||
| ViableCallable.cs:677:9:677:16 | call to method M | C22+TestOverloadResolution2<System.Int32>.M(IEnumerable<int>) |
|
||||
| ViableCallable.cs:684:9:684:16 | call to method M | C22+TestOverloadResolution1<System.Int32>.M(Int32[]) |
|
||||
| ViableCallable.cs:684:9:684:16 | call to method M | C22+TestOverloadResolution2<System.Int32>.M(Int32[]) |
|
||||
| ViableCallable.cs:688:9:688:16 | call to method M | C22+TestOverloadResolution1<System.Int32>.M(List<int>) |
|
||||
| ViableCallable.cs:688:9:688:16 | call to method M | C22+TestOverloadResolution2<System.Int32>.M(List<int>) |
|
||||
| ViableCallable.cs:717:9:717:18 | access to property Property | C23+Partial1.set_Property(object) |
|
||||
| ViableCallable.cs:720:13:720:22 | access to property Property | C23+Partial1.get_Property() |
|
||||
| ViableCallable.cs:723:9:723:12 | access to indexer | C23+Partial1.set_Item(int, object) |
|
||||
| ViableCallable.cs:726:13:726:16 | access to indexer | C23+Partial1.get_Item(int) |
|
||||
| ViableCallable.cs:729:9:729:15 | access to event Event | C23+Partial1.add_Event(EventHandler) |
|
||||
| ViableCallable.cs:732:9:732:15 | access to event Event | C23+Partial1.remove_Event(EventHandler) |
|
||||
| ViableCallable.cs:735:18:735:43 | object creation of type Partial1 | C23+Partial1.Partial1(object) |
|
||||
|
||||
@@ -362,6 +362,7 @@ public class C11
|
||||
{
|
||||
dynamic d = this;
|
||||
int x = 0;
|
||||
// Viable callables: int.+
|
||||
x += 42;
|
||||
// Viable callables: C11.M()
|
||||
d.M(x);
|
||||
|
||||
@@ -271,35 +271,36 @@
|
||||
| ViableCallable.cs:311:9:311:15 | call to method M<Int32> | M`1 | C7`1 |
|
||||
| ViableCallable.cs:314:9:314:20 | call to method M<Int32> | M`1 | C7`1 |
|
||||
| ViableCallable.cs:317:9:317:20 | call to method M<Int32> | M`1 | C6`2 |
|
||||
| ViableCallable.cs:367:9:367:14 | dynamic call to method M | M | C11 |
|
||||
| ViableCallable.cs:369:9:369:18 | dynamic object creation of type C11 | C11 | C11 |
|
||||
| ViableCallable.cs:392:9:392:13 | call to method M | M | C13 |
|
||||
| ViableCallable.cs:425:9:425:18 | call to method M<Int32> | M`1 | A1 |
|
||||
| ViableCallable.cs:425:9:425:18 | call to method M<Int32> | M`1 | A4 |
|
||||
| ViableCallable.cs:425:9:425:18 | call to method M<Int32> | M`1 | A5 |
|
||||
| ViableCallable.cs:427:13:427:20 | object creation of type A3 | A3 | A3 |
|
||||
| ViableCallable.cs:429:9:429:19 | call to method M<Boolean> | M`1 | A1 |
|
||||
| ViableCallable.cs:431:13:431:20 | object creation of type A4 | A4 | A4 |
|
||||
| ViableCallable.cs:433:9:433:21 | call to method M<String> | M`1 | A4 |
|
||||
| ViableCallable.cs:437:9:437:21 | call to method M<String> | M`1 | A4 |
|
||||
| ViableCallable.cs:437:9:437:21 | call to method M<String> | M`1 | A5 |
|
||||
| ViableCallable.cs:492:9:492:14 | call to method M1 | M1 | C18 |
|
||||
| ViableCallable.cs:495:9:495:14 | call to method M2 | M2 | I2 |
|
||||
| ViableCallable.cs:509:18:509:22 | call to operator + | + | C19 |
|
||||
| ViableCallable.cs:512:26:512:30 | call to operator checked + | checked + | C19 |
|
||||
| ViableCallable.cs:515:18:515:23 | call to operator explicit conversion | explicit conversion | C19 |
|
||||
| ViableCallable.cs:518:26:518:31 | call to operator checked explicit conversion | checked explicit conversion | C19 |
|
||||
| ViableCallable.cs:559:18:559:22 | call to operator + | + | C20 |
|
||||
| ViableCallable.cs:562:26:562:30 | call to operator checked + | checked + | C20 |
|
||||
| ViableCallable.cs:565:18:565:22 | call to operator - | - | C20 |
|
||||
| ViableCallable.cs:568:26:568:30 | call to operator checked - | checked - | I3`1 |
|
||||
| ViableCallable.cs:571:18:571:22 | call to operator * | * | I3`1 |
|
||||
| ViableCallable.cs:574:26:574:30 | call to operator checked * | checked * | I3`1 |
|
||||
| ViableCallable.cs:577:18:577:22 | call to operator / | / | C20 |
|
||||
| ViableCallable.cs:577:18:577:22 | call to operator / | / | I3`1 |
|
||||
| ViableCallable.cs:580:26:580:30 | call to operator checked / | checked / | C20 |
|
||||
| ViableCallable.cs:580:26:580:30 | call to operator checked / | checked / | I3`1 |
|
||||
| ViableCallable.cs:583:9:583:15 | call to method M11 | M11 | C20 |
|
||||
| ViableCallable.cs:586:9:586:15 | call to method M12 | M12 | C20 |
|
||||
| ViableCallable.cs:586:9:586:15 | call to method M12 | M12 | I3`1 |
|
||||
| ViableCallable.cs:589:9:589:15 | call to method M13 | M13 | I3`1 |
|
||||
| ViableCallable.cs:366:9:366:15 | ... += ... | + | Int32 |
|
||||
| ViableCallable.cs:368:9:368:14 | dynamic call to method M | M | C11 |
|
||||
| ViableCallable.cs:370:9:370:18 | dynamic object creation of type C11 | C11 | C11 |
|
||||
| ViableCallable.cs:393:9:393:13 | call to method M | M | C13 |
|
||||
| ViableCallable.cs:426:9:426:18 | call to method M<Int32> | M`1 | A1 |
|
||||
| ViableCallable.cs:426:9:426:18 | call to method M<Int32> | M`1 | A4 |
|
||||
| ViableCallable.cs:426:9:426:18 | call to method M<Int32> | M`1 | A5 |
|
||||
| ViableCallable.cs:428:13:428:20 | object creation of type A3 | A3 | A3 |
|
||||
| ViableCallable.cs:430:9:430:19 | call to method M<Boolean> | M`1 | A1 |
|
||||
| ViableCallable.cs:432:13:432:20 | object creation of type A4 | A4 | A4 |
|
||||
| ViableCallable.cs:434:9:434:21 | call to method M<String> | M`1 | A4 |
|
||||
| ViableCallable.cs:438:9:438:21 | call to method M<String> | M`1 | A4 |
|
||||
| ViableCallable.cs:438:9:438:21 | call to method M<String> | M`1 | A5 |
|
||||
| ViableCallable.cs:493:9:493:14 | call to method M1 | M1 | C18 |
|
||||
| ViableCallable.cs:496:9:496:14 | call to method M2 | M2 | I2 |
|
||||
| ViableCallable.cs:510:18:510:22 | call to operator + | + | C19 |
|
||||
| ViableCallable.cs:513:26:513:30 | call to operator checked + | checked + | C19 |
|
||||
| ViableCallable.cs:516:18:516:23 | call to operator explicit conversion | explicit conversion | C19 |
|
||||
| ViableCallable.cs:519:26:519:31 | call to operator checked explicit conversion | checked explicit conversion | C19 |
|
||||
| ViableCallable.cs:560:18:560:22 | call to operator + | + | C20 |
|
||||
| ViableCallable.cs:563:26:563:30 | call to operator checked + | checked + | C20 |
|
||||
| ViableCallable.cs:566:18:566:22 | call to operator - | - | C20 |
|
||||
| ViableCallable.cs:569:26:569:30 | call to operator checked - | checked - | I3`1 |
|
||||
| ViableCallable.cs:572:18:572:22 | call to operator * | * | I3`1 |
|
||||
| ViableCallable.cs:575:26:575:30 | call to operator checked * | checked * | I3`1 |
|
||||
| ViableCallable.cs:578:18:578:22 | call to operator / | / | C20 |
|
||||
| ViableCallable.cs:578:18:578:22 | call to operator / | / | I3`1 |
|
||||
| ViableCallable.cs:581:26:581:30 | call to operator checked / | checked / | C20 |
|
||||
| ViableCallable.cs:581:26:581:30 | call to operator checked / | checked / | I3`1 |
|
||||
| ViableCallable.cs:584:9:584:15 | call to method M11 | M11 | C20 |
|
||||
| ViableCallable.cs:587:9:587:15 | call to method M12 | M12 | C20 |
|
||||
| ViableCallable.cs:587:9:587:15 | call to method M12 | M12 | I3`1 |
|
||||
| ViableCallable.cs:590:9:590:15 | call to method M13 | M13 | I3`1 |
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
| dynamic.cs:35:13:35:14 | dynamic call to operator - | - | 0 | dynamic.cs:35:14:35:14 | access to local variable d |
|
||||
| dynamic.cs:36:13:36:17 | dynamic call to operator + | + | 0 | dynamic.cs:36:13:36:13 | access to local variable d |
|
||||
| dynamic.cs:36:13:36:17 | dynamic call to operator + | + | 1 | dynamic.cs:36:17:36:17 | access to local variable d |
|
||||
| dynamic.cs:37:9:37:14 | dynamic call to operator + | + | 0 | dynamic.cs:37:9:37:9 | access to local variable d |
|
||||
| dynamic.cs:37:9:37:14 | dynamic call to operator + | + | 1 | dynamic.cs:37:14:37:14 | access to local variable d |
|
||||
| dynamic.cs:37:9:37:14 | ... += ... | + | 0 | dynamic.cs:37:9:37:9 | access to local variable d |
|
||||
| dynamic.cs:37:9:37:14 | ... += ... | + | 1 | dynamic.cs:37:14:37:14 | access to local variable d |
|
||||
| dynamic.cs:47:9:47:11 | dynamic call to operator ++ | ++ | 0 | dynamic.cs:47:9:47:9 | access to local variable d |
|
||||
|
||||
@@ -105,12 +105,12 @@ dynamic.cs:
|
||||
# 35| 15: [ExprStmt] ...;
|
||||
# 35| 0: [AssignExpr] ... = ...
|
||||
# 35| 0: [LocalVariableAccess] access to local variable d
|
||||
# 35| 1: [DynamicOperatorCall] dynamic call to operator -
|
||||
# 35| 1: [OperatorCall] dynamic call to operator -
|
||||
# 35| 0: [LocalVariableAccess] access to local variable d
|
||||
# 36| 16: [ExprStmt] ...;
|
||||
# 36| 0: [AssignExpr] ... = ...
|
||||
# 36| 0: [LocalVariableAccess] access to local variable d
|
||||
# 36| 1: [DynamicOperatorCall] dynamic call to operator +
|
||||
# 36| 1: [OperatorCall] dynamic call to operator +
|
||||
# 36| 0: [LocalVariableAccess] access to local variable d
|
||||
# 36| 1: [LocalVariableAccess] access to local variable d
|
||||
# 37| 17: [ExprStmt] ...;
|
||||
@@ -141,7 +141,7 @@ dynamic.cs:
|
||||
# 44| 0: [PostIncrExpr] ...++
|
||||
# 44| 0: [LocalVariableAccess] access to local variable i
|
||||
# 47| 23: [ExprStmt] ...;
|
||||
# 47| 0: [DynamicOperatorCall] dynamic call to operator ++
|
||||
# 47| 0: [OperatorCall] dynamic call to operator ++
|
||||
# 47| 0: [LocalVariableAccess] access to local variable d
|
||||
# 50| 24: [ExprStmt] ...;
|
||||
# 50| 0: [PostIncrExpr] ...++
|
||||
|
||||
@@ -57,64 +57,64 @@ gvn
|
||||
| StructuralComparison.cs:3:14:3:18 | {...} | (kind:Stmt(1)) |
|
||||
| StructuralComparison.cs:5:26:5:26 | access to field x | (kind:Expr(16),true,x) |
|
||||
| StructuralComparison.cs:5:26:5:26 | this access | (kind:Expr(12),false,Class) |
|
||||
| StructuralComparison.cs:5:26:5:30 | ... = ... | ((kind:Expr(16),true,x) :: (0 :: (kind:Expr(63)))) |
|
||||
| StructuralComparison.cs:5:26:5:30 | ... = ... | (0 :: ((kind:Expr(16),true,x) :: (kind:Expr(63)))) |
|
||||
| StructuralComparison.cs:5:30:5:30 | 0 | 0 |
|
||||
| StructuralComparison.cs:6:26:6:26 | access to field y | (kind:Expr(16),true,y) |
|
||||
| StructuralComparison.cs:6:26:6:26 | this access | (kind:Expr(12),false,Class) |
|
||||
| StructuralComparison.cs:6:26:6:30 | ... = ... | ((kind:Expr(16),true,y) :: (1 :: (kind:Expr(63)))) |
|
||||
| StructuralComparison.cs:6:26:6:30 | ... = ... | (1 :: ((kind:Expr(16),true,y) :: (kind:Expr(63)))) |
|
||||
| StructuralComparison.cs:6:30:6:30 | 1 | 1 |
|
||||
| StructuralComparison.cs:8:24:8:24 | 0 | 0 |
|
||||
| StructuralComparison.cs:9:29:9:29 | access to parameter a | (kind:Expr(15),false,a) |
|
||||
| StructuralComparison.cs:10:38:10:39 | access to parameter v1 | (kind:Expr(15),false,v1) |
|
||||
| StructuralComparison.cs:10:38:10:44 | ... + ... | ((kind:Expr(15),false,v2) :: ((kind:Expr(15),false,v1) :: (kind:Expr(44)))) |
|
||||
| StructuralComparison.cs:10:43:10:44 | access to parameter v2 | (kind:Expr(15),false,v2) |
|
||||
| StructuralComparison.cs:14:5:17:5 | {...} | ((((kind:Expr(14),false,z2) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,z1) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1)))) |
|
||||
| StructuralComparison.cs:15:9:15:23 | ... ...; | (((kind:Expr(14),false,z1) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:14:5:17:5 | {...} | (((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z2) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z1) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1)))) |
|
||||
| StructuralComparison.cs:15:9:15:23 | ... ...; | ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z1) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:15:13:15:14 | access to local variable z1 | (kind:Expr(14),false,z1) |
|
||||
| StructuralComparison.cs:15:13:15:22 | Int32 z1 = ... | ((kind:Expr(14),false,z1) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:15:13:15:22 | Int32 z1 = ... | (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z1) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:15:18:15:18 | access to field x | (kind:Expr(16),true,x) |
|
||||
| StructuralComparison.cs:15:18:15:18 | this access | (kind:Expr(12),false,Class) |
|
||||
| StructuralComparison.cs:15:18:15:22 | ... + ... | ((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) |
|
||||
| StructuralComparison.cs:15:22:15:22 | access to field y | (kind:Expr(16),true,y) |
|
||||
| StructuralComparison.cs:15:22:15:22 | this access | (kind:Expr(12),false,Class) |
|
||||
| StructuralComparison.cs:16:9:16:23 | ... ...; | (((kind:Expr(14),false,z2) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:16:9:16:23 | ... ...; | ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z2) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:16:13:16:14 | access to local variable z2 | (kind:Expr(14),false,z2) |
|
||||
| StructuralComparison.cs:16:13:16:22 | Int32 z2 = ... | ((kind:Expr(14),false,z2) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:16:13:16:22 | Int32 z2 = ... | (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z2) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:16:18:16:18 | access to field x | (kind:Expr(16),true,x) |
|
||||
| StructuralComparison.cs:16:18:16:18 | this access | (kind:Expr(12),false,Class) |
|
||||
| StructuralComparison.cs:16:18:16:22 | ... + ... | ((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: (kind:Expr(44)))) |
|
||||
| StructuralComparison.cs:16:22:16:22 | access to field y | (kind:Expr(16),true,y) |
|
||||
| StructuralComparison.cs:16:22:16:22 | this access | (kind:Expr(12),false,Class) |
|
||||
| StructuralComparison.cs:20:5:29:5 | {...} | ((((kind:Expr(16),true,x) :: ((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Stmt(2))) :: ((((kind:Expr(16),true,x) :: ((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Stmt(2))) :: ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Stmt(2))) :: ((((kind:Expr(14),false,z7) :: ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Expr(44)))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,z6) :: (((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M0)) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,z5) :: (((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,z4) :: (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,z3) :: (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1)))))))))) |
|
||||
| StructuralComparison.cs:21:9:21:23 | ... ...; | (((kind:Expr(14),false,z3) :: (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:20:5:29:5 | {...} | ((((kind:Expr(16),true,x) :: ((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Stmt(2))) :: ((((kind:Expr(16),true,x) :: ((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Stmt(2))) :: ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Stmt(2))) :: ((((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z7) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (((((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M0)) :: ((kind:Expr(14),false,z6) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (((((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z5) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (((((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z4) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (((((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z3) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1)))))))))) |
|
||||
| StructuralComparison.cs:21:9:21:23 | ... ...; | ((((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z3) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:21:13:21:14 | access to local variable z3 | (kind:Expr(14),false,z3) |
|
||||
| StructuralComparison.cs:21:13:21:22 | Int32 z3 = ... | ((kind:Expr(14),false,z3) :: (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:21:13:21:22 | Int32 z3 = ... | (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z3) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:21:18:21:22 | call to method M1 | ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) |
|
||||
| StructuralComparison.cs:21:18:21:22 | this access | (kind:Expr(12),false,Class) |
|
||||
| StructuralComparison.cs:21:21:21:21 | access to field x | (kind:Expr(16),true,x) |
|
||||
| StructuralComparison.cs:21:21:21:21 | this access | (kind:Expr(12),false,Class) |
|
||||
| StructuralComparison.cs:22:9:22:23 | ... ...; | (((kind:Expr(14),false,z4) :: (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:22:9:22:23 | ... ...; | ((((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z4) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:22:13:22:14 | access to local variable z4 | (kind:Expr(14),false,z4) |
|
||||
| StructuralComparison.cs:22:13:22:22 | Int32 z4 = ... | ((kind:Expr(14),false,z4) :: (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:22:13:22:22 | Int32 z4 = ... | (((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z4) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:22:18:22:22 | call to method M1 | ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) |
|
||||
| StructuralComparison.cs:22:18:22:22 | this access | (kind:Expr(12),false,Class) |
|
||||
| StructuralComparison.cs:22:21:22:21 | access to field x | (kind:Expr(16),true,x) |
|
||||
| StructuralComparison.cs:22:21:22:21 | this access | (kind:Expr(12),false,Class) |
|
||||
| StructuralComparison.cs:23:9:23:23 | ... ...; | (((kind:Expr(14),false,z5) :: (((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:23:9:23:23 | ... ...; | ((((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z5) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:23:13:23:14 | access to local variable z5 | (kind:Expr(14),false,z5) |
|
||||
| StructuralComparison.cs:23:13:23:22 | Int32 z5 = ... | ((kind:Expr(14),false,z5) :: (((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:23:13:23:22 | Int32 z5 = ... | (((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) :: ((kind:Expr(14),false,z5) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:23:18:23:22 | call to method M1 | ((kind:Expr(16),true,y) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M1))) |
|
||||
| StructuralComparison.cs:23:18:23:22 | this access | (kind:Expr(12),false,Class) |
|
||||
| StructuralComparison.cs:23:21:23:21 | access to field y | (kind:Expr(16),true,y) |
|
||||
| StructuralComparison.cs:23:21:23:21 | this access | (kind:Expr(12),false,Class) |
|
||||
| StructuralComparison.cs:24:9:24:22 | ... ...; | (((kind:Expr(14),false,z6) :: (((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M0)) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:24:9:24:22 | ... ...; | ((((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M0)) :: ((kind:Expr(14),false,z6) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:24:13:24:14 | access to local variable z6 | (kind:Expr(14),false,z6) |
|
||||
| StructuralComparison.cs:24:13:24:21 | Int32 z6 = ... | ((kind:Expr(14),false,z6) :: (((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M0)) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:24:13:24:21 | Int32 z6 = ... | (((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M0)) :: ((kind:Expr(14),false,z6) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:24:18:24:21 | call to method M0 | ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M0)) |
|
||||
| StructuralComparison.cs:24:18:24:21 | this access | (kind:Expr(12),false,Class) |
|
||||
| StructuralComparison.cs:25:9:25:37 | ... ...; | (((kind:Expr(14),false,z7) :: ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Expr(44)))) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:25:9:25:37 | ... ...; | (((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z7) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:25:13:25:14 | access to local variable z7 | (kind:Expr(14),false,z7) |
|
||||
| StructuralComparison.cs:25:13:25:36 | Int32 z7 = ... | ((kind:Expr(14),false,z7) :: ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Expr(44)))) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:25:13:25:36 | Int32 z7 = ... | ((((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Expr(44)))) :: ((kind:Expr(14),false,z7) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:25:18:25:25 | call to method M2 | ((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) |
|
||||
| StructuralComparison.cs:25:18:25:25 | this access | (kind:Expr(12),false,Class) |
|
||||
| StructuralComparison.cs:25:18:25:36 | ... + ... | (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (((kind:Expr(16),true,y) :: ((kind:Expr(16),true,x) :: ((kind:Expr(12),false,Class) :: (kind:Expr(24),false,M2)))) :: (kind:Expr(44)))) |
|
||||
@@ -157,35 +157,35 @@ gvn
|
||||
| StructuralComparison.cs:38:14:38:25 | call to method <object initializer> | ((kind:Expr(12),false,DerivedClass) :: (kind:Expr(24),false,<object initializer>)) |
|
||||
| StructuralComparison.cs:38:14:38:25 | this access | (kind:Expr(12),false,DerivedClass) |
|
||||
| StructuralComparison.cs:38:14:38:25 | {...} | (kind:Stmt(1)) |
|
||||
| StructuralComparison.cs:41:5:45:5 | {...} | ((((kind:Expr(14),false,x3) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,x2) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,x1) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1))))) |
|
||||
| StructuralComparison.cs:42:9:42:28 | ... ...; | (((kind:Expr(14),false,x1) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:41:5:45:5 | {...} | ((((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x3) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x2) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x1) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1))))) |
|
||||
| StructuralComparison.cs:42:9:42:28 | ... ...; | (((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x1) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:42:13:42:14 | access to local variable x1 | (kind:Expr(14),false,x1) |
|
||||
| StructuralComparison.cs:42:13:42:27 | Int32 x1 = ... | ((kind:Expr(14),false,x1) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:42:13:42:27 | Int32 x1 = ... | ((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x1) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:42:18:42:21 | base access | (kind:Expr(13),false,BaseClass) |
|
||||
| StructuralComparison.cs:42:18:42:27 | access to field Field | (kind:Expr(16),true,Field) |
|
||||
| StructuralComparison.cs:43:9:43:23 | ... ...; | (((kind:Expr(14),false,x2) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:43:9:43:23 | ... ...; | (((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x2) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:43:13:43:14 | access to local variable x2 | (kind:Expr(14),false,x2) |
|
||||
| StructuralComparison.cs:43:13:43:22 | Int32 x2 = ... | ((kind:Expr(14),false,x2) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:43:13:43:22 | Int32 x2 = ... | ((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x2) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:43:18:43:22 | access to field Field | (kind:Expr(16),true,Field) |
|
||||
| StructuralComparison.cs:43:18:43:22 | this access | (kind:Expr(12),false,DerivedClass) |
|
||||
| StructuralComparison.cs:44:9:44:28 | ... ...; | (((kind:Expr(14),false,x3) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:44:9:44:28 | ... ...; | (((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x3) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:44:13:44:14 | access to local variable x3 | (kind:Expr(14),false,x3) |
|
||||
| StructuralComparison.cs:44:13:44:27 | Int32 x3 = ... | ((kind:Expr(14),false,x3) :: ((kind:Expr(16),true,Field) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:44:13:44:27 | Int32 x3 = ... | ((kind:Expr(16),true,Field) :: ((kind:Expr(14),false,x3) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:44:18:44:21 | this access | (kind:Expr(12),false,DerivedClass) |
|
||||
| StructuralComparison.cs:44:18:44:27 | access to field Field | (kind:Expr(16),true,Field) |
|
||||
| StructuralComparison.cs:48:5:52:5 | {...} | ((((kind:Expr(14),false,y3) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,y2) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(14),false,y1) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1))))) |
|
||||
| StructuralComparison.cs:49:9:49:27 | ... ...; | (((kind:Expr(14),false,y1) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:48:5:52:5 | {...} | ((((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y3) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y2) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: ((((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y1) :: (kind:Expr(83)))) :: (kind:Stmt(22))) :: (kind:Stmt(1))))) |
|
||||
| StructuralComparison.cs:49:9:49:27 | ... ...; | (((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y1) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:49:13:49:14 | access to local variable y1 | (kind:Expr(14),false,y1) |
|
||||
| StructuralComparison.cs:49:13:49:26 | Object y1 = ... | ((kind:Expr(14),false,y1) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:49:13:49:26 | Object y1 = ... | ((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y1) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:49:18:49:21 | base access | (kind:Expr(13),false,BaseClass) |
|
||||
| StructuralComparison.cs:49:18:49:26 | access to property Prop | (kind:Expr(17),true,Prop) |
|
||||
| StructuralComparison.cs:50:9:50:22 | ... ...; | (((kind:Expr(14),false,y2) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:50:9:50:22 | ... ...; | (((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y2) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:50:13:50:14 | access to local variable y2 | (kind:Expr(14),false,y2) |
|
||||
| StructuralComparison.cs:50:13:50:21 | Object y2 = ... | ((kind:Expr(14),false,y2) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:50:13:50:21 | Object y2 = ... | ((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y2) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:50:18:50:21 | access to property Prop | (kind:Expr(17),true,Prop) |
|
||||
| StructuralComparison.cs:50:18:50:21 | this access | (kind:Expr(12),false,DerivedClass) |
|
||||
| StructuralComparison.cs:51:9:51:27 | ... ...; | (((kind:Expr(14),false,y3) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:51:9:51:27 | ... ...; | (((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y3) :: (kind:Expr(83)))) :: (kind:Stmt(22))) |
|
||||
| StructuralComparison.cs:51:13:51:14 | access to local variable y3 | (kind:Expr(14),false,y3) |
|
||||
| StructuralComparison.cs:51:13:51:26 | Object y3 = ... | ((kind:Expr(14),false,y3) :: ((kind:Expr(17),true,Prop) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:51:13:51:26 | Object y3 = ... | ((kind:Expr(17),true,Prop) :: ((kind:Expr(14),false,y3) :: (kind:Expr(83)))) |
|
||||
| StructuralComparison.cs:51:18:51:21 | this access | (kind:Expr(12),false,DerivedClass) |
|
||||
| StructuralComparison.cs:51:18:51:26 | access to property Prop | (kind:Expr(17),true,Prop) |
|
||||
|
||||
@@ -89,4 +89,25 @@ class C1
|
||||
lock (mutex) GoodProperty3 = value;
|
||||
}
|
||||
}
|
||||
|
||||
// GOOD: both getter and setter are locked.
|
||||
int? property2;
|
||||
int? GoodProperty5
|
||||
{
|
||||
get
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
property2 ??= 0;
|
||||
return property2;
|
||||
}
|
||||
}
|
||||
set
|
||||
{
|
||||
lock (mutex)
|
||||
{
|
||||
property2 = value;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
| DeadStoreOfLocal.cs:12:13:12:20 | Int32 x = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:12:13:12:13 | x | x |
|
||||
| DeadStoreOfLocal.cs:19:21:19:25 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:18:13:18:13 | x | x |
|
||||
| DeadStoreOfLocal.cs:44:13:44:20 | Int32 x = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:44:13:44:13 | x | x |
|
||||
| DeadStoreOfLocal.cs:50:9:50:14 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:49:13:49:13 | x | x |
|
||||
| DeadStoreOfLocal.cs:50:9:50:14 | ... += ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:49:13:49:13 | x | x |
|
||||
| DeadStoreOfLocal.cs:56:9:56:11 | ...++ | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:55:13:55:13 | x | x |
|
||||
| DeadStoreOfLocal.cs:82:22:82:24 | String val | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:82:22:82:24 | val | val |
|
||||
| DeadStoreOfLocal.cs:101:13:101:37 | ... = ... | This assignment to $@ is useless, since its value is never read. | DeadStoreOfLocal.cs:94:40:94:44 | extra | extra |
|
||||
|
||||
@@ -12,6 +12,8 @@ class Tests
|
||||
a = param ?? param; // BAD
|
||||
a = a ?? use(a); // BAD
|
||||
a = Field ?? this.Field; // BAD
|
||||
a ??= a; // BAD
|
||||
a ??= b = a; // BAD
|
||||
|
||||
a = a ?? cache(ref a); // GOOD
|
||||
a = a ?? store(out a); // GOOD
|
||||
@@ -23,6 +25,7 @@ class Tests
|
||||
?? a; // GOOD
|
||||
a = a ?? store(out a)
|
||||
?? a; // GOOD
|
||||
a ??= param; // GOOD
|
||||
}
|
||||
|
||||
int? cache(ref int? a)
|
||||
|
||||
@@ -4,3 +4,5 @@
|
||||
| UselessNullCoalescingExpression.cs:12:13:12:26 | ... ?? ... | Both operands of this null-coalescing expression access the same variable or property. |
|
||||
| UselessNullCoalescingExpression.cs:13:13:13:23 | ... ?? ... | Both operands of this null-coalescing expression access the same variable or property. |
|
||||
| UselessNullCoalescingExpression.cs:14:13:14:31 | ... ?? ... | Both operands of this null-coalescing expression access the same variable or property. |
|
||||
| UselessNullCoalescingExpression.cs:15:9:15:15 | ... ??= ... | Both operands of this null-coalescing expression access the same variable or property. |
|
||||
| UselessNullCoalescingExpression.cs:16:9:16:19 | ... ??= ... | Both operands of this null-coalescing expression access the same variable or property. |
|
||||
|
||||
@@ -307,4 +307,10 @@ public class ContainerTest
|
||||
{
|
||||
Out(out var strings); // BAD: but allow for now (only C# 7 allows discards)
|
||||
}
|
||||
|
||||
IList<int> TestNullcoalescingInitializations()
|
||||
{
|
||||
var l = new List<int> { 1, 2, 3 }; // GOOD: returned
|
||||
return l ??= new List<int>();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user