Merge pull request #21372 from michaelnebel/csharp14/usercompoundassignment

C# 14: User defined compound assignment operators.
This commit is contained in:
Michael Nebel
2026-04-29 11:22:35 +02:00
committed by GitHub
36 changed files with 7533 additions and 741 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
description: Remove @assign_op_call_expr from @qualifiable_expr.
compatibility: full

View File

@@ -1,3 +1,5 @@
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Text.RegularExpressions;
using Microsoft.CodeAnalysis;
@@ -18,114 +20,68 @@ namespace Semmle.Extraction.CSharp.Util
return symbol.CanBeReferencedByName ? name : name.Substring(symbol.Name.LastIndexOf('.') + 1);
}
private static readonly ReadOnlyDictionary<string, string> methodToOperator = new(new Dictionary<string, string>
{
{ "op_LogicalNot", "!" },
{ "op_BitwiseAnd", "&" },
{ "op_Equality", "==" },
{ "op_Inequality", "!=" },
{ "op_UnaryPlus", "+" },
{ "op_Addition", "+" },
{ "op_UnaryNegation", "-" },
{ "op_Subtraction", "-" },
{ "op_Multiply", "*" },
{ "op_Multiplication", "*" },
{ "op_Division", "/" },
{ "op_Modulus", "%" },
{ "op_GreaterThan", ">" },
{ "op_GreaterThanOrEqual", ">=" },
{ "op_LessThan", "<" },
{ "op_LessThanOrEqual", "<=" },
{ "op_Decrement", "--" },
{ "op_Increment", "++" },
{ "op_Implicit", "implicit conversion" },
{ "op_Explicit", "explicit conversion" },
{ "op_OnesComplement", "~" },
{ "op_RightShift", ">>" },
{ "op_UnsignedRightShift", ">>>" },
{ "op_LeftShift", "<<" },
{ "op_BitwiseOr", "|" },
{ "op_ExclusiveOr", "^" },
{ "op_True", "true" },
{ "op_False", "false" }
});
/// <summary>
/// Convert an operator method name in to a symbolic name.
/// A return value indicates whether the conversion succeeded.
/// </summary>
public static bool TryGetOperatorSymbol(this ISymbol symbol, out string operatorName)
{
static bool TryGetOperatorSymbolFromName(string methodName, out string operatorName)
var methodName = symbol.GetName(useMetadataName: false);
// Most common use-case.
if (methodToOperator.TryGetValue(methodName, out var opName))
{
var success = true;
switch (methodName)
{
case "op_LogicalNot":
operatorName = "!";
break;
case "op_BitwiseAnd":
operatorName = "&";
break;
case "op_Equality":
operatorName = "==";
break;
case "op_Inequality":
operatorName = "!=";
break;
case "op_UnaryPlus":
case "op_Addition":
operatorName = "+";
break;
case "op_UnaryNegation":
case "op_Subtraction":
operatorName = "-";
break;
case "op_Multiply":
operatorName = "*";
break;
case "op_Division":
operatorName = "/";
break;
case "op_Modulus":
operatorName = "%";
break;
case "op_GreaterThan":
operatorName = ">";
break;
case "op_GreaterThanOrEqual":
operatorName = ">=";
break;
case "op_LessThan":
operatorName = "<";
break;
case "op_LessThanOrEqual":
operatorName = "<=";
break;
case "op_Decrement":
operatorName = "--";
break;
case "op_Increment":
operatorName = "++";
break;
case "op_Implicit":
operatorName = "implicit conversion";
break;
case "op_Explicit":
operatorName = "explicit conversion";
break;
case "op_OnesComplement":
operatorName = "~";
break;
case "op_RightShift":
operatorName = ">>";
break;
case "op_UnsignedRightShift":
operatorName = ">>>";
break;
case "op_LeftShift":
operatorName = "<<";
break;
case "op_BitwiseOr":
operatorName = "|";
break;
case "op_ExclusiveOr":
operatorName = "^";
break;
case "op_True":
operatorName = "true";
break;
case "op_False":
operatorName = "false";
break;
default:
var match = CheckedRegex().Match(methodName);
if (match.Success)
{
TryGetOperatorSymbolFromName($"op_{match.Groups[1]}", out var uncheckedName);
operatorName = $"checked {uncheckedName}";
break;
}
operatorName = methodName;
success = false;
break;
}
return success;
operatorName = opName;
return true;
}
var methodName = symbol.GetName(useMetadataName: false);
return TryGetOperatorSymbolFromName(methodName, out operatorName);
// Attempt to parse using a regexp.
var match = OperatorRegex().Match(methodName);
if (match.Success && methodToOperator.TryGetValue($"op_{match.Groups[2]}", out var rawOperatorName))
{
var prefix = match.Groups[1].Success ? "checked " : "";
var postfix = match.Groups[3].Success ? "=" : "";
operatorName = $"{prefix}{rawOperatorName}{postfix}";
return true;
}
operatorName = methodName;
return false;
}
[GeneratedRegex("^op_Checked(.*)$")]
private static partial Regex CheckedRegex();
[GeneratedRegex("^op_(Checked)?(.*?)(Assignment)?$")]
private static partial Regex OperatorRegex();
}
}

View File

