mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Merge pull request #4126 from tamasvajk/feature/array-index
C#: Fix computed sizes for implicitly sized array creation
This commit is contained in:
@@ -19,6 +19,8 @@ The following changes in version 1.26 affect C# analysis in all applications.
|
||||
## Changes to code extraction
|
||||
|
||||
* Partial method bodies are extracted. Previously, partial method bodies were skipped completely.
|
||||
* Inferring the lengths of implicitely sized arrays is fixed. Previously, multidimensional arrays were always extracted with the same length for
|
||||
each dimension. With the fix, the array sizes `2` and `1` are extracted for `new int[,]{{1},{2}}`. Previously `2` and `2` were extracted.
|
||||
|
||||
## Changes to libraries
|
||||
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.CodeAnalysis.CSharp;
|
||||
using Microsoft.CodeAnalysis.CSharp.Syntax;
|
||||
using Semmle.Extraction.Kinds;
|
||||
using System.IO;
|
||||
@@ -21,7 +22,7 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
|
||||
protected override void PopulateExpression(TextWriter trapFile)
|
||||
{
|
||||
var child = 0;
|
||||
|
||||
var explicitlySized = false;
|
||||
|
||||
if (TypeSyntax is null)
|
||||
@@ -29,38 +30,21 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
cx.ModelError(Syntax, "Array has unexpected type syntax");
|
||||
}
|
||||
|
||||
foreach (var rank in TypeSyntax.RankSpecifiers.SelectMany(rs => rs.Sizes))
|
||||
var firstLevelSizes = TypeSyntax.RankSpecifiers.First()?.Sizes ?? SyntaxFactory.SeparatedList<ExpressionSyntax>();
|
||||
|
||||
if (firstLevelSizes.OfType<ExpressionSyntax>().Any(s => s is OmittedArraySizeExpressionSyntax))
|
||||
{
|
||||
if (rank is OmittedArraySizeExpressionSyntax)
|
||||
{
|
||||
// Create an expression which simulates the explicit size of the array
|
||||
|
||||
if (!(Initializer is null))
|
||||
{
|
||||
// An implicitly-sized array must have an initializer.
|
||||
// Guard it just in case.
|
||||
var size = Initializer.Expressions.Count;
|
||||
|
||||
var info = new ExpressionInfo(
|
||||
cx,
|
||||
new AnnotatedType(Entities.Type.Create(cx, cx.Compilation.GetSpecialType(Microsoft.CodeAnalysis.SpecialType.System_Int32)), NullableAnnotation.None),
|
||||
Location,
|
||||
ExprKind.INT_LITERAL,
|
||||
this,
|
||||
child,
|
||||
true,
|
||||
size.ToString());
|
||||
|
||||
new Expression(info);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
Create(cx, rank, this, child);
|
||||
explicitlySized = true;
|
||||
}
|
||||
child++;
|
||||
SetArraySizes(Initializer, firstLevelSizes.Count);
|
||||
}
|
||||
else
|
||||
{
|
||||
for (var sizeIndex = 0; sizeIndex < firstLevelSizes.Count; sizeIndex++)
|
||||
{
|
||||
Create(cx, firstLevelSizes[sizeIndex], this, sizeIndex);
|
||||
}
|
||||
explicitlySized = true;
|
||||
}
|
||||
|
||||
if (!(Initializer is null))
|
||||
{
|
||||
ArrayInitializer.Create(new ExpressionNodeInfo(cx, Initializer, this, -1));
|
||||
@@ -69,6 +53,31 @@ namespace Semmle.Extraction.CSharp.Entities.Expressions
|
||||
if (explicitlySized)
|
||||
trapFile.explicitly_sized_array_creation(this);
|
||||
}
|
||||
|
||||
private void SetArraySizes(InitializerExpressionSyntax initializer, int rank)
|
||||
{
|
||||
for (var level = 0; level < rank; level++)
|
||||
{
|
||||
if (initializer is null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var info = new ExpressionInfo(
|
||||
cx,
|
||||
new AnnotatedType(Entities.Type.Create(cx, cx.Compilation.GetSpecialType(Microsoft.CodeAnalysis.SpecialType.System_Int32)), NullableAnnotation.None),
|
||||
Location,
|
||||
ExprKind.INT_LITERAL,
|
||||
this,
|
||||
level,
|
||||
true,
|
||||
initializer.Expressions.Count.ToString());
|
||||
|
||||
new Expression(info);
|
||||
|
||||
initializer = initializer.Expressions.FirstOrDefault() as InitializerExpressionSyntax;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class NormalArrayCreation : ExplicitArrayCreation<ArrayCreationExpressionSyntax>
|
||||
|
||||
@@ -1 +1 @@
|
||||
| expressions.cs:443:33:443:66 | delegate(...) { ... } |
|
||||
| expressions.cs:455:33:455:66 | delegate(...) { ... } |
|
||||
|
||||
@@ -1 +1 @@
|
||||
| expressions.cs:443:33:443:66 | delegate(...) { ... } | expressions.cs:443:47:443:47 | x |
|
||||
| expressions.cs:455:33:455:66 | delegate(...) { ... } | expressions.cs:455:47:455:47 | x |
|
||||
|
||||
@@ -1 +1 @@
|
||||
| expressions.cs:443:33:443:66 | delegate(...) { ... } |
|
||||
| expressions.cs:455:33:455:66 | delegate(...) { ... } |
|
||||
|
||||
@@ -1 +1 @@
|
||||
| expressions.cs:445:28:445:53 | delegate(...) { ... } | expressions.cs:445:28:445:53 | delegate(...) { ... } |
|
||||
| expressions.cs:457:28:457:53 | delegate(...) { ... } | expressions.cs:457:28:457:53 | delegate(...) { ... } |
|
||||
|
||||
@@ -1 +1 @@
|
||||
| expressions.cs:445:28:445:53 | delegate(...) { ... } | expressions.cs:445:46:445:46 | access to local variable j |
|
||||
| expressions.cs:457:28:457:53 | delegate(...) { ... } | expressions.cs:457:46:457:46 | access to local variable j |
|
||||
|
||||
@@ -1,3 +1,27 @@
|
||||
| expressions.cs:168:27:168:44 | array creation of type Object[] | expressions.cs:168:27:168:44 | 1 | true |
|
||||
| expressions.cs:409:23:409:65 | array creation of type Int32[,] | expressions.cs:409:23:409:65 | 2 | true |
|
||||
| expressions.cs:409:23:409:65 | array creation of type Int32[,] | expressions.cs:409:23:409:65 | 3 | true |
|
||||
| expressions.cs:409:23:409:65 | array creation of type Int32[,] | expressions.cs:409:23:409:65 | 3 | true |
|
||||
| expressions.cs:437:24:437:66 | array creation of type Int32[,] | expressions.cs:437:24:437:66 | 2 | true |
|
||||
| expressions.cs:437:24:437:66 | array creation of type Int32[,] | expressions.cs:437:24:437:66 | 3 | true |
|
||||
| expressions.cs:438:17:438:93 | array creation of type Int32[,,] | expressions.cs:438:17:438:93 | 2 | true |
|
||||
| expressions.cs:438:17:438:93 | array creation of type Int32[,,] | expressions.cs:438:17:438:93 | 2 | true |
|
||||
| expressions.cs:438:17:438:93 | array creation of type Int32[,,] | expressions.cs:438:17:438:93 | 3 | true |
|
||||
| expressions.cs:439:17:443:13 | array creation of type Int32[,][,] | expressions.cs:439:17:443:13 | 2 | true |
|
||||
| expressions.cs:439:17:443:13 | array creation of type Int32[,][,] | expressions.cs:439:17:443:13 | 3 | true |
|
||||
| expressions.cs:441:19:441:45 | array creation of type Int32[,] | expressions.cs:441:19:441:45 | 2 | true |
|
||||
| expressions.cs:441:19:441:45 | array creation of type Int32[,] | expressions.cs:441:19:441:45 | 2 | true |
|
||||
| expressions.cs:441:48:441:82 | array creation of type Int32[,] | expressions.cs:441:48:441:82 | 2 | true |
|
||||
| expressions.cs:441:48:441:82 | array creation of type Int32[,] | expressions.cs:441:48:441:82 | 3 | true |
|
||||
| expressions.cs:441:85:441:122 | array creation of type Int32[,] | expressions.cs:441:85:441:122 | 2 | true |
|
||||
| expressions.cs:441:85:441:122 | array creation of type Int32[,] | expressions.cs:441:85:441:122 | 3 | true |
|
||||
| expressions.cs:442:19:442:45 | array creation of type Int32[,] | expressions.cs:442:19:442:45 | 2 | true |
|
||||
| expressions.cs:442:19:442:45 | array creation of type Int32[,] | expressions.cs:442:19:442:45 | 2 | true |
|
||||
| expressions.cs:442:48:442:82 | array creation of type Int32[,] | expressions.cs:442:48:442:82 | 2 | true |
|
||||
| expressions.cs:442:48:442:82 | array creation of type Int32[,] | expressions.cs:442:48:442:82 | 3 | true |
|
||||
| expressions.cs:442:85:442:122 | array creation of type Int32[,] | expressions.cs:442:85:442:122 | 2 | true |
|
||||
| expressions.cs:442:85:442:122 | array creation of type Int32[,] | expressions.cs:442:85:442:122 | 3 | true |
|
||||
| expressions.cs:444:17:444:123 | array creation of type Int32[,][] | expressions.cs:444:17:444:123 | 2 | true |
|
||||
| expressions.cs:444:32:444:54 | array creation of type Int32[,] | expressions.cs:444:32:444:54 | 1 | true |
|
||||
| expressions.cs:444:32:444:54 | array creation of type Int32[,] | expressions.cs:444:32:444:54 | 2 | true |
|
||||
| expressions.cs:444:57:444:121 | array creation of type Int32[,] | expressions.cs:444:57:444:121 | 3 | true |
|
||||
| expressions.cs:444:57:444:121 | array creation of type Int32[,] | expressions.cs:444:57:444:121 | 4 | true |
|
||||
|
||||
@@ -1 +1 @@
|
||||
| expressions.cs:437:36:437:53 | (...) => ... |
|
||||
| expressions.cs:449:36:449:53 | (...) => ... |
|
||||
|
||||
@@ -1 +1 @@
|
||||
| expressions.cs:438:38:438:59 | (...) => ... |
|
||||
| expressions.cs:450:38:450:59 | (...) => ... |
|
||||
|
||||
@@ -1 +1 @@
|
||||
| expressions.cs:439:33:439:48 | (...) => ... |
|
||||
| expressions.cs:451:33:451:48 | (...) => ... |
|
||||
|
||||
@@ -1 +1 @@
|
||||
| expressions.cs:440:36:440:64 | (...) => ... |
|
||||
| expressions.cs:452:36:452:64 | (...) => ... |
|
||||
|
||||
@@ -1 +1 @@
|
||||
| expressions.cs:441:20:441:34 | (...) => ... |
|
||||
| expressions.cs:453:20:453:34 | (...) => ... |
|
||||
|
||||
@@ -1 +1 @@
|
||||
| expressions.cs:442:23:442:47 | (...) => ... |
|
||||
| expressions.cs:454:23:454:47 | (...) => ... |
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
| expressions.cs:458:20:458:27 | addition | expressions.cs:460:26:460:26 | access to parameter a | expressions.cs:473:40:473:40 | + |
|
||||
| expressions.cs:458:20:458:27 | addition | expressions.cs:460:30:460:30 | access to parameter b | expressions.cs:473:40:473:40 | + |
|
||||
| expressions.cs:458:20:458:27 | addition | expressions.cs:461:13:461:18 | access to local variable result | expressions.cs:473:40:473:40 | + |
|
||||
| expressions.cs:458:20:458:27 | addition | expressions.cs:461:23:461:23 | access to parameter c | expressions.cs:473:40:473:40 | + |
|
||||
| expressions.cs:470:20:470:27 | addition | expressions.cs:472:26:472:26 | access to parameter a | expressions.cs:485:40:485:40 | + |
|
||||
| expressions.cs:470:20:470:27 | addition | expressions.cs:472:30:472:30 | access to parameter b | expressions.cs:485:40:485:40 | + |
|
||||
| expressions.cs:470:20:470:27 | addition | expressions.cs:473:13:473:18 | access to local variable result | expressions.cs:485:40:485:40 | + |
|
||||
| expressions.cs:470:20:470:27 | addition | expressions.cs:473:23:473:23 | access to parameter c | expressions.cs:485:40:485:40 | + |
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
| expressions.cs:452:21:452:35 | delegateCombine | expressions.cs:450:11:450:23 | OperatorCalls | expressions.cs:455:13:455:27 | access to local variable PropertyChanged | expressions.cs:479:30:479:39 | MyDelegate |
|
||||
| expressions.cs:452:21:452:35 | delegateCombine | expressions.cs:450:11:450:23 | OperatorCalls | expressions.cs:455:32:455:34 | access to parameter fun | expressions.cs:479:30:479:39 | MyDelegate |
|
||||
| expressions.cs:464:21:464:35 | delegateCombine | expressions.cs:462:11:462:23 | OperatorCalls | expressions.cs:467:13:467:27 | access to local variable PropertyChanged | expressions.cs:491:30:491:39 | MyDelegate |
|
||||
| expressions.cs:464:21:464:35 | delegateCombine | expressions.cs:462:11:462:23 | OperatorCalls | expressions.cs:467:32:467:34 | access to parameter fun | expressions.cs:491:30:491:39 | MyDelegate |
|
||||
|
||||
@@ -1491,333 +1491,467 @@ expressions.cs:
|
||||
# 432| 0: [Parameter] x
|
||||
# 432| 1: [Parameter] y
|
||||
# 433| 7: [DelegateType] Unit
|
||||
# 435| 8: [Method] MainAnonymousFunctions
|
||||
# 435| 8: [Method] MultiDimensionalArrayCreations
|
||||
# 436| 4: [BlockStmt] {...}
|
||||
# 437| 0: [LocalVariableDeclStmt] ... ...;
|
||||
# 437| 0: [LocalVariableDeclAndInitExpr] Func<Int16,Byte> f1 = ...
|
||||
# 437| 0: [LambdaExpr] (...) => ...
|
||||
# 437| 0: [CastExpr] (...) ...
|
||||
# 437| 0: [AddExpr] ... + ...
|
||||
# 437| 0: [CastExpr] (...) ...
|
||||
# 437| 0: [ParameterAccess] access to parameter x
|
||||
# 437| 1: [IntLiteral] 1
|
||||
# 437| 1: [TypeAccess] access to type Byte
|
||||
# 437| 0: [LocalVariableDeclAndInitExpr] Object o = ...
|
||||
# 437| 0: [ArrayCreation] array creation of type Int32[,]
|
||||
# 437| -1: [ArrayInitializer] { ..., ... }
|
||||
# 437| 0: [ArrayInitializer] { ..., ... }
|
||||
# 437| 0: [IntLiteral] 1
|
||||
# 437| 1: [IntLiteral] 2
|
||||
# 437| 1: [ArrayInitializer] { ..., ... }
|
||||
# 437| 0: [IntLiteral] 3
|
||||
# 437| 1: [IntLiteral] 4
|
||||
# 437| 2: [ArrayInitializer] { ..., ... }
|
||||
# 437| 0: [IntLiteral] 5
|
||||
# 437| 1: [IntLiteral] 6
|
||||
# 437| 1: [LocalVariableAccess] access to local variable o
|
||||
# 438| 1: [ExprStmt] ...;
|
||||
# 438| 0: [AssignExpr] ... = ...
|
||||
# 438| 0: [ArrayCreation] array creation of type Int32[,,]
|
||||
# 438| -1: [ArrayInitializer] { ..., ... }
|
||||
# 438| 0: [ArrayInitializer] { ..., ... }
|
||||
# 438| 0: [ArrayInitializer] { ..., ... }
|
||||
# 438| 0: [IntLiteral] 1
|
||||
# 438| 1: [IntLiteral] 2
|
||||
# 438| 2: [IntLiteral] 3
|
||||
# 438| 1: [ArrayInitializer] { ..., ... }
|
||||
# 438| 0: [IntLiteral] 4
|
||||
# 438| 1: [IntLiteral] 5
|
||||
# 438| 2: [IntLiteral] 6
|
||||
# 438| 1: [ArrayInitializer] { ..., ... }
|
||||
# 438| 0: [ArrayInitializer] { ..., ... }
|
||||
# 438| 0: [IntLiteral] 7
|
||||
# 438| 1: [IntLiteral] 8
|
||||
# 438| 2: [IntLiteral] 9
|
||||
# 438| 1: [ArrayInitializer] { ..., ... }
|
||||
# 438| 0: [IntLiteral] 10
|
||||
# 438| 1: [IntLiteral] 11
|
||||
# 438| 2: [IntLiteral] 12
|
||||
# 438| 1: [LocalVariableAccess] access to local variable o
|
||||
# 439| 2: [ExprStmt] ...;
|
||||
# 439| 0: [AssignExpr] ... = ...
|
||||
# 439| 0: [ArrayCreation] array creation of type Int32[,][,]
|
||||
# 440| -1: [ArrayInitializer] { ..., ... }
|
||||
# 441| 0: [ArrayInitializer] { ..., ... }
|
||||
# 441| 0: [ArrayCreation] array creation of type Int32[,]
|
||||
# 441| -1: [ArrayInitializer] { ..., ... }
|
||||
# 441| 0: [ArrayInitializer] { ..., ... }
|
||||
# 441| 0: [IntLiteral] 1
|
||||
# 441| 1: [IntLiteral] 3
|
||||
# 441| 1: [ArrayInitializer] { ..., ... }
|
||||
# 441| 0: [IntLiteral] 5
|
||||
# 441| 1: [IntLiteral] 7
|
||||
# 441| 1: [ArrayCreation] array creation of type Int32[,]
|
||||
# 441| -1: [ArrayInitializer] { ..., ... }
|
||||
# 441| 0: [ArrayInitializer] { ..., ... }
|
||||
# 441| 0: [IntLiteral] 0
|
||||
# 441| 1: [IntLiteral] 2
|
||||
# 441| 1: [ArrayInitializer] { ..., ... }
|
||||
# 441| 0: [IntLiteral] 4
|
||||
# 441| 1: [IntLiteral] 6
|
||||
# 441| 2: [ArrayInitializer] { ..., ... }
|
||||
# 441| 0: [IntLiteral] 8
|
||||
# 441| 1: [IntLiteral] 10
|
||||
# 441| 2: [ArrayCreation] array creation of type Int32[,]
|
||||
# 441| -1: [ArrayInitializer] { ..., ... }
|
||||
# 441| 0: [ArrayInitializer] { ..., ... }
|
||||
# 441| 0: [IntLiteral] 11
|
||||
# 441| 1: [IntLiteral] 22
|
||||
# 441| 1: [ArrayInitializer] { ..., ... }
|
||||
# 441| 0: [IntLiteral] 99
|
||||
# 441| 1: [IntLiteral] 88
|
||||
# 441| 2: [ArrayInitializer] { ..., ... }
|
||||
# 441| 0: [IntLiteral] 0
|
||||
# 441| 1: [IntLiteral] 9
|
||||
# 442| 1: [ArrayInitializer] { ..., ... }
|
||||
# 442| 0: [ArrayCreation] array creation of type Int32[,]
|
||||
# 442| -1: [ArrayInitializer] { ..., ... }
|
||||
# 442| 0: [ArrayInitializer] { ..., ... }
|
||||
# 442| 0: [IntLiteral] 1
|
||||
# 442| 1: [IntLiteral] 3
|
||||
# 442| 1: [ArrayInitializer] { ..., ... }
|
||||
# 442| 0: [IntLiteral] 5
|
||||
# 442| 1: [IntLiteral] 7
|
||||
# 442| 1: [ArrayCreation] array creation of type Int32[,]
|
||||
# 442| -1: [ArrayInitializer] { ..., ... }
|
||||
# 442| 0: [ArrayInitializer] { ..., ... }
|
||||
# 442| 0: [IntLiteral] 0
|
||||
# 442| 1: [IntLiteral] 2
|
||||
# 442| 1: [ArrayInitializer] { ..., ... }
|
||||
# 442| 0: [IntLiteral] 4
|
||||
# 442| 1: [IntLiteral] 6
|
||||
# 442| 2: [ArrayInitializer] { ..., ... }
|
||||
# 442| 0: [IntLiteral] 8
|
||||
# 442| 1: [IntLiteral] 10
|
||||
# 442| 2: [ArrayCreation] array creation of type Int32[,]
|
||||
# 442| -1: [ArrayInitializer] { ..., ... }
|
||||
# 442| 0: [ArrayInitializer] { ..., ... }
|
||||
# 442| 0: [IntLiteral] 11
|
||||
# 442| 1: [IntLiteral] 22
|
||||
# 442| 1: [ArrayInitializer] { ..., ... }
|
||||
# 442| 0: [IntLiteral] 99
|
||||
# 442| 1: [IntLiteral] 88
|
||||
# 442| 2: [ArrayInitializer] { ..., ... }
|
||||
# 442| 0: [IntLiteral] 0
|
||||
# 442| 1: [IntLiteral] 9
|
||||
# 439| 1: [LocalVariableAccess] access to local variable o
|
||||
# 444| 3: [ExprStmt] ...;
|
||||
# 444| 0: [AssignExpr] ... = ...
|
||||
# 444| 0: [ArrayCreation] array creation of type Int32[,][]
|
||||
# 444| -1: [ArrayInitializer] { ..., ... }
|
||||
# 444| 0: [ArrayCreation] array creation of type Int32[,]
|
||||
# 444| -1: [ArrayInitializer] { ..., ... }
|
||||
# 444| 0: [ArrayInitializer] { ..., ... }
|
||||
# 444| 0: [IntLiteral] 1
|
||||
# 444| 1: [IntLiteral] 2
|
||||
# 444| 1: [ArrayCreation] array creation of type Int32[,]
|
||||
# 444| -1: [ArrayInitializer] { ..., ... }
|
||||
# 444| 0: [ArrayInitializer] { ..., ... }
|
||||
# 444| 0: [IntLiteral] 1
|
||||
# 444| 1: [IntLiteral] 2
|
||||
# 444| 2: [IntLiteral] 3
|
||||
# 444| 1: [ArrayInitializer] { ..., ... }
|
||||
# 444| 0: [IntLiteral] 1
|
||||
# 444| 1: [IntLiteral] 2
|
||||
# 444| 2: [IntLiteral] 3
|
||||
# 444| 2: [ArrayInitializer] { ..., ... }
|
||||
# 444| 0: [IntLiteral] 1
|
||||
# 444| 1: [IntLiteral] 2
|
||||
# 444| 2: [IntLiteral] 3
|
||||
# 444| 3: [ArrayInitializer] { ..., ... }
|
||||
# 444| 0: [IntLiteral] 1
|
||||
# 444| 1: [IntLiteral] 2
|
||||
# 444| 2: [IntLiteral] 3
|
||||
# 444| 1: [LocalVariableAccess] access to local variable o
|
||||
# 447| 9: [Method] MainAnonymousFunctions
|
||||
# 448| 4: [BlockStmt] {...}
|
||||
# 449| 0: [LocalVariableDeclStmt] ... ...;
|
||||
# 449| 0: [LocalVariableDeclAndInitExpr] Func<Int16,Byte> f1 = ...
|
||||
# 449| 0: [LambdaExpr] (...) => ...
|
||||
# 449| 0: [CastExpr] (...) ...
|
||||
# 449| 0: [AddExpr] ... + ...
|
||||
# 449| 0: [CastExpr] (...) ...
|
||||
# 449| 0: [ParameterAccess] access to parameter x
|
||||
# 449| 1: [IntLiteral] 1
|
||||
# 449| 1: [TypeAccess] access to type Byte
|
||||
#-----| 2: (Parameters)
|
||||
# 437| 0: [Parameter] x
|
||||
# 437| 1: [LocalVariableAccess] access to local variable f1
|
||||
# 438| 1: [LocalVariableDeclStmt] ... ...;
|
||||
# 438| 0: [LocalVariableDeclAndInitExpr] Func<Int32,Double> f2 = ...
|
||||
# 438| 0: [LambdaExpr] (...) => ...
|
||||
# 438| 0: [BlockStmt] {...}
|
||||
# 438| 0: [ReturnStmt] return ...;
|
||||
# 438| 0: [CastExpr] (...) ...
|
||||
# 438| 0: [AddExpr] ... + ...
|
||||
# 438| 0: [ParameterAccess] access to parameter x
|
||||
# 438| 1: [IntLiteral] 1
|
||||
# 449| 0: [Parameter] x
|
||||
# 449| 1: [LocalVariableAccess] access to local variable f1
|
||||
# 450| 1: [LocalVariableDeclStmt] ... ...;
|
||||
# 450| 0: [LocalVariableDeclAndInitExpr] Func<Int32,Double> f2 = ...
|
||||
# 450| 0: [LambdaExpr] (...) => ...
|
||||
# 450| 0: [BlockStmt] {...}
|
||||
# 450| 0: [ReturnStmt] return ...;
|
||||
# 450| 0: [CastExpr] (...) ...
|
||||
# 450| 0: [AddExpr] ... + ...
|
||||
# 450| 0: [ParameterAccess] access to parameter x
|
||||
# 450| 1: [IntLiteral] 1
|
||||
#-----| 2: (Parameters)
|
||||
# 438| 0: [Parameter] x
|
||||
# 438| 1: [LocalVariableAccess] access to local variable f2
|
||||
# 439| 2: [LocalVariableDeclStmt] ... ...;
|
||||
# 439| 0: [LocalVariableDeclAndInitExpr] Func<Int32,Int32> f3 = ...
|
||||
# 439| 0: [LambdaExpr] (...) => ...
|
||||
# 439| 0: [AddExpr] ... + ...
|
||||
# 439| 0: [ParameterAccess] access to parameter x
|
||||
# 439| 1: [IntLiteral] 1
|
||||
# 450| 0: [Parameter] x
|
||||
# 450| 1: [LocalVariableAccess] access to local variable f2
|
||||
# 451| 2: [LocalVariableDeclStmt] ... ...;
|
||||
# 451| 0: [LocalVariableDeclAndInitExpr] Func<Int32,Int32> f3 = ...
|
||||
# 451| 0: [LambdaExpr] (...) => ...
|
||||
# 451| 0: [AddExpr] ... + ...
|
||||
# 451| 0: [ParameterAccess] access to parameter x
|
||||
# 451| 1: [IntLiteral] 1
|
||||
#-----| 2: (Parameters)
|
||||
# 439| 0: [Parameter] x
|
||||
# 439| 1: [LocalVariableAccess] access to local variable f3
|
||||
# 440| 3: [LocalVariableDeclStmt] ... ...;
|
||||
# 440| 0: [LocalVariableDeclAndInitExpr] Func<Int32,String> f4 = ...
|
||||
# 440| 0: [LambdaExpr] (...) => ...
|
||||
# 440| 0: [BlockStmt] {...}
|
||||
# 440| 0: [ReturnStmt] return ...;
|
||||
# 440| 0: [AddExpr] ... + ...
|
||||
# 440| 0: [CastExpr] (...) ...
|
||||
# 440| 0: [ParameterAccess] access to parameter x
|
||||
# 440| 1: [StringLiteral] ""
|
||||
# 451| 0: [Parameter] x
|
||||
# 451| 1: [LocalVariableAccess] access to local variable f3
|
||||
# 452| 3: [LocalVariableDeclStmt] ... ...;
|
||||
# 452| 0: [LocalVariableDeclAndInitExpr] Func<Int32,String> f4 = ...
|
||||
# 452| 0: [LambdaExpr] (...) => ...
|
||||
# 452| 0: [BlockStmt] {...}
|
||||
# 452| 0: [ReturnStmt] return ...;
|
||||
# 452| 0: [AddExpr] ... + ...
|
||||
# 452| 0: [CastExpr] (...) ...
|
||||
# 452| 0: [ParameterAccess] access to parameter x
|
||||
# 452| 1: [StringLiteral] ""
|
||||
#-----| 2: (Parameters)
|
||||
# 440| 0: [Parameter] x
|
||||
# 440| 1: [LocalVariableAccess] access to local variable f4
|
||||
# 441| 4: [LocalVariableDeclStmt] ... ...;
|
||||
# 441| 0: [LocalVariableDeclAndInitExpr] S f5 = ...
|
||||
# 441| 0: [LambdaExpr] (...) => ...
|
||||
# 441| 0: [MulExpr] ... * ...
|
||||
# 441| 0: [ParameterAccess] access to parameter x
|
||||
# 441| 1: [ParameterAccess] access to parameter y
|
||||
# 452| 0: [Parameter] x
|
||||
# 452| 1: [LocalVariableAccess] access to local variable f4
|
||||
# 453| 4: [LocalVariableDeclStmt] ... ...;
|
||||
# 453| 0: [LocalVariableDeclAndInitExpr] S f5 = ...
|
||||
# 453| 0: [LambdaExpr] (...) => ...
|
||||
# 453| 0: [MulExpr] ... * ...
|
||||
# 453| 0: [ParameterAccess] access to parameter x
|
||||
# 453| 1: [ParameterAccess] access to parameter y
|
||||
#-----| 2: (Parameters)
|
||||
# 441| 0: [Parameter] x
|
||||
# 441| 1: [Parameter] y
|
||||
# 441| 1: [LocalVariableAccess] access to local variable f5
|
||||
# 442| 5: [LocalVariableDeclStmt] ... ...;
|
||||
# 442| 0: [LocalVariableDeclAndInitExpr] Unit f6 = ...
|
||||
# 442| 0: [LambdaExpr] (...) => ...
|
||||
# 442| 0: [MethodCall] call to method WriteLine
|
||||
# 442| -1: [TypeAccess] access to type Console
|
||||
# 442| 1: [LocalVariableAccess] access to local variable f6
|
||||
# 443| 6: [LocalVariableDeclStmt] ... ...;
|
||||
# 443| 0: [LocalVariableDeclAndInitExpr] Func<Int32,Int32> f7 = ...
|
||||
# 443| 0: [AnonymousMethodExpr] delegate(...) { ... }
|
||||
# 443| 0: [BlockStmt] {...}
|
||||
# 443| 0: [ReturnStmt] return ...;
|
||||
# 443| 0: [AddExpr] ... + ...
|
||||
# 443| 0: [ParameterAccess] access to parameter x
|
||||
# 443| 1: [IntLiteral] 1
|
||||
# 453| 0: [Parameter] x
|
||||
# 453| 1: [Parameter] y
|
||||
# 453| 1: [LocalVariableAccess] access to local variable f5
|
||||
# 454| 5: [LocalVariableDeclStmt] ... ...;
|
||||
# 454| 0: [LocalVariableDeclAndInitExpr] Unit f6 = ...
|
||||
# 454| 0: [LambdaExpr] (...) => ...
|
||||
# 454| 0: [MethodCall] call to method WriteLine
|
||||
# 454| -1: [TypeAccess] access to type Console
|
||||
# 454| 1: [LocalVariableAccess] access to local variable f6
|
||||
# 455| 6: [LocalVariableDeclStmt] ... ...;
|
||||
# 455| 0: [LocalVariableDeclAndInitExpr] Func<Int32,Int32> f7 = ...
|
||||
# 455| 0: [AnonymousMethodExpr] delegate(...) { ... }
|
||||
# 455| 0: [BlockStmt] {...}
|
||||
# 455| 0: [ReturnStmt] return ...;
|
||||
# 455| 0: [AddExpr] ... + ...
|
||||
# 455| 0: [ParameterAccess] access to parameter x
|
||||
# 455| 1: [IntLiteral] 1
|
||||
#-----| 2: (Parameters)
|
||||
# 443| 0: [Parameter] x
|
||||
# 443| 1: [LocalVariableAccess] access to local variable f7
|
||||
# 444| 7: [LocalVariableDeclStmt] ... ...;
|
||||
# 444| 0: [LocalVariableDeclAndInitExpr] Int32 j = ...
|
||||
# 444| 0: [IntLiteral] 0
|
||||
# 444| 1: [LocalVariableAccess] access to local variable j
|
||||
# 445| 8: [LocalVariableDeclStmt] ... ...;
|
||||
# 445| 0: [LocalVariableDeclAndInitExpr] Func<Int32> f8 = ...
|
||||
# 445| 0: [AnonymousMethodExpr] delegate(...) { ... }
|
||||
# 445| 0: [BlockStmt] {...}
|
||||
# 445| 0: [ReturnStmt] return ...;
|
||||
# 445| 0: [AddExpr] ... + ...
|
||||
# 445| 0: [LocalVariableAccess] access to local variable j
|
||||
# 445| 1: [IntLiteral] 1
|
||||
# 445| 1: [LocalVariableAccess] access to local variable f8
|
||||
# 450| 18: [Class] OperatorCalls
|
||||
# 452| 5: [Method] delegateCombine
|
||||
# 455| 0: [Parameter] x
|
||||
# 455| 1: [LocalVariableAccess] access to local variable f7
|
||||
# 456| 7: [LocalVariableDeclStmt] ... ...;
|
||||
# 456| 0: [LocalVariableDeclAndInitExpr] Int32 j = ...
|
||||
# 456| 0: [IntLiteral] 0
|
||||
# 456| 1: [LocalVariableAccess] access to local variable j
|
||||
# 457| 8: [LocalVariableDeclStmt] ... ...;
|
||||
# 457| 0: [LocalVariableDeclAndInitExpr] Func<Int32> f8 = ...
|
||||
# 457| 0: [AnonymousMethodExpr] delegate(...) { ... }
|
||||
# 457| 0: [BlockStmt] {...}
|
||||
# 457| 0: [ReturnStmt] return ...;
|
||||
# 457| 0: [AddExpr] ... + ...
|
||||
# 457| 0: [LocalVariableAccess] access to local variable j
|
||||
# 457| 1: [IntLiteral] 1
|
||||
# 457| 1: [LocalVariableAccess] access to local variable f8
|
||||
# 462| 18: [Class] OperatorCalls
|
||||
# 464| 5: [Method] delegateCombine
|
||||
#-----| 2: (Parameters)
|
||||
# 452| 0: [Parameter] fun
|
||||
# 453| 4: [BlockStmt] {...}
|
||||
# 454| 0: [LocalVariableDeclStmt] ... ...;
|
||||
# 454| 0: [LocalVariableDeclAndInitExpr] MyDelegate PropertyChanged = ...
|
||||
# 454| 0: [NullLiteral] null
|
||||
# 454| 1: [LocalVariableAccess] access to local variable PropertyChanged
|
||||
# 455| 1: [ExprStmt] ...;
|
||||
# 455| 0: [AssignAddExpr] ... += ...
|
||||
# 455| 0: [ParameterAccess] access to parameter fun
|
||||
# 455| 1: [LocalVariableAccess] access to local variable PropertyChanged
|
||||
# 458| 6: [Method] addition
|
||||
# 464| 0: [Parameter] fun
|
||||
# 465| 4: [BlockStmt] {...}
|
||||
# 466| 0: [LocalVariableDeclStmt] ... ...;
|
||||
# 466| 0: [LocalVariableDeclAndInitExpr] MyDelegate PropertyChanged = ...
|
||||
# 466| 0: [NullLiteral] null
|
||||
# 466| 1: [LocalVariableAccess] access to local variable PropertyChanged
|
||||
# 467| 1: [ExprStmt] ...;
|
||||
# 467| 0: [AssignAddExpr] ... += ...
|
||||
# 467| 0: [ParameterAccess] access to parameter fun
|
||||
# 467| 1: [LocalVariableAccess] access to local variable PropertyChanged
|
||||
# 470| 6: [Method] addition
|
||||
#-----| 2: (Parameters)
|
||||
# 458| 0: [Parameter] a
|
||||
# 458| 1: [Parameter] b
|
||||
# 458| 2: [Parameter] c
|
||||
# 459| 4: [BlockStmt] {...}
|
||||
# 460| 0: [LocalVariableDeclStmt] ... ...;
|
||||
# 460| 0: [LocalVariableDeclAndInitExpr] Num result = ...
|
||||
# 460| 0: [OperatorCall] call to operator +
|
||||
# 460| 0: [ParameterAccess] access to parameter a
|
||||
# 460| 1: [ParameterAccess] access to parameter b
|
||||
# 460| 1: [LocalVariableAccess] access to local variable result
|
||||
# 461| 1: [ExprStmt] ...;
|
||||
# 461| 0: [AssignAddExpr] ... += ...
|
||||
# 461| 0: [ParameterAccess] access to parameter c
|
||||
# 461| 1: [LocalVariableAccess] access to local variable result
|
||||
# 462| 2: [ReturnStmt] return ...;
|
||||
# 462| 0: [LocalVariableAccess] access to local variable result
|
||||
# 464| 7: [Class] Num
|
||||
# 466| 4: [Field] value
|
||||
# 468| 5: [InstanceConstructor] Num
|
||||
# 470| 0: [Parameter] a
|
||||
# 470| 1: [Parameter] b
|
||||
# 470| 2: [Parameter] c
|
||||
# 471| 4: [BlockStmt] {...}
|
||||
# 472| 0: [LocalVariableDeclStmt] ... ...;
|
||||
# 472| 0: [LocalVariableDeclAndInitExpr] Num result = ...
|
||||
# 472| 0: [OperatorCall] call to operator +
|
||||
# 472| 0: [ParameterAccess] access to parameter a
|
||||
# 472| 1: [ParameterAccess] access to parameter b
|
||||
# 472| 1: [LocalVariableAccess] access to local variable result
|
||||
# 473| 1: [ExprStmt] ...;
|
||||
# 473| 0: [AssignAddExpr] ... += ...
|
||||
# 473| 0: [ParameterAccess] access to parameter c
|
||||
# 473| 1: [LocalVariableAccess] access to local variable result
|
||||
# 474| 2: [ReturnStmt] return ...;
|
||||
# 474| 0: [LocalVariableAccess] access to local variable result
|
||||
# 476| 7: [Class] Num
|
||||
# 478| 4: [Field] value
|
||||
# 480| 5: [InstanceConstructor] Num
|
||||
#-----| 2: (Parameters)
|
||||
# 468| 0: [Parameter] value
|
||||
# 469| 4: [BlockStmt] {...}
|
||||
# 470| 0: [ExprStmt] ...;
|
||||
# 470| 0: [AssignExpr] ... = ...
|
||||
# 470| 0: [ParameterAccess] access to parameter value
|
||||
# 470| 1: [FieldAccess] access to field value
|
||||
# 470| -1: [ThisAccess] this access
|
||||
# 473| 6: [AddOperator] +
|
||||
# 480| 0: [Parameter] value
|
||||
# 481| 4: [BlockStmt] {...}
|
||||
# 482| 0: [ExprStmt] ...;
|
||||
# 482| 0: [AssignExpr] ... = ...
|
||||
# 482| 0: [ParameterAccess] access to parameter value
|
||||
# 482| 1: [FieldAccess] access to field value
|
||||
# 482| -1: [ThisAccess] this access
|
||||
# 485| 6: [AddOperator] +
|
||||
#-----| 2: (Parameters)
|
||||
# 473| 0: [Parameter] c1
|
||||
# 473| 1: [Parameter] c2
|
||||
# 474| 4: [BlockStmt] {...}
|
||||
# 475| 0: [ReturnStmt] return ...;
|
||||
# 475| 0: [ObjectCreation] object creation of type Num
|
||||
# 475| 0: [AddExpr] ... + ...
|
||||
# 475| 0: [FieldAccess] access to field value
|
||||
# 475| -1: [ParameterAccess] access to parameter c1
|
||||
# 475| 1: [FieldAccess] access to field value
|
||||
# 475| -1: [ParameterAccess] access to parameter c2
|
||||
# 479| 8: [DelegateType] MyDelegate
|
||||
# 485| 0: [Parameter] c1
|
||||
# 485| 1: [Parameter] c2
|
||||
# 486| 4: [BlockStmt] {...}
|
||||
# 487| 0: [ReturnStmt] return ...;
|
||||
# 487| 0: [ObjectCreation] object creation of type Num
|
||||
# 487| 0: [AddExpr] ... + ...
|
||||
# 487| 0: [FieldAccess] access to field value
|
||||
# 487| -1: [ParameterAccess] access to parameter c1
|
||||
# 487| 1: [FieldAccess] access to field value
|
||||
# 487| -1: [ParameterAccess] access to parameter c2
|
||||
# 491| 8: [DelegateType] MyDelegate
|
||||
#-----| 2: (Parameters)
|
||||
# 479| 0: [Parameter] e
|
||||
# 482| 19: [Class] ExpressionDepth
|
||||
# 484| 5: [Field] d
|
||||
# 484| 1: [AssignExpr] ... = ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [AddExpr] ... + ...
|
||||
# 484| 0: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 484| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 485| 1: [IntLiteral] 1
|
||||
# 484| 1: [MemberConstantAccess] access to constant d
|
||||
# 488| 20: [Class] TupleExprs
|
||||
# 490| 5: [Method] Test
|
||||
# 491| 4: [BlockStmt] {...}
|
||||
# 492| 0: [LocalVariableDeclStmt] ... ...;
|
||||
# 492| 0: [LocalVariableDeclAndInitExpr] (Int32,String) a = ...
|
||||
# 492| 0: [DefaultValueExpr] default(...)
|
||||
# 492| 0: [TypeAccess] access to type (Int32,String)
|
||||
# 492| 1: [LocalVariableAccess] access to local variable a
|
||||
# 493| 1: [LocalVariableDeclStmt] ... ...;
|
||||
# 493| 0: [LocalVariableDeclAndInitExpr] (Boolean,Int32[],Object) b = ...
|
||||
# 493| 0: [DefaultValueExpr] default(...)
|
||||
# 493| 0: [TypeAccess] access to type (Boolean,Int32[],Object)
|
||||
# 493| 1: [LocalVariableAccess] access to local variable b
|
||||
# 494| 2: [LocalVariableDeclStmt] ... ...;
|
||||
# 494| 0: [LocalVariableDeclAndInitExpr] Type x = ...
|
||||
# 494| 0: [TypeofExpr] typeof(...)
|
||||
# 494| 0: [TypeAccess] access to type (Int32,String)
|
||||
# 494| 1: [LocalVariableAccess] access to local variable x
|
||||
# 495| 3: [LocalVariableDeclStmt] ... ...;
|
||||
# 495| 0: [LocalVariableDeclAndInitExpr] Type y = ...
|
||||
# 495| 0: [TypeofExpr] typeof(...)
|
||||
# 495| 0: [TypeAccess] access to type (Boolean,Int32[],dynamic)
|
||||
# 495| 1: [LocalVariableAccess] access to local variable y
|
||||
# 491| 0: [Parameter] e
|
||||
# 494| 19: [Class] ExpressionDepth
|
||||
# 496| 5: [Field] d
|
||||
# 496| 1: [AssignExpr] ... = ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [AddExpr] ... + ...
|
||||
# 496| 0: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 496| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 497| 1: [IntLiteral] 1
|
||||
# 496| 1: [MemberConstantAccess] access to constant d
|
||||
# 500| 20: [Class] TupleExprs
|
||||
# 502| 5: [Method] Test
|
||||
# 503| 4: [BlockStmt] {...}
|
||||
# 504| 0: [LocalVariableDeclStmt] ... ...;
|
||||
# 504| 0: [LocalVariableDeclAndInitExpr] (Int32,String) a = ...
|
||||
# 504| 0: [DefaultValueExpr] default(...)
|
||||
# 504| 0: [TypeAccess] access to type (Int32,String)
|
||||
# 504| 1: [LocalVariableAccess] access to local variable a
|
||||
# 505| 1: [LocalVariableDeclStmt] ... ...;
|
||||
# 505| 0: [LocalVariableDeclAndInitExpr] (Boolean,Int32[],Object) b = ...
|
||||
# 505| 0: [DefaultValueExpr] default(...)
|
||||
# 505| 0: [TypeAccess] access to type (Boolean,Int32[],Object)
|
||||
# 505| 1: [LocalVariableAccess] access to local variable b
|
||||
# 506| 2: [LocalVariableDeclStmt] ... ...;
|
||||
# 506| 0: [LocalVariableDeclAndInitExpr] Type x = ...
|
||||
# 506| 0: [TypeofExpr] typeof(...)
|
||||
# 506| 0: [TypeAccess] access to type (Int32,String)
|
||||
# 506| 1: [LocalVariableAccess] access to local variable x
|
||||
# 507| 3: [LocalVariableDeclStmt] ... ...;
|
||||
# 507| 0: [LocalVariableDeclAndInitExpr] Type y = ...
|
||||
# 507| 0: [TypeofExpr] typeof(...)
|
||||
# 507| 0: [TypeAccess] access to type (Boolean,Int32[],dynamic)
|
||||
# 507| 1: [LocalVariableAccess] access to local variable y
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
| expressions.cs:377:43:377:46 | access to field name | expressions.cs:377:43:377:46 | this access |
|
||||
| expressions.cs:377:57:377:60 | access to field name | expressions.cs:377:57:377:60 | this access |
|
||||
| expressions.cs:378:57:378:68 | access to field phoneNumbers | expressions.cs:378:57:378:68 | this access |
|
||||
| expressions.cs:442:29:442:47 | call to method WriteLine | expressions.cs:442:29:442:35 | access to type Console |
|
||||
| expressions.cs:470:17:470:26 | access to field value | expressions.cs:470:17:470:20 | this access |
|
||||
| expressions.cs:475:32:475:39 | access to field value | expressions.cs:475:32:475:33 | access to parameter c1 |
|
||||
| expressions.cs:475:43:475:50 | access to field value | expressions.cs:475:43:475:44 | access to parameter c2 |
|
||||
| expressions.cs:454:29:454:47 | call to method WriteLine | expressions.cs:454:29:454:35 | access to type Console |
|
||||
| expressions.cs:482:17:482:26 | access to field value | expressions.cs:482:17:482:20 | this access |
|
||||
| expressions.cs:487:32:487:39 | access to field value | expressions.cs:487:32:487:33 | access to parameter c1 |
|
||||
| expressions.cs:487:43:487:50 | access to field value | expressions.cs:487:43:487:44 | access to parameter c2 |
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
| expressions.cs:334:30:334:30 | (...) ... | expressions.cs:334:30:334:30 | 8 |
|
||||
| expressions.cs:414:31:414:31 | (...) ... | expressions.cs:414:31:414:31 | 1 |
|
||||
| expressions.cs:414:39:414:39 | (...) ... | expressions.cs:414:39:414:39 | 2 |
|
||||
| expressions.cs:437:41:437:53 | (...) ... | expressions.cs:437:48:437:52 | ... + ... |
|
||||
| expressions.cs:437:48:437:48 | (...) ... | expressions.cs:437:48:437:48 | access to parameter x |
|
||||
| expressions.cs:438:52:438:56 | (...) ... | expressions.cs:438:52:438:56 | ... + ... |
|
||||
| expressions.cs:440:56:440:56 | (...) ... | expressions.cs:440:56:440:56 | access to parameter x |
|
||||
| expressions.cs:449:41:449:53 | (...) ... | expressions.cs:449:48:449:52 | ... + ... |
|
||||
| expressions.cs:449:48:449:48 | (...) ... | expressions.cs:449:48:449:48 | access to parameter x |
|
||||
| expressions.cs:450:52:450:56 | (...) ... | expressions.cs:450:52:450:56 | ... + ... |
|
||||
| expressions.cs:452:56:452:56 | (...) ... | expressions.cs:452:56:452:56 | access to parameter x |
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
| expressions.cs:492:29:492:41 | access to type (Int32,String) | expressions.cs:492:29:492:41 | (Int32,String) |
|
||||
| expressions.cs:493:29:493:49 | access to type (Boolean,Int32[],Object) | expressions.cs:493:29:493:49 | (Boolean,Int32[],Object) |
|
||||
| expressions.cs:494:28:494:40 | access to type (Int32,String) | expressions.cs:492:29:492:41 | (Int32,String) |
|
||||
| expressions.cs:495:28:495:49 | access to type (Boolean,Int32[],dynamic) | expressions.cs:495:28:495:49 | (Boolean,Int32[],dynamic) |
|
||||
| expressions.cs:504:29:504:41 | access to type (Int32,String) | expressions.cs:504:29:504:41 | (Int32,String) |
|
||||
| expressions.cs:505:29:505:49 | access to type (Boolean,Int32[],Object) | expressions.cs:505:29:505:49 | (Boolean,Int32[],Object) |
|
||||
| expressions.cs:506:28:506:40 | access to type (Int32,String) | expressions.cs:504:29:504:41 | (Int32,String) |
|
||||
| expressions.cs:507:28:507:49 | access to type (Boolean,Int32[],dynamic) | expressions.cs:507:28:507:49 | (Boolean,Int32[],dynamic) |
|
||||
|
||||
@@ -432,6 +432,18 @@ namespace Expressions
|
||||
delegate int S(int x, int y);
|
||||
delegate void Unit();
|
||||
|
||||
void MultiDimensionalArrayCreations()
|
||||
{
|
||||
object o = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 } };
|
||||
o = new int[,,] { { { 1, 2, 3 }, { 4, 5, 6 } }, { { 7, 8, 9 }, { 10, 11, 12 } } };
|
||||
o = new int[,][,]
|
||||
{
|
||||
{ new int[,] { {1,3}, {5,7} }, new int[,] { {0,2}, {4,6}, {8,10} }, new int[,] { {11,22}, {99,88}, {0,9} } },
|
||||
{ new int[,] { {1,3}, {5,7} }, new int[,] { {0,2}, {4,6}, {8,10} }, new int[,] { {11,22}, {99,88}, {0,9} } }
|
||||
};
|
||||
o = new int[][,] { new int[,] { { 1, 2 } }, new int[,] { { 1, 2, 3 }, { 1, 2, 3 }, { 1, 2, 3 }, { 1, 2, 3 } } };
|
||||
}
|
||||
|
||||
void MainAnonymousFunctions()
|
||||
{
|
||||
Func<Int16, Byte> f1 = x => (byte)(x + 1); // Implicitly typed, expression body
|
||||
|
||||
Reference in New Issue
Block a user