diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll index e365385c6d44..3581840014e2 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowDispatch.qll @@ -6,6 +6,7 @@ private import FlowSummaryImpl as FlowSummaryImpl private import semmle.code.csharp.dataflow.FlowSummary as FlowSummary private import semmle.code.csharp.dispatch.Dispatch private import semmle.code.csharp.dispatch.RuntimeCallable +private import semmle.code.csharp.frameworks.System private import semmle.code.csharp.frameworks.system.Collections private import semmle.code.csharp.frameworks.system.collections.Generic private import semmle.code.csharp.internal.Location @@ -82,6 +83,9 @@ private module Cached { } or TSummaryCall(FlowSummary::SummarizedCallable c, FlowSummaryImpl::Private::SummaryNode receiver) { FlowSummaryImpl::Private::summaryCallbackRange(c, receiver) + } or + TImplicitDeconstructCall(ControlFlowNodes::ElementNode cfn, DeconstructMethod deconstruct) { + implicitDeconstructCall(cfn.asExpr(), deconstruct, _) } /** Gets a viable run-time target for the call `call`. */ @@ -364,6 +368,34 @@ pragma[inline_late] private predicate folderDist(Folder f1, Folder f2, int i) = shortestDistances(relevantFolder/1, adjacentFolders/2)(f1, f2, i) +/** + * A synthetic call to a Deconstruct method. + * + * Example: `var (x, y) = r;` where `r` is of type `R` with a `Deconstruct` method. + * The synthetic call is created to represent the deconstruction of `r` into `x` and `y`. + * That is, we synthesize a call to deconstruct `r.Deconstruct(out var x0, out var y0)`, with synthetic nodes representing the out parameters `x0` and `y0`. + */ +class ImplicitDeconstructCallDataFlowCall extends DataFlowCall, TImplicitDeconstructCall { + private ControlFlowNodes::ElementNode cfn; + private Method deconstruct; + + ImplicitDeconstructCallDataFlowCall() { this = TImplicitDeconstructCall(cfn, deconstruct) } + + override DataFlowCallable getARuntimeTarget() { + result.getUnderlyingCallable() = deconstruct.getUnboundDeclaration() + } + + override ControlFlowNodes::ElementNode getControlFlowNode() { result = cfn } + + override DataFlow::ExprNode getNode() { result.getControlFlowNode() = cfn } + + override DataFlowCallable getEnclosingCallable() { result.getAControlFlowNode() = cfn } + + override string toString() { result = cfn.toString() } + + override Location getLocation() { result = cfn.getLocation() } +} + /** A non-delegate C# call relevant for data flow. */ class NonDelegateDataFlowCall extends DataFlowCall, TNonDelegateCall { private ControlFlowNodes::ElementNode cfn; diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll index a829eafa51cd..05f2ecb3979d 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/DataFlowPrivate.qll @@ -18,6 +18,7 @@ private import semmle.code.csharp.frameworks.system.linq.Expressions private import semmle.code.csharp.frameworks.NHibernate private import semmle.code.csharp.frameworks.Razor private import semmle.code.csharp.frameworks.system.threading.Tasks +private import semmle.code.csharp.frameworks.System private import semmle.code.csharp.internal.Location private import codeql.util.Unit private import codeql.util.Boolean @@ -602,11 +603,78 @@ module LocalFlow { not v.getAssignable().(Modifiable).isStatic() } + /** + * Holds if there is a data flow step from the output of a Deconstruct method + * to the corresponding target in the tuple assignment. + * + * Example: `var (x, y) = r;` where `r` is of type `R` with a `Deconstruct` method. + * In this example, `x` and `y` are the targets receiving the values from the out parameters in the synthetic + * call `r.Deconstruct(out var x0, out var y0)` (that this `x0` -> `x` and `y0` -> `y`). + */ + private predicate implicitDeconstructCallStep( + ImplicitDeconstructMethodCallParameterNode output, AssignableDefinitionNode target + ) { + // Flow from x0 -> x, y0 -> y in the synthetic Deconstruct call r.Deconstruct(out var x0, out var y0) in + // the cases below. + exists(TupleExpr tgt, Expr item | + tgt = output.getDeconstructCallNode().getTarget() and + item = tgt.getArgument(output.getPosition()) + | + // var (x, y) = r, (var x, var y) = r, (x, y) = r + exists(AssignableDefinitions::TupleAssignmentDefinition def, AssignExpr assignment | + assignment = def.getAssignment() and + assignment.getRightOperand() = output.getDeconstructCallNode().getSource() and + tgt = assignment.getLeftOperand() and + def.getLeaf() = item and + target.getDefinition() = def + ) + or + // r is var (x, y) + exists(AssignableDefinitions::PatternDefinition def, IsExpr ie | + ie.getExpr() = output.getDeconstructCallNode().getSource() and + tgt = ie.getPattern() and + item = def.getDeclaration() and + target.getDefinition() = def + ) + or + // switch(r) case var (x, y) + exists(AssignableDefinitions::PatternDefinition def, Switch sw | + sw.getExpr() = output.getDeconstructCallNode().getSource() and + tgt = sw.getACase().getPattern() and + item = def.getDeclaration() and + target.getDefinition() = def + ) + ) + or + exists(RecursivePatternExpr tgt, Expr item | + tgt = output.getDeconstructCallNode().getTarget() and + item = tgt.getPositionalPatterns().getPattern(output.getPosition()) + | + // r is (var x, var y) + exists(AssignableDefinitions::PatternDefinition def, IsExpr ie | + ie.getExpr() = output.getDeconstructCallNode().getSource() and + tgt = ie.getPattern() and + item = def.getDeclaration() and + target.getDefinition() = def + ) + or + // switch(r) case (var x, var y) + exists(AssignableDefinitions::PatternDefinition def, Switch sw | + sw.getExpr() = output.getDeconstructCallNode().getSource() and + tgt = sw.getACase().getPattern() and + item = def.getDeclaration() and + target.getDefinition() = def + ) + ) + } + predicate localFlowStepCommon(Node nodeFrom, Node nodeTo) { localExprStep(nodeFrom.asExpr(), nodeTo.asExpr()) or defAssigns(nodeFrom, nodeTo) or + implicitDeconstructCallStep(nodeFrom, nodeTo) + or ThisFlow::adjacentThisRefs(nodeFrom, nodeTo) and nodeFrom != nodeTo or @@ -989,6 +1057,12 @@ private class CallableUsedInSource extends Callable { | this = target.getUnboundDeclaration() ) + or + // Should generate nodes for deconstruct methods used in synthetic deconstruct calls. + exists(DeconstructMethod deconstruct | + implicitDeconstructCall(_, deconstruct, _) and + this = deconstruct.getUnboundDeclaration() + ) } } @@ -1055,6 +1129,15 @@ private module Cached { TYieldReturnNode(ControlFlowNodes::ElementNode cfn) { any(Callable c).canYieldReturn(cfn.asExpr()) } or + TImplicitDeconstructMethodCallNode(ControlFlowNodes::ElementNode cfn) { + implicitDeconstructCall(cfn.asExpr(), _, _) + } or + TImplicitDeconstructMethodCallParameterNode(ControlFlowNodes::ElementNode cfn, Parameter p) { + exists(DeconstructMethod deconstruct | + implicitDeconstructCall(cfn.asExpr(), deconstruct, _) and + deconstruct.getAParameter() = p + ) + } or TAsyncReturnNode(ControlFlowNodes::ElementNode cfn) { any(Callable c | c.(Modifiable).isAsync()).canReturn(cfn.asExpr()) } or @@ -1089,6 +1172,8 @@ private module Cached { or arrayRead(e, read) ) + or + implicitDeconstructCall(cfn.getExpr(), _, _) ) or lambdaCallExpr(_, _, cfn) @@ -1494,6 +1579,23 @@ private module ArgumentNodes { } } + /** + * A data-flow node that represents an argument in an implicit deconstruct call. + * + * Example: `var (x, y) = r;` where `r` is of type `R` with a `Deconstruct` method. + * In this case we synthesize a call to the deconstruct method `r.Deconstruct(out var x0, out var y0)` + * where `r` is the qualifier argument to the call. + */ + class ImplicitDeconstructMethodCallArgumentNode extends ArgumentNodeImpl, ExprNode { + ImplicitDeconstructMethodCallArgumentNode() { implicitDeconstructCall(this.getExpr(), _, _) } + + override predicate argumentOf(DataFlowCall call, ArgumentPosition pos) { + call instanceof ImplicitDeconstructCallDataFlowCall and + pos.isQualifier() and + call.getExpr() = this.getExpr() + } + } + /** A data-flow node that represents a delegate passed into itself. */ class DelegateSelfArgumentNode extends ArgumentNodeImpl, ExprNode { private DataFlowCall call_; @@ -1776,6 +1878,15 @@ private module OutNodes { override DataFlowCall getCall(ReturnKind kind) { result = call and kind = kind_ } } + + private class ImplicitDeconstructMethodCallOutNode extends ImplicitDeconstructMethodCallParameterNode, + OutNode + { + override DataFlowCall getCall(ReturnKind kind) { + result.getControlFlowNode() = this.getControlFlowNode() and + kind.(OutReturnKind).getPosition() = this.getPosition() + } + } } import OutNodes @@ -1805,6 +1916,146 @@ class FlowSummaryNode extends NodeImpl, TFlowSummaryNode { override string toStringImpl() { result = this.getSummaryNode().toString() } } +/** + * Holds, if there is an implicit call to the to the `deconstruct` method at `source`, where `target` is the expression + * receiving the deconstructed values, and `tt` is the tuple type of the `target` expression. + * The method may be declared on the source type or inherited from a base class. + * + * Example: `var (x, y) = r;` where `r` is of type `R` with a `Deconstruct` method. + */ +predicate implicitDeconstructCall(Expr source, DeconstructMethod deconstruct, Expr target) { + exists(ValueOrRefType type, TupleType tt | + type = source.getType() and + tt = target.getType() and + type.hasMethod(deconstruct) and + deconstruct.getNumberOfParameters() = tt.getArity() and + forall(int i | i = [0 .. deconstruct.getNumberOfParameters() - 1] | + tt.getElementType(i) = deconstruct.getParameter(i).getType() + ) + | + // var (x, y) = r, (var x, var y) = r, (x, y) = r + exists(Assignment a | + a.getRightOperand() = source and + a.getLeftOperand() = target and + target.getType() = tt + ) + or + // r is var (x, y) + exists(IsExpr ie | + ie.getExpr() = source and + target = ie.getPattern() and + target.getType() = tt and + target instanceof TuplePatternExpr + ) + or + // switch(r) case var (x, y) + exists(Switch sw | + source = sw.getExpr() and + target = sw.getACase().getPattern() and + target.getType() = tt and + target instanceof TuplePatternExpr + ) + ) + or + target = + any(RecursivePatternExpr rpe | + source.getType().(ValueOrRefType).hasMethod(deconstruct) and + deconstruct.getNumberOfParameters() = count(rpe.getPositionalPatterns().getPattern(_)) and + forall(int i | i = [0 .. deconstruct.getNumberOfParameters() - 1] | + rpe.getPositionalPatterns().getPattern(i).getType() = deconstruct.getParameter(i).getType() + ) and + ( + // r is (var x, var y) + exists(IsExpr ie | + source = ie.getExpr() and + rpe = ie.getPattern() + ) + or + // switch(r) case (var x, var y) + exists(Switch sw | + source = sw.getExpr() and + rpe = sw.getACase().getPattern() + ) + ) + ) +} + +/** + * A `deconstruct call` node. A node is synthesized in order to model implicit deconstruction calls. + * + * Example: `var (x, y) = r;` where `r` is of type `R` with a `Deconstruct` method. + * In this case a call to the `Deconstruct` method is synthesized `r.Deconstruct(out x, out y)`. + */ +class ImplicitDeconstructMethodCallNode extends NodeImpl, TImplicitDeconstructMethodCallNode { + private Expr source; + private Expr target; + private ControlFlowNodes::ElementNode cfn; + + ImplicitDeconstructMethodCallNode() { + this = TImplicitDeconstructMethodCallNode(cfn) and + source = cfn.asExpr() and + implicitDeconstructCall(source, _, target) + } + + Expr getSource() { result = source } + + Expr getTarget() { result = target } + + override DataFlowCallable getEnclosingCallableImpl() { result.getAControlFlowNode() = cfn } + + override Type getTypeImpl() { result = target.getType() } + + override ControlFlowNode getControlFlowNodeImpl() { result = cfn } + + override Location getLocationImpl() { result = source.getLocation() } + + override string toStringImpl() { result = source.toString() } +} + +/** + * A class of parameter nodes representing the out parameters of an implicit deconstruct method call. + * Example: `var (x, y) = r;` where `r` is of type `R` with a `Deconstruct` method. + * + * In this case a call to the `Deconstruct` method is synthesized `r.Deconstruct(out x, out y)`. + * Each of the out parameters (`x` and `y` in the example) is represented by an `ImplicitDeconstructMethodCallParameterNode`. + */ +private class ImplicitDeconstructMethodCallParameterNode extends NodeImpl, + TImplicitDeconstructMethodCallParameterNode +{ + private ControlFlowNodes::ElementNode cfn; + private Expr expr; + private Parameter parameter; + + ImplicitDeconstructMethodCallParameterNode() { + this = TImplicitDeconstructMethodCallParameterNode(cfn, parameter) and + expr = cfn.asExpr() and + exists(DeconstructMethod deconstruct | + implicitDeconstructCall(expr, deconstruct, _) and + parameter = deconstruct.getAParameter() + ) + } + + ImplicitDeconstructMethodCallNode getDeconstructCallNode() { + result = TImplicitDeconstructMethodCallNode(cfn) + } + + Parameter getParameter() { result = parameter } + + int getPosition() { parameter.getPosition() = result } + + override DataFlowCallable getEnclosingCallableImpl() { result.getAControlFlowNode() = cfn } + + override Type getTypeImpl() { result = parameter.getType() } + + override ControlFlowNode getControlFlowNodeImpl() { result = cfn } + + override Location getLocationImpl() { result = expr.getLocation() } + + override string toStringImpl() { + result = "[deconstruct parameter " + parameter.getPosition() + "] " + expr.toString() + } +} + /** * A data-flow node used to model reading and writing of primary constructor parameters. * For example, in diff --git a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll index 88785012d81b..a38b8384bf84 100644 --- a/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll +++ b/csharp/ql/lib/semmle/code/csharp/dataflow/internal/FlowSummaryImpl.qll @@ -5,6 +5,7 @@ private import csharp private import semmle.code.csharp.commons.QualifiedName private import semmle.code.csharp.frameworks.system.linq.Expressions +private import semmle.code.csharp.frameworks.System private import codeql.dataflow.internal.FlowSummaryImpl private import codeql.dataflow.internal.AccessPathSyntax as AccessPath private import DataFlowImplSpecific as DataFlowImplSpecific @@ -480,3 +481,47 @@ private class SummarizedCallableWithCallback extends Public::SummarizedCallable model = "heuristic-callback" } } + +/** + * A class of summaries for compiler generated Deconstruct methods. + * + * For record types, the compiler generates a `Deconstruct` method that allows deconstructing the record into its components. + * ```csharp + * public record R(int X, int Y); + * + * var r = new R(1, 2); + * var (x, y) = r; + * ``` + * In this case the compiler generates a `Deconstruct` method which is implicitly invoked on line 4 in the example above. + * + * The compiler generated `Deconstruct` method looks like: + * ```csharp + * public void Deconstruct(out int X, out int Y) { + * X = this.X; + * Y = this.Y; + * } + * ``` + * That is, we need to create summaries for compiler generated `Deconstruct` methods that reflect the flow from the record's properties + * to the corresponding out parameters. + */ +private class SummarizedDeconstruct extends Public::SummarizedCallable instanceof DeconstructMethod { + SummarizedDeconstruct() { this.isCompilerGenerated() } + + override predicate propagatesFlow( + string input, string output, boolean preservesValue, Public::Provenance provenance, + boolean isExact, string model + ) { + exists(Parameter p, int i, Property prop, string qualifier, string name | + p = this.getParameter(i) and + prop = this.getDeclaringType().getProperty(p.getName()) + | + prop.hasFullyQualifiedName(qualifier, name) and + input = "Argument[this].Property[" + getQualifiedName(qualifier, name) + "]" and + output = "Argument[" + i + "]" and + preservesValue = true and + provenance = "manual" and + isExact = true and + model = "deconstruct" + ) + } +} diff --git a/csharp/ql/lib/semmle/code/csharp/frameworks/System.qll b/csharp/ql/lib/semmle/code/csharp/frameworks/System.qll index 2681b9437b69..5a0589cd9ddb 100644 --- a/csharp/ql/lib/semmle/code/csharp/frameworks/System.qll +++ b/csharp/ql/lib/semmle/code/csharp/frameworks/System.qll @@ -788,3 +788,27 @@ class SystemReadOnlySpanStruct extends SystemUnboundGenericStruct { this.getNumberOfTypeParameters() = 1 } } + +/** + * A `Deconstruct` method, which is an instance method returning `void` and having all `out` parameters. + * This can be used to implicitly deconstruct objects. In the example below, the `Deconstruct` method allows + * the object `c` (of type `C`) to be deconstructed into a tuple. + * + * ```csharp + * class C { + * public void Deconstruct(out int x, out int y) { + * ... + * } + * } + * + * var (x, y) = c; + * ``` + */ +class DeconstructMethod extends Method { + DeconstructMethod() { + this.hasName("Deconstruct") and + this.getReturnType() instanceof VoidType and + forex(int i | i in [0 .. this.getNumberOfParameters() - 1] | this.getParameter(i).isOut()) and + not this.isStatic() + } +} diff --git a/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected b/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected index 615f40e15850..c7ba6bbe9ca5 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected +++ b/csharp/ql/test/library-tests/dataflow/tuples/DataFlowStep.expected @@ -187,9 +187,14 @@ | Tuples.cs:103:9:103:22 | ... = ... | Tuples.cs:103:9:103:22 | SSA def(b) | | Tuples.cs:103:9:103:22 | SSA def(a) | Tuples.cs:104:14:104:14 | access to local variable a | | Tuples.cs:103:9:103:22 | SSA def(b) | Tuples.cs:105:14:105:14 | access to local variable b | +| Tuples.cs:103:22:103:22 | [deconstruct parameter 0] access to local variable r | Tuples.cs:103:9:103:22 | ... = ... | +| Tuples.cs:103:22:103:22 | [deconstruct parameter 1] access to local variable r | Tuples.cs:103:9:103:22 | ... = ... | +| Tuples.cs:103:22:103:22 | [post] access to local variable r | Tuples.cs:107:17:107:17 | access to local variable r | | Tuples.cs:103:22:103:22 | access to local variable r | Tuples.cs:103:9:103:18 | (..., ...) | | Tuples.cs:103:22:103:22 | access to local variable r | Tuples.cs:107:17:107:17 | access to local variable r | | Tuples.cs:105:14:105:14 | access to local variable b | Tuples.cs:105:14:105:14 | (...) ... | +| Tuples.cs:107:17:107:17 | [deconstruct parameter 0] access to local variable r | Tuples.cs:109:23:109:23 | String x | +| Tuples.cs:107:17:107:17 | [deconstruct parameter 1] access to local variable r | Tuples.cs:109:26:109:26 | Int32 y | | Tuples.cs:107:17:107:17 | access to local variable r | Tuples.cs:109:18:109:27 | (..., ...) | | Tuples.cs:109:23:109:23 | SSA def(x) | Tuples.cs:110:22:110:22 | access to local variable x | | Tuples.cs:109:23:109:23 | String x | Tuples.cs:109:23:109:23 | SSA def(x) | @@ -285,4 +290,285 @@ | Tuples.cs:164:28:164:33 | Int32 b3 | Tuples.cs:164:28:164:33 | SSA def(b3) | | Tuples.cs:164:28:164:33 | SSA def(b3) | Tuples.cs:168:18:168:19 | access to local variable b3 | | Tuples.cs:168:18:168:19 | access to local variable b3 | Tuples.cs:168:18:168:19 | (...) ... | -| Tuples.cs:179:18:179:31 | this | Tuples.cs:179:18:179:31 | this access | +| Tuples.cs:172:12:172:13 | this | Tuples.cs:172:12:172:13 | this access | +| Tuples.cs:172:12:172:13 | this | Tuples.cs:172:22:172:23 | this | +| Tuples.cs:172:22:172:23 | [post] this | Tuples.cs:172:33:172:34 | this | +| Tuples.cs:172:22:172:23 | this | Tuples.cs:172:33:172:34 | this | +| Tuples.cs:172:33:172:34 | [post] this | Tuples.cs:172:12:172:13 | this access | +| Tuples.cs:172:33:172:34 | this | Tuples.cs:172:12:172:13 | this access | +| Tuples.cs:176:13:176:14 | access to local variable o1 | Tuples.cs:176:13:176:35 | SSA def(o1) | +| Tuples.cs:176:13:176:35 | SSA def(o1) | Tuples.cs:178:24:178:25 | access to local variable o1 | +| Tuples.cs:176:18:176:35 | call to method Source | Tuples.cs:176:13:176:14 | access to local variable o1 | +| Tuples.cs:176:33:176:34 | 16 | Tuples.cs:176:33:176:34 | (...) ... | +| Tuples.cs:177:13:177:14 | access to local variable o2 | Tuples.cs:177:13:177:35 | SSA def(o2) | +| Tuples.cs:177:13:177:35 | SSA def(o2) | Tuples.cs:178:28:178:29 | access to local variable o2 | +| Tuples.cs:177:18:177:35 | call to method Source | Tuples.cs:177:13:177:14 | access to local variable o2 | +| Tuples.cs:177:33:177:34 | 17 | Tuples.cs:177:33:177:34 | (...) ... | +| Tuples.cs:178:13:178:13 | access to local variable r | Tuples.cs:178:13:178:30 | SSA def(r) | +| Tuples.cs:178:13:178:30 | SSA def(r) | Tuples.cs:180:24:180:24 | access to local variable r | +| Tuples.cs:178:17:178:30 | object creation of type R2 | Tuples.cs:178:13:178:13 | access to local variable r | +| Tuples.cs:180:9:180:24 | ... = ... | Tuples.cs:180:9:180:24 | SSA def(x1) | +| Tuples.cs:180:9:180:24 | ... = ... | Tuples.cs:180:9:180:24 | SSA def(y1) | +| Tuples.cs:180:9:180:24 | SSA def(x1) | Tuples.cs:181:14:181:15 | access to local variable x1 | +| Tuples.cs:180:9:180:24 | SSA def(y1) | Tuples.cs:182:14:182:15 | access to local variable y1 | +| Tuples.cs:180:24:180:24 | [deconstruct parameter 0] access to local variable r | Tuples.cs:180:9:180:24 | ... = ... | +| Tuples.cs:180:24:180:24 | [deconstruct parameter 1] access to local variable r | Tuples.cs:180:9:180:24 | ... = ... | +| Tuples.cs:180:24:180:24 | access to local variable r | Tuples.cs:180:9:180:20 | (..., ...) | +| Tuples.cs:185:12:185:13 | this | Tuples.cs:185:12:185:13 | this access | +| Tuples.cs:185:12:185:13 | this | Tuples.cs:185:22:185:23 | this | +| Tuples.cs:185:22:185:23 | [post] this | Tuples.cs:185:33:185:34 | this | +| Tuples.cs:185:22:185:23 | this | Tuples.cs:185:33:185:34 | this | +| Tuples.cs:185:33:185:34 | [post] this | Tuples.cs:185:12:185:13 | this access | +| Tuples.cs:185:33:185:34 | this | Tuples.cs:185:12:185:13 | this access | +| Tuples.cs:187:21:187:31 | SSA entry def(this.X2) | Tuples.cs:189:18:189:19 | access to property X2 | +| Tuples.cs:187:21:187:31 | SSA entry def(this.Y2) | Tuples.cs:190:18:190:19 | access to property Y2 | +| Tuples.cs:187:21:187:31 | this | Tuples.cs:189:18:189:19 | this access | +| Tuples.cs:189:13:189:14 | access to parameter x2 | Tuples.cs:189:13:189:19 | SSA def(x2) | +| Tuples.cs:189:18:189:19 | [post] this access | Tuples.cs:190:18:190:19 | this access | +| Tuples.cs:189:18:189:19 | access to property X2 | Tuples.cs:189:13:189:14 | access to parameter x2 | +| Tuples.cs:189:18:189:19 | this access | Tuples.cs:190:18:190:19 | this access | +| Tuples.cs:190:13:190:14 | access to parameter y2 | Tuples.cs:190:13:190:19 | SSA def(y2) | +| Tuples.cs:190:18:190:19 | access to property Y2 | Tuples.cs:190:13:190:14 | access to parameter y2 | +| Tuples.cs:196:13:196:14 | access to local variable o1 | Tuples.cs:196:13:196:35 | SSA def(o1) | +| Tuples.cs:196:13:196:35 | SSA def(o1) | Tuples.cs:198:24:198:25 | access to local variable o1 | +| Tuples.cs:196:18:196:35 | call to method Source | Tuples.cs:196:13:196:14 | access to local variable o1 | +| Tuples.cs:196:33:196:34 | 18 | Tuples.cs:196:33:196:34 | (...) ... | +| Tuples.cs:197:13:197:14 | access to local variable o2 | Tuples.cs:197:13:197:35 | SSA def(o2) | +| Tuples.cs:197:13:197:35 | SSA def(o2) | Tuples.cs:198:28:198:29 | access to local variable o2 | +| Tuples.cs:197:18:197:35 | call to method Source | Tuples.cs:197:13:197:14 | access to local variable o2 | +| Tuples.cs:197:33:197:34 | 19 | Tuples.cs:197:33:197:34 | (...) ... | +| Tuples.cs:198:13:198:13 | access to local variable r | Tuples.cs:198:13:198:30 | SSA def(r) | +| Tuples.cs:198:13:198:30 | SSA def(r) | Tuples.cs:200:22:200:22 | access to local variable r | +| Tuples.cs:198:17:198:30 | object creation of type R3 | Tuples.cs:198:13:198:13 | access to local variable r | +| Tuples.cs:200:9:200:22 | ... = ... | Tuples.cs:200:9:200:22 | SSA def(x) | +| Tuples.cs:200:9:200:22 | ... = ... | Tuples.cs:200:9:200:22 | SSA def(y) | +| Tuples.cs:200:9:200:22 | SSA def(x) | Tuples.cs:201:14:201:14 | access to local variable x | +| Tuples.cs:200:9:200:22 | SSA def(y) | Tuples.cs:202:14:202:14 | access to local variable y | +| Tuples.cs:200:22:200:22 | [deconstruct parameter 0] access to local variable r | Tuples.cs:200:9:200:22 | ... = ... | +| Tuples.cs:200:22:200:22 | [deconstruct parameter 1] access to local variable r | Tuples.cs:200:9:200:22 | ... = ... | +| Tuples.cs:200:22:200:22 | access to local variable r | Tuples.cs:200:9:200:18 | (..., ...) | +| Tuples.cs:205:12:205:13 | this | Tuples.cs:205:12:205:13 | this access | +| Tuples.cs:205:12:205:13 | this | Tuples.cs:205:22:205:23 | this | +| Tuples.cs:205:22:205:23 | [post] this | Tuples.cs:205:33:205:34 | this | +| Tuples.cs:205:22:205:23 | this | Tuples.cs:205:33:205:34 | this | +| Tuples.cs:205:33:205:34 | [post] this | Tuples.cs:205:12:205:13 | this access | +| Tuples.cs:205:33:205:34 | this | Tuples.cs:205:12:205:13 | this access | +| Tuples.cs:209:13:209:14 | access to local variable o1 | Tuples.cs:209:13:209:35 | SSA def(o1) | +| Tuples.cs:209:13:209:35 | SSA def(o1) | Tuples.cs:211:24:211:25 | access to local variable o1 | +| Tuples.cs:209:18:209:35 | call to method Source | Tuples.cs:209:13:209:14 | access to local variable o1 | +| Tuples.cs:209:33:209:34 | 20 | Tuples.cs:209:33:209:34 | (...) ... | +| Tuples.cs:210:13:210:14 | access to local variable o2 | Tuples.cs:210:13:210:35 | SSA def(o2) | +| Tuples.cs:210:13:210:35 | SSA def(o2) | Tuples.cs:211:28:211:29 | access to local variable o2 | +| Tuples.cs:210:18:210:35 | call to method Source | Tuples.cs:210:13:210:14 | access to local variable o2 | +| Tuples.cs:210:33:210:34 | 21 | Tuples.cs:210:33:210:34 | (...) ... | +| Tuples.cs:211:13:211:13 | access to local variable r | Tuples.cs:211:13:211:30 | SSA def(r) | +| Tuples.cs:211:13:211:30 | SSA def(r) | Tuples.cs:213:9:213:9 | access to local variable r | +| Tuples.cs:211:17:211:30 | object creation of type R4 | Tuples.cs:211:13:211:13 | access to local variable r | +| Tuples.cs:213:9:213:45 | SSA def(x3) | Tuples.cs:214:14:214:15 | access to local variable x3 | +| Tuples.cs:213:9:213:45 | SSA def(y3) | Tuples.cs:215:14:215:15 | access to local variable y3 | +| Tuples.cs:213:31:213:32 | String x3 | Tuples.cs:213:9:213:45 | SSA def(x3) | +| Tuples.cs:213:43:213:44 | String y3 | Tuples.cs:213:9:213:45 | SSA def(y3) | +| Tuples.cs:220:13:220:14 | access to local variable o1 | Tuples.cs:220:13:220:35 | SSA def(o1) | +| Tuples.cs:220:13:220:35 | SSA def(o1) | Tuples.cs:222:24:222:25 | access to local variable o1 | +| Tuples.cs:220:18:220:35 | call to method Source | Tuples.cs:220:13:220:14 | access to local variable o1 | +| Tuples.cs:220:33:220:34 | 22 | Tuples.cs:220:33:220:34 | (...) ... | +| Tuples.cs:221:13:221:14 | access to local variable o2 | Tuples.cs:221:13:221:35 | SSA def(o2) | +| Tuples.cs:221:13:221:35 | SSA def(o2) | Tuples.cs:222:28:222:29 | access to local variable o2 | +| Tuples.cs:221:18:221:35 | call to method Source | Tuples.cs:221:13:221:14 | access to local variable o2 | +| Tuples.cs:221:33:221:34 | 23 | Tuples.cs:221:33:221:34 | (...) ... | +| Tuples.cs:222:13:222:13 | access to local variable r | Tuples.cs:222:13:222:30 | SSA def(r) | +| Tuples.cs:222:13:222:30 | SSA def(r) | Tuples.cs:225:18:225:18 | access to local variable r | +| Tuples.cs:222:17:222:30 | object creation of type R4 | Tuples.cs:222:13:222:13 | access to local variable r | +| Tuples.cs:223:22:223:31 | (..., ...) | Tuples.cs:223:9:223:18 | (..., ...) | +| Tuples.cs:223:23:223:25 | "1" | Tuples.cs:223:9:223:31 | ... = ... | +| Tuples.cs:223:28:223:30 | "2" | Tuples.cs:223:9:223:31 | ... = ... | +| Tuples.cs:225:9:225:18 | SSA def(x) | Tuples.cs:226:14:226:14 | access to local variable x | +| Tuples.cs:225:9:225:18 | SSA def(y) | Tuples.cs:227:14:227:14 | access to local variable y | +| Tuples.cs:225:10:225:10 | access to local variable x | Tuples.cs:225:9:225:18 | SSA def(x) | +| Tuples.cs:225:13:225:13 | access to local variable y | Tuples.cs:225:9:225:18 | SSA def(y) | +| Tuples.cs:225:18:225:18 | [deconstruct parameter 0] access to local variable r | Tuples.cs:225:10:225:10 | access to local variable x | +| Tuples.cs:225:18:225:18 | [deconstruct parameter 1] access to local variable r | Tuples.cs:225:13:225:13 | access to local variable y | +| Tuples.cs:225:18:225:18 | access to local variable r | Tuples.cs:225:9:225:14 | (..., ...) | +| Tuples.cs:232:13:232:14 | access to local variable o1 | Tuples.cs:232:13:232:35 | SSA def(o1) | +| Tuples.cs:232:13:232:35 | SSA def(o1) | Tuples.cs:234:24:234:25 | access to local variable o1 | +| Tuples.cs:232:18:232:35 | call to method Source | Tuples.cs:232:13:232:14 | access to local variable o1 | +| Tuples.cs:232:33:232:34 | 24 | Tuples.cs:232:33:232:34 | (...) ... | +| Tuples.cs:233:13:233:14 | access to local variable o2 | Tuples.cs:233:13:233:35 | SSA def(o2) | +| Tuples.cs:233:13:233:35 | SSA def(o2) | Tuples.cs:234:28:234:29 | access to local variable o2 | +| Tuples.cs:233:18:233:35 | call to method Source | Tuples.cs:233:13:233:14 | access to local variable o2 | +| Tuples.cs:233:33:233:34 | 25 | Tuples.cs:233:33:233:34 | (...) ... | +| Tuples.cs:234:13:234:13 | access to local variable r | Tuples.cs:234:13:234:30 | SSA def(r) | +| Tuples.cs:234:13:234:30 | SSA def(r) | Tuples.cs:236:26:236:26 | access to local variable r | +| Tuples.cs:234:17:234:30 | object creation of type R4 | Tuples.cs:234:13:234:13 | access to local variable r | +| Tuples.cs:236:9:236:26 | ... = ... | Tuples.cs:236:9:236:26 | SSA def(x) | +| Tuples.cs:236:9:236:26 | SSA def(x) | Tuples.cs:237:14:237:14 | access to local variable x | +| Tuples.cs:236:26:236:26 | [deconstruct parameter 0] access to local variable r | Tuples.cs:236:9:236:26 | ... = ... | +| Tuples.cs:236:26:236:26 | [deconstruct parameter 1] access to local variable r | Tuples.cs:236:9:236:26 | ... = ... | +| Tuples.cs:236:26:236:26 | access to local variable r | Tuples.cs:236:9:236:22 | (..., ...) | +| Tuples.cs:242:13:242:14 | access to local variable o1 | Tuples.cs:242:13:242:35 | SSA def(o1) | +| Tuples.cs:242:13:242:35 | SSA def(o1) | Tuples.cs:244:24:244:25 | access to local variable o1 | +| Tuples.cs:242:18:242:35 | call to method Source | Tuples.cs:242:13:242:14 | access to local variable o1 | +| Tuples.cs:242:33:242:34 | 26 | Tuples.cs:242:33:242:34 | (...) ... | +| Tuples.cs:243:13:243:14 | access to local variable o2 | Tuples.cs:243:13:243:35 | SSA def(o2) | +| Tuples.cs:243:13:243:35 | SSA def(o2) | Tuples.cs:244:28:244:29 | access to local variable o2 | +| Tuples.cs:243:18:243:35 | call to method Source | Tuples.cs:243:13:243:14 | access to local variable o2 | +| Tuples.cs:243:33:243:34 | 27 | Tuples.cs:243:33:243:34 | (...) ... | +| Tuples.cs:244:13:244:13 | access to local variable r | Tuples.cs:244:13:244:30 | SSA def(r) | +| Tuples.cs:244:13:244:30 | SSA def(r) | Tuples.cs:246:13:246:13 | access to local variable r | +| Tuples.cs:244:17:244:30 | object creation of type R4 | Tuples.cs:244:13:244:13 | access to local variable r | +| Tuples.cs:246:13:246:13 | [deconstruct parameter 0] access to local variable r | Tuples.cs:246:23:246:23 | String x | +| Tuples.cs:246:13:246:13 | [deconstruct parameter 1] access to local variable r | Tuples.cs:246:26:246:26 | String y | +| Tuples.cs:246:13:246:13 | access to local variable r | Tuples.cs:246:18:246:27 | (..., ...) | +| Tuples.cs:246:23:246:23 | SSA def(x) | Tuples.cs:248:18:248:18 | access to local variable x | +| Tuples.cs:246:23:246:23 | String x | Tuples.cs:246:23:246:23 | SSA def(x) | +| Tuples.cs:246:26:246:26 | SSA def(y) | Tuples.cs:249:18:249:18 | access to local variable y | +| Tuples.cs:246:26:246:26 | String y | Tuples.cs:246:26:246:26 | SSA def(y) | +| Tuples.cs:255:13:255:14 | access to local variable o1 | Tuples.cs:255:13:255:35 | SSA def(o1) | +| Tuples.cs:255:13:255:35 | SSA def(o1) | Tuples.cs:257:24:257:25 | access to local variable o1 | +| Tuples.cs:255:18:255:35 | call to method Source | Tuples.cs:255:13:255:14 | access to local variable o1 | +| Tuples.cs:255:33:255:34 | 28 | Tuples.cs:255:33:255:34 | (...) ... | +| Tuples.cs:256:13:256:14 | access to local variable o2 | Tuples.cs:256:13:256:35 | SSA def(o2) | +| Tuples.cs:256:13:256:35 | SSA def(o2) | Tuples.cs:257:28:257:29 | access to local variable o2 | +| Tuples.cs:256:18:256:35 | call to method Source | Tuples.cs:256:13:256:14 | access to local variable o2 | +| Tuples.cs:256:33:256:34 | 29 | Tuples.cs:256:33:256:34 | (...) ... | +| Tuples.cs:257:13:257:13 | access to local variable r | Tuples.cs:257:13:257:30 | SSA def(r) | +| Tuples.cs:257:13:257:30 | SSA def(r) | Tuples.cs:259:13:259:13 | access to local variable r | +| Tuples.cs:257:17:257:30 | object creation of type R4 | Tuples.cs:257:13:257:13 | access to local variable r | +| Tuples.cs:259:13:259:13 | [deconstruct parameter 0] access to local variable r | Tuples.cs:259:19:259:23 | String x | +| Tuples.cs:259:13:259:13 | [deconstruct parameter 1] access to local variable r | Tuples.cs:259:26:259:30 | String y | +| Tuples.cs:259:13:259:13 | access to local variable r | Tuples.cs:259:18:259:31 | { ... } | +| Tuples.cs:259:19:259:23 | SSA def(x) | Tuples.cs:261:18:261:18 | access to local variable x | +| Tuples.cs:259:19:259:23 | String x | Tuples.cs:259:19:259:23 | SSA def(x) | +| Tuples.cs:259:26:259:30 | SSA def(y) | Tuples.cs:262:18:262:18 | access to local variable y | +| Tuples.cs:259:26:259:30 | String y | Tuples.cs:259:26:259:30 | SSA def(y) | +| Tuples.cs:268:13:268:14 | access to local variable o1 | Tuples.cs:268:13:268:35 | SSA def(o1) | +| Tuples.cs:268:13:268:35 | SSA def(o1) | Tuples.cs:270:24:270:25 | access to local variable o1 | +| Tuples.cs:268:18:268:35 | call to method Source | Tuples.cs:268:13:268:14 | access to local variable o1 | +| Tuples.cs:268:33:268:34 | 30 | Tuples.cs:268:33:268:34 | (...) ... | +| Tuples.cs:269:13:269:14 | access to local variable o2 | Tuples.cs:269:13:269:35 | SSA def(o2) | +| Tuples.cs:269:13:269:35 | SSA def(o2) | Tuples.cs:270:28:270:29 | access to local variable o2 | +| Tuples.cs:269:18:269:35 | call to method Source | Tuples.cs:269:13:269:14 | access to local variable o2 | +| Tuples.cs:269:33:269:34 | 31 | Tuples.cs:269:33:269:34 | (...) ... | +| Tuples.cs:270:13:270:13 | access to local variable r | Tuples.cs:270:13:270:30 | SSA def(r) | +| Tuples.cs:270:13:270:30 | SSA def(r) | Tuples.cs:272:17:272:17 | access to local variable r | +| Tuples.cs:270:17:270:30 | object creation of type R4 | Tuples.cs:270:13:270:13 | access to local variable r | +| Tuples.cs:272:17:272:17 | [deconstruct parameter 0] access to local variable r | Tuples.cs:275:23:275:23 | String x | +| Tuples.cs:272:17:272:17 | [deconstruct parameter 1] access to local variable r | Tuples.cs:275:26:275:26 | String y | +| Tuples.cs:272:17:272:17 | access to local variable r | Tuples.cs:275:18:275:27 | (..., ...) | +| Tuples.cs:275:23:275:23 | SSA def(x) | Tuples.cs:276:22:276:22 | access to local variable x | +| Tuples.cs:275:23:275:23 | String x | Tuples.cs:275:23:275:23 | SSA def(x) | +| Tuples.cs:275:26:275:26 | SSA def(y) | Tuples.cs:277:22:277:22 | access to local variable y | +| Tuples.cs:275:26:275:26 | String y | Tuples.cs:275:26:275:26 | SSA def(y) | +| Tuples.cs:284:13:284:14 | access to local variable o1 | Tuples.cs:284:13:284:35 | SSA def(o1) | +| Tuples.cs:284:13:284:35 | SSA def(o1) | Tuples.cs:286:24:286:25 | access to local variable o1 | +| Tuples.cs:284:18:284:35 | call to method Source | Tuples.cs:284:13:284:14 | access to local variable o1 | +| Tuples.cs:284:33:284:34 | 32 | Tuples.cs:284:33:284:34 | (...) ... | +| Tuples.cs:285:13:285:14 | access to local variable o2 | Tuples.cs:285:13:285:35 | SSA def(o2) | +| Tuples.cs:285:13:285:35 | SSA def(o2) | Tuples.cs:286:28:286:29 | access to local variable o2 | +| Tuples.cs:285:18:285:35 | call to method Source | Tuples.cs:285:13:285:14 | access to local variable o2 | +| Tuples.cs:285:33:285:34 | 33 | Tuples.cs:285:33:285:34 | (...) ... | +| Tuples.cs:286:13:286:13 | access to local variable r | Tuples.cs:286:13:286:30 | SSA def(r) | +| Tuples.cs:286:13:286:30 | SSA def(r) | Tuples.cs:288:17:288:17 | access to local variable r | +| Tuples.cs:286:17:286:30 | object creation of type R4 | Tuples.cs:286:13:286:13 | access to local variable r | +| Tuples.cs:288:17:288:17 | [deconstruct parameter 0] access to local variable r | Tuples.cs:290:19:290:23 | String x | +| Tuples.cs:288:17:288:17 | [deconstruct parameter 1] access to local variable r | Tuples.cs:290:26:290:30 | String y | +| Tuples.cs:288:17:288:17 | access to local variable r | Tuples.cs:290:18:290:31 | { ... } | +| Tuples.cs:290:19:290:23 | SSA def(x) | Tuples.cs:291:22:291:22 | access to local variable x | +| Tuples.cs:290:19:290:23 | String x | Tuples.cs:290:19:290:23 | SSA def(x) | +| Tuples.cs:290:26:290:30 | SSA def(y) | Tuples.cs:292:22:292:22 | access to local variable y | +| Tuples.cs:290:26:290:30 | String y | Tuples.cs:290:26:290:30 | SSA def(y) | +| Tuples.cs:302:16:302:16 | [post] this access | Tuples.cs:304:13:304:16 | this access | +| Tuples.cs:302:16:302:16 | this | Tuples.cs:302:16:302:16 | this access | +| Tuples.cs:302:16:302:16 | this access | Tuples.cs:304:13:304:16 | this access | +| Tuples.cs:302:25:302:25 | SSA param(x) | Tuples.cs:304:22:304:22 | access to parameter x | +| Tuples.cs:302:25:302:25 | x | Tuples.cs:302:25:302:25 | SSA param(x) | +| Tuples.cs:302:35:302:35 | SSA param(y) | Tuples.cs:305:22:305:22 | access to parameter y | +| Tuples.cs:302:35:302:35 | y | Tuples.cs:302:35:302:35 | SSA param(y) | +| Tuples.cs:304:13:304:16 | [post] this access | Tuples.cs:305:13:305:16 | this access | +| Tuples.cs:304:13:304:16 | this access | Tuples.cs:305:13:305:16 | this access | +| Tuples.cs:304:22:304:22 | access to parameter x | Tuples.cs:304:13:304:18 | access to field x | +| Tuples.cs:305:22:305:22 | access to parameter y | Tuples.cs:305:13:305:18 | access to field y | +| Tuples.cs:308:21:308:31 | SSA entry def(this.x) | Tuples.cs:310:17:310:22 | access to field x | +| Tuples.cs:308:21:308:31 | SSA entry def(this.y) | Tuples.cs:311:17:311:22 | access to field y | +| Tuples.cs:308:21:308:31 | this | Tuples.cs:310:17:310:20 | this access | +| Tuples.cs:310:13:310:13 | access to parameter x | Tuples.cs:310:13:310:22 | SSA def(x) | +| Tuples.cs:310:17:310:20 | this access | Tuples.cs:311:17:311:20 | this access | +| Tuples.cs:310:17:310:22 | access to field x | Tuples.cs:310:13:310:13 | access to parameter x | +| Tuples.cs:311:13:311:13 | access to parameter y | Tuples.cs:311:13:311:22 | SSA def(y) | +| Tuples.cs:311:17:311:22 | access to field y | Tuples.cs:311:13:311:13 | access to parameter y | +| Tuples.cs:317:13:317:14 | access to local variable o1 | Tuples.cs:317:13:317:35 | SSA def(o1) | +| Tuples.cs:317:13:317:35 | SSA def(o1) | Tuples.cs:319:23:319:24 | access to local variable o1 | +| Tuples.cs:317:18:317:35 | call to method Source | Tuples.cs:317:13:317:14 | access to local variable o1 | +| Tuples.cs:317:33:317:34 | 34 | Tuples.cs:317:33:317:34 | (...) ... | +| Tuples.cs:318:13:318:14 | access to local variable o2 | Tuples.cs:318:13:318:35 | SSA def(o2) | +| Tuples.cs:318:13:318:35 | SSA def(o2) | Tuples.cs:319:27:319:28 | access to local variable o2 | +| Tuples.cs:318:18:318:35 | call to method Source | Tuples.cs:318:13:318:14 | access to local variable o2 | +| Tuples.cs:318:33:318:34 | 35 | Tuples.cs:318:33:318:34 | (...) ... | +| Tuples.cs:319:13:319:13 | access to local variable c | Tuples.cs:319:13:319:29 | SSA def(c) | +| Tuples.cs:319:13:319:29 | SSA def(c) | Tuples.cs:321:22:321:22 | access to local variable c | +| Tuples.cs:319:17:319:29 | object creation of type C | Tuples.cs:319:13:319:13 | access to local variable c | +| Tuples.cs:321:9:321:22 | ... = ... | Tuples.cs:321:9:321:22 | SSA def(x) | +| Tuples.cs:321:9:321:22 | ... = ... | Tuples.cs:321:9:321:22 | SSA def(y) | +| Tuples.cs:321:9:321:22 | SSA def(x) | Tuples.cs:322:14:322:14 | access to local variable x | +| Tuples.cs:321:9:321:22 | SSA def(y) | Tuples.cs:323:14:323:14 | access to local variable y | +| Tuples.cs:321:22:321:22 | [deconstruct parameter 0] access to local variable c | Tuples.cs:321:9:321:22 | ... = ... | +| Tuples.cs:321:22:321:22 | [deconstruct parameter 1] access to local variable c | Tuples.cs:321:9:321:22 | ... = ... | +| Tuples.cs:321:22:321:22 | access to local variable c | Tuples.cs:321:9:321:18 | (..., ...) | +| Tuples.cs:326:19:326:31 | this | Tuples.cs:326:19:326:31 | this access | +| Tuples.cs:326:19:326:31 | this | Tuples.cs:326:44:326:45 | this | +| Tuples.cs:326:44:326:45 | [post] this | Tuples.cs:326:51:326:52 | this | +| Tuples.cs:326:44:326:45 | this | Tuples.cs:326:51:326:52 | this | +| Tuples.cs:326:51:326:52 | [post] this | Tuples.cs:326:19:326:31 | this access | +| Tuples.cs:326:51:326:52 | this | Tuples.cs:326:19:326:31 | this access | +| Tuples.cs:330:13:330:14 | access to local variable o1 | Tuples.cs:330:13:330:35 | SSA def(o1) | +| Tuples.cs:330:13:330:35 | SSA def(o1) | Tuples.cs:332:51:332:52 | access to local variable o1 | +| Tuples.cs:330:18:330:35 | call to method Source | Tuples.cs:330:13:330:14 | access to local variable o1 | +| Tuples.cs:330:33:330:34 | 36 | Tuples.cs:330:33:330:34 | (...) ... | +| Tuples.cs:331:13:331:14 | access to local variable o2 | Tuples.cs:331:13:331:35 | SSA def(o2) | +| Tuples.cs:331:13:331:35 | SSA def(o2) | Tuples.cs:332:55:332:56 | access to local variable o2 | +| Tuples.cs:331:18:331:35 | call to method Source | Tuples.cs:331:13:331:14 | access to local variable o2 | +| Tuples.cs:331:33:331:34 | 37 | Tuples.cs:331:33:331:34 | (...) ... | +| Tuples.cs:332:13:332:13 | access to local variable r | Tuples.cs:332:13:332:57 | SSA def(r) | +| Tuples.cs:332:13:332:57 | SSA def(r) | Tuples.cs:334:22:334:22 | access to local variable r | +| Tuples.cs:332:17:332:57 | object creation of type GenericRecord | Tuples.cs:332:13:332:13 | access to local variable r | +| Tuples.cs:334:9:334:22 | ... = ... | Tuples.cs:334:9:334:22 | SSA def(x) | +| Tuples.cs:334:9:334:22 | ... = ... | Tuples.cs:334:9:334:22 | SSA def(y) | +| Tuples.cs:334:9:334:22 | SSA def(x) | Tuples.cs:335:14:335:14 | access to local variable x | +| Tuples.cs:334:9:334:22 | SSA def(y) | Tuples.cs:336:14:336:14 | access to local variable y | +| Tuples.cs:334:22:334:22 | [deconstruct parameter 0] access to local variable r | Tuples.cs:334:9:334:22 | ... = ... | +| Tuples.cs:334:22:334:22 | [deconstruct parameter 1] access to local variable r | Tuples.cs:334:9:334:22 | ... = ... | +| Tuples.cs:334:22:334:22 | access to local variable r | Tuples.cs:334:9:334:18 | (..., ...) | +| Tuples.cs:339:11:339:11 | this | Tuples.cs:339:11:339:11 | this access | +| Tuples.cs:343:21:343:31 | SSA entry def(this.X) | Tuples.cs:345:17:345:17 | access to field X | +| Tuples.cs:343:21:343:31 | SSA entry def(this.Y) | Tuples.cs:346:17:346:17 | access to field Y | +| Tuples.cs:343:21:343:31 | this | Tuples.cs:345:17:345:17 | this access | +| Tuples.cs:345:13:345:13 | access to parameter x | Tuples.cs:345:13:345:17 | SSA def(x) | +| Tuples.cs:345:17:345:17 | access to field X | Tuples.cs:345:13:345:13 | access to parameter x | +| Tuples.cs:345:17:345:17 | this access | Tuples.cs:346:17:346:17 | this access | +| Tuples.cs:346:13:346:13 | access to parameter y | Tuples.cs:346:13:346:17 | SSA def(y) | +| Tuples.cs:346:17:346:17 | access to field Y | Tuples.cs:346:13:346:13 | access to parameter y | +| Tuples.cs:350:11:350:11 | this | Tuples.cs:350:11:350:11 | this access | +| Tuples.cs:354:13:354:14 | access to local variable o1 | Tuples.cs:354:13:354:35 | SSA def(o1) | +| Tuples.cs:354:13:354:35 | SSA def(o1) | Tuples.cs:356:29:356:30 | access to local variable o1 | +| Tuples.cs:354:18:354:35 | call to method Source | Tuples.cs:354:13:354:14 | access to local variable o1 | +| Tuples.cs:354:33:354:34 | 38 | Tuples.cs:354:33:354:34 | (...) ... | +| Tuples.cs:355:13:355:14 | access to local variable o2 | Tuples.cs:355:13:355:35 | SSA def(o2) | +| Tuples.cs:355:13:355:35 | SSA def(o2) | Tuples.cs:356:37:356:38 | access to local variable o2 | +| Tuples.cs:355:18:355:35 | call to method Source | Tuples.cs:355:13:355:14 | access to local variable o2 | +| Tuples.cs:355:33:355:34 | 39 | Tuples.cs:355:33:355:34 | (...) ... | +| Tuples.cs:356:13:356:13 | access to local variable e | Tuples.cs:356:13:356:40 | SSA def(e) | +| Tuples.cs:356:13:356:40 | SSA def(e) | Tuples.cs:359:22:359:22 | access to local variable e | +| Tuples.cs:356:17:356:40 | object creation of type E | Tuples.cs:356:13:356:13 | access to local variable e | +| Tuples.cs:356:23:356:40 | { ..., ... } | Tuples.cs:356:17:356:40 | object creation of type E | +| Tuples.cs:356:29:356:30 | access to local variable o1 | Tuples.cs:356:25:356:25 | access to field X | +| Tuples.cs:356:29:356:30 | access to local variable o1 | Tuples.cs:356:25:356:30 | ... = ... | +| Tuples.cs:356:37:356:38 | access to local variable o2 | Tuples.cs:356:33:356:33 | access to field Y | +| Tuples.cs:356:37:356:38 | access to local variable o2 | Tuples.cs:356:33:356:38 | ... = ... | +| Tuples.cs:359:9:359:22 | ... = ... | Tuples.cs:359:9:359:22 | SSA def(x) | +| Tuples.cs:359:9:359:22 | ... = ... | Tuples.cs:359:9:359:22 | SSA def(y) | +| Tuples.cs:359:9:359:22 | SSA def(x) | Tuples.cs:360:14:360:14 | access to local variable x | +| Tuples.cs:359:9:359:22 | SSA def(y) | Tuples.cs:361:14:361:14 | access to local variable y | +| Tuples.cs:359:22:359:22 | [deconstruct parameter 0] access to local variable e | Tuples.cs:359:9:359:22 | ... = ... | +| Tuples.cs:359:22:359:22 | [deconstruct parameter 1] access to local variable e | Tuples.cs:359:9:359:22 | ... = ... | +| Tuples.cs:359:22:359:22 | access to local variable e | Tuples.cs:359:9:359:18 | (..., ...) | +| Tuples.cs:371:18:371:31 | this | Tuples.cs:371:18:371:31 | this access | diff --git a/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected b/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected index 9e9edd2f5875..48907fed3469 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected +++ b/csharp/ql/test/library-tests/dataflow/tuples/PrintAst.expected @@ -646,20 +646,672 @@ Tuples.cs: # 168| 0: [MethodCall] call to method Sink # 168| 0: [CastExpr] (...) ... # 168| 1: [LocalVariableAccess] access to local variable b3 -# 172| 14: [Method] Sink -# 172| -1: [TypeMention] Void +# 172| 14: [RecordClass] R2 +# 172| 13: [NEOperator] != +#-----| 2: (Parameters) +# 172| 0: [Parameter] left +# 172| 1: [Parameter] right +# 172| 14: [EQOperator] == +#-----| 2: (Parameters) +# 172| 0: [Parameter] left +# 172| 1: [Parameter] right +# 172| 15: [Property] EqualityContract +# 172| 3: [Getter] get_EqualityContract +# 172| 16: [InstanceConstructor,PrimaryConstructor] R2 +#-----| 2: (Parameters) +# 172| 0: [Parameter] X1 +# 172| -1: [TypeMention] string +# 172| 1: [Parameter] Y1 +# 172| -1: [TypeMention] string +# 172| 17: [Property] X1 +# 172| 3: [Getter] get_X1 +# 172| 4: [Setter] set_X1 +#-----| 2: (Parameters) +# 172| 0: [Parameter] value +# 172| 18: [Property] Y1 +# 172| 3: [Getter] get_Y1 +# 172| 4: [Setter] set_Y1 +#-----| 2: (Parameters) +# 172| 0: [Parameter] value +# 174| 15: [Method] M8 +# 174| -1: [TypeMention] Void +# 175| 4: [BlockStmt] {...} +# 176| 0: [LocalVariableDeclStmt] ... ...; +# 176| 0: [LocalVariableDeclAndInitExpr] String o1 = ... +# 176| -1: [TypeMention] string +# 176| 0: [LocalVariableAccess] access to local variable o1 +# 176| 1: [MethodCall] call to method Source +# 176| 0: [CastExpr] (...) ... +# 176| 1: [IntLiteral] 16 +# 177| 1: [LocalVariableDeclStmt] ... ...; +# 177| 0: [LocalVariableDeclAndInitExpr] String o2 = ... +# 177| -1: [TypeMention] string +# 177| 0: [LocalVariableAccess] access to local variable o2 +# 177| 1: [MethodCall] call to method Source +# 177| 0: [CastExpr] (...) ... +# 177| 1: [IntLiteral] 17 +# 178| 2: [LocalVariableDeclStmt] ... ...; +# 178| 0: [LocalVariableDeclAndInitExpr] R2 r = ... +# 178| -1: [TypeMention] R2 +# 178| 0: [LocalVariableAccess] access to local variable r +# 178| 1: [ObjectCreation] object creation of type R2 +# 178| -1: [TypeMention] R2 +# 178| 0: [LocalVariableAccess] access to local variable o1 +# 178| 1: [LocalVariableAccess] access to local variable o2 +# 180| 3: [ExprStmt] ...; +# 180| 0: [AssignExpr] ... = ... +# 180| 0: [TupleExpr] (..., ...) +# 180| 0: [LocalVariableDeclExpr] String x1 +# 180| 1: [LocalVariableDeclExpr] String y1 +# 180| 1: [LocalVariableAccess] access to local variable r +# 181| 4: [ExprStmt] ...; +# 181| 0: [MethodCall] call to method Sink +# 181| 0: [LocalVariableAccess] access to local variable x1 +# 182| 5: [ExprStmt] ...; +# 182| 0: [MethodCall] call to method Sink +# 182| 0: [LocalVariableAccess] access to local variable y1 +# 185| 16: [RecordClass] R3 +# 185| 12: [NEOperator] != +#-----| 2: (Parameters) +# 185| 0: [Parameter] left +# 185| 1: [Parameter] right +# 185| 13: [EQOperator] == +#-----| 2: (Parameters) +# 185| 0: [Parameter] left +# 185| 1: [Parameter] right +# 185| 14: [Property] EqualityContract +# 185| 3: [Getter] get_EqualityContract +# 185| 15: [InstanceConstructor,PrimaryConstructor] R3 +#-----| 2: (Parameters) +# 185| 0: [Parameter] X2 +# 185| -1: [TypeMention] string +# 185| 1: [Parameter] Y2 +# 185| -1: [TypeMention] string +# 185| 16: [Property] X2 +# 185| 3: [Getter] get_X2 +# 185| 4: [Setter] set_X2 +#-----| 2: (Parameters) +# 185| 0: [Parameter] value +# 185| 17: [Property] Y2 +# 185| 3: [Getter] get_Y2 +# 185| 4: [Setter] set_Y2 +#-----| 2: (Parameters) +# 185| 0: [Parameter] value +# 187| 18: [Method] Deconstruct +# 187| -1: [TypeMention] Void +#-----| 2: (Parameters) +# 187| 0: [Parameter] y2 +# 187| -1: [TypeMention] string +# 187| 1: [Parameter] x2 +# 187| -1: [TypeMention] string +# 188| 4: [BlockStmt] {...} +# 189| 0: [ExprStmt] ...; +# 189| 0: [AssignExpr] ... = ... +# 189| 0: [ParameterAccess] access to parameter x2 +# 189| 1: [PropertyCall] access to property X2 +# 190| 1: [ExprStmt] ...; +# 190| 0: [AssignExpr] ... = ... +# 190| 0: [ParameterAccess] access to parameter y2 +# 190| 1: [PropertyCall] access to property Y2 +# 194| 17: [Method] M9 +# 194| -1: [TypeMention] Void +# 195| 4: [BlockStmt] {...} +# 196| 0: [LocalVariableDeclStmt] ... ...; +# 196| 0: [LocalVariableDeclAndInitExpr] String o1 = ... +# 196| -1: [TypeMention] string +# 196| 0: [LocalVariableAccess] access to local variable o1 +# 196| 1: [MethodCall] call to method Source +# 196| 0: [CastExpr] (...) ... +# 196| 1: [IntLiteral] 18 +# 197| 1: [LocalVariableDeclStmt] ... ...; +# 197| 0: [LocalVariableDeclAndInitExpr] String o2 = ... +# 197| -1: [TypeMention] string +# 197| 0: [LocalVariableAccess] access to local variable o2 +# 197| 1: [MethodCall] call to method Source +# 197| 0: [CastExpr] (...) ... +# 197| 1: [IntLiteral] 19 +# 198| 2: [LocalVariableDeclStmt] ... ...; +# 198| 0: [LocalVariableDeclAndInitExpr] R3 r = ... +# 198| -1: [TypeMention] R3 +# 198| 0: [LocalVariableAccess] access to local variable r +# 198| 1: [ObjectCreation] object creation of type R3 +# 198| -1: [TypeMention] R3 +# 198| 0: [LocalVariableAccess] access to local variable o1 +# 198| 1: [LocalVariableAccess] access to local variable o2 +# 200| 3: [ExprStmt] ...; +# 200| 0: [AssignExpr] ... = ... +# 200| 0: [TupleExpr] (..., ...) +# 200| 0: [LocalVariableDeclExpr] String x +# 200| 1: [LocalVariableDeclExpr] String y +# 200| 1: [LocalVariableAccess] access to local variable r +# 201| 4: [ExprStmt] ...; +# 201| 0: [MethodCall] call to method Sink +# 201| 0: [LocalVariableAccess] access to local variable x +# 202| 5: [ExprStmt] ...; +# 202| 0: [MethodCall] call to method Sink +# 202| 0: [LocalVariableAccess] access to local variable y +# 205| 18: [RecordClass] R4 +# 205| 13: [NEOperator] != +#-----| 2: (Parameters) +# 205| 0: [Parameter] left +# 205| 1: [Parameter] right +# 205| 14: [EQOperator] == +#-----| 2: (Parameters) +# 205| 0: [Parameter] left +# 205| 1: [Parameter] right +# 205| 15: [Property] EqualityContract +# 205| 3: [Getter] get_EqualityContract +# 205| 16: [InstanceConstructor,PrimaryConstructor] R4 +#-----| 2: (Parameters) +# 205| 0: [Parameter] X3 +# 205| -1: [TypeMention] string +# 205| 1: [Parameter] Y3 +# 205| -1: [TypeMention] string +# 205| 17: [Property] X3 +# 205| 3: [Getter] get_X3 +# 205| 4: [Setter] set_X3 +#-----| 2: (Parameters) +# 205| 0: [Parameter] value +# 205| 18: [Property] Y3 +# 205| 3: [Getter] get_Y3 +# 205| 4: [Setter] set_Y3 +#-----| 2: (Parameters) +# 205| 0: [Parameter] value +# 207| 19: [Method] M10 +# 207| -1: [TypeMention] Void +# 208| 4: [BlockStmt] {...} +# 209| 0: [LocalVariableDeclStmt] ... ...; +# 209| 0: [LocalVariableDeclAndInitExpr] String o1 = ... +# 209| -1: [TypeMention] string +# 209| 0: [LocalVariableAccess] access to local variable o1 +# 209| 1: [MethodCall] call to method Source +# 209| 0: [CastExpr] (...) ... +# 209| 1: [IntLiteral] 20 +# 210| 1: [LocalVariableDeclStmt] ... ...; +# 210| 0: [LocalVariableDeclAndInitExpr] String o2 = ... +# 210| -1: [TypeMention] string +# 210| 0: [LocalVariableAccess] access to local variable o2 +# 210| 1: [MethodCall] call to method Source +# 210| 0: [CastExpr] (...) ... +# 210| 1: [IntLiteral] 21 +# 211| 2: [LocalVariableDeclStmt] ... ...; +# 211| 0: [LocalVariableDeclAndInitExpr] R4 r = ... +# 211| -1: [TypeMention] R4 +# 211| 0: [LocalVariableAccess] access to local variable r +# 211| 1: [ObjectCreation] object creation of type R4 +# 211| -1: [TypeMention] R4 +# 211| 0: [LocalVariableAccess] access to local variable o1 +# 211| 1: [LocalVariableAccess] access to local variable o2 +# 213| 3: [ExprStmt] ...; +# 213| 0: [MethodCall] call to method Deconstruct +# 213| -1: [LocalVariableAccess] access to local variable r +# 213| 0: [LocalVariableAccess,LocalVariableDeclExpr] String x3 +# 213| 1: [LocalVariableAccess,LocalVariableDeclExpr] String y3 +# 214| 4: [ExprStmt] ...; +# 214| 0: [MethodCall] call to method Sink +# 214| 0: [LocalVariableAccess] access to local variable x3 +# 215| 5: [ExprStmt] ...; +# 215| 0: [MethodCall] call to method Sink +# 215| 0: [LocalVariableAccess] access to local variable y3 +# 218| 20: [Method] M11 +# 218| -1: [TypeMention] Void +# 219| 4: [BlockStmt] {...} +# 220| 0: [LocalVariableDeclStmt] ... ...; +# 220| 0: [LocalVariableDeclAndInitExpr] String o1 = ... +# 220| -1: [TypeMention] string +# 220| 0: [LocalVariableAccess] access to local variable o1 +# 220| 1: [MethodCall] call to method Source +# 220| 0: [CastExpr] (...) ... +# 220| 1: [IntLiteral] 22 +# 221| 1: [LocalVariableDeclStmt] ... ...; +# 221| 0: [LocalVariableDeclAndInitExpr] String o2 = ... +# 221| -1: [TypeMention] string +# 221| 0: [LocalVariableAccess] access to local variable o2 +# 221| 1: [MethodCall] call to method Source +# 221| 0: [CastExpr] (...) ... +# 221| 1: [IntLiteral] 23 +# 222| 2: [LocalVariableDeclStmt] ... ...; +# 222| 0: [LocalVariableDeclAndInitExpr] R4 r = ... +# 222| -1: [TypeMention] R4 +# 222| 0: [LocalVariableAccess] access to local variable r +# 222| 1: [ObjectCreation] object creation of type R4 +# 222| -1: [TypeMention] R4 +# 222| 0: [LocalVariableAccess] access to local variable o1 +# 222| 1: [LocalVariableAccess] access to local variable o2 +# 223| 3: [ExprStmt] ...; +# 223| 0: [AssignExpr] ... = ... +# 223| 0: [TupleExpr] (..., ...) +# 223| 0: [LocalVariableDeclExpr] String x +# 223| 1: [LocalVariableDeclExpr] String y +# 223| 1: [TupleExpr] (..., ...) +# 223| 0: [StringLiteralUtf16] "1" +# 223| 1: [StringLiteralUtf16] "2" +# 225| 4: [ExprStmt] ...; +# 225| 0: [AssignExpr] ... = ... +# 225| 0: [TupleExpr] (..., ...) +# 225| 0: [LocalVariableAccess] access to local variable x +# 225| 1: [LocalVariableAccess] access to local variable y +# 225| 1: [LocalVariableAccess] access to local variable r +# 226| 5: [ExprStmt] ...; +# 226| 0: [MethodCall] call to method Sink +# 226| 0: [LocalVariableAccess] access to local variable x +# 227| 6: [ExprStmt] ...; +# 227| 0: [MethodCall] call to method Sink +# 227| 0: [LocalVariableAccess] access to local variable y +# 230| 21: [Method] M12 +# 230| -1: [TypeMention] Void +# 231| 4: [BlockStmt] {...} +# 232| 0: [LocalVariableDeclStmt] ... ...; +# 232| 0: [LocalVariableDeclAndInitExpr] String o1 = ... +# 232| -1: [TypeMention] string +# 232| 0: [LocalVariableAccess] access to local variable o1 +# 232| 1: [MethodCall] call to method Source +# 232| 0: [CastExpr] (...) ... +# 232| 1: [IntLiteral] 24 +# 233| 1: [LocalVariableDeclStmt] ... ...; +# 233| 0: [LocalVariableDeclAndInitExpr] String o2 = ... +# 233| -1: [TypeMention] string +# 233| 0: [LocalVariableAccess] access to local variable o2 +# 233| 1: [MethodCall] call to method Source +# 233| 0: [CastExpr] (...) ... +# 233| 1: [IntLiteral] 25 +# 234| 2: [LocalVariableDeclStmt] ... ...; +# 234| 0: [LocalVariableDeclAndInitExpr] R4 r = ... +# 234| -1: [TypeMention] R4 +# 234| 0: [LocalVariableAccess] access to local variable r +# 234| 1: [ObjectCreation] object creation of type R4 +# 234| -1: [TypeMention] R4 +# 234| 0: [LocalVariableAccess] access to local variable o1 +# 234| 1: [LocalVariableAccess] access to local variable o2 +# 236| 3: [ExprStmt] ...; +# 236| 0: [AssignExpr] ... = ... +# 236| 0: [TupleExpr] (..., ...) +# 236| 0: [LocalVariableDeclExpr] String x +# 236| 1: [LocalVariableDeclExpr] _ +# 236| 1: [LocalVariableAccess] access to local variable r +# 237| 4: [ExprStmt] ...; +# 237| 0: [MethodCall] call to method Sink +# 237| 0: [LocalVariableAccess] access to local variable x +# 240| 22: [Method] M13 +# 240| -1: [TypeMention] Void +# 241| 4: [BlockStmt] {...} +# 242| 0: [LocalVariableDeclStmt] ... ...; +# 242| 0: [LocalVariableDeclAndInitExpr] String o1 = ... +# 242| -1: [TypeMention] string +# 242| 0: [LocalVariableAccess] access to local variable o1 +# 242| 1: [MethodCall] call to method Source +# 242| 0: [CastExpr] (...) ... +# 242| 1: [IntLiteral] 26 +# 243| 1: [LocalVariableDeclStmt] ... ...; +# 243| 0: [LocalVariableDeclAndInitExpr] String o2 = ... +# 243| -1: [TypeMention] string +# 243| 0: [LocalVariableAccess] access to local variable o2 +# 243| 1: [MethodCall] call to method Source +# 243| 0: [CastExpr] (...) ... +# 243| 1: [IntLiteral] 27 +# 244| 2: [LocalVariableDeclStmt] ... ...; +# 244| 0: [LocalVariableDeclAndInitExpr] R4 r = ... +# 244| -1: [TypeMention] R4 +# 244| 0: [LocalVariableAccess] access to local variable r +# 244| 1: [ObjectCreation] object creation of type R4 +# 244| -1: [TypeMention] R4 +# 244| 0: [LocalVariableAccess] access to local variable o1 +# 244| 1: [LocalVariableAccess] access to local variable o2 +# 246| 3: [IfStmt] if (...) ... +# 246| 0: [IsExpr] ... is ... +# 246| 0: [LocalVariableAccess] access to local variable r +# 246| 1: [TuplePatternExpr] (..., ...) +# 246| 0: [VariablePatternExpr] String x +# 246| 1: [VariablePatternExpr] String y +# 247| 1: [BlockStmt] {...} +# 248| 0: [ExprStmt] ...; +# 248| 0: [MethodCall] call to method Sink +# 248| 0: [LocalVariableAccess] access to local variable x +# 249| 1: [ExprStmt] ...; +# 249| 0: [MethodCall] call to method Sink +# 249| 0: [LocalVariableAccess] access to local variable y +# 253| 23: [Method] M14 +# 253| -1: [TypeMention] Void +# 254| 4: [BlockStmt] {...} +# 255| 0: [LocalVariableDeclStmt] ... ...; +# 255| 0: [LocalVariableDeclAndInitExpr] String o1 = ... +# 255| -1: [TypeMention] string +# 255| 0: [LocalVariableAccess] access to local variable o1 +# 255| 1: [MethodCall] call to method Source +# 255| 0: [CastExpr] (...) ... +# 255| 1: [IntLiteral] 28 +# 256| 1: [LocalVariableDeclStmt] ... ...; +# 256| 0: [LocalVariableDeclAndInitExpr] String o2 = ... +# 256| -1: [TypeMention] string +# 256| 0: [LocalVariableAccess] access to local variable o2 +# 256| 1: [MethodCall] call to method Source +# 256| 0: [CastExpr] (...) ... +# 256| 1: [IntLiteral] 29 +# 257| 2: [LocalVariableDeclStmt] ... ...; +# 257| 0: [LocalVariableDeclAndInitExpr] R4 r = ... +# 257| -1: [TypeMention] R4 +# 257| 0: [LocalVariableAccess] access to local variable r +# 257| 1: [ObjectCreation] object creation of type R4 +# 257| -1: [TypeMention] R4 +# 257| 0: [LocalVariableAccess] access to local variable o1 +# 257| 1: [LocalVariableAccess] access to local variable o2 +# 259| 3: [IfStmt] if (...) ... +# 259| 0: [IsExpr] ... is ... +# 259| 0: [LocalVariableAccess] access to local variable r +# 259| 1: [RecursivePatternExpr] { ... } +# 259| 2: [PositionalPatternExpr] ( ... ) +# 259| 0: [VariablePatternExpr] String x +# 259| 1: [VariablePatternExpr] String y +# 260| 1: [BlockStmt] {...} +# 261| 0: [ExprStmt] ...; +# 261| 0: [MethodCall] call to method Sink +# 261| 0: [LocalVariableAccess] access to local variable x +# 262| 1: [ExprStmt] ...; +# 262| 0: [MethodCall] call to method Sink +# 262| 0: [LocalVariableAccess] access to local variable y +# 266| 24: [Method] M15 +# 266| -1: [TypeMention] Void +# 267| 4: [BlockStmt] {...} +# 268| 0: [LocalVariableDeclStmt] ... ...; +# 268| 0: [LocalVariableDeclAndInitExpr] String o1 = ... +# 268| -1: [TypeMention] string +# 268| 0: [LocalVariableAccess] access to local variable o1 +# 268| 1: [MethodCall] call to method Source +# 268| 0: [CastExpr] (...) ... +# 268| 1: [IntLiteral] 30 +# 269| 1: [LocalVariableDeclStmt] ... ...; +# 269| 0: [LocalVariableDeclAndInitExpr] String o2 = ... +# 269| -1: [TypeMention] string +# 269| 0: [LocalVariableAccess] access to local variable o2 +# 269| 1: [MethodCall] call to method Source +# 269| 0: [CastExpr] (...) ... +# 269| 1: [IntLiteral] 31 +# 270| 2: [LocalVariableDeclStmt] ... ...; +# 270| 0: [LocalVariableDeclAndInitExpr] R4 r = ... +# 270| -1: [TypeMention] R4 +# 270| 0: [LocalVariableAccess] access to local variable r +# 270| 1: [ObjectCreation] object creation of type R4 +# 270| -1: [TypeMention] R4 +# 270| 0: [LocalVariableAccess] access to local variable o1 +# 270| 1: [LocalVariableAccess] access to local variable o2 +# 272| 3: [SwitchStmt] switch (...) {...} +# 272| 0: [LocalVariableAccess] access to local variable r +# 275| 0: [CaseStmt] case ...: +# 275| 0: [TuplePatternExpr] (..., ...) +# 275| 0: [VariablePatternExpr] String x +# 275| 1: [VariablePatternExpr] String y +# 276| 1: [ExprStmt] ...; +# 276| 0: [MethodCall] call to method Sink +# 276| 0: [LocalVariableAccess] access to local variable x +# 277| 2: [ExprStmt] ...; +# 277| 0: [MethodCall] call to method Sink +# 277| 0: [LocalVariableAccess] access to local variable y +# 278| 3: [BreakStmt] break; +# 282| 25: [Method] M16 +# 282| -1: [TypeMention] Void +# 283| 4: [BlockStmt] {...} +# 284| 0: [LocalVariableDeclStmt] ... ...; +# 284| 0: [LocalVariableDeclAndInitExpr] String o1 = ... +# 284| -1: [TypeMention] string +# 284| 0: [LocalVariableAccess] access to local variable o1 +# 284| 1: [MethodCall] call to method Source +# 284| 0: [CastExpr] (...) ... +# 284| 1: [IntLiteral] 32 +# 285| 1: [LocalVariableDeclStmt] ... ...; +# 285| 0: [LocalVariableDeclAndInitExpr] String o2 = ... +# 285| -1: [TypeMention] string +# 285| 0: [LocalVariableAccess] access to local variable o2 +# 285| 1: [MethodCall] call to method Source +# 285| 0: [CastExpr] (...) ... +# 285| 1: [IntLiteral] 33 +# 286| 2: [LocalVariableDeclStmt] ... ...; +# 286| 0: [LocalVariableDeclAndInitExpr] R4 r = ... +# 286| -1: [TypeMention] R4 +# 286| 0: [LocalVariableAccess] access to local variable r +# 286| 1: [ObjectCreation] object creation of type R4 +# 286| -1: [TypeMention] R4 +# 286| 0: [LocalVariableAccess] access to local variable o1 +# 286| 1: [LocalVariableAccess] access to local variable o2 +# 288| 3: [SwitchStmt] switch (...) {...} +# 288| 0: [LocalVariableAccess] access to local variable r +# 290| 0: [CaseStmt] case ...: +# 290| 0: [RecursivePatternExpr] { ... } +# 290| 2: [PositionalPatternExpr] ( ... ) +# 290| 0: [VariablePatternExpr] String x +# 290| 1: [VariablePatternExpr] String y +# 291| 1: [ExprStmt] ...; +# 291| 0: [MethodCall] call to method Sink +# 291| 0: [LocalVariableAccess] access to local variable x +# 292| 2: [ExprStmt] ...; +# 292| 0: [MethodCall] call to method Sink +# 292| 0: [LocalVariableAccess] access to local variable y +# 293| 3: [BreakStmt] break; +# 297| 26: [Class] C +# 299| 5: [Field] x +# 299| -1: [TypeMention] string +# 300| 6: [Field] y +# 300| -1: [TypeMention] string +# 302| 7: [InstanceConstructor] C +#-----| 2: (Parameters) +# 302| 0: [Parameter] x +# 302| -1: [TypeMention] string +# 302| 1: [Parameter] y +# 302| -1: [TypeMention] string +# 303| 4: [BlockStmt] {...} +# 304| 0: [ExprStmt] ...; +# 304| 0: [AssignExpr] ... = ... +# 304| 0: [FieldAccess] access to field x +# 304| -1: [ThisAccess] this access +# 304| 1: [ParameterAccess] access to parameter x +# 305| 1: [ExprStmt] ...; +# 305| 0: [AssignExpr] ... = ... +# 305| 0: [FieldAccess] access to field y +# 305| -1: [ThisAccess] this access +# 305| 1: [ParameterAccess] access to parameter y +# 308| 8: [Method] Deconstruct +# 308| -1: [TypeMention] Void +#-----| 2: (Parameters) +# 308| 0: [Parameter] x +# 308| -1: [TypeMention] string +# 308| 1: [Parameter] y +# 308| -1: [TypeMention] string +# 309| 4: [BlockStmt] {...} +# 310| 0: [ExprStmt] ...; +# 310| 0: [AssignExpr] ... = ... +# 310| 0: [ParameterAccess] access to parameter x +# 310| 1: [FieldAccess] access to field x +# 310| -1: [ThisAccess] this access +# 311| 1: [ExprStmt] ...; +# 311| 0: [AssignExpr] ... = ... +# 311| 0: [ParameterAccess] access to parameter y +# 311| 1: [FieldAccess] access to field y +# 311| -1: [ThisAccess] this access +# 315| 27: [Method] M17 +# 315| -1: [TypeMention] Void +# 316| 4: [BlockStmt] {...} +# 317| 0: [LocalVariableDeclStmt] ... ...; +# 317| 0: [LocalVariableDeclAndInitExpr] String o1 = ... +# 317| -1: [TypeMention] string +# 317| 0: [LocalVariableAccess] access to local variable o1 +# 317| 1: [MethodCall] call to method Source +# 317| 0: [CastExpr] (...) ... +# 317| 1: [IntLiteral] 34 +# 318| 1: [LocalVariableDeclStmt] ... ...; +# 318| 0: [LocalVariableDeclAndInitExpr] String o2 = ... +# 318| -1: [TypeMention] string +# 318| 0: [LocalVariableAccess] access to local variable o2 +# 318| 1: [MethodCall] call to method Source +# 318| 0: [CastExpr] (...) ... +# 318| 1: [IntLiteral] 35 +# 319| 2: [LocalVariableDeclStmt] ... ...; +# 319| 0: [LocalVariableDeclAndInitExpr] C c = ... +# 319| -1: [TypeMention] C +# 319| 0: [LocalVariableAccess] access to local variable c +# 319| 1: [ObjectCreation] object creation of type C +# 319| -1: [TypeMention] C +# 319| 0: [LocalVariableAccess] access to local variable o1 +# 319| 1: [LocalVariableAccess] access to local variable o2 +# 321| 3: [ExprStmt] ...; +# 321| 0: [AssignExpr] ... = ... +# 321| 0: [TupleExpr] (..., ...) +# 321| 0: [LocalVariableDeclExpr] String x +# 321| 1: [LocalVariableDeclExpr] String y +# 321| 1: [LocalVariableAccess] access to local variable c +# 322| 4: [ExprStmt] ...; +# 322| 0: [MethodCall] call to method Sink +# 322| 0: [LocalVariableAccess] access to local variable x +# 323| 5: [ExprStmt] ...; +# 323| 0: [MethodCall] call to method Sink +# 323| 0: [LocalVariableAccess] access to local variable y +# 326| 29: [RecordClass] GenericRecord`2 +#-----| 1: (Type parameters) +# 326| 0: [TypeParameter] T1 +# 326| 1: [TypeParameter] T2 +# 326| 13: [NEOperator] != +#-----| 2: (Parameters) +# 326| 0: [Parameter] left +# 326| 1: [Parameter] right +# 326| 14: [EQOperator] == +#-----| 2: (Parameters) +# 326| 0: [Parameter] left +# 326| 1: [Parameter] right +# 326| 15: [Property] EqualityContract +# 326| 3: [Getter] get_EqualityContract +# 326| 16: [InstanceConstructor,PrimaryConstructor] GenericRecord +#-----| 2: (Parameters) +# 326| 0: [Parameter] t1 +# 326| -1: [TypeMention] T1 +# 326| 1: [Parameter] t2 +# 326| -1: [TypeMention] T2 +# 326| 17: [Property] t1 +# 326| 3: [Getter] get_t1 +# 326| 4: [Setter] set_t1 +#-----| 2: (Parameters) +# 326| 0: [Parameter] value +# 326| 18: [Property] t2 +# 326| 3: [Getter] get_t2 +# 326| 4: [Setter] set_t2 +#-----| 2: (Parameters) +# 326| 0: [Parameter] value +# 328| 30: [Method] M18 +# 328| -1: [TypeMention] Void +# 329| 4: [BlockStmt] {...} +# 330| 0: [LocalVariableDeclStmt] ... ...; +# 330| 0: [LocalVariableDeclAndInitExpr] String o1 = ... +# 330| -1: [TypeMention] string +# 330| 0: [LocalVariableAccess] access to local variable o1 +# 330| 1: [MethodCall] call to method Source +# 330| 0: [CastExpr] (...) ... +# 330| 1: [IntLiteral] 36 +# 331| 1: [LocalVariableDeclStmt] ... ...; +# 331| 0: [LocalVariableDeclAndInitExpr] String o2 = ... +# 331| -1: [TypeMention] string +# 331| 0: [LocalVariableAccess] access to local variable o2 +# 331| 1: [MethodCall] call to method Source +# 331| 0: [CastExpr] (...) ... +# 331| 1: [IntLiteral] 37 +# 332| 2: [LocalVariableDeclStmt] ... ...; +# 332| 0: [LocalVariableDeclAndInitExpr] GenericRecord r = ... +# 332| -1: [TypeMention] GenericRecord +# 332| 0: [LocalVariableAccess] access to local variable r +# 332| 1: [ObjectCreation] object creation of type GenericRecord +# 332| -1: [TypeMention] GenericRecord +# 332| 1: [TypeMention] string +# 332| 2: [TypeMention] string +# 332| 0: [LocalVariableAccess] access to local variable o1 +# 332| 1: [LocalVariableAccess] access to local variable o2 +# 334| 3: [ExprStmt] ...; +# 334| 0: [AssignExpr] ... = ... +# 334| 0: [TupleExpr] (..., ...) +# 334| 0: [LocalVariableDeclExpr] String x +# 334| 1: [LocalVariableDeclExpr] String y +# 334| 1: [LocalVariableAccess] access to local variable r +# 335| 4: [ExprStmt] ...; +# 335| 0: [MethodCall] call to method Sink +# 335| 0: [LocalVariableAccess] access to local variable x +# 336| 5: [ExprStmt] ...; +# 336| 0: [MethodCall] call to method Sink +# 336| 0: [LocalVariableAccess] access to local variable y +# 339| 31: [Class] D +# 341| 6: [Field] X +# 341| -1: [TypeMention] string +# 342| 7: [Field] Y +# 342| -1: [TypeMention] string +# 343| 8: [Method] Deconstruct +# 343| -1: [TypeMention] Void +#-----| 2: (Parameters) +# 343| 0: [Parameter] x +# 343| -1: [TypeMention] string +# 343| 1: [Parameter] y +# 343| -1: [TypeMention] string +# 344| 4: [BlockStmt] {...} +# 345| 0: [ExprStmt] ...; +# 345| 0: [AssignExpr] ... = ... +# 345| 0: [ParameterAccess] access to parameter x +# 345| 1: [FieldAccess] access to field X +# 346| 1: [ExprStmt] ...; +# 346| 0: [AssignExpr] ... = ... +# 346| 0: [ParameterAccess] access to parameter y +# 346| 1: [FieldAccess] access to field Y +# 350| 32: [Class] E +#-----| 3: (Base types) +# 350| 0: [TypeMention] D +# 352| 33: [Method] M100 +# 352| -1: [TypeMention] Void +# 353| 4: [BlockStmt] {...} +# 354| 0: [LocalVariableDeclStmt] ... ...; +# 354| 0: [LocalVariableDeclAndInitExpr] String o1 = ... +# 354| -1: [TypeMention] string +# 354| 0: [LocalVariableAccess] access to local variable o1 +# 354| 1: [MethodCall] call to method Source +# 354| 0: [CastExpr] (...) ... +# 354| 1: [IntLiteral] 38 +# 355| 1: [LocalVariableDeclStmt] ... ...; +# 355| 0: [LocalVariableDeclAndInitExpr] String o2 = ... +# 355| -1: [TypeMention] string +# 355| 0: [LocalVariableAccess] access to local variable o2 +# 355| 1: [MethodCall] call to method Source +# 355| 0: [CastExpr] (...) ... +# 355| 1: [IntLiteral] 39 +# 356| 2: [LocalVariableDeclStmt] ... ...; +# 356| 0: [LocalVariableDeclAndInitExpr] E e = ... +# 356| -1: [TypeMention] E +# 356| 0: [LocalVariableAccess] access to local variable e +# 356| 1: [ObjectCreation] object creation of type E +# 356| -2: [TypeMention] E +# 356| -1: [ObjectInitializer] { ..., ... } +# 356| 0: [MemberInitializer] ... = ... +# 356| 0: [FieldAccess] access to field X +# 356| 1: [LocalVariableAccess] access to local variable o1 +# 356| 1: [MemberInitializer] ... = ... +# 356| 0: [FieldAccess] access to field Y +# 356| 1: [LocalVariableAccess] access to local variable o2 +# 359| 3: [ExprStmt] ...; +# 359| 0: [AssignExpr] ... = ... +# 359| 0: [TupleExpr] (..., ...) +# 359| 0: [LocalVariableDeclExpr] String x +# 359| 1: [LocalVariableDeclExpr] String y +# 359| 1: [LocalVariableAccess] access to local variable e +# 360| 4: [ExprStmt] ...; +# 360| 0: [MethodCall] call to method Sink +# 360| 0: [LocalVariableAccess] access to local variable x +# 361| 5: [ExprStmt] ...; +# 361| 0: [MethodCall] call to method Sink +# 361| 0: [LocalVariableAccess] access to local variable y +# 364| 34: [Method] Sink +# 364| -1: [TypeMention] Void #-----| 2: (Parameters) -# 172| 0: [Parameter] o -# 172| -1: [TypeMention] object -# 172| 4: [BlockStmt] {...} -# 174| 17: [Method] Source`1 -# 174| -1: [TypeMention] T +# 364| 0: [Parameter] o +# 364| -1: [TypeMention] object +# 364| 4: [BlockStmt] {...} +# 366| 37: [Method] Source`1 +# 366| -1: [TypeMention] T #-----| 1: (Type parameters) -# 174| 0: [TypeParameter] T +# 366| 0: [TypeParameter] T #-----| 2: (Parameters) -# 174| 0: [Parameter] source -# 174| -1: [TypeMention] object -# 174| 4: [ThrowExpr] throw ... -# 174| 0: [NullLiteral] null -# 177| [NamespaceDeclaration] namespace ... { ... } -# 179| 1: [Class] IsExternalInit +# 366| 0: [Parameter] source +# 366| -1: [TypeMention] object +# 366| 4: [ThrowExpr] throw ... +# 366| 0: [NullLiteral] null +# 369| [NamespaceDeclaration] namespace ... { ... } +# 371| 1: [Class] IsExternalInit diff --git a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.cs b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.cs index a3f4a336acd1..8a4d9455d62d 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.cs +++ b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.cs @@ -101,13 +101,13 @@ static void M5() Sink(r.i); // $ hasValueFlow=9 var (a, b) = r; - Sink(a); // $ MISSING: hasValueFlow=9 + Sink(a); // $ hasValueFlow=9 Sink(b); switch (r) { case var (x, y): - Sink(x); // $ MISSING: hasValueFlow=9 + Sink(x); // $ hasValueFlow=9 Sink(y); break; } @@ -169,6 +169,198 @@ static void M7() } } + record R2(string X1, string Y1); + + static void M8() + { + var o1 = Source(16); + var o2 = Source(17); + var r = new R2(o1, o2); + // Implicit call to the compiler-generated Deconstruct method of R2 + var (x1, y1) = r; + Sink(x1); // $ hasValueFlow=16 + Sink(y1); // $ hasValueFlow=17 + } + + record R3(string X2, string Y2) + { + public void Deconstruct(out string y2, out string x2) + { + x2 = X2; + y2 = Y2; + } + } + + static void M9() + { + var o1 = Source(18); + var o2 = Source(19); + var r = new R3(o1, o2); + // Implicit call to the custom Deconstruct method of R3 + var (x, y) = r; + Sink(x); // $ hasValueFlow=19 + Sink(y); // $ hasValueFlow=18 + } + + record R4(string X3, string Y3); + + static void M10() + { + var o1 = Source(20); + var o2 = Source(21); + var r = new R4(o1, o2); + // Explicit call to the compiler-generated Deconstruct method of R4 + r.Deconstruct(out var x3, out var y3); + Sink(x3); // $ hasValueFlow=20 + Sink(y3); // $ hasValueFlow=21 + } + + static void M11() + { + var o1 = Source(22); + var o2 = Source(23); + var r = new R4(o1, o2); + var (x, y) = ("1", "2"); + // Using tuple deconstruction with an existing tuple variable. + (x, y) = r; + Sink(x); // $ hasValueFlow=22 + Sink(y); // $ hasValueFlow=23 + } + + static void M12() + { + var o1 = Source(24); + var o2 = Source(25); + var r = new R4(o1, o2); + // Ignoring certain tuple elements. + (var x, var _) = r; + Sink(x); // $ hasValueFlow=24 + } + + static void M13() + { + var o1 = Source(26); + var o2 = Source(27); + var r = new R4(o1, o2); + // Pattern matching with tuple deconstruction. + if (r is var (x, y)) + { + Sink(x); // $ hasValueFlow=26 + Sink(y); // $ hasValueFlow=27 + } + } + + static void M14() + { + var o1 = Source(28); + var o2 = Source(29); + var r = new R4(o1, o2); + // Pattern matching with positional pattern deconstruction in an is expression. + if (r is (var x, var y)) + { + Sink(x); // $ hasValueFlow=28 + Sink(y); // $ hasValueFlow=29 + } + } + + static void M15() + { + var o1 = Source(30); + var o2 = Source(31); + var r = new R4(o1, o2); + + switch (r) + { + // Pattern matching with tuple deconstruction in a switch statement. + case var (x, y): + Sink(x); // $ hasValueFlow=30 + Sink(y); // $ hasValueFlow=31 + break; + } + } + + static void M16() + { + var o1 = Source(32); + var o2 = Source(33); + var r = new R4(o1, o2); + // Pattern matching with positional pattern deconstruction in a switch statement. + switch (r) + { + case (var x, var y): + Sink(x); // $ hasValueFlow=32 + Sink(y); // $ hasValueFlow=33 + break; + } + } + + class C + { + private string x; + private string y; + + public C(string x, string y) + { + this.x = x; + this.y = y; + } + + public void Deconstruct(out string x, out string y) + { + x = this.x; + y = this.y; + } + } + + static void M17() + { + var o1 = Source(34); + var o2 = Source(35); + var c = new C(o1, o2); + // Implicit call to the custom Deconstruct method of C. + var (x, y) = c; + Sink(x); // $ hasValueFlow=34 + Sink(y); // $ hasValueFlow=35 + } + + public record GenericRecord(T1 t1, T2 t2); + + static void M18() + { + var o1 = Source(36); + var o2 = Source(37); + var r = new GenericRecord(o1, o2); + // Implicit call to the compiler-generated Deconstruct method of GenericRecord. + var (x, y) = r; + Sink(x); // $ hasValueFlow=36 + Sink(y); // $ hasValueFlow=37 + } + + class D + { + public string X; + public string Y; + public void Deconstruct(out string x, out string y) + { + x = X; + y = Y; + } + } + + class E : D { } + + static void M100() + { + var o1 = Source(38); + var o2 = Source(39); + var e = new E { X = o1, Y = o2 }; + + // Implicit call to the inherited Deconstruct method of D through E. + var (x, y) = e; + Sink(x); // $ hasValueFlow=38 + Sink(y); // $ hasValueFlow=39 + } + public static void Sink(object o) { } static T Source(object source) => throw null; diff --git a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected index e3b79c4c0eb9..10b2650ddbcf 100644 --- a/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected +++ b/csharp/ql/test/library-tests/dataflow/tuples/Tuples.expected @@ -160,6 +160,10 @@ edges | Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:99:13:99:13 | access to local variable o : String | provenance | | | Tuples.cs:100:13:100:13 | access to local variable r : R1 [property i] : String | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | provenance | | | Tuples.cs:100:13:100:13 | access to local variable r : R1 [property i] : String | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | provenance | | +| Tuples.cs:100:13:100:13 | access to local variable r : R1 [property i] : String | Tuples.cs:103:22:103:22 | access to local variable r : R1 [property i] : String | provenance | | +| Tuples.cs:100:13:100:13 | access to local variable r : R1 [property i] : String | Tuples.cs:103:22:103:22 | access to local variable r : R1 [property i] : String | provenance | | +| Tuples.cs:100:13:100:13 | access to local variable r : R1 [property i] : String | Tuples.cs:107:17:107:17 | access to local variable r : R1 [property i] : String | provenance | | +| Tuples.cs:100:13:100:13 | access to local variable r : R1 [property i] : String | Tuples.cs:107:17:107:17 | access to local variable r : R1 [property i] : String | provenance | | | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | Tuples.cs:100:13:100:13 | access to local variable r : R1 [property i] : String | provenance | | | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | Tuples.cs:100:13:100:13 | access to local variable r : R1 [property i] : String | provenance | | | Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:95:22:95:22 | i : String | provenance | | @@ -168,6 +172,14 @@ edges | Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | provenance | | | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | Tuples.cs:101:14:101:16 | access to property i | provenance | | | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | Tuples.cs:101:14:101:16 | access to property i | provenance | | +| Tuples.cs:103:22:103:22 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:104:14:104:14 | access to local variable a | provenance | | +| Tuples.cs:103:22:103:22 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:104:14:104:14 | access to local variable a | provenance | | +| Tuples.cs:103:22:103:22 | access to local variable r : R1 [property i] : String | Tuples.cs:103:22:103:22 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:103:22:103:22 | access to local variable r : R1 [property i] : String | Tuples.cs:103:22:103:22 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:107:17:107:17 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:110:22:110:22 | access to local variable x | provenance | | +| Tuples.cs:107:17:107:17 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:110:22:110:22 | access to local variable x | provenance | | +| Tuples.cs:107:17:107:17 | access to local variable r : R1 [property i] : String | Tuples.cs:107:17:107:17 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:107:17:107:17 | access to local variable r : R1 [property i] : String | Tuples.cs:107:17:107:17 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | | Tuples.cs:118:13:118:13 | access to local variable o : Object | Tuples.cs:121:28:121:28 | access to local variable o : Object | provenance | | | Tuples.cs:118:13:118:13 | access to local variable o : Object | Tuples.cs:121:28:121:28 | access to local variable o : Object | provenance | | | Tuples.cs:118:13:118:13 | access to local variable o : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | provenance | | @@ -298,6 +310,450 @@ edges | Tuples.cs:164:18:164:47 | { ... } : ValueTuple,Int32> [field Item2, field Item2] : String | Tuples.cs:167:18:167:18 | access to local variable t : ValueTuple [field Item2] : String | provenance | | | Tuples.cs:167:18:167:18 | access to local variable t : ValueTuple [field Item2] : String | Tuples.cs:167:18:167:24 | access to field Item2 | provenance | | | Tuples.cs:167:18:167:18 | access to local variable t : ValueTuple [field Item2] : String | Tuples.cs:167:18:167:24 | access to field Item2 | provenance | | +| Tuples.cs:172:22:172:23 | X1 : String | Tuples.cs:172:12:172:13 | this [Return] : R2 [property X1] : String | provenance | | +| Tuples.cs:172:22:172:23 | X1 : String | Tuples.cs:172:12:172:13 | this [Return] : R2 [property X1] : String | provenance | | +| Tuples.cs:172:33:172:34 | Y1 : String | Tuples.cs:172:12:172:13 | this [Return] : R2 [property Y1] : String | provenance | | +| Tuples.cs:172:33:172:34 | Y1 : String | Tuples.cs:172:12:172:13 | this [Return] : R2 [property Y1] : String | provenance | | +| Tuples.cs:176:13:176:14 | access to local variable o1 : String | Tuples.cs:178:24:178:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:176:13:176:14 | access to local variable o1 : String | Tuples.cs:178:24:178:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:176:18:176:35 | call to method Source : String | Tuples.cs:176:13:176:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:176:18:176:35 | call to method Source : String | Tuples.cs:176:13:176:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:177:13:177:14 | access to local variable o2 : String | Tuples.cs:178:28:178:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:177:13:177:14 | access to local variable o2 : String | Tuples.cs:178:28:178:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:177:18:177:35 | call to method Source : String | Tuples.cs:177:13:177:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:177:18:177:35 | call to method Source : String | Tuples.cs:177:13:177:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:178:13:178:13 | access to local variable r : R2 [property X1] : String | Tuples.cs:180:24:180:24 | access to local variable r : R2 [property X1] : String | provenance | | +| Tuples.cs:178:13:178:13 | access to local variable r : R2 [property X1] : String | Tuples.cs:180:24:180:24 | access to local variable r : R2 [property X1] : String | provenance | | +| Tuples.cs:178:13:178:13 | access to local variable r : R2 [property Y1] : String | Tuples.cs:180:24:180:24 | access to local variable r : R2 [property Y1] : String | provenance | | +| Tuples.cs:178:13:178:13 | access to local variable r : R2 [property Y1] : String | Tuples.cs:180:24:180:24 | access to local variable r : R2 [property Y1] : String | provenance | | +| Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property X1] : String | Tuples.cs:178:13:178:13 | access to local variable r : R2 [property X1] : String | provenance | | +| Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property X1] : String | Tuples.cs:178:13:178:13 | access to local variable r : R2 [property X1] : String | provenance | | +| Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property Y1] : String | Tuples.cs:178:13:178:13 | access to local variable r : R2 [property Y1] : String | provenance | | +| Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property Y1] : String | Tuples.cs:178:13:178:13 | access to local variable r : R2 [property Y1] : String | provenance | | +| Tuples.cs:178:24:178:25 | access to local variable o1 : String | Tuples.cs:172:22:172:23 | X1 : String | provenance | | +| Tuples.cs:178:24:178:25 | access to local variable o1 : String | Tuples.cs:172:22:172:23 | X1 : String | provenance | | +| Tuples.cs:178:24:178:25 | access to local variable o1 : String | Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property X1] : String | provenance | | +| Tuples.cs:178:24:178:25 | access to local variable o1 : String | Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property X1] : String | provenance | | +| Tuples.cs:178:28:178:29 | access to local variable o2 : String | Tuples.cs:172:33:172:34 | Y1 : String | provenance | | +| Tuples.cs:178:28:178:29 | access to local variable o2 : String | Tuples.cs:172:33:172:34 | Y1 : String | provenance | | +| Tuples.cs:178:28:178:29 | access to local variable o2 : String | Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property Y1] : String | provenance | | +| Tuples.cs:178:28:178:29 | access to local variable o2 : String | Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property Y1] : String | provenance | | +| Tuples.cs:180:24:180:24 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:181:14:181:15 | access to local variable x1 | provenance | | +| Tuples.cs:180:24:180:24 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:181:14:181:15 | access to local variable x1 | provenance | | +| Tuples.cs:180:24:180:24 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:182:14:182:15 | access to local variable y1 | provenance | | +| Tuples.cs:180:24:180:24 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:182:14:182:15 | access to local variable y1 | provenance | | +| Tuples.cs:180:24:180:24 | access to local variable r : R2 [property X1] : String | Tuples.cs:180:24:180:24 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:180:24:180:24 | access to local variable r : R2 [property X1] : String | Tuples.cs:180:24:180:24 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:180:24:180:24 | access to local variable r : R2 [property Y1] : String | Tuples.cs:180:24:180:24 | [deconstruct parameter 1] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:180:24:180:24 | access to local variable r : R2 [property Y1] : String | Tuples.cs:180:24:180:24 | [deconstruct parameter 1] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:185:22:185:23 | X2 : String | Tuples.cs:185:12:185:13 | this [Return] : R3 [property X2] : String | provenance | | +| Tuples.cs:185:22:185:23 | X2 : String | Tuples.cs:185:12:185:13 | this [Return] : R3 [property X2] : String | provenance | | +| Tuples.cs:185:33:185:34 | Y2 : String | Tuples.cs:185:12:185:13 | this [Return] : R3 [property Y2] : String | provenance | | +| Tuples.cs:185:33:185:34 | Y2 : String | Tuples.cs:185:12:185:13 | this [Return] : R3 [property Y2] : String | provenance | | +| Tuples.cs:187:21:187:31 | this : R3 [property X2] : String | Tuples.cs:189:18:189:19 | this access : R3 [property X2] : String | provenance | | +| Tuples.cs:187:21:187:31 | this : R3 [property X2] : String | Tuples.cs:189:18:189:19 | this access : R3 [property X2] : String | provenance | | +| Tuples.cs:187:21:187:31 | this : R3 [property Y2] : String | Tuples.cs:190:18:190:19 | this access : R3 [property Y2] : String | provenance | | +| Tuples.cs:187:21:187:31 | this : R3 [property Y2] : String | Tuples.cs:190:18:190:19 | this access : R3 [property Y2] : String | provenance | | +| Tuples.cs:189:18:189:19 | access to property X2 : String | Tuples.cs:189:13:189:14 | access to parameter x2 : String | provenance | | +| Tuples.cs:189:18:189:19 | access to property X2 : String | Tuples.cs:189:13:189:14 | access to parameter x2 : String | provenance | | +| Tuples.cs:189:18:189:19 | this access : R3 [property X2] : String | Tuples.cs:189:18:189:19 | access to property X2 : String | provenance | | +| Tuples.cs:189:18:189:19 | this access : R3 [property X2] : String | Tuples.cs:189:18:189:19 | access to property X2 : String | provenance | | +| Tuples.cs:190:18:190:19 | access to property Y2 : String | Tuples.cs:190:13:190:14 | access to parameter y2 : String | provenance | | +| Tuples.cs:190:18:190:19 | access to property Y2 : String | Tuples.cs:190:13:190:14 | access to parameter y2 : String | provenance | | +| Tuples.cs:190:18:190:19 | this access : R3 [property Y2] : String | Tuples.cs:190:18:190:19 | access to property Y2 : String | provenance | | +| Tuples.cs:190:18:190:19 | this access : R3 [property Y2] : String | Tuples.cs:190:18:190:19 | access to property Y2 : String | provenance | | +| Tuples.cs:196:13:196:14 | access to local variable o1 : String | Tuples.cs:198:24:198:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:196:13:196:14 | access to local variable o1 : String | Tuples.cs:198:24:198:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:196:18:196:35 | call to method Source : String | Tuples.cs:196:13:196:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:196:18:196:35 | call to method Source : String | Tuples.cs:196:13:196:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:197:13:197:14 | access to local variable o2 : String | Tuples.cs:198:28:198:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:197:13:197:14 | access to local variable o2 : String | Tuples.cs:198:28:198:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:197:18:197:35 | call to method Source : String | Tuples.cs:197:13:197:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:197:18:197:35 | call to method Source : String | Tuples.cs:197:13:197:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:198:13:198:13 | access to local variable r : R3 [property X2] : String | Tuples.cs:200:22:200:22 | access to local variable r : R3 [property X2] : String | provenance | | +| Tuples.cs:198:13:198:13 | access to local variable r : R3 [property X2] : String | Tuples.cs:200:22:200:22 | access to local variable r : R3 [property X2] : String | provenance | | +| Tuples.cs:198:13:198:13 | access to local variable r : R3 [property Y2] : String | Tuples.cs:200:22:200:22 | access to local variable r : R3 [property Y2] : String | provenance | | +| Tuples.cs:198:13:198:13 | access to local variable r : R3 [property Y2] : String | Tuples.cs:200:22:200:22 | access to local variable r : R3 [property Y2] : String | provenance | | +| Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property X2] : String | Tuples.cs:198:13:198:13 | access to local variable r : R3 [property X2] : String | provenance | | +| Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property X2] : String | Tuples.cs:198:13:198:13 | access to local variable r : R3 [property X2] : String | provenance | | +| Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property Y2] : String | Tuples.cs:198:13:198:13 | access to local variable r : R3 [property Y2] : String | provenance | | +| Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property Y2] : String | Tuples.cs:198:13:198:13 | access to local variable r : R3 [property Y2] : String | provenance | | +| Tuples.cs:198:24:198:25 | access to local variable o1 : String | Tuples.cs:185:22:185:23 | X2 : String | provenance | | +| Tuples.cs:198:24:198:25 | access to local variable o1 : String | Tuples.cs:185:22:185:23 | X2 : String | provenance | | +| Tuples.cs:198:24:198:25 | access to local variable o1 : String | Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property X2] : String | provenance | | +| Tuples.cs:198:24:198:25 | access to local variable o1 : String | Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property X2] : String | provenance | | +| Tuples.cs:198:28:198:29 | access to local variable o2 : String | Tuples.cs:185:33:185:34 | Y2 : String | provenance | | +| Tuples.cs:198:28:198:29 | access to local variable o2 : String | Tuples.cs:185:33:185:34 | Y2 : String | provenance | | +| Tuples.cs:198:28:198:29 | access to local variable o2 : String | Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property Y2] : String | provenance | | +| Tuples.cs:198:28:198:29 | access to local variable o2 : String | Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property Y2] : String | provenance | | +| Tuples.cs:200:22:200:22 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:201:14:201:14 | access to local variable x | provenance | | +| Tuples.cs:200:22:200:22 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:201:14:201:14 | access to local variable x | provenance | | +| Tuples.cs:200:22:200:22 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:202:14:202:14 | access to local variable y | provenance | | +| Tuples.cs:200:22:200:22 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:202:14:202:14 | access to local variable y | provenance | | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property X2] : String | Tuples.cs:187:21:187:31 | this : R3 [property X2] : String | provenance | | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property X2] : String | Tuples.cs:187:21:187:31 | this : R3 [property X2] : String | provenance | | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property X2] : String | Tuples.cs:200:22:200:22 | [deconstruct parameter 1] access to local variable r : String | provenance | | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property X2] : String | Tuples.cs:200:22:200:22 | [deconstruct parameter 1] access to local variable r : String | provenance | | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property Y2] : String | Tuples.cs:187:21:187:31 | this : R3 [property Y2] : String | provenance | | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property Y2] : String | Tuples.cs:187:21:187:31 | this : R3 [property Y2] : String | provenance | | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property Y2] : String | Tuples.cs:200:22:200:22 | [deconstruct parameter 0] access to local variable r : String | provenance | | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property Y2] : String | Tuples.cs:200:22:200:22 | [deconstruct parameter 0] access to local variable r : String | provenance | | +| Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | provenance | | +| Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | provenance | | +| Tuples.cs:205:33:205:34 | Y3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | provenance | | +| Tuples.cs:205:33:205:34 | Y3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | provenance | | +| Tuples.cs:209:13:209:14 | access to local variable o1 : String | Tuples.cs:211:24:211:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:209:13:209:14 | access to local variable o1 : String | Tuples.cs:211:24:211:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:209:18:209:35 | call to method Source : String | Tuples.cs:209:13:209:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:209:18:209:35 | call to method Source : String | Tuples.cs:209:13:209:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:210:13:210:14 | access to local variable o2 : String | Tuples.cs:211:28:211:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:210:13:210:14 | access to local variable o2 : String | Tuples.cs:211:28:211:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:210:18:210:35 | call to method Source : String | Tuples.cs:210:13:210:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:210:18:210:35 | call to method Source : String | Tuples.cs:210:13:210:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:211:13:211:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:213:9:213:9 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:211:13:211:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:213:9:213:9 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:211:13:211:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:213:9:213:9 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:211:13:211:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:213:9:213:9 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property X3] : String | Tuples.cs:211:13:211:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property X3] : String | Tuples.cs:211:13:211:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property Y3] : String | Tuples.cs:211:13:211:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property Y3] : String | Tuples.cs:211:13:211:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:211:24:211:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | provenance | | +| Tuples.cs:211:24:211:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | provenance | | +| Tuples.cs:211:24:211:25 | access to local variable o1 : String | Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property X3] : String | provenance | | +| Tuples.cs:211:24:211:25 | access to local variable o1 : String | Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property X3] : String | provenance | | +| Tuples.cs:211:28:211:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | provenance | | +| Tuples.cs:211:28:211:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | provenance | | +| Tuples.cs:211:28:211:29 | access to local variable o2 : String | Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property Y3] : String | provenance | | +| Tuples.cs:211:28:211:29 | access to local variable o2 : String | Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property Y3] : String | provenance | | +| Tuples.cs:213:9:213:9 | access to local variable r : R4 [property X3] : String | Tuples.cs:213:31:213:32 | String x3 : String | provenance | deconstruct | +| Tuples.cs:213:9:213:9 | access to local variable r : R4 [property X3] : String | Tuples.cs:213:31:213:32 | String x3 : String | provenance | deconstruct | +| Tuples.cs:213:9:213:9 | access to local variable r : R4 [property Y3] : String | Tuples.cs:213:43:213:44 | String y3 : String | provenance | deconstruct | +| Tuples.cs:213:9:213:9 | access to local variable r : R4 [property Y3] : String | Tuples.cs:213:43:213:44 | String y3 : String | provenance | deconstruct | +| Tuples.cs:213:31:213:32 | String x3 : String | Tuples.cs:214:14:214:15 | access to local variable x3 | provenance | | +| Tuples.cs:213:31:213:32 | String x3 : String | Tuples.cs:214:14:214:15 | access to local variable x3 | provenance | | +| Tuples.cs:213:43:213:44 | String y3 : String | Tuples.cs:215:14:215:15 | access to local variable y3 | provenance | | +| Tuples.cs:213:43:213:44 | String y3 : String | Tuples.cs:215:14:215:15 | access to local variable y3 | provenance | | +| Tuples.cs:220:13:220:14 | access to local variable o1 : String | Tuples.cs:222:24:222:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:220:13:220:14 | access to local variable o1 : String | Tuples.cs:222:24:222:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:220:18:220:35 | call to method Source : String | Tuples.cs:220:13:220:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:220:18:220:35 | call to method Source : String | Tuples.cs:220:13:220:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:221:13:221:14 | access to local variable o2 : String | Tuples.cs:222:28:222:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:221:13:221:14 | access to local variable o2 : String | Tuples.cs:222:28:222:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:221:18:221:35 | call to method Source : String | Tuples.cs:221:13:221:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:221:18:221:35 | call to method Source : String | Tuples.cs:221:13:221:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:222:13:222:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:225:18:225:18 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:222:13:222:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:225:18:225:18 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:222:13:222:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:225:18:225:18 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:222:13:222:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:225:18:225:18 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property X3] : String | Tuples.cs:222:13:222:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property X3] : String | Tuples.cs:222:13:222:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property Y3] : String | Tuples.cs:222:13:222:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property Y3] : String | Tuples.cs:222:13:222:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:222:24:222:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | provenance | | +| Tuples.cs:222:24:222:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | provenance | | +| Tuples.cs:222:24:222:25 | access to local variable o1 : String | Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property X3] : String | provenance | | +| Tuples.cs:222:24:222:25 | access to local variable o1 : String | Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property X3] : String | provenance | | +| Tuples.cs:222:28:222:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | provenance | | +| Tuples.cs:222:28:222:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | provenance | | +| Tuples.cs:222:28:222:29 | access to local variable o2 : String | Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property Y3] : String | provenance | | +| Tuples.cs:222:28:222:29 | access to local variable o2 : String | Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property Y3] : String | provenance | | +| Tuples.cs:225:10:225:10 | access to local variable x : String | Tuples.cs:226:14:226:14 | access to local variable x | provenance | | +| Tuples.cs:225:10:225:10 | access to local variable x : String | Tuples.cs:226:14:226:14 | access to local variable x | provenance | | +| Tuples.cs:225:13:225:13 | access to local variable y : String | Tuples.cs:227:14:227:14 | access to local variable y | provenance | | +| Tuples.cs:225:13:225:13 | access to local variable y : String | Tuples.cs:227:14:227:14 | access to local variable y | provenance | | +| Tuples.cs:225:18:225:18 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:225:10:225:10 | access to local variable x : String | provenance | | +| Tuples.cs:225:18:225:18 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:225:10:225:10 | access to local variable x : String | provenance | | +| Tuples.cs:225:18:225:18 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:225:13:225:13 | access to local variable y : String | provenance | | +| Tuples.cs:225:18:225:18 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:225:13:225:13 | access to local variable y : String | provenance | | +| Tuples.cs:225:18:225:18 | access to local variable r : R4 [property X3] : String | Tuples.cs:225:18:225:18 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:225:18:225:18 | access to local variable r : R4 [property X3] : String | Tuples.cs:225:18:225:18 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:225:18:225:18 | access to local variable r : R4 [property Y3] : String | Tuples.cs:225:18:225:18 | [deconstruct parameter 1] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:225:18:225:18 | access to local variable r : R4 [property Y3] : String | Tuples.cs:225:18:225:18 | [deconstruct parameter 1] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:232:13:232:14 | access to local variable o1 : String | Tuples.cs:234:24:234:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:232:13:232:14 | access to local variable o1 : String | Tuples.cs:234:24:234:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:232:18:232:35 | call to method Source : String | Tuples.cs:232:13:232:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:232:18:232:35 | call to method Source : String | Tuples.cs:232:13:232:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:234:13:234:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:236:26:236:26 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:234:13:234:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:236:26:236:26 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:234:17:234:30 | object creation of type R4 : R4 [property X3] : String | Tuples.cs:234:13:234:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:234:17:234:30 | object creation of type R4 : R4 [property X3] : String | Tuples.cs:234:13:234:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:234:24:234:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | provenance | | +| Tuples.cs:234:24:234:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | provenance | | +| Tuples.cs:234:24:234:25 | access to local variable o1 : String | Tuples.cs:234:17:234:30 | object creation of type R4 : R4 [property X3] : String | provenance | | +| Tuples.cs:234:24:234:25 | access to local variable o1 : String | Tuples.cs:234:17:234:30 | object creation of type R4 : R4 [property X3] : String | provenance | | +| Tuples.cs:236:26:236:26 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:237:14:237:14 | access to local variable x | provenance | | +| Tuples.cs:236:26:236:26 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:237:14:237:14 | access to local variable x | provenance | | +| Tuples.cs:236:26:236:26 | access to local variable r : R4 [property X3] : String | Tuples.cs:236:26:236:26 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:236:26:236:26 | access to local variable r : R4 [property X3] : String | Tuples.cs:236:26:236:26 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:242:13:242:14 | access to local variable o1 : String | Tuples.cs:244:24:244:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:242:13:242:14 | access to local variable o1 : String | Tuples.cs:244:24:244:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:242:18:242:35 | call to method Source : String | Tuples.cs:242:13:242:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:242:18:242:35 | call to method Source : String | Tuples.cs:242:13:242:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:243:13:243:14 | access to local variable o2 : String | Tuples.cs:244:28:244:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:243:13:243:14 | access to local variable o2 : String | Tuples.cs:244:28:244:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:243:18:243:35 | call to method Source : String | Tuples.cs:243:13:243:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:243:18:243:35 | call to method Source : String | Tuples.cs:243:13:243:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:244:13:244:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:246:13:246:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:244:13:244:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:246:13:246:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:244:13:244:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:246:13:246:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:244:13:244:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:246:13:246:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property X3] : String | Tuples.cs:244:13:244:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property X3] : String | Tuples.cs:244:13:244:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property Y3] : String | Tuples.cs:244:13:244:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property Y3] : String | Tuples.cs:244:13:244:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:244:24:244:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | provenance | | +| Tuples.cs:244:24:244:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | provenance | | +| Tuples.cs:244:24:244:25 | access to local variable o1 : String | Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property X3] : String | provenance | | +| Tuples.cs:244:24:244:25 | access to local variable o1 : String | Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property X3] : String | provenance | | +| Tuples.cs:244:28:244:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | provenance | | +| Tuples.cs:244:28:244:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | provenance | | +| Tuples.cs:244:28:244:29 | access to local variable o2 : String | Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property Y3] : String | provenance | | +| Tuples.cs:244:28:244:29 | access to local variable o2 : String | Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property Y3] : String | provenance | | +| Tuples.cs:246:13:246:13 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:248:18:248:18 | access to local variable x | provenance | | +| Tuples.cs:246:13:246:13 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:248:18:248:18 | access to local variable x | provenance | | +| Tuples.cs:246:13:246:13 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:249:18:249:18 | access to local variable y | provenance | | +| Tuples.cs:246:13:246:13 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:249:18:249:18 | access to local variable y | provenance | | +| Tuples.cs:246:13:246:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:246:13:246:13 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:246:13:246:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:246:13:246:13 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:246:13:246:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:246:13:246:13 | [deconstruct parameter 1] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:246:13:246:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:246:13:246:13 | [deconstruct parameter 1] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:255:13:255:14 | access to local variable o1 : String | Tuples.cs:257:24:257:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:255:13:255:14 | access to local variable o1 : String | Tuples.cs:257:24:257:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:255:18:255:35 | call to method Source : String | Tuples.cs:255:13:255:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:255:18:255:35 | call to method Source : String | Tuples.cs:255:13:255:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:256:13:256:14 | access to local variable o2 : String | Tuples.cs:257:28:257:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:256:13:256:14 | access to local variable o2 : String | Tuples.cs:257:28:257:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:256:18:256:35 | call to method Source : String | Tuples.cs:256:13:256:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:256:18:256:35 | call to method Source : String | Tuples.cs:256:13:256:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:257:13:257:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:259:13:259:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:257:13:257:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:259:13:259:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:257:13:257:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:259:13:259:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:257:13:257:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:259:13:259:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property X3] : String | Tuples.cs:257:13:257:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property X3] : String | Tuples.cs:257:13:257:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property Y3] : String | Tuples.cs:257:13:257:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property Y3] : String | Tuples.cs:257:13:257:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:257:24:257:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | provenance | | +| Tuples.cs:257:24:257:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | provenance | | +| Tuples.cs:257:24:257:25 | access to local variable o1 : String | Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property X3] : String | provenance | | +| Tuples.cs:257:24:257:25 | access to local variable o1 : String | Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property X3] : String | provenance | | +| Tuples.cs:257:28:257:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | provenance | | +| Tuples.cs:257:28:257:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | provenance | | +| Tuples.cs:257:28:257:29 | access to local variable o2 : String | Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property Y3] : String | provenance | | +| Tuples.cs:257:28:257:29 | access to local variable o2 : String | Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property Y3] : String | provenance | | +| Tuples.cs:259:13:259:13 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:261:18:261:18 | access to local variable x | provenance | | +| Tuples.cs:259:13:259:13 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:261:18:261:18 | access to local variable x | provenance | | +| Tuples.cs:259:13:259:13 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:262:18:262:18 | access to local variable y | provenance | | +| Tuples.cs:259:13:259:13 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:262:18:262:18 | access to local variable y | provenance | | +| Tuples.cs:259:13:259:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:259:13:259:13 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:259:13:259:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:259:13:259:13 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:259:13:259:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:259:13:259:13 | [deconstruct parameter 1] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:259:13:259:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:259:13:259:13 | [deconstruct parameter 1] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:268:13:268:14 | access to local variable o1 : String | Tuples.cs:270:24:270:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:268:13:268:14 | access to local variable o1 : String | Tuples.cs:270:24:270:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:268:18:268:35 | call to method Source : String | Tuples.cs:268:13:268:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:268:18:268:35 | call to method Source : String | Tuples.cs:268:13:268:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:269:13:269:14 | access to local variable o2 : String | Tuples.cs:270:28:270:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:269:13:269:14 | access to local variable o2 : String | Tuples.cs:270:28:270:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:269:18:269:35 | call to method Source : String | Tuples.cs:269:13:269:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:269:18:269:35 | call to method Source : String | Tuples.cs:269:13:269:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:270:13:270:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:272:17:272:17 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:270:13:270:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:272:17:272:17 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:270:13:270:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:272:17:272:17 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:270:13:270:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:272:17:272:17 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property X3] : String | Tuples.cs:270:13:270:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property X3] : String | Tuples.cs:270:13:270:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property Y3] : String | Tuples.cs:270:13:270:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property Y3] : String | Tuples.cs:270:13:270:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:270:24:270:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | provenance | | +| Tuples.cs:270:24:270:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | provenance | | +| Tuples.cs:270:24:270:25 | access to local variable o1 : String | Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property X3] : String | provenance | | +| Tuples.cs:270:24:270:25 | access to local variable o1 : String | Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property X3] : String | provenance | | +| Tuples.cs:270:28:270:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | provenance | | +| Tuples.cs:270:28:270:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | provenance | | +| Tuples.cs:270:28:270:29 | access to local variable o2 : String | Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property Y3] : String | provenance | | +| Tuples.cs:270:28:270:29 | access to local variable o2 : String | Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property Y3] : String | provenance | | +| Tuples.cs:272:17:272:17 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:276:22:276:22 | access to local variable x | provenance | | +| Tuples.cs:272:17:272:17 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:276:22:276:22 | access to local variable x | provenance | | +| Tuples.cs:272:17:272:17 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:277:22:277:22 | access to local variable y | provenance | | +| Tuples.cs:272:17:272:17 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:277:22:277:22 | access to local variable y | provenance | | +| Tuples.cs:272:17:272:17 | access to local variable r : R4 [property X3] : String | Tuples.cs:272:17:272:17 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:272:17:272:17 | access to local variable r : R4 [property X3] : String | Tuples.cs:272:17:272:17 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:272:17:272:17 | access to local variable r : R4 [property Y3] : String | Tuples.cs:272:17:272:17 | [deconstruct parameter 1] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:272:17:272:17 | access to local variable r : R4 [property Y3] : String | Tuples.cs:272:17:272:17 | [deconstruct parameter 1] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:284:13:284:14 | access to local variable o1 : String | Tuples.cs:286:24:286:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:284:13:284:14 | access to local variable o1 : String | Tuples.cs:286:24:286:25 | access to local variable o1 : String | provenance | | +| Tuples.cs:284:18:284:35 | call to method Source : String | Tuples.cs:284:13:284:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:284:18:284:35 | call to method Source : String | Tuples.cs:284:13:284:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:285:13:285:14 | access to local variable o2 : String | Tuples.cs:286:28:286:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:285:13:285:14 | access to local variable o2 : String | Tuples.cs:286:28:286:29 | access to local variable o2 : String | provenance | | +| Tuples.cs:285:18:285:35 | call to method Source : String | Tuples.cs:285:13:285:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:285:18:285:35 | call to method Source : String | Tuples.cs:285:13:285:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:286:13:286:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:288:17:288:17 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:286:13:286:13 | access to local variable r : R4 [property X3] : String | Tuples.cs:288:17:288:17 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:286:13:286:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:288:17:288:17 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:286:13:286:13 | access to local variable r : R4 [property Y3] : String | Tuples.cs:288:17:288:17 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property X3] : String | Tuples.cs:286:13:286:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property X3] : String | Tuples.cs:286:13:286:13 | access to local variable r : R4 [property X3] : String | provenance | | +| Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property Y3] : String | Tuples.cs:286:13:286:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property Y3] : String | Tuples.cs:286:13:286:13 | access to local variable r : R4 [property Y3] : String | provenance | | +| Tuples.cs:286:24:286:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | provenance | | +| Tuples.cs:286:24:286:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | provenance | | +| Tuples.cs:286:24:286:25 | access to local variable o1 : String | Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property X3] : String | provenance | | +| Tuples.cs:286:24:286:25 | access to local variable o1 : String | Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property X3] : String | provenance | | +| Tuples.cs:286:28:286:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | provenance | | +| Tuples.cs:286:28:286:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | provenance | | +| Tuples.cs:286:28:286:29 | access to local variable o2 : String | Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property Y3] : String | provenance | | +| Tuples.cs:286:28:286:29 | access to local variable o2 : String | Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property Y3] : String | provenance | | +| Tuples.cs:288:17:288:17 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:291:22:291:22 | access to local variable x | provenance | | +| Tuples.cs:288:17:288:17 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:291:22:291:22 | access to local variable x | provenance | | +| Tuples.cs:288:17:288:17 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:292:22:292:22 | access to local variable y | provenance | | +| Tuples.cs:288:17:288:17 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:292:22:292:22 | access to local variable y | provenance | | +| Tuples.cs:288:17:288:17 | access to local variable r : R4 [property X3] : String | Tuples.cs:288:17:288:17 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:288:17:288:17 | access to local variable r : R4 [property X3] : String | Tuples.cs:288:17:288:17 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:288:17:288:17 | access to local variable r : R4 [property Y3] : String | Tuples.cs:288:17:288:17 | [deconstruct parameter 1] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:288:17:288:17 | access to local variable r : R4 [property Y3] : String | Tuples.cs:288:17:288:17 | [deconstruct parameter 1] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:302:25:302:25 | x : String | Tuples.cs:304:22:304:22 | access to parameter x : String | provenance | | +| Tuples.cs:302:25:302:25 | x : String | Tuples.cs:304:22:304:22 | access to parameter x : String | provenance | | +| Tuples.cs:302:35:302:35 | y : String | Tuples.cs:305:22:305:22 | access to parameter y : String | provenance | | +| Tuples.cs:302:35:302:35 | y : String | Tuples.cs:305:22:305:22 | access to parameter y : String | provenance | | +| Tuples.cs:304:13:304:16 | [post] this access : C [field x] : String | Tuples.cs:302:16:302:16 | this [Return] : C [field x] : String | provenance | | +| Tuples.cs:304:13:304:16 | [post] this access : C [field x] : String | Tuples.cs:302:16:302:16 | this [Return] : C [field x] : String | provenance | | +| Tuples.cs:304:22:304:22 | access to parameter x : String | Tuples.cs:304:13:304:16 | [post] this access : C [field x] : String | provenance | | +| Tuples.cs:304:22:304:22 | access to parameter x : String | Tuples.cs:304:13:304:16 | [post] this access : C [field x] : String | provenance | | +| Tuples.cs:305:13:305:16 | [post] this access : C [field y] : String | Tuples.cs:302:16:302:16 | this [Return] : C [field y] : String | provenance | | +| Tuples.cs:305:13:305:16 | [post] this access : C [field y] : String | Tuples.cs:302:16:302:16 | this [Return] : C [field y] : String | provenance | | +| Tuples.cs:305:22:305:22 | access to parameter y : String | Tuples.cs:305:13:305:16 | [post] this access : C [field y] : String | provenance | | +| Tuples.cs:305:22:305:22 | access to parameter y : String | Tuples.cs:305:13:305:16 | [post] this access : C [field y] : String | provenance | | +| Tuples.cs:308:21:308:31 | this : C [field x] : String | Tuples.cs:310:17:310:20 | this access : C [field x] : String | provenance | | +| Tuples.cs:308:21:308:31 | this : C [field x] : String | Tuples.cs:310:17:310:20 | this access : C [field x] : String | provenance | | +| Tuples.cs:308:21:308:31 | this : C [field y] : String | Tuples.cs:311:17:311:20 | this access : C [field y] : String | provenance | | +| Tuples.cs:308:21:308:31 | this : C [field y] : String | Tuples.cs:311:17:311:20 | this access : C [field y] : String | provenance | | +| Tuples.cs:310:17:310:20 | this access : C [field x] : String | Tuples.cs:310:17:310:22 | access to field x : String | provenance | | +| Tuples.cs:310:17:310:20 | this access : C [field x] : String | Tuples.cs:310:17:310:22 | access to field x : String | provenance | | +| Tuples.cs:310:17:310:22 | access to field x : String | Tuples.cs:310:13:310:13 | access to parameter x : String | provenance | | +| Tuples.cs:310:17:310:22 | access to field x : String | Tuples.cs:310:13:310:13 | access to parameter x : String | provenance | | +| Tuples.cs:311:17:311:20 | this access : C [field y] : String | Tuples.cs:311:17:311:22 | access to field y : String | provenance | | +| Tuples.cs:311:17:311:20 | this access : C [field y] : String | Tuples.cs:311:17:311:22 | access to field y : String | provenance | | +| Tuples.cs:311:17:311:22 | access to field y : String | Tuples.cs:311:13:311:13 | access to parameter y : String | provenance | | +| Tuples.cs:311:17:311:22 | access to field y : String | Tuples.cs:311:13:311:13 | access to parameter y : String | provenance | | +| Tuples.cs:317:13:317:14 | access to local variable o1 : String | Tuples.cs:319:23:319:24 | access to local variable o1 : String | provenance | | +| Tuples.cs:317:13:317:14 | access to local variable o1 : String | Tuples.cs:319:23:319:24 | access to local variable o1 : String | provenance | | +| Tuples.cs:317:18:317:35 | call to method Source : String | Tuples.cs:317:13:317:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:317:18:317:35 | call to method Source : String | Tuples.cs:317:13:317:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:318:13:318:14 | access to local variable o2 : String | Tuples.cs:319:27:319:28 | access to local variable o2 : String | provenance | | +| Tuples.cs:318:13:318:14 | access to local variable o2 : String | Tuples.cs:319:27:319:28 | access to local variable o2 : String | provenance | | +| Tuples.cs:318:18:318:35 | call to method Source : String | Tuples.cs:318:13:318:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:318:18:318:35 | call to method Source : String | Tuples.cs:318:13:318:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:319:13:319:13 | access to local variable c : C [field x] : String | Tuples.cs:321:22:321:22 | access to local variable c : C [field x] : String | provenance | | +| Tuples.cs:319:13:319:13 | access to local variable c : C [field x] : String | Tuples.cs:321:22:321:22 | access to local variable c : C [field x] : String | provenance | | +| Tuples.cs:319:13:319:13 | access to local variable c : C [field y] : String | Tuples.cs:321:22:321:22 | access to local variable c : C [field y] : String | provenance | | +| Tuples.cs:319:13:319:13 | access to local variable c : C [field y] : String | Tuples.cs:321:22:321:22 | access to local variable c : C [field y] : String | provenance | | +| Tuples.cs:319:17:319:29 | object creation of type C : C [field x] : String | Tuples.cs:319:13:319:13 | access to local variable c : C [field x] : String | provenance | | +| Tuples.cs:319:17:319:29 | object creation of type C : C [field x] : String | Tuples.cs:319:13:319:13 | access to local variable c : C [field x] : String | provenance | | +| Tuples.cs:319:17:319:29 | object creation of type C : C [field y] : String | Tuples.cs:319:13:319:13 | access to local variable c : C [field y] : String | provenance | | +| Tuples.cs:319:17:319:29 | object creation of type C : C [field y] : String | Tuples.cs:319:13:319:13 | access to local variable c : C [field y] : String | provenance | | +| Tuples.cs:319:23:319:24 | access to local variable o1 : String | Tuples.cs:302:25:302:25 | x : String | provenance | | +| Tuples.cs:319:23:319:24 | access to local variable o1 : String | Tuples.cs:302:25:302:25 | x : String | provenance | | +| Tuples.cs:319:23:319:24 | access to local variable o1 : String | Tuples.cs:319:17:319:29 | object creation of type C : C [field x] : String | provenance | | +| Tuples.cs:319:23:319:24 | access to local variable o1 : String | Tuples.cs:319:17:319:29 | object creation of type C : C [field x] : String | provenance | | +| Tuples.cs:319:27:319:28 | access to local variable o2 : String | Tuples.cs:302:35:302:35 | y : String | provenance | | +| Tuples.cs:319:27:319:28 | access to local variable o2 : String | Tuples.cs:302:35:302:35 | y : String | provenance | | +| Tuples.cs:319:27:319:28 | access to local variable o2 : String | Tuples.cs:319:17:319:29 | object creation of type C : C [field y] : String | provenance | | +| Tuples.cs:319:27:319:28 | access to local variable o2 : String | Tuples.cs:319:17:319:29 | object creation of type C : C [field y] : String | provenance | | +| Tuples.cs:321:22:321:22 | [deconstruct parameter 0] access to local variable c : String | Tuples.cs:322:14:322:14 | access to local variable x | provenance | | +| Tuples.cs:321:22:321:22 | [deconstruct parameter 0] access to local variable c : String | Tuples.cs:322:14:322:14 | access to local variable x | provenance | | +| Tuples.cs:321:22:321:22 | [deconstruct parameter 1] access to local variable c : String | Tuples.cs:323:14:323:14 | access to local variable y | provenance | | +| Tuples.cs:321:22:321:22 | [deconstruct parameter 1] access to local variable c : String | Tuples.cs:323:14:323:14 | access to local variable y | provenance | | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field x] : String | Tuples.cs:308:21:308:31 | this : C [field x] : String | provenance | | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field x] : String | Tuples.cs:308:21:308:31 | this : C [field x] : String | provenance | | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field x] : String | Tuples.cs:321:22:321:22 | [deconstruct parameter 0] access to local variable c : String | provenance | | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field x] : String | Tuples.cs:321:22:321:22 | [deconstruct parameter 0] access to local variable c : String | provenance | | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field y] : String | Tuples.cs:308:21:308:31 | this : C [field y] : String | provenance | | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field y] : String | Tuples.cs:308:21:308:31 | this : C [field y] : String | provenance | | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field y] : String | Tuples.cs:321:22:321:22 | [deconstruct parameter 1] access to local variable c : String | provenance | | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field y] : String | Tuples.cs:321:22:321:22 | [deconstruct parameter 1] access to local variable c : String | provenance | | +| Tuples.cs:326:44:326:45 | t1 : String | Tuples.cs:326:19:326:31 | this [Return] : Tuples+GenericRecord [property t1] : String | provenance | | +| Tuples.cs:326:44:326:45 | t1 : String | Tuples.cs:326:19:326:31 | this [Return] : Tuples+GenericRecord [property t1] : String | provenance | | +| Tuples.cs:326:51:326:52 | t2 : String | Tuples.cs:326:19:326:31 | this [Return] : Tuples+GenericRecord [property t2] : String | provenance | | +| Tuples.cs:326:51:326:52 | t2 : String | Tuples.cs:326:19:326:31 | this [Return] : Tuples+GenericRecord [property t2] : String | provenance | | +| Tuples.cs:330:13:330:14 | access to local variable o1 : String | Tuples.cs:332:51:332:52 | access to local variable o1 : String | provenance | | +| Tuples.cs:330:13:330:14 | access to local variable o1 : String | Tuples.cs:332:51:332:52 | access to local variable o1 : String | provenance | | +| Tuples.cs:330:18:330:35 | call to method Source : String | Tuples.cs:330:13:330:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:330:18:330:35 | call to method Source : String | Tuples.cs:330:13:330:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:331:13:331:14 | access to local variable o2 : String | Tuples.cs:332:55:332:56 | access to local variable o2 : String | provenance | | +| Tuples.cs:331:13:331:14 | access to local variable o2 : String | Tuples.cs:332:55:332:56 | access to local variable o2 : String | provenance | | +| Tuples.cs:331:18:331:35 | call to method Source : String | Tuples.cs:331:13:331:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:331:18:331:35 | call to method Source : String | Tuples.cs:331:13:331:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:332:13:332:13 | access to local variable r : Tuples+GenericRecord [property t1] : String | Tuples.cs:334:22:334:22 | access to local variable r : Tuples+GenericRecord [property t1] : String | provenance | | +| Tuples.cs:332:13:332:13 | access to local variable r : Tuples+GenericRecord [property t1] : String | Tuples.cs:334:22:334:22 | access to local variable r : Tuples+GenericRecord [property t1] : String | provenance | | +| Tuples.cs:332:13:332:13 | access to local variable r : Tuples+GenericRecord [property t2] : String | Tuples.cs:334:22:334:22 | access to local variable r : Tuples+GenericRecord [property t2] : String | provenance | | +| Tuples.cs:332:13:332:13 | access to local variable r : Tuples+GenericRecord [property t2] : String | Tuples.cs:334:22:334:22 | access to local variable r : Tuples+GenericRecord [property t2] : String | provenance | | +| Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t1] : String | Tuples.cs:332:13:332:13 | access to local variable r : Tuples+GenericRecord [property t1] : String | provenance | | +| Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t1] : String | Tuples.cs:332:13:332:13 | access to local variable r : Tuples+GenericRecord [property t1] : String | provenance | | +| Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t2] : String | Tuples.cs:332:13:332:13 | access to local variable r : Tuples+GenericRecord [property t2] : String | provenance | | +| Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t2] : String | Tuples.cs:332:13:332:13 | access to local variable r : Tuples+GenericRecord [property t2] : String | provenance | | +| Tuples.cs:332:51:332:52 | access to local variable o1 : String | Tuples.cs:326:44:326:45 | t1 : String | provenance | | +| Tuples.cs:332:51:332:52 | access to local variable o1 : String | Tuples.cs:326:44:326:45 | t1 : String | provenance | | +| Tuples.cs:332:51:332:52 | access to local variable o1 : String | Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t1] : String | provenance | | +| Tuples.cs:332:51:332:52 | access to local variable o1 : String | Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t1] : String | provenance | | +| Tuples.cs:332:55:332:56 | access to local variable o2 : String | Tuples.cs:326:51:326:52 | t2 : String | provenance | | +| Tuples.cs:332:55:332:56 | access to local variable o2 : String | Tuples.cs:326:51:326:52 | t2 : String | provenance | | +| Tuples.cs:332:55:332:56 | access to local variable o2 : String | Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t2] : String | provenance | | +| Tuples.cs:332:55:332:56 | access to local variable o2 : String | Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t2] : String | provenance | | +| Tuples.cs:334:22:334:22 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:335:14:335:14 | access to local variable x | provenance | | +| Tuples.cs:334:22:334:22 | [deconstruct parameter 0] access to local variable r : String | Tuples.cs:335:14:335:14 | access to local variable x | provenance | | +| Tuples.cs:334:22:334:22 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:336:14:336:14 | access to local variable y | provenance | | +| Tuples.cs:334:22:334:22 | [deconstruct parameter 1] access to local variable r : String | Tuples.cs:336:14:336:14 | access to local variable y | provenance | | +| Tuples.cs:334:22:334:22 | access to local variable r : Tuples+GenericRecord [property t1] : String | Tuples.cs:334:22:334:22 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:334:22:334:22 | access to local variable r : Tuples+GenericRecord [property t1] : String | Tuples.cs:334:22:334:22 | [deconstruct parameter 0] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:334:22:334:22 | access to local variable r : Tuples+GenericRecord [property t2] : String | Tuples.cs:334:22:334:22 | [deconstruct parameter 1] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:334:22:334:22 | access to local variable r : Tuples+GenericRecord [property t2] : String | Tuples.cs:334:22:334:22 | [deconstruct parameter 1] access to local variable r : String | provenance | deconstruct | +| Tuples.cs:343:21:343:31 | this : E [field X] : String | Tuples.cs:345:17:345:17 | this access : E [field X] : String | provenance | | +| Tuples.cs:343:21:343:31 | this : E [field X] : String | Tuples.cs:345:17:345:17 | this access : E [field X] : String | provenance | | +| Tuples.cs:343:21:343:31 | this : E [field Y] : String | Tuples.cs:346:17:346:17 | this access : E [field Y] : String | provenance | | +| Tuples.cs:343:21:343:31 | this : E [field Y] : String | Tuples.cs:346:17:346:17 | this access : E [field Y] : String | provenance | | +| Tuples.cs:345:17:345:17 | access to field X : String | Tuples.cs:345:13:345:13 | access to parameter x : String | provenance | | +| Tuples.cs:345:17:345:17 | access to field X : String | Tuples.cs:345:13:345:13 | access to parameter x : String | provenance | | +| Tuples.cs:345:17:345:17 | this access : E [field X] : String | Tuples.cs:345:17:345:17 | access to field X : String | provenance | | +| Tuples.cs:345:17:345:17 | this access : E [field X] : String | Tuples.cs:345:17:345:17 | access to field X : String | provenance | | +| Tuples.cs:346:17:346:17 | access to field Y : String | Tuples.cs:346:13:346:13 | access to parameter y : String | provenance | | +| Tuples.cs:346:17:346:17 | access to field Y : String | Tuples.cs:346:13:346:13 | access to parameter y : String | provenance | | +| Tuples.cs:346:17:346:17 | this access : E [field Y] : String | Tuples.cs:346:17:346:17 | access to field Y : String | provenance | | +| Tuples.cs:346:17:346:17 | this access : E [field Y] : String | Tuples.cs:346:17:346:17 | access to field Y : String | provenance | | +| Tuples.cs:354:13:354:14 | access to local variable o1 : String | Tuples.cs:356:29:356:30 | access to local variable o1 : String | provenance | | +| Tuples.cs:354:13:354:14 | access to local variable o1 : String | Tuples.cs:356:29:356:30 | access to local variable o1 : String | provenance | | +| Tuples.cs:354:18:354:35 | call to method Source : String | Tuples.cs:354:13:354:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:354:18:354:35 | call to method Source : String | Tuples.cs:354:13:354:14 | access to local variable o1 : String | provenance | | +| Tuples.cs:355:13:355:14 | access to local variable o2 : String | Tuples.cs:356:37:356:38 | access to local variable o2 : String | provenance | | +| Tuples.cs:355:13:355:14 | access to local variable o2 : String | Tuples.cs:356:37:356:38 | access to local variable o2 : String | provenance | | +| Tuples.cs:355:18:355:35 | call to method Source : String | Tuples.cs:355:13:355:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:355:18:355:35 | call to method Source : String | Tuples.cs:355:13:355:14 | access to local variable o2 : String | provenance | | +| Tuples.cs:356:13:356:13 | access to local variable e : E [field X] : String | Tuples.cs:359:22:359:22 | access to local variable e : E [field X] : String | provenance | | +| Tuples.cs:356:13:356:13 | access to local variable e : E [field X] : String | Tuples.cs:359:22:359:22 | access to local variable e : E [field X] : String | provenance | | +| Tuples.cs:356:13:356:13 | access to local variable e : E [field Y] : String | Tuples.cs:359:22:359:22 | access to local variable e : E [field Y] : String | provenance | | +| Tuples.cs:356:13:356:13 | access to local variable e : E [field Y] : String | Tuples.cs:359:22:359:22 | access to local variable e : E [field Y] : String | provenance | | +| Tuples.cs:356:23:356:40 | { ..., ... } : E [field X] : String | Tuples.cs:356:13:356:13 | access to local variable e : E [field X] : String | provenance | | +| Tuples.cs:356:23:356:40 | { ..., ... } : E [field X] : String | Tuples.cs:356:13:356:13 | access to local variable e : E [field X] : String | provenance | | +| Tuples.cs:356:23:356:40 | { ..., ... } : E [field Y] : String | Tuples.cs:356:13:356:13 | access to local variable e : E [field Y] : String | provenance | | +| Tuples.cs:356:23:356:40 | { ..., ... } : E [field Y] : String | Tuples.cs:356:13:356:13 | access to local variable e : E [field Y] : String | provenance | | +| Tuples.cs:356:29:356:30 | access to local variable o1 : String | Tuples.cs:356:23:356:40 | { ..., ... } : E [field X] : String | provenance | | +| Tuples.cs:356:29:356:30 | access to local variable o1 : String | Tuples.cs:356:23:356:40 | { ..., ... } : E [field X] : String | provenance | | +| Tuples.cs:356:37:356:38 | access to local variable o2 : String | Tuples.cs:356:23:356:40 | { ..., ... } : E [field Y] : String | provenance | | +| Tuples.cs:356:37:356:38 | access to local variable o2 : String | Tuples.cs:356:23:356:40 | { ..., ... } : E [field Y] : String | provenance | | +| Tuples.cs:359:22:359:22 | [deconstruct parameter 0] access to local variable e : String | Tuples.cs:360:14:360:14 | access to local variable x | provenance | | +| Tuples.cs:359:22:359:22 | [deconstruct parameter 0] access to local variable e : String | Tuples.cs:360:14:360:14 | access to local variable x | provenance | | +| Tuples.cs:359:22:359:22 | [deconstruct parameter 1] access to local variable e : String | Tuples.cs:361:14:361:14 | access to local variable y | provenance | | +| Tuples.cs:359:22:359:22 | [deconstruct parameter 1] access to local variable e : String | Tuples.cs:361:14:361:14 | access to local variable y | provenance | | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field X] : String | Tuples.cs:343:21:343:31 | this : E [field X] : String | provenance | | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field X] : String | Tuples.cs:343:21:343:31 | this : E [field X] : String | provenance | | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field X] : String | Tuples.cs:359:22:359:22 | [deconstruct parameter 0] access to local variable e : String | provenance | | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field X] : String | Tuples.cs:359:22:359:22 | [deconstruct parameter 0] access to local variable e : String | provenance | | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field Y] : String | Tuples.cs:343:21:343:31 | this : E [field Y] : String | provenance | | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field Y] : String | Tuples.cs:343:21:343:31 | this : E [field Y] : String | provenance | | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field Y] : String | Tuples.cs:359:22:359:22 | [deconstruct parameter 1] access to local variable e : String | provenance | | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field Y] : String | Tuples.cs:359:22:359:22 | [deconstruct parameter 1] access to local variable e : String | provenance | | nodes | Tuples.cs:7:13:7:14 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | | Tuples.cs:7:13:7:14 | access to local variable o1 : Object | semmle.label | access to local variable o1 : Object | @@ -483,6 +939,18 @@ nodes | Tuples.cs:101:14:101:14 | access to local variable r : R1 [property i] : String | semmle.label | access to local variable r : R1 [property i] : String | | Tuples.cs:101:14:101:16 | access to property i | semmle.label | access to property i | | Tuples.cs:101:14:101:16 | access to property i | semmle.label | access to property i | +| Tuples.cs:103:22:103:22 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:103:22:103:22 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:103:22:103:22 | access to local variable r : R1 [property i] : String | semmle.label | access to local variable r : R1 [property i] : String | +| Tuples.cs:103:22:103:22 | access to local variable r : R1 [property i] : String | semmle.label | access to local variable r : R1 [property i] : String | +| Tuples.cs:104:14:104:14 | access to local variable a | semmle.label | access to local variable a | +| Tuples.cs:104:14:104:14 | access to local variable a | semmle.label | access to local variable a | +| Tuples.cs:107:17:107:17 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:107:17:107:17 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:107:17:107:17 | access to local variable r : R1 [property i] : String | semmle.label | access to local variable r : R1 [property i] : String | +| Tuples.cs:107:17:107:17 | access to local variable r : R1 [property i] : String | semmle.label | access to local variable r : R1 [property i] : String | +| Tuples.cs:110:22:110:22 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:110:22:110:22 | access to local variable x | semmle.label | access to local variable x | | Tuples.cs:118:13:118:13 | access to local variable o : Object | semmle.label | access to local variable o : Object | | Tuples.cs:118:13:118:13 | access to local variable o : Object | semmle.label | access to local variable o : Object | | Tuples.cs:118:17:118:33 | call to method Source : Object | semmle.label | call to method Source : Object | @@ -619,9 +1087,531 @@ nodes | Tuples.cs:167:18:167:18 | access to local variable t : ValueTuple [field Item2] : String | semmle.label | access to local variable t : ValueTuple [field Item2] : String | | Tuples.cs:167:18:167:24 | access to field Item2 | semmle.label | access to field Item2 | | Tuples.cs:167:18:167:24 | access to field Item2 | semmle.label | access to field Item2 | +| Tuples.cs:172:12:172:13 | this [Return] : R2 [property X1] : String | semmle.label | this [Return] : R2 [property X1] : String | +| Tuples.cs:172:12:172:13 | this [Return] : R2 [property X1] : String | semmle.label | this [Return] : R2 [property X1] : String | +| Tuples.cs:172:12:172:13 | this [Return] : R2 [property Y1] : String | semmle.label | this [Return] : R2 [property Y1] : String | +| Tuples.cs:172:12:172:13 | this [Return] : R2 [property Y1] : String | semmle.label | this [Return] : R2 [property Y1] : String | +| Tuples.cs:172:22:172:23 | X1 : String | semmle.label | X1 : String | +| Tuples.cs:172:22:172:23 | X1 : String | semmle.label | X1 : String | +| Tuples.cs:172:33:172:34 | Y1 : String | semmle.label | Y1 : String | +| Tuples.cs:172:33:172:34 | Y1 : String | semmle.label | Y1 : String | +| Tuples.cs:176:13:176:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:176:13:176:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:176:18:176:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:176:18:176:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:177:13:177:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:177:13:177:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:177:18:177:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:177:18:177:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:178:13:178:13 | access to local variable r : R2 [property X1] : String | semmle.label | access to local variable r : R2 [property X1] : String | +| Tuples.cs:178:13:178:13 | access to local variable r : R2 [property X1] : String | semmle.label | access to local variable r : R2 [property X1] : String | +| Tuples.cs:178:13:178:13 | access to local variable r : R2 [property Y1] : String | semmle.label | access to local variable r : R2 [property Y1] : String | +| Tuples.cs:178:13:178:13 | access to local variable r : R2 [property Y1] : String | semmle.label | access to local variable r : R2 [property Y1] : String | +| Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property X1] : String | semmle.label | object creation of type R2 : R2 [property X1] : String | +| Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property X1] : String | semmle.label | object creation of type R2 : R2 [property X1] : String | +| Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property Y1] : String | semmle.label | object creation of type R2 : R2 [property Y1] : String | +| Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property Y1] : String | semmle.label | object creation of type R2 : R2 [property Y1] : String | +| Tuples.cs:178:24:178:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:178:24:178:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:178:28:178:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:178:28:178:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:180:24:180:24 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:180:24:180:24 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:180:24:180:24 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:180:24:180:24 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:180:24:180:24 | access to local variable r : R2 [property X1] : String | semmle.label | access to local variable r : R2 [property X1] : String | +| Tuples.cs:180:24:180:24 | access to local variable r : R2 [property X1] : String | semmle.label | access to local variable r : R2 [property X1] : String | +| Tuples.cs:180:24:180:24 | access to local variable r : R2 [property Y1] : String | semmle.label | access to local variable r : R2 [property Y1] : String | +| Tuples.cs:180:24:180:24 | access to local variable r : R2 [property Y1] : String | semmle.label | access to local variable r : R2 [property Y1] : String | +| Tuples.cs:181:14:181:15 | access to local variable x1 | semmle.label | access to local variable x1 | +| Tuples.cs:181:14:181:15 | access to local variable x1 | semmle.label | access to local variable x1 | +| Tuples.cs:182:14:182:15 | access to local variable y1 | semmle.label | access to local variable y1 | +| Tuples.cs:182:14:182:15 | access to local variable y1 | semmle.label | access to local variable y1 | +| Tuples.cs:185:12:185:13 | this [Return] : R3 [property X2] : String | semmle.label | this [Return] : R3 [property X2] : String | +| Tuples.cs:185:12:185:13 | this [Return] : R3 [property X2] : String | semmle.label | this [Return] : R3 [property X2] : String | +| Tuples.cs:185:12:185:13 | this [Return] : R3 [property Y2] : String | semmle.label | this [Return] : R3 [property Y2] : String | +| Tuples.cs:185:12:185:13 | this [Return] : R3 [property Y2] : String | semmle.label | this [Return] : R3 [property Y2] : String | +| Tuples.cs:185:22:185:23 | X2 : String | semmle.label | X2 : String | +| Tuples.cs:185:22:185:23 | X2 : String | semmle.label | X2 : String | +| Tuples.cs:185:33:185:34 | Y2 : String | semmle.label | Y2 : String | +| Tuples.cs:185:33:185:34 | Y2 : String | semmle.label | Y2 : String | +| Tuples.cs:187:21:187:31 | this : R3 [property X2] : String | semmle.label | this : R3 [property X2] : String | +| Tuples.cs:187:21:187:31 | this : R3 [property X2] : String | semmle.label | this : R3 [property X2] : String | +| Tuples.cs:187:21:187:31 | this : R3 [property Y2] : String | semmle.label | this : R3 [property Y2] : String | +| Tuples.cs:187:21:187:31 | this : R3 [property Y2] : String | semmle.label | this : R3 [property Y2] : String | +| Tuples.cs:189:13:189:14 | access to parameter x2 : String | semmle.label | access to parameter x2 : String | +| Tuples.cs:189:13:189:14 | access to parameter x2 : String | semmle.label | access to parameter x2 : String | +| Tuples.cs:189:18:189:19 | access to property X2 : String | semmle.label | access to property X2 : String | +| Tuples.cs:189:18:189:19 | access to property X2 : String | semmle.label | access to property X2 : String | +| Tuples.cs:189:18:189:19 | this access : R3 [property X2] : String | semmle.label | this access : R3 [property X2] : String | +| Tuples.cs:189:18:189:19 | this access : R3 [property X2] : String | semmle.label | this access : R3 [property X2] : String | +| Tuples.cs:190:13:190:14 | access to parameter y2 : String | semmle.label | access to parameter y2 : String | +| Tuples.cs:190:13:190:14 | access to parameter y2 : String | semmle.label | access to parameter y2 : String | +| Tuples.cs:190:18:190:19 | access to property Y2 : String | semmle.label | access to property Y2 : String | +| Tuples.cs:190:18:190:19 | access to property Y2 : String | semmle.label | access to property Y2 : String | +| Tuples.cs:190:18:190:19 | this access : R3 [property Y2] : String | semmle.label | this access : R3 [property Y2] : String | +| Tuples.cs:190:18:190:19 | this access : R3 [property Y2] : String | semmle.label | this access : R3 [property Y2] : String | +| Tuples.cs:196:13:196:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:196:13:196:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:196:18:196:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:196:18:196:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:197:13:197:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:197:13:197:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:197:18:197:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:197:18:197:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:198:13:198:13 | access to local variable r : R3 [property X2] : String | semmle.label | access to local variable r : R3 [property X2] : String | +| Tuples.cs:198:13:198:13 | access to local variable r : R3 [property X2] : String | semmle.label | access to local variable r : R3 [property X2] : String | +| Tuples.cs:198:13:198:13 | access to local variable r : R3 [property Y2] : String | semmle.label | access to local variable r : R3 [property Y2] : String | +| Tuples.cs:198:13:198:13 | access to local variable r : R3 [property Y2] : String | semmle.label | access to local variable r : R3 [property Y2] : String | +| Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property X2] : String | semmle.label | object creation of type R3 : R3 [property X2] : String | +| Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property X2] : String | semmle.label | object creation of type R3 : R3 [property X2] : String | +| Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property Y2] : String | semmle.label | object creation of type R3 : R3 [property Y2] : String | +| Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property Y2] : String | semmle.label | object creation of type R3 : R3 [property Y2] : String | +| Tuples.cs:198:24:198:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:198:24:198:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:198:28:198:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:198:28:198:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:200:22:200:22 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:200:22:200:22 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:200:22:200:22 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:200:22:200:22 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property X2] : String | semmle.label | access to local variable r : R3 [property X2] : String | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property X2] : String | semmle.label | access to local variable r : R3 [property X2] : String | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property Y2] : String | semmle.label | access to local variable r : R3 [property Y2] : String | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property Y2] : String | semmle.label | access to local variable r : R3 [property Y2] : String | +| Tuples.cs:201:14:201:14 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:201:14:201:14 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:202:14:202:14 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:202:14:202:14 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | semmle.label | this [Return] : R4 [property X3] : String | +| Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | semmle.label | this [Return] : R4 [property X3] : String | +| Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | semmle.label | this [Return] : R4 [property Y3] : String | +| Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | semmle.label | this [Return] : R4 [property Y3] : String | +| Tuples.cs:205:22:205:23 | X3 : String | semmle.label | X3 : String | +| Tuples.cs:205:22:205:23 | X3 : String | semmle.label | X3 : String | +| Tuples.cs:205:33:205:34 | Y3 : String | semmle.label | Y3 : String | +| Tuples.cs:205:33:205:34 | Y3 : String | semmle.label | Y3 : String | +| Tuples.cs:209:13:209:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:209:13:209:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:209:18:209:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:209:18:209:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:210:13:210:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:210:13:210:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:210:18:210:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:210:18:210:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:211:13:211:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:211:13:211:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:211:13:211:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:211:13:211:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property X3] : String | semmle.label | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property X3] : String | semmle.label | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property Y3] : String | semmle.label | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property Y3] : String | semmle.label | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:211:24:211:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:211:24:211:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:211:28:211:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:211:28:211:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:213:9:213:9 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:213:9:213:9 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:213:9:213:9 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:213:9:213:9 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:213:31:213:32 | String x3 : String | semmle.label | String x3 : String | +| Tuples.cs:213:31:213:32 | String x3 : String | semmle.label | String x3 : String | +| Tuples.cs:213:43:213:44 | String y3 : String | semmle.label | String y3 : String | +| Tuples.cs:213:43:213:44 | String y3 : String | semmle.label | String y3 : String | +| Tuples.cs:214:14:214:15 | access to local variable x3 | semmle.label | access to local variable x3 | +| Tuples.cs:214:14:214:15 | access to local variable x3 | semmle.label | access to local variable x3 | +| Tuples.cs:215:14:215:15 | access to local variable y3 | semmle.label | access to local variable y3 | +| Tuples.cs:215:14:215:15 | access to local variable y3 | semmle.label | access to local variable y3 | +| Tuples.cs:220:13:220:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:220:13:220:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:220:18:220:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:220:18:220:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:221:13:221:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:221:13:221:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:221:18:221:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:221:18:221:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:222:13:222:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:222:13:222:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:222:13:222:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:222:13:222:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property X3] : String | semmle.label | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property X3] : String | semmle.label | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property Y3] : String | semmle.label | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property Y3] : String | semmle.label | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:222:24:222:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:222:24:222:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:222:28:222:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:222:28:222:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:225:10:225:10 | access to local variable x : String | semmle.label | access to local variable x : String | +| Tuples.cs:225:10:225:10 | access to local variable x : String | semmle.label | access to local variable x : String | +| Tuples.cs:225:13:225:13 | access to local variable y : String | semmle.label | access to local variable y : String | +| Tuples.cs:225:13:225:13 | access to local variable y : String | semmle.label | access to local variable y : String | +| Tuples.cs:225:18:225:18 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:225:18:225:18 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:225:18:225:18 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:225:18:225:18 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:225:18:225:18 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:225:18:225:18 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:225:18:225:18 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:225:18:225:18 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:226:14:226:14 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:226:14:226:14 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:227:14:227:14 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:227:14:227:14 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:232:13:232:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:232:13:232:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:232:18:232:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:232:18:232:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:234:13:234:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:234:13:234:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:234:17:234:30 | object creation of type R4 : R4 [property X3] : String | semmle.label | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:234:17:234:30 | object creation of type R4 : R4 [property X3] : String | semmle.label | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:234:24:234:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:234:24:234:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:236:26:236:26 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:236:26:236:26 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:236:26:236:26 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:236:26:236:26 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:237:14:237:14 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:237:14:237:14 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:242:13:242:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:242:13:242:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:242:18:242:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:242:18:242:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:243:13:243:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:243:13:243:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:243:18:243:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:243:18:243:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:244:13:244:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:244:13:244:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:244:13:244:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:244:13:244:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property X3] : String | semmle.label | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property X3] : String | semmle.label | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property Y3] : String | semmle.label | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property Y3] : String | semmle.label | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:244:24:244:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:244:24:244:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:244:28:244:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:244:28:244:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:246:13:246:13 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:246:13:246:13 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:246:13:246:13 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:246:13:246:13 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:246:13:246:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:246:13:246:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:246:13:246:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:246:13:246:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:248:18:248:18 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:248:18:248:18 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:249:18:249:18 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:249:18:249:18 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:255:13:255:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:255:13:255:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:255:18:255:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:255:18:255:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:256:13:256:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:256:13:256:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:256:18:256:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:256:18:256:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:257:13:257:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:257:13:257:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:257:13:257:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:257:13:257:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property X3] : String | semmle.label | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property X3] : String | semmle.label | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property Y3] : String | semmle.label | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property Y3] : String | semmle.label | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:257:24:257:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:257:24:257:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:257:28:257:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:257:28:257:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:259:13:259:13 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:259:13:259:13 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:259:13:259:13 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:259:13:259:13 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:259:13:259:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:259:13:259:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:259:13:259:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:259:13:259:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:261:18:261:18 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:261:18:261:18 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:262:18:262:18 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:262:18:262:18 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:268:13:268:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:268:13:268:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:268:18:268:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:268:18:268:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:269:13:269:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:269:13:269:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:269:18:269:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:269:18:269:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:270:13:270:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:270:13:270:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:270:13:270:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:270:13:270:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property X3] : String | semmle.label | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property X3] : String | semmle.label | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property Y3] : String | semmle.label | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property Y3] : String | semmle.label | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:270:24:270:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:270:24:270:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:270:28:270:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:270:28:270:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:272:17:272:17 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:272:17:272:17 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:272:17:272:17 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:272:17:272:17 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:272:17:272:17 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:272:17:272:17 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:272:17:272:17 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:272:17:272:17 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:276:22:276:22 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:276:22:276:22 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:277:22:277:22 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:277:22:277:22 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:284:13:284:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:284:13:284:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:284:18:284:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:284:18:284:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:285:13:285:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:285:13:285:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:285:18:285:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:285:18:285:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:286:13:286:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:286:13:286:13 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:286:13:286:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:286:13:286:13 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property X3] : String | semmle.label | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property X3] : String | semmle.label | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property Y3] : String | semmle.label | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property Y3] : String | semmle.label | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:286:24:286:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:286:24:286:25 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:286:28:286:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:286:28:286:29 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:288:17:288:17 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:288:17:288:17 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:288:17:288:17 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:288:17:288:17 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:288:17:288:17 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:288:17:288:17 | access to local variable r : R4 [property X3] : String | semmle.label | access to local variable r : R4 [property X3] : String | +| Tuples.cs:288:17:288:17 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:288:17:288:17 | access to local variable r : R4 [property Y3] : String | semmle.label | access to local variable r : R4 [property Y3] : String | +| Tuples.cs:291:22:291:22 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:291:22:291:22 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:292:22:292:22 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:292:22:292:22 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:302:16:302:16 | this [Return] : C [field x] : String | semmle.label | this [Return] : C [field x] : String | +| Tuples.cs:302:16:302:16 | this [Return] : C [field x] : String | semmle.label | this [Return] : C [field x] : String | +| Tuples.cs:302:16:302:16 | this [Return] : C [field y] : String | semmle.label | this [Return] : C [field y] : String | +| Tuples.cs:302:16:302:16 | this [Return] : C [field y] : String | semmle.label | this [Return] : C [field y] : String | +| Tuples.cs:302:25:302:25 | x : String | semmle.label | x : String | +| Tuples.cs:302:25:302:25 | x : String | semmle.label | x : String | +| Tuples.cs:302:35:302:35 | y : String | semmle.label | y : String | +| Tuples.cs:302:35:302:35 | y : String | semmle.label | y : String | +| Tuples.cs:304:13:304:16 | [post] this access : C [field x] : String | semmle.label | [post] this access : C [field x] : String | +| Tuples.cs:304:13:304:16 | [post] this access : C [field x] : String | semmle.label | [post] this access : C [field x] : String | +| Tuples.cs:304:22:304:22 | access to parameter x : String | semmle.label | access to parameter x : String | +| Tuples.cs:304:22:304:22 | access to parameter x : String | semmle.label | access to parameter x : String | +| Tuples.cs:305:13:305:16 | [post] this access : C [field y] : String | semmle.label | [post] this access : C [field y] : String | +| Tuples.cs:305:13:305:16 | [post] this access : C [field y] : String | semmle.label | [post] this access : C [field y] : String | +| Tuples.cs:305:22:305:22 | access to parameter y : String | semmle.label | access to parameter y : String | +| Tuples.cs:305:22:305:22 | access to parameter y : String | semmle.label | access to parameter y : String | +| Tuples.cs:308:21:308:31 | this : C [field x] : String | semmle.label | this : C [field x] : String | +| Tuples.cs:308:21:308:31 | this : C [field x] : String | semmle.label | this : C [field x] : String | +| Tuples.cs:308:21:308:31 | this : C [field y] : String | semmle.label | this : C [field y] : String | +| Tuples.cs:308:21:308:31 | this : C [field y] : String | semmle.label | this : C [field y] : String | +| Tuples.cs:310:13:310:13 | access to parameter x : String | semmle.label | access to parameter x : String | +| Tuples.cs:310:13:310:13 | access to parameter x : String | semmle.label | access to parameter x : String | +| Tuples.cs:310:17:310:20 | this access : C [field x] : String | semmle.label | this access : C [field x] : String | +| Tuples.cs:310:17:310:20 | this access : C [field x] : String | semmle.label | this access : C [field x] : String | +| Tuples.cs:310:17:310:22 | access to field x : String | semmle.label | access to field x : String | +| Tuples.cs:310:17:310:22 | access to field x : String | semmle.label | access to field x : String | +| Tuples.cs:311:13:311:13 | access to parameter y : String | semmle.label | access to parameter y : String | +| Tuples.cs:311:13:311:13 | access to parameter y : String | semmle.label | access to parameter y : String | +| Tuples.cs:311:17:311:20 | this access : C [field y] : String | semmle.label | this access : C [field y] : String | +| Tuples.cs:311:17:311:20 | this access : C [field y] : String | semmle.label | this access : C [field y] : String | +| Tuples.cs:311:17:311:22 | access to field y : String | semmle.label | access to field y : String | +| Tuples.cs:311:17:311:22 | access to field y : String | semmle.label | access to field y : String | +| Tuples.cs:317:13:317:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:317:13:317:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:317:18:317:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:317:18:317:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:318:13:318:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:318:13:318:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:318:18:318:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:318:18:318:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:319:13:319:13 | access to local variable c : C [field x] : String | semmle.label | access to local variable c : C [field x] : String | +| Tuples.cs:319:13:319:13 | access to local variable c : C [field x] : String | semmle.label | access to local variable c : C [field x] : String | +| Tuples.cs:319:13:319:13 | access to local variable c : C [field y] : String | semmle.label | access to local variable c : C [field y] : String | +| Tuples.cs:319:13:319:13 | access to local variable c : C [field y] : String | semmle.label | access to local variable c : C [field y] : String | +| Tuples.cs:319:17:319:29 | object creation of type C : C [field x] : String | semmle.label | object creation of type C : C [field x] : String | +| Tuples.cs:319:17:319:29 | object creation of type C : C [field x] : String | semmle.label | object creation of type C : C [field x] : String | +| Tuples.cs:319:17:319:29 | object creation of type C : C [field y] : String | semmle.label | object creation of type C : C [field y] : String | +| Tuples.cs:319:17:319:29 | object creation of type C : C [field y] : String | semmle.label | object creation of type C : C [field y] : String | +| Tuples.cs:319:23:319:24 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:319:23:319:24 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:319:27:319:28 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:319:27:319:28 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:321:22:321:22 | [deconstruct parameter 0] access to local variable c : String | semmle.label | [deconstruct parameter 0] access to local variable c : String | +| Tuples.cs:321:22:321:22 | [deconstruct parameter 0] access to local variable c : String | semmle.label | [deconstruct parameter 0] access to local variable c : String | +| Tuples.cs:321:22:321:22 | [deconstruct parameter 1] access to local variable c : String | semmle.label | [deconstruct parameter 1] access to local variable c : String | +| Tuples.cs:321:22:321:22 | [deconstruct parameter 1] access to local variable c : String | semmle.label | [deconstruct parameter 1] access to local variable c : String | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field x] : String | semmle.label | access to local variable c : C [field x] : String | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field x] : String | semmle.label | access to local variable c : C [field x] : String | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field y] : String | semmle.label | access to local variable c : C [field y] : String | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field y] : String | semmle.label | access to local variable c : C [field y] : String | +| Tuples.cs:322:14:322:14 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:322:14:322:14 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:323:14:323:14 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:323:14:323:14 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:326:19:326:31 | this [Return] : Tuples+GenericRecord [property t1] : String | semmle.label | this [Return] : Tuples+GenericRecord [property t1] : String | +| Tuples.cs:326:19:326:31 | this [Return] : Tuples+GenericRecord [property t1] : String | semmle.label | this [Return] : Tuples+GenericRecord [property t1] : String | +| Tuples.cs:326:19:326:31 | this [Return] : Tuples+GenericRecord [property t2] : String | semmle.label | this [Return] : Tuples+GenericRecord [property t2] : String | +| Tuples.cs:326:19:326:31 | this [Return] : Tuples+GenericRecord [property t2] : String | semmle.label | this [Return] : Tuples+GenericRecord [property t2] : String | +| Tuples.cs:326:44:326:45 | t1 : String | semmle.label | t1 : String | +| Tuples.cs:326:44:326:45 | t1 : String | semmle.label | t1 : String | +| Tuples.cs:326:51:326:52 | t2 : String | semmle.label | t2 : String | +| Tuples.cs:326:51:326:52 | t2 : String | semmle.label | t2 : String | +| Tuples.cs:330:13:330:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:330:13:330:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:330:18:330:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:330:18:330:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:331:13:331:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:331:13:331:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:331:18:331:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:331:18:331:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:332:13:332:13 | access to local variable r : Tuples+GenericRecord [property t1] : String | semmle.label | access to local variable r : Tuples+GenericRecord [property t1] : String | +| Tuples.cs:332:13:332:13 | access to local variable r : Tuples+GenericRecord [property t1] : String | semmle.label | access to local variable r : Tuples+GenericRecord [property t1] : String | +| Tuples.cs:332:13:332:13 | access to local variable r : Tuples+GenericRecord [property t2] : String | semmle.label | access to local variable r : Tuples+GenericRecord [property t2] : String | +| Tuples.cs:332:13:332:13 | access to local variable r : Tuples+GenericRecord [property t2] : String | semmle.label | access to local variable r : Tuples+GenericRecord [property t2] : String | +| Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t1] : String | semmle.label | object creation of type GenericRecord : Tuples+GenericRecord [property t1] : String | +| Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t1] : String | semmle.label | object creation of type GenericRecord : Tuples+GenericRecord [property t1] : String | +| Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t2] : String | semmle.label | object creation of type GenericRecord : Tuples+GenericRecord [property t2] : String | +| Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t2] : String | semmle.label | object creation of type GenericRecord : Tuples+GenericRecord [property t2] : String | +| Tuples.cs:332:51:332:52 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:332:51:332:52 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:332:55:332:56 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:332:55:332:56 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:334:22:334:22 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:334:22:334:22 | [deconstruct parameter 0] access to local variable r : String | semmle.label | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:334:22:334:22 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:334:22:334:22 | [deconstruct parameter 1] access to local variable r : String | semmle.label | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:334:22:334:22 | access to local variable r : Tuples+GenericRecord [property t1] : String | semmle.label | access to local variable r : Tuples+GenericRecord [property t1] : String | +| Tuples.cs:334:22:334:22 | access to local variable r : Tuples+GenericRecord [property t1] : String | semmle.label | access to local variable r : Tuples+GenericRecord [property t1] : String | +| Tuples.cs:334:22:334:22 | access to local variable r : Tuples+GenericRecord [property t2] : String | semmle.label | access to local variable r : Tuples+GenericRecord [property t2] : String | +| Tuples.cs:334:22:334:22 | access to local variable r : Tuples+GenericRecord [property t2] : String | semmle.label | access to local variable r : Tuples+GenericRecord [property t2] : String | +| Tuples.cs:335:14:335:14 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:335:14:335:14 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:336:14:336:14 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:336:14:336:14 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:343:21:343:31 | this : E [field X] : String | semmle.label | this : E [field X] : String | +| Tuples.cs:343:21:343:31 | this : E [field X] : String | semmle.label | this : E [field X] : String | +| Tuples.cs:343:21:343:31 | this : E [field Y] : String | semmle.label | this : E [field Y] : String | +| Tuples.cs:343:21:343:31 | this : E [field Y] : String | semmle.label | this : E [field Y] : String | +| Tuples.cs:345:13:345:13 | access to parameter x : String | semmle.label | access to parameter x : String | +| Tuples.cs:345:13:345:13 | access to parameter x : String | semmle.label | access to parameter x : String | +| Tuples.cs:345:17:345:17 | access to field X : String | semmle.label | access to field X : String | +| Tuples.cs:345:17:345:17 | access to field X : String | semmle.label | access to field X : String | +| Tuples.cs:345:17:345:17 | this access : E [field X] : String | semmle.label | this access : E [field X] : String | +| Tuples.cs:345:17:345:17 | this access : E [field X] : String | semmle.label | this access : E [field X] : String | +| Tuples.cs:346:13:346:13 | access to parameter y : String | semmle.label | access to parameter y : String | +| Tuples.cs:346:13:346:13 | access to parameter y : String | semmle.label | access to parameter y : String | +| Tuples.cs:346:17:346:17 | access to field Y : String | semmle.label | access to field Y : String | +| Tuples.cs:346:17:346:17 | access to field Y : String | semmle.label | access to field Y : String | +| Tuples.cs:346:17:346:17 | this access : E [field Y] : String | semmle.label | this access : E [field Y] : String | +| Tuples.cs:346:17:346:17 | this access : E [field Y] : String | semmle.label | this access : E [field Y] : String | +| Tuples.cs:354:13:354:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:354:13:354:14 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:354:18:354:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:354:18:354:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:355:13:355:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:355:13:355:14 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:355:18:355:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:355:18:355:35 | call to method Source : String | semmle.label | call to method Source : String | +| Tuples.cs:356:13:356:13 | access to local variable e : E [field X] : String | semmle.label | access to local variable e : E [field X] : String | +| Tuples.cs:356:13:356:13 | access to local variable e : E [field X] : String | semmle.label | access to local variable e : E [field X] : String | +| Tuples.cs:356:13:356:13 | access to local variable e : E [field Y] : String | semmle.label | access to local variable e : E [field Y] : String | +| Tuples.cs:356:13:356:13 | access to local variable e : E [field Y] : String | semmle.label | access to local variable e : E [field Y] : String | +| Tuples.cs:356:23:356:40 | { ..., ... } : E [field X] : String | semmle.label | { ..., ... } : E [field X] : String | +| Tuples.cs:356:23:356:40 | { ..., ... } : E [field X] : String | semmle.label | { ..., ... } : E [field X] : String | +| Tuples.cs:356:23:356:40 | { ..., ... } : E [field Y] : String | semmle.label | { ..., ... } : E [field Y] : String | +| Tuples.cs:356:23:356:40 | { ..., ... } : E [field Y] : String | semmle.label | { ..., ... } : E [field Y] : String | +| Tuples.cs:356:29:356:30 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:356:29:356:30 | access to local variable o1 : String | semmle.label | access to local variable o1 : String | +| Tuples.cs:356:37:356:38 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:356:37:356:38 | access to local variable o2 : String | semmle.label | access to local variable o2 : String | +| Tuples.cs:359:22:359:22 | [deconstruct parameter 0] access to local variable e : String | semmle.label | [deconstruct parameter 0] access to local variable e : String | +| Tuples.cs:359:22:359:22 | [deconstruct parameter 0] access to local variable e : String | semmle.label | [deconstruct parameter 0] access to local variable e : String | +| Tuples.cs:359:22:359:22 | [deconstruct parameter 1] access to local variable e : String | semmle.label | [deconstruct parameter 1] access to local variable e : String | +| Tuples.cs:359:22:359:22 | [deconstruct parameter 1] access to local variable e : String | semmle.label | [deconstruct parameter 1] access to local variable e : String | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field X] : String | semmle.label | access to local variable e : E [field X] : String | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field X] : String | semmle.label | access to local variable e : E [field X] : String | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field Y] : String | semmle.label | access to local variable e : E [field Y] : String | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field Y] : String | semmle.label | access to local variable e : E [field Y] : String | +| Tuples.cs:360:14:360:14 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:360:14:360:14 | access to local variable x | semmle.label | access to local variable x | +| Tuples.cs:361:14:361:14 | access to local variable y | semmle.label | access to local variable y | +| Tuples.cs:361:14:361:14 | access to local variable y | semmle.label | access to local variable y | subpaths | Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:95:22:95:22 | i : String | Tuples.cs:95:12:95:13 | this [Return] : R1 [property i] : String | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | | Tuples.cs:100:24:100:24 | access to local variable o : String | Tuples.cs:95:22:95:22 | i : String | Tuples.cs:95:12:95:13 | this [Return] : R1 [property i] : String | Tuples.cs:100:17:100:28 | object creation of type R1 : R1 [property i] : String | +| Tuples.cs:178:24:178:25 | access to local variable o1 : String | Tuples.cs:172:22:172:23 | X1 : String | Tuples.cs:172:12:172:13 | this [Return] : R2 [property X1] : String | Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property X1] : String | +| Tuples.cs:178:24:178:25 | access to local variable o1 : String | Tuples.cs:172:22:172:23 | X1 : String | Tuples.cs:172:12:172:13 | this [Return] : R2 [property X1] : String | Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property X1] : String | +| Tuples.cs:178:28:178:29 | access to local variable o2 : String | Tuples.cs:172:33:172:34 | Y1 : String | Tuples.cs:172:12:172:13 | this [Return] : R2 [property Y1] : String | Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property Y1] : String | +| Tuples.cs:178:28:178:29 | access to local variable o2 : String | Tuples.cs:172:33:172:34 | Y1 : String | Tuples.cs:172:12:172:13 | this [Return] : R2 [property Y1] : String | Tuples.cs:178:17:178:30 | object creation of type R2 : R2 [property Y1] : String | +| Tuples.cs:198:24:198:25 | access to local variable o1 : String | Tuples.cs:185:22:185:23 | X2 : String | Tuples.cs:185:12:185:13 | this [Return] : R3 [property X2] : String | Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property X2] : String | +| Tuples.cs:198:24:198:25 | access to local variable o1 : String | Tuples.cs:185:22:185:23 | X2 : String | Tuples.cs:185:12:185:13 | this [Return] : R3 [property X2] : String | Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property X2] : String | +| Tuples.cs:198:28:198:29 | access to local variable o2 : String | Tuples.cs:185:33:185:34 | Y2 : String | Tuples.cs:185:12:185:13 | this [Return] : R3 [property Y2] : String | Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property Y2] : String | +| Tuples.cs:198:28:198:29 | access to local variable o2 : String | Tuples.cs:185:33:185:34 | Y2 : String | Tuples.cs:185:12:185:13 | this [Return] : R3 [property Y2] : String | Tuples.cs:198:17:198:30 | object creation of type R3 : R3 [property Y2] : String | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property X2] : String | Tuples.cs:187:21:187:31 | this : R3 [property X2] : String | Tuples.cs:189:13:189:14 | access to parameter x2 : String | Tuples.cs:200:22:200:22 | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property X2] : String | Tuples.cs:187:21:187:31 | this : R3 [property X2] : String | Tuples.cs:189:13:189:14 | access to parameter x2 : String | Tuples.cs:200:22:200:22 | [deconstruct parameter 1] access to local variable r : String | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property Y2] : String | Tuples.cs:187:21:187:31 | this : R3 [property Y2] : String | Tuples.cs:190:13:190:14 | access to parameter y2 : String | Tuples.cs:200:22:200:22 | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:200:22:200:22 | access to local variable r : R3 [property Y2] : String | Tuples.cs:187:21:187:31 | this : R3 [property Y2] : String | Tuples.cs:190:13:190:14 | access to parameter y2 : String | Tuples.cs:200:22:200:22 | [deconstruct parameter 0] access to local variable r : String | +| Tuples.cs:211:24:211:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:211:24:211:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:211:28:211:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:211:28:211:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | Tuples.cs:211:17:211:30 | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:222:24:222:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:222:24:222:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:222:28:222:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:222:28:222:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | Tuples.cs:222:17:222:30 | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:234:24:234:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | Tuples.cs:234:17:234:30 | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:234:24:234:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | Tuples.cs:234:17:234:30 | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:244:24:244:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:244:24:244:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:244:28:244:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:244:28:244:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | Tuples.cs:244:17:244:30 | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:257:24:257:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:257:24:257:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:257:28:257:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:257:28:257:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | Tuples.cs:257:17:257:30 | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:270:24:270:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:270:24:270:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:270:28:270:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:270:28:270:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | Tuples.cs:270:17:270:30 | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:286:24:286:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:286:24:286:25 | access to local variable o1 : String | Tuples.cs:205:22:205:23 | X3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property X3] : String | Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property X3] : String | +| Tuples.cs:286:28:286:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:286:28:286:29 | access to local variable o2 : String | Tuples.cs:205:33:205:34 | Y3 : String | Tuples.cs:205:12:205:13 | this [Return] : R4 [property Y3] : String | Tuples.cs:286:17:286:30 | object creation of type R4 : R4 [property Y3] : String | +| Tuples.cs:319:23:319:24 | access to local variable o1 : String | Tuples.cs:302:25:302:25 | x : String | Tuples.cs:302:16:302:16 | this [Return] : C [field x] : String | Tuples.cs:319:17:319:29 | object creation of type C : C [field x] : String | +| Tuples.cs:319:23:319:24 | access to local variable o1 : String | Tuples.cs:302:25:302:25 | x : String | Tuples.cs:302:16:302:16 | this [Return] : C [field x] : String | Tuples.cs:319:17:319:29 | object creation of type C : C [field x] : String | +| Tuples.cs:319:27:319:28 | access to local variable o2 : String | Tuples.cs:302:35:302:35 | y : String | Tuples.cs:302:16:302:16 | this [Return] : C [field y] : String | Tuples.cs:319:17:319:29 | object creation of type C : C [field y] : String | +| Tuples.cs:319:27:319:28 | access to local variable o2 : String | Tuples.cs:302:35:302:35 | y : String | Tuples.cs:302:16:302:16 | this [Return] : C [field y] : String | Tuples.cs:319:17:319:29 | object creation of type C : C [field y] : String | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field x] : String | Tuples.cs:308:21:308:31 | this : C [field x] : String | Tuples.cs:310:13:310:13 | access to parameter x : String | Tuples.cs:321:22:321:22 | [deconstruct parameter 0] access to local variable c : String | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field x] : String | Tuples.cs:308:21:308:31 | this : C [field x] : String | Tuples.cs:310:13:310:13 | access to parameter x : String | Tuples.cs:321:22:321:22 | [deconstruct parameter 0] access to local variable c : String | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field y] : String | Tuples.cs:308:21:308:31 | this : C [field y] : String | Tuples.cs:311:13:311:13 | access to parameter y : String | Tuples.cs:321:22:321:22 | [deconstruct parameter 1] access to local variable c : String | +| Tuples.cs:321:22:321:22 | access to local variable c : C [field y] : String | Tuples.cs:308:21:308:31 | this : C [field y] : String | Tuples.cs:311:13:311:13 | access to parameter y : String | Tuples.cs:321:22:321:22 | [deconstruct parameter 1] access to local variable c : String | +| Tuples.cs:332:51:332:52 | access to local variable o1 : String | Tuples.cs:326:44:326:45 | t1 : String | Tuples.cs:326:19:326:31 | this [Return] : Tuples+GenericRecord [property t1] : String | Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t1] : String | +| Tuples.cs:332:51:332:52 | access to local variable o1 : String | Tuples.cs:326:44:326:45 | t1 : String | Tuples.cs:326:19:326:31 | this [Return] : Tuples+GenericRecord [property t1] : String | Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t1] : String | +| Tuples.cs:332:55:332:56 | access to local variable o2 : String | Tuples.cs:326:51:326:52 | t2 : String | Tuples.cs:326:19:326:31 | this [Return] : Tuples+GenericRecord [property t2] : String | Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t2] : String | +| Tuples.cs:332:55:332:56 | access to local variable o2 : String | Tuples.cs:326:51:326:52 | t2 : String | Tuples.cs:326:19:326:31 | this [Return] : Tuples+GenericRecord [property t2] : String | Tuples.cs:332:17:332:57 | object creation of type GenericRecord : Tuples+GenericRecord [property t2] : String | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field X] : String | Tuples.cs:343:21:343:31 | this : E [field X] : String | Tuples.cs:345:13:345:13 | access to parameter x : String | Tuples.cs:359:22:359:22 | [deconstruct parameter 0] access to local variable e : String | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field X] : String | Tuples.cs:343:21:343:31 | this : E [field X] : String | Tuples.cs:345:13:345:13 | access to parameter x : String | Tuples.cs:359:22:359:22 | [deconstruct parameter 0] access to local variable e : String | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field Y] : String | Tuples.cs:343:21:343:31 | this : E [field Y] : String | Tuples.cs:346:13:346:13 | access to parameter y : String | Tuples.cs:359:22:359:22 | [deconstruct parameter 1] access to local variable e : String | +| Tuples.cs:359:22:359:22 | access to local variable e : E [field Y] : String | Tuples.cs:343:21:343:31 | this : E [field Y] : String | Tuples.cs:346:13:346:13 | access to parameter y : String | Tuples.cs:359:22:359:22 | [deconstruct parameter 1] access to local variable e : String | testFailures #select | Tuples.cs:12:14:12:14 | access to local variable a | Tuples.cs:7:18:7:34 | call to method Source : Object | Tuples.cs:12:14:12:14 | access to local variable a | $@ | Tuples.cs:7:18:7:34 | call to method Source : Object | call to method Source : Object | @@ -662,6 +1652,10 @@ testFailures | Tuples.cs:90:18:90:18 | access to local variable r | Tuples.cs:58:18:58:34 | call to method Source : String | Tuples.cs:90:18:90:18 | access to local variable r | $@ | Tuples.cs:58:18:58:34 | call to method Source : String | call to method Source : String | | Tuples.cs:101:14:101:16 | access to property i | Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:101:14:101:16 | access to property i | $@ | Tuples.cs:99:17:99:33 | call to method Source : String | call to method Source : String | | Tuples.cs:101:14:101:16 | access to property i | Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:101:14:101:16 | access to property i | $@ | Tuples.cs:99:17:99:33 | call to method Source : String | call to method Source : String | +| Tuples.cs:104:14:104:14 | access to local variable a | Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:104:14:104:14 | access to local variable a | $@ | Tuples.cs:99:17:99:33 | call to method Source : String | call to method Source : String | +| Tuples.cs:104:14:104:14 | access to local variable a | Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:104:14:104:14 | access to local variable a | $@ | Tuples.cs:99:17:99:33 | call to method Source : String | call to method Source : String | +| Tuples.cs:110:22:110:22 | access to local variable x | Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:110:22:110:22 | access to local variable x | $@ | Tuples.cs:99:17:99:33 | call to method Source : String | call to method Source : String | +| Tuples.cs:110:22:110:22 | access to local variable x | Tuples.cs:99:17:99:33 | call to method Source : String | Tuples.cs:110:22:110:22 | access to local variable x | $@ | Tuples.cs:99:17:99:33 | call to method Source : String | call to method Source : String | | Tuples.cs:122:14:122:15 | access to local variable x1 | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | $@ | Tuples.cs:118:17:118:33 | call to method Source : Object | call to method Source : Object | | Tuples.cs:122:14:122:15 | access to local variable x1 | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:122:14:122:15 | access to local variable x1 | $@ | Tuples.cs:118:17:118:33 | call to method Source : Object | call to method Source : Object | | Tuples.cs:126:14:126:15 | access to local variable x2 | Tuples.cs:118:17:118:33 | call to method Source : Object | Tuples.cs:126:14:126:15 | access to local variable x2 | $@ | Tuples.cs:118:17:118:33 | call to method Source : Object | call to method Source : Object | @@ -682,3 +1676,49 @@ testFailures | Tuples.cs:166:18:166:19 | access to local variable a3 | Tuples.cs:161:18:161:35 | call to method Source : String | Tuples.cs:166:18:166:19 | access to local variable a3 | $@ | Tuples.cs:161:18:161:35 | call to method Source : String | call to method Source : String | | Tuples.cs:167:18:167:24 | access to field Item2 | Tuples.cs:162:18:162:35 | call to method Source : String | Tuples.cs:167:18:167:24 | access to field Item2 | $@ | Tuples.cs:162:18:162:35 | call to method Source : String | call to method Source : String | | Tuples.cs:167:18:167:24 | access to field Item2 | Tuples.cs:162:18:162:35 | call to method Source : String | Tuples.cs:167:18:167:24 | access to field Item2 | $@ | Tuples.cs:162:18:162:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:181:14:181:15 | access to local variable x1 | Tuples.cs:176:18:176:35 | call to method Source : String | Tuples.cs:181:14:181:15 | access to local variable x1 | $@ | Tuples.cs:176:18:176:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:181:14:181:15 | access to local variable x1 | Tuples.cs:176:18:176:35 | call to method Source : String | Tuples.cs:181:14:181:15 | access to local variable x1 | $@ | Tuples.cs:176:18:176:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:182:14:182:15 | access to local variable y1 | Tuples.cs:177:18:177:35 | call to method Source : String | Tuples.cs:182:14:182:15 | access to local variable y1 | $@ | Tuples.cs:177:18:177:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:182:14:182:15 | access to local variable y1 | Tuples.cs:177:18:177:35 | call to method Source : String | Tuples.cs:182:14:182:15 | access to local variable y1 | $@ | Tuples.cs:177:18:177:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:201:14:201:14 | access to local variable x | Tuples.cs:197:18:197:35 | call to method Source : String | Tuples.cs:201:14:201:14 | access to local variable x | $@ | Tuples.cs:197:18:197:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:201:14:201:14 | access to local variable x | Tuples.cs:197:18:197:35 | call to method Source : String | Tuples.cs:201:14:201:14 | access to local variable x | $@ | Tuples.cs:197:18:197:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:202:14:202:14 | access to local variable y | Tuples.cs:196:18:196:35 | call to method Source : String | Tuples.cs:202:14:202:14 | access to local variable y | $@ | Tuples.cs:196:18:196:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:202:14:202:14 | access to local variable y | Tuples.cs:196:18:196:35 | call to method Source : String | Tuples.cs:202:14:202:14 | access to local variable y | $@ | Tuples.cs:196:18:196:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:214:14:214:15 | access to local variable x3 | Tuples.cs:209:18:209:35 | call to method Source : String | Tuples.cs:214:14:214:15 | access to local variable x3 | $@ | Tuples.cs:209:18:209:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:214:14:214:15 | access to local variable x3 | Tuples.cs:209:18:209:35 | call to method Source : String | Tuples.cs:214:14:214:15 | access to local variable x3 | $@ | Tuples.cs:209:18:209:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:215:14:215:15 | access to local variable y3 | Tuples.cs:210:18:210:35 | call to method Source : String | Tuples.cs:215:14:215:15 | access to local variable y3 | $@ | Tuples.cs:210:18:210:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:215:14:215:15 | access to local variable y3 | Tuples.cs:210:18:210:35 | call to method Source : String | Tuples.cs:215:14:215:15 | access to local variable y3 | $@ | Tuples.cs:210:18:210:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:226:14:226:14 | access to local variable x | Tuples.cs:220:18:220:35 | call to method Source : String | Tuples.cs:226:14:226:14 | access to local variable x | $@ | Tuples.cs:220:18:220:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:226:14:226:14 | access to local variable x | Tuples.cs:220:18:220:35 | call to method Source : String | Tuples.cs:226:14:226:14 | access to local variable x | $@ | Tuples.cs:220:18:220:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:227:14:227:14 | access to local variable y | Tuples.cs:221:18:221:35 | call to method Source : String | Tuples.cs:227:14:227:14 | access to local variable y | $@ | Tuples.cs:221:18:221:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:227:14:227:14 | access to local variable y | Tuples.cs:221:18:221:35 | call to method Source : String | Tuples.cs:227:14:227:14 | access to local variable y | $@ | Tuples.cs:221:18:221:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:237:14:237:14 | access to local variable x | Tuples.cs:232:18:232:35 | call to method Source : String | Tuples.cs:237:14:237:14 | access to local variable x | $@ | Tuples.cs:232:18:232:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:237:14:237:14 | access to local variable x | Tuples.cs:232:18:232:35 | call to method Source : String | Tuples.cs:237:14:237:14 | access to local variable x | $@ | Tuples.cs:232:18:232:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:248:18:248:18 | access to local variable x | Tuples.cs:242:18:242:35 | call to method Source : String | Tuples.cs:248:18:248:18 | access to local variable x | $@ | Tuples.cs:242:18:242:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:248:18:248:18 | access to local variable x | Tuples.cs:242:18:242:35 | call to method Source : String | Tuples.cs:248:18:248:18 | access to local variable x | $@ | Tuples.cs:242:18:242:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:249:18:249:18 | access to local variable y | Tuples.cs:243:18:243:35 | call to method Source : String | Tuples.cs:249:18:249:18 | access to local variable y | $@ | Tuples.cs:243:18:243:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:249:18:249:18 | access to local variable y | Tuples.cs:243:18:243:35 | call to method Source : String | Tuples.cs:249:18:249:18 | access to local variable y | $@ | Tuples.cs:243:18:243:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:261:18:261:18 | access to local variable x | Tuples.cs:255:18:255:35 | call to method Source : String | Tuples.cs:261:18:261:18 | access to local variable x | $@ | Tuples.cs:255:18:255:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:261:18:261:18 | access to local variable x | Tuples.cs:255:18:255:35 | call to method Source : String | Tuples.cs:261:18:261:18 | access to local variable x | $@ | Tuples.cs:255:18:255:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:262:18:262:18 | access to local variable y | Tuples.cs:256:18:256:35 | call to method Source : String | Tuples.cs:262:18:262:18 | access to local variable y | $@ | Tuples.cs:256:18:256:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:262:18:262:18 | access to local variable y | Tuples.cs:256:18:256:35 | call to method Source : String | Tuples.cs:262:18:262:18 | access to local variable y | $@ | Tuples.cs:256:18:256:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:276:22:276:22 | access to local variable x | Tuples.cs:268:18:268:35 | call to method Source : String | Tuples.cs:276:22:276:22 | access to local variable x | $@ | Tuples.cs:268:18:268:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:276:22:276:22 | access to local variable x | Tuples.cs:268:18:268:35 | call to method Source : String | Tuples.cs:276:22:276:22 | access to local variable x | $@ | Tuples.cs:268:18:268:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:277:22:277:22 | access to local variable y | Tuples.cs:269:18:269:35 | call to method Source : String | Tuples.cs:277:22:277:22 | access to local variable y | $@ | Tuples.cs:269:18:269:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:277:22:277:22 | access to local variable y | Tuples.cs:269:18:269:35 | call to method Source : String | Tuples.cs:277:22:277:22 | access to local variable y | $@ | Tuples.cs:269:18:269:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:291:22:291:22 | access to local variable x | Tuples.cs:284:18:284:35 | call to method Source : String | Tuples.cs:291:22:291:22 | access to local variable x | $@ | Tuples.cs:284:18:284:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:291:22:291:22 | access to local variable x | Tuples.cs:284:18:284:35 | call to method Source : String | Tuples.cs:291:22:291:22 | access to local variable x | $@ | Tuples.cs:284:18:284:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:292:22:292:22 | access to local variable y | Tuples.cs:285:18:285:35 | call to method Source : String | Tuples.cs:292:22:292:22 | access to local variable y | $@ | Tuples.cs:285:18:285:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:292:22:292:22 | access to local variable y | Tuples.cs:285:18:285:35 | call to method Source : String | Tuples.cs:292:22:292:22 | access to local variable y | $@ | Tuples.cs:285:18:285:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:322:14:322:14 | access to local variable x | Tuples.cs:317:18:317:35 | call to method Source : String | Tuples.cs:322:14:322:14 | access to local variable x | $@ | Tuples.cs:317:18:317:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:322:14:322:14 | access to local variable x | Tuples.cs:317:18:317:35 | call to method Source : String | Tuples.cs:322:14:322:14 | access to local variable x | $@ | Tuples.cs:317:18:317:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:323:14:323:14 | access to local variable y | Tuples.cs:318:18:318:35 | call to method Source : String | Tuples.cs:323:14:323:14 | access to local variable y | $@ | Tuples.cs:318:18:318:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:323:14:323:14 | access to local variable y | Tuples.cs:318:18:318:35 | call to method Source : String | Tuples.cs:323:14:323:14 | access to local variable y | $@ | Tuples.cs:318:18:318:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:335:14:335:14 | access to local variable x | Tuples.cs:330:18:330:35 | call to method Source : String | Tuples.cs:335:14:335:14 | access to local variable x | $@ | Tuples.cs:330:18:330:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:335:14:335:14 | access to local variable x | Tuples.cs:330:18:330:35 | call to method Source : String | Tuples.cs:335:14:335:14 | access to local variable x | $@ | Tuples.cs:330:18:330:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:336:14:336:14 | access to local variable y | Tuples.cs:331:18:331:35 | call to method Source : String | Tuples.cs:336:14:336:14 | access to local variable y | $@ | Tuples.cs:331:18:331:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:336:14:336:14 | access to local variable y | Tuples.cs:331:18:331:35 | call to method Source : String | Tuples.cs:336:14:336:14 | access to local variable y | $@ | Tuples.cs:331:18:331:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:360:14:360:14 | access to local variable x | Tuples.cs:354:18:354:35 | call to method Source : String | Tuples.cs:360:14:360:14 | access to local variable x | $@ | Tuples.cs:354:18:354:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:360:14:360:14 | access to local variable x | Tuples.cs:354:18:354:35 | call to method Source : String | Tuples.cs:360:14:360:14 | access to local variable x | $@ | Tuples.cs:354:18:354:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:361:14:361:14 | access to local variable y | Tuples.cs:355:18:355:35 | call to method Source : String | Tuples.cs:361:14:361:14 | access to local variable y | $@ | Tuples.cs:355:18:355:35 | call to method Source : String | call to method Source : String | +| Tuples.cs:361:14:361:14 | access to local variable y | Tuples.cs:355:18:355:35 | call to method Source : String | Tuples.cs:361:14:361:14 | access to local variable y | $@ | Tuples.cs:355:18:355:35 | call to method Source : String | call to method Source : String |