@@ -228,6 +228,41 @@ namespace Semmle.Extraction.CSharp.Entities
return Literal.CreateGenerated(cx, parent, childIndex, type, defaultValue, location);
}
/// <summary>
/// Given an expression syntax node, attempt to resolve the target method symbol for it.
/// The operation takes extension methods into account.
/// </summary>
/// <param name="node">The expression syntax node.</param>
/// <returns>Returns the target method symbol, or null if it cannot be resolved.</returns>
protected IMethodSymbol? GetTargetSymbol(ExpressionSyntax node)
{
var si = Context.GetSymbolInfo(node);
if (si.Symbol is ISymbol symbol)
{
var method = symbol as IMethodSymbol;
// Case for compiler-generated extension methods.
return method?.TryGetExtensionMethod() ?? method;
}
if (si.CandidateReason == CandidateReason.OverloadResolutionFailure && node is InvocationExpressionSyntax syntax)
{
// This seems to be a bug in Roslyn
// For some reason, typeof(X).InvokeMember(...) fails to resolve the correct
// InvokeMember() method, even though the number of parameters clearly identifies the correct method
var candidates = si.CandidateSymbols
.OfType<IMethodSymbol>()
.Where(method => method.Parameters.Length >= syntax.ArgumentList.Arguments.Count)
.Where(method => method.Parameters.Count(p => !p.HasExplicitDefaultValue) <= syntax.ArgumentList.Arguments.Count);
return Context.ExtractionContext.IsStandalone ?
candidates.FirstOrDefault() :
candidates.SingleOrDefault();
}
return si.Symbol as IMethodSymbol;
}
/// <summary>
/// Adapt the operator kind depending on whether it's a dynamic call or a user-operator call.
/// </summary>
@@ -244,10 +279,10 @@ namespace Semmle.Extraction.CSharp.Entities
/// name if available.
/// </summary>
/// <param name="node">The expression.</param>
public void OperatorCall(TextWriter trapFile, ExpressionSyntax node)
public void AddOperatorCall(TextWriter trapFile, ExpressionSyntax node)
{
var @operator = Context.GetSymbolInfo(node);
if (@operator.Symbol is IMethodSymbol method)
var @operator = GetTargetSymbol(node);
if (@operator is IMethodSymbol method)
{
var callType = GetCallType(Context, node);
if (callType == CallType.Dynamic)

View File

@@ -24,10 +24,9 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
{
Create(Context, Syntax.Left, this, 0);
Create(Context, Syntax.Right, this, 1);
if (Kind != ExprKind.SIMPLE_ASSIGN && Kind != ExprKind.ASSIGN_COALESCE)
{
OperatorCall(trapFile, Syntax);
AddOperatorCall(trapFile, Syntax);
}
}

View File

@@ -40,7 +40,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
protected override void PopulateExpression(TextWriter trapFile)
{
OperatorCall(trapFile, Syntax);
AddOperatorCall(trapFile, Syntax);
CreateDeferred(Context, Syntax.Left, 0);
CreateDeferred(Context, Syntax.Right, 1);
}

View File

@@ -25,7 +25,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
else
{
// Type conversion
OperatorCall(trapFile, Syntax);
AddOperatorCall(trapFile, Syntax);
TypeMention.Create(Context, Syntax.Type, this, Type);
}
}

View File

@@ -44,7 +44,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
var child = -1;
string? memberName = null;
var target = TargetSymbol;
var target = GetTargetSymbol(Syntax);
switch (Syntax.Expression)
{
case MemberAccessExpressionSyntax memberAccess when IsValidMemberAccessKind():
@@ -129,39 +129,6 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
method.TryGetExtensionMethod()?.MethodKind == MethodKind.UserDefinedOperator;
}
public IMethodSymbol? TargetSymbol
{
get
{
var si = SymbolInfo;
if (si.Symbol is ISymbol symbol)
{
var method = symbol as IMethodSymbol;
// Case for compiler-generated extension methods.
return method?.TryGetExtensionMethod() ?? method;
}
if (si.CandidateReason == CandidateReason.OverloadResolutionFailure)
{
// This seems to be a bug in Roslyn
// For some reason, typeof(X).InvokeMember(...) fails to resolve the correct
// InvokeMember() method, even though the number of parameters clearly identifies the correct method
var candidates = si.CandidateSymbols
.OfType<IMethodSymbol>()
.Where(method => method.Parameters.Length >= Syntax.ArgumentList.Arguments.Count)
.Where(method => method.Parameters.Count(p => !p.HasExplicitDefaultValue) <= Syntax.ArgumentList.Arguments.Count);
return Context.ExtractionContext.IsStandalone ?
candidates.FirstOrDefault() :
candidates.SingleOrDefault();
}
return si.Symbol as IMethodSymbol;
}
}
private static bool IsDelegateLikeCall(ExpressionNodeInfo info)
{
return IsDelegateLikeCall(info, symbol => IsFunctionPointer(symbol) || IsDelegateInvoke(symbol));

View File

@@ -25,7 +25,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
if ((operatorKind == ExprKind.POST_INCR || operatorKind == ExprKind.POST_DECR) &&
Kind == ExprKind.OPERATOR_INVOCATION)
{
OperatorCall(trapFile, Syntax);
AddOperatorCall(trapFile, Syntax);
trapFile.mutator_invocation_mode(this, 2);
}
}

View File

@@ -24,7 +24,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
protected override void PopulateExpression(TextWriter trapFile)
{
Create(Context, Syntax.Operand, this, 0);
OperatorCall(trapFile, Syntax);
AddOperatorCall(trapFile, Syntax);
if ((operatorKind == ExprKind.PRE_INCR || operatorKind == ExprKind.PRE_DECR) &&
Kind == ExprKind.OPERATOR_INVOCATION)

View File

@@ -0,0 +1,4 @@
---
category: minorAnalysis
---
* C# 14: Added support for user-defined compound assignment operators.

View File

@@ -315,7 +315,8 @@ module AssignableInternal {
TAddressOfDefinition(AddressOfExpr aoe) or
TPatternDefinition(TopLevelPatternDecl tlpd) or
TAssignOperationDefinition(AssignOperation ao) {
ao instanceof AssignCallOperation or
ao instanceof AssignCallOperation and not ao instanceof CompoundAssignmentOperatorCall
or
ao instanceof AssignCoalesceExpr
}

View File

@@ -611,7 +611,8 @@ class ExtensionOperator extends ExtensionCallableImpl, Operator {
class UnaryOperator extends Operator {
UnaryOperator() {
this.getNumberOfParameters() = 1 and
not this instanceof ConversionOperator
not this instanceof ConversionOperator and
not this instanceof CompoundAssignmentOperator
}
}
@@ -784,7 +785,7 @@ class TrueOperator extends UnaryOperator {
* A user-defined binary operator.
*
* Either an addition operator (`AddOperator`), a checked addition operator
* (`CheckedAddOperator`) a subtraction operator (`SubOperator`), a checked
* (`CheckedAddOperator`), a subtraction operator (`SubOperator`), a checked
* subtraction operator (`CheckedSubOperator`), a multiplication operator
* (`MulOperator`), a checked multiplication operator (`CheckedMulOperator`),
* a division operator (`DivOperator`), a checked division operator
@@ -795,10 +796,16 @@ class TrueOperator extends UnaryOperator {
* operator(`UnsignedRightShiftOperator`), an equals operator (`EQOperator`),
* a not equals operator (`NEOperator`), a lesser than operator (`LTOperator`),
* a greater than operator (`GTOperator`), a less than or equals operator
* (`LEOperator`), or a greater than or equals operator (`GEOperator`).
* (`LEOperator`), a greater than or equals operator (`GEOperator`), or
* a compound assignment operator (`CompoundAssignmentOperator`).
*/
class BinaryOperator extends Operator {
BinaryOperator() { this.getNumberOfParameters() = 2 }
BinaryOperator() {
this.getNumberOfParameters() = 2
or
// Instance compound assignment operators only have one parameter.
this.getNumberOfParameters() = 1 and not this.isStatic()
}
}
/**
@@ -1184,6 +1191,249 @@ class CheckedExplicitConversionOperator extends ConversionOperator {
override string getAPrimaryQlClass() { result = "CheckedExplicitConversionOperator" }
}
abstract private class CompoundAssignmentOperatorImpl extends BinaryOperator { }
/**
* A user-defined compound assignment operator.
*
* Either an addition operator (`AddCompoundAssignmentOperator`), a checked addition operator
* (`CheckedAddCompoundAssignmentOperator`), a subtraction operator (`SubCompoundAssignmentOperator`), a checked
* subtraction operator (`CheckedSubCompoundAssignmentOperator`), a multiplication operator
* (`MulCompoundAssignmentOperator`), a checked multiplication operator (`CheckedMulCompoundAssignmentOperator`),
* a division operator (`DivCompoundAssignmentOperator`), a checked division operator
* (`CheckedDivCompoundAssignmentOperator`), a remainder operator (`RemCompoundAssignmentOperator`), an and
* operator (`AndCompoundAssignmentOperator`), an or operator (`OrCompoundAssignmentOperator`), an xor
* operator (`XorCompoundAssignmentOperator`), a left shift operator (`LeftShiftCompoundAssignmentOperator`),
* a right shift operator (`RightShiftCompoundAssignmentOperator`), or an unsigned right shift
* operator(`UnsignedRightShiftCompoundAssignmentOperator`).
*/
final class CompoundAssignmentOperator = CompoundAssignmentOperatorImpl;
/**
* A user-defined compound assignment addition operator (`+=`), for example
*
* ```csharp
* public void operator checked +=(Widget w) {
* ...
* }
* ```
*/
class AddCompoundAssignmentOperator extends CompoundAssignmentOperatorImpl {
AddCompoundAssignmentOperator() { this.getName() = "+=" }
override string getAPrimaryQlClass() { result = "AddCompoundAssignmentOperator" }
}
/**
* A user-defined checked compound assignment addition operator (`checked +=`), for example
*
* ```csharp
* public void operator checked +=(Widget w) {
* ...
* }
* ```
*/
class CheckedAddCompoundAssignmentOperator extends CompoundAssignmentOperatorImpl {
CheckedAddCompoundAssignmentOperator() { this.getName() = "checked +=" }
override string getAPrimaryQlClass() { result = "CheckedAddCompoundAssignmentOperator" }
}
/**
* A user-defined compound assignment subtraction operator (`-=`), for example
*
* ```csharp
* public void operator -=(Widget w) {
* ...
* }
* ```
*/
class SubCompoundAssignmentOperator extends CompoundAssignmentOperatorImpl {
SubCompoundAssignmentOperator() { this.getName() = "-=" }
override string getAPrimaryQlClass() { result = "SubCompoundAssignmentOperator" }
}
/**
* A user-defined checked compound assignment subtraction operator (`checked -=`), for example
*
* ```csharp
* public void operator checked -=(Widget w) {
* ...
* }
* ```
*/
class CheckedSubCompoundAssignmentOperator extends CompoundAssignmentOperatorImpl {
CheckedSubCompoundAssignmentOperator() { this.getName() = "checked -=" }
override string getAPrimaryQlClass() { result = "CheckedSubCompoundAssignmentOperator" }
}
/**
* A user-defined compound assignment multiplication operator (`*=`), for example
*
* ```csharp
* public void operator *=(Widget w) {
* ...
* }
* ```
*/
class MulCompoundAssignmentOperator extends CompoundAssignmentOperatorImpl {
MulCompoundAssignmentOperator() { this.getName() = "*=" }
override string getAPrimaryQlClass() { result = "MulCompoundAssignmentOperator" }
}
/**
* A user-defined checked compound assignment multiplication operator (`checked *=`), for example
*
* ```csharp
* public void operator checked *=(Widget w) {
* ...
* }
* ```
*/
class CheckedMulCompoundAssignmentOperator extends CompoundAssignmentOperatorImpl {
CheckedMulCompoundAssignmentOperator() { this.getName() = "checked *=" }
override string getAPrimaryQlClass() { result = "CheckedMulCompoundAssignmentOperator" }
}
/**
* A user-defined compound assignment division operator (`/=`), for example
*
* ```csharp
* public void operator /=(Widget w) {
* ...
* }
* ```
*/
class DivCompoundAssignmentOperator extends CompoundAssignmentOperatorImpl {
DivCompoundAssignmentOperator() { this.getName() = "/=" }
override string getAPrimaryQlClass() { result = "DivCompoundAssignmentOperator" }
}
/**
* A user-defined checked compound assignment division operator (`checked /=`), for example
*
* ```csharp
* public void operator checked /=(Widget w) {
* ...
* }
* ```
*/
class CheckedDivCompoundAssignmentOperator extends CompoundAssignmentOperatorImpl {
CheckedDivCompoundAssignmentOperator() { this.getName() = "checked /=" }
override string getAPrimaryQlClass() { result = "CheckedDivCompoundAssignmentOperator" }
}
/**
* A user-defined compound assignment remainder operator (`%=`), for example
*
* ```csharp
* public void operator %=(Widget w) {
* ...
* }
* ```
*/
class RemCompoundAssignmentOperator extends CompoundAssignmentOperatorImpl {
RemCompoundAssignmentOperator() { this.getName() = "%=" }
override string getAPrimaryQlClass() { result = "RemCompoundAssignmentOperator" }
}
/**
* A user-defined compound assignment and operator (`&=`), for example
*
* ```csharp
* public void operator &=(Widget w) {
* ...
* }
* ```
*/
class AndCompoundAssignmentOperator extends CompoundAssignmentOperatorImpl {
AndCompoundAssignmentOperator() { this.getName() = "&=" }
override string getAPrimaryQlClass() { result = "AndCompoundAssignmentOperator" }
}
/**
* A user-defined compound assignment or operator (`|=`), for example
*
* ```csharp
* public void operator |=(Widget w) {
* ...
* }
* ```
*/
class OrCompoundAssignmentOperator extends CompoundAssignmentOperatorImpl {
OrCompoundAssignmentOperator() { this.getName() = "|=" }
override string getAPrimaryQlClass() { result = "OrCompoundAssignmentOperator" }
}
/**
* A user-defined compound assignment xor operator (`^=`), for example
*
* ```csharp
* public void operator ^=(Widget w) {
* ...
* }
* ```
*/
class XorCompoundAssignmentOperator extends CompoundAssignmentOperatorImpl {
XorCompoundAssignmentOperator() { this.getName() = "^=" }
override string getAPrimaryQlClass() { result = "XorCompoundAssignmentOperator" }
}
/**
* A user-defined compound assignment left shift operator (`<<=`), for example
*
* ```csharp
* public void operator <<=(Widget w) {
* ...
* }
* ```
*/
class LeftShiftCompoundAssignmentOperator extends CompoundAssignmentOperatorImpl {
LeftShiftCompoundAssignmentOperator() { this.getName() = "<<=" }
override string getAPrimaryQlClass() { result = "LeftShiftCompoundAssignmentOperator" }
}
/**
* A user-defined compound assignment right shift operator (`>>=`), for example
*
* ```csharp
* public void operator >>=(Widget w) {
* ...
* }
* ```
*/
class RightShiftCompoundAssignmentOperator extends CompoundAssignmentOperatorImpl {
RightShiftCompoundAssignmentOperator() { this.getName() = ">>=" }
override string getAPrimaryQlClass() { result = "RightShiftCompoundAssignmentOperator" }
}
/**
* A user-defined compound assignment unsigned right shift operator (`>>>=`), for example
*
* ```csharp
* public void operator >>>=(Widget w) {
* ...
* }
* ```
*/
class UnsignedRightShiftCompoundAssignmentOperator extends CompoundAssignmentOperatorImpl {
UnsignedRightShiftCompoundAssignmentOperator() { this.getName() = ">>>=" }
override string getAPrimaryQlClass() { result = "UnsignedRightShiftCompoundAssignmentOperator" }
}
/**
* A local function, defined within the scope of another callable.
* For example, `Fac` on lines 2--4 in

View File

@@ -1334,6 +1334,7 @@ class TypeMention extends @type_mention {
* ```csharp
* static class MyExtensions {
* extension(string s) { ... }
* }
* ```
*/
class ExtensionType extends Parameterizable, @extension_type {

View File

@@ -99,7 +99,11 @@ private module Internal {
or
ac instanceof AssignableWrite and isRead = false
} or
TDispatchOperatorCall(OperatorCall oc) { not oc.isLateBound() } or
TDispatchOperatorCall(OperatorCall oc) {
not oc.isLateBound() and
not oc instanceof CompoundAssignmentOperatorCall
} or
TDispatchCompoundAssignmentOperatorCall(CompoundAssignmentOperatorCall caoc) or
TDispatchReflectionCall(MethodCall mc, string name, Expr object, Expr qualifier, int args) {
isReflectionCall(mc, name, object, qualifier, args)
} or
@@ -886,6 +890,20 @@ private module Internal {
override Operator getAStaticTarget() { result = this.getCall().getTarget() }
}
private class DispatchCompoundAssignmentOperatorCall extends DispatchOverridableCall,
TDispatchCompoundAssignmentOperatorCall
{
override CompoundAssignmentOperatorCall getCall() {
this = TDispatchCompoundAssignmentOperatorCall(result)
}
override Expr getArgument(int i) { result = this.getCall().getArgument(i) }
override Expr getQualifier() { result = this.getCall().getQualifier() }
override Operator getAStaticTarget() { result = this.getCall().getTarget() }
}
/**
* A call to an accessor.
*

View File

@@ -94,13 +94,17 @@ class AssignOperation extends Assignment, @assign_op_expr {
}
/**
* A compound assignment operation that implicitly invokes an operator.
* For example, `x += y` assigns the result of `x + y` to `x`.
* A compound assignment operation that invokes an operator.
*
* (1) `x += y` invokes the compound assignment operator `+=` (if it exists).
* (2) `x += y` invokes the operator `+` and assigns `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 {
class AssignCallOperation extends AssignOperation, OperatorCall, QualifiableExpr,
@assign_op_call_expr
{
override string toString() { result = AssignOperation.super.toString() }
}

View File

@@ -529,6 +529,19 @@ class ExtensionOperatorCall extends OperatorCall {
ExtensionOperatorCall() { this.getTarget() instanceof ExtensionOperator }
override string getAPrimaryQlClass() { result = "ExtensionOperatorCall" }
private predicate isOrdinaryStaticCall() {
not exists(Expr e | e = this.getChildExpr(-1) | not e instanceof TypeAccess)
}
override Expr getArgument(int i) {
exists(int j | result = this.getChildExpr(j) |
i >= 0 and
if this.isOrdinaryStaticCall() or this.getTarget() instanceof CompoundAssignmentOperator
then j = i
else j = i - 1
)
}
}
/**
@@ -557,6 +570,58 @@ class MutatorOperatorCall extends OperatorCall {
predicate isPostfix() { mutator_invocation_mode(this, 2) }
}
/**
* A call to a compound assignment operator, for example `this += other`
* on line 7 in
*
* ```csharp
* class A {
* public void operator +=(A other) {
* ...
* }
*
* public void Add(A other) {
* this += other;
* }
* }
* ```
*/
class CompoundAssignmentOperatorCall extends AssignCallOperation {
CompoundAssignmentOperatorCall() { this.getTarget() instanceof CompoundAssignmentOperator }
override Expr getArgument(int i) { result = this.getChildExpr(i + 1) and i >= 0 }
/** Gets the qualifier of this compound assignment operator call. */
override Expr getQualifier() { result = this.getChildExpr(0) }
}
/**
* A call to a compound assignment extension operator, for example `s1 *= s2` on
* line 9 in
*
* ```csharp
* static class MyExtensions {
* extension(string s) {
* public void operator *=(string other) { ... }
* }
* }
*
* class A {
* void M(string s1, string s2) {
* s1 *= s2;
* }
* }
*/
class ExtensionCompoundAssignmentOperatorCall extends CompoundAssignmentOperatorCall,
ExtensionOperatorCall
{
override Expr getArgument(int i) { result = ExtensionOperatorCall.super.getArgument(i) }
override Expr getQualifier() { none() }
override string getAPrimaryQlClass() { result = "ExtensionCompoundAssignmentOperatorCall" }
}
private class DelegateLikeCall_ = @delegate_invocation_expr or @function_pointer_invocation_expr;
/**

View File

@@ -1338,7 +1338,8 @@ dynamic_member_name(
@qualifiable_expr = @member_access_expr
| @method_invocation_expr
| @element_access_expr;
| @element_access_expr
| @assign_op_call_expr;
conditional_access(
unique int id: @qualifiable_expr ref);

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
description: Add @assign_op_call_expr to @qualifiable_expr.
compatibility: full

View File

@@ -6,204 +6,234 @@ edges
| extensions.cs:5:22:5:24 | obj : B | extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | provenance | |
| extensions.cs:5:22:5:24 | obj : B | extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | provenance | |
| extensions.cs:5:22:5:24 | obj : B | extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | provenance | |
| extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:108:18:108:26 | access to property Prop1 : B | provenance | |
| extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:108:18:108:26 | access to property Prop1 : B | provenance | |
| extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:111:18:111:44 | call to extension accessor get_Prop1 : B | provenance | |
| extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:111:18:111:44 | call to extension accessor get_Prop1 : B | provenance | |
| extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:116:18:116:26 | access to property Prop1 : B | provenance | |
| extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:116:18:116:26 | access to property Prop1 : B | provenance | |
| extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:119:18:119:44 | call to extension accessor get_Prop1 : B | provenance | |
| extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:119:18:119:44 | call to extension accessor get_Prop1 : B | provenance | |
| extensions.cs:13:13:13:15 | value : B | extensions.cs:15:24:15:28 | access to parameter value | provenance | |
| extensions.cs:13:13:13:15 | value : B | extensions.cs:15:24:15:28 | access to parameter value | provenance | |
| extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:194:18:194:35 | access to property StaticProp1 : B | provenance | |
| extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:194:18:194:35 | access to property StaticProp1 : B | provenance | |
| extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:197:18:197:47 | call to extension accessor get_StaticProp1 : B | provenance | |
| extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:197:18:197:47 | call to extension accessor get_StaticProp1 : B | provenance | |
| extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:202:18:202:35 | access to property StaticProp1 : B | provenance | |
| extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:202:18:202:35 | access to property StaticProp1 : B | provenance | |
| extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:205:18:205:47 | call to extension accessor get_StaticProp1 : B | provenance | |
| extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:205:18:205:47 | call to extension accessor get_StaticProp1 : B | provenance | |
| extensions.cs:38:13:38:15 | value : B | extensions.cs:40:24:40:28 | access to parameter value | provenance | |
| extensions.cs:38:13:38:15 | value : B | extensions.cs:40:24:40:28 | access to parameter value | provenance | |
| extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:127:18:127:25 | call to method M1 : B | provenance | |
| extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:127:18:127:25 | call to method M1 : B | provenance | |
| extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:130:18:130:37 | call to method M1 : B | provenance | |
| extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:130:18:130:37 | call to method M1 : B | provenance | |
| extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:135:18:135:25 | call to method M1 : B | provenance | |
| extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:135:18:135:25 | call to method M1 : B | provenance | |
| extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:138:18:138:37 | call to method M1 : B | provenance | |
| extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:138:18:138:37 | call to method M1 : B | provenance | |
| extensions.cs:59:48:59:48 | a : B | extensions.cs:61:20:61:20 | access to parameter a | provenance | |
| extensions.cs:59:48:59:48 | a : B | extensions.cs:61:20:61:20 | access to parameter a | provenance | |
| extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:185:18:185:24 | call to operator - : B | provenance | |
| extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:185:18:185:24 | call to operator - : B | provenance | |
| extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:188:18:188:52 | call to operator - : B | provenance | |
| extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:188:18:188:52 | call to operator - : B | provenance | |
| extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:193:18:193:24 | call to operator - : B | provenance | |
| extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:193:18:193:24 | call to operator - : B | provenance | |
| extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:196:18:196:52 | call to operator - : B | provenance | |
| extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:196:18:196:52 | call to operator - : B | provenance | |
| extensions.cs:76:17:76:17 | b : B | extensions.cs:80:20:80:20 | access to extension synthetic parameter b : B | provenance | |
| extensions.cs:76:17:76:17 | b : B | extensions.cs:80:20:80:20 | access to extension synthetic parameter b : B | provenance | |
| extensions.cs:76:17:76:17 | b : B | extensions.cs:85:20:85:20 | access to extension synthetic parameter b | provenance | |
| extensions.cs:76:17:76:17 | b : B | extensions.cs:85:20:85:20 | access to extension synthetic parameter b | provenance | |
| extensions.cs:89:20:89:20 | t : B | extensions.cs:93:20:93:20 | access to extension synthetic parameter t | provenance | |
| extensions.cs:89:20:89:20 | t : B | extensions.cs:93:20:93:20 | access to extension synthetic parameter t | provenance | |
| extensions.cs:96:33:96:37 | other : B | extensions.cs:98:20:98:24 | access to parameter other : B | provenance | |
| extensions.cs:96:33:96:37 | other : B | extensions.cs:98:20:98:24 | access to parameter other : B | provenance | |
| extensions.cs:108:13:108:14 | access to local variable b1 : B | extensions.cs:109:14:109:15 | access to local variable b1 | provenance | |
| extensions.cs:108:13:108:14 | access to local variable b1 : B | extensions.cs:109:14:109:15 | access to local variable b1 | provenance | |
| extensions.cs:108:18:108:26 | access to property Prop1 : B | extensions.cs:108:13:108:14 | access to local variable b1 : B | provenance | |
| extensions.cs:108:18:108:26 | access to property Prop1 : B | extensions.cs:108:13:108:14 | access to local variable b1 : B | provenance | |
| extensions.cs:111:13:111:14 | access to local variable b2 : B | extensions.cs:112:14:112:15 | access to local variable b2 | provenance | |
| extensions.cs:111:13:111:14 | access to local variable b2 : B | extensions.cs:112:14:112:15 | access to local variable b2 | provenance | |
| extensions.cs:111:18:111:44 | call to extension accessor get_Prop1 : B | extensions.cs:111:13:111:14 | access to local variable b2 : B | provenance | |
| extensions.cs:111:18:111:44 | call to extension accessor get_Prop1 : B | extensions.cs:111:13:111:14 | access to local variable b2 : B | provenance | |
| extensions.cs:118:21:118:32 | call to method Source<B> : B | extensions.cs:13:13:13:15 | value : B | provenance | |
| extensions.cs:118:21:118:32 | call to method Source<B> : B | extensions.cs:13:13:13:15 | value : B | provenance | |
| extensions.cs:120:13:120:13 | access to local variable b : B | extensions.cs:121:37:121:37 | access to local variable b : B | provenance | |
| extensions.cs:120:13:120:13 | access to local variable b : B | extensions.cs:121:37:121:37 | access to local variable b : B | provenance | |
| extensions.cs:120:17:120:30 | call to method Source<B> : B | extensions.cs:120:13:120:13 | access to local variable b : B | provenance | |
| extensions.cs:120:17:120:30 | call to method Source<B> : B | extensions.cs:120:13:120:13 | access to local variable b : B | provenance | |
| extensions.cs:121:37:121:37 | access to local variable b : B | extensions.cs:13:13:13:15 | value : B | provenance | |
| extensions.cs:121:37:121:37 | access to local variable b : B | extensions.cs:13:13:13:15 | value : B | provenance | |
| extensions.cs:127:13:127:14 | access to local variable b1 : B | extensions.cs:128:14:128:15 | access to local variable b1 | provenance | |
| extensions.cs:127:13:127:14 | access to local variable b1 : B | extensions.cs:128:14:128:15 | access to local variable b1 | provenance | |
| extensions.cs:127:18:127:25 | call to method M1 : B | extensions.cs:127:13:127:14 | access to local variable b1 : B | provenance | |
| extensions.cs:127:18:127:25 | call to method M1 : B | extensions.cs:127:13:127:14 | access to local variable b1 : B | provenance | |
| extensions.cs:130:13:130:14 | access to local variable b2 : B | extensions.cs:131:14:131:15 | access to local variable b2 | provenance | |
| extensions.cs:130:13:130:14 | access to local variable b2 : B | extensions.cs:131:14:131:15 | access to local variable b2 | provenance | |
| extensions.cs:130:18:130:37 | call to method M1 : B | extensions.cs:130:13:130:14 | access to local variable b2 : B | provenance | |
| extensions.cs:130:18:130:37 | call to method M1 : B | extensions.cs:130:13:130:14 | access to local variable b2 : B | provenance | |
| extensions.cs:136:13:136:14 | access to local variable b1 : B | extensions.cs:137:9:137:10 | access to local variable b1 : B | provenance | |
| extensions.cs:136:13:136:14 | access to local variable b1 : B | extensions.cs:137:9:137:10 | access to local variable b1 : B | provenance | |
| extensions.cs:136:18:136:29 | call to method Source<B> : B | extensions.cs:136:13:136:14 | access to local variable b1 : B | provenance | |
| extensions.cs:136:18:136:29 | call to method Source<B> : B | extensions.cs:136:13:136:14 | access to local variable b1 : B | provenance | |
| extensions.cs:137:9:137:10 | access to local variable b1 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:137:9:137:10 | access to local variable b1 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:139:13:139:14 | access to local variable b2 : B | extensions.cs:140:25:140:26 | access to local variable b2 : B | provenance | |
| extensions.cs:139:13:139:14 | access to local variable b2 : B | extensions.cs:140:25:140:26 | access to local variable b2 : B | provenance | |
| extensions.cs:139:18:139:31 | call to method Source<B> : B | extensions.cs:139:13:139:14 | access to local variable b2 : B | provenance | |
| extensions.cs:139:18:139:31 | call to method Source<B> : B | extensions.cs:139:13:139:14 | access to local variable b2 : B | provenance | |
| extensions.cs:140:25:140:26 | access to local variable b2 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:140:25:140:26 | access to local variable b2 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:145:13:145:14 | access to local variable b1 : B | extensions.cs:146:18:146:19 | access to local variable b1 : B | provenance | |
| extensions.cs:145:13:145:14 | access to local variable b1 : B | extensions.cs:146:18:146:19 | access to local variable b1 : B | provenance | |
| extensions.cs:145:13:145:14 | access to local variable b1 : B | extensions.cs:149:34:149:35 | access to local variable b1 : B | provenance | |
| extensions.cs:145:13:145:14 | access to local variable b1 : B | extensions.cs:149:34:149:35 | access to local variable b1 : B | provenance | |
| extensions.cs:145:18:145:29 | call to method Source<B> : B | extensions.cs:145:13:145:14 | access to local variable b1 : B | provenance | |
| extensions.cs:145:18:145:29 | call to method Source<B> : B | extensions.cs:145:13:145:14 | access to local variable b1 : B | provenance | |
| extensions.cs:146:13:146:14 | access to local variable b2 : B | extensions.cs:147:14:147:15 | access to local variable b2 | provenance | |
| extensions.cs:146:13:146:14 | access to local variable b2 : B | extensions.cs:147:14:147:15 | access to local variable b2 | provenance | |
| extensions.cs:146:18:146:19 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:146:18:146:19 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:146:18:146:19 | access to local variable b1 : B | extensions.cs:146:18:146:24 | call to method B1 : B | provenance | |
| extensions.cs:146:18:146:19 | access to local variable b1 : B | extensions.cs:146:18:146:24 | call to method B1 : B | provenance | |
| extensions.cs:146:18:146:24 | call to method B1 : B | extensions.cs:146:13:146:14 | access to local variable b2 : B | provenance | |
| extensions.cs:146:18:146:24 | call to method B1 : B | extensions.cs:146:13:146:14 | access to local variable b2 : B | provenance | |
| extensions.cs:149:13:149:14 | access to local variable b3 : B | extensions.cs:150:14:150:15 | access to local variable b3 | provenance | |
| extensions.cs:149:13:149:14 | access to local variable b3 : B | extensions.cs:150:14:150:15 | access to local variable b3 | provenance | |
| extensions.cs:149:18:149:36 | call to method B1 : B | extensions.cs:149:13:149:14 | access to local variable b3 : B | provenance | |
| extensions.cs:149:18:149:36 | call to method B1 : B | extensions.cs:149:13:149:14 | access to local variable b3 : B | provenance | |
| extensions.cs:149:34:149:35 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:149:34:149:35 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:149:34:149:35 | access to local variable b1 : B | extensions.cs:149:18:149:36 | call to method B1 : B | provenance | |
| extensions.cs:149:34:149:35 | access to local variable b1 : B | extensions.cs:149:18:149:36 | call to method B1 : B | provenance | |
| extensions.cs:155:13:155:14 | access to local variable b1 : B | extensions.cs:156:18:156:19 | access to local variable b1 : B | provenance | |
| extensions.cs:155:13:155:14 | access to local variable b1 : B | extensions.cs:156:18:156:19 | access to local variable b1 : B | provenance | |
| extensions.cs:155:18:155:29 | call to method Source<B> : B | extensions.cs:155:13:155:14 | access to local variable b1 : B | provenance | |
| extensions.cs:155:18:155:29 | call to method Source<B> : B | extensions.cs:155:13:155:14 | access to local variable b1 : B | provenance | |
| extensions.cs:156:18:156:19 | access to local variable b1 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:156:18:156:19 | access to local variable b1 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:158:13:158:14 | access to local variable b3 : B | extensions.cs:159:41:159:42 | access to local variable b3 : B | provenance | |
| extensions.cs:158:13:158:14 | access to local variable b3 : B | extensions.cs:159:41:159:42 | access to local variable b3 : B | provenance | |
| extensions.cs:158:18:158:31 | call to method Source<B> : B | extensions.cs:158:13:158:14 | access to local variable b3 : B | provenance | |
| extensions.cs:158:18:158:31 | call to method Source<B> : B | extensions.cs:158:13:158:14 | access to local variable b3 : B | provenance | |
| extensions.cs:159:41:159:42 | access to local variable b3 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:159:41:159:42 | access to local variable b3 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:164:13:164:14 | access to local variable b1 : B | extensions.cs:165:9:165:10 | access to local variable b1 : B | provenance | |
| extensions.cs:164:13:164:14 | access to local variable b1 : B | extensions.cs:165:9:165:10 | access to local variable b1 : B | provenance | |
| extensions.cs:164:18:164:29 | call to method Source<B> : B | extensions.cs:164:13:164:14 | access to local variable b1 : B | provenance | |
| extensions.cs:164:18:164:29 | call to method Source<B> : B | extensions.cs:164:13:164:14 | access to local variable b1 : B | provenance | |
| extensions.cs:165:9:165:10 | access to local variable b1 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:165:9:165:10 | access to local variable b1 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:167:13:167:14 | access to local variable b2 : B | extensions.cs:168:32:168:33 | access to local variable b2 : B | provenance | |
| extensions.cs:167:13:167:14 | access to local variable b2 : B | extensions.cs:168:32:168:33 | access to local variable b2 : B | provenance | |
| extensions.cs:167:18:167:31 | call to method Source<B> : B | extensions.cs:167:13:167:14 | access to local variable b2 : B | provenance | |
| extensions.cs:167:18:167:31 | call to method Source<B> : B | extensions.cs:167:13:167:14 | access to local variable b2 : B | provenance | |
| extensions.cs:168:32:168:33 | access to local variable b2 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:168:32:168:33 | access to local variable b2 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:173:13:173:14 | access to local variable b1 : B | extensions.cs:175:18:175:19 | access to local variable b1 : B | provenance | |
| extensions.cs:173:13:173:14 | access to local variable b1 : B | extensions.cs:175:18:175:19 | access to local variable b1 : B | provenance | |
| extensions.cs:173:18:173:29 | call to method Source<B> : B | extensions.cs:173:13:173:14 | access to local variable b1 : B | provenance | |
| extensions.cs:173:18:173:29 | call to method Source<B> : B | extensions.cs:173:13:173:14 | access to local variable b1 : B | provenance | |
| extensions.cs:175:18:175:19 | access to local variable b1 : B | extensions.cs:59:48:59:48 | a : B | provenance | |
| extensions.cs:175:18:175:19 | access to local variable b1 : B | extensions.cs:59:48:59:48 | a : B | provenance | |
| extensions.cs:177:13:177:14 | access to local variable b4 : B | extensions.cs:178:43:178:44 | access to local variable b4 : B | provenance | |
| extensions.cs:177:13:177:14 | access to local variable b4 : B | extensions.cs:178:43:178:44 | access to local variable b4 : B | provenance | |
| extensions.cs:177:18:177:31 | call to method Source<B> : B | extensions.cs:177:13:177:14 | access to local variable b4 : B | provenance | |
| extensions.cs:177:18:177:31 | call to method Source<B> : B | extensions.cs:177:13:177:14 | access to local variable b4 : B | provenance | |
| extensions.cs:178:43:178:44 | access to local variable b4 : B | extensions.cs:59:48:59:48 | a : B | provenance | |
| extensions.cs:178:43:178:44 | access to local variable b4 : B | extensions.cs:59:48:59:48 | a : B | provenance | |
| extensions.cs:185:13:185:14 | access to local variable b3 : B | extensions.cs:186:14:186:15 | access to local variable b3 | provenance | |
| extensions.cs:185:13:185:14 | access to local variable b3 : B | extensions.cs:186:14:186:15 | access to local variable b3 | provenance | |
| extensions.cs:185:18:185:24 | call to operator - : B | extensions.cs:185:13:185:14 | access to local variable b3 : B | provenance | |
| extensions.cs:185:18:185:24 | call to operator - : B | extensions.cs:185:13:185:14 | access to local variable b3 : B | provenance | |
| extensions.cs:188:13:188:14 | access to local variable b4 : B | extensions.cs:189:14:189:15 | access to local variable b4 | provenance | |
| extensions.cs:188:13:188:14 | access to local variable b4 : B | extensions.cs:189:14:189:15 | access to local variable b4 | provenance | |
| extensions.cs:188:18:188:52 | call to operator - : B | extensions.cs:188:13:188:14 | access to local variable b4 : B | provenance | |
| extensions.cs:188:18:188:52 | call to operator - : B | extensions.cs:188:13:188:14 | access to local variable b4 : B | provenance | |
| extensions.cs:194:13:194:14 | access to local variable b1 : B | extensions.cs:195:14:195:15 | access to local variable b1 | provenance | |
| extensions.cs:194:13:194:14 | access to local variable b1 : B | extensions.cs:195:14:195:15 | access to local variable b1 | provenance | |
| extensions.cs:194:18:194:35 | access to property StaticProp1 : B | extensions.cs:194:13:194:14 | access to local variable b1 : B | provenance | |
| extensions.cs:194:18:194:35 | access to property StaticProp1 : B | extensions.cs:194:13:194:14 | access to local variable b1 : B | provenance | |
| extensions.cs:197:13:197:14 | access to local variable b2 : B | extensions.cs:198:14:198:15 | access to local variable b2 | provenance | |
| extensions.cs:197:13:197:14 | access to local variable b2 : B | extensions.cs:198:14:198:15 | access to local variable b2 | provenance | |
| extensions.cs:197:18:197:47 | call to extension accessor get_StaticProp1 : B | extensions.cs:197:13:197:14 | access to local variable b2 : B | provenance | |
| extensions.cs:197:18:197:47 | call to extension accessor get_StaticProp1 : B | extensions.cs:197:13:197:14 | access to local variable b2 : B | provenance | |
| extensions.cs:203:13:203:14 | access to local variable b1 : B | extensions.cs:204:30:204:31 | access to local variable b1 : B | provenance | |
| extensions.cs:203:13:203:14 | access to local variable b1 : B | extensions.cs:204:30:204:31 | access to local variable b1 : B | provenance | |
| extensions.cs:203:18:203:30 | call to method Source<B> : B | extensions.cs:203:13:203:14 | access to local variable b1 : B | provenance | |
| extensions.cs:203:18:203:30 | call to method Source<B> : B | extensions.cs:203:13:203:14 | access to local variable b1 : B | provenance | |
| extensions.cs:204:30:204:31 | access to local variable b1 : B | extensions.cs:38:13:38:15 | value : B | provenance | |
| extensions.cs:204:30:204:31 | access to local variable b1 : B | extensions.cs:38:13:38:15 | value : B | provenance | |
| extensions.cs:206:13:206:14 | access to local variable b2 : B | extensions.cs:207:38:207:39 | access to local variable b2 : B | provenance | |
| extensions.cs:206:13:206:14 | access to local variable b2 : B | extensions.cs:207:38:207:39 | access to local variable b2 : B | provenance | |
| extensions.cs:206:18:206:31 | call to method Source<B> : B | extensions.cs:206:13:206:14 | access to local variable b2 : B | provenance | |
| extensions.cs:206:18:206:31 | call to method Source<B> : B | extensions.cs:206:13:206:14 | access to local variable b2 : B | provenance | |
| extensions.cs:207:38:207:39 | access to local variable b2 : B | extensions.cs:38:13:38:15 | value : B | provenance | |
| extensions.cs:207:38:207:39 | access to local variable b2 : B | extensions.cs:38:13:38:15 | value : B | provenance | |
| extensions.cs:212:13:212:14 | access to local variable b1 : B | extensions.cs:213:9:213:10 | access to local variable b1 : B | provenance | |
| extensions.cs:212:13:212:14 | access to local variable b1 : B | extensions.cs:213:9:213:10 | access to local variable b1 : B | provenance | |
| extensions.cs:212:18:212:30 | call to method Source<B> : B | extensions.cs:212:13:212:14 | access to local variable b1 : B | provenance | |
| extensions.cs:212:18:212:30 | call to method Source<B> : B | extensions.cs:212:13:212:14 | access to local variable b1 : B | provenance | |
| extensions.cs:213:9:213:10 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:213:9:213:10 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:215:13:215:14 | access to local variable b2 : B | extensions.cs:216:25:216:26 | access to local variable b2 : B | provenance | |
| extensions.cs:215:13:215:14 | access to local variable b2 : B | extensions.cs:216:25:216:26 | access to local variable b2 : B | provenance | |
| extensions.cs:215:18:215:31 | call to method Source<B> : B | extensions.cs:215:13:215:14 | access to local variable b2 : B | provenance | |
| extensions.cs:215:18:215:31 | call to method Source<B> : B | extensions.cs:215:13:215:14 | access to local variable b2 : B | provenance | |
| extensions.cs:216:25:216:26 | access to local variable b2 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:216:25:216:26 | access to local variable b2 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:221:13:221:14 | access to local variable b1 : B | extensions.cs:222:9:222:10 | access to local variable b1 : B | provenance | |
| extensions.cs:221:13:221:14 | access to local variable b1 : B | extensions.cs:222:9:222:10 | access to local variable b1 : B | provenance | |
| extensions.cs:221:18:221:30 | call to method Source<B> : B | extensions.cs:221:13:221:14 | access to local variable b1 : B | provenance | |
| extensions.cs:221:18:221:30 | call to method Source<B> : B | extensions.cs:221:13:221:14 | access to local variable b1 : B | provenance | |
| extensions.cs:222:9:222:10 | access to local variable b1 : B | extensions.cs:89:20:89:20 | t : B | provenance | |
| extensions.cs:222:9:222:10 | access to local variable b1 : B | extensions.cs:89:20:89:20 | t : B | provenance | |
| extensions.cs:224:13:224:14 | access to local variable b2 : B | extensions.cs:225:32:225:33 | access to local variable b2 : B | provenance | |
| extensions.cs:224:13:224:14 | access to local variable b2 : B | extensions.cs:225:32:225:33 | access to local variable b2 : B | provenance | |
| extensions.cs:224:18:224:31 | call to method Source<B> : B | extensions.cs:224:13:224:14 | access to local variable b2 : B | provenance | |
| extensions.cs:224:18:224:31 | call to method Source<B> : B | extensions.cs:224:13:224:14 | access to local variable b2 : B | provenance | |
| extensions.cs:225:32:225:33 | access to local variable b2 : B | extensions.cs:89:20:89:20 | t : B | provenance | |
| extensions.cs:225:32:225:33 | access to local variable b2 : B | extensions.cs:89:20:89:20 | t : B | provenance | |
| extensions.cs:231:13:231:14 | access to local variable b1 : B | extensions.cs:232:32:232:33 | access to local variable b1 : B | provenance | |
| extensions.cs:231:13:231:14 | access to local variable b1 : B | extensions.cs:232:32:232:33 | access to local variable b1 : B | provenance | |
| extensions.cs:231:13:231:14 | access to local variable b1 : B | extensions.cs:235:46:235:47 | access to local variable b1 : B | provenance | |
| extensions.cs:231:13:231:14 | access to local variable b1 : B | extensions.cs:235:46:235:47 | access to local variable b1 : B | provenance | |
| extensions.cs:231:18:231:30 | call to method Source<B> : B | extensions.cs:231:13:231:14 | access to local variable b1 : B | provenance | |
| extensions.cs:231:18:231:30 | call to method Source<B> : B | extensions.cs:231:13:231:14 | access to local variable b1 : B | provenance | |
| extensions.cs:232:13:232:14 | access to local variable b2 : B | extensions.cs:233:14:233:15 | access to local variable b2 | provenance | |
| extensions.cs:232:13:232:14 | access to local variable b2 : B | extensions.cs:233:14:233:15 | access to local variable b2 | provenance | |
| extensions.cs:232:18:232:34 | call to method GenericM2<B> : B | extensions.cs:232:13:232:14 | access to local variable b2 : B | provenance | |
| extensions.cs:232:18:232:34 | call to method GenericM2<B> : B | extensions.cs:232:13:232:14 | access to local variable b2 : B | provenance | |
| extensions.cs:232:32:232:33 | access to local variable b1 : B | extensions.cs:96:33:96:37 | other : B | provenance | |
| extensions.cs:232:32:232:33 | access to local variable b1 : B | extensions.cs:96:33:96:37 | other : B | provenance | |
| extensions.cs:232:32:232:33 | access to local variable b1 : B | extensions.cs:232:18:232:34 | call to method GenericM2<B> : B | provenance | |
| extensions.cs:232:32:232:33 | access to local variable b1 : B | extensions.cs:232:18:232:34 | call to method GenericM2<B> : B | provenance | |
| extensions.cs:235:13:235:14 | access to local variable b3 : B | extensions.cs:236:14:236:15 | access to local variable b3 | provenance | |
| extensions.cs:235:13:235:14 | access to local variable b3 : B | extensions.cs:236:14:236:15 | access to local variable b3 | provenance | |
| extensions.cs:235:18:235:48 | call to method GenericM2<B> : B | extensions.cs:235:13:235:14 | access to local variable b3 : B | provenance | |
| extensions.cs:235:18:235:48 | call to method GenericM2<B> : B | extensions.cs:235:13:235:14 | access to local variable b3 : B | provenance | |
| extensions.cs:235:46:235:47 | access to local variable b1 : B | extensions.cs:96:33:96:37 | other : B | provenance | |
| extensions.cs:235:46:235:47 | access to local variable b1 : B | extensions.cs:96:33:96:37 | other : B | provenance | |
| extensions.cs:235:46:235:47 | access to local variable b1 : B | extensions.cs:235:18:235:48 | call to method GenericM2<B> : B | provenance | |
| extensions.cs:235:46:235:47 | access to local variable b1 : B | extensions.cs:235:18:235:48 | call to method GenericM2<B> : B | provenance | |
| extensions.cs:91:35:91:36 | c1 : C [property Prop] : Object | extensions.cs:93:22:93:23 | access to parameter c1 : C [property Prop] : Object | provenance | |
| extensions.cs:91:35:91:36 | c1 : C [property Prop] : Object | extensions.cs:93:22:93:23 | access to parameter c1 : C [property Prop] : Object | provenance | |
| extensions.cs:93:13:93:13 | [post] access to extension synthetic parameter c : C [property Prop] : Object | extensions.cs:89:17:89:17 | c [Return] : C [property Prop] : Object | provenance | |
| extensions.cs:93:13:93:13 | [post] access to extension synthetic parameter c : C [property Prop] : Object | extensions.cs:89:17:89:17 | c [Return] : C [property Prop] : Object | provenance | |
| extensions.cs:93:22:93:23 | access to parameter c1 : C [property Prop] : Object | extensions.cs:93:22:93:28 | access to property Prop : Object | provenance | |
| extensions.cs:93:22:93:23 | access to parameter c1 : C [property Prop] : Object | extensions.cs:93:22:93:28 | access to property Prop : Object | provenance | |
| extensions.cs:93:22:93:28 | access to property Prop : Object | extensions.cs:93:13:93:13 | [post] access to extension synthetic parameter c : C [property Prop] : Object | provenance | |
| extensions.cs:93:22:93:28 | access to property Prop : Object | extensions.cs:93:13:93:13 | [post] access to extension synthetic parameter c : C [property Prop] : Object | provenance | |
| extensions.cs:97:20:97:20 | t : B | extensions.cs:101:20:101:20 | access to extension synthetic parameter t | provenance | |
| extensions.cs:97:20:97:20 | t : B | extensions.cs:101:20:101:20 | access to extension synthetic parameter t | provenance | |
| extensions.cs:104:33:104:37 | other : B | extensions.cs:106:20:106:24 | access to parameter other : B | provenance | |
| extensions.cs:104:33:104:37 | other : B | extensions.cs:106:20:106:24 | access to parameter other : B | provenance | |
| extensions.cs:116:13:116:14 | access to local variable b1 : B | extensions.cs:117:14:117:15 | access to local variable b1 | provenance | |
| extensions.cs:116:13:116:14 | access to local variable b1 : B | extensions.cs:117:14:117:15 | access to local variable b1 | provenance | |
| extensions.cs:116:18:116:26 | access to property Prop1 : B | extensions.cs:116:13:116:14 | access to local variable b1 : B | provenance | |
| extensions.cs:116:18:116:26 | access to property Prop1 : B | extensions.cs:116:13:116:14 | access to local variable b1 : B | provenance | |
| extensions.cs:119:13:119:14 | access to local variable b2 : B | extensions.cs:120:14:120:15 | access to local variable b2 | provenance | |
| extensions.cs:119:13:119:14 | access to local variable b2 : B | extensions.cs:120:14:120:15 | access to local variable b2 | provenance | |
| extensions.cs:119:18:119:44 | call to extension accessor get_Prop1 : B | extensions.cs:119:13:119:14 | access to local variable b2 : B | provenance | |
| extensions.cs:119:18:119:44 | call to extension accessor get_Prop1 : B | extensions.cs:119:13:119:14 | access to local variable b2 : B | provenance | |
| extensions.cs:126:21:126:32 | call to method Source<B> : B | extensions.cs:13:13:13:15 | value : B | provenance | |
| extensions.cs:126:21:126:32 | call to method Source<B> : B | extensions.cs:13:13:13:15 | value : B | provenance | |
| extensions.cs:128:13:128:13 | access to local variable b : B | extensions.cs:129:37:129:37 | access to local variable b : B | provenance | |
| extensions.cs:128:13:128:13 | access to local variable b : B | extensions.cs:129:37:129:37 | access to local variable b : B | provenance | |
| extensions.cs:128:17:128:30 | call to method Source<B> : B | extensions.cs:128:13:128:13 | access to local variable b : B | provenance | |
| extensions.cs:128:17:128:30 | call to method Source<B> : B | extensions.cs:128:13:128:13 | access to local variable b : B | provenance | |
| extensions.cs:129:37:129:37 | access to local variable b : B | extensions.cs:13:13:13:15 | value : B | provenance | |
| extensions.cs:129:37:129:37 | access to local variable b : B | extensions.cs:13:13:13:15 | value : B | provenance | |
| extensions.cs:135:13:135:14 | access to local variable b1 : B | extensions.cs:136:14:136:15 | access to local variable b1 | provenance | |
| extensions.cs:135:13:135:14 | access to local variable b1 : B | extensions.cs:136:14:136:15 | access to local variable b1 | provenance | |
| extensions.cs:135:18:135:25 | call to method M1 : B | extensions.cs:135:13:135:14 | access to local variable b1 : B | provenance | |
| extensions.cs:135:18:135:25 | call to method M1 : B | extensions.cs:135:13:135:14 | access to local variable b1 : B | provenance | |
| extensions.cs:138:13:138:14 | access to local variable b2 : B | extensions.cs:139:14:139:15 | access to local variable b2 | provenance | |
| extensions.cs:138:13:138:14 | access to local variable b2 : B | extensions.cs:139:14:139:15 | access to local variable b2 | provenance | |
| extensions.cs:138:18:138:37 | call to method M1 : B | extensions.cs:138:13:138:14 | access to local variable b2 : B | provenance | |
| extensions.cs:138:18:138:37 | call to method M1 : B | extensions.cs:138:13:138:14 | access to local variable b2 : B | provenance | |
| extensions.cs:144:13:144:14 | access to local variable b1 : B | extensions.cs:145:9:145:10 | access to local variable b1 : B | provenance | |
| extensions.cs:144:13:144:14 | access to local variable b1 : B | extensions.cs:145:9:145:10 | access to local variable b1 : B | provenance | |
| extensions.cs:144:18:144:29 | call to method Source<B> : B | extensions.cs:144:13:144:14 | access to local variable b1 : B | provenance | |
| extensions.cs:144:18:144:29 | call to method Source<B> : B | extensions.cs:144:13:144:14 | access to local variable b1 : B | provenance | |
| extensions.cs:145:9:145:10 | access to local variable b1 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:145:9:145:10 | access to local variable b1 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:147:13:147:14 | access to local variable b2 : B | extensions.cs:148:25:148:26 | access to local variable b2 : B | provenance | |
| extensions.cs:147:13:147:14 | access to local variable b2 : B | extensions.cs:148:25:148:26 | access to local variable b2 : B | provenance | |
| extensions.cs:147:18:147:31 | call to method Source<B> : B | extensions.cs:147:13:147:14 | access to local variable b2 : B | provenance | |
| extensions.cs:147:18:147:31 | call to method Source<B> : B | extensions.cs:147:13:147:14 | access to local variable b2 : B | provenance | |
| extensions.cs:148:25:148:26 | access to local variable b2 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:148:25:148:26 | access to local variable b2 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:153:13:153:14 | access to local variable b1 : B | extensions.cs:154:18:154:19 | access to local variable b1 : B | provenance | |
| extensions.cs:153:13:153:14 | access to local variable b1 : B | extensions.cs:154:18:154:19 | access to local variable b1 : B | provenance | |
| extensions.cs:153:13:153:14 | access to local variable b1 : B | extensions.cs:157:34:157:35 | access to local variable b1 : B | provenance | |
| extensions.cs:153:13:153:14 | access to local variable b1 : B | extensions.cs:157:34:157:35 | access to local variable b1 : B | provenance | |
| extensions.cs:153:18:153:29 | call to method Source<B> : B | extensions.cs:153:13:153:14 | access to local variable b1 : B | provenance | |
| extensions.cs:153:18:153:29 | call to method Source<B> : B | extensions.cs:153:13:153:14 | access to local variable b1 : B | provenance | |
| extensions.cs:154:13:154:14 | access to local variable b2 : B | extensions.cs:155:14:155:15 | access to local variable b2 | provenance | |
| extensions.cs:154:13:154:14 | access to local variable b2 : B | extensions.cs:155:14:155:15 | access to local variable b2 | provenance | |
| extensions.cs:154:18:154:19 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:154:18:154:19 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:154:18:154:19 | access to local variable b1 : B | extensions.cs:154:18:154:24 | call to method B1 : B | provenance | |
| extensions.cs:154:18:154:19 | access to local variable b1 : B | extensions.cs:154:18:154:24 | call to method B1 : B | provenance | |
| extensions.cs:154:18:154:24 | call to method B1 : B | extensions.cs:154:13:154:14 | access to local variable b2 : B | provenance | |
| extensions.cs:154:18:154:24 | call to method B1 : B | extensions.cs:154:13:154:14 | access to local variable b2 : B | provenance | |
| extensions.cs:157:13:157:14 | access to local variable b3 : B | extensions.cs:158:14:158:15 | access to local variable b3 | provenance | |
| extensions.cs:157:13:157:14 | access to local variable b3 : B | extensions.cs:158:14:158:15 | access to local variable b3 | provenance | |
| extensions.cs:157:18:157:36 | call to method B1 : B | extensions.cs:157:13:157:14 | access to local variable b3 : B | provenance | |
| extensions.cs:157:18:157:36 | call to method B1 : B | extensions.cs:157:13:157:14 | access to local variable b3 : B | provenance | |
| extensions.cs:157:34:157:35 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:157:34:157:35 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:157:34:157:35 | access to local variable b1 : B | extensions.cs:157:18:157:36 | call to method B1 : B | provenance | |
| extensions.cs:157:34:157:35 | access to local variable b1 : B | extensions.cs:157:18:157:36 | call to method B1 : B | provenance | |
| extensions.cs:163:13:163:14 | access to local variable b1 : B | extensions.cs:164:18:164:19 | access to local variable b1 : B | provenance | |
| extensions.cs:163:13:163:14 | access to local variable b1 : B | extensions.cs:164:18:164:19 | access to local variable b1 : B | provenance | |
| extensions.cs:163:18:163:29 | call to method Source<B> : B | extensions.cs:163:13:163:14 | access to local variable b1 : B | provenance | |
| extensions.cs:163:18:163:29 | call to method Source<B> : B | extensions.cs:163:13:163:14 | access to local variable b1 : B | provenance | |
| extensions.cs:164:18:164:19 | access to local variable b1 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:164:18:164:19 | access to local variable b1 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:166:13:166:14 | access to local variable b3 : B | extensions.cs:167:41:167:42 | access to local variable b3 : B | provenance | |
| extensions.cs:166:13:166:14 | access to local variable b3 : B | extensions.cs:167:41:167:42 | access to local variable b3 : B | provenance | |
| extensions.cs:166:18:166:31 | call to method Source<B> : B | extensions.cs:166:13:166:14 | access to local variable b3 : B | provenance | |
| extensions.cs:166:18:166:31 | call to method Source<B> : B | extensions.cs:166:13:166:14 | access to local variable b3 : B | provenance | |
| extensions.cs:167:41:167:42 | access to local variable b3 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:167:41:167:42 | access to local variable b3 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:172:13:172:14 | access to local variable b1 : B | extensions.cs:173:9:173:10 | access to local variable b1 : B | provenance | |
| extensions.cs:172:13:172:14 | access to local variable b1 : B | extensions.cs:173:9:173:10 | access to local variable b1 : B | provenance | |
| extensions.cs:172:18:172:29 | call to method Source<B> : B | extensions.cs:172:13:172:14 | access to local variable b1 : B | provenance | |
| extensions.cs:172:18:172:29 | call to method Source<B> : B | extensions.cs:172:13:172:14 | access to local variable b1 : B | provenance | |
| extensions.cs:173:9:173:10 | access to local variable b1 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:173:9:173:10 | access to local variable b1 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:175:13:175:14 | access to local variable b2 : B | extensions.cs:176:32:176:33 | access to local variable b2 : B | provenance | |
| extensions.cs:175:13:175:14 | access to local variable b2 : B | extensions.cs:176:32:176:33 | access to local variable b2 : B | provenance | |
| extensions.cs:175:18:175:31 | call to method Source<B> : B | extensions.cs:175:13:175:14 | access to local variable b2 : B | provenance | |
| extensions.cs:175:18:175:31 | call to method Source<B> : B | extensions.cs:175:13:175:14 | access to local variable b2 : B | provenance | |
| extensions.cs:176:32:176:33 | access to local variable b2 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:176:32:176:33 | access to local variable b2 : B | extensions.cs:5:22:5:24 | obj : B | provenance | |
| extensions.cs:181:13:181:14 | access to local variable b1 : B | extensions.cs:183:18:183:19 | access to local variable b1 : B | provenance | |
| extensions.cs:181:13:181:14 | access to local variable b1 : B | extensions.cs:183:18:183:19 | access to local variable b1 : B | provenance | |
| extensions.cs:181:18:181:29 | call to method Source<B> : B | extensions.cs:181:13:181:14 | access to local variable b1 : B | provenance | |
| extensions.cs:181:18:181:29 | call to method Source<B> : B | extensions.cs:181:13:181:14 | access to local variable b1 : B | provenance | |
| extensions.cs:183:18:183:19 | access to local variable b1 : B | extensions.cs:59:48:59:48 | a : B | provenance | |
| extensions.cs:183:18:183:19 | access to local variable b1 : B | extensions.cs:59:48:59:48 | a : B | provenance | |
| extensions.cs:185:13:185:14 | access to local variable b4 : B | extensions.cs:186:43:186:44 | access to local variable b4 : B | provenance | |
| extensions.cs:185:13:185:14 | access to local variable b4 : B | extensions.cs:186:43:186:44 | access to local variable b4 : B | provenance | |
| extensions.cs:185:18:185:31 | call to method Source<B> : B | extensions.cs:185:13:185:14 | access to local variable b4 : B | provenance | |
| extensions.cs:185:18:185:31 | call to method Source<B> : B | extensions.cs:185:13:185:14 | access to local variable b4 : B | provenance | |
| extensions.cs:186:43:186:44 | access to local variable b4 : B | extensions.cs:59:48:59:48 | a : B | provenance | |
| extensions.cs:186:43:186:44 | access to local variable b4 : B | extensions.cs:59:48:59:48 | a : B | provenance | |
| extensions.cs:193:13:193:14 | access to local variable b3 : B | extensions.cs:194:14:194:15 | access to local variable b3 | provenance | |
| extensions.cs:193:13:193:14 | access to local variable b3 : B | extensions.cs:194:14:194:15 | access to local variable b3 | provenance | |
| extensions.cs:193:18:193:24 | call to operator - : B | extensions.cs:193:13:193:14 | access to local variable b3 : B | provenance | |
| extensions.cs:193:18:193:24 | call to operator - : B | extensions.cs:193:13:193:14 | access to local variable b3 : B | provenance | |
| extensions.cs:196:13:196:14 | access to local variable b4 : B | extensions.cs:197:14:197:15 | access to local variable b4 | provenance | |
| extensions.cs:196:13:196:14 | access to local variable b4 : B | extensions.cs:197:14:197:15 | access to local variable b4 | provenance | |
| extensions.cs:196:18:196:52 | call to operator - : B | extensions.cs:196:13:196:14 | access to local variable b4 : B | provenance | |
| extensions.cs:196:18:196:52 | call to operator - : B | extensions.cs:196:13:196:14 | access to local variable b4 : B | provenance | |
| extensions.cs:202:13:202:14 | access to local variable b1 : B | extensions.cs:203:14:203:15 | access to local variable b1 | provenance | |
| extensions.cs:202:13:202:14 | access to local variable b1 : B | extensions.cs:203:14:203:15 | access to local variable b1 | provenance | |
| extensions.cs:202:18:202:35 | access to property StaticProp1 : B | extensions.cs:202:13:202:14 | access to local variable b1 : B | provenance | |
| extensions.cs:202:18:202:35 | access to property StaticProp1 : B | extensions.cs:202:13:202:14 | access to local variable b1 : B | provenance | |
| extensions.cs:205:13:205:14 | access to local variable b2 : B | extensions.cs:206:14:206:15 | access to local variable b2 | provenance | |
| extensions.cs:205:13:205:14 | access to local variable b2 : B | extensions.cs:206:14:206:15 | access to local variable b2 | provenance | |
| extensions.cs:205:18:205:47 | call to extension accessor get_StaticProp1 : B | extensions.cs:205:13:205:14 | access to local variable b2 : B | provenance | |
| extensions.cs:205:18:205:47 | call to extension accessor get_StaticProp1 : B | extensions.cs:205:13:205:14 | access to local variable b2 : B | provenance | |
| extensions.cs:211:13:211:14 | access to local variable b1 : B | extensions.cs:212:30:212:31 | access to local variable b1 : B | provenance | |
| extensions.cs:211:13:211:14 | access to local variable b1 : B | extensions.cs:212:30:212:31 | access to local variable b1 : B | provenance | |
| extensions.cs:211:18:211:30 | call to method Source<B> : B | extensions.cs:211:13:211:14 | access to local variable b1 : B | provenance | |
| extensions.cs:211:18:211:30 | call to method Source<B> : B | extensions.cs:211:13:211:14 | access to local variable b1 : B | provenance | |
| extensions.cs:212:30:212:31 | access to local variable b1 : B | extensions.cs:38:13:38:15 | value : B | provenance | |
| extensions.cs:212:30:212:31 | access to local variable b1 : B | extensions.cs:38:13:38:15 | value : B | provenance | |
| extensions.cs:214:13:214:14 | access to local variable b2 : B | extensions.cs:215:38:215:39 | access to local variable b2 : B | provenance | |
| extensions.cs:214:13:214:14 | access to local variable b2 : B | extensions.cs:215:38:215:39 | access to local variable b2 : B | provenance | |
| extensions.cs:214:18:214:31 | call to method Source<B> : B | extensions.cs:214:13:214:14 | access to local variable b2 : B | provenance | |
| extensions.cs:214:18:214:31 | call to method Source<B> : B | extensions.cs:214:13:214:14 | access to local variable b2 : B | provenance | |
| extensions.cs:215:38:215:39 | access to local variable b2 : B | extensions.cs:38:13:38:15 | value : B | provenance | |
| extensions.cs:215:38:215:39 | access to local variable b2 : B | extensions.cs:38:13:38:15 | value : B | provenance | |
| extensions.cs:220:13:220:14 | access to local variable b1 : B | extensions.cs:221:9:221:10 | access to local variable b1 : B | provenance | |
| extensions.cs:220:13:220:14 | access to local variable b1 : B | extensions.cs:221:9:221:10 | access to local variable b1 : B | provenance | |
| extensions.cs:220:18:220:30 | call to method Source<B> : B | extensions.cs:220:13:220:14 | access to local variable b1 : B | provenance | |
| extensions.cs:220:18:220:30 | call to method Source<B> : B | extensions.cs:220:13:220:14 | access to local variable b1 : B | provenance | |
| extensions.cs:221:9:221:10 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:221:9:221:10 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:223:13:223:14 | access to local variable b2 : B | extensions.cs:224:25:224:26 | access to local variable b2 : B | provenance | |
| extensions.cs:223:13:223:14 | access to local variable b2 : B | extensions.cs:224:25:224:26 | access to local variable b2 : B | provenance | |
| extensions.cs:223:18:223:31 | call to method Source<B> : B | extensions.cs:223:13:223:14 | access to local variable b2 : B | provenance | |
| extensions.cs:223:18:223:31 | call to method Source<B> : B | extensions.cs:223:13:223:14 | access to local variable b2 : B | provenance | |
| extensions.cs:224:25:224:26 | access to local variable b2 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:224:25:224:26 | access to local variable b2 : B | extensions.cs:76:17:76:17 | b : B | provenance | |
| extensions.cs:229:13:229:14 | access to local variable b1 : B | extensions.cs:230:9:230:10 | access to local variable b1 : B | provenance | |
| extensions.cs:229:13:229:14 | access to local variable b1 : B | extensions.cs:230:9:230:10 | access to local variable b1 : B | provenance | |
| extensions.cs:229:18:229:30 | call to method Source<B> : B | extensions.cs:229:13:229:14 | access to local variable b1 : B | provenance | |
| extensions.cs:229:18:229:30 | call to method Source<B> : B | extensions.cs:229:13:229:14 | access to local variable b1 : B | provenance | |
| extensions.cs:230:9:230:10 | access to local variable b1 : B | extensions.cs:97:20:97:20 | t : B | provenance | |
| extensions.cs:230:9:230:10 | access to local variable b1 : B | extensions.cs:97:20:97:20 | t : B | provenance | |
| extensions.cs:232:13:232:14 | access to local variable b2 : B | extensions.cs:233:32:233:33 | access to local variable b2 : B | provenance | |
| extensions.cs:232:13:232:14 | access to local variable b2 : B | extensions.cs:233:32:233:33 | access to local variable b2 : B | provenance | |
| extensions.cs:232:18:232:31 | call to method Source<B> : B | extensions.cs:232:13:232:14 | access to local variable b2 : B | provenance | |
| extensions.cs:232:18:232:31 | call to method Source<B> : B | extensions.cs:232:13:232:14 | access to local variable b2 : B | provenance | |
| extensions.cs:233:32:233:33 | access to local variable b2 : B | extensions.cs:97:20:97:20 | t : B | provenance | |
| extensions.cs:233:32:233:33 | access to local variable b2 : B | extensions.cs:97:20:97:20 | t : B | provenance | |
| extensions.cs:239:13:239:14 | access to local variable b1 : B | extensions.cs:240:32:240:33 | access to local variable b1 : B | provenance | |
| extensions.cs:239:13:239:14 | access to local variable b1 : B | extensions.cs:240:32:240:33 | access to local variable b1 : B | provenance | |
| extensions.cs:239:13:239:14 | access to local variable b1 : B | extensions.cs:243:46:243:47 | access to local variable b1 : B | provenance | |
| extensions.cs:239:13:239:14 | access to local variable b1 : B | extensions.cs:243:46:243:47 | access to local variable b1 : B | provenance | |
| extensions.cs:239:18:239:30 | call to method Source<B> : B | extensions.cs:239:13:239:14 | access to local variable b1 : B | provenance | |
| extensions.cs:239:18:239:30 | call to method Source<B> : B | extensions.cs:239:13:239:14 | access to local variable b1 : B | provenance | |
| extensions.cs:240:13:240:14 | access to local variable b2 : B | extensions.cs:241:14:241:15 | access to local variable b2 | provenance | |
| extensions.cs:240:13:240:14 | access to local variable b2 : B | extensions.cs:241:14:241:15 | access to local variable b2 | provenance | |
| extensions.cs:240:18:240:34 | call to method GenericM2<B> : B | extensions.cs:240:13:240:14 | access to local variable b2 : B | provenance | |
| extensions.cs:240:18:240:34 | call to method GenericM2<B> : B | extensions.cs:240:13:240:14 | access to local variable b2 : B | provenance | |
| extensions.cs:240:32:240:33 | access to local variable b1 : B | extensions.cs:104:33:104:37 | other : B | provenance | |
| extensions.cs:240:32:240:33 | access to local variable b1 : B | extensions.cs:104:33:104:37 | other : B | provenance | |
| extensions.cs:240:32:240:33 | access to local variable b1 : B | extensions.cs:240:18:240:34 | call to method GenericM2<B> : B | provenance | |
| extensions.cs:240:32:240:33 | access to local variable b1 : B | extensions.cs:240:18:240:34 | call to method GenericM2<B> : B | provenance | |
| extensions.cs:243:13:243:14 | access to local variable b3 : B | extensions.cs:244:14:244:15 | access to local variable b3 | provenance | |
| extensions.cs:243:13:243:14 | access to local variable b3 : B | extensions.cs:244:14:244:15 | access to local variable b3 | provenance | |
| extensions.cs:243:18:243:48 | call to method GenericM2<B> : B | extensions.cs:243:13:243:14 | access to local variable b3 : B | provenance | |
| extensions.cs:243:18:243:48 | call to method GenericM2<B> : B | extensions.cs:243:13:243:14 | access to local variable b3 : B | provenance | |
| extensions.cs:243:46:243:47 | access to local variable b1 : B | extensions.cs:104:33:104:37 | other : B | provenance | |
| extensions.cs:243:46:243:47 | access to local variable b1 : B | extensions.cs:104:33:104:37 | other : B | provenance | |
| extensions.cs:243:46:243:47 | access to local variable b1 : B | extensions.cs:243:18:243:48 | call to method GenericM2<B> : B | provenance | |
| extensions.cs:243:46:243:47 | access to local variable b1 : B | extensions.cs:243:18:243:48 | call to method GenericM2<B> : B | provenance | |
| extensions.cs:250:9:250:10 | [post] access to local variable c1 : C [property Prop] : Object | extensions.cs:252:15:252:16 | access to local variable c1 : C [property Prop] : Object | provenance | |
| extensions.cs:250:9:250:10 | [post] access to local variable c1 : C [property Prop] : Object | extensions.cs:252:15:252:16 | access to local variable c1 : C [property Prop] : Object | provenance | |
| extensions.cs:250:9:250:10 | [post] access to local variable c1 : C [property Prop] : Object | extensions.cs:256:54:256:55 | access to local variable c1 : C [property Prop] : Object | provenance | |
| extensions.cs:250:9:250:10 | [post] access to local variable c1 : C [property Prop] : Object | extensions.cs:256:54:256:55 | access to local variable c1 : C [property Prop] : Object | provenance | |
| extensions.cs:250:19:250:36 | call to method Source<Object> : Object | extensions.cs:250:9:250:10 | [post] access to local variable c1 : C [property Prop] : Object | provenance | |
| extensions.cs:250:19:250:36 | call to method Source<Object> : Object | extensions.cs:250:9:250:10 | [post] access to local variable c1 : C [property Prop] : Object | provenance | |
| extensions.cs:252:9:252:10 | [post] access to local variable c2 : C [property Prop] : Object | extensions.cs:253:14:253:15 | access to local variable c2 : C [property Prop] : Object | provenance | |
| extensions.cs:252:9:252:10 | [post] access to local variable c2 : C [property Prop] : Object | extensions.cs:253:14:253:15 | access to local variable c2 : C [property Prop] : Object | provenance | |
| extensions.cs:252:15:252:16 | access to local variable c1 : C [property Prop] : Object | extensions.cs:91:35:91:36 | c1 : C [property Prop] : Object | provenance | |
| extensions.cs:252:15:252:16 | access to local variable c1 : C [property Prop] : Object | extensions.cs:91:35:91:36 | c1 : C [property Prop] : Object | provenance | |
| extensions.cs:252:15:252:16 | access to local variable c1 : C [property Prop] : Object | extensions.cs:252:9:252:10 | [post] access to local variable c2 : C [property Prop] : Object | provenance | |
| extensions.cs:252:15:252:16 | access to local variable c1 : C [property Prop] : Object | extensions.cs:252:9:252:10 | [post] access to local variable c2 : C [property Prop] : Object | provenance | |
| extensions.cs:253:14:253:15 | access to local variable c2 : C [property Prop] : Object | extensions.cs:253:14:253:20 | access to property Prop | provenance | |
| extensions.cs:253:14:253:15 | access to local variable c2 : C [property Prop] : Object | extensions.cs:253:14:253:20 | access to property Prop | provenance | |
| extensions.cs:256:50:256:51 | [post] access to local variable c3 : C [property Prop] : Object | extensions.cs:257:14:257:15 | access to local variable c3 : C [property Prop] : Object | provenance | |
| extensions.cs:256:50:256:51 | [post] access to local variable c3 : C [property Prop] : Object | extensions.cs:257:14:257:15 | access to local variable c3 : C [property Prop] : Object | provenance | |
| extensions.cs:256:54:256:55 | access to local variable c1 : C [property Prop] : Object | extensions.cs:91:35:91:36 | c1 : C [property Prop] : Object | provenance | |
| extensions.cs:256:54:256:55 | access to local variable c1 : C [property Prop] : Object | extensions.cs:91:35:91:36 | c1 : C [property Prop] : Object | provenance | |
| extensions.cs:256:54:256:55 | access to local variable c1 : C [property Prop] : Object | extensions.cs:256:50:256:51 | [post] access to local variable c3 : C [property Prop] : Object | provenance | |
| extensions.cs:256:54:256:55 | access to local variable c1 : C [property Prop] : Object | extensions.cs:256:50:256:51 | [post] access to local variable c3 : C [property Prop] : Object | provenance | |
| extensions.cs:257:14:257:15 | access to local variable c3 : C [property Prop] : Object | extensions.cs:257:14:257:20 | access to property Prop | provenance | |
| extensions.cs:257:14:257:15 | access to local variable c3 : C [property Prop] : Object | extensions.cs:257:14:257:20 | access to property Prop | provenance | |
nodes
| extensions.cs:5:22:5:24 | obj : B | semmle.label | obj : B |
| extensions.cs:5:22:5:24 | obj : B | semmle.label | obj : B |
@@ -245,258 +275,296 @@ nodes
| extensions.cs:80:20:80:20 | access to extension synthetic parameter b : B | semmle.label | access to extension synthetic parameter b : B |
| extensions.cs:85:20:85:20 | access to extension synthetic parameter b | semmle.label | access to extension synthetic parameter b |
| extensions.cs:85:20:85:20 | access to extension synthetic parameter b | semmle.label | access to extension synthetic parameter b |
| extensions.cs:89:20:89:20 | t : B | semmle.label | t : B |
| extensions.cs:89:20:89:20 | t : B | semmle.label | t : B |
| extensions.cs:93:20:93:20 | access to extension synthetic parameter t | semmle.label | access to extension synthetic parameter t |
| extensions.cs:93:20:93:20 | access to extension synthetic parameter t | semmle.label | access to extension synthetic parameter t |
| extensions.cs:96:33:96:37 | other : B | semmle.label | other : B |
| extensions.cs:96:33:96:37 | other : B | semmle.label | other : B |
| extensions.cs:98:20:98:24 | access to parameter other : B | semmle.label | access to parameter other : B |
| extensions.cs:98:20:98:24 | access to parameter other : B | semmle.label | access to parameter other : B |
| extensions.cs:108:13:108:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:108:13:108:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:108:18:108:26 | access to property Prop1 : B | semmle.label | access to property Prop1 : B |
| extensions.cs:108:18:108:26 | access to property Prop1 : B | semmle.label | access to property Prop1 : B |
| extensions.cs:109:14:109:15 | access to local variable b1 | semmle.label | access to local variable b1 |
| extensions.cs:109:14:109:15 | access to local variable b1 | semmle.label | access to local variable b1 |
| extensions.cs:111:13:111:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:111:13:111:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:111:18:111:44 | call to extension accessor get_Prop1 : B | semmle.label | call to extension accessor get_Prop1 : B |
| extensions.cs:111:18:111:44 | call to extension accessor get_Prop1 : B | semmle.label | call to extension accessor get_Prop1 : B |
| extensions.cs:112:14:112:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:112:14:112:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:118:21:118:32 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:118:21:118:32 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:120:13:120:13 | access to local variable b : B | semmle.label | access to local variable b : B |
| extensions.cs:120:13:120:13 | access to local variable b : B | semmle.label | access to local variable b : B |
| extensions.cs:120:17:120:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:120:17:120:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:121:37:121:37 | access to local variable b : B | semmle.label | access to local variable b : B |
| extensions.cs:121:37:121:37 | access to local variable b : B | semmle.label | access to local variable b : B |
| extensions.cs:127:13:127:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:127:13:127:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:127:18:127:25 | call to method M1 : B | semmle.label | call to method M1 : B |
| extensions.cs:127:18:127:25 | call to method M1 : B | semmle.label | call to method M1 : B |
| extensions.cs:128:14:128:15 | access to local variable b1 | semmle.label | access to local variable b1 |
| extensions.cs:128:14:128:15 | access to local variable b1 | semmle.label | access to local variable b1 |
| extensions.cs:130:13:130:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:130:13:130:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:130:18:130:37 | call to method M1 : B | semmle.label | call to method M1 : B |
| extensions.cs:130:18:130:37 | call to method M1 : B | semmle.label | call to method M1 : B |
| extensions.cs:131:14:131:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:131:14:131:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:136:13:136:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:136:13:136:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:136:18:136:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:136:18:136:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:137:9:137:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:137:9:137:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:139:13:139:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:139:13:139:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:139:18:139:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:139:18:139:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:140:25:140:26 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:140:25:140:26 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:145:13:145:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:145:13:145:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:145:18:145:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:145:18:145:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:146:13:146:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:146:13:146:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:146:18:146:19 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:146:18:146:19 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:146:18:146:24 | call to method B1 : B | semmle.label | call to method B1 : B |
| extensions.cs:146:18:146:24 | call to method B1 : B | semmle.label | call to method B1 : B |
| extensions.cs:147:14:147:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:147:14:147:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:149:13:149:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:149:13:149:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:149:18:149:36 | call to method B1 : B | semmle.label | call to method B1 : B |
| extensions.cs:149:18:149:36 | call to method B1 : B | semmle.label | call to method B1 : B |
| extensions.cs:149:34:149:35 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:149:34:149:35 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:150:14:150:15 | access to local variable b3 | semmle.label | access to local variable b3 |
| extensions.cs:150:14:150:15 | access to local variable b3 | semmle.label | access to local variable b3 |
| extensions.cs:155:13:155:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:155:13:155:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:155:18:155:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:155:18:155:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:156:18:156:19 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:156:18:156:19 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:158:13:158:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:158:13:158:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:158:18:158:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:158:18:158:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:159:41:159:42 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:159:41:159:42 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:164:13:164:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:164:13:164:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:164:18:164:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:164:18:164:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:165:9:165:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:165:9:165:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:167:13:167:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:167:13:167:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:167:18:167:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:167:18:167:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:168:32:168:33 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:168:32:168:33 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:173:13:173:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:173:13:173:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:173:18:173:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:173:18:173:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:175:18:175:19 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:175:18:175:19 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:177:13:177:14 | access to local variable b4 : B | semmle.label | access to local variable b4 : B |
| extensions.cs:177:13:177:14 | access to local variable b4 : B | semmle.label | access to local variable b4 : B |
| extensions.cs:177:18:177:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:177:18:177:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:178:43:178:44 | access to local variable b4 : B | semmle.label | access to local variable b4 : B |
| extensions.cs:178:43:178:44 | access to local variable b4 : B | semmle.label | access to local variable b4 : B |
| extensions.cs:185:13:185:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:185:13:185:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:185:18:185:24 | call to operator - : B | semmle.label | call to operator - : B |
| extensions.cs:185:18:185:24 | call to operator - : B | semmle.label | call to operator - : B |
| extensions.cs:186:14:186:15 | access to local variable b3 | semmle.label | access to local variable b3 |
| extensions.cs:186:14:186:15 | access to local variable b3 | semmle.label | access to local variable b3 |
| extensions.cs:188:13:188:14 | access to local variable b4 : B | semmle.label | access to local variable b4 : B |
| extensions.cs:188:13:188:14 | access to local variable b4 : B | semmle.label | access to local variable b4 : B |
| extensions.cs:188:18:188:52 | call to operator - : B | semmle.label | call to operator - : B |
| extensions.cs:188:18:188:52 | call to operator - : B | semmle.label | call to operator - : B |
| extensions.cs:189:14:189:15 | access to local variable b4 | semmle.label | access to local variable b4 |
| extensions.cs:189:14:189:15 | access to local variable b4 | semmle.label | access to local variable b4 |
| extensions.cs:194:13:194:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:194:13:194:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:194:18:194:35 | access to property StaticProp1 : B | semmle.label | access to property StaticProp1 : B |
| extensions.cs:194:18:194:35 | access to property StaticProp1 : B | semmle.label | access to property StaticProp1 : B |
| extensions.cs:195:14:195:15 | access to local variable b1 | semmle.label | access to local variable b1 |
| extensions.cs:195:14:195:15 | access to local variable b1 | semmle.label | access to local variable b1 |
| extensions.cs:197:13:197:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:197:13:197:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:197:18:197:47 | call to extension accessor get_StaticProp1 : B | semmle.label | call to extension accessor get_StaticProp1 : B |
| extensions.cs:197:18:197:47 | call to extension accessor get_StaticProp1 : B | semmle.label | call to extension accessor get_StaticProp1 : B |
| extensions.cs:198:14:198:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:198:14:198:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:203:13:203:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:203:13:203:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:203:18:203:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:203:18:203:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:204:30:204:31 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:204:30:204:31 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:206:13:206:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:206:13:206:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:206:18:206:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:206:18:206:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:207:38:207:39 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:207:38:207:39 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:212:13:212:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:212:13:212:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:212:18:212:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:212:18:212:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:213:9:213:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:213:9:213:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:215:13:215:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:215:13:215:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:215:18:215:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:215:18:215:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:216:25:216:26 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:216:25:216:26 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:221:13:221:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:221:13:221:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:221:18:221:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:221:18:221:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:222:9:222:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:222:9:222:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:224:13:224:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:224:13:224:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:224:18:224:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:224:18:224:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:225:32:225:33 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:225:32:225:33 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:231:13:231:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:231:13:231:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:231:18:231:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:231:18:231:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:89:17:89:17 | c [Return] : C [property Prop] : Object | semmle.label | c [Return] : C [property Prop] : Object |
| extensions.cs:89:17:89:17 | c [Return] : C [property Prop] : Object | semmle.label | c [Return] : C [property Prop] : Object |
| extensions.cs:91:35:91:36 | c1 : C [property Prop] : Object | semmle.label | c1 : C [property Prop] : Object |
| extensions.cs:91:35:91:36 | c1 : C [property Prop] : Object | semmle.label | c1 : C [property Prop] : Object |
| extensions.cs:93:13:93:13 | [post] access to extension synthetic parameter c : C [property Prop] : Object | semmle.label | [post] access to extension synthetic parameter c : C [property Prop] : Object |
| extensions.cs:93:13:93:13 | [post] access to extension synthetic parameter c : C [property Prop] : Object | semmle.label | [post] access to extension synthetic parameter c : C [property Prop] : Object |
| extensions.cs:93:22:93:23 | access to parameter c1 : C [property Prop] : Object | semmle.label | access to parameter c1 : C [property Prop] : Object |
| extensions.cs:93:22:93:23 | access to parameter c1 : C [property Prop] : Object | semmle.label | access to parameter c1 : C [property Prop] : Object |
| extensions.cs:93:22:93:28 | access to property Prop : Object | semmle.label | access to property Prop : Object |
| extensions.cs:93:22:93:28 | access to property Prop : Object | semmle.label | access to property Prop : Object |
| extensions.cs:97:20:97:20 | t : B | semmle.label | t : B |
| extensions.cs:97:20:97:20 | t : B | semmle.label | t : B |
| extensions.cs:101:20:101:20 | access to extension synthetic parameter t | semmle.label | access to extension synthetic parameter t |
| extensions.cs:101:20:101:20 | access to extension synthetic parameter t | semmle.label | access to extension synthetic parameter t |
| extensions.cs:104:33:104:37 | other : B | semmle.label | other : B |
| extensions.cs:104:33:104:37 | other : B | semmle.label | other : B |
| extensions.cs:106:20:106:24 | access to parameter other : B | semmle.label | access to parameter other : B |
| extensions.cs:106:20:106:24 | access to parameter other : B | semmle.label | access to parameter other : B |
| extensions.cs:116:13:116:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:116:13:116:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:116:18:116:26 | access to property Prop1 : B | semmle.label | access to property Prop1 : B |
| extensions.cs:116:18:116:26 | access to property Prop1 : B | semmle.label | access to property Prop1 : B |
| extensions.cs:117:14:117:15 | access to local variable b1 | semmle.label | access to local variable b1 |
| extensions.cs:117:14:117:15 | access to local variable b1 | semmle.label | access to local variable b1 |
| extensions.cs:119:13:119:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:119:13:119:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:119:18:119:44 | call to extension accessor get_Prop1 : B | semmle.label | call to extension accessor get_Prop1 : B |
| extensions.cs:119:18:119:44 | call to extension accessor get_Prop1 : B | semmle.label | call to extension accessor get_Prop1 : B |
| extensions.cs:120:14:120:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:120:14:120:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:126:21:126:32 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:126:21:126:32 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:128:13:128:13 | access to local variable b : B | semmle.label | access to local variable b : B |
| extensions.cs:128:13:128:13 | access to local variable b : B | semmle.label | access to local variable b : B |
| extensions.cs:128:17:128:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:128:17:128:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:129:37:129:37 | access to local variable b : B | semmle.label | access to local variable b : B |
| extensions.cs:129:37:129:37 | access to local variable b : B | semmle.label | access to local variable b : B |
| extensions.cs:135:13:135:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:135:13:135:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:135:18:135:25 | call to method M1 : B | semmle.label | call to method M1 : B |
| extensions.cs:135:18:135:25 | call to method M1 : B | semmle.label | call to method M1 : B |
| extensions.cs:136:14:136:15 | access to local variable b1 | semmle.label | access to local variable b1 |
| extensions.cs:136:14:136:15 | access to local variable b1 | semmle.label | access to local variable b1 |
| extensions.cs:138:13:138:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:138:13:138:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:138:18:138:37 | call to method M1 : B | semmle.label | call to method M1 : B |
| extensions.cs:138:18:138:37 | call to method M1 : B | semmle.label | call to method M1 : B |
| extensions.cs:139:14:139:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:139:14:139:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:144:13:144:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:144:13:144:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:144:18:144:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:144:18:144:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:145:9:145:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:145:9:145:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:147:13:147:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:147:13:147:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:147:18:147:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:147:18:147:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:148:25:148:26 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:148:25:148:26 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:153:13:153:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:153:13:153:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:153:18:153:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:153:18:153:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:154:13:154:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:154:13:154:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:154:18:154:19 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:154:18:154:19 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:154:18:154:24 | call to method B1 : B | semmle.label | call to method B1 : B |
| extensions.cs:154:18:154:24 | call to method B1 : B | semmle.label | call to method B1 : B |
| extensions.cs:155:14:155:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:155:14:155:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:157:13:157:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:157:13:157:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:157:18:157:36 | call to method B1 : B | semmle.label | call to method B1 : B |
| extensions.cs:157:18:157:36 | call to method B1 : B | semmle.label | call to method B1 : B |
| extensions.cs:157:34:157:35 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:157:34:157:35 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:158:14:158:15 | access to local variable b3 | semmle.label | access to local variable b3 |
| extensions.cs:158:14:158:15 | access to local variable b3 | semmle.label | access to local variable b3 |
| extensions.cs:163:13:163:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:163:13:163:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:163:18:163:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:163:18:163:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:164:18:164:19 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:164:18:164:19 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:166:13:166:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:166:13:166:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:166:18:166:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:166:18:166:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:167:41:167:42 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:167:41:167:42 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:172:13:172:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:172:13:172:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:172:18:172:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:172:18:172:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:173:9:173:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:173:9:173:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:175:13:175:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:175:13:175:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:175:18:175:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:175:18:175:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:176:32:176:33 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:176:32:176:33 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:181:13:181:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:181:13:181:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:181:18:181:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:181:18:181:29 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:183:18:183:19 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:183:18:183:19 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:185:13:185:14 | access to local variable b4 : B | semmle.label | access to local variable b4 : B |
| extensions.cs:185:13:185:14 | access to local variable b4 : B | semmle.label | access to local variable b4 : B |
| extensions.cs:185:18:185:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:185:18:185:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:186:43:186:44 | access to local variable b4 : B | semmle.label | access to local variable b4 : B |
| extensions.cs:186:43:186:44 | access to local variable b4 : B | semmle.label | access to local variable b4 : B |
| extensions.cs:193:13:193:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:193:13:193:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:193:18:193:24 | call to operator - : B | semmle.label | call to operator - : B |
| extensions.cs:193:18:193:24 | call to operator - : B | semmle.label | call to operator - : B |
| extensions.cs:194:14:194:15 | access to local variable b3 | semmle.label | access to local variable b3 |
| extensions.cs:194:14:194:15 | access to local variable b3 | semmle.label | access to local variable b3 |
| extensions.cs:196:13:196:14 | access to local variable b4 : B | semmle.label | access to local variable b4 : B |
| extensions.cs:196:13:196:14 | access to local variable b4 : B | semmle.label | access to local variable b4 : B |
| extensions.cs:196:18:196:52 | call to operator - : B | semmle.label | call to operator - : B |
| extensions.cs:196:18:196:52 | call to operator - : B | semmle.label | call to operator - : B |
| extensions.cs:197:14:197:15 | access to local variable b4 | semmle.label | access to local variable b4 |
| extensions.cs:197:14:197:15 | access to local variable b4 | semmle.label | access to local variable b4 |
| extensions.cs:202:13:202:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:202:13:202:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:202:18:202:35 | access to property StaticProp1 : B | semmle.label | access to property StaticProp1 : B |
| extensions.cs:202:18:202:35 | access to property StaticProp1 : B | semmle.label | access to property StaticProp1 : B |
| extensions.cs:203:14:203:15 | access to local variable b1 | semmle.label | access to local variable b1 |
| extensions.cs:203:14:203:15 | access to local variable b1 | semmle.label | access to local variable b1 |
| extensions.cs:205:13:205:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:205:13:205:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:205:18:205:47 | call to extension accessor get_StaticProp1 : B | semmle.label | call to extension accessor get_StaticProp1 : B |
| extensions.cs:205:18:205:47 | call to extension accessor get_StaticProp1 : B | semmle.label | call to extension accessor get_StaticProp1 : B |
| extensions.cs:206:14:206:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:206:14:206:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:211:13:211:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:211:13:211:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:211:18:211:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:211:18:211:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:212:30:212:31 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:212:30:212:31 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:214:13:214:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:214:13:214:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:214:18:214:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:214:18:214:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:215:38:215:39 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:215:38:215:39 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:220:13:220:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:220:13:220:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:220:18:220:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:220:18:220:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:221:9:221:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:221:9:221:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:223:13:223:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:223:13:223:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:223:18:223:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:223:18:223:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:224:25:224:26 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:224:25:224:26 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:229:13:229:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:229:13:229:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:229:18:229:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:229:18:229:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:230:9:230:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:230:9:230:10 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:232:13:232:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:232:13:232:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:232:18:232:34 | call to method GenericM2<B> : B | semmle.label | call to method GenericM2<B> : B |
| extensions.cs:232:18:232:34 | call to method GenericM2<B> : B | semmle.label | call to method GenericM2<B> : B |
| extensions.cs:232:32:232:33 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:232:32:232:33 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:233:14:233:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:233:14:233:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:235:13:235:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:235:13:235:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:235:18:235:48 | call to method GenericM2<B> : B | semmle.label | call to method GenericM2<B> : B |
| extensions.cs:235:18:235:48 | call to method GenericM2<B> : B | semmle.label | call to method GenericM2<B> : B |
| extensions.cs:235:46:235:47 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:235:46:235:47 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:236:14:236:15 | access to local variable b3 | semmle.label | access to local variable b3 |
| extensions.cs:236:14:236:15 | access to local variable b3 | semmle.label | access to local variable b3 |
| extensions.cs:232:18:232:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:232:18:232:31 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:233:32:233:33 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:233:32:233:33 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:239:13:239:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:239:13:239:14 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:239:18:239:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:239:18:239:30 | call to method Source<B> : B | semmle.label | call to method Source<B> : B |
| extensions.cs:240:13:240:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:240:13:240:14 | access to local variable b2 : B | semmle.label | access to local variable b2 : B |
| extensions.cs:240:18:240:34 | call to method GenericM2<B> : B | semmle.label | call to method GenericM2<B> : B |
| extensions.cs:240:18:240:34 | call to method GenericM2<B> : B | semmle.label | call to method GenericM2<B> : B |
| extensions.cs:240:32:240:33 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:240:32:240:33 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:241:14:241:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:241:14:241:15 | access to local variable b2 | semmle.label | access to local variable b2 |
| extensions.cs:243:13:243:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:243:13:243:14 | access to local variable b3 : B | semmle.label | access to local variable b3 : B |
| extensions.cs:243:18:243:48 | call to method GenericM2<B> : B | semmle.label | call to method GenericM2<B> : B |
| extensions.cs:243:18:243:48 | call to method GenericM2<B> : B | semmle.label | call to method GenericM2<B> : B |
| extensions.cs:243:46:243:47 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:243:46:243:47 | access to local variable b1 : B | semmle.label | access to local variable b1 : B |
| extensions.cs:244:14:244:15 | access to local variable b3 | semmle.label | access to local variable b3 |
| extensions.cs:244:14:244:15 | access to local variable b3 | semmle.label | access to local variable b3 |
| extensions.cs:250:9:250:10 | [post] access to local variable c1 : C [property Prop] : Object | semmle.label | [post] access to local variable c1 : C [property Prop] : Object |
| extensions.cs:250:9:250:10 | [post] access to local variable c1 : C [property Prop] : Object | semmle.label | [post] access to local variable c1 : C [property Prop] : Object |
| extensions.cs:250:19:250:36 | call to method Source<Object> : Object | semmle.label | call to method Source<Object> : Object |
| extensions.cs:250:19:250:36 | call to method Source<Object> : Object | semmle.label | call to method Source<Object> : Object |
| extensions.cs:252:9:252:10 | [post] access to local variable c2 : C [property Prop] : Object | semmle.label | [post] access to local variable c2 : C [property Prop] : Object |
| extensions.cs:252:9:252:10 | [post] access to local variable c2 : C [property Prop] : Object | semmle.label | [post] access to local variable c2 : C [property Prop] : Object |
| extensions.cs:252:15:252:16 | access to local variable c1 : C [property Prop] : Object | semmle.label | access to local variable c1 : C [property Prop] : Object |
| extensions.cs:252:15:252:16 | access to local variable c1 : C [property Prop] : Object | semmle.label | access to local variable c1 : C [property Prop] : Object |
| extensions.cs:253:14:253:15 | access to local variable c2 : C [property Prop] : Object | semmle.label | access to local variable c2 : C [property Prop] : Object |
| extensions.cs:253:14:253:15 | access to local variable c2 : C [property Prop] : Object | semmle.label | access to local variable c2 : C [property Prop] : Object |
| extensions.cs:253:14:253:20 | access to property Prop | semmle.label | access to property Prop |
| extensions.cs:253:14:253:20 | access to property Prop | semmle.label | access to property Prop |
| extensions.cs:256:50:256:51 | [post] access to local variable c3 : C [property Prop] : Object | semmle.label | [post] access to local variable c3 : C [property Prop] : Object |
| extensions.cs:256:50:256:51 | [post] access to local variable c3 : C [property Prop] : Object | semmle.label | [post] access to local variable c3 : C [property Prop] : Object |
| extensions.cs:256:54:256:55 | access to local variable c1 : C [property Prop] : Object | semmle.label | access to local variable c1 : C [property Prop] : Object |
| extensions.cs:256:54:256:55 | access to local variable c1 : C [property Prop] : Object | semmle.label | access to local variable c1 : C [property Prop] : Object |
| extensions.cs:257:14:257:15 | access to local variable c3 : C [property Prop] : Object | semmle.label | access to local variable c3 : C [property Prop] : Object |
| extensions.cs:257:14:257:15 | access to local variable c3 : C [property Prop] : Object | semmle.label | access to local variable c3 : C [property Prop] : Object |
| extensions.cs:257:14:257:20 | access to property Prop | semmle.label | access to property Prop |
| extensions.cs:257:14:257:20 | access to property Prop | semmle.label | access to property Prop |
subpaths
| extensions.cs:146:18:146:19 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | extensions.cs:80:20:80:20 | access to extension synthetic parameter b : B | extensions.cs:146:18:146:24 | call to method B1 : B |
| extensions.cs:146:18:146:19 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | extensions.cs:80:20:80:20 | access to extension synthetic parameter b : B | extensions.cs:146:18:146:24 | call to method B1 : B |
| extensions.cs:149:34:149:35 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | extensions.cs:80:20:80:20 | access to extension synthetic parameter b : B | extensions.cs:149:18:149:36 | call to method B1 : B |
| extensions.cs:149:34:149:35 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | extensions.cs:80:20:80:20 | access to extension synthetic parameter b : B | extensions.cs:149:18:149:36 | call to method B1 : B |
| extensions.cs:232:32:232:33 | access to local variable b1 : B | extensions.cs:96:33:96:37 | other : B | extensions.cs:98:20:98:24 | access to parameter other : B | extensions.cs:232:18:232:34 | call to method GenericM2<B> : B |
| extensions.cs:232:32:232:33 | access to local variable b1 : B | extensions.cs:96:33:96:37 | other : B | extensions.cs:98:20:98:24 | access to parameter other : B | extensions.cs:232:18:232:34 | call to method GenericM2<B> : B |
| extensions.cs:235:46:235:47 | access to local variable b1 : B | extensions.cs:96:33:96:37 | other : B | extensions.cs:98:20:98:24 | access to parameter other : B | extensions.cs:235:18:235:48 | call to method GenericM2<B> : B |
| extensions.cs:235:46:235:47 | access to local variable b1 : B | extensions.cs:96:33:96:37 | other : B | extensions.cs:98:20:98:24 | access to parameter other : B | extensions.cs:235:18:235:48 | call to method GenericM2<B> : B |
| extensions.cs:154:18:154:19 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | extensions.cs:80:20:80:20 | access to extension synthetic parameter b : B | extensions.cs:154:18:154:24 | call to method B1 : B |
| extensions.cs:154:18:154:19 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | extensions.cs:80:20:80:20 | access to extension synthetic parameter b : B | extensions.cs:154:18:154:24 | call to method B1 : B |
| extensions.cs:157:34:157:35 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | extensions.cs:80:20:80:20 | access to extension synthetic parameter b : B | extensions.cs:157:18:157:36 | call to method B1 : B |
| extensions.cs:157:34:157:35 | access to local variable b1 : B | extensions.cs:76:17:76:17 | b : B | extensions.cs:80:20:80:20 | access to extension synthetic parameter b : B | extensions.cs:157:18:157:36 | call to method B1 : B |
| extensions.cs:240:32:240:33 | access to local variable b1 : B | extensions.cs:104:33:104:37 | other : B | extensions.cs:106:20:106:24 | access to parameter other : B | extensions.cs:240:18:240:34 | call to method GenericM2<B> : B |
| extensions.cs:240:32:240:33 | access to local variable b1 : B | extensions.cs:104:33:104:37 | other : B | extensions.cs:106:20:106:24 | access to parameter other : B | extensions.cs:240:18:240:34 | call to method GenericM2<B> : B |
| extensions.cs:243:46:243:47 | access to local variable b1 : B | extensions.cs:104:33:104:37 | other : B | extensions.cs:106:20:106:24 | access to parameter other : B | extensions.cs:243:18:243:48 | call to method GenericM2<B> : B |
| extensions.cs:243:46:243:47 | access to local variable b1 : B | extensions.cs:104:33:104:37 | other : B | extensions.cs:106:20:106:24 | access to parameter other : B | extensions.cs:243:18:243:48 | call to method GenericM2<B> : B |
| extensions.cs:252:15:252:16 | access to local variable c1 : C [property Prop] : Object | extensions.cs:91:35:91:36 | c1 : C [property Prop] : Object | extensions.cs:89:17:89:17 | c [Return] : C [property Prop] : Object | extensions.cs:252:9:252:10 | [post] access to local variable c2 : C [property Prop] : Object |
| extensions.cs:252:15:252:16 | access to local variable c1 : C [property Prop] : Object | extensions.cs:91:35:91:36 | c1 : C [property Prop] : Object | extensions.cs:89:17:89:17 | c [Return] : C [property Prop] : Object | extensions.cs:252:9:252:10 | [post] access to local variable c2 : C [property Prop] : Object |
| extensions.cs:256:54:256:55 | access to local variable c1 : C [property Prop] : Object | extensions.cs:91:35:91:36 | c1 : C [property Prop] : Object | extensions.cs:89:17:89:17 | c [Return] : C [property Prop] : Object | extensions.cs:256:50:256:51 | [post] access to local variable c3 : C [property Prop] : Object |
| extensions.cs:256:54:256:55 | access to local variable c1 : C [property Prop] : Object | extensions.cs:91:35:91:36 | c1 : C [property Prop] : Object | extensions.cs:89:17:89:17 | c [Return] : C [property Prop] : Object | extensions.cs:256:50:256:51 | [post] access to local variable c3 : C [property Prop] : Object |
testFailures
#select
| extensions.cs:15:24:15:28 | access to parameter value | extensions.cs:118:21:118:32 | call to method Source<B> : B | extensions.cs:15:24:15:28 | access to parameter value | $@ | extensions.cs:118:21:118:32 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:15:24:15:28 | access to parameter value | extensions.cs:118:21:118:32 | call to method Source<B> : B | extensions.cs:15:24:15:28 | access to parameter value | $@ | extensions.cs:118:21:118:32 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:15:24:15:28 | access to parameter value | extensions.cs:120:17:120:30 | call to method Source<B> : B | extensions.cs:15:24:15:28 | access to parameter value | $@ | extensions.cs:120:17:120:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:15:24:15:28 | access to parameter value | extensions.cs:120:17:120:30 | call to method Source<B> : B | extensions.cs:15:24:15:28 | access to parameter value | $@ | extensions.cs:120:17:120:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | extensions.cs:155:18:155:29 | call to method Source<B> : B | extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | $@ | extensions.cs:155:18:155:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | extensions.cs:155:18:155:29 | call to method Source<B> : B | extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | $@ | extensions.cs:155:18:155:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | extensions.cs:158:18:158:31 | call to method Source<B> : B | extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | $@ | extensions.cs:158:18:158:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | extensions.cs:158:18:158:31 | call to method Source<B> : B | extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | $@ | extensions.cs:158:18:158:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | extensions.cs:164:18:164:29 | call to method Source<B> : B | extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | $@ | extensions.cs:164:18:164:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | extensions.cs:164:18:164:29 | call to method Source<B> : B | extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | $@ | extensions.cs:164:18:164:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | extensions.cs:167:18:167:31 | call to method Source<B> : B | extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | $@ | extensions.cs:167:18:167:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | extensions.cs:167:18:167:31 | call to method Source<B> : B | extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | $@ | extensions.cs:167:18:167:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:40:24:40:28 | access to parameter value | extensions.cs:203:18:203:30 | call to method Source<B> : B | extensions.cs:40:24:40:28 | access to parameter value | $@ | extensions.cs:203:18:203:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:40:24:40:28 | access to parameter value | extensions.cs:203:18:203:30 | call to method Source<B> : B | extensions.cs:40:24:40:28 | access to parameter value | $@ | extensions.cs:203:18:203:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:40:24:40:28 | access to parameter value | extensions.cs:206:18:206:31 | call to method Source<B> : B | extensions.cs:40:24:40:28 | access to parameter value | $@ | extensions.cs:206:18:206:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:40:24:40:28 | access to parameter value | extensions.cs:206:18:206:31 | call to method Source<B> : B | extensions.cs:40:24:40:28 | access to parameter value | $@ | extensions.cs:206:18:206:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | extensions.cs:136:18:136:29 | call to method Source<B> : B | extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | $@ | extensions.cs:136:18:136:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | extensions.cs:136:18:136:29 | call to method Source<B> : B | extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | $@ | extensions.cs:136:18:136:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | extensions.cs:139:18:139:31 | call to method Source<B> : B | extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | $@ | extensions.cs:139:18:139:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | extensions.cs:139:18:139:31 | call to method Source<B> : B | extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | $@ | extensions.cs:139:18:139:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:61:20:61:20 | access to parameter a | extensions.cs:173:18:173:29 | call to method Source<B> : B | extensions.cs:61:20:61:20 | access to parameter a | $@ | extensions.cs:173:18:173:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:61:20:61:20 | access to parameter a | extensions.cs:173:18:173:29 | call to method Source<B> : B | extensions.cs:61:20:61:20 | access to parameter a | $@ | extensions.cs:173:18:173:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:61:20:61:20 | access to parameter a | extensions.cs:177:18:177:31 | call to method Source<B> : B | extensions.cs:61:20:61:20 | access to parameter a | $@ | extensions.cs:177:18:177:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:61:20:61:20 | access to parameter a | extensions.cs:177:18:177:31 | call to method Source<B> : B | extensions.cs:61:20:61:20 | access to parameter a | $@ | extensions.cs:177:18:177:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:85:20:85:20 | access to extension synthetic parameter b | extensions.cs:212:18:212:30 | call to method Source<B> : B | extensions.cs:85:20:85:20 | access to extension synthetic parameter b | $@ | extensions.cs:212:18:212:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:85:20:85:20 | access to extension synthetic parameter b | extensions.cs:212:18:212:30 | call to method Source<B> : B | extensions.cs:85:20:85:20 | access to extension synthetic parameter b | $@ | extensions.cs:212:18:212:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:85:20:85:20 | access to extension synthetic parameter b | extensions.cs:215:18:215:31 | call to method Source<B> : B | extensions.cs:85:20:85:20 | access to extension synthetic parameter b | $@ | extensions.cs:215:18:215:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:85:20:85:20 | access to extension synthetic parameter b | extensions.cs:215:18:215:31 | call to method Source<B> : B | extensions.cs:85:20:85:20 | access to extension synthetic parameter b | $@ | extensions.cs:215:18:215:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:93:20:93:20 | access to extension synthetic parameter t | extensions.cs:221:18:221:30 | call to method Source<B> : B | extensions.cs:93:20:93:20 | access to extension synthetic parameter t | $@ | extensions.cs:221:18:221:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:93:20:93:20 | access to extension synthetic parameter t | extensions.cs:221:18:221:30 | call to method Source<B> : B | extensions.cs:93:20:93:20 | access to extension synthetic parameter t | $@ | extensions.cs:221:18:221:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:93:20:93:20 | access to extension synthetic parameter t | extensions.cs:224:18:224:31 | call to method Source<B> : B | extensions.cs:93:20:93:20 | access to extension synthetic parameter t | $@ | extensions.cs:224:18:224:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:93:20:93:20 | access to extension synthetic parameter t | extensions.cs:224:18:224:31 | call to method Source<B> : B | extensions.cs:93:20:93:20 | access to extension synthetic parameter t | $@ | extensions.cs:224:18:224:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:109:14:109:15 | access to local variable b1 | extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:109:14:109:15 | access to local variable b1 | $@ | extensions.cs:11:24:11:37 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:109:14:109:15 | access to local variable b1 | extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:109:14:109:15 | access to local variable b1 | $@ | extensions.cs:11:24:11:37 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:112:14:112:15 | access to local variable b2 | extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:112:14:112:15 | access to local variable b2 | $@ | extensions.cs:11:24:11:37 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:112:14:112:15 | access to local variable b2 | extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:112:14:112:15 | access to local variable b2 | $@ | extensions.cs:11:24:11:37 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:128:14:128:15 | access to local variable b1 | extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:128:14:128:15 | access to local variable b1 | $@ | extensions.cs:46:20:46:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:128:14:128:15 | access to local variable b1 | extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:128:14:128:15 | access to local variable b1 | $@ | extensions.cs:46:20:46:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:131:14:131:15 | access to local variable b2 | extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:131:14:131:15 | access to local variable b2 | $@ | extensions.cs:46:20:46:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:131:14:131:15 | access to local variable b2 | extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:131:14:131:15 | access to local variable b2 | $@ | extensions.cs:46:20:46:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:147:14:147:15 | access to local variable b2 | extensions.cs:145:18:145:29 | call to method Source<B> : B | extensions.cs:147:14:147:15 | access to local variable b2 | $@ | extensions.cs:145:18:145:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:147:14:147:15 | access to local variable b2 | extensions.cs:145:18:145:29 | call to method Source<B> : B | extensions.cs:147:14:147:15 | access to local variable b2 | $@ | extensions.cs:145:18:145:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:150:14:150:15 | access to local variable b3 | extensions.cs:145:18:145:29 | call to method Source<B> : B | extensions.cs:150:14:150:15 | access to local variable b3 | $@ | extensions.cs:145:18:145:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:150:14:150:15 | access to local variable b3 | extensions.cs:145:18:145:29 | call to method Source<B> : B | extensions.cs:150:14:150:15 | access to local variable b3 | $@ | extensions.cs:145:18:145:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:186:14:186:15 | access to local variable b3 | extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:186:14:186:15 | access to local variable b3 | $@ | extensions.cs:67:20:67:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:186:14:186:15 | access to local variable b3 | extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:186:14:186:15 | access to local variable b3 | $@ | extensions.cs:67:20:67:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:189:14:189:15 | access to local variable b4 | extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:189:14:189:15 | access to local variable b4 | $@ | extensions.cs:67:20:67:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:189:14:189:15 | access to local variable b4 | extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:189:14:189:15 | access to local variable b4 | $@ | extensions.cs:67:20:67:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:195:14:195:15 | access to local variable b1 | extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:195:14:195:15 | access to local variable b1 | $@ | extensions.cs:36:24:36:38 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:195:14:195:15 | access to local variable b1 | extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:195:14:195:15 | access to local variable b1 | $@ | extensions.cs:36:24:36:38 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:198:14:198:15 | access to local variable b2 | extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:198:14:198:15 | access to local variable b2 | $@ | extensions.cs:36:24:36:38 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:198:14:198:15 | access to local variable b2 | extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:198:14:198:15 | access to local variable b2 | $@ | extensions.cs:36:24:36:38 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:233:14:233:15 | access to local variable b2 | extensions.cs:231:18:231:30 | call to method Source<B> : B | extensions.cs:233:14:233:15 | access to local variable b2 | $@ | extensions.cs:231:18:231:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:233:14:233:15 | access to local variable b2 | extensions.cs:231:18:231:30 | call to method Source<B> : B | extensions.cs:233:14:233:15 | access to local variable b2 | $@ | extensions.cs:231:18:231:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:236:14:236:15 | access to local variable b3 | extensions.cs:231:18:231:30 | call to method Source<B> : B | extensions.cs:236:14:236:15 | access to local variable b3 | $@ | extensions.cs:231:18:231:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:236:14:236:15 | access to local variable b3 | extensions.cs:231:18:231:30 | call to method Source<B> : B | extensions.cs:236:14:236:15 | access to local variable b3 | $@ | extensions.cs:231:18:231:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:15:24:15:28 | access to parameter value | extensions.cs:126:21:126:32 | call to method Source<B> : B | extensions.cs:15:24:15:28 | access to parameter value | $@ | extensions.cs:126:21:126:32 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:15:24:15:28 | access to parameter value | extensions.cs:126:21:126:32 | call to method Source<B> : B | extensions.cs:15:24:15:28 | access to parameter value | $@ | extensions.cs:126:21:126:32 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:15:24:15:28 | access to parameter value | extensions.cs:128:17:128:30 | call to method Source<B> : B | extensions.cs:15:24:15:28 | access to parameter value | $@ | extensions.cs:128:17:128:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:15:24:15:28 | access to parameter value | extensions.cs:128:17:128:30 | call to method Source<B> : B | extensions.cs:15:24:15:28 | access to parameter value | $@ | extensions.cs:128:17:128:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | extensions.cs:163:18:163:29 | call to method Source<B> : B | extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | $@ | extensions.cs:163:18:163:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | extensions.cs:163:18:163:29 | call to method Source<B> : B | extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | $@ | extensions.cs:163:18:163:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | extensions.cs:166:18:166:31 | call to method Source<B> : B | extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | $@ | extensions.cs:166:18:166:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | extensions.cs:166:18:166:31 | call to method Source<B> : B | extensions.cs:23:24:23:26 | access to extension synthetic parameter obj | $@ | extensions.cs:166:18:166:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | extensions.cs:172:18:172:29 | call to method Source<B> : B | extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | $@ | extensions.cs:172:18:172:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | extensions.cs:172:18:172:29 | call to method Source<B> : B | extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | $@ | extensions.cs:172:18:172:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | extensions.cs:175:18:175:31 | call to method Source<B> : B | extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | $@ | extensions.cs:175:18:175:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | extensions.cs:175:18:175:31 | call to method Source<B> : B | extensions.cs:28:24:28:26 | access to extension synthetic parameter obj | $@ | extensions.cs:175:18:175:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:40:24:40:28 | access to parameter value | extensions.cs:211:18:211:30 | call to method Source<B> : B | extensions.cs:40:24:40:28 | access to parameter value | $@ | extensions.cs:211:18:211:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:40:24:40:28 | access to parameter value | extensions.cs:211:18:211:30 | call to method Source<B> : B | extensions.cs:40:24:40:28 | access to parameter value | $@ | extensions.cs:211:18:211:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:40:24:40:28 | access to parameter value | extensions.cs:214:18:214:31 | call to method Source<B> : B | extensions.cs:40:24:40:28 | access to parameter value | $@ | extensions.cs:214:18:214:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:40:24:40:28 | access to parameter value | extensions.cs:214:18:214:31 | call to method Source<B> : B | extensions.cs:40:24:40:28 | access to parameter value | $@ | extensions.cs:214:18:214:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | extensions.cs:144:18:144:29 | call to method Source<B> : B | extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | $@ | extensions.cs:144:18:144:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | extensions.cs:144:18:144:29 | call to method Source<B> : B | extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | $@ | extensions.cs:144:18:144:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | extensions.cs:147:18:147:31 | call to method Source<B> : B | extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | $@ | extensions.cs:147:18:147:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | extensions.cs:147:18:147:31 | call to method Source<B> : B | extensions.cs:51:20:51:22 | access to extension synthetic parameter obj | $@ | extensions.cs:147:18:147:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:61:20:61:20 | access to parameter a | extensions.cs:181:18:181:29 | call to method Source<B> : B | extensions.cs:61:20:61:20 | access to parameter a | $@ | extensions.cs:181:18:181:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:61:20:61:20 | access to parameter a | extensions.cs:181:18:181:29 | call to method Source<B> : B | extensions.cs:61:20:61:20 | access to parameter a | $@ | extensions.cs:181:18:181:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:61:20:61:20 | access to parameter a | extensions.cs:185:18:185:31 | call to method Source<B> : B | extensions.cs:61:20:61:20 | access to parameter a | $@ | extensions.cs:185:18:185:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:61:20:61:20 | access to parameter a | extensions.cs:185:18:185:31 | call to method Source<B> : B | extensions.cs:61:20:61:20 | access to parameter a | $@ | extensions.cs:185:18:185:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:85:20:85:20 | access to extension synthetic parameter b | extensions.cs:220:18:220:30 | call to method Source<B> : B | extensions.cs:85:20:85:20 | access to extension synthetic parameter b | $@ | extensions.cs:220:18:220:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:85:20:85:20 | access to extension synthetic parameter b | extensions.cs:220:18:220:30 | call to method Source<B> : B | extensions.cs:85:20:85:20 | access to extension synthetic parameter b | $@ | extensions.cs:220:18:220:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:85:20:85:20 | access to extension synthetic parameter b | extensions.cs:223:18:223:31 | call to method Source<B> : B | extensions.cs:85:20:85:20 | access to extension synthetic parameter b | $@ | extensions.cs:223:18:223:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:85:20:85:20 | access to extension synthetic parameter b | extensions.cs:223:18:223:31 | call to method Source<B> : B | extensions.cs:85:20:85:20 | access to extension synthetic parameter b | $@ | extensions.cs:223:18:223:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:101:20:101:20 | access to extension synthetic parameter t | extensions.cs:229:18:229:30 | call to method Source<B> : B | extensions.cs:101:20:101:20 | access to extension synthetic parameter t | $@ | extensions.cs:229:18:229:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:101:20:101:20 | access to extension synthetic parameter t | extensions.cs:229:18:229:30 | call to method Source<B> : B | extensions.cs:101:20:101:20 | access to extension synthetic parameter t | $@ | extensions.cs:229:18:229:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:101:20:101:20 | access to extension synthetic parameter t | extensions.cs:232:18:232:31 | call to method Source<B> : B | extensions.cs:101:20:101:20 | access to extension synthetic parameter t | $@ | extensions.cs:232:18:232:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:101:20:101:20 | access to extension synthetic parameter t | extensions.cs:232:18:232:31 | call to method Source<B> : B | extensions.cs:101:20:101:20 | access to extension synthetic parameter t | $@ | extensions.cs:232:18:232:31 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:117:14:117:15 | access to local variable b1 | extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:117:14:117:15 | access to local variable b1 | $@ | extensions.cs:11:24:11:37 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:117:14:117:15 | access to local variable b1 | extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:117:14:117:15 | access to local variable b1 | $@ | extensions.cs:11:24:11:37 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:120:14:120:15 | access to local variable b2 | extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:120:14:120:15 | access to local variable b2 | $@ | extensions.cs:11:24:11:37 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:120:14:120:15 | access to local variable b2 | extensions.cs:11:24:11:37 | call to method Source<B> : B | extensions.cs:120:14:120:15 | access to local variable b2 | $@ | extensions.cs:11:24:11:37 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:136:14:136:15 | access to local variable b1 | extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:136:14:136:15 | access to local variable b1 | $@ | extensions.cs:46:20:46:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:136:14:136:15 | access to local variable b1 | extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:136:14:136:15 | access to local variable b1 | $@ | extensions.cs:46:20:46:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:139:14:139:15 | access to local variable b2 | extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:139:14:139:15 | access to local variable b2 | $@ | extensions.cs:46:20:46:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:139:14:139:15 | access to local variable b2 | extensions.cs:46:20:46:33 | call to method Source<B> : B | extensions.cs:139:14:139:15 | access to local variable b2 | $@ | extensions.cs:46:20:46:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:155:14:155:15 | access to local variable b2 | extensions.cs:153:18:153:29 | call to method Source<B> : B | extensions.cs:155:14:155:15 | access to local variable b2 | $@ | extensions.cs:153:18:153:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:155:14:155:15 | access to local variable b2 | extensions.cs:153:18:153:29 | call to method Source<B> : B | extensions.cs:155:14:155:15 | access to local variable b2 | $@ | extensions.cs:153:18:153:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:158:14:158:15 | access to local variable b3 | extensions.cs:153:18:153:29 | call to method Source<B> : B | extensions.cs:158:14:158:15 | access to local variable b3 | $@ | extensions.cs:153:18:153:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:158:14:158:15 | access to local variable b3 | extensions.cs:153:18:153:29 | call to method Source<B> : B | extensions.cs:158:14:158:15 | access to local variable b3 | $@ | extensions.cs:153:18:153:29 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:194:14:194:15 | access to local variable b3 | extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:194:14:194:15 | access to local variable b3 | $@ | extensions.cs:67:20:67:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:194:14:194:15 | access to local variable b3 | extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:194:14:194:15 | access to local variable b3 | $@ | extensions.cs:67:20:67:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:197:14:197:15 | access to local variable b4 | extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:197:14:197:15 | access to local variable b4 | $@ | extensions.cs:67:20:67:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:197:14:197:15 | access to local variable b4 | extensions.cs:67:20:67:33 | call to method Source<B> : B | extensions.cs:197:14:197:15 | access to local variable b4 | $@ | extensions.cs:67:20:67:33 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:203:14:203:15 | access to local variable b1 | extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:203:14:203:15 | access to local variable b1 | $@ | extensions.cs:36:24:36:38 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:203:14:203:15 | access to local variable b1 | extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:203:14:203:15 | access to local variable b1 | $@ | extensions.cs:36:24:36:38 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:206:14:206:15 | access to local variable b2 | extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:206:14:206:15 | access to local variable b2 | $@ | extensions.cs:36:24:36:38 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:206:14:206:15 | access to local variable b2 | extensions.cs:36:24:36:38 | call to method Source<B> : B | extensions.cs:206:14:206:15 | access to local variable b2 | $@ | extensions.cs:36:24:36:38 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:241:14:241:15 | access to local variable b2 | extensions.cs:239:18:239:30 | call to method Source<B> : B | extensions.cs:241:14:241:15 | access to local variable b2 | $@ | extensions.cs:239:18:239:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:241:14:241:15 | access to local variable b2 | extensions.cs:239:18:239:30 | call to method Source<B> : B | extensions.cs:241:14:241:15 | access to local variable b2 | $@ | extensions.cs:239:18:239:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:244:14:244:15 | access to local variable b3 | extensions.cs:239:18:239:30 | call to method Source<B> : B | extensions.cs:244:14:244:15 | access to local variable b3 | $@ | extensions.cs:239:18:239:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:244:14:244:15 | access to local variable b3 | extensions.cs:239:18:239:30 | call to method Source<B> : B | extensions.cs:244:14:244:15 | access to local variable b3 | $@ | extensions.cs:239:18:239:30 | call to method Source<B> : B | call to method Source<B> : B |
| extensions.cs:253:14:253:20 | access to property Prop | extensions.cs:250:19:250:36 | call to method Source<Object> : Object | extensions.cs:253:14:253:20 | access to property Prop | $@ | extensions.cs:250:19:250:36 | call to method Source<Object> : Object | call to method Source<Object> : Object |
| extensions.cs:253:14:253:20 | access to property Prop | extensions.cs:250:19:250:36 | call to method Source<Object> : Object | extensions.cs:253:14:253:20 | access to property Prop | $@ | extensions.cs:250:19:250:36 | call to method Source<Object> : Object | call to method Source<Object> : Object |
| extensions.cs:257:14:257:20 | access to property Prop | extensions.cs:250:19:250:36 | call to method Source<Object> : Object | extensions.cs:257:14:257:20 | access to property Prop | $@ | extensions.cs:250:19:250:36 | call to method Source<Object> : Object | call to method Source<Object> : Object |
| extensions.cs:257:14:257:20 | access to property Prop | extensions.cs:250:19:250:36 | call to method Source<Object> : Object | extensions.cs:257:14:257:20 | access to property Prop | $@ | extensions.cs:250:19:250:36 | call to method Source<Object> : Object | call to method Source<Object> : Object |

View File

@@ -86,6 +86,14 @@ public static class MyExtensions
}
}
extension(C c)
{
public void operator *=(C c1)
{
c.Prop = c1.Prop;
}
}
extension<T>(T t) where T : class
{
public void GenericM1()
@@ -236,8 +244,26 @@ public class A
Sink(b3); // $ hasValueFlow=14
}
public void Test15()
{
var c1 = new C();
c1.Prop = Source<object>(15);
var c2 = new C();
c2 *= c1;
Sink(c2.Prop); // $ hasValueFlow=15
var c3 = new C();
MyExtensions.op_MultiplicationAssignment(c3, c1);
Sink(c3.Prop); // $ hasValueFlow=15
}
public static T Source<T>(object source) => throw null;
public static void Sink(object o) { }
}
public class B { }
public class C
{
public object Prop { get; set; }
}

View File

@@ -84,4 +84,39 @@ public class Operators
var y = Source<C>(12);
M6Aux(x, y);
}
}
}
public class CompoundAssignmentOperators
{
static void Sink(object o) { }
static T Source<T>(object source) => throw null;
public class C
{
public object Field { get; private set; }
public C()
{
Field = new object();
}
public C(object o)
{
Field = o;
}
public void operator +=(C x)
{
Field = x.Field;
}
}
public void M1()
{
var tainted = Source<object>(1);
var x = new C();
var y = new C(tainted);
x += y;
Sink(x.Field); // $ hasValueFlow=1
}
}

View File

@@ -96,6 +96,40 @@ edges
| Operator.cs:84:17:84:29 | call to method Source<C> : C | Operator.cs:84:13:84:13 | access to local variable y : C | provenance | |
| Operator.cs:85:18:85:18 | access to local variable y : C | Operator.cs:75:33:75:33 | y : C | provenance | |
| Operator.cs:85:18:85:18 | access to local variable y : C | Operator.cs:75:33:75:33 | y : C | provenance | |
| Operator.cs:103:25:103:25 | o : Object | Operator.cs:105:21:105:21 | access to parameter o : Object | provenance | |
| Operator.cs:103:25:103:25 | o : Object | Operator.cs:105:21:105:21 | access to parameter o : Object | provenance | |
| Operator.cs:105:13:105:17 | [post] this access : C [property Field] : Object | Operator.cs:103:16:103:16 | this [Return] : C [property Field] : Object | provenance | |
| Operator.cs:105:13:105:17 | [post] this access : C [property Field] : Object | Operator.cs:103:16:103:16 | this [Return] : C [property Field] : Object | provenance | |
| Operator.cs:105:21:105:21 | access to parameter o : Object | Operator.cs:105:13:105:17 | [post] this access : C [property Field] : Object | provenance | |
| Operator.cs:105:21:105:21 | access to parameter o : Object | Operator.cs:105:13:105:17 | [post] this access : C [property Field] : Object | provenance | |
| Operator.cs:108:35:108:35 | x : C [property Field] : Object | Operator.cs:110:21:110:21 | access to parameter x : C [property Field] : Object | provenance | |
| Operator.cs:108:35:108:35 | x : C [property Field] : Object | Operator.cs:110:21:110:21 | access to parameter x : C [property Field] : Object | provenance | |
| Operator.cs:110:13:110:17 | [post] this access : C [property Field] : Object | Operator.cs:108:30:108:31 | this [Return] : C [property Field] : Object | provenance | |
| Operator.cs:110:13:110:17 | [post] this access : C [property Field] : Object | Operator.cs:108:30:108:31 | this [Return] : C [property Field] : Object | provenance | |
| Operator.cs:110:21:110:21 | access to parameter x : C [property Field] : Object | Operator.cs:110:21:110:27 | access to property Field : Object | provenance | |
| Operator.cs:110:21:110:21 | access to parameter x : C [property Field] : Object | Operator.cs:110:21:110:27 | access to property Field : Object | provenance | |
| Operator.cs:110:21:110:27 | access to property Field : Object | Operator.cs:110:13:110:17 | [post] this access : C [property Field] : Object | provenance | |
| Operator.cs:110:21:110:27 | access to property Field : Object | Operator.cs:110:13:110:17 | [post] this access : C [property Field] : Object | provenance | |
| Operator.cs:116:13:116:19 | access to local variable tainted : Object | Operator.cs:118:23:118:29 | access to local variable tainted : Object | provenance | |
| Operator.cs:116:13:116:19 | access to local variable tainted : Object | Operator.cs:118:23:118:29 | access to local variable tainted : Object | provenance | |
| Operator.cs:116:23:116:39 | call to method Source<Object> : Object | Operator.cs:116:13:116:19 | access to local variable tainted : Object | provenance | |
| Operator.cs:116:23:116:39 | call to method Source<Object> : Object | Operator.cs:116:13:116:19 | access to local variable tainted : Object | provenance | |
| Operator.cs:118:13:118:13 | access to local variable y : C [property Field] : Object | Operator.cs:119:14:119:14 | access to local variable y : C [property Field] : Object | provenance | |
| Operator.cs:118:13:118:13 | access to local variable y : C [property Field] : Object | Operator.cs:119:14:119:14 | access to local variable y : C [property Field] : Object | provenance | |
| Operator.cs:118:17:118:30 | object creation of type C : C [property Field] : Object | Operator.cs:118:13:118:13 | access to local variable y : C [property Field] : Object | provenance | |
| Operator.cs:118:17:118:30 | object creation of type C : C [property Field] : Object | Operator.cs:118:13:118:13 | access to local variable y : C [property Field] : Object | provenance | |
| Operator.cs:118:23:118:29 | access to local variable tainted : Object | Operator.cs:103:25:103:25 | o : Object | provenance | |
| Operator.cs:118:23:118:29 | access to local variable tainted : Object | Operator.cs:103:25:103:25 | o : Object | provenance | |
| Operator.cs:118:23:118:29 | access to local variable tainted : Object | Operator.cs:118:17:118:30 | object creation of type C : C [property Field] : Object | provenance | |
| Operator.cs:118:23:118:29 | access to local variable tainted : Object | Operator.cs:118:17:118:30 | object creation of type C : C [property Field] : Object | provenance | |
| Operator.cs:119:9:119:9 | [post] access to local variable x : C [property Field] : Object | Operator.cs:120:14:120:14 | access to local variable x : C [property Field] : Object | provenance | |
| Operator.cs:119:9:119:9 | [post] access to local variable x : C [property Field] : Object | Operator.cs:120:14:120:14 | access to local variable x : C [property Field] : Object | provenance | |
| Operator.cs:119:14:119:14 | access to local variable y : C [property Field] : Object | Operator.cs:108:35:108:35 | x : C [property Field] : Object | provenance | |
| Operator.cs:119:14:119:14 | access to local variable y : C [property Field] : Object | Operator.cs:108:35:108:35 | x : C [property Field] : Object | provenance | |
| Operator.cs:119:14:119:14 | access to local variable y : C [property Field] : Object | Operator.cs:119:9:119:9 | [post] access to local variable x : C [property Field] : Object | provenance | |
| Operator.cs:119:14:119:14 | access to local variable y : C [property Field] : Object | Operator.cs:119:9:119:9 | [post] access to local variable x : C [property Field] : Object | provenance | |
| Operator.cs:120:14:120:14 | access to local variable x : C [property Field] : Object | Operator.cs:120:14:120:20 | access to property Field | provenance | |
| Operator.cs:120:14:120:14 | access to local variable x : C [property Field] : Object | Operator.cs:120:14:120:20 | access to property Field | provenance | |
nodes
| Operator.cs:9:39:9:39 | x : C | semmle.label | x : C |
| Operator.cs:9:39:9:39 | x : C | semmle.label | x : C |
@@ -205,6 +239,42 @@ nodes
| Operator.cs:84:17:84:29 | call to method Source<C> : C | semmle.label | call to method Source<C> : C |
| Operator.cs:85:18:85:18 | access to local variable y : C | semmle.label | access to local variable y : C |
| Operator.cs:85:18:85:18 | access to local variable y : C | semmle.label | access to local variable y : C |
| Operator.cs:103:16:103:16 | this [Return] : C [property Field] : Object | semmle.label | this [Return] : C [property Field] : Object |
| Operator.cs:103:16:103:16 | this [Return] : C [property Field] : Object | semmle.label | this [Return] : C [property Field] : Object |
| Operator.cs:103:25:103:25 | o : Object | semmle.label | o : Object |
| Operator.cs:103:25:103:25 | o : Object | semmle.label | o : Object |
| Operator.cs:105:13:105:17 | [post] this access : C [property Field] : Object | semmle.label | [post] this access : C [property Field] : Object |
| Operator.cs:105:13:105:17 | [post] this access : C [property Field] : Object | semmle.label | [post] this access : C [property Field] : Object |
| Operator.cs:105:21:105:21 | access to parameter o : Object | semmle.label | access to parameter o : Object |
| Operator.cs:105:21:105:21 | access to parameter o : Object | semmle.label | access to parameter o : Object |
| Operator.cs:108:30:108:31 | this [Return] : C [property Field] : Object | semmle.label | this [Return] : C [property Field] : Object |
| Operator.cs:108:30:108:31 | this [Return] : C [property Field] : Object | semmle.label | this [Return] : C [property Field] : Object |
| Operator.cs:108:35:108:35 | x : C [property Field] : Object | semmle.label | x : C [property Field] : Object |
| Operator.cs:108:35:108:35 | x : C [property Field] : Object | semmle.label | x : C [property Field] : Object |
| Operator.cs:110:13:110:17 | [post] this access : C [property Field] : Object | semmle.label | [post] this access : C [property Field] : Object |
| Operator.cs:110:13:110:17 | [post] this access : C [property Field] : Object | semmle.label | [post] this access : C [property Field] : Object |
| Operator.cs:110:21:110:21 | access to parameter x : C [property Field] : Object | semmle.label | access to parameter x : C [property Field] : Object |
| Operator.cs:110:21:110:21 | access to parameter x : C [property Field] : Object | semmle.label | access to parameter x : C [property Field] : Object |
| Operator.cs:110:21:110:27 | access to property Field : Object | semmle.label | access to property Field : Object |
| Operator.cs:110:21:110:27 | access to property Field : Object | semmle.label | access to property Field : Object |
| Operator.cs:116:13:116:19 | access to local variable tainted : Object | semmle.label | access to local variable tainted : Object |
| Operator.cs:116:13:116:19 | access to local variable tainted : Object | semmle.label | access to local variable tainted : Object |
| Operator.cs:116:23:116:39 | call to method Source<Object> : Object | semmle.label | call to method Source<Object> : Object |
| Operator.cs:116:23:116:39 | call to method Source<Object> : Object | semmle.label | call to method Source<Object> : Object |
| Operator.cs:118:13:118:13 | access to local variable y : C [property Field] : Object | semmle.label | access to local variable y : C [property Field] : Object |
| Operator.cs:118:13:118:13 | access to local variable y : C [property Field] : Object | semmle.label | access to local variable y : C [property Field] : Object |
| Operator.cs:118:17:118:30 | object creation of type C : C [property Field] : Object | semmle.label | object creation of type C : C [property Field] : Object |
| Operator.cs:118:17:118:30 | object creation of type C : C [property Field] : Object | semmle.label | object creation of type C : C [property Field] : Object |
| Operator.cs:118:23:118:29 | access to local variable tainted : Object | semmle.label | access to local variable tainted : Object |
| Operator.cs:118:23:118:29 | access to local variable tainted : Object | semmle.label | access to local variable tainted : Object |
| Operator.cs:119:9:119:9 | [post] access to local variable x : C [property Field] : Object | semmle.label | [post] access to local variable x : C [property Field] : Object |
| Operator.cs:119:9:119:9 | [post] access to local variable x : C [property Field] : Object | semmle.label | [post] access to local variable x : C [property Field] : Object |
| Operator.cs:119:14:119:14 | access to local variable y : C [property Field] : Object | semmle.label | access to local variable y : C [property Field] : Object |
| Operator.cs:119:14:119:14 | access to local variable y : C [property Field] : Object | semmle.label | access to local variable y : C [property Field] : Object |
| Operator.cs:120:14:120:14 | access to local variable x : C [property Field] : Object | semmle.label | access to local variable x : C [property Field] : Object |
| Operator.cs:120:14:120:14 | access to local variable x : C [property Field] : Object | semmle.label | access to local variable x : C [property Field] : Object |
| Operator.cs:120:14:120:20 | access to property Field | semmle.label | access to property Field |
| Operator.cs:120:14:120:20 | access to property Field | semmle.label | access to property Field |
subpaths
| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:16:38:16:38 | x : C | Operator.cs:16:49:16:49 | access to parameter x : C | Operator.cs:29:17:29:21 | call to operator + : C |
| Operator.cs:29:17:29:17 | access to local variable x : C | Operator.cs:16:38:16:38 | x : C | Operator.cs:16:49:16:49 | access to parameter x : C | Operator.cs:29:17:29:21 | call to operator + : C |
@@ -218,6 +288,10 @@ subpaths
| Operator.cs:64:21:64:21 | access to parameter y : C | Operator.cs:21:43:21:43 | y : C | Operator.cs:21:49:21:49 | access to parameter y : C | Operator.cs:64:17:64:21 | call to operator / : C |
| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:22:51:22:51 | y : C | Operator.cs:22:57:22:57 | access to parameter y : C | Operator.cs:77:25:77:29 | call to operator checked / : C |
| Operator.cs:77:29:77:29 | access to parameter y : C | Operator.cs:22:51:22:51 | y : C | Operator.cs:22:57:22:57 | access to parameter y : C | Operator.cs:77:25:77:29 | call to operator checked / : C |
| Operator.cs:118:23:118:29 | access to local variable tainted : Object | Operator.cs:103:25:103:25 | o : Object | Operator.cs:103:16:103:16 | this [Return] : C [property Field] : Object | Operator.cs:118:17:118:30 | object creation of type C : C [property Field] : Object |
| Operator.cs:118:23:118:29 | access to local variable tainted : Object | Operator.cs:103:25:103:25 | o : Object | Operator.cs:103:16:103:16 | this [Return] : C [property Field] : Object | Operator.cs:118:17:118:30 | object creation of type C : C [property Field] : Object |
| Operator.cs:119:14:119:14 | access to local variable y : C [property Field] : Object | Operator.cs:108:35:108:35 | x : C [property Field] : Object | Operator.cs:108:30:108:31 | this [Return] : C [property Field] : Object | Operator.cs:119:9:119:9 | [post] access to local variable x : C [property Field] : Object |
| Operator.cs:119:14:119:14 | access to local variable y : C [property Field] : Object | Operator.cs:108:35:108:35 | x : C [property Field] : Object | Operator.cs:108:30:108:31 | this [Return] : C [property Field] : Object | Operator.cs:119:9:119:9 | [post] access to local variable x : C [property Field] : Object |
testFailures
#select
| Operator.cs:30:14:30:14 | access to local variable z | Operator.cs:27:17:27:28 | call to method Source<C> : C | Operator.cs:30:14:30:14 | access to local variable z | $@ | Operator.cs:27:17:27:28 | call to method Source<C> : C | call to method Source<C> : C |
@@ -232,3 +306,5 @@ testFailures
| Operator.cs:65:14:65:14 | (...) ... | Operator.cs:71:17:71:29 | call to method Source<C> : C | Operator.cs:65:14:65:14 | (...) ... | $@ | Operator.cs:71:17:71:29 | call to method Source<C> : C | call to method Source<C> : C |
| Operator.cs:78:14:78:14 | (...) ... | Operator.cs:84:17:84:29 | call to method Source<C> : C | Operator.cs:78:14:78:14 | (...) ... | $@ | Operator.cs:84:17:84:29 | call to method Source<C> : C | call to method Source<C> : C |
| Operator.cs:78:14:78:14 | (...) ... | Operator.cs:84:17:84:29 | call to method Source<C> : C | Operator.cs:78:14:78:14 | (...) ... | $@ | Operator.cs:84:17:84:29 | call to method Source<C> : C | call to method Source<C> : C |
| Operator.cs:120:14:120:20 | access to property Field | Operator.cs:116:23:116:39 | call to method Source<Object> : Object | Operator.cs:120:14:120:20 | access to property Field | $@ | Operator.cs:116:23:116:39 | call to method Source<Object> : Object | call to method Source<Object> : Object |
| Operator.cs:120:14:120:20 | access to property Field | Operator.cs:116:23:116:39 | call to method Source<Object> : Object | Operator.cs:120:14:120:20 | access to property Field | $@ | Operator.cs:116:23:116:39 | call to method Source<Object> : Object | call to method Source<Object> : Object |

View File

@@ -1 +1 @@
| operators.cs:16:42:16:43 | ++ | operators.cs:7:18:7:26 | IntVector |
| operators.cs:15:42:15:43 | ++ | operators.cs:7:18:7:26 | IntVector |

View File

@@ -1 +1 @@
| operators.cs:16:42:16:43 | ++ | operators.cs:7:18:7:26 | IntVector |
| operators.cs:15:42:15:43 | ++ | operators.cs:7:18:7:26 | IntVector |

View File

@@ -1 +1 @@
| operators.cs:51:32:51:39 | implicit conversion |
| operators.cs:96:32:96:39 | implicit conversion |

View File

@@ -1 +1 @@
| operators.cs:56:32:56:39 | explicit conversion |
| operators.cs:101:32:101:39 | explicit conversion |

View File

@@ -0,0 +1,15 @@
| operators.cs:23:30:23:31 | += | operators.cs:61:13:61:22 | ... += ... |
| operators.cs:31:38:31:39 | checked += | operators.cs:77:17:77:26 | ... += ... |
| operators.cs:33:38:33:39 | checked -= | operators.cs:78:17:78:26 | ... -= ... |
| operators.cs:34:30:34:31 | -= | operators.cs:64:13:64:22 | ... -= ... |
| operators.cs:36:38:36:39 | checked *= | operators.cs:79:17:79:26 | ... *= ... |
| operators.cs:37:30:37:31 | *= | operators.cs:65:13:65:22 | ... *= ... |
| operators.cs:39:38:39:39 | checked /= | operators.cs:80:17:80:26 | ... /= ... |
| operators.cs:40:30:40:31 | /= | operators.cs:66:13:66:22 | ... /= ... |
| operators.cs:42:30:42:31 | %= | operators.cs:67:13:67:22 | ... %= ... |
| operators.cs:43:30:43:31 | &= | operators.cs:68:13:68:22 | ... &= ... |
| operators.cs:44:30:44:31 | \|= | operators.cs:69:13:69:22 | ... \|= ... |
| operators.cs:45:30:45:31 | ^= | operators.cs:70:13:70:22 | ... ^= ... |
| operators.cs:46:30:46:32 | <<= | operators.cs:71:13:71:23 | ... <<= ... |
| operators.cs:47:30:47:32 | >>= | operators.cs:72:13:72:23 | ... >>= ... |
| operators.cs:48:30:48:33 | >>>= | operators.cs:73:13:73:24 | ... >>>= ... |

View File

@@ -0,0 +1,9 @@
/**
* @name Test for operators
*/
import csharp
from CompoundAssignmentOperator cao, CompoundAssignmentOperatorCall call
where call.getTarget() = cao
select cao, call

View File

@@ -1,154 +1,339 @@
operators.cs:
# 5| [NamespaceDeclaration] namespace ... { ... }
# 7| 1: [Class] IntVector
# 10| 5: [InstanceConstructor] IntVector
# 9| 5: [InstanceConstructor] IntVector
#-----| 2: (Parameters)
# 10| 0: [Parameter] length
# 10| -1: [TypeMention] int
# 10| 4: [BlockStmt] {...}
# 12| 6: [Property] Length
# 12| -1: [TypeMention] int
# 12| 3: [Getter] get_Length
# 12| 4: [BlockStmt] {...}
# 12| 0: [ReturnStmt] return ...;
# 12| 0: [IntLiteral] 4
# 14| 7: [Indexer] Item
# 14| -1: [TypeMention] int
# 9| 0: [Parameter] length
# 9| -1: [TypeMention] int
# 9| 4: [BlockStmt] {...}
# 11| 6: [Property] Length
# 11| -1: [TypeMention] int
# 11| 3: [Getter] get_Length
# 11| 4: [BlockStmt] {...}
# 11| 0: [ReturnStmt] return ...;
# 11| 0: [IntLiteral] 4
# 13| 7: [Indexer] Item
# 13| -1: [TypeMention] int
#-----| 1: (Parameters)
# 14| 0: [Parameter] index
# 14| -1: [TypeMention] int
# 14| 3: [Getter] get_Item
# 13| 0: [Parameter] index
# 13| -1: [TypeMention] int
# 13| 3: [Getter] get_Item
#-----| 2: (Parameters)
# 14| 0: [Parameter] index
# 14| 4: [BlockStmt] {...}
# 14| 0: [ReturnStmt] return ...;
# 14| 0: [IntLiteral] 0
# 14| 4: [Setter] set_Item
# 13| 0: [Parameter] index
# 13| 4: [BlockStmt] {...}
# 13| 0: [ReturnStmt] return ...;
# 13| 0: [IntLiteral] 0
# 13| 4: [Setter] set_Item
#-----| 2: (Parameters)
# 14| 0: [Parameter] index
# 14| 1: [Parameter] value
# 14| 4: [BlockStmt] {...}
# 16| 8: [IncrementOperator] ++
# 16| -1: [TypeMention] IntVector
# 13| 0: [Parameter] index
# 13| 1: [Parameter] value
# 13| 4: [BlockStmt] {...}
# 15| 8: [IncrementOperator] ++
# 15| -1: [TypeMention] IntVector
#-----| 2: (Parameters)
# 16| 0: [Parameter] iv
# 16| -1: [TypeMention] IntVector
# 17| 4: [BlockStmt] {...}
# 18| 0: [LocalVariableDeclStmt] ... ...;
# 18| 0: [LocalVariableDeclAndInitExpr] IntVector temp = ...
# 18| -1: [TypeMention] IntVector
# 18| 0: [LocalVariableAccess] access to local variable temp
# 18| 1: [ObjectCreation] object creation of type IntVector
# 18| -1: [TypeMention] IntVector
# 18| 0: [PropertyCall] access to property Length
# 18| -1: [ParameterAccess] access to parameter iv
# 19| 1: [ForStmt] for (...;...;...) ...
# 19| -1: [LocalVariableDeclAndInitExpr] Int32 i = ...
# 19| -1: [TypeMention] int
# 19| 0: [LocalVariableAccess] access to local variable i
# 19| 1: [IntLiteral] 0
# 19| 0: [LTExpr] ... < ...
# 19| 0: [LocalVariableAccess] access to local variable i
# 19| 1: [PropertyCall] access to property Length
# 19| -1: [ParameterAccess] access to parameter iv
# 19| 1: [PostIncrExpr] ...++
# 19| 0: [LocalVariableAccess] access to local variable i
# 20| 2: [ExprStmt] ...;
# 20| 0: [AssignExpr] ... = ...
# 20| 0: [IndexerCall] access to indexer
# 20| -1: [LocalVariableAccess] access to local variable temp
# 20| 0: [LocalVariableAccess] access to local variable i
# 20| 1: [AddExpr] ... + ...
# 20| 0: [IndexerCall] access to indexer
# 20| -1: [ParameterAccess] access to parameter iv
# 20| 0: [LocalVariableAccess] access to local variable i
# 20| 1: [IntLiteral] 1
# 21| 2: [ReturnStmt] return ...;
# 21| 0: [LocalVariableAccess] access to local variable temp
# 26| 2: [Class] TestUnaryOperator
# 29| 6: [Method] Main
# 29| -1: [TypeMention] Void
# 30| 4: [BlockStmt] {...}
# 31| 0: [LocalVariableDeclStmt] ... ...;
# 31| 0: [LocalVariableDeclAndInitExpr] IntVector iv1 = ...
# 31| -1: [TypeMention] IntVector
# 31| 0: [LocalVariableAccess] access to local variable iv1
# 31| 1: [ObjectCreation] object creation of type IntVector
# 31| -1: [TypeMention] IntVector
# 31| 0: [IntLiteral] 4
# 32| 1: [LocalVariableDeclStmt] ... ...;
# 32| 0: [LocalVariableDeclExpr] IntVector iv2
# 32| 0: [TypeMention] IntVector
# 33| 2: [ExprStmt] ...;
# 33| 0: [AssignExpr] ... = ...
# 33| 0: [LocalVariableAccess] access to local variable iv2
# 33| 1: [OperatorCall] call to operator ++
# 33| 0: [LocalVariableAccess] access to local variable iv1
# 34| 3: [ExprStmt] ...;
# 34| 0: [AssignExpr] ... = ...
# 34| 0: [LocalVariableAccess] access to local variable iv2
# 34| 1: [OperatorCall] call to operator ++
# 34| 0: [LocalVariableAccess] access to local variable iv1
# 39| 3: [Struct] Digit
# 42| 6: [Field] value
# 42| -1: [TypeMention] byte
# 44| 7: [InstanceConstructor] Digit
# 15| 0: [Parameter] iv
# 15| -1: [TypeMention] IntVector
# 16| 4: [BlockStmt] {...}
# 17| 0: [LocalVariableDeclStmt] ... ...;
# 17| 0: [LocalVariableDeclAndInitExpr] IntVector temp = ...
# 17| -1: [TypeMention] IntVector
# 17| 0: [LocalVariableAccess] access to local variable temp
# 17| 1: [ObjectCreation] object creation of type IntVector
# 17| -1: [TypeMention] IntVector
# 17| 0: [PropertyCall] access to property Length
# 17| -1: [ParameterAccess] access to parameter iv
# 18| 1: [ForStmt] for (...;...;...) ...
# 18| -1: [LocalVariableDeclAndInitExpr] Int32 i = ...
# 18| -1: [TypeMention] int
# 18| 0: [LocalVariableAccess] access to local variable i
# 18| 1: [IntLiteral] 0
# 18| 0: [LTExpr] ... < ...
# 18| 0: [LocalVariableAccess] access to local variable i
# 18| 1: [PropertyCall] access to property Length
# 18| -1: [ParameterAccess] access to parameter iv
# 18| 1: [PostIncrExpr] ...++
# 18| 0: [LocalVariableAccess] access to local variable i
# 19| 2: [ExprStmt] ...;
# 19| 0: [AssignExpr] ... = ...
# 19| 0: [IndexerCall] access to indexer
# 19| -1: [LocalVariableAccess] access to local variable temp
# 19| 0: [LocalVariableAccess] access to local variable i
# 19| 1: [AddExpr] ... + ...
# 19| 0: [IndexerCall] access to indexer
# 19| -1: [ParameterAccess] access to parameter iv
# 19| 0: [LocalVariableAccess] access to local variable i
# 19| 1: [IntLiteral] 1
# 20| 2: [ReturnStmt] return ...;
# 20| 0: [LocalVariableAccess] access to local variable temp
# 23| 9: [AddCompoundAssignmentOperator] +=
# 23| -1: [TypeMention] Void
#-----| 2: (Parameters)
# 44| 0: [Parameter] value
# 44| -1: [TypeMention] byte
# 23| 0: [Parameter] n
# 23| -1: [TypeMention] IntVector
# 24| 4: [BlockStmt] {...}
# 25| 0: [IfStmt] if (...) ...
# 25| 0: [NEExpr] ... != ...
# 25| 0: [PropertyCall] access to property Length
# 25| -1: [ParameterAccess] access to parameter n
# 25| 1: [PropertyCall] access to property Length
# 26| 1: [ThrowStmt] throw ...;
# 26| 0: [ObjectCreation] object creation of type ArgumentException
# 26| 0: [TypeMention] ArgumentException
# 27| 1: [ForStmt] for (...;...;...) ...
# 27| -1: [LocalVariableDeclAndInitExpr] Int32 i = ...
# 27| -1: [TypeMention] int
# 27| 0: [LocalVariableAccess] access to local variable i
# 27| 1: [IntLiteral] 0
# 27| 0: [LTExpr] ... < ...
# 27| 0: [LocalVariableAccess] access to local variable i
# 27| 1: [PropertyCall] access to property Length
# 27| 1: [PostIncrExpr] ...++
# 27| 0: [LocalVariableAccess] access to local variable i
# 28| 2: [ExprStmt] ...;
# 28| 0: [AssignAddExpr] ... += ...
# 28| 0: [IndexerCall] access to indexer
# 28| -1: [ThisAccess] this access
# 28| 0: [LocalVariableAccess] access to local variable i
# 28| 1: [IndexerCall] access to indexer
# 28| -1: [ParameterAccess] access to parameter n
# 28| 0: [LocalVariableAccess] access to local variable i
# 31| 10: [CheckedAddCompoundAssignmentOperator] checked +=
# 31| -1: [TypeMention] Void
#-----| 2: (Parameters)
# 31| 0: [Parameter] n
# 31| -1: [TypeMention] IntVector
# 31| 4: [BlockStmt] {...}
# 33| 11: [CheckedSubCompoundAssignmentOperator] checked -=
# 33| -1: [TypeMention] Void
#-----| 2: (Parameters)
# 33| 0: [Parameter] n
# 33| -1: [TypeMention] IntVector
# 33| 4: [BlockStmt] {...}
# 34| 12: [SubCompoundAssignmentOperator] -=
# 34| -1: [TypeMention] Void
#-----| 2: (Parameters)
# 34| 0: [Parameter] n
# 34| -1: [TypeMention] IntVector
# 34| 4: [BlockStmt] {...}
# 36| 13: [CheckedMulCompoundAssignmentOperator] checked *=
# 36| -1: [TypeMention] Void
#-----| 2: (Parameters)
# 36| 0: [Parameter] n
# 36| -1: [TypeMention] IntVector
# 36| 4: [BlockStmt] {...}
# 37| 14: [MulCompoundAssignmentOperator] *=
# 37| -1: [TypeMention] Void
#-----| 2: (Parameters)
# 37| 0: [Parameter] n
# 37| -1: [TypeMention] IntVector
# 37| 4: [BlockStmt] {...}
# 39| 15: [CheckedDivCompoundAssignmentOperator] checked /=
# 39| -1: [TypeMention] Void
#-----| 2: (Parameters)
# 39| 0: [Parameter] n
# 39| -1: [TypeMention] IntVector
# 39| 4: [BlockStmt] {...}
# 40| 16: [DivCompoundAssignmentOperator] /=
# 40| -1: [TypeMention] Void
#-----| 2: (Parameters)
# 40| 0: [Parameter] n
# 40| -1: [TypeMention] IntVector
# 40| 4: [BlockStmt] {...}
# 42| 17: [RemCompoundAssignmentOperator] %=
# 42| -1: [TypeMention] Void
#-----| 2: (Parameters)
# 42| 0: [Parameter] n
# 42| -1: [TypeMention] IntVector
# 42| 4: [BlockStmt] {...}
# 43| 18: [AndCompoundAssignmentOperator] &=
# 43| -1: [TypeMention] Void
#-----| 2: (Parameters)
# 43| 0: [Parameter] n
# 43| -1: [TypeMention] IntVector
# 43| 4: [BlockStmt] {...}
# 44| 19: [OrCompoundAssignmentOperator] |=
# 44| -1: [TypeMention] Void
#-----| 2: (Parameters)
# 44| 0: [Parameter] n
# 44| -1: [TypeMention] IntVector
# 44| 4: [BlockStmt] {...}
# 45| 20: [XorCompoundAssignmentOperator] ^=
# 45| -1: [TypeMention] Void
#-----| 2: (Parameters)
# 45| 0: [Parameter] n
# 45| -1: [TypeMention] IntVector
# 45| 4: [BlockStmt] {...}
# 46| 0: [IfStmt] if (...) ...
# 46| 0: [LogicalOrExpr] ... || ...
# 46| 0: [LTExpr] ... < ...
# 46| 0: [CastExpr] (...) ...
# 46| 1: [ParameterAccess] access to parameter value
# 46| 1: [IntLiteral] 0
# 46| 1: [GTExpr] ... > ...
# 46| 0: [CastExpr] (...) ...
# 46| 1: [ParameterAccess] access to parameter value
# 46| 1: [IntLiteral] 9
# 47| 1: [ThrowStmt] throw ...;
# 47| 0: [ObjectCreation] object creation of type ArgumentException
# 47| 0: [TypeMention] ArgumentException
# 48| 1: [ExprStmt] ...;
# 48| 0: [AssignExpr] ... = ...
# 48| 0: [FieldAccess] access to field value
# 48| -1: [ThisAccess] this access
# 48| 1: [ParameterAccess] access to parameter value
# 51| 8: [ImplicitConversionOperator] implicit conversion
# 51| -1: [TypeMention] byte
# 46| 21: [LeftShiftCompoundAssignmentOperator] <<=
# 46| -1: [TypeMention] Void
#-----| 2: (Parameters)
# 51| 0: [Parameter] d
# 51| -1: [TypeMention] Digit
# 52| 4: [BlockStmt] {...}
# 53| 0: [ReturnStmt] return ...;
# 53| 0: [FieldAccess] access to field value
# 53| -1: [ParameterAccess] access to parameter d
# 56| 9: [ExplicitConversionOperator] explicit conversion
# 56| -1: [TypeMention] Digit
# 46| 0: [Parameter] n
# 46| -1: [TypeMention] IntVector
# 46| 4: [BlockStmt] {...}
# 47| 22: [RightShiftCompoundAssignmentOperator] >>=
# 47| -1: [TypeMention] Void
#-----| 2: (Parameters)
# 56| 0: [Parameter] b
# 56| -1: [TypeMention] byte
# 57| 4: [BlockStmt] {...}
# 58| 0: [ReturnStmt] return ...;
# 58| 0: [ObjectCreation] object creation of type Digit
# 58| -1: [TypeMention] Digit
# 58| 0: [ParameterAccess] access to parameter b
# 63| 4: [Class] TestConversionOperator
# 66| 6: [Method] Main
# 66| -1: [TypeMention] Void
# 67| 4: [BlockStmt] {...}
# 68| 0: [LocalVariableDeclStmt] ... ...;
# 68| 0: [LocalVariableDeclAndInitExpr] Digit d = ...
# 68| -1: [TypeMention] Digit
# 68| 0: [LocalVariableAccess] access to local variable d
# 68| 1: [OperatorCall] call to operator explicit conversion
# 68| -1: [TypeMention] Digit
# 68| 0: [CastExpr] (...) ...
# 68| 1: [IntLiteral] 8
# 69| 1: [LocalVariableDeclStmt] ... ...;
# 69| 0: [LocalVariableDeclAndInitExpr] Byte b = ...
# 69| -1: [TypeMention] byte
# 69| 0: [LocalVariableAccess] access to local variable b
# 69| 1: [OperatorCall] call to operator implicit conversion
# 69| 0: [LocalVariableAccess] access to local variable d
# 47| 0: [Parameter] n
# 47| -1: [TypeMention] IntVector
# 47| 4: [BlockStmt] {...}
# 48| 23: [UnsignedRightShiftCompoundAssignmentOperator] >>>=
# 48| -1: [TypeMention] Void
#-----| 2: (Parameters)
# 48| 0: [Parameter] n
# 48| -1: [TypeMention] IntVector
# 48| 4: [BlockStmt] {...}
# 51| 2: [Class] TestOperator
# 53| 6: [Method] Main
# 53| -1: [TypeMention] Void
# 54| 4: [BlockStmt] {...}
# 55| 0: [LocalVariableDeclStmt] ... ...;
# 55| 0: [LocalVariableDeclAndInitExpr] IntVector iv1 = ...
# 55| -1: [TypeMention] IntVector
# 55| 0: [LocalVariableAccess] access to local variable iv1
# 55| 1: [ObjectCreation] object creation of type IntVector
# 55| -1: [TypeMention] IntVector
# 55| 0: [IntLiteral] 4
# 56| 1: [LocalVariableDeclStmt] ... ...;
# 56| 0: [LocalVariableDeclExpr] IntVector iv2
# 56| 0: [TypeMention] IntVector
# 57| 2: [ExprStmt] ...;
# 57| 0: [AssignExpr] ... = ...
# 57| 0: [LocalVariableAccess] access to local variable iv2
# 57| 1: [OperatorCall] call to operator ++
# 57| 0: [LocalVariableAccess] access to local variable iv1
# 58| 3: [ExprStmt] ...;
# 58| 0: [AssignExpr] ... = ...
# 58| 0: [LocalVariableAccess] access to local variable iv2
# 58| 1: [OperatorCall] call to operator ++
# 58| 0: [LocalVariableAccess] access to local variable iv1
# 60| 4: [LocalVariableDeclStmt] ... ...;
# 60| 0: [LocalVariableDeclAndInitExpr] IntVector iv3 = ...
# 60| -1: [TypeMention] IntVector
# 60| 0: [LocalVariableAccess] access to local variable iv3
# 60| 1: [ObjectCreation] object creation of type IntVector
# 60| -1: [TypeMention] IntVector
# 60| 0: [IntLiteral] 4
# 61| 5: [ExprStmt] ...;
# 61| 0: [AssignAddExpr] ... += ...
# 61| 0: [LocalVariableAccess] access to local variable iv3
# 61| 1: [LocalVariableAccess] access to local variable iv2
# 64| 6: [ExprStmt] ...;
# 64| 0: [AssignSubExpr] ... -= ...
# 64| 0: [LocalVariableAccess] access to local variable iv3
# 64| 1: [LocalVariableAccess] access to local variable iv2
# 65| 7: [ExprStmt] ...;
# 65| 0: [AssignMulExpr] ... *= ...
# 65| 0: [LocalVariableAccess] access to local variable iv3
# 65| 1: [LocalVariableAccess] access to local variable iv2
# 66| 8: [ExprStmt] ...;
# 66| 0: [AssignDivExpr] ... /= ...
# 66| 0: [LocalVariableAccess] access to local variable iv3
# 66| 1: [LocalVariableAccess] access to local variable iv2
# 67| 9: [ExprStmt] ...;
# 67| 0: [AssignRemExpr] ... %= ...
# 67| 0: [LocalVariableAccess] access to local variable iv3
# 67| 1: [LocalVariableAccess] access to local variable iv2
# 68| 10: [ExprStmt] ...;
# 68| 0: [AssignAndExpr] ... &= ...
# 68| 0: [LocalVariableAccess] access to local variable iv3
# 68| 1: [LocalVariableAccess] access to local variable iv2
# 69| 11: [ExprStmt] ...;
# 69| 0: [AssignOrExpr] ... |= ...
# 69| 0: [LocalVariableAccess] access to local variable iv3
# 69| 1: [LocalVariableAccess] access to local variable iv2
# 70| 12: [ExprStmt] ...;
# 70| 0: [AssignXorExpr] ... ^= ...
# 70| 0: [LocalVariableAccess] access to local variable iv3
# 70| 1: [LocalVariableAccess] access to local variable iv2
# 71| 13: [ExprStmt] ...;
# 71| 0: [AssignLeftShiftExpr] ... <<= ...
# 71| 0: [LocalVariableAccess] access to local variable iv3
# 71| 1: [LocalVariableAccess] access to local variable iv2
# 72| 14: [ExprStmt] ...;
# 72| 0: [AssignRightShiftExpr] ... >>= ...
# 72| 0: [LocalVariableAccess] access to local variable iv3
# 72| 1: [LocalVariableAccess] access to local variable iv2
# 73| 15: [ExprStmt] ...;
# 73| 0: [AssignUnsignedRightShiftExpr] ... >>>= ...
# 73| 0: [LocalVariableAccess] access to local variable iv3
# 73| 1: [LocalVariableAccess] access to local variable iv2
# 75| 16: [CheckedStmt] checked {...}
# 76| 0: [BlockStmt] {...}
# 77| 0: [ExprStmt] ...;
# 77| 0: [AssignAddExpr] ... += ...
# 77| 0: [LocalVariableAccess] access to local variable iv3
# 77| 1: [LocalVariableAccess] access to local variable iv2
# 78| 1: [ExprStmt] ...;
# 78| 0: [AssignSubExpr] ... -= ...
# 78| 0: [LocalVariableAccess] access to local variable iv3
# 78| 1: [LocalVariableAccess] access to local variable iv2
# 79| 2: [ExprStmt] ...;
# 79| 0: [AssignMulExpr] ... *= ...
# 79| 0: [LocalVariableAccess] access to local variable iv3
# 79| 1: [LocalVariableAccess] access to local variable iv2
# 80| 3: [ExprStmt] ...;
# 80| 0: [AssignDivExpr] ... /= ...
# 80| 0: [LocalVariableAccess] access to local variable iv3
# 80| 1: [LocalVariableAccess] access to local variable iv2
# 85| 3: [Struct] Digit
# 87| 6: [Field] value
# 87| -1: [TypeMention] byte
# 89| 7: [InstanceConstructor] Digit
#-----| 2: (Parameters)
# 89| 0: [Parameter] value
# 89| -1: [TypeMention] byte
# 90| 4: [BlockStmt] {...}
# 91| 0: [IfStmt] if (...) ...
# 91| 0: [LogicalOrExpr] ... || ...
# 91| 0: [LTExpr] ... < ...
# 91| 0: [CastExpr] (...) ...
# 91| 1: [ParameterAccess] access to parameter value
# 91| 1: [IntLiteral] 0
# 91| 1: [GTExpr] ... > ...
# 91| 0: [CastExpr] (...) ...
# 91| 1: [ParameterAccess] access to parameter value
# 91| 1: [IntLiteral] 9
# 92| 1: [ThrowStmt] throw ...;
# 92| 0: [ObjectCreation] object creation of type ArgumentException
# 92| 0: [TypeMention] ArgumentException
# 93| 1: [ExprStmt] ...;
# 93| 0: [AssignExpr] ... = ...
# 93| 0: [FieldAccess] access to field value
# 93| -1: [ThisAccess] this access
# 93| 1: [ParameterAccess] access to parameter value
# 96| 8: [ImplicitConversionOperator] implicit conversion
# 96| -1: [TypeMention] byte
#-----| 2: (Parameters)
# 96| 0: [Parameter] d
# 96| -1: [TypeMention] Digit
# 97| 4: [BlockStmt] {...}
# 98| 0: [ReturnStmt] return ...;
# 98| 0: [FieldAccess] access to field value
# 98| -1: [ParameterAccess] access to parameter d
# 101| 9: [ExplicitConversionOperator] explicit conversion
# 101| -1: [TypeMention] Digit
#-----| 2: (Parameters)
# 101| 0: [Parameter] b
# 101| -1: [TypeMention] byte
# 102| 4: [BlockStmt] {...}
# 103| 0: [ReturnStmt] return ...;
# 103| 0: [ObjectCreation] object creation of type Digit
# 103| -1: [TypeMention] Digit
# 103| 0: [ParameterAccess] access to parameter b
# 108| 4: [Class] TestConversionOperator
# 111| 6: [Method] Main
# 111| -1: [TypeMention] Void
# 112| 4: [BlockStmt] {...}
# 113| 0: [LocalVariableDeclStmt] ... ...;
# 113| 0: [LocalVariableDeclAndInitExpr] Digit d = ...
# 113| -1: [TypeMention] Digit
# 113| 0: [LocalVariableAccess] access to local variable d
# 113| 1: [OperatorCall] call to operator explicit conversion
# 113| -1: [TypeMention] Digit
# 113| 0: [CastExpr] (...) ...
# 113| 1: [IntLiteral] 8
# 114| 1: [LocalVariableDeclStmt] ... ...;
# 114| 0: [LocalVariableDeclAndInitExpr] Byte b = ...
# 114| -1: [TypeMention] byte
# 114| 0: [LocalVariableAccess] access to local variable b
# 114| 1: [OperatorCall] call to operator implicit conversion
# 114| 0: [LocalVariableAccess] access to local variable d

View File

@@ -6,7 +6,6 @@ namespace Operators
{
public class IntVector
{
public IntVector(int length) { }
public int Length { get { return 4; } }
@@ -21,24 +20,70 @@ namespace Operators
return temp;
}
public void operator +=(IntVector n)
{
if (n.Length != Length)
throw new ArgumentException();
for (int i = 0; i < Length; i++)
this[i] += n[i];
}
public void operator checked +=(IntVector n) { }
public void operator checked -=(IntVector n) { }
public void operator -=(IntVector n) { }
public void operator checked *=(IntVector n) { }
public void operator *=(IntVector n) { }
public void operator checked /=(IntVector n) { }
public void operator /=(IntVector n) { }
public void operator %=(IntVector n) { }
public void operator &=(IntVector n) { }
public void operator |=(IntVector n) { }
public void operator ^=(IntVector n) { }
public void operator <<=(IntVector n) { }
public void operator >>=(IntVector n) { }
public void operator >>>=(IntVector n) { }
}
class TestUnaryOperator
class TestOperator
{
void Main()
{
IntVector iv1 = new IntVector(4); // vector of 4 x 0
IntVector iv2;
iv2 = iv1++; // iv2 contains 4 x 0, iv1 contains 4 x 1
iv2 = ++iv1; // iv2 contains 4 x 2, iv1 contains 4 x 2
}
IntVector iv3 = new IntVector(4); // vector of 4 x 0
iv3 += iv2; // iv3 contains 4 x 2
// The following operations don't do anything.
iv3 -= iv2;
iv3 *= iv2;
iv3 /= iv2;
iv3 %= iv2;
iv3 &= iv2;
iv3 |= iv2;
iv3 ^= iv2;
iv3 <<= iv2;
iv3 >>= iv2;
iv3 >>>= iv2;
checked
{
iv3 += iv2;
iv3 -= iv2;
iv3 *= iv2;
iv3 /= iv2;
}
}
}
public struct Digit
{
byte value;
public Digit(byte value)

View File

@@ -264,6 +264,13 @@ public class C
temp = sa.Length; // BAD (always), but not first
}
public void CompoundAssignment()
{
C c1 = null;
C c2 = new C(true);
c1 += c2; // $ Alert[cs/dereferenced-value-is-always-null]
}
bool m;
C(bool m)
{
@@ -271,4 +278,6 @@ public class C
}
bool Maybe() => this.m;
public void operator +=(C other) { }
}

View File

@@ -24,6 +24,7 @@
| C.cs:249:9:249:9 | access to local variable a | Variable $@ is always null at this dereference. | C.cs:248:15:248:15 | a | a |
| C.cs:260:9:260:10 | access to local variable ia | Variable $@ is always null at this dereference. | C.cs:257:15:257:16 | ia | ia |
| C.cs:261:20:261:21 | access to local variable sa | Variable $@ is always null at this dereference. | C.cs:258:18:258:19 | sa | sa |
| C.cs:271:9:271:10 | access to local variable c1 | Variable $@ is always null at this dereference. | C.cs:269:11:269:12 | c1 | c1 |
| D.cs:120:13:120:13 | access to local variable x | Variable $@ is always null at this dereference. | D.cs:117:13:117:13 | x | x |
| D.cs:197:13:197:13 | access to local variable o | Variable $@ is always null at this dereference. | D.cs:195:13:195:13 | o | o |
| D.cs:207:17:207:17 | access to local variable e | Variable $@ is always null at this dereference. | D.cs:204:26:204:26 | e | e |