mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Merge pull request #19089 from michaelnebel/csharp/improvestringinterpolation
C#: Extract string interpolation alignment and format.
This commit is contained in:
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,39 @@
|
||||
class Expr extends @expr {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class TypeOrRef extends @type_or_ref {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class InterpolatedStringInsertExpr extends Expr, @interpolated_string_insert_expr { }
|
||||
|
||||
private predicate remove_expr(Expr e) {
|
||||
exists(InterpolatedStringInsertExpr ie |
|
||||
e = ie
|
||||
or
|
||||
// Alignment
|
||||
expr_parent(e, 1, ie)
|
||||
or
|
||||
// Format
|
||||
expr_parent(e, 2, ie)
|
||||
)
|
||||
}
|
||||
|
||||
query predicate new_expressions(Expr e, int kind, TypeOrRef t) {
|
||||
expressions(e, kind, t) and
|
||||
// Remove the syntheetic intert expression and previously un-extracted children
|
||||
not remove_expr(e)
|
||||
}
|
||||
|
||||
query predicate new_expr_parent(Expr e, int child, Expr parent) {
|
||||
expr_parent(e, child, parent) and
|
||||
not remove_expr(e) and
|
||||
not remove_expr(parent)
|
||||
or
|
||||
// Use the string interpolation as parent instead of the synthetic insert expression
|
||||
exists(InterpolatedStringInsertExpr ie |
|
||||
expr_parent(e, 0, ie) and
|
||||
expr_parent(ie, child, parent)
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
description: Remove `interpolated_string_insert_expr` kind.
|
||||
compatibility: backwards
|
||||
expressions.rel: run string_interpol_insert.qlo new_expressions
|
||||
expr_parent.rel: run string_interpol_insert.qlo new_expr_parent
|
||||
@@ -29,6 +29,15 @@ namespace Semmle.Extraction.CSharp
|
||||
symbol is null ? (AnnotatedTypeSymbol?)null : new AnnotatedTypeSymbol(symbol, NullableAnnotation.None);
|
||||
}
|
||||
|
||||
internal static class AnnotatedTypeSymbolExtensions
|
||||
{
|
||||
/// <summary>
|
||||
/// Returns true if the type is a string type.
|
||||
/// </summary>
|
||||
public static bool IsStringType(this AnnotatedTypeSymbol? type) =>
|
||||
type.HasValue && type.Value.Symbol?.SpecialType == SpecialType.System_String;
|
||||
}
|
||||
|
||||
internal static class SymbolExtensions
|
||||
{
|
||||
/// <summary>
|
||||
|
||||
@@ -18,7 +18,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
{
|
||||
// If this is a "+" expression we might need to wrap the child expressions
|
||||
// in ToString calls
|
||||
return Kind == ExprKind.ADD
|
||||
return Kind == ExprKind.ADD && Type.IsStringType()
|
||||
? ImplicitToString.Create(cx, node, this, child)
|
||||
: Create(cx, node, this, child);
|
||||
}
|
||||
|
||||
@@ -39,16 +39,13 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
Context.TrapWriter.Writer.expr_call(this, target);
|
||||
}
|
||||
|
||||
private static bool IsStringType(AnnotatedTypeSymbol? type) =>
|
||||
type.HasValue && type.Value.Symbol?.SpecialType == SpecialType.System_String;
|
||||
|
||||
/// <summary>
|
||||
/// Creates a new expression, adding a compiler generated `ToString` call if required.
|
||||
/// </summary>
|
||||
public static Expression Create(Context cx, ExpressionSyntax node, Expression parent, int child)
|
||||
public static Expression Create(Context cx, ExpressionSyntax node, IExpressionParentEntity parent, int child)
|
||||
{
|
||||
var info = new ExpressionNodeInfo(cx, node, parent, child);
|
||||
return CreateFromNode(info.SetImplicitToString(IsStringType(parent.Type) && !IsStringType(info.Type)));
|
||||
return CreateFromNode(info.SetImplicitToString(!info.Type.IsStringType()));
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
using System.IO;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
using Semmle.Extraction.Kinds;
|
||||
@@ -21,15 +20,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
{
|
||||
case SyntaxKind.Interpolation:
|
||||
var interpolation = (InterpolationSyntax)c;
|
||||
var exp = interpolation.Expression;
|
||||
if (Context.GetTypeInfo(exp).Type is ITypeSymbol type && !type.ImplementsIFormattable())
|
||||
{
|
||||
ImplicitToString.Create(Context, exp, this, child++);
|
||||
}
|
||||
else
|
||||
{
|
||||
Create(Context, exp, this, child++);
|
||||
}
|
||||
new InterpolatedStringInsert(Context, interpolation, this, child++);
|
||||
break;
|
||||
case SyntaxKind.InterpolatedStringText:
|
||||
// Create a string literal
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
using Semmle.Extraction.Kinds;
|
||||
|
||||
namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
{
|
||||
internal class InterpolatedStringInsert : Expression
|
||||
{
|
||||
public InterpolatedStringInsert(Context cx, InterpolationSyntax syntax, Expression parent, int child) :
|
||||
base(new ExpressionInfo(cx, null, cx.CreateLocation(syntax.GetLocation()), ExprKind.INTERPOLATED_STRING_INSERT, parent, child, isCompilerGenerated: false, null))
|
||||
{
|
||||
var exp = syntax.Expression;
|
||||
if (parent.Type.IsStringType() &&
|
||||
cx.GetTypeInfo(exp).Type is ITypeSymbol type &&
|
||||
!type.ImplementsIFormattable())
|
||||
{
|
||||
ImplicitToString.Create(cx, exp, this, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
Create(cx, exp, this, 0);
|
||||
}
|
||||
|
||||
// Hardcode the child number of the optional alignment clause to 1 and format clause to 2.
|
||||
// This simplifies the logic in QL.
|
||||
if (syntax.AlignmentClause?.Value is ExpressionSyntax alignment)
|
||||
{
|
||||
Create(cx, alignment, this, 1);
|
||||
}
|
||||
|
||||
if (syntax.FormatClause is InterpolationFormatClauseSyntax format)
|
||||
{
|
||||
var f = format.FormatStringToken.ValueText;
|
||||
var t = AnnotatedTypeSymbol.CreateNotAnnotated(cx.Compilation.GetSpecialType(SpecialType.System_String));
|
||||
new Expression(new ExpressionInfo(cx, t, cx.CreateLocation(format.GetLocation()), ExprKind.UTF16_STRING_LITERAL, this, 2, isCompilerGenerated: false, f));
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -132,6 +132,7 @@ namespace Semmle.Extraction.Kinds
|
||||
UTF8_STRING_LITERAL = 135,
|
||||
COLLECTION = 136,
|
||||
SPREAD_ELEMENT = 137,
|
||||
INTERPOLATED_STRING_INSERT = 138,
|
||||
DEFINE_SYMBOL = 999,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
---
|
||||
category: minorAnalysis
|
||||
---
|
||||
* The *alignment* and *format* clauses in string interpolation expressions are now extracted. That is, in `$"Hello {name,align:format}"` *name*, *align* and *format* are extracted as children of the string interpolation *insert* `{name,align:format}`.
|
||||
@@ -66,6 +66,9 @@ private class LocalTaintExprStepConfiguration extends ControlFlowReachabilityCon
|
||||
e1 = e2.(InterpolatedStringExpr).getAChild() and
|
||||
scope = e2
|
||||
or
|
||||
e1 = e2.(InterpolatedStringInsertExpr).getInsert() and
|
||||
scope = e2
|
||||
or
|
||||
e2 =
|
||||
any(OperatorCall oc |
|
||||
oc.getTarget().(ConversionOperator).fromLibrary() and
|
||||
|
||||
@@ -34,8 +34,9 @@ private import semmle.code.csharp.TypeRef
|
||||
* `as` expression (`AsExpr`), a cast (`CastExpr`), a `typeof` expression
|
||||
* (`TypeofExpr`), a `default` expression (`DefaultValueExpr`), an `await`
|
||||
* expression (`AwaitExpr`), a `nameof` expression (`NameOfExpr`), an
|
||||
* interpolated string (`InterpolatedStringExpr`), a qualifiable expression
|
||||
* (`QualifiableExpr`), or a literal (`Literal`).
|
||||
* interpolated string (`InterpolatedStringExpr`), an interpolated string
|
||||
* insert (`InterpolatedStringInsertExpr`), a qualifiable expression (`QualifiableExpr`),
|
||||
* or a literal (`Literal`).
|
||||
*/
|
||||
class Expr extends ControlFlowElement, @expr {
|
||||
override Location getALocation() { expr_location(this, result) }
|
||||
@@ -917,6 +918,40 @@ class NameOfExpr extends Expr, @nameof_expr {
|
||||
override string getAPrimaryQlClass() { result = "NameOfExpr" }
|
||||
}
|
||||
|
||||
/**
|
||||
* An interpolated string insert, for example `{pi, align:F3}` on line 3 in
|
||||
*
|
||||
* ```csharp
|
||||
* void Pi() {
|
||||
* float pi = 3.14159f;
|
||||
* Console.WriteLine($"Hello Pi, {pi,6:F3}");
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
class InterpolatedStringInsertExpr extends Expr, @interpolated_string_insert_expr {
|
||||
override string toString() { result = "{...}" }
|
||||
|
||||
override string getAPrimaryQlClass() { result = "InterpolatedStringInsertExpr" }
|
||||
|
||||
/**
|
||||
* Gets the insert expression in this interpolated string insert. For
|
||||
* example, the insert expression in `{pi, align:F3}` is `pi`.
|
||||
*/
|
||||
Expr getInsert() { result = this.getChild(0) }
|
||||
|
||||
/**
|
||||
* Gets the alignment expression in this interpolated string insert, if any.
|
||||
* For example, the alignment expression in `{pi, align:F3}` is `align`.
|
||||
*/
|
||||
Expr getAlignment() { result = this.getChild(1) }
|
||||
|
||||
/**
|
||||
* Gets the format expression in this interpolated string insert, if any.
|
||||
* For example, the format expression in `{pi, align:F3}` is `F3`.
|
||||
*/
|
||||
StringLiteral getFormat() { result = this.getChild(2) }
|
||||
}
|
||||
|
||||
/**
|
||||
* An interpolated string, for example `$"Hello, {name}!"` on line 2 in
|
||||
*
|
||||
@@ -931,16 +966,20 @@ class InterpolatedStringExpr extends Expr, @interpolated_string_expr {
|
||||
|
||||
override string getAPrimaryQlClass() { result = "InterpolatedStringExpr" }
|
||||
|
||||
/**
|
||||
* Gets the interpolated string insert at index `i` in this interpolated string, if any.
|
||||
* For example, the interpolated string insert at index `i = 1` is `{pi, align:F3}`
|
||||
* in `$"Hello, {pi, align:F3}!"`.
|
||||
*/
|
||||
InterpolatedStringInsertExpr getInterpolatedInsert(int i) { result = this.getChild(i) }
|
||||
|
||||
/**
|
||||
* Gets the insert at index `i` in this interpolated string, if any. For
|
||||
* example, the insert at index `i = 1` is `name` in `$"Hello, {name}!"`.
|
||||
* Note that there is no insert at index `i = 0`, but instead a text
|
||||
* element (`getText(0)` gets the text).
|
||||
*/
|
||||
Expr getInsert(int i) {
|
||||
result = this.getChild(i) and
|
||||
not result instanceof StringLiteral
|
||||
}
|
||||
Expr getInsert(int i) { result = this.getInterpolatedInsert(i).getInsert() }
|
||||
|
||||
/**
|
||||
* Gets the text element at index `i` in this interpolated string, if any.
|
||||
|
||||
@@ -1168,6 +1168,7 @@ case @expr.kind of
|
||||
/* C# 12.0 */
|
||||
| 136 = @collection_expr
|
||||
| 137 = @spread_element_expr
|
||||
| 138 = @interpolated_string_insert_expr
|
||||
/* Preprocessor */
|
||||
| 999 = @define_symbol_expr
|
||||
;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,57 @@
|
||||
class Expr extends @expr {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class TypeOrRef extends @type_or_ref {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
class StringLiteral extends Expr, @string_literal_expr { }
|
||||
|
||||
class InterpolatedStringExpr extends Expr, @interpolated_string_expr { }
|
||||
|
||||
class StringInterpolationInsert extends Expr, @element {
|
||||
StringInterpolationInsert() {
|
||||
expressions(this, _, _) and
|
||||
expr_parent(this, _, any(InterpolatedStringExpr x)) and
|
||||
not this instanceof StringLiteral
|
||||
}
|
||||
}
|
||||
|
||||
newtype TAddedElement = TInsert(StringInterpolationInsert e)
|
||||
|
||||
module Fresh = QlBuiltins::NewEntity<TAddedElement>;
|
||||
|
||||
class TNewExpr = @expr or Fresh::EntityId;
|
||||
|
||||
class NewExpr extends TNewExpr {
|
||||
string toString() { none() }
|
||||
}
|
||||
|
||||
query predicate new_expressions(NewExpr id, int kind, TypeOrRef t) {
|
||||
expressions(id, kind, t)
|
||||
or
|
||||
exists(StringInterpolationInsert e |
|
||||
// The type of `e` is just copied even though a null type would be preferred.
|
||||
expressions(e, _, t) and
|
||||
Fresh::map(TInsert(e)) = id and
|
||||
kind = 138
|
||||
)
|
||||
}
|
||||
|
||||
query predicate new_expr_parent(NewExpr id, int child, NewExpr parent) {
|
||||
// Keep all parent child relationships except for string interpolation inserts
|
||||
expr_parent(id, child, parent) and not id instanceof StringInterpolationInsert
|
||||
or
|
||||
exists(StringInterpolationInsert e, int child0, NewExpr p0, NewExpr new_id |
|
||||
expr_parent(e, child0, p0) and new_id = Fresh::map(TInsert(e))
|
||||
|
|
||||
id = new_id and
|
||||
child = child0 and
|
||||
parent = p0
|
||||
or
|
||||
id = e and
|
||||
child = 0 and
|
||||
parent = new_id
|
||||
)
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
description: Add `interpolated_string_insert_expr` kind.
|
||||
compatibility: backwards
|
||||
expressions.rel: run string_interpol_insert.qlo new_expressions
|
||||
expr_parent.rel: run string_interpol_insert.qlo new_expr_parent
|
||||
@@ -377,8 +377,8 @@
|
||||
| Conditions.cs:143:10:143:12 | exit M11 (normal) | Conditions.cs:143:10:143:12 | exit M11 | 2 |
|
||||
| Conditions.cs:145:21:145:23 | [b (line 143): true] "a" | Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | 5 |
|
||||
| Conditions.cs:145:27:145:29 | [b (line 143): false] "b" | Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b | 5 |
|
||||
| Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:13:147:48 | call to method WriteLine | 5 |
|
||||
| Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:13:149:48 | call to method WriteLine | 5 |
|
||||
| Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:13:147:48 | call to method WriteLine | 6 |
|
||||
| Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:13:149:48 | call to method WriteLine | 6 |
|
||||
| ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | exit ExitMethods | 5 |
|
||||
| ExitMethods.cs:8:10:8:11 | enter M1 | ExitMethods.cs:8:10:8:11 | exit M1 | 8 |
|
||||
| ExitMethods.cs:14:10:14:11 | enter M2 | ExitMethods.cs:14:10:14:11 | exit M2 | 8 |
|
||||
@@ -859,11 +859,11 @@
|
||||
| Patterns.cs:5:10:5:11 | enter M1 | Patterns.cs:8:18:8:23 | Int32 i1 | 8 |
|
||||
| Patterns.cs:8:13:8:23 | [false] ... is ... | Patterns.cs:8:13:8:23 | [false] ... is ... | 1 |
|
||||
| Patterns.cs:8:13:8:23 | [true] ... is ... | Patterns.cs:8:13:8:23 | [true] ... is ... | 1 |
|
||||
| Patterns.cs:9:9:11:9 | {...} | Patterns.cs:10:13:10:42 | call to method WriteLine | 6 |
|
||||
| Patterns.cs:9:9:11:9 | {...} | Patterns.cs:10:13:10:42 | call to method WriteLine | 7 |
|
||||
| Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:12:23:12:31 | String s1 | 3 |
|
||||
| Patterns.cs:12:18:12:31 | [false] ... is ... | Patterns.cs:12:18:12:31 | [false] ... is ... | 1 |
|
||||
| Patterns.cs:12:18:12:31 | [true] ... is ... | Patterns.cs:12:18:12:31 | [true] ... is ... | 1 |
|
||||
| Patterns.cs:13:9:15:9 | {...} | Patterns.cs:14:13:14:45 | call to method WriteLine | 6 |
|
||||
| Patterns.cs:13:9:15:9 | {...} | Patterns.cs:14:13:14:45 | call to method WriteLine | 7 |
|
||||
| Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:16:23:16:28 | Object v1 | 3 |
|
||||
| Patterns.cs:16:18:16:28 | [false] ... is ... | Patterns.cs:16:18:16:28 | [false] ... is ... | 1 |
|
||||
| Patterns.cs:16:18:16:28 | [true] ... is ... | Patterns.cs:16:18:16:28 | [true] ... is ... | 1 |
|
||||
@@ -872,11 +872,11 @@
|
||||
| Patterns.cs:23:17:23:22 | break; | Patterns.cs:23:17:23:22 | break; | 1 |
|
||||
| Patterns.cs:24:13:24:36 | case ...: | Patterns.cs:24:18:24:23 | Int32 i2 | 2 |
|
||||
| Patterns.cs:24:30:24:31 | access to local variable i2 | Patterns.cs:24:30:24:35 | ... > ... | 3 |
|
||||
| Patterns.cs:25:17:25:52 | ...; | Patterns.cs:26:17:26:22 | break; | 6 |
|
||||
| Patterns.cs:25:17:25:52 | ...; | Patterns.cs:26:17:26:22 | break; | 7 |
|
||||
| Patterns.cs:27:13:27:24 | case ...: | Patterns.cs:27:18:27:23 | Int32 i3 | 2 |
|
||||
| Patterns.cs:28:17:28:47 | ...; | Patterns.cs:29:17:29:22 | break; | 6 |
|
||||
| Patterns.cs:28:17:28:47 | ...; | Patterns.cs:29:17:29:22 | break; | 7 |
|
||||
| Patterns.cs:30:13:30:27 | case ...: | Patterns.cs:30:18:30:26 | String s2 | 2 |
|
||||
| Patterns.cs:31:17:31:50 | ...; | Patterns.cs:32:17:32:22 | break; | 6 |
|
||||
| Patterns.cs:31:17:31:50 | ...; | Patterns.cs:32:17:32:22 | break; | 7 |
|
||||
| Patterns.cs:33:13:33:24 | case ...: | Patterns.cs:33:18:33:23 | Object v2 | 2 |
|
||||
| Patterns.cs:34:17:34:22 | break; | Patterns.cs:34:17:34:22 | break; | 1 |
|
||||
| Patterns.cs:35:13:35:20 | default: | Patterns.cs:37:17:37:22 | break; | 5 |
|
||||
@@ -1076,8 +1076,8 @@
|
||||
| Switch.cs:156:36:156:38 | "a" | Switch.cs:156:28:156:38 | ... => ... | 2 |
|
||||
| Switch.cs:156:41:156:45 | false | Switch.cs:156:41:156:45 | false | 1 |
|
||||
| Switch.cs:156:50:156:52 | "b" | Switch.cs:156:41:156:52 | ... => ... | 2 |
|
||||
| Switch.cs:158:13:158:49 | ...; | Switch.cs:158:13:158:48 | call to method WriteLine | 5 |
|
||||
| Switch.cs:160:13:160:49 | ...; | Switch.cs:160:13:160:48 | call to method WriteLine | 5 |
|
||||
| Switch.cs:158:13:158:49 | ...; | Switch.cs:158:13:158:48 | call to method WriteLine | 6 |
|
||||
| Switch.cs:160:13:160:49 | ...; | Switch.cs:160:13:160:48 | call to method WriteLine | 6 |
|
||||
| TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses | 5 |
|
||||
| TypeAccesses.cs:3:10:3:10 | enter M | TypeAccesses.cs:7:18:7:22 | Int32 j | 13 |
|
||||
| TypeAccesses.cs:7:13:7:22 | [false] ... is ... | TypeAccesses.cs:7:13:7:22 | [false] ... is ... | 1 |
|
||||
|
||||
@@ -1527,11 +1527,13 @@ dominance
|
||||
| Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:40:147:43 | "a = " |
|
||||
| Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:13:147:48 | call to method WriteLine |
|
||||
| Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:147:45:147:45 | access to local variable s |
|
||||
| Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:38:147:47 | $"..." |
|
||||
| Conditions.cs:147:44:147:46 | {...} | Conditions.cs:147:38:147:47 | $"..." |
|
||||
| Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:44:147:46 | {...} |
|
||||
| Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:40:149:43 | "b = " |
|
||||
| Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:13:149:48 | call to method WriteLine |
|
||||
| Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:45:149:45 | access to local variable s |
|
||||
| Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:38:149:47 | $"..." |
|
||||
| Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:38:149:47 | $"..." |
|
||||
| Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:44:149:46 | {...} |
|
||||
| ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | {...} |
|
||||
| ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | call to constructor Object |
|
||||
| ExitMethods.cs:6:7:6:17 | exit ExitMethods (normal) | ExitMethods.cs:6:7:6:17 | exit ExitMethods |
|
||||
@@ -3147,7 +3149,8 @@ dominance
|
||||
| Patterns.cs:10:13:10:43 | ...; | Patterns.cs:10:33:10:36 | "int " |
|
||||
| Patterns.cs:10:31:10:41 | $"..." | Patterns.cs:10:13:10:42 | call to method WriteLine |
|
||||
| Patterns.cs:10:33:10:36 | "int " | Patterns.cs:10:38:10:39 | access to local variable i1 |
|
||||
| Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:10:31:10:41 | $"..." |
|
||||
| Patterns.cs:10:37:10:40 | {...} | Patterns.cs:10:31:10:41 | $"..." |
|
||||
| Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:10:37:10:40 | {...} |
|
||||
| Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:12:18:12:18 | access to local variable o |
|
||||
| Patterns.cs:12:18:12:18 | access to local variable o | Patterns.cs:12:23:12:31 | String s1 |
|
||||
| Patterns.cs:12:18:12:31 | [false] ... is ... | Patterns.cs:16:14:18:9 | if (...) ... |
|
||||
@@ -3158,7 +3161,8 @@ dominance
|
||||
| Patterns.cs:14:13:14:46 | ...; | Patterns.cs:14:33:14:39 | "string " |
|
||||
| Patterns.cs:14:31:14:44 | $"..." | Patterns.cs:14:13:14:45 | call to method WriteLine |
|
||||
| Patterns.cs:14:33:14:39 | "string " | Patterns.cs:14:41:14:42 | access to local variable s1 |
|
||||
| Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:14:31:14:44 | $"..." |
|
||||
| Patterns.cs:14:40:14:43 | {...} | Patterns.cs:14:31:14:44 | $"..." |
|
||||
| Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:14:40:14:43 | {...} |
|
||||
| Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:16:18:16:18 | access to local variable o |
|
||||
| Patterns.cs:16:18:16:18 | access to local variable o | Patterns.cs:16:23:16:28 | Object v1 |
|
||||
| Patterns.cs:16:18:16:28 | [true] ... is ... | Patterns.cs:17:9:18:9 | {...} |
|
||||
@@ -3179,7 +3183,8 @@ dominance
|
||||
| Patterns.cs:25:17:25:52 | ...; | Patterns.cs:25:37:25:45 | "positive " |
|
||||
| Patterns.cs:25:35:25:50 | $"..." | Patterns.cs:25:17:25:51 | call to method WriteLine |
|
||||
| Patterns.cs:25:37:25:45 | "positive " | Patterns.cs:25:47:25:48 | access to local variable i2 |
|
||||
| Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:25:35:25:50 | $"..." |
|
||||
| Patterns.cs:25:46:25:49 | {...} | Patterns.cs:25:35:25:50 | $"..." |
|
||||
| Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:25:46:25:49 | {...} |
|
||||
| Patterns.cs:27:13:27:24 | case ...: | Patterns.cs:27:18:27:23 | Int32 i3 |
|
||||
| Patterns.cs:27:18:27:23 | Int32 i3 | Patterns.cs:28:17:28:47 | ...; |
|
||||
| Patterns.cs:27:18:27:23 | Int32 i3 | Patterns.cs:30:13:30:27 | case ...: |
|
||||
@@ -3187,7 +3192,8 @@ dominance
|
||||
| Patterns.cs:28:17:28:47 | ...; | Patterns.cs:28:37:28:40 | "int " |
|
||||
| Patterns.cs:28:35:28:45 | $"..." | Patterns.cs:28:17:28:46 | call to method WriteLine |
|
||||
| Patterns.cs:28:37:28:40 | "int " | Patterns.cs:28:42:28:43 | access to local variable i3 |
|
||||
| Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:28:35:28:45 | $"..." |
|
||||
| Patterns.cs:28:41:28:44 | {...} | Patterns.cs:28:35:28:45 | $"..." |
|
||||
| Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:28:41:28:44 | {...} |
|
||||
| Patterns.cs:30:13:30:27 | case ...: | Patterns.cs:30:18:30:26 | String s2 |
|
||||
| Patterns.cs:30:18:30:26 | String s2 | Patterns.cs:31:17:31:50 | ...; |
|
||||
| Patterns.cs:30:18:30:26 | String s2 | Patterns.cs:33:13:33:24 | case ...: |
|
||||
@@ -3195,7 +3201,8 @@ dominance
|
||||
| Patterns.cs:31:17:31:50 | ...; | Patterns.cs:31:37:31:43 | "string " |
|
||||
| Patterns.cs:31:35:31:48 | $"..." | Patterns.cs:31:17:31:49 | call to method WriteLine |
|
||||
| Patterns.cs:31:37:31:43 | "string " | Patterns.cs:31:45:31:46 | access to local variable s2 |
|
||||
| Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:31:35:31:48 | $"..." |
|
||||
| Patterns.cs:31:44:31:47 | {...} | Patterns.cs:31:35:31:48 | $"..." |
|
||||
| Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:31:44:31:47 | {...} |
|
||||
| Patterns.cs:33:13:33:24 | case ...: | Patterns.cs:33:18:33:23 | Object v2 |
|
||||
| Patterns.cs:33:18:33:23 | Object v2 | Patterns.cs:34:17:34:22 | break; |
|
||||
| Patterns.cs:33:18:33:23 | Object v2 | Patterns.cs:35:13:35:20 | default: |
|
||||
@@ -3664,11 +3671,13 @@ dominance
|
||||
| Switch.cs:158:13:158:49 | ...; | Switch.cs:158:40:158:43 | "a = " |
|
||||
| Switch.cs:158:38:158:47 | $"..." | Switch.cs:158:13:158:48 | call to method WriteLine |
|
||||
| Switch.cs:158:40:158:43 | "a = " | Switch.cs:158:45:158:45 | access to local variable s |
|
||||
| Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:38:158:47 | $"..." |
|
||||
| Switch.cs:158:44:158:46 | {...} | Switch.cs:158:38:158:47 | $"..." |
|
||||
| Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:44:158:46 | {...} |
|
||||
| Switch.cs:160:13:160:49 | ...; | Switch.cs:160:40:160:43 | "b = " |
|
||||
| Switch.cs:160:38:160:47 | $"..." | Switch.cs:160:13:160:48 | call to method WriteLine |
|
||||
| Switch.cs:160:40:160:43 | "b = " | Switch.cs:160:45:160:45 | access to local variable s |
|
||||
| Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:38:160:47 | $"..." |
|
||||
| Switch.cs:160:44:160:46 | {...} | Switch.cs:160:38:160:47 | $"..." |
|
||||
| Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:44:160:46 | {...} |
|
||||
| TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | {...} |
|
||||
| TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | TypeAccesses.cs:1:7:1:18 | call to constructor Object |
|
||||
| TypeAccesses.cs:1:7:1:18 | exit TypeAccesses (normal) | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses |
|
||||
@@ -5858,13 +5867,15 @@ postDominance
|
||||
| Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b | Conditions.cs:146:9:149:49 | [b (line 143): true] if (...) ... |
|
||||
| Conditions.cs:147:13:147:48 | call to method WriteLine | Conditions.cs:147:38:147:47 | $"..." |
|
||||
| Conditions.cs:147:13:147:49 | ...; | Conditions.cs:146:13:146:13 | [b (line 143): true] access to parameter b |
|
||||
| Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:45:147:45 | access to local variable s |
|
||||
| Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:44:147:46 | {...} |
|
||||
| Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:147:13:147:49 | ...; |
|
||||
| Conditions.cs:147:44:147:46 | {...} | Conditions.cs:147:45:147:45 | access to local variable s |
|
||||
| Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:40:147:43 | "a = " |
|
||||
| Conditions.cs:149:13:149:48 | call to method WriteLine | Conditions.cs:149:38:149:47 | $"..." |
|
||||
| Conditions.cs:149:13:149:49 | ...; | Conditions.cs:146:13:146:13 | [b (line 143): false] access to parameter b |
|
||||
| Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:45:149:45 | access to local variable s |
|
||||
| Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:44:149:46 | {...} |
|
||||
| Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:13:149:49 | ...; |
|
||||
| Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:45:149:45 | access to local variable s |
|
||||
| Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:40:149:43 | "b = " |
|
||||
| ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | enter ExitMethods |
|
||||
| ExitMethods.cs:6:7:6:17 | exit ExitMethods | ExitMethods.cs:6:7:6:17 | exit ExitMethods (normal) |
|
||||
@@ -7341,8 +7352,9 @@ postDominance
|
||||
| Patterns.cs:9:9:11:9 | {...} | Patterns.cs:8:13:8:23 | [true] ... is ... |
|
||||
| Patterns.cs:10:13:10:42 | call to method WriteLine | Patterns.cs:10:31:10:41 | $"..." |
|
||||
| Patterns.cs:10:13:10:43 | ...; | Patterns.cs:9:9:11:9 | {...} |
|
||||
| Patterns.cs:10:31:10:41 | $"..." | Patterns.cs:10:38:10:39 | access to local variable i1 |
|
||||
| Patterns.cs:10:31:10:41 | $"..." | Patterns.cs:10:37:10:40 | {...} |
|
||||
| Patterns.cs:10:33:10:36 | "int " | Patterns.cs:10:13:10:43 | ...; |
|
||||
| Patterns.cs:10:37:10:40 | {...} | Patterns.cs:10:38:10:39 | access to local variable i1 |
|
||||
| Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:10:33:10:36 | "int " |
|
||||
| Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:8:13:8:23 | [false] ... is ... |
|
||||
| Patterns.cs:12:18:12:18 | access to local variable o | Patterns.cs:12:14:18:9 | if (...) ... |
|
||||
@@ -7350,8 +7362,9 @@ postDominance
|
||||
| Patterns.cs:13:9:15:9 | {...} | Patterns.cs:12:18:12:31 | [true] ... is ... |
|
||||
| Patterns.cs:14:13:14:45 | call to method WriteLine | Patterns.cs:14:31:14:44 | $"..." |
|
||||
| Patterns.cs:14:13:14:46 | ...; | Patterns.cs:13:9:15:9 | {...} |
|
||||
| Patterns.cs:14:31:14:44 | $"..." | Patterns.cs:14:41:14:42 | access to local variable s1 |
|
||||
| Patterns.cs:14:31:14:44 | $"..." | Patterns.cs:14:40:14:43 | {...} |
|
||||
| Patterns.cs:14:33:14:39 | "string " | Patterns.cs:14:13:14:46 | ...; |
|
||||
| Patterns.cs:14:40:14:43 | {...} | Patterns.cs:14:41:14:42 | access to local variable s1 |
|
||||
| Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:14:33:14:39 | "string " |
|
||||
| Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:12:18:12:31 | [false] ... is ... |
|
||||
| Patterns.cs:16:18:16:18 | access to local variable o | Patterns.cs:16:14:18:9 | if (...) ... |
|
||||
@@ -7368,20 +7381,23 @@ postDominance
|
||||
| Patterns.cs:24:30:24:35 | ... > ... | Patterns.cs:24:35:24:35 | 0 |
|
||||
| Patterns.cs:24:35:24:35 | 0 | Patterns.cs:24:30:24:31 | access to local variable i2 |
|
||||
| Patterns.cs:25:17:25:51 | call to method WriteLine | Patterns.cs:25:35:25:50 | $"..." |
|
||||
| Patterns.cs:25:35:25:50 | $"..." | Patterns.cs:25:47:25:48 | access to local variable i2 |
|
||||
| Patterns.cs:25:35:25:50 | $"..." | Patterns.cs:25:46:25:49 | {...} |
|
||||
| Patterns.cs:25:37:25:45 | "positive " | Patterns.cs:25:17:25:52 | ...; |
|
||||
| Patterns.cs:25:46:25:49 | {...} | Patterns.cs:25:47:25:48 | access to local variable i2 |
|
||||
| Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:25:37:25:45 | "positive " |
|
||||
| Patterns.cs:26:17:26:22 | break; | Patterns.cs:25:17:25:51 | call to method WriteLine |
|
||||
| Patterns.cs:27:18:27:23 | Int32 i3 | Patterns.cs:27:13:27:24 | case ...: |
|
||||
| Patterns.cs:28:17:28:46 | call to method WriteLine | Patterns.cs:28:35:28:45 | $"..." |
|
||||
| Patterns.cs:28:35:28:45 | $"..." | Patterns.cs:28:42:28:43 | access to local variable i3 |
|
||||
| Patterns.cs:28:35:28:45 | $"..." | Patterns.cs:28:41:28:44 | {...} |
|
||||
| Patterns.cs:28:37:28:40 | "int " | Patterns.cs:28:17:28:47 | ...; |
|
||||
| Patterns.cs:28:41:28:44 | {...} | Patterns.cs:28:42:28:43 | access to local variable i3 |
|
||||
| Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:28:37:28:40 | "int " |
|
||||
| Patterns.cs:29:17:29:22 | break; | Patterns.cs:28:17:28:46 | call to method WriteLine |
|
||||
| Patterns.cs:30:18:30:26 | String s2 | Patterns.cs:30:13:30:27 | case ...: |
|
||||
| Patterns.cs:31:17:31:49 | call to method WriteLine | Patterns.cs:31:35:31:48 | $"..." |
|
||||
| Patterns.cs:31:35:31:48 | $"..." | Patterns.cs:31:45:31:46 | access to local variable s2 |
|
||||
| Patterns.cs:31:35:31:48 | $"..." | Patterns.cs:31:44:31:47 | {...} |
|
||||
| Patterns.cs:31:37:31:43 | "string " | Patterns.cs:31:17:31:50 | ...; |
|
||||
| Patterns.cs:31:44:31:47 | {...} | Patterns.cs:31:45:31:46 | access to local variable s2 |
|
||||
| Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:31:37:31:43 | "string " |
|
||||
| Patterns.cs:32:17:32:22 | break; | Patterns.cs:31:17:31:49 | call to method WriteLine |
|
||||
| Patterns.cs:33:18:33:23 | Object v2 | Patterns.cs:33:13:33:24 | case ...: |
|
||||
@@ -7829,12 +7845,14 @@ postDominance
|
||||
| Switch.cs:157:9:160:49 | if (...) ... | Switch.cs:156:13:156:54 | String s = ... |
|
||||
| Switch.cs:157:13:157:13 | access to parameter b | Switch.cs:157:9:160:49 | if (...) ... |
|
||||
| Switch.cs:158:13:158:48 | call to method WriteLine | Switch.cs:158:38:158:47 | $"..." |
|
||||
| Switch.cs:158:38:158:47 | $"..." | Switch.cs:158:45:158:45 | access to local variable s |
|
||||
| Switch.cs:158:38:158:47 | $"..." | Switch.cs:158:44:158:46 | {...} |
|
||||
| Switch.cs:158:40:158:43 | "a = " | Switch.cs:158:13:158:49 | ...; |
|
||||
| Switch.cs:158:44:158:46 | {...} | Switch.cs:158:45:158:45 | access to local variable s |
|
||||
| Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:40:158:43 | "a = " |
|
||||
| Switch.cs:160:13:160:48 | call to method WriteLine | Switch.cs:160:38:160:47 | $"..." |
|
||||
| Switch.cs:160:38:160:47 | $"..." | Switch.cs:160:45:160:45 | access to local variable s |
|
||||
| Switch.cs:160:38:160:47 | $"..." | Switch.cs:160:44:160:46 | {...} |
|
||||
| Switch.cs:160:40:160:43 | "b = " | Switch.cs:160:13:160:49 | ...; |
|
||||
| Switch.cs:160:44:160:46 | {...} | Switch.cs:160:45:160:45 | access to local variable s |
|
||||
| Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:40:160:43 | "b = " |
|
||||
| TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | enter TypeAccesses |
|
||||
| TypeAccesses.cs:1:7:1:18 | exit TypeAccesses | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses (normal) |
|
||||
|
||||
@@ -1642,11 +1642,13 @@ nodeEnclosing
|
||||
| Conditions.cs:147:13:147:49 | ...; | Conditions.cs:143:10:143:12 | M11 |
|
||||
| Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:143:10:143:12 | M11 |
|
||||
| Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:143:10:143:12 | M11 |
|
||||
| Conditions.cs:147:44:147:46 | {...} | Conditions.cs:143:10:143:12 | M11 |
|
||||
| Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:143:10:143:12 | M11 |
|
||||
| Conditions.cs:149:13:149:48 | call to method WriteLine | Conditions.cs:143:10:143:12 | M11 |
|
||||
| Conditions.cs:149:13:149:49 | ...; | Conditions.cs:143:10:143:12 | M11 |
|
||||
| Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:143:10:143:12 | M11 |
|
||||
| Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:143:10:143:12 | M11 |
|
||||
| Conditions.cs:149:44:149:46 | {...} | Conditions.cs:143:10:143:12 | M11 |
|
||||
| Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:143:10:143:12 | M11 |
|
||||
| ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | ExitMethods |
|
||||
| ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | ExitMethods |
|
||||
@@ -3436,6 +3438,7 @@ nodeEnclosing
|
||||
| Patterns.cs:10:13:10:43 | ...; | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:10:31:10:41 | $"..." | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:10:33:10:36 | "int " | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:10:37:10:40 | {...} | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:12:18:12:18 | access to local variable o | Patterns.cs:5:10:5:11 | M1 |
|
||||
@@ -3447,6 +3450,7 @@ nodeEnclosing
|
||||
| Patterns.cs:14:13:14:46 | ...; | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:14:31:14:44 | $"..." | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:14:33:14:39 | "string " | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:14:40:14:43 | {...} | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:16:18:16:18 | access to local variable o | Patterns.cs:5:10:5:11 | M1 |
|
||||
@@ -3468,6 +3472,7 @@ nodeEnclosing
|
||||
| Patterns.cs:25:17:25:52 | ...; | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:25:35:25:50 | $"..." | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:25:37:25:45 | "positive " | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:25:46:25:49 | {...} | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:26:17:26:22 | break; | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:27:13:27:24 | case ...: | Patterns.cs:5:10:5:11 | M1 |
|
||||
@@ -3476,6 +3481,7 @@ nodeEnclosing
|
||||
| Patterns.cs:28:17:28:47 | ...; | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:28:35:28:45 | $"..." | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:28:37:28:40 | "int " | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:28:41:28:44 | {...} | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:29:17:29:22 | break; | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:30:13:30:27 | case ...: | Patterns.cs:5:10:5:11 | M1 |
|
||||
@@ -3484,6 +3490,7 @@ nodeEnclosing
|
||||
| Patterns.cs:31:17:31:50 | ...; | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:31:35:31:48 | $"..." | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:31:37:31:43 | "string " | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:31:44:31:47 | {...} | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:32:17:32:22 | break; | Patterns.cs:5:10:5:11 | M1 |
|
||||
| Patterns.cs:33:13:33:24 | case ...: | Patterns.cs:5:10:5:11 | M1 |
|
||||
@@ -4014,11 +4021,13 @@ nodeEnclosing
|
||||
| Switch.cs:158:13:158:49 | ...; | Switch.cs:154:10:154:12 | M15 |
|
||||
| Switch.cs:158:38:158:47 | $"..." | Switch.cs:154:10:154:12 | M15 |
|
||||
| Switch.cs:158:40:158:43 | "a = " | Switch.cs:154:10:154:12 | M15 |
|
||||
| Switch.cs:158:44:158:46 | {...} | Switch.cs:154:10:154:12 | M15 |
|
||||
| Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:154:10:154:12 | M15 |
|
||||
| Switch.cs:160:13:160:48 | call to method WriteLine | Switch.cs:154:10:154:12 | M15 |
|
||||
| Switch.cs:160:13:160:49 | ...; | Switch.cs:154:10:154:12 | M15 |
|
||||
| Switch.cs:160:38:160:47 | $"..." | Switch.cs:154:10:154:12 | M15 |
|
||||
| Switch.cs:160:40:160:43 | "b = " | Switch.cs:154:10:154:12 | M15 |
|
||||
| Switch.cs:160:44:160:46 | {...} | Switch.cs:154:10:154:12 | M15 |
|
||||
| Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:154:10:154:12 | M15 |
|
||||
| TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | TypeAccesses |
|
||||
| TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | TypeAccesses.cs:1:7:1:18 | TypeAccesses |
|
||||
|
||||
@@ -1158,11 +1158,13 @@
|
||||
| Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:13:147:49 | ...; |
|
||||
| Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:40:147:43 | "a = " |
|
||||
| Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:147:40:147:43 | "a = " |
|
||||
| Conditions.cs:147:44:147:46 | {...} | Conditions.cs:147:45:147:45 | access to local variable s |
|
||||
| Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:45:147:45 | access to local variable s |
|
||||
| Conditions.cs:149:13:149:48 | call to method WriteLine | Conditions.cs:149:40:149:43 | "b = " |
|
||||
| Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:13:149:49 | ...; |
|
||||
| Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:40:149:43 | "b = " |
|
||||
| Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:40:149:43 | "b = " |
|
||||
| Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:45:149:45 | access to local variable s |
|
||||
| Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:45:149:45 | access to local variable s |
|
||||
| ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | call to constructor Object |
|
||||
| ExitMethods.cs:6:7:6:17 | {...} | ExitMethods.cs:6:7:6:17 | {...} |
|
||||
@@ -2238,6 +2240,7 @@
|
||||
| Patterns.cs:10:13:10:43 | ...; | Patterns.cs:10:13:10:43 | ...; |
|
||||
| Patterns.cs:10:31:10:41 | $"..." | Patterns.cs:10:33:10:36 | "int " |
|
||||
| Patterns.cs:10:33:10:36 | "int " | Patterns.cs:10:33:10:36 | "int " |
|
||||
| Patterns.cs:10:37:10:40 | {...} | Patterns.cs:10:38:10:39 | access to local variable i1 |
|
||||
| Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:10:38:10:39 | access to local variable i1 |
|
||||
| Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:12:14:18:9 | if (...) ... |
|
||||
| Patterns.cs:12:18:12:18 | access to local variable o | Patterns.cs:12:18:12:18 | access to local variable o |
|
||||
@@ -2248,6 +2251,7 @@
|
||||
| Patterns.cs:14:13:14:46 | ...; | Patterns.cs:14:13:14:46 | ...; |
|
||||
| Patterns.cs:14:31:14:44 | $"..." | Patterns.cs:14:33:14:39 | "string " |
|
||||
| Patterns.cs:14:33:14:39 | "string " | Patterns.cs:14:33:14:39 | "string " |
|
||||
| Patterns.cs:14:40:14:43 | {...} | Patterns.cs:14:41:14:42 | access to local variable s1 |
|
||||
| Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:14:41:14:42 | access to local variable s1 |
|
||||
| Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:16:14:18:9 | if (...) ... |
|
||||
| Patterns.cs:16:18:16:18 | access to local variable o | Patterns.cs:16:18:16:18 | access to local variable o |
|
||||
@@ -2268,6 +2272,7 @@
|
||||
| Patterns.cs:25:17:25:52 | ...; | Patterns.cs:25:17:25:52 | ...; |
|
||||
| Patterns.cs:25:35:25:50 | $"..." | Patterns.cs:25:37:25:45 | "positive " |
|
||||
| Patterns.cs:25:37:25:45 | "positive " | Patterns.cs:25:37:25:45 | "positive " |
|
||||
| Patterns.cs:25:46:25:49 | {...} | Patterns.cs:25:47:25:48 | access to local variable i2 |
|
||||
| Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:25:47:25:48 | access to local variable i2 |
|
||||
| Patterns.cs:26:17:26:22 | break; | Patterns.cs:26:17:26:22 | break; |
|
||||
| Patterns.cs:27:13:27:24 | case ...: | Patterns.cs:27:13:27:24 | case ...: |
|
||||
@@ -2276,6 +2281,7 @@
|
||||
| Patterns.cs:28:17:28:47 | ...; | Patterns.cs:28:17:28:47 | ...; |
|
||||
| Patterns.cs:28:35:28:45 | $"..." | Patterns.cs:28:37:28:40 | "int " |
|
||||
| Patterns.cs:28:37:28:40 | "int " | Patterns.cs:28:37:28:40 | "int " |
|
||||
| Patterns.cs:28:41:28:44 | {...} | Patterns.cs:28:42:28:43 | access to local variable i3 |
|
||||
| Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:28:42:28:43 | access to local variable i3 |
|
||||
| Patterns.cs:29:17:29:22 | break; | Patterns.cs:29:17:29:22 | break; |
|
||||
| Patterns.cs:30:13:30:27 | case ...: | Patterns.cs:30:13:30:27 | case ...: |
|
||||
@@ -2284,6 +2290,7 @@
|
||||
| Patterns.cs:31:17:31:50 | ...; | Patterns.cs:31:17:31:50 | ...; |
|
||||
| Patterns.cs:31:35:31:48 | $"..." | Patterns.cs:31:37:31:43 | "string " |
|
||||
| Patterns.cs:31:37:31:43 | "string " | Patterns.cs:31:37:31:43 | "string " |
|
||||
| Patterns.cs:31:44:31:47 | {...} | Patterns.cs:31:45:31:46 | access to local variable s2 |
|
||||
| Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:31:45:31:46 | access to local variable s2 |
|
||||
| Patterns.cs:32:17:32:22 | break; | Patterns.cs:32:17:32:22 | break; |
|
||||
| Patterns.cs:33:13:33:24 | case ...: | Patterns.cs:33:13:33:24 | case ...: |
|
||||
@@ -2696,11 +2703,13 @@
|
||||
| Switch.cs:158:13:158:49 | ...; | Switch.cs:158:13:158:49 | ...; |
|
||||
| Switch.cs:158:38:158:47 | $"..." | Switch.cs:158:40:158:43 | "a = " |
|
||||
| Switch.cs:158:40:158:43 | "a = " | Switch.cs:158:40:158:43 | "a = " |
|
||||
| Switch.cs:158:44:158:46 | {...} | Switch.cs:158:45:158:45 | access to local variable s |
|
||||
| Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:45:158:45 | access to local variable s |
|
||||
| Switch.cs:160:13:160:48 | call to method WriteLine | Switch.cs:160:40:160:43 | "b = " |
|
||||
| Switch.cs:160:13:160:49 | ...; | Switch.cs:160:13:160:49 | ...; |
|
||||
| Switch.cs:160:38:160:47 | $"..." | Switch.cs:160:40:160:43 | "b = " |
|
||||
| Switch.cs:160:40:160:43 | "b = " | Switch.cs:160:40:160:43 | "b = " |
|
||||
| Switch.cs:160:44:160:46 | {...} | Switch.cs:160:45:160:45 | access to local variable s |
|
||||
| Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:45:160:45 | access to local variable s |
|
||||
| TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | call to constructor Object |
|
||||
| TypeAccesses.cs:1:7:1:18 | {...} | TypeAccesses.cs:1:7:1:18 | {...} |
|
||||
|
||||
@@ -1452,11 +1452,13 @@
|
||||
| Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:13:147:48 | call to method WriteLine | normal |
|
||||
| Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:38:147:47 | $"..." | normal |
|
||||
| Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:147:40:147:43 | "a = " | normal |
|
||||
| Conditions.cs:147:44:147:46 | {...} | Conditions.cs:147:44:147:46 | {...} | normal |
|
||||
| Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:45:147:45 | access to local variable s | normal |
|
||||
| Conditions.cs:149:13:149:48 | call to method WriteLine | Conditions.cs:149:13:149:48 | call to method WriteLine | normal |
|
||||
| Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:13:149:48 | call to method WriteLine | normal |
|
||||
| Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:38:149:47 | $"..." | normal |
|
||||
| Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:40:149:43 | "b = " | normal |
|
||||
| Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:44:149:46 | {...} | normal |
|
||||
| Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:45:149:45 | access to local variable s | normal |
|
||||
| ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | call to constructor Object | normal |
|
||||
| ExitMethods.cs:6:7:6:17 | {...} | ExitMethods.cs:6:7:6:17 | {...} | normal |
|
||||
@@ -2911,6 +2913,7 @@
|
||||
| Patterns.cs:10:13:10:43 | ...; | Patterns.cs:10:13:10:42 | call to method WriteLine | normal |
|
||||
| Patterns.cs:10:31:10:41 | $"..." | Patterns.cs:10:31:10:41 | $"..." | normal |
|
||||
| Patterns.cs:10:33:10:36 | "int " | Patterns.cs:10:33:10:36 | "int " | normal |
|
||||
| Patterns.cs:10:37:10:40 | {...} | Patterns.cs:10:37:10:40 | {...} | normal |
|
||||
| Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:10:38:10:39 | access to local variable i1 | normal |
|
||||
| Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:14:13:14:45 | call to method WriteLine | normal |
|
||||
| Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:16:18:16:28 | ... is ... | false |
|
||||
@@ -2925,6 +2928,7 @@
|
||||
| Patterns.cs:14:13:14:46 | ...; | Patterns.cs:14:13:14:45 | call to method WriteLine | normal |
|
||||
| Patterns.cs:14:31:14:44 | $"..." | Patterns.cs:14:31:14:44 | $"..." | normal |
|
||||
| Patterns.cs:14:33:14:39 | "string " | Patterns.cs:14:33:14:39 | "string " | normal |
|
||||
| Patterns.cs:14:40:14:43 | {...} | Patterns.cs:14:40:14:43 | {...} | normal |
|
||||
| Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:14:41:14:42 | access to local variable s1 | normal |
|
||||
| Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:16:18:16:28 | ... is ... | false |
|
||||
| Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:17:9:18:9 | {...} | normal |
|
||||
@@ -2959,6 +2963,7 @@
|
||||
| Patterns.cs:25:17:25:52 | ...; | Patterns.cs:25:17:25:51 | call to method WriteLine | normal |
|
||||
| Patterns.cs:25:35:25:50 | $"..." | Patterns.cs:25:35:25:50 | $"..." | normal |
|
||||
| Patterns.cs:25:37:25:45 | "positive " | Patterns.cs:25:37:25:45 | "positive " | normal |
|
||||
| Patterns.cs:25:46:25:49 | {...} | Patterns.cs:25:46:25:49 | {...} | normal |
|
||||
| Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:25:47:25:48 | access to local variable i2 | normal |
|
||||
| Patterns.cs:26:17:26:22 | break; | Patterns.cs:26:17:26:22 | break; | break |
|
||||
| Patterns.cs:27:13:27:24 | case ...: | Patterns.cs:27:18:27:23 | Int32 i3 | no-match |
|
||||
@@ -2969,6 +2974,7 @@
|
||||
| Patterns.cs:28:17:28:47 | ...; | Patterns.cs:28:17:28:46 | call to method WriteLine | normal |
|
||||
| Patterns.cs:28:35:28:45 | $"..." | Patterns.cs:28:35:28:45 | $"..." | normal |
|
||||
| Patterns.cs:28:37:28:40 | "int " | Patterns.cs:28:37:28:40 | "int " | normal |
|
||||
| Patterns.cs:28:41:28:44 | {...} | Patterns.cs:28:41:28:44 | {...} | normal |
|
||||
| Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:28:42:28:43 | access to local variable i3 | normal |
|
||||
| Patterns.cs:29:17:29:22 | break; | Patterns.cs:29:17:29:22 | break; | break |
|
||||
| Patterns.cs:30:13:30:27 | case ...: | Patterns.cs:30:18:30:26 | String s2 | no-match |
|
||||
@@ -2979,6 +2985,7 @@
|
||||
| Patterns.cs:31:17:31:50 | ...; | Patterns.cs:31:17:31:49 | call to method WriteLine | normal |
|
||||
| Patterns.cs:31:35:31:48 | $"..." | Patterns.cs:31:35:31:48 | $"..." | normal |
|
||||
| Patterns.cs:31:37:31:43 | "string " | Patterns.cs:31:37:31:43 | "string " | normal |
|
||||
| Patterns.cs:31:44:31:47 | {...} | Patterns.cs:31:44:31:47 | {...} | normal |
|
||||
| Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:31:45:31:46 | access to local variable s2 | normal |
|
||||
| Patterns.cs:32:17:32:22 | break; | Patterns.cs:32:17:32:22 | break; | break |
|
||||
| Patterns.cs:33:13:33:24 | case ...: | Patterns.cs:33:18:33:23 | Object v2 | no-match |
|
||||
@@ -3566,11 +3573,13 @@
|
||||
| Switch.cs:158:13:158:49 | ...; | Switch.cs:158:13:158:48 | call to method WriteLine | normal |
|
||||
| Switch.cs:158:38:158:47 | $"..." | Switch.cs:158:38:158:47 | $"..." | normal |
|
||||
| Switch.cs:158:40:158:43 | "a = " | Switch.cs:158:40:158:43 | "a = " | normal |
|
||||
| Switch.cs:158:44:158:46 | {...} | Switch.cs:158:44:158:46 | {...} | normal |
|
||||
| Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:45:158:45 | access to local variable s | normal |
|
||||
| Switch.cs:160:13:160:48 | call to method WriteLine | Switch.cs:160:13:160:48 | call to method WriteLine | normal |
|
||||
| Switch.cs:160:13:160:49 | ...; | Switch.cs:160:13:160:48 | call to method WriteLine | normal |
|
||||
| Switch.cs:160:38:160:47 | $"..." | Switch.cs:160:38:160:47 | $"..." | normal |
|
||||
| Switch.cs:160:40:160:43 | "b = " | Switch.cs:160:40:160:43 | "b = " | normal |
|
||||
| Switch.cs:160:44:160:46 | {...} | Switch.cs:160:44:160:46 | {...} | normal |
|
||||
| Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:45:160:45 | access to local variable s | normal |
|
||||
| TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | call to constructor Object | normal |
|
||||
| TypeAccesses.cs:1:7:1:18 | {...} | TypeAccesses.cs:1:7:1:18 | {...} | normal |
|
||||
|
||||
@@ -1679,12 +1679,14 @@
|
||||
| Conditions.cs:147:13:147:49 | ...; | Conditions.cs:147:40:147:43 | "a = " | |
|
||||
| Conditions.cs:147:38:147:47 | $"..." | Conditions.cs:147:13:147:48 | call to method WriteLine | |
|
||||
| Conditions.cs:147:40:147:43 | "a = " | Conditions.cs:147:45:147:45 | access to local variable s | |
|
||||
| Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:38:147:47 | $"..." | |
|
||||
| Conditions.cs:147:44:147:46 | {...} | Conditions.cs:147:38:147:47 | $"..." | |
|
||||
| Conditions.cs:147:45:147:45 | access to local variable s | Conditions.cs:147:44:147:46 | {...} | |
|
||||
| Conditions.cs:149:13:149:48 | call to method WriteLine | Conditions.cs:143:10:143:12 | exit M11 (normal) | |
|
||||
| Conditions.cs:149:13:149:49 | ...; | Conditions.cs:149:40:149:43 | "b = " | |
|
||||
| Conditions.cs:149:38:149:47 | $"..." | Conditions.cs:149:13:149:48 | call to method WriteLine | |
|
||||
| Conditions.cs:149:40:149:43 | "b = " | Conditions.cs:149:45:149:45 | access to local variable s | |
|
||||
| Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:38:149:47 | $"..." | |
|
||||
| Conditions.cs:149:44:149:46 | {...} | Conditions.cs:149:38:149:47 | $"..." | |
|
||||
| Conditions.cs:149:45:149:45 | access to local variable s | Conditions.cs:149:44:149:46 | {...} | |
|
||||
| ExitMethods.cs:6:7:6:17 | call to constructor Object | ExitMethods.cs:6:7:6:17 | {...} | |
|
||||
| ExitMethods.cs:6:7:6:17 | enter ExitMethods | ExitMethods.cs:6:7:6:17 | call to constructor Object | |
|
||||
| ExitMethods.cs:6:7:6:17 | exit ExitMethods (normal) | ExitMethods.cs:6:7:6:17 | exit ExitMethods | |
|
||||
@@ -3528,7 +3530,8 @@
|
||||
| Patterns.cs:10:13:10:43 | ...; | Patterns.cs:10:33:10:36 | "int " | |
|
||||
| Patterns.cs:10:31:10:41 | $"..." | Patterns.cs:10:13:10:42 | call to method WriteLine | |
|
||||
| Patterns.cs:10:33:10:36 | "int " | Patterns.cs:10:38:10:39 | access to local variable i1 | |
|
||||
| Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:10:31:10:41 | $"..." | |
|
||||
| Patterns.cs:10:37:10:40 | {...} | Patterns.cs:10:31:10:41 | $"..." | |
|
||||
| Patterns.cs:10:38:10:39 | access to local variable i1 | Patterns.cs:10:37:10:40 | {...} | |
|
||||
| Patterns.cs:12:14:18:9 | if (...) ... | Patterns.cs:12:18:12:18 | access to local variable o | |
|
||||
| Patterns.cs:12:18:12:18 | access to local variable o | Patterns.cs:12:23:12:31 | String s1 | |
|
||||
| Patterns.cs:12:18:12:31 | [false] ... is ... | Patterns.cs:16:14:18:9 | if (...) ... | false |
|
||||
@@ -3540,7 +3543,8 @@
|
||||
| Patterns.cs:14:13:14:46 | ...; | Patterns.cs:14:33:14:39 | "string " | |
|
||||
| Patterns.cs:14:31:14:44 | $"..." | Patterns.cs:14:13:14:45 | call to method WriteLine | |
|
||||
| Patterns.cs:14:33:14:39 | "string " | Patterns.cs:14:41:14:42 | access to local variable s1 | |
|
||||
| Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:14:31:14:44 | $"..." | |
|
||||
| Patterns.cs:14:40:14:43 | {...} | Patterns.cs:14:31:14:44 | $"..." | |
|
||||
| Patterns.cs:14:41:14:42 | access to local variable s1 | Patterns.cs:14:40:14:43 | {...} | |
|
||||
| Patterns.cs:16:14:18:9 | if (...) ... | Patterns.cs:16:18:16:18 | access to local variable o | |
|
||||
| Patterns.cs:16:18:16:18 | access to local variable o | Patterns.cs:16:23:16:28 | Object v1 | |
|
||||
| Patterns.cs:16:18:16:28 | [false] ... is ... | Patterns.cs:20:9:38:9 | switch (...) {...} | false |
|
||||
@@ -3565,7 +3569,8 @@
|
||||
| Patterns.cs:25:17:25:52 | ...; | Patterns.cs:25:37:25:45 | "positive " | |
|
||||
| Patterns.cs:25:35:25:50 | $"..." | Patterns.cs:25:17:25:51 | call to method WriteLine | |
|
||||
| Patterns.cs:25:37:25:45 | "positive " | Patterns.cs:25:47:25:48 | access to local variable i2 | |
|
||||
| Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:25:35:25:50 | $"..." | |
|
||||
| Patterns.cs:25:46:25:49 | {...} | Patterns.cs:25:35:25:50 | $"..." | |
|
||||
| Patterns.cs:25:47:25:48 | access to local variable i2 | Patterns.cs:25:46:25:49 | {...} | |
|
||||
| Patterns.cs:26:17:26:22 | break; | Patterns.cs:40:9:42:9 | switch (...) {...} | break |
|
||||
| Patterns.cs:27:13:27:24 | case ...: | Patterns.cs:27:18:27:23 | Int32 i3 | |
|
||||
| Patterns.cs:27:18:27:23 | Int32 i3 | Patterns.cs:28:17:28:47 | ...; | match |
|
||||
@@ -3574,7 +3579,8 @@
|
||||
| Patterns.cs:28:17:28:47 | ...; | Patterns.cs:28:37:28:40 | "int " | |
|
||||
| Patterns.cs:28:35:28:45 | $"..." | Patterns.cs:28:17:28:46 | call to method WriteLine | |
|
||||
| Patterns.cs:28:37:28:40 | "int " | Patterns.cs:28:42:28:43 | access to local variable i3 | |
|
||||
| Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:28:35:28:45 | $"..." | |
|
||||
| Patterns.cs:28:41:28:44 | {...} | Patterns.cs:28:35:28:45 | $"..." | |
|
||||
| Patterns.cs:28:42:28:43 | access to local variable i3 | Patterns.cs:28:41:28:44 | {...} | |
|
||||
| Patterns.cs:29:17:29:22 | break; | Patterns.cs:40:9:42:9 | switch (...) {...} | break |
|
||||
| Patterns.cs:30:13:30:27 | case ...: | Patterns.cs:30:18:30:26 | String s2 | |
|
||||
| Patterns.cs:30:18:30:26 | String s2 | Patterns.cs:31:17:31:50 | ...; | match |
|
||||
@@ -3583,7 +3589,8 @@
|
||||
| Patterns.cs:31:17:31:50 | ...; | Patterns.cs:31:37:31:43 | "string " | |
|
||||
| Patterns.cs:31:35:31:48 | $"..." | Patterns.cs:31:17:31:49 | call to method WriteLine | |
|
||||
| Patterns.cs:31:37:31:43 | "string " | Patterns.cs:31:45:31:46 | access to local variable s2 | |
|
||||
| Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:31:35:31:48 | $"..." | |
|
||||
| Patterns.cs:31:44:31:47 | {...} | Patterns.cs:31:35:31:48 | $"..." | |
|
||||
| Patterns.cs:31:45:31:46 | access to local variable s2 | Patterns.cs:31:44:31:47 | {...} | |
|
||||
| Patterns.cs:32:17:32:22 | break; | Patterns.cs:40:9:42:9 | switch (...) {...} | break |
|
||||
| Patterns.cs:33:13:33:24 | case ...: | Patterns.cs:33:18:33:23 | Object v2 | |
|
||||
| Patterns.cs:33:18:33:23 | Object v2 | Patterns.cs:34:17:34:22 | break; | match |
|
||||
@@ -4130,12 +4137,14 @@
|
||||
| Switch.cs:158:13:158:49 | ...; | Switch.cs:158:40:158:43 | "a = " | |
|
||||
| Switch.cs:158:38:158:47 | $"..." | Switch.cs:158:13:158:48 | call to method WriteLine | |
|
||||
| Switch.cs:158:40:158:43 | "a = " | Switch.cs:158:45:158:45 | access to local variable s | |
|
||||
| Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:38:158:47 | $"..." | |
|
||||
| Switch.cs:158:44:158:46 | {...} | Switch.cs:158:38:158:47 | $"..." | |
|
||||
| Switch.cs:158:45:158:45 | access to local variable s | Switch.cs:158:44:158:46 | {...} | |
|
||||
| Switch.cs:160:13:160:48 | call to method WriteLine | Switch.cs:154:10:154:12 | exit M15 (normal) | |
|
||||
| Switch.cs:160:13:160:49 | ...; | Switch.cs:160:40:160:43 | "b = " | |
|
||||
| Switch.cs:160:38:160:47 | $"..." | Switch.cs:160:13:160:48 | call to method WriteLine | |
|
||||
| Switch.cs:160:40:160:43 | "b = " | Switch.cs:160:45:160:45 | access to local variable s | |
|
||||
| Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:38:160:47 | $"..." | |
|
||||
| Switch.cs:160:44:160:46 | {...} | Switch.cs:160:38:160:47 | $"..." | |
|
||||
| Switch.cs:160:45:160:45 | access to local variable s | Switch.cs:160:44:160:46 | {...} | |
|
||||
| TypeAccesses.cs:1:7:1:18 | call to constructor Object | TypeAccesses.cs:1:7:1:18 | {...} | |
|
||||
| TypeAccesses.cs:1:7:1:18 | enter TypeAccesses | TypeAccesses.cs:1:7:1:18 | call to constructor Object | |
|
||||
| TypeAccesses.cs:1:7:1:18 | exit TypeAccesses (normal) | TypeAccesses.cs:1:7:1:18 | exit TypeAccesses | |
|
||||
|
||||
@@ -1332,14 +1332,15 @@ Strings.cs:
|
||||
# 8| 0: [ReturnStmt] return ...;
|
||||
# 8| 0: [InterpolatedStringExpr] $"..."
|
||||
# 8| 0: [StringLiteralUtf16] "This is my int "
|
||||
# 8| 1: [SwitchExpr] ... switch { ... }
|
||||
# 8| -1: [ParameterAccess] access to parameter x
|
||||
# 10| 0: [SwitchCaseExpr] ... => ...
|
||||
# 10| 0: [ConstantPatternExpr,IntLiteral] 42
|
||||
# 10| 2: [StringLiteralUtf16] "forty two"
|
||||
# 11| 1: [SwitchCaseExpr] ... => ...
|
||||
# 11| 0: [DiscardPatternExpr] _
|
||||
# 11| 2: [StringLiteralUtf16] "something else"
|
||||
# 8| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 8| 0: [SwitchExpr] ... switch { ... }
|
||||
# 8| -1: [ParameterAccess] access to parameter x
|
||||
# 10| 0: [SwitchCaseExpr] ... => ...
|
||||
# 10| 0: [ConstantPatternExpr,IntLiteral] 42
|
||||
# 10| 2: [StringLiteralUtf16] "forty two"
|
||||
# 11| 1: [SwitchCaseExpr] ... => ...
|
||||
# 11| 0: [DiscardPatternExpr] _
|
||||
# 11| 2: [StringLiteralUtf16] "something else"
|
||||
# 12| 2: [StringLiteralUtf16] "."
|
||||
# 15| 6: [Method] M2
|
||||
# 15| -1: [TypeMention] Void
|
||||
@@ -1359,7 +1360,8 @@ Strings.cs:
|
||||
# 26| 1: [InterpolatedStringExpr] $"..."
|
||||
# 27| 0: [StringLiteralUtf16] "The nested message
|
||||
# 27| is \""
|
||||
# 28| 1: [LocalVariableAccess] access to local variable message1
|
||||
# 28| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 28| 0: [LocalVariableAccess] access to local variable message1
|
||||
# 28| 2: [StringLiteralUtf16] "\" and everything
|
||||
# 28| spans multiple lines."
|
||||
# 33| 2: [LocalVariableDeclStmt] ... ...;
|
||||
@@ -1368,10 +1370,12 @@ Strings.cs:
|
||||
# 33| 0: [LocalVariableAccess] access to local variable message3
|
||||
# 33| 1: [InterpolatedStringExpr] $"..."
|
||||
# 34| 0: [StringLiteralUtf16] "Show no curly braces: "
|
||||
# 34| 1: [LocalVariableAccess] access to local variable message1
|
||||
# 34| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 34| 0: [LocalVariableAccess] access to local variable message1
|
||||
# 34| 2: [StringLiteralUtf16] "
|
||||
# 34| Show matching set of curly braces: {"
|
||||
# 35| 3: [LocalVariableAccess] access to local variable message2
|
||||
# 35| 3: [InterpolatedStringInsertExpr] {...}
|
||||
# 35| 0: [LocalVariableAccess] access to local variable message2
|
||||
# 35| 4: [StringLiteralUtf16] "}"
|
||||
# 40| 7: [Method] M3
|
||||
# 40| -1: [TypeMention] Void
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:26:25:36 | nameof(...) |
|
||||
| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:25:25:37 | {...} |
|
||||
| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:38:25:41 | " is " |
|
||||
| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:43:25:45 | access to local variable foo |
|
||||
| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:42:25:46 | {...} |
|
||||
| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:47:25:52 | ", and " |
|
||||
| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:54:25:64 | nameof(...) |
|
||||
| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:53:25:65 | {...} |
|
||||
| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:66:25:77 | " has length " |
|
||||
| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:79:25:94 | ... ?? ... |
|
||||
| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:20:27:30 | nameof(...) |
|
||||
| csharp6.cs:25:23:25:96 | $"..." | csharp6.cs:25:78:25:95 | {...} |
|
||||
| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:19:27:31 | {...} |
|
||||
| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:32:27:35 | " is " |
|
||||
| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:37:27:39 | access to local variable foo |
|
||||
| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:36:27:40 | {...} |
|
||||
| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:41:27:46 | ", and " |
|
||||
| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:48:27:58 | nameof(...) |
|
||||
| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:47:27:59 | {...} |
|
||||
| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:60:27:71 | " has length " |
|
||||
| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:73:27:88 | ... ?? ... |
|
||||
| csharp6.cs:27:16:27:90 | $"..." | csharp6.cs:27:72:27:89 | {...} |
|
||||
|
||||
@@ -30,33 +30,41 @@ csharp6.cs:
|
||||
# 25| 1: [ExprStmt] ...;
|
||||
# 25| 0: [MethodCall] call to method WriteLine
|
||||
# 25| 0: [InterpolatedStringExpr] $"..."
|
||||
# 25| 0: [NameOfExpr] nameof(...)
|
||||
# 25| 0: [LocalVariableAccess] access to local variable foo
|
||||
# 25| 0: [InterpolatedStringInsertExpr] {...}
|
||||
# 25| 0: [NameOfExpr] nameof(...)
|
||||
# 25| 0: [LocalVariableAccess] access to local variable foo
|
||||
# 25| 1: [StringLiteralUtf16] " is "
|
||||
# 25| 2: [LocalVariableAccess] access to local variable foo
|
||||
# 25| 2: [InterpolatedStringInsertExpr] {...}
|
||||
# 25| 0: [LocalVariableAccess] access to local variable foo
|
||||
# 25| 3: [StringLiteralUtf16] ", and "
|
||||
# 25| 4: [NameOfExpr] nameof(...)
|
||||
# 25| 0: [LocalVariableAccess] access to local variable bar
|
||||
# 25| 4: [InterpolatedStringInsertExpr] {...}
|
||||
# 25| 0: [NameOfExpr] nameof(...)
|
||||
# 25| 0: [LocalVariableAccess] access to local variable bar
|
||||
# 25| 5: [StringLiteralUtf16] " has length "
|
||||
# 25| 6: [NullCoalescingExpr] ... ?? ...
|
||||
# 25| 0: [PropertyCall] access to property Length
|
||||
# 25| -1: [LocalVariableAccess] access to local variable bar
|
||||
# 25| 1: [IntLiteral] 0
|
||||
# 25| 6: [InterpolatedStringInsertExpr] {...}
|
||||
# 25| 0: [NullCoalescingExpr] ... ?? ...
|
||||
# 25| 0: [PropertyCall] access to property Length
|
||||
# 25| -1: [LocalVariableAccess] access to local variable bar
|
||||
# 25| 1: [IntLiteral] 0
|
||||
# 27| 2: [ExprStmt] ...;
|
||||
# 27| 0: [MethodCall] call to method Fn
|
||||
# 27| 0: [InterpolatedStringExpr] $"..."
|
||||
# 27| 0: [NameOfExpr] nameof(...)
|
||||
# 27| 0: [LocalVariableAccess] access to local variable foo
|
||||
# 27| 0: [InterpolatedStringInsertExpr] {...}
|
||||
# 27| 0: [NameOfExpr] nameof(...)
|
||||
# 27| 0: [LocalVariableAccess] access to local variable foo
|
||||
# 27| 1: [StringLiteralUtf16] " is "
|
||||
# 27| 2: [LocalVariableAccess] access to local variable foo
|
||||
# 27| 2: [InterpolatedStringInsertExpr] {...}
|
||||
# 27| 0: [LocalVariableAccess] access to local variable foo
|
||||
# 27| 3: [StringLiteralUtf16] ", and "
|
||||
# 27| 4: [NameOfExpr] nameof(...)
|
||||
# 27| 0: [LocalVariableAccess] access to local variable bar
|
||||
# 27| 4: [InterpolatedStringInsertExpr] {...}
|
||||
# 27| 0: [NameOfExpr] nameof(...)
|
||||
# 27| 0: [LocalVariableAccess] access to local variable bar
|
||||
# 27| 5: [StringLiteralUtf16] " has length "
|
||||
# 27| 6: [NullCoalescingExpr] ... ?? ...
|
||||
# 27| 0: [PropertyCall] access to property Length
|
||||
# 27| -1: [LocalVariableAccess] access to local variable bar
|
||||
# 27| 1: [IntLiteral] 0
|
||||
# 27| 6: [InterpolatedStringInsertExpr] {...}
|
||||
# 27| 0: [NullCoalescingExpr] ... ?? ...
|
||||
# 27| 0: [PropertyCall] access to property Length
|
||||
# 27| -1: [LocalVariableAccess] access to local variable bar
|
||||
# 27| 1: [IntLiteral] 0
|
||||
# 29| 3: [LocalVariableDeclStmt] ... ...;
|
||||
# 29| 0: [LocalVariableDeclAndInitExpr] Nullable<Boolean> anythingInBar = ...
|
||||
# 29| -1: [TypeMention] bool?
|
||||
|
||||
@@ -110,4 +110,5 @@ csharp73.cs:
|
||||
# 51| 0: [TypeMention] Console
|
||||
# 51| 0: [InterpolatedStringExpr] $"..."
|
||||
# 51| 0: [StringLiteralUtf16] "x is "
|
||||
# 51| 1: [LocalVariableAccess] access to local variable x
|
||||
# 51| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 51| 0: [LocalVariableAccess] access to local variable x
|
||||
|
||||
@@ -24,7 +24,8 @@
|
||||
| CSharp7.cs:255:17:255:45 | ...; | CSharp7.cs:255:37:255:38 | "x " | semmle.label | successor |
|
||||
| CSharp7.cs:255:35:255:43 | $"..." | CSharp7.cs:255:17:255:44 | call to method WriteLine | semmle.label | successor |
|
||||
| CSharp7.cs:255:37:255:38 | "x " | CSharp7.cs:255:40:255:41 | access to local variable s4 | semmle.label | successor |
|
||||
| CSharp7.cs:255:40:255:41 | access to local variable s4 | CSharp7.cs:255:35:255:43 | $"..." | semmle.label | successor |
|
||||
| CSharp7.cs:255:39:255:42 | {...} | CSharp7.cs:255:35:255:43 | $"..." | semmle.label | successor |
|
||||
| CSharp7.cs:255:40:255:41 | access to local variable s4 | CSharp7.cs:255:39:255:42 | {...} | semmle.label | successor |
|
||||
| CSharp7.cs:256:17:256:22 | break; | CSharp7.cs:230:10:230:13 | exit Test (normal) | semmle.label | break |
|
||||
| CSharp7.cs:257:13:257:36 | case ...: | CSharp7.cs:257:18:257:23 | Int32 i2 | semmle.label | successor |
|
||||
| CSharp7.cs:257:18:257:23 | Int32 i2 | CSharp7.cs:257:30:257:31 | access to local variable i2 | semmle.label | match |
|
||||
@@ -37,7 +38,8 @@
|
||||
| CSharp7.cs:258:17:258:52 | ...; | CSharp7.cs:258:37:258:45 | "positive " | semmle.label | successor |
|
||||
| CSharp7.cs:258:35:258:50 | $"..." | CSharp7.cs:258:17:258:51 | call to method WriteLine | semmle.label | successor |
|
||||
| CSharp7.cs:258:37:258:45 | "positive " | CSharp7.cs:258:47:258:48 | access to local variable i2 | semmle.label | successor |
|
||||
| CSharp7.cs:258:47:258:48 | access to local variable i2 | CSharp7.cs:258:35:258:50 | $"..." | semmle.label | successor |
|
||||
| CSharp7.cs:258:46:258:49 | {...} | CSharp7.cs:258:35:258:50 | $"..." | semmle.label | successor |
|
||||
| CSharp7.cs:258:47:258:48 | access to local variable i2 | CSharp7.cs:258:46:258:49 | {...} | semmle.label | successor |
|
||||
| CSharp7.cs:259:17:259:22 | break; | CSharp7.cs:230:10:230:13 | exit Test (normal) | semmle.label | break |
|
||||
| CSharp7.cs:260:13:260:24 | case ...: | CSharp7.cs:260:18:260:23 | Int32 i3 | semmle.label | successor |
|
||||
| CSharp7.cs:260:18:260:23 | Int32 i3 | CSharp7.cs:261:17:261:47 | ...; | semmle.label | match |
|
||||
@@ -46,7 +48,8 @@
|
||||
| CSharp7.cs:261:17:261:47 | ...; | CSharp7.cs:261:37:261:40 | "int " | semmle.label | successor |
|
||||
| CSharp7.cs:261:35:261:45 | $"..." | CSharp7.cs:261:17:261:46 | call to method WriteLine | semmle.label | successor |
|
||||
| CSharp7.cs:261:37:261:40 | "int " | CSharp7.cs:261:42:261:43 | access to local variable i3 | semmle.label | successor |
|
||||
| CSharp7.cs:261:42:261:43 | access to local variable i3 | CSharp7.cs:261:35:261:45 | $"..." | semmle.label | successor |
|
||||
| CSharp7.cs:261:41:261:44 | {...} | CSharp7.cs:261:35:261:45 | $"..." | semmle.label | successor |
|
||||
| CSharp7.cs:261:42:261:43 | access to local variable i3 | CSharp7.cs:261:41:261:44 | {...} | semmle.label | successor |
|
||||
| CSharp7.cs:262:17:262:22 | break; | CSharp7.cs:230:10:230:13 | exit Test (normal) | semmle.label | break |
|
||||
| CSharp7.cs:263:13:263:27 | case ...: | CSharp7.cs:263:18:263:26 | String s2 | semmle.label | successor |
|
||||
| CSharp7.cs:263:18:263:26 | String s2 | CSharp7.cs:264:17:264:50 | ...; | semmle.label | match |
|
||||
@@ -55,7 +58,8 @@
|
||||
| CSharp7.cs:264:17:264:50 | ...; | CSharp7.cs:264:37:264:43 | "string " | semmle.label | successor |
|
||||
| CSharp7.cs:264:35:264:48 | $"..." | CSharp7.cs:264:17:264:49 | call to method WriteLine | semmle.label | successor |
|
||||
| CSharp7.cs:264:37:264:43 | "string " | CSharp7.cs:264:45:264:46 | access to local variable s2 | semmle.label | successor |
|
||||
| CSharp7.cs:264:45:264:46 | access to local variable s2 | CSharp7.cs:264:35:264:48 | $"..." | semmle.label | successor |
|
||||
| CSharp7.cs:264:44:264:47 | {...} | CSharp7.cs:264:35:264:48 | $"..." | semmle.label | successor |
|
||||
| CSharp7.cs:264:45:264:46 | access to local variable s2 | CSharp7.cs:264:44:264:47 | {...} | semmle.label | successor |
|
||||
| CSharp7.cs:265:17:265:22 | break; | CSharp7.cs:230:10:230:13 | exit Test (normal) | semmle.label | break |
|
||||
| CSharp7.cs:266:13:266:26 | case ...: | CSharp7.cs:266:18:266:23 | access to type Double | semmle.label | successor |
|
||||
| CSharp7.cs:266:18:266:23 | access to type Double | CSharp7.cs:267:17:267:44 | ...; | semmle.label | match |
|
||||
|
||||
@@ -254,7 +254,8 @@
|
||||
| CSharp7.cs:233:28:233:33 | ... > ... | CSharp7.cs:233:13:233:33 | [true] ... && ... |
|
||||
| CSharp7.cs:235:13:235:42 | [input] SSA phi read(o) | CSharp7.cs:248:17:248:17 | access to local variable o |
|
||||
| CSharp7.cs:235:33:235:36 | "int " | CSharp7.cs:235:31:235:41 | $"..." |
|
||||
| CSharp7.cs:235:38:235:39 | access to local variable i1 | CSharp7.cs:235:31:235:41 | $"..." |
|
||||
| CSharp7.cs:235:37:235:40 | {...} | CSharp7.cs:235:31:235:41 | $"..." |
|
||||
| CSharp7.cs:235:38:235:39 | access to local variable i1 | CSharp7.cs:235:37:235:40 | {...} |
|
||||
| CSharp7.cs:237:18:237:18 | access to local variable o | CSharp7.cs:237:23:237:31 | String s1 |
|
||||
| CSharp7.cs:237:18:237:18 | access to local variable o | CSharp7.cs:239:13:239:45 | [input] SSA phi read(o) |
|
||||
| CSharp7.cs:237:18:237:18 | access to local variable o | CSharp7.cs:241:18:241:18 | access to local variable o |
|
||||
@@ -262,7 +263,8 @@
|
||||
| CSharp7.cs:237:23:237:31 | String s1 | CSharp7.cs:237:23:237:31 | SSA def(s1) |
|
||||
| CSharp7.cs:239:13:239:45 | [input] SSA phi read(o) | CSharp7.cs:248:17:248:17 | access to local variable o |
|
||||
| CSharp7.cs:239:33:239:39 | "string " | CSharp7.cs:239:31:239:44 | $"..." |
|
||||
| CSharp7.cs:239:41:239:42 | access to local variable s1 | CSharp7.cs:239:31:239:44 | $"..." |
|
||||
| CSharp7.cs:239:40:239:43 | {...} | CSharp7.cs:239:31:239:44 | $"..." |
|
||||
| CSharp7.cs:239:41:239:42 | access to local variable s1 | CSharp7.cs:239:40:239:43 | {...} |
|
||||
| CSharp7.cs:241:18:241:18 | access to local variable o | CSharp7.cs:242:9:243:9 | [input] SSA phi read(o) |
|
||||
| CSharp7.cs:241:18:241:18 | access to local variable o | CSharp7.cs:244:18:244:18 | access to local variable o |
|
||||
| CSharp7.cs:242:9:243:9 | [input] SSA phi read(o) | CSharp7.cs:248:17:248:17 | access to local variable o |
|
||||
@@ -282,21 +284,25 @@
|
||||
| CSharp7.cs:254:32:254:40 | SSA def(s4) | CSharp7.cs:255:40:255:41 | access to local variable s4 |
|
||||
| CSharp7.cs:254:32:254:40 | String s4 | CSharp7.cs:254:32:254:40 | SSA def(s4) |
|
||||
| CSharp7.cs:255:37:255:38 | "x " | CSharp7.cs:255:35:255:43 | $"..." |
|
||||
| CSharp7.cs:255:40:255:41 | access to local variable s4 | CSharp7.cs:255:35:255:43 | $"..." |
|
||||
| CSharp7.cs:255:39:255:42 | {...} | CSharp7.cs:255:35:255:43 | $"..." |
|
||||
| CSharp7.cs:255:40:255:41 | access to local variable s4 | CSharp7.cs:255:39:255:42 | {...} |
|
||||
| CSharp7.cs:257:18:257:23 | Int32 i2 | CSharp7.cs:257:18:257:23 | SSA def(i2) |
|
||||
| CSharp7.cs:257:18:257:23 | SSA def(i2) | CSharp7.cs:257:30:257:31 | access to local variable i2 |
|
||||
| CSharp7.cs:257:30:257:31 | access to local variable i2 | CSharp7.cs:257:30:257:35 | ... > ... |
|
||||
| CSharp7.cs:257:30:257:31 | access to local variable i2 | CSharp7.cs:258:47:258:48 | access to local variable i2 |
|
||||
| CSharp7.cs:258:37:258:45 | "positive " | CSharp7.cs:258:35:258:50 | $"..." |
|
||||
| CSharp7.cs:258:47:258:48 | access to local variable i2 | CSharp7.cs:258:35:258:50 | $"..." |
|
||||
| CSharp7.cs:258:46:258:49 | {...} | CSharp7.cs:258:35:258:50 | $"..." |
|
||||
| CSharp7.cs:258:47:258:48 | access to local variable i2 | CSharp7.cs:258:46:258:49 | {...} |
|
||||
| CSharp7.cs:260:18:260:23 | Int32 i3 | CSharp7.cs:260:18:260:23 | SSA def(i3) |
|
||||
| CSharp7.cs:260:18:260:23 | SSA def(i3) | CSharp7.cs:261:42:261:43 | access to local variable i3 |
|
||||
| CSharp7.cs:261:37:261:40 | "int " | CSharp7.cs:261:35:261:45 | $"..." |
|
||||
| CSharp7.cs:261:42:261:43 | access to local variable i3 | CSharp7.cs:261:35:261:45 | $"..." |
|
||||
| CSharp7.cs:261:41:261:44 | {...} | CSharp7.cs:261:35:261:45 | $"..." |
|
||||
| CSharp7.cs:261:42:261:43 | access to local variable i3 | CSharp7.cs:261:41:261:44 | {...} |
|
||||
| CSharp7.cs:263:18:263:26 | SSA def(s2) | CSharp7.cs:264:45:264:46 | access to local variable s2 |
|
||||
| CSharp7.cs:263:18:263:26 | String s2 | CSharp7.cs:263:18:263:26 | SSA def(s2) |
|
||||
| CSharp7.cs:264:37:264:43 | "string " | CSharp7.cs:264:35:264:48 | $"..." |
|
||||
| CSharp7.cs:264:45:264:46 | access to local variable s2 | CSharp7.cs:264:35:264:48 | $"..." |
|
||||
| CSharp7.cs:264:44:264:47 | {...} | CSharp7.cs:264:35:264:48 | $"..." |
|
||||
| CSharp7.cs:264:45:264:46 | access to local variable s2 | CSharp7.cs:264:44:264:47 | {...} |
|
||||
| CSharp7.cs:282:13:282:16 | access to local variable dict | CSharp7.cs:282:13:282:48 | SSA def(dict) |
|
||||
| CSharp7.cs:282:13:282:48 | SSA def(dict) | CSharp7.cs:283:20:283:23 | access to local variable dict |
|
||||
| CSharp7.cs:282:20:282:48 | object creation of type Dictionary<Int32,String> | CSharp7.cs:282:13:282:16 | access to local variable dict |
|
||||
|
||||
@@ -727,7 +727,8 @@ CSharp7.cs:
|
||||
# 235| 0: [TypeMention] Console
|
||||
# 235| 0: [InterpolatedStringExpr] $"..."
|
||||
# 235| 0: [StringLiteralUtf16] "int "
|
||||
# 235| 1: [LocalVariableAccess] access to local variable i1
|
||||
# 235| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 235| 0: [LocalVariableAccess] access to local variable i1
|
||||
# 237| 2: [IfStmt] if (...) ...
|
||||
# 237| 0: [IsExpr] ... is ...
|
||||
# 237| 0: [LocalVariableAccess] access to local variable o
|
||||
@@ -740,7 +741,8 @@ CSharp7.cs:
|
||||
# 239| 0: [TypeMention] Console
|
||||
# 239| 0: [InterpolatedStringExpr] $"..."
|
||||
# 239| 0: [StringLiteralUtf16] "string "
|
||||
# 239| 1: [LocalVariableAccess] access to local variable s1
|
||||
# 239| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 239| 0: [LocalVariableAccess] access to local variable s1
|
||||
# 241| 2: [IfStmt] if (...) ...
|
||||
# 241| 0: [IsExpr] ... is ...
|
||||
# 241| 0: [LocalVariableAccess] access to local variable o
|
||||
@@ -775,7 +777,8 @@ CSharp7.cs:
|
||||
# 255| 0: [TypeMention] Console
|
||||
# 255| 0: [InterpolatedStringExpr] $"..."
|
||||
# 255| 0: [StringLiteralUtf16] "x "
|
||||
# 255| 1: [LocalVariableAccess] access to local variable s4
|
||||
# 255| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 255| 0: [LocalVariableAccess] access to local variable s4
|
||||
# 256| 6: [BreakStmt] break;
|
||||
# 257| 7: [CaseStmt] case ...:
|
||||
# 257| 0: [VariablePatternExpr] Int32 i2
|
||||
@@ -789,7 +792,8 @@ CSharp7.cs:
|
||||
# 258| 0: [TypeMention] Console
|
||||
# 258| 0: [InterpolatedStringExpr] $"..."
|
||||
# 258| 0: [StringLiteralUtf16] "positive "
|
||||
# 258| 1: [LocalVariableAccess] access to local variable i2
|
||||
# 258| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 258| 0: [LocalVariableAccess] access to local variable i2
|
||||
# 259| 9: [BreakStmt] break;
|
||||
# 260| 10: [CaseStmt] case ...:
|
||||
# 260| 0: [VariablePatternExpr] Int32 i3
|
||||
@@ -800,7 +804,8 @@ CSharp7.cs:
|
||||
# 261| 0: [TypeMention] Console
|
||||
# 261| 0: [InterpolatedStringExpr] $"..."
|
||||
# 261| 0: [StringLiteralUtf16] "int "
|
||||
# 261| 1: [LocalVariableAccess] access to local variable i3
|
||||
# 261| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 261| 0: [LocalVariableAccess] access to local variable i3
|
||||
# 262| 12: [BreakStmt] break;
|
||||
# 263| 13: [CaseStmt] case ...:
|
||||
# 263| 0: [VariablePatternExpr] String s2
|
||||
@@ -811,7 +816,8 @@ CSharp7.cs:
|
||||
# 264| 0: [TypeMention] Console
|
||||
# 264| 0: [InterpolatedStringExpr] $"..."
|
||||
# 264| 0: [StringLiteralUtf16] "string "
|
||||
# 264| 1: [LocalVariableAccess] access to local variable s2
|
||||
# 264| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 264| 0: [LocalVariableAccess] access to local variable s2
|
||||
# 265| 15: [BreakStmt] break;
|
||||
# 266| 16: [CaseStmt] case ...:
|
||||
# 266| 0: [TypeAccessPatternExpr] access to type Double
|
||||
|
||||
@@ -4,12 +4,14 @@ AlternateInterpolatedStrings.cs:
|
||||
# 5| -1: [TypeMention] string
|
||||
# 5| 1: [InterpolatedStringExpr] $"..."
|
||||
# 5| 0: [StringLiteralUtf16] "C:"
|
||||
# 5| 1: [IntLiteral] 12
|
||||
# 5| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 5| 0: [IntLiteral] 12
|
||||
# 6| 6: [Field] s2
|
||||
# 6| -1: [TypeMention] string
|
||||
# 6| 1: [InterpolatedStringExpr] $"..."
|
||||
# 6| 0: [StringLiteralUtf16] "C:"
|
||||
# 6| 1: [IntLiteral] 12
|
||||
# 6| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 6| 0: [IntLiteral] 12
|
||||
AsyncStreams.cs:
|
||||
# 6| [Class] AsyncStreams
|
||||
# 8| 5: [Method] Items
|
||||
|
||||
@@ -1008,8 +1008,9 @@ Record.cs:
|
||||
# 49| 0: [LocalVariableAccess] access to local variable s
|
||||
# 50| 2: [ReturnStmt] return ...;
|
||||
# 50| 0: [InterpolatedStringExpr] $"..."
|
||||
# 50| 0: [MethodCall] call to method ToString
|
||||
# 50| -1: [LocalVariableAccess] access to local variable s
|
||||
# 50| 0: [InterpolatedStringInsertExpr] {...}
|
||||
# 50| 0: [MethodCall] call to method ToString
|
||||
# 50| -1: [LocalVariableAccess] access to local variable s
|
||||
# 50| 1: [StringLiteralUtf16] " is a dog"
|
||||
# 54| [RecordClass] R1
|
||||
# 54| 12: [NEOperator] !=
|
||||
|
||||
@@ -68,8 +68,9 @@ implicitToString.cs:
|
||||
# 32| 0: [LocalVariableAccess] access to local variable x2
|
||||
# 32| 1: [InterpolatedStringExpr] $"..."
|
||||
# 32| 0: [StringLiteralUtf16] "Hello "
|
||||
# 32| 1: [MethodCall] call to method ToString
|
||||
# 32| -1: [LocalVariableAccess] access to local variable x1
|
||||
# 32| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 32| 0: [MethodCall] call to method ToString
|
||||
# 32| -1: [LocalVariableAccess] access to local variable x1
|
||||
# 33| 2: [ExprStmt] ...;
|
||||
# 33| 0: [MethodCall] call to method Sink
|
||||
# 33| 0: [LocalVariableAccess] access to local variable x2
|
||||
@@ -88,8 +89,9 @@ implicitToString.cs:
|
||||
# 39| 0: [LocalVariableAccess] access to local variable x2
|
||||
# 39| 1: [InterpolatedStringExpr] $"..."
|
||||
# 39| 0: [StringLiteralUtf16] "Hello "
|
||||
# 39| 1: [MethodCall] call to method ToString
|
||||
# 39| -1: [LocalVariableAccess] access to local variable x1
|
||||
# 39| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 39| 0: [MethodCall] call to method ToString
|
||||
# 39| -1: [LocalVariableAccess] access to local variable x1
|
||||
# 40| 2: [ExprStmt] ...;
|
||||
# 40| 0: [MethodCall] call to method Sink
|
||||
# 40| 0: [LocalVariableAccess] access to local variable x2
|
||||
|
||||
@@ -546,12 +546,14 @@
|
||||
| LocalDataFlow.cs:273:13:273:36 | SSA def(sink69) | LocalDataFlow.cs:274:15:274:20 | access to local variable sink69 |
|
||||
| LocalDataFlow.cs:273:22:273:36 | $"..." | LocalDataFlow.cs:273:13:273:18 | access to local variable sink69 |
|
||||
| LocalDataFlow.cs:273:24:273:28 | "test " | LocalDataFlow.cs:273:22:273:36 | $"..." |
|
||||
| LocalDataFlow.cs:273:30:273:34 | access to local variable sink1 | LocalDataFlow.cs:273:22:273:36 | $"..." |
|
||||
| LocalDataFlow.cs:273:29:273:35 | {...} | LocalDataFlow.cs:273:22:273:36 | $"..." |
|
||||
| LocalDataFlow.cs:273:30:273:34 | access to local variable sink1 | LocalDataFlow.cs:273:29:273:35 | {...} |
|
||||
| LocalDataFlow.cs:277:9:277:16 | access to local variable nonSink0 | LocalDataFlow.cs:277:9:277:37 | SSA def(nonSink0) |
|
||||
| LocalDataFlow.cs:277:9:277:37 | SSA def(nonSink0) | LocalDataFlow.cs:278:15:278:22 | access to local variable nonSink0 |
|
||||
| LocalDataFlow.cs:277:20:277:37 | $"..." | LocalDataFlow.cs:277:9:277:16 | access to local variable nonSink0 |
|
||||
| LocalDataFlow.cs:277:22:277:26 | "test " | LocalDataFlow.cs:277:20:277:37 | $"..." |
|
||||
| LocalDataFlow.cs:277:28:277:35 | access to local variable nonSink0 | LocalDataFlow.cs:277:20:277:37 | $"..." |
|
||||
| LocalDataFlow.cs:277:27:277:36 | {...} | LocalDataFlow.cs:277:20:277:37 | $"..." |
|
||||
| LocalDataFlow.cs:277:28:277:35 | access to local variable nonSink0 | LocalDataFlow.cs:277:27:277:36 | {...} |
|
||||
| LocalDataFlow.cs:278:15:278:22 | [post] access to local variable nonSink0 | LocalDataFlow.cs:285:31:285:38 | access to local variable nonSink0 |
|
||||
| LocalDataFlow.cs:278:15:278:22 | access to local variable nonSink0 | LocalDataFlow.cs:285:31:285:38 | access to local variable nonSink0 |
|
||||
| LocalDataFlow.cs:281:13:281:18 | access to local variable sink70 | LocalDataFlow.cs:281:13:281:34 | SSA def(sink70) |
|
||||
@@ -1176,8 +1178,10 @@
|
||||
| Splitting.cs:56:13:56:19 | [b (line 46): true] $"..." | Splitting.cs:56:9:56:9 | access to local variable x |
|
||||
| Splitting.cs:56:15:56:15 | [b (line 46): false] "c" | Splitting.cs:56:13:56:19 | [b (line 46): false] $"..." |
|
||||
| Splitting.cs:56:15:56:15 | [b (line 46): true] "c" | Splitting.cs:56:13:56:19 | [b (line 46): true] $"..." |
|
||||
| Splitting.cs:56:17:56:17 | [b (line 46): false] access to local variable x | Splitting.cs:56:13:56:19 | [b (line 46): false] $"..." |
|
||||
| Splitting.cs:56:17:56:17 | [b (line 46): true] access to local variable x | Splitting.cs:56:13:56:19 | [b (line 46): true] $"..." |
|
||||
| Splitting.cs:56:16:56:18 | [b (line 46): false] {...} | Splitting.cs:56:13:56:19 | [b (line 46): false] $"..." |
|
||||
| Splitting.cs:56:16:56:18 | [b (line 46): true] {...} | Splitting.cs:56:13:56:19 | [b (line 46): true] $"..." |
|
||||
| Splitting.cs:56:17:56:17 | [b (line 46): false] access to local variable x | Splitting.cs:56:16:56:18 | [b (line 46): false] {...} |
|
||||
| Splitting.cs:56:17:56:17 | [b (line 46): true] access to local variable x | Splitting.cs:56:16:56:18 | [b (line 46): true] {...} |
|
||||
| Splitting.cs:57:13:57:24 | [b (line 46): false] access to field Item1 | Splitting.cs:57:9:57:9 | access to local variable x |
|
||||
| Splitting.cs:57:13:57:24 | [b (line 46): true] access to field Item1 | Splitting.cs:57:9:57:9 | access to local variable x |
|
||||
| Splitting.cs:57:17:57:17 | [b (line 46): false] access to local variable y | Splitting.cs:58:27:58:27 | [b (line 46): false] access to local variable y |
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
StringInterpolation.cs:
|
||||
# 3| [Class] MyStringInterpolationClass
|
||||
# 6| 5: [Method] M
|
||||
# 6| -1: [TypeMention] Void
|
||||
# 7| 4: [BlockStmt] {...}
|
||||
# 8| 0: [LocalVariableDeclStmt] ... ...;
|
||||
# 8| 0: [LocalVariableDeclAndInitExpr] Single i = ...
|
||||
# 8| -1: [TypeMention] float
|
||||
# 8| 0: [LocalVariableAccess] access to local variable i
|
||||
# 8| 1: [FloatLiteral] 3.14159
|
||||
# 9| 1: [LocalConstantDeclStmt] const ... ...;
|
||||
# 9| 0: [LocalVariableDeclAndInitExpr] Int32 align = ...
|
||||
# 9| -1: [TypeMention] int
|
||||
# 9| 0: [LocalVariableAccess] access to local variable align
|
||||
# 9| 1: [IntLiteral] 5
|
||||
# 10| 2: [LocalVariableDeclStmt] ... ...;
|
||||
# 10| 0: [LocalVariableDeclAndInitExpr] String x1 = ...
|
||||
# 10| -1: [TypeMention] string
|
||||
# 10| 0: [LocalVariableAccess] access to local variable x1
|
||||
# 10| 1: [InterpolatedStringExpr] $"..."
|
||||
# 10| 0: [StringLiteralUtf16] "Hello, Pi "
|
||||
# 10| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 10| 0: [LocalVariableAccess] access to local variable i
|
||||
# 11| 3: [LocalVariableDeclStmt] ... ...;
|
||||
# 11| 0: [LocalVariableDeclAndInitExpr] String x2 = ...
|
||||
# 11| -1: [TypeMention] string
|
||||
# 11| 0: [LocalVariableAccess] access to local variable x2
|
||||
# 11| 1: [InterpolatedStringExpr] $"..."
|
||||
# 11| 0: [StringLiteralUtf16] "Hello, Pi "
|
||||
# 11| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 11| 0: [LocalVariableAccess] access to local variable i
|
||||
# 11| 2: [StringLiteralUtf16] "F1"
|
||||
# 12| 4: [LocalVariableDeclStmt] ... ...;
|
||||
# 12| 0: [LocalVariableDeclAndInitExpr] String x3 = ...
|
||||
# 12| -1: [TypeMention] string
|
||||
# 12| 0: [LocalVariableAccess] access to local variable x3
|
||||
# 12| 1: [InterpolatedStringExpr] $"..."
|
||||
# 12| 0: [StringLiteralUtf16] "Hello, Pi "
|
||||
# 12| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 12| 0: [LocalVariableAccess] access to local variable i
|
||||
# 12| 1: [IntLiteral] 6
|
||||
# 13| 5: [LocalVariableDeclStmt] ... ...;
|
||||
# 13| 0: [LocalVariableDeclAndInitExpr] String x4 = ...
|
||||
# 13| -1: [TypeMention] string
|
||||
# 13| 0: [LocalVariableAccess] access to local variable x4
|
||||
# 13| 1: [InterpolatedStringExpr] $"..."
|
||||
# 13| 0: [StringLiteralUtf16] "Hello, Pi "
|
||||
# 13| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 13| 0: [LocalVariableAccess] access to local variable i
|
||||
# 13| 1: [IntLiteral] 6
|
||||
# 13| 2: [StringLiteralUtf16] "F3"
|
||||
# 14| 6: [LocalVariableDeclStmt] ... ...;
|
||||
# 14| 0: [LocalVariableDeclAndInitExpr] String x5 = ...
|
||||
# 14| -1: [TypeMention] string
|
||||
# 14| 0: [LocalVariableAccess] access to local variable x5
|
||||
# 14| 1: [InterpolatedStringExpr] $"..."
|
||||
# 14| 0: [StringLiteralUtf16] "Hello, Pi "
|
||||
# 14| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 14| 0: [LocalVariableAccess] access to local variable i
|
||||
# 14| 1: [LocalVariableAccess] access to local variable align
|
||||
# 15| 7: [LocalVariableDeclStmt] ... ...;
|
||||
# 15| 0: [LocalVariableDeclAndInitExpr] String x6 = ...
|
||||
# 15| -1: [TypeMention] string
|
||||
# 15| 0: [LocalVariableAccess] access to local variable x6
|
||||
# 15| 1: [InterpolatedStringExpr] $"..."
|
||||
# 15| 0: [StringLiteralUtf16] "Hello, Pi "
|
||||
# 15| 1: [InterpolatedStringInsertExpr] {...}
|
||||
# 15| 0: [LocalVariableAccess] access to local variable i
|
||||
# 15| 1: [LocalVariableAccess] access to local variable align
|
||||
# 15| 2: [StringLiteralUtf16] "F2"
|
||||
@@ -0,0 +1 @@
|
||||
shared/PrintAst.ql
|
||||
@@ -0,0 +1,17 @@
|
||||
using System;
|
||||
|
||||
public class MyStringInterpolationClass
|
||||
{
|
||||
|
||||
public void M()
|
||||
{
|
||||
float i = 3.14159f;
|
||||
const int align = 5;
|
||||
var x1 = $"Hello, Pi {i}";
|
||||
var x2 = $"Hello, Pi {i:F1}";
|
||||
var x3 = $"Hello, Pi {i,6}";
|
||||
var x4 = $"Hello, Pi {i,6:F3}";
|
||||
var x5 = $"Hello, Pi {i,align}";
|
||||
var x6 = $"Hello, Pi {i,align:F2}";
|
||||
}
|
||||
}
|
||||
2
csharp/ql/test/library-tests/stringinterpolation/options
Normal file
2
csharp/ql/test/library-tests/stringinterpolation/options
Normal file
@@ -0,0 +1,2 @@
|
||||
semmle-extractor-options: /nostdlib /noconfig
|
||||
semmle-extractor-options: --load-sources-from-project:${testdir}/../../resources/stubs/_frameworks/Microsoft.NETCore.App/Microsoft.NETCore.App.csproj
|
||||
@@ -0,0 +1,23 @@
|
||||
inserts
|
||||
| StringInterpolation.cs:10:18:10:33 | $"..." | StringInterpolation.cs:10:31:10:31 | access to local variable i |
|
||||
| StringInterpolation.cs:11:18:11:36 | $"..." | StringInterpolation.cs:11:31:11:31 | access to local variable i |
|
||||
| StringInterpolation.cs:12:18:12:35 | $"..." | StringInterpolation.cs:12:31:12:31 | access to local variable i |
|
||||
| StringInterpolation.cs:13:18:13:38 | $"..." | StringInterpolation.cs:13:31:13:31 | access to local variable i |
|
||||
| StringInterpolation.cs:14:18:14:39 | $"..." | StringInterpolation.cs:14:31:14:31 | access to local variable i |
|
||||
| StringInterpolation.cs:15:18:15:42 | $"..." | StringInterpolation.cs:15:31:15:31 | access to local variable i |
|
||||
texts
|
||||
| StringInterpolation.cs:10:18:10:33 | $"..." | StringInterpolation.cs:10:20:10:29 | "Hello, Pi " |
|
||||
| StringInterpolation.cs:11:18:11:36 | $"..." | StringInterpolation.cs:11:20:11:29 | "Hello, Pi " |
|
||||
| StringInterpolation.cs:12:18:12:35 | $"..." | StringInterpolation.cs:12:20:12:29 | "Hello, Pi " |
|
||||
| StringInterpolation.cs:13:18:13:38 | $"..." | StringInterpolation.cs:13:20:13:29 | "Hello, Pi " |
|
||||
| StringInterpolation.cs:14:18:14:39 | $"..." | StringInterpolation.cs:14:20:14:29 | "Hello, Pi " |
|
||||
| StringInterpolation.cs:15:18:15:42 | $"..." | StringInterpolation.cs:15:20:15:29 | "Hello, Pi " |
|
||||
interpolationInsertsWithAlign
|
||||
| StringInterpolation.cs:12:18:12:35 | $"..." | StringInterpolation.cs:12:31:12:31 | access to local variable i | StringInterpolation.cs:12:33:12:33 | 6 |
|
||||
| StringInterpolation.cs:13:18:13:38 | $"..." | StringInterpolation.cs:13:31:13:31 | access to local variable i | StringInterpolation.cs:13:33:13:33 | 6 |
|
||||
| StringInterpolation.cs:14:18:14:39 | $"..." | StringInterpolation.cs:14:31:14:31 | access to local variable i | StringInterpolation.cs:14:33:14:37 | access to local variable align |
|
||||
| StringInterpolation.cs:15:18:15:42 | $"..." | StringInterpolation.cs:15:31:15:31 | access to local variable i | StringInterpolation.cs:15:33:15:37 | access to local variable align |
|
||||
interpolationInsertsWithFormat
|
||||
| StringInterpolation.cs:11:18:11:36 | $"..." | StringInterpolation.cs:11:31:11:31 | access to local variable i | StringInterpolation.cs:11:32:11:34 | "F1" |
|
||||
| StringInterpolation.cs:13:18:13:38 | $"..." | StringInterpolation.cs:13:31:13:31 | access to local variable i | StringInterpolation.cs:13:34:13:36 | "F3" |
|
||||
| StringInterpolation.cs:15:18:15:42 | $"..." | StringInterpolation.cs:15:31:15:31 | access to local variable i | StringInterpolation.cs:15:38:15:40 | "F2" |
|
||||
@@ -0,0 +1,23 @@
|
||||
import csharp
|
||||
|
||||
query predicate inserts(InterpolatedStringExpr expr, Expr e) { expr.getAnInsert() = e }
|
||||
|
||||
query predicate texts(InterpolatedStringExpr expr, StringLiteral literal) {
|
||||
expr.getAText() = literal
|
||||
}
|
||||
|
||||
query predicate interpolationInsertsWithAlign(InterpolatedStringExpr expr, Expr insert, Expr align) {
|
||||
exists(InterpolatedStringInsertExpr e | expr.getInterpolatedInsert(_) = e |
|
||||
insert = e.getInsert() and
|
||||
align = e.getAlignment()
|
||||
)
|
||||
}
|
||||
|
||||
query predicate interpolationInsertsWithFormat(
|
||||
InterpolatedStringExpr expr, Expr insert, StringLiteral format
|
||||
) {
|
||||
exists(InterpolatedStringInsertExpr e | expr.getInterpolatedInsert(_) = e |
|
||||
insert = e.getInsert() and
|
||||
format = e.getFormat()
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user