From 372e9e1a9775bc9aa727afddf242ff0220889f58 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sat, 25 Nov 2017 18:38:39 +0100 Subject: [PATCH] Fix handling of operators in Roslyn --- .../TestCases/Pretty/ExpressionTrees.cs | 10 +- .../TestCases/Pretty/ExpressionTrees.il | 504 +++++++++++++---- .../TestCases/Pretty/ExpressionTrees.opt.il | 516 ++++++++++++----- .../Pretty/ExpressionTrees.opt.roslyn.il | 511 ++++++++++++----- .../Pretty/ExpressionTrees.roslyn.il | 517 +++++++++++++----- .../IL/Transforms/TransformExpressionTrees.cs | 28 +- 6 files changed, 1558 insertions(+), 528 deletions(-) diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.cs b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.cs index e7f2a2882..b82943af8 100644 --- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.cs +++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.cs @@ -316,10 +316,18 @@ public class ExpressionTrees { return a("42"); } - + + private bool Fizz(Func a) + { + return a(null); + } + public void NestedLambda2() { ExpressionTrees.ToCode(ExpressionTrees.X(), () => this.Fizz((string x) => x == "a")); + ExpressionTrees.ToCode(ExpressionTrees.X(), () => this.Fizz((string x) => x != "a")); + ExpressionTrees.ToCode(ExpressionTrees.X(), () => this.Fizz((Action x) => x == new Action(this.NestedLambda2))); + ExpressionTrees.ToCode(ExpressionTrees.X(), () => this.Fizz((Action x) => x != new Action(this.NestedLambda2))); ExpressionTrees.ToCode(ExpressionTrees.X(), () => this.Fizz((int x) => x == 37)); ExpressionTrees.ToCode(ExpressionTrees.X(), () => this.Fizz((int x) => true)); diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.il index bcb43cdf2..4b08b380b 100644 --- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.il +++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.il @@ -20,7 +20,7 @@ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. .ver 4:0:0:0 } -.assembly '05r5is52' +.assembly gj2fd1ss { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx @@ -30,15 +30,15 @@ .hash algorithm 0x00008004 .ver 0:0:0:0 } -.module '05r5is52.dll' -// MVID: {F70BBCF1-4F46-4420-BD20-CAE864CFD4A5} +.module gj2fd1ss.dll +// MVID: {611E022F-FB4E-4130-A180-D0169E711557} .custom instance void [mscorlib]System.Security.UnverifiableCodeAttribute::.ctor() = ( 01 00 00 00 ) .imagebase 0x10000000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x00F10000 +// Image base: 0x03390000 // =============== CLASS MEMBERS DECLARATION =================== @@ -3164,14 +3164,32 @@ IL_0010: ret } // end of method ExpressionTrees::Fizz + .method private hidebysig instance bool + Fizz(class [mscorlib]System.Func`2 a) cil managed + { + // Code size 13 (0xd) + .maxstack 2 + .locals init (bool V_0) + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: ldnull + IL_0003: callvirt instance !1 class [mscorlib]System.Func`2::Invoke(!0) + IL_0008: stloc.0 + IL_0009: br.s IL_000b + + IL_000b: ldloc.0 + IL_000c: ret + } // end of method ExpressionTrees::Fizz + .method public hidebysig instance void NestedLambda2() cil managed { - // Code size 562 (0x232) - .maxstack 9 + // Code size 1254 (0x4e6) + .maxstack 12 .locals init (class [System.Core]System.Linq.Expressions.Expression[] V_0, class [System.Core]System.Linq.Expressions.ParameterExpression V_1, - class [System.Core]System.Linq.Expressions.ParameterExpression[] V_2) + class [System.Core]System.Linq.Expressions.ParameterExpression[] V_2, + class [System.Core]System.Linq.Expressions.Expression[] V_3) IL_0000: nop IL_0001: call object ExpressionTrees::X() IL_0006: ldarg.0 @@ -3238,7 +3256,7 @@ IL_00ab: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_00b0: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_00b5: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_00b5: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) IL_00ba: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) IL_00bf: castclass [mscorlib]System.Reflection.MethodInfo IL_00c4: ldc.i4.1 @@ -3246,142 +3264,390 @@ IL_00ca: stloc.0 IL_00cb: ldloc.0 IL_00cc: ldc.i4.0 - IL_00cd: ldtoken [mscorlib]System.Int32 + IL_00cd: ldtoken [mscorlib]System.String IL_00d2: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_00d7: ldstr "x" IL_00dc: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, string) IL_00e1: stloc.1 IL_00e2: ldloc.1 - IL_00e3: ldc.i4.s 37 - IL_00e5: box [mscorlib]System.Int32 - IL_00ea: ldtoken [mscorlib]System.Int32 - IL_00ef: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_00f4: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + IL_00e3: ldstr "a" + IL_00e8: ldtoken [mscorlib]System.String + IL_00ed: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_00f2: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_00f7: ldc.i4.0 + IL_00f8: ldtoken method bool [mscorlib]System.String::op_Inequality(string, + string) + IL_00fd: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0102: castclass [mscorlib]System.Reflection.MethodInfo + IL_0107: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::NotEqual(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.Expression, + bool, + class [mscorlib]System.Reflection.MethodInfo) + IL_010c: ldc.i4.1 + IL_010d: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0112: stloc.2 + IL_0113: ldloc.2 + IL_0114: ldc.i4.0 + IL_0115: ldloc.1 + IL_0116: stelem.ref + IL_0117: ldloc.2 + IL_0118: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_011d: stelem.ref + IL_011e: ldloc.0 + IL_011f: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_0124: ldc.i4.0 + IL_0125: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_012a: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_012f: call object ExpressionTrees::ToCode(object, + class [System.Core]System.Linq.Expressions.Expression`1>) + IL_0134: pop + IL_0135: call object ExpressionTrees::X() + IL_013a: ldarg.0 + IL_013b: box ExpressionTrees + IL_0140: ldtoken ExpressionTrees + IL_0145: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_014a: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_014f: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_0154: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0159: castclass [mscorlib]System.Reflection.MethodInfo + IL_015e: ldc.i4.1 + IL_015f: newarr [System.Core]System.Linq.Expressions.Expression + IL_0164: stloc.0 + IL_0165: ldloc.0 + IL_0166: ldc.i4.0 + IL_0167: ldtoken [mscorlib]System.Action + IL_016c: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0171: ldstr "x" + IL_0176: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + string) + IL_017b: stloc.1 + IL_017c: ldloc.1 + IL_017d: ldtoken method instance void ExpressionTrees::NestedLambda2() + IL_0182: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0187: castclass [mscorlib]System.Reflection.MethodInfo + IL_018c: box [mscorlib]System.Reflection.MethodInfo + IL_0191: ldtoken [mscorlib]System.Reflection.MethodInfo + IL_0196: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_019b: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_01a0: ldtoken method instance class [mscorlib]System.Delegate [mscorlib]System.Reflection.MethodInfo::CreateDelegate(class [mscorlib]System.Type, + object) + IL_01a5: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_01aa: castclass [mscorlib]System.Reflection.MethodInfo + IL_01af: ldc.i4.2 + IL_01b0: newarr [System.Core]System.Linq.Expressions.Expression + IL_01b5: stloc.3 + IL_01b6: ldloc.3 + IL_01b7: ldc.i4.0 + IL_01b8: ldtoken [mscorlib]System.Action + IL_01bd: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_01c2: box [mscorlib]System.Type + IL_01c7: ldtoken [mscorlib]System.Type + IL_01cc: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_01d1: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_00f9: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::Equal(class [System.Core]System.Linq.Expressions.Expression, + IL_01d6: stelem.ref + IL_01d7: ldloc.3 + IL_01d8: ldc.i4.1 + IL_01d9: ldarg.0 + IL_01da: box ExpressionTrees + IL_01df: ldtoken ExpressionTrees + IL_01e4: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_01e9: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_01ee: stelem.ref + IL_01ef: ldloc.3 + IL_01f0: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_01f5: ldtoken [mscorlib]System.Action + IL_01fa: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_01ff: call class [System.Core]System.Linq.Expressions.UnaryExpression [System.Core]System.Linq.Expressions.Expression::Convert(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Type) + IL_0204: ldc.i4.0 + IL_0205: ldtoken method bool [mscorlib]System.Delegate::op_Equality(class [mscorlib]System.Delegate, + class [mscorlib]System.Delegate) + IL_020a: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_020f: castclass [mscorlib]System.Reflection.MethodInfo + IL_0214: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::Equal(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.Expression, + bool, + class [mscorlib]System.Reflection.MethodInfo) + IL_0219: ldc.i4.1 + IL_021a: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_021f: stloc.2 + IL_0220: ldloc.2 + IL_0221: ldc.i4.0 + IL_0222: ldloc.1 + IL_0223: stelem.ref + IL_0224: ldloc.2 + IL_0225: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_022a: stelem.ref + IL_022b: ldloc.0 + IL_022c: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_0231: ldc.i4.0 + IL_0232: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0237: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_023c: call object ExpressionTrees::ToCode(object, + class [System.Core]System.Linq.Expressions.Expression`1>) + IL_0241: pop + IL_0242: call object ExpressionTrees::X() + IL_0247: ldarg.0 + IL_0248: box ExpressionTrees + IL_024d: ldtoken ExpressionTrees + IL_0252: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0257: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_025c: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_0261: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0266: castclass [mscorlib]System.Reflection.MethodInfo + IL_026b: ldc.i4.1 + IL_026c: newarr [System.Core]System.Linq.Expressions.Expression + IL_0271: stloc.0 + IL_0272: ldloc.0 + IL_0273: ldc.i4.0 + IL_0274: ldtoken [mscorlib]System.Action + IL_0279: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_027e: ldstr "x" + IL_0283: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + string) + IL_0288: stloc.1 + IL_0289: ldloc.1 + IL_028a: ldtoken method instance void ExpressionTrees::NestedLambda2() + IL_028f: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0294: castclass [mscorlib]System.Reflection.MethodInfo + IL_0299: box [mscorlib]System.Reflection.MethodInfo + IL_029e: ldtoken [mscorlib]System.Reflection.MethodInfo + IL_02a3: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_02a8: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_02ad: ldtoken method instance class [mscorlib]System.Delegate [mscorlib]System.Reflection.MethodInfo::CreateDelegate(class [mscorlib]System.Type, + object) + IL_02b2: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_02b7: castclass [mscorlib]System.Reflection.MethodInfo + IL_02bc: ldc.i4.2 + IL_02bd: newarr [System.Core]System.Linq.Expressions.Expression + IL_02c2: stloc.3 + IL_02c3: ldloc.3 + IL_02c4: ldc.i4.0 + IL_02c5: ldtoken [mscorlib]System.Action + IL_02ca: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_02cf: box [mscorlib]System.Type + IL_02d4: ldtoken [mscorlib]System.Type + IL_02d9: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_02de: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_02e3: stelem.ref + IL_02e4: ldloc.3 + IL_02e5: ldc.i4.1 + IL_02e6: ldarg.0 + IL_02e7: box ExpressionTrees + IL_02ec: ldtoken ExpressionTrees + IL_02f1: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_02f6: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_02fb: stelem.ref + IL_02fc: ldloc.3 + IL_02fd: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_0302: ldtoken [mscorlib]System.Action + IL_0307: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_030c: call class [System.Core]System.Linq.Expressions.UnaryExpression [System.Core]System.Linq.Expressions.Expression::Convert(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Type) + IL_0311: ldc.i4.0 + IL_0312: ldtoken method bool [mscorlib]System.Delegate::op_Inequality(class [mscorlib]System.Delegate, + class [mscorlib]System.Delegate) + IL_0317: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_031c: castclass [mscorlib]System.Reflection.MethodInfo + IL_0321: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::NotEqual(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.Expression, + bool, + class [mscorlib]System.Reflection.MethodInfo) + IL_0326: ldc.i4.1 + IL_0327: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_032c: stloc.2 + IL_032d: ldloc.2 + IL_032e: ldc.i4.0 + IL_032f: ldloc.1 + IL_0330: stelem.ref + IL_0331: ldloc.2 + IL_0332: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_0337: stelem.ref + IL_0338: ldloc.0 + IL_0339: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_033e: ldc.i4.0 + IL_033f: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0344: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_0349: call object ExpressionTrees::ToCode(object, + class [System.Core]System.Linq.Expressions.Expression`1>) + IL_034e: pop + IL_034f: call object ExpressionTrees::X() + IL_0354: ldarg.0 + IL_0355: box ExpressionTrees + IL_035a: ldtoken ExpressionTrees + IL_035f: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0364: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0369: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_036e: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0373: castclass [mscorlib]System.Reflection.MethodInfo + IL_0378: ldc.i4.1 + IL_0379: newarr [System.Core]System.Linq.Expressions.Expression + IL_037e: stloc.0 + IL_037f: ldloc.0 + IL_0380: ldc.i4.0 + IL_0381: ldtoken [mscorlib]System.Int32 + IL_0386: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_038b: ldstr "x" + IL_0390: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + string) + IL_0395: stloc.1 + IL_0396: ldloc.1 + IL_0397: ldc.i4.s 37 + IL_0399: box [mscorlib]System.Int32 + IL_039e: ldtoken [mscorlib]System.Int32 + IL_03a3: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_03a8: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_03ad: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::Equal(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.Expression) - IL_00fe: ldc.i4.1 - IL_00ff: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_0104: stloc.2 - IL_0105: ldloc.2 - IL_0106: ldc.i4.0 - IL_0107: ldloc.1 - IL_0108: stelem.ref - IL_0109: ldloc.2 - IL_010a: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_03b2: ldc.i4.1 + IL_03b3: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_03b8: stloc.2 + IL_03b9: ldloc.2 + IL_03ba: ldc.i4.0 + IL_03bb: ldloc.1 + IL_03bc: stelem.ref + IL_03bd: ldloc.2 + IL_03be: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_010f: stelem.ref - IL_0110: ldloc.0 - IL_0111: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + IL_03c3: stelem.ref + IL_03c4: ldloc.0 + IL_03c5: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.MethodInfo, class [System.Core]System.Linq.Expressions.Expression[]) - IL_0116: ldc.i4.0 - IL_0117: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_011c: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_03ca: ldc.i4.0 + IL_03cb: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_03d0: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_0121: call object ExpressionTrees::ToCode(object, + IL_03d5: call object ExpressionTrees::ToCode(object, class [System.Core]System.Linq.Expressions.Expression`1>) - IL_0126: pop - IL_0127: call object ExpressionTrees::X() - IL_012c: ldarg.0 - IL_012d: box ExpressionTrees - IL_0132: ldtoken ExpressionTrees - IL_0137: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_013c: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_0141: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) - IL_0146: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) - IL_014b: castclass [mscorlib]System.Reflection.MethodInfo - IL_0150: ldc.i4.1 - IL_0151: newarr [System.Core]System.Linq.Expressions.Expression - IL_0156: stloc.0 - IL_0157: ldloc.0 - IL_0158: ldc.i4.0 - IL_0159: ldtoken [mscorlib]System.Int32 - IL_015e: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_0163: ldstr "x" - IL_0168: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + IL_03da: pop + IL_03db: call object ExpressionTrees::X() + IL_03e0: ldarg.0 + IL_03e1: box ExpressionTrees + IL_03e6: ldtoken ExpressionTrees + IL_03eb: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_03f0: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_03f5: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_03fa: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_03ff: castclass [mscorlib]System.Reflection.MethodInfo + IL_0404: ldc.i4.1 + IL_0405: newarr [System.Core]System.Linq.Expressions.Expression + IL_040a: stloc.0 + IL_040b: ldloc.0 + IL_040c: ldc.i4.0 + IL_040d: ldtoken [mscorlib]System.Int32 + IL_0412: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0417: ldstr "x" + IL_041c: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, string) - IL_016d: stloc.1 - IL_016e: ldc.i4.1 - IL_016f: box [mscorlib]System.Boolean - IL_0174: ldtoken [mscorlib]System.Boolean - IL_0179: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_017e: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_0183: ldc.i4.1 - IL_0184: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_0189: stloc.2 - IL_018a: ldloc.2 - IL_018b: ldc.i4.0 - IL_018c: ldloc.1 - IL_018d: stelem.ref - IL_018e: ldloc.2 - IL_018f: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_0421: stloc.1 + IL_0422: ldc.i4.1 + IL_0423: box [mscorlib]System.Boolean + IL_0428: ldtoken [mscorlib]System.Boolean + IL_042d: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0432: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0437: ldc.i4.1 + IL_0438: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_043d: stloc.2 + IL_043e: ldloc.2 + IL_043f: ldc.i4.0 + IL_0440: ldloc.1 + IL_0441: stelem.ref + IL_0442: ldloc.2 + IL_0443: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_0194: stelem.ref - IL_0195: ldloc.0 - IL_0196: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + IL_0448: stelem.ref + IL_0449: ldloc.0 + IL_044a: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.MethodInfo, class [System.Core]System.Linq.Expressions.Expression[]) - IL_019b: ldc.i4.0 - IL_019c: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_01a1: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_044f: ldc.i4.0 + IL_0450: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0455: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_01a6: call object ExpressionTrees::ToCode(object, + IL_045a: call object ExpressionTrees::ToCode(object, class [System.Core]System.Linq.Expressions.Expression`1>) - IL_01ab: pop - IL_01ac: call object ExpressionTrees::X() - IL_01b1: ldarg.0 - IL_01b2: box ExpressionTrees - IL_01b7: ldtoken ExpressionTrees - IL_01bc: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_01c1: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_01c6: ldtoken method instance bool ExpressionTrees::Buzz(class [mscorlib]System.Func`2) - IL_01cb: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) - IL_01d0: castclass [mscorlib]System.Reflection.MethodInfo - IL_01d5: ldc.i4.1 - IL_01d6: newarr [System.Core]System.Linq.Expressions.Expression - IL_01db: stloc.0 - IL_01dc: ldloc.0 - IL_01dd: ldc.i4.0 - IL_01de: ldtoken [mscorlib]System.Int32 - IL_01e3: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_01e8: ldstr "x" - IL_01ed: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + IL_045f: pop + IL_0460: call object ExpressionTrees::X() + IL_0465: ldarg.0 + IL_0466: box ExpressionTrees + IL_046b: ldtoken ExpressionTrees + IL_0470: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0475: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_047a: ldtoken method instance bool ExpressionTrees::Buzz(class [mscorlib]System.Func`2) + IL_047f: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0484: castclass [mscorlib]System.Reflection.MethodInfo + IL_0489: ldc.i4.1 + IL_048a: newarr [System.Core]System.Linq.Expressions.Expression + IL_048f: stloc.0 + IL_0490: ldloc.0 + IL_0491: ldc.i4.0 + IL_0492: ldtoken [mscorlib]System.Int32 + IL_0497: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_049c: ldstr "x" + IL_04a1: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, string) - IL_01f2: stloc.1 - IL_01f3: ldc.i4.1 - IL_01f4: box [mscorlib]System.Boolean - IL_01f9: ldtoken [mscorlib]System.Boolean - IL_01fe: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_0203: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_0208: ldc.i4.1 - IL_0209: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_020e: stloc.2 - IL_020f: ldloc.2 - IL_0210: ldc.i4.0 - IL_0211: ldloc.1 - IL_0212: stelem.ref - IL_0213: ldloc.2 - IL_0214: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_04a6: stloc.1 + IL_04a7: ldc.i4.1 + IL_04a8: box [mscorlib]System.Boolean + IL_04ad: ldtoken [mscorlib]System.Boolean + IL_04b2: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_04b7: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_04bc: ldc.i4.1 + IL_04bd: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_04c2: stloc.2 + IL_04c3: ldloc.2 + IL_04c4: ldc.i4.0 + IL_04c5: ldloc.1 + IL_04c6: stelem.ref + IL_04c7: ldloc.2 + IL_04c8: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_0219: stelem.ref - IL_021a: ldloc.0 - IL_021b: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + IL_04cd: stelem.ref + IL_04ce: ldloc.0 + IL_04cf: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.MethodInfo, class [System.Core]System.Linq.Expressions.Expression[]) - IL_0220: ldc.i4.0 - IL_0221: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_0226: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_04d4: ldc.i4.0 + IL_04d5: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_04da: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_022b: call object ExpressionTrees::ToCode(object, + IL_04df: call object ExpressionTrees::ToCode(object, class [System.Core]System.Linq.Expressions.Expression`1>) - IL_0230: pop - IL_0231: ret + IL_04e4: pop + IL_04e5: ret } // end of method ExpressionTrees::NestedLambda2 .method public hidebysig instance void diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.opt.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.opt.il index 9deb6fe53..79299c4ae 100644 --- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.opt.il +++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.opt.il @@ -20,7 +20,7 @@ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z\V.4.. .ver 4:0:0:0 } -.assembly mav11ctu +.assembly '0rzgxc1i' { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ctor(int32) = ( 01 00 08 00 00 00 00 00 ) .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.ctor() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx @@ -30,15 +30,15 @@ .hash algorithm 0x00008004 .ver 0:0:0:0 } -.module mav11ctu.dll -// MVID: {A57EFB8D-913F-4E31-91C8-80C6D2206F2E} +.module '0rzgxc1i.dll' +// MVID: {F81FAFBD-2291-4778-9F86-AC124E94C7DB} .custom instance void [mscorlib]System.Security.UnverifiableCodeAttribute::.ctor() = ( 01 00 00 00 ) .imagebase 0x10000000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x03610000 +// Image base: 0x02CE0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -3091,11 +3091,22 @@ IL_000b: ret } // end of method ExpressionTrees::Fizz + .method private hidebysig instance bool + Fizz(class [mscorlib]System.Func`2 a) cil managed + { + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.1 + IL_0001: ldnull + IL_0002: callvirt instance !1 class [mscorlib]System.Func`2::Invoke(!0) + IL_0007: ret + } // end of method ExpressionTrees::Fizz + .method public hidebysig instance void NestedLambda2() cil managed { - // Code size 583 (0x247) - .maxstack 9 + // Code size 1310 (0x51e) + .maxstack 12 .locals init (class [System.Core]System.Linq.Expressions.Expression[] V_0, class [System.Core]System.Linq.Expressions.ParameterExpression V_1, class [System.Core]System.Linq.Expressions.ParameterExpression[] V_2, @@ -3104,10 +3115,21 @@ class [System.Core]System.Linq.Expressions.ParameterExpression[] V_5, class [System.Core]System.Linq.Expressions.Expression[] V_6, class [System.Core]System.Linq.Expressions.ParameterExpression V_7, - class [System.Core]System.Linq.Expressions.ParameterExpression[] V_8, - class [System.Core]System.Linq.Expressions.Expression[] V_9, - class [System.Core]System.Linq.Expressions.ParameterExpression V_10, - class [System.Core]System.Linq.Expressions.ParameterExpression[] V_11) + class [System.Core]System.Linq.Expressions.Expression[] V_8, + class [System.Core]System.Linq.Expressions.ParameterExpression[] V_9, + class [System.Core]System.Linq.Expressions.Expression[] V_10, + class [System.Core]System.Linq.Expressions.ParameterExpression V_11, + class [System.Core]System.Linq.Expressions.Expression[] V_12, + class [System.Core]System.Linq.Expressions.ParameterExpression[] V_13, + class [System.Core]System.Linq.Expressions.Expression[] V_14, + class [System.Core]System.Linq.Expressions.ParameterExpression V_15, + class [System.Core]System.Linq.Expressions.ParameterExpression[] V_16, + class [System.Core]System.Linq.Expressions.Expression[] V_17, + class [System.Core]System.Linq.Expressions.ParameterExpression V_18, + class [System.Core]System.Linq.Expressions.ParameterExpression[] V_19, + class [System.Core]System.Linq.Expressions.Expression[] V_20, + class [System.Core]System.Linq.Expressions.ParameterExpression V_21, + class [System.Core]System.Linq.Expressions.ParameterExpression[] V_22) IL_0000: call object ExpressionTrees::X() IL_0005: ldarg.0 IL_0006: box ExpressionTrees @@ -3173,7 +3195,7 @@ IL_00aa: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_00af: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_00b4: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_00b4: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) IL_00b9: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) IL_00be: castclass [mscorlib]System.Reflection.MethodInfo IL_00c3: ldc.i4.1 @@ -3181,142 +3203,390 @@ IL_00c9: stloc.3 IL_00ca: ldloc.3 IL_00cb: ldc.i4.0 - IL_00cc: ldtoken [mscorlib]System.Int32 + IL_00cc: ldtoken [mscorlib]System.String IL_00d1: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_00d6: ldstr "x" IL_00db: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, string) IL_00e0: stloc.s V_4 IL_00e2: ldloc.s V_4 - IL_00e4: ldc.i4.s 37 - IL_00e6: box [mscorlib]System.Int32 - IL_00eb: ldtoken [mscorlib]System.Int32 - IL_00f0: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_00f5: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_00fa: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::Equal(class [System.Core]System.Linq.Expressions.Expression, + IL_00e4: ldstr "a" + IL_00e9: ldtoken [mscorlib]System.String + IL_00ee: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_00f3: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_00f8: ldc.i4.0 + IL_00f9: ldtoken method bool [mscorlib]System.String::op_Inequality(string, + string) + IL_00fe: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0103: castclass [mscorlib]System.Reflection.MethodInfo + IL_0108: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::NotEqual(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.Expression, + bool, + class [mscorlib]System.Reflection.MethodInfo) + IL_010d: ldc.i4.1 + IL_010e: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0113: stloc.s V_5 + IL_0115: ldloc.s V_5 + IL_0117: ldc.i4.0 + IL_0118: ldloc.s V_4 + IL_011a: stelem.ref + IL_011b: ldloc.s V_5 + IL_011d: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_0122: stelem.ref + IL_0123: ldloc.3 + IL_0124: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_0129: ldc.i4.0 + IL_012a: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_012f: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_0134: call object ExpressionTrees::ToCode(object, + class [System.Core]System.Linq.Expressions.Expression`1>) + IL_0139: pop + IL_013a: call object ExpressionTrees::X() + IL_013f: ldarg.0 + IL_0140: box ExpressionTrees + IL_0145: ldtoken ExpressionTrees + IL_014a: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_014f: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0154: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_0159: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_015e: castclass [mscorlib]System.Reflection.MethodInfo + IL_0163: ldc.i4.1 + IL_0164: newarr [System.Core]System.Linq.Expressions.Expression + IL_0169: stloc.s V_6 + IL_016b: ldloc.s V_6 + IL_016d: ldc.i4.0 + IL_016e: ldtoken [mscorlib]System.Action + IL_0173: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0178: ldstr "x" + IL_017d: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + string) + IL_0182: stloc.s V_7 + IL_0184: ldloc.s V_7 + IL_0186: ldtoken method instance void ExpressionTrees::NestedLambda2() + IL_018b: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0190: castclass [mscorlib]System.Reflection.MethodInfo + IL_0195: box [mscorlib]System.Reflection.MethodInfo + IL_019a: ldtoken [mscorlib]System.Reflection.MethodInfo + IL_019f: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_01a4: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_01a9: ldtoken method instance class [mscorlib]System.Delegate [mscorlib]System.Reflection.MethodInfo::CreateDelegate(class [mscorlib]System.Type, + object) + IL_01ae: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_01b3: castclass [mscorlib]System.Reflection.MethodInfo + IL_01b8: ldc.i4.2 + IL_01b9: newarr [System.Core]System.Linq.Expressions.Expression + IL_01be: stloc.s V_8 + IL_01c0: ldloc.s V_8 + IL_01c2: ldc.i4.0 + IL_01c3: ldtoken [mscorlib]System.Action + IL_01c8: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_01cd: box [mscorlib]System.Type + IL_01d2: ldtoken [mscorlib]System.Type + IL_01d7: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_01dc: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_01e1: stelem.ref + IL_01e2: ldloc.s V_8 + IL_01e4: ldc.i4.1 + IL_01e5: ldarg.0 + IL_01e6: box ExpressionTrees + IL_01eb: ldtoken ExpressionTrees + IL_01f0: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_01f5: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_01fa: stelem.ref + IL_01fb: ldloc.s V_8 + IL_01fd: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_0202: ldtoken [mscorlib]System.Action + IL_0207: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_020c: call class [System.Core]System.Linq.Expressions.UnaryExpression [System.Core]System.Linq.Expressions.Expression::Convert(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Type) + IL_0211: ldc.i4.0 + IL_0212: ldtoken method bool [mscorlib]System.Delegate::op_Equality(class [mscorlib]System.Delegate, + class [mscorlib]System.Delegate) + IL_0217: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_021c: castclass [mscorlib]System.Reflection.MethodInfo + IL_0221: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::Equal(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.Expression, + bool, + class [mscorlib]System.Reflection.MethodInfo) + IL_0226: ldc.i4.1 + IL_0227: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_022c: stloc.s V_9 + IL_022e: ldloc.s V_9 + IL_0230: ldc.i4.0 + IL_0231: ldloc.s V_7 + IL_0233: stelem.ref + IL_0234: ldloc.s V_9 + IL_0236: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_023b: stelem.ref + IL_023c: ldloc.s V_6 + IL_023e: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_0243: ldc.i4.0 + IL_0244: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0249: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_024e: call object ExpressionTrees::ToCode(object, + class [System.Core]System.Linq.Expressions.Expression`1>) + IL_0253: pop + IL_0254: call object ExpressionTrees::X() + IL_0259: ldarg.0 + IL_025a: box ExpressionTrees + IL_025f: ldtoken ExpressionTrees + IL_0264: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0269: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_026e: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_0273: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0278: castclass [mscorlib]System.Reflection.MethodInfo + IL_027d: ldc.i4.1 + IL_027e: newarr [System.Core]System.Linq.Expressions.Expression + IL_0283: stloc.s V_10 + IL_0285: ldloc.s V_10 + IL_0287: ldc.i4.0 + IL_0288: ldtoken [mscorlib]System.Action + IL_028d: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0292: ldstr "x" + IL_0297: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + string) + IL_029c: stloc.s V_11 + IL_029e: ldloc.s V_11 + IL_02a0: ldtoken method instance void ExpressionTrees::NestedLambda2() + IL_02a5: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_02aa: castclass [mscorlib]System.Reflection.MethodInfo + IL_02af: box [mscorlib]System.Reflection.MethodInfo + IL_02b4: ldtoken [mscorlib]System.Reflection.MethodInfo + IL_02b9: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_02be: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_02c3: ldtoken method instance class [mscorlib]System.Delegate [mscorlib]System.Reflection.MethodInfo::CreateDelegate(class [mscorlib]System.Type, + object) + IL_02c8: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_02cd: castclass [mscorlib]System.Reflection.MethodInfo + IL_02d2: ldc.i4.2 + IL_02d3: newarr [System.Core]System.Linq.Expressions.Expression + IL_02d8: stloc.s V_12 + IL_02da: ldloc.s V_12 + IL_02dc: ldc.i4.0 + IL_02dd: ldtoken [mscorlib]System.Action + IL_02e2: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_02e7: box [mscorlib]System.Type + IL_02ec: ldtoken [mscorlib]System.Type + IL_02f1: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_02f6: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_02fb: stelem.ref + IL_02fc: ldloc.s V_12 + IL_02fe: ldc.i4.1 + IL_02ff: ldarg.0 + IL_0300: box ExpressionTrees + IL_0305: ldtoken ExpressionTrees + IL_030a: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_030f: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0314: stelem.ref + IL_0315: ldloc.s V_12 + IL_0317: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_031c: ldtoken [mscorlib]System.Action + IL_0321: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0326: call class [System.Core]System.Linq.Expressions.UnaryExpression [System.Core]System.Linq.Expressions.Expression::Convert(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Type) + IL_032b: ldc.i4.0 + IL_032c: ldtoken method bool [mscorlib]System.Delegate::op_Inequality(class [mscorlib]System.Delegate, + class [mscorlib]System.Delegate) + IL_0331: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0336: castclass [mscorlib]System.Reflection.MethodInfo + IL_033b: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::NotEqual(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.Expression, + bool, + class [mscorlib]System.Reflection.MethodInfo) + IL_0340: ldc.i4.1 + IL_0341: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0346: stloc.s V_13 + IL_0348: ldloc.s V_13 + IL_034a: ldc.i4.0 + IL_034b: ldloc.s V_11 + IL_034d: stelem.ref + IL_034e: ldloc.s V_13 + IL_0350: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_0355: stelem.ref + IL_0356: ldloc.s V_10 + IL_0358: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_035d: ldc.i4.0 + IL_035e: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0363: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_0368: call object ExpressionTrees::ToCode(object, + class [System.Core]System.Linq.Expressions.Expression`1>) + IL_036d: pop + IL_036e: call object ExpressionTrees::X() + IL_0373: ldarg.0 + IL_0374: box ExpressionTrees + IL_0379: ldtoken ExpressionTrees + IL_037e: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0383: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0388: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_038d: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0392: castclass [mscorlib]System.Reflection.MethodInfo + IL_0397: ldc.i4.1 + IL_0398: newarr [System.Core]System.Linq.Expressions.Expression + IL_039d: stloc.s V_14 + IL_039f: ldloc.s V_14 + IL_03a1: ldc.i4.0 + IL_03a2: ldtoken [mscorlib]System.Int32 + IL_03a7: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_03ac: ldstr "x" + IL_03b1: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + string) + IL_03b6: stloc.s V_15 + IL_03b8: ldloc.s V_15 + IL_03ba: ldc.i4.s 37 + IL_03bc: box [mscorlib]System.Int32 + IL_03c1: ldtoken [mscorlib]System.Int32 + IL_03c6: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_03cb: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_03d0: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::Equal(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.Expression) - IL_00ff: ldc.i4.1 - IL_0100: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_0105: stloc.s V_5 - IL_0107: ldloc.s V_5 - IL_0109: ldc.i4.0 - IL_010a: ldloc.s V_4 - IL_010c: stelem.ref - IL_010d: ldloc.s V_5 - IL_010f: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_03d5: ldc.i4.1 + IL_03d6: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_03db: stloc.s V_16 + IL_03dd: ldloc.s V_16 + IL_03df: ldc.i4.0 + IL_03e0: ldloc.s V_15 + IL_03e2: stelem.ref + IL_03e3: ldloc.s V_16 + IL_03e5: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_0114: stelem.ref - IL_0115: ldloc.3 - IL_0116: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + IL_03ea: stelem.ref + IL_03eb: ldloc.s V_14 + IL_03ed: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.MethodInfo, class [System.Core]System.Linq.Expressions.Expression[]) - IL_011b: ldc.i4.0 - IL_011c: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_0121: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_03f2: ldc.i4.0 + IL_03f3: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_03f8: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_0126: call object ExpressionTrees::ToCode(object, + IL_03fd: call object ExpressionTrees::ToCode(object, class [System.Core]System.Linq.Expressions.Expression`1>) - IL_012b: pop - IL_012c: call object ExpressionTrees::X() - IL_0131: ldarg.0 - IL_0132: box ExpressionTrees - IL_0137: ldtoken ExpressionTrees - IL_013c: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_0141: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_0146: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) - IL_014b: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) - IL_0150: castclass [mscorlib]System.Reflection.MethodInfo - IL_0155: ldc.i4.1 - IL_0156: newarr [System.Core]System.Linq.Expressions.Expression - IL_015b: stloc.s V_6 - IL_015d: ldloc.s V_6 - IL_015f: ldc.i4.0 - IL_0160: ldtoken [mscorlib]System.Int32 - IL_0165: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_016a: ldstr "x" - IL_016f: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + IL_0402: pop + IL_0403: call object ExpressionTrees::X() + IL_0408: ldarg.0 + IL_0409: box ExpressionTrees + IL_040e: ldtoken ExpressionTrees + IL_0413: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0418: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_041d: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_0422: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0427: castclass [mscorlib]System.Reflection.MethodInfo + IL_042c: ldc.i4.1 + IL_042d: newarr [System.Core]System.Linq.Expressions.Expression + IL_0432: stloc.s V_17 + IL_0434: ldloc.s V_17 + IL_0436: ldc.i4.0 + IL_0437: ldtoken [mscorlib]System.Int32 + IL_043c: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0441: ldstr "x" + IL_0446: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, string) - IL_0174: stloc.s V_7 - IL_0176: ldc.i4.1 - IL_0177: box [mscorlib]System.Boolean - IL_017c: ldtoken [mscorlib]System.Boolean - IL_0181: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_0186: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_018b: ldc.i4.1 - IL_018c: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_0191: stloc.s V_8 - IL_0193: ldloc.s V_8 - IL_0195: ldc.i4.0 - IL_0196: ldloc.s V_7 - IL_0198: stelem.ref - IL_0199: ldloc.s V_8 - IL_019b: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_044b: stloc.s V_18 + IL_044d: ldc.i4.1 + IL_044e: box [mscorlib]System.Boolean + IL_0453: ldtoken [mscorlib]System.Boolean + IL_0458: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_045d: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0462: ldc.i4.1 + IL_0463: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0468: stloc.s V_19 + IL_046a: ldloc.s V_19 + IL_046c: ldc.i4.0 + IL_046d: ldloc.s V_18 + IL_046f: stelem.ref + IL_0470: ldloc.s V_19 + IL_0472: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_01a0: stelem.ref - IL_01a1: ldloc.s V_6 - IL_01a3: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + IL_0477: stelem.ref + IL_0478: ldloc.s V_17 + IL_047a: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.MethodInfo, class [System.Core]System.Linq.Expressions.Expression[]) - IL_01a8: ldc.i4.0 - IL_01a9: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_01ae: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_047f: ldc.i4.0 + IL_0480: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0485: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_01b3: call object ExpressionTrees::ToCode(object, + IL_048a: call object ExpressionTrees::ToCode(object, class [System.Core]System.Linq.Expressions.Expression`1>) - IL_01b8: pop - IL_01b9: call object ExpressionTrees::X() - IL_01be: ldarg.0 - IL_01bf: box ExpressionTrees - IL_01c4: ldtoken ExpressionTrees - IL_01c9: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_01ce: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_01d3: ldtoken method instance bool ExpressionTrees::Buzz(class [mscorlib]System.Func`2) - IL_01d8: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) - IL_01dd: castclass [mscorlib]System.Reflection.MethodInfo - IL_01e2: ldc.i4.1 - IL_01e3: newarr [System.Core]System.Linq.Expressions.Expression - IL_01e8: stloc.s V_9 - IL_01ea: ldloc.s V_9 - IL_01ec: ldc.i4.0 - IL_01ed: ldtoken [mscorlib]System.Int32 - IL_01f2: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_01f7: ldstr "x" - IL_01fc: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + IL_048f: pop + IL_0490: call object ExpressionTrees::X() + IL_0495: ldarg.0 + IL_0496: box ExpressionTrees + IL_049b: ldtoken ExpressionTrees + IL_04a0: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_04a5: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_04aa: ldtoken method instance bool ExpressionTrees::Buzz(class [mscorlib]System.Func`2) + IL_04af: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_04b4: castclass [mscorlib]System.Reflection.MethodInfo + IL_04b9: ldc.i4.1 + IL_04ba: newarr [System.Core]System.Linq.Expressions.Expression + IL_04bf: stloc.s V_20 + IL_04c1: ldloc.s V_20 + IL_04c3: ldc.i4.0 + IL_04c4: ldtoken [mscorlib]System.Int32 + IL_04c9: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_04ce: ldstr "x" + IL_04d3: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, string) - IL_0201: stloc.s V_10 - IL_0203: ldc.i4.1 - IL_0204: box [mscorlib]System.Boolean - IL_0209: ldtoken [mscorlib]System.Boolean - IL_020e: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_0213: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_0218: ldc.i4.1 - IL_0219: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_021e: stloc.s V_11 - IL_0220: ldloc.s V_11 - IL_0222: ldc.i4.0 - IL_0223: ldloc.s V_10 - IL_0225: stelem.ref - IL_0226: ldloc.s V_11 - IL_0228: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_04d8: stloc.s V_21 + IL_04da: ldc.i4.1 + IL_04db: box [mscorlib]System.Boolean + IL_04e0: ldtoken [mscorlib]System.Boolean + IL_04e5: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_04ea: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_04ef: ldc.i4.1 + IL_04f0: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_04f5: stloc.s V_22 + IL_04f7: ldloc.s V_22 + IL_04f9: ldc.i4.0 + IL_04fa: ldloc.s V_21 + IL_04fc: stelem.ref + IL_04fd: ldloc.s V_22 + IL_04ff: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_022d: stelem.ref - IL_022e: ldloc.s V_9 - IL_0230: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + IL_0504: stelem.ref + IL_0505: ldloc.s V_20 + IL_0507: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.MethodInfo, class [System.Core]System.Linq.Expressions.Expression[]) - IL_0235: ldc.i4.0 - IL_0236: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_023b: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_050c: ldc.i4.0 + IL_050d: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0512: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_0240: call object ExpressionTrees::ToCode(object, + IL_0517: call object ExpressionTrees::ToCode(object, class [System.Core]System.Linq.Expressions.Expression`1>) - IL_0245: pop - IL_0246: ret + IL_051c: pop + IL_051d: ret } // end of method ExpressionTrees::NestedLambda2 .method public hidebysig instance void diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.opt.roslyn.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.opt.roslyn.il index e7ee35454..d1862c220 100644 --- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.opt.roslyn.il +++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.opt.roslyn.il @@ -35,14 +35,14 @@ .ver 0:0:0:0 } .module ExpressionTrees.dll -// MVID: {D518E89D-9CFD-4B4B-A974-EACAB7B2D1C7} +// MVID: {AA9C673A-BFCE-40E8-B33E-DB3A1434FD39} .custom instance void [mscorlib]System.Security.UnverifiableCodeAttribute::.ctor() = ( 01 00 00 00 ) .imagebase 0x10000000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x012D0000 +// Image base: 0x02C90000 // =============== CLASS MEMBERS DECLARATION =================== @@ -709,7 +709,7 @@ } // end of class '<>c__DisplayClass34_0' - .class auto ansi sealed nested private beforefieldinit '<>c__DisplayClass43_0' + .class auto ansi sealed nested private beforefieldinit '<>c__DisplayClass44_0' extends [mscorlib]System.Object { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) @@ -724,11 +724,11 @@ IL_0000: ldarg.0 IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: ret - } // end of method '<>c__DisplayClass43_0'::.ctor + } // end of method '<>c__DisplayClass44_0'::.ctor - } // end of class '<>c__DisplayClass43_0' + } // end of class '<>c__DisplayClass44_0' - .class auto ansi sealed nested private beforefieldinit '<>c__DisplayClass44_0' + .class auto ansi sealed nested private beforefieldinit '<>c__DisplayClass45_0' extends [mscorlib]System.Object { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) @@ -741,11 +741,11 @@ IL_0000: ldarg.0 IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: ret - } // end of method '<>c__DisplayClass44_0'::.ctor + } // end of method '<>c__DisplayClass45_0'::.ctor - } // end of class '<>c__DisplayClass44_0' + } // end of class '<>c__DisplayClass45_0' - .class auto ansi sealed nested private beforefieldinit '<>c__DisplayClass54_0' + .class auto ansi sealed nested private beforefieldinit '<>c__DisplayClass55_0' extends [mscorlib]System.Object { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) @@ -759,9 +759,9 @@ IL_0000: ldarg.0 IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: ret - } // end of method '<>c__DisplayClass54_0'::.ctor + } // end of method '<>c__DisplayClass55_0'::.ctor - } // end of class '<>c__DisplayClass54_0' + } // end of class '<>c__DisplayClass55_0' .field private int32 'field' .method private hidebysig static object @@ -3348,11 +3348,22 @@ IL_000b: ret } // end of method ExpressionTrees::Fizz + .method private hidebysig instance bool + Fizz(class [mscorlib]System.Func`2 a) cil managed + { + // Code size 8 (0x8) + .maxstack 8 + IL_0000: ldarg.1 + IL_0001: ldnull + IL_0002: callvirt instance !1 class [mscorlib]System.Func`2::Invoke(!0) + IL_0007: ret + } // end of method ExpressionTrees::Fizz + .method public hidebysig instance void NestedLambda2() cil managed { - // Code size 509 (0x1fd) - .maxstack 11 + // Code size 1124 (0x464) + .maxstack 14 .locals init (class [System.Core]System.Linq.Expressions.ParameterExpression V_0) IL_0000: call object ExpressionTrees::X() IL_0005: ldarg.0 @@ -3406,136 +3417,352 @@ IL_008c: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_0091: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_0096: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_0096: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) IL_009b: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) IL_00a0: castclass [mscorlib]System.Reflection.MethodInfo IL_00a5: ldc.i4.1 IL_00a6: newarr [System.Core]System.Linq.Expressions.Expression IL_00ab: dup IL_00ac: ldc.i4.0 - IL_00ad: ldtoken [mscorlib]System.Int32 + IL_00ad: ldtoken [mscorlib]System.String IL_00b2: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_00b7: ldstr "x" IL_00bc: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, string) IL_00c1: stloc.0 IL_00c2: ldloc.0 - IL_00c3: ldc.i4.s 37 - IL_00c5: box [mscorlib]System.Int32 - IL_00ca: ldtoken [mscorlib]System.Int32 - IL_00cf: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_00d4: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + IL_00c3: ldstr "a" + IL_00c8: ldtoken [mscorlib]System.String + IL_00cd: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_00d2: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_00d9: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::Equal(class [System.Core]System.Linq.Expressions.Expression, + IL_00d7: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::NotEqual(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.Expression) + IL_00dc: ldc.i4.1 + IL_00dd: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_00e2: dup + IL_00e3: ldc.i4.0 + IL_00e4: ldloc.0 + IL_00e5: stelem.ref + IL_00e6: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_00eb: stelem.ref + IL_00ec: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_00f1: ldc.i4.0 + IL_00f2: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_00f7: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_00fc: call object ExpressionTrees::ToCode(object, + class [System.Core]System.Linq.Expressions.Expression`1>) + IL_0101: pop + IL_0102: call object ExpressionTrees::X() + IL_0107: ldarg.0 + IL_0108: ldtoken ExpressionTrees + IL_010d: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0112: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0117: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_011c: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0121: castclass [mscorlib]System.Reflection.MethodInfo + IL_0126: ldc.i4.1 + IL_0127: newarr [System.Core]System.Linq.Expressions.Expression + IL_012c: dup + IL_012d: ldc.i4.0 + IL_012e: ldtoken [mscorlib]System.Action + IL_0133: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0138: ldstr "x" + IL_013d: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + string) + IL_0142: stloc.0 + IL_0143: ldloc.0 + IL_0144: ldtoken method instance void ExpressionTrees::NestedLambda2() + IL_0149: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_014e: castclass [mscorlib]System.Reflection.MethodInfo + IL_0153: ldtoken [mscorlib]System.Reflection.MethodInfo + IL_0158: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_015d: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0162: ldtoken method instance class [mscorlib]System.Delegate [mscorlib]System.Reflection.MethodInfo::CreateDelegate(class [mscorlib]System.Type, + object) + IL_0167: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_016c: castclass [mscorlib]System.Reflection.MethodInfo + IL_0171: ldc.i4.2 + IL_0172: newarr [System.Core]System.Linq.Expressions.Expression + IL_0177: dup + IL_0178: ldc.i4.0 + IL_0179: ldtoken [mscorlib]System.Action + IL_017e: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0183: ldtoken [mscorlib]System.Type + IL_0188: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_018d: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0192: stelem.ref + IL_0193: dup + IL_0194: ldc.i4.1 + IL_0195: ldarg.0 + IL_0196: ldtoken ExpressionTrees + IL_019b: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_01a0: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_01a5: stelem.ref + IL_01a6: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_01ab: ldtoken [mscorlib]System.Action + IL_01b0: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_01b5: call class [System.Core]System.Linq.Expressions.UnaryExpression [System.Core]System.Linq.Expressions.Expression::Convert(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Type) + IL_01ba: ldc.i4.0 + IL_01bb: ldtoken method bool [mscorlib]System.Delegate::op_Equality(class [mscorlib]System.Delegate, + class [mscorlib]System.Delegate) + IL_01c0: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_01c5: castclass [mscorlib]System.Reflection.MethodInfo + IL_01ca: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::Equal(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.Expression, + bool, + class [mscorlib]System.Reflection.MethodInfo) + IL_01cf: ldc.i4.1 + IL_01d0: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_01d5: dup + IL_01d6: ldc.i4.0 + IL_01d7: ldloc.0 + IL_01d8: stelem.ref + IL_01d9: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_01de: stelem.ref + IL_01df: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_01e4: ldc.i4.0 + IL_01e5: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_01ea: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_01ef: call object ExpressionTrees::ToCode(object, + class [System.Core]System.Linq.Expressions.Expression`1>) + IL_01f4: pop + IL_01f5: call object ExpressionTrees::X() + IL_01fa: ldarg.0 + IL_01fb: ldtoken ExpressionTrees + IL_0200: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0205: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_020a: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_020f: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0214: castclass [mscorlib]System.Reflection.MethodInfo + IL_0219: ldc.i4.1 + IL_021a: newarr [System.Core]System.Linq.Expressions.Expression + IL_021f: dup + IL_0220: ldc.i4.0 + IL_0221: ldtoken [mscorlib]System.Action + IL_0226: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_022b: ldstr "x" + IL_0230: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + string) + IL_0235: stloc.0 + IL_0236: ldloc.0 + IL_0237: ldtoken method instance void ExpressionTrees::NestedLambda2() + IL_023c: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0241: castclass [mscorlib]System.Reflection.MethodInfo + IL_0246: ldtoken [mscorlib]System.Reflection.MethodInfo + IL_024b: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0250: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0255: ldtoken method instance class [mscorlib]System.Delegate [mscorlib]System.Reflection.MethodInfo::CreateDelegate(class [mscorlib]System.Type, + object) + IL_025a: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_025f: castclass [mscorlib]System.Reflection.MethodInfo + IL_0264: ldc.i4.2 + IL_0265: newarr [System.Core]System.Linq.Expressions.Expression + IL_026a: dup + IL_026b: ldc.i4.0 + IL_026c: ldtoken [mscorlib]System.Action + IL_0271: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0276: ldtoken [mscorlib]System.Type + IL_027b: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0280: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0285: stelem.ref + IL_0286: dup + IL_0287: ldc.i4.1 + IL_0288: ldarg.0 + IL_0289: ldtoken ExpressionTrees + IL_028e: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0293: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0298: stelem.ref + IL_0299: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_029e: ldtoken [mscorlib]System.Action + IL_02a3: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_02a8: call class [System.Core]System.Linq.Expressions.UnaryExpression [System.Core]System.Linq.Expressions.Expression::Convert(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Type) + IL_02ad: ldc.i4.0 + IL_02ae: ldtoken method bool [mscorlib]System.Delegate::op_Inequality(class [mscorlib]System.Delegate, + class [mscorlib]System.Delegate) + IL_02b3: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_02b8: castclass [mscorlib]System.Reflection.MethodInfo + IL_02bd: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::NotEqual(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.Expression, + bool, + class [mscorlib]System.Reflection.MethodInfo) + IL_02c2: ldc.i4.1 + IL_02c3: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_02c8: dup + IL_02c9: ldc.i4.0 + IL_02ca: ldloc.0 + IL_02cb: stelem.ref + IL_02cc: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_02d1: stelem.ref + IL_02d2: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_02d7: ldc.i4.0 + IL_02d8: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_02dd: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_02e2: call object ExpressionTrees::ToCode(object, + class [System.Core]System.Linq.Expressions.Expression`1>) + IL_02e7: pop + IL_02e8: call object ExpressionTrees::X() + IL_02ed: ldarg.0 + IL_02ee: ldtoken ExpressionTrees + IL_02f3: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_02f8: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_02fd: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_0302: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0307: castclass [mscorlib]System.Reflection.MethodInfo + IL_030c: ldc.i4.1 + IL_030d: newarr [System.Core]System.Linq.Expressions.Expression + IL_0312: dup + IL_0313: ldc.i4.0 + IL_0314: ldtoken [mscorlib]System.Int32 + IL_0319: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_031e: ldstr "x" + IL_0323: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + string) + IL_0328: stloc.0 + IL_0329: ldloc.0 + IL_032a: ldc.i4.s 37 + IL_032c: box [mscorlib]System.Int32 + IL_0331: ldtoken [mscorlib]System.Int32 + IL_0336: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_033b: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0340: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::Equal(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.Expression) - IL_00de: ldc.i4.1 - IL_00df: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_00e4: dup - IL_00e5: ldc.i4.0 - IL_00e6: ldloc.0 - IL_00e7: stelem.ref - IL_00e8: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_0345: ldc.i4.1 + IL_0346: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_034b: dup + IL_034c: ldc.i4.0 + IL_034d: ldloc.0 + IL_034e: stelem.ref + IL_034f: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_00ed: stelem.ref - IL_00ee: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + IL_0354: stelem.ref + IL_0355: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.MethodInfo, class [System.Core]System.Linq.Expressions.Expression[]) - IL_00f3: ldc.i4.0 - IL_00f4: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_00f9: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_035a: ldc.i4.0 + IL_035b: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0360: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_00fe: call object ExpressionTrees::ToCode(object, + IL_0365: call object ExpressionTrees::ToCode(object, class [System.Core]System.Linq.Expressions.Expression`1>) - IL_0103: pop - IL_0104: call object ExpressionTrees::X() - IL_0109: ldarg.0 - IL_010a: ldtoken ExpressionTrees - IL_010f: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_0114: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_0119: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) - IL_011e: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) - IL_0123: castclass [mscorlib]System.Reflection.MethodInfo - IL_0128: ldc.i4.1 - IL_0129: newarr [System.Core]System.Linq.Expressions.Expression - IL_012e: dup - IL_012f: ldc.i4.0 - IL_0130: ldtoken [mscorlib]System.Int32 - IL_0135: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_013a: ldstr "x" - IL_013f: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + IL_036a: pop + IL_036b: call object ExpressionTrees::X() + IL_0370: ldarg.0 + IL_0371: ldtoken ExpressionTrees + IL_0376: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_037b: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0380: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_0385: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_038a: castclass [mscorlib]System.Reflection.MethodInfo + IL_038f: ldc.i4.1 + IL_0390: newarr [System.Core]System.Linq.Expressions.Expression + IL_0395: dup + IL_0396: ldc.i4.0 + IL_0397: ldtoken [mscorlib]System.Int32 + IL_039c: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_03a1: ldstr "x" + IL_03a6: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, string) - IL_0144: stloc.0 - IL_0145: ldc.i4.1 - IL_0146: box [mscorlib]System.Boolean - IL_014b: ldtoken [mscorlib]System.Boolean - IL_0150: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_0155: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_015a: ldc.i4.1 - IL_015b: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_0160: dup - IL_0161: ldc.i4.0 - IL_0162: ldloc.0 - IL_0163: stelem.ref - IL_0164: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_03ab: stloc.0 + IL_03ac: ldc.i4.1 + IL_03ad: box [mscorlib]System.Boolean + IL_03b2: ldtoken [mscorlib]System.Boolean + IL_03b7: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_03bc: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_03c1: ldc.i4.1 + IL_03c2: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_03c7: dup + IL_03c8: ldc.i4.0 + IL_03c9: ldloc.0 + IL_03ca: stelem.ref + IL_03cb: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_0169: stelem.ref - IL_016a: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + IL_03d0: stelem.ref + IL_03d1: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.MethodInfo, class [System.Core]System.Linq.Expressions.Expression[]) - IL_016f: ldc.i4.0 - IL_0170: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_0175: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_03d6: ldc.i4.0 + IL_03d7: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_03dc: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_017a: call object ExpressionTrees::ToCode(object, + IL_03e1: call object ExpressionTrees::ToCode(object, class [System.Core]System.Linq.Expressions.Expression`1>) - IL_017f: pop - IL_0180: call object ExpressionTrees::X() - IL_0185: ldarg.0 - IL_0186: ldtoken ExpressionTrees - IL_018b: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_0190: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_0195: ldtoken method instance bool ExpressionTrees::Buzz(class [mscorlib]System.Func`2) - IL_019a: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) - IL_019f: castclass [mscorlib]System.Reflection.MethodInfo - IL_01a4: ldc.i4.1 - IL_01a5: newarr [System.Core]System.Linq.Expressions.Expression - IL_01aa: dup - IL_01ab: ldc.i4.0 - IL_01ac: ldtoken [mscorlib]System.Int32 - IL_01b1: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_01b6: ldstr "x" - IL_01bb: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + IL_03e6: pop + IL_03e7: call object ExpressionTrees::X() + IL_03ec: ldarg.0 + IL_03ed: ldtoken ExpressionTrees + IL_03f2: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_03f7: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_03fc: ldtoken method instance bool ExpressionTrees::Buzz(class [mscorlib]System.Func`2) + IL_0401: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0406: castclass [mscorlib]System.Reflection.MethodInfo + IL_040b: ldc.i4.1 + IL_040c: newarr [System.Core]System.Linq.Expressions.Expression + IL_0411: dup + IL_0412: ldc.i4.0 + IL_0413: ldtoken [mscorlib]System.Int32 + IL_0418: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_041d: ldstr "x" + IL_0422: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, string) - IL_01c0: stloc.0 - IL_01c1: ldc.i4.1 - IL_01c2: box [mscorlib]System.Boolean - IL_01c7: ldtoken [mscorlib]System.Boolean - IL_01cc: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_01d1: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_01d6: ldc.i4.1 - IL_01d7: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_01dc: dup - IL_01dd: ldc.i4.0 - IL_01de: ldloc.0 - IL_01df: stelem.ref - IL_01e0: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_0427: stloc.0 + IL_0428: ldc.i4.1 + IL_0429: box [mscorlib]System.Boolean + IL_042e: ldtoken [mscorlib]System.Boolean + IL_0433: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0438: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_043d: ldc.i4.1 + IL_043e: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0443: dup + IL_0444: ldc.i4.0 + IL_0445: ldloc.0 + IL_0446: stelem.ref + IL_0447: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_01e5: stelem.ref - IL_01e6: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + IL_044c: stelem.ref + IL_044d: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.MethodInfo, class [System.Core]System.Linq.Expressions.Expression[]) - IL_01eb: ldc.i4.0 - IL_01ec: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_01f1: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_0452: ldc.i4.0 + IL_0453: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0458: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_01f6: call object ExpressionTrees::ToCode(object, + IL_045d: call object ExpressionTrees::ToCode(object, class [System.Core]System.Linq.Expressions.Expression`1>) - IL_01fb: pop - IL_01fc: ret + IL_0462: pop + IL_0463: ret } // end of method ExpressionTrees::NestedLambda2 .method public hidebysig instance void @@ -3718,25 +3945,25 @@ { // Code size 270 (0x10e) .maxstack 4 - .locals init (class ExpressionTrees/'<>c__DisplayClass43_0' V_0) - IL_0000: newobj instance void ExpressionTrees/'<>c__DisplayClass43_0'::.ctor() + .locals init (class ExpressionTrees/'<>c__DisplayClass44_0' V_0) + IL_0000: newobj instance void ExpressionTrees/'<>c__DisplayClass44_0'::.ctor() IL_0005: stloc.0 IL_0006: ldloc.0 IL_0007: ldc.i4.1 - IL_0008: stfld bool ExpressionTrees/'<>c__DisplayClass43_0'::x + IL_0008: stfld bool ExpressionTrees/'<>c__DisplayClass44_0'::x IL_000d: ldloc.0 IL_000e: ldc.i4.3 - IL_000f: stfld int32 ExpressionTrees/'<>c__DisplayClass43_0'::y + IL_000f: stfld int32 ExpressionTrees/'<>c__DisplayClass44_0'::y IL_0014: ldloc.0 IL_0015: ldc.i4.s 42 - IL_0017: stfld uint8 ExpressionTrees/'<>c__DisplayClass43_0'::z + IL_0017: stfld uint8 ExpressionTrees/'<>c__DisplayClass44_0'::z IL_001c: call object ExpressionTrees::X() IL_0021: ldloc.0 - IL_0022: ldtoken ExpressionTrees/'<>c__DisplayClass43_0' + IL_0022: ldtoken ExpressionTrees/'<>c__DisplayClass44_0' IL_0027: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_002c: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_0031: ldtoken field uint8 ExpressionTrees/'<>c__DisplayClass43_0'::z + IL_0031: ldtoken field uint8 ExpressionTrees/'<>c__DisplayClass44_0'::z IL_0036: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_003b: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) @@ -3762,11 +3989,11 @@ IL_007e: pop IL_007f: call object ExpressionTrees::X() IL_0084: ldloc.0 - IL_0085: ldtoken ExpressionTrees/'<>c__DisplayClass43_0' + IL_0085: ldtoken ExpressionTrees/'<>c__DisplayClass44_0' IL_008a: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_008f: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_0094: ldtoken field int32 ExpressionTrees/'<>c__DisplayClass43_0'::y + IL_0094: ldtoken field int32 ExpressionTrees/'<>c__DisplayClass44_0'::y IL_0099: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_009e: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) @@ -3788,11 +4015,11 @@ IL_00d2: pop IL_00d3: call object ExpressionTrees::X() IL_00d8: ldloc.0 - IL_00d9: ldtoken ExpressionTrees/'<>c__DisplayClass43_0' + IL_00d9: ldtoken ExpressionTrees/'<>c__DisplayClass44_0' IL_00de: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_00e3: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_00e8: ldtoken field bool ExpressionTrees/'<>c__DisplayClass43_0'::x + IL_00e8: ldtoken field bool ExpressionTrees/'<>c__DisplayClass44_0'::x IL_00ed: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_00f2: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) @@ -3812,8 +4039,8 @@ { // Code size 288 (0x120) .maxstack 8 - .locals init (class ExpressionTrees/'<>c__DisplayClass44_0' V_0) - IL_0000: newobj instance void ExpressionTrees/'<>c__DisplayClass44_0'::.ctor() + .locals init (class ExpressionTrees/'<>c__DisplayClass45_0' V_0) + IL_0000: newobj instance void ExpressionTrees/'<>c__DisplayClass45_0'::.ctor() IL_0005: stloc.0 IL_0006: ldloc.0 IL_0007: newobj instance void [System.Xml]System.Xml.XmlReaderSettings::.ctor() @@ -3823,7 +4050,7 @@ IL_0013: dup IL_0014: ldc.i4.0 IL_0015: callvirt instance void [System.Xml]System.Xml.XmlReaderSettings::set_CheckCharacters(bool) - IL_001a: stfld class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass44_0'::s + IL_001a: stfld class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass45_0'::s IL_001f: call object ExpressionTrees::X() IL_0024: ldtoken [System.Xml]System.Xml.XmlReaderSettings IL_0029: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) @@ -3836,11 +4063,11 @@ IL_0040: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) IL_0045: castclass [mscorlib]System.Reflection.MethodInfo IL_004a: ldloc.0 - IL_004b: ldtoken ExpressionTrees/'<>c__DisplayClass44_0' + IL_004b: ldtoken ExpressionTrees/'<>c__DisplayClass45_0' IL_0050: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_0055: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_005a: ldtoken field class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass44_0'::s + IL_005a: ldtoken field class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass45_0'::s IL_005f: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_0064: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) @@ -3858,11 +4085,11 @@ IL_008a: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) IL_008f: castclass [mscorlib]System.Reflection.MethodInfo IL_0094: ldloc.0 - IL_0095: ldtoken ExpressionTrees/'<>c__DisplayClass44_0' + IL_0095: ldtoken ExpressionTrees/'<>c__DisplayClass45_0' IL_009a: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_009f: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_00a4: ldtoken field class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass44_0'::s + IL_00a4: ldtoken field class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass45_0'::s IL_00a9: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_00ae: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) @@ -3884,11 +4111,11 @@ IL_00e7: dup IL_00e8: ldc.i4.0 IL_00e9: ldloc.0 - IL_00ea: ldtoken ExpressionTrees/'<>c__DisplayClass44_0' + IL_00ea: ldtoken ExpressionTrees/'<>c__DisplayClass45_0' IL_00ef: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_00f4: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_00f9: ldtoken field class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass44_0'::s + IL_00f9: ldtoken field class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass45_0'::s IL_00fe: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_0103: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) @@ -4497,15 +4724,15 @@ { // Code size 406 (0x196) .maxstack 8 - .locals init (class ExpressionTrees/'<>c__DisplayClass54_0' V_0) - IL_0000: newobj instance void ExpressionTrees/'<>c__DisplayClass54_0'::.ctor() + .locals init (class ExpressionTrees/'<>c__DisplayClass55_0' V_0) + IL_0000: newobj instance void ExpressionTrees/'<>c__DisplayClass55_0'::.ctor() IL_0005: stloc.0 IL_0006: ldloc.0 IL_0007: ldc.i4.1 - IL_0008: stfld int32 ExpressionTrees/'<>c__DisplayClass54_0'::i + IL_0008: stfld int32 ExpressionTrees/'<>c__DisplayClass55_0'::i IL_000d: ldloc.0 IL_000e: ldstr "X" - IL_0013: stfld string ExpressionTrees/'<>c__DisplayClass54_0'::x + IL_0013: stfld string ExpressionTrees/'<>c__DisplayClass55_0'::x IL_0018: call object ExpressionTrees::X() IL_001d: ldstr "a\n\\b" IL_0022: ldtoken [mscorlib]System.String @@ -4513,22 +4740,22 @@ IL_002c: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) IL_0031: ldloc.0 - IL_0032: ldtoken ExpressionTrees/'<>c__DisplayClass54_0' + IL_0032: ldtoken ExpressionTrees/'<>c__DisplayClass55_0' IL_0037: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_003c: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_0041: ldtoken field string ExpressionTrees/'<>c__DisplayClass54_0'::x + IL_0041: ldtoken field string ExpressionTrees/'<>c__DisplayClass55_0'::x IL_0046: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_004b: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) IL_0050: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::Coalesce(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.Expression) IL_0055: ldloc.0 - IL_0056: ldtoken ExpressionTrees/'<>c__DisplayClass54_0' + IL_0056: ldtoken ExpressionTrees/'<>c__DisplayClass55_0' IL_005b: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_0060: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_0065: ldtoken field string ExpressionTrees/'<>c__DisplayClass54_0'::x + IL_0065: ldtoken field string ExpressionTrees/'<>c__DisplayClass55_0'::x IL_006a: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_006f: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) @@ -4572,11 +4799,11 @@ IL_00f5: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) IL_00fa: ldloc.0 - IL_00fb: ldtoken ExpressionTrees/'<>c__DisplayClass54_0' + IL_00fb: ldtoken ExpressionTrees/'<>c__DisplayClass55_0' IL_0100: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_0105: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_010a: ldtoken field int32 ExpressionTrees/'<>c__DisplayClass54_0'::i + IL_010a: ldtoken field int32 ExpressionTrees/'<>c__DisplayClass55_0'::i IL_010f: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_0114: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) diff --git a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.roslyn.il b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.roslyn.il index 9449949ac..d76d58768 100644 --- a/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.roslyn.il +++ b/ICSharpCode.Decompiler.Tests/TestCases/Pretty/ExpressionTrees.roslyn.il @@ -35,14 +35,14 @@ .ver 0:0:0:0 } .module ExpressionTrees.dll -// MVID: {69A458ED-527F-4C9C-9A7C-CF5C957EC1ED} +// MVID: {10FA8BAD-7C03-45BA-B129-010B46E41B45} .custom instance void [mscorlib]System.Security.UnverifiableCodeAttribute::.ctor() = ( 01 00 00 00 ) .imagebase 0x10000000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY -// Image base: 0x01390000 +// Image base: 0x02CC0000 // =============== CLASS MEMBERS DECLARATION =================== @@ -735,7 +735,7 @@ } // end of class '<>c__DisplayClass34_0' - .class auto ansi sealed nested private beforefieldinit '<>c__DisplayClass43_0' + .class auto ansi sealed nested private beforefieldinit '<>c__DisplayClass44_0' extends [mscorlib]System.Object { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) @@ -751,11 +751,11 @@ IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: nop IL_0007: ret - } // end of method '<>c__DisplayClass43_0'::.ctor + } // end of method '<>c__DisplayClass44_0'::.ctor - } // end of class '<>c__DisplayClass43_0' + } // end of class '<>c__DisplayClass44_0' - .class auto ansi sealed nested private beforefieldinit '<>c__DisplayClass44_0' + .class auto ansi sealed nested private beforefieldinit '<>c__DisplayClass45_0' extends [mscorlib]System.Object { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) @@ -769,11 +769,11 @@ IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: nop IL_0007: ret - } // end of method '<>c__DisplayClass44_0'::.ctor + } // end of method '<>c__DisplayClass45_0'::.ctor - } // end of class '<>c__DisplayClass44_0' + } // end of class '<>c__DisplayClass45_0' - .class auto ansi sealed nested private beforefieldinit '<>c__DisplayClass54_0' + .class auto ansi sealed nested private beforefieldinit '<>c__DisplayClass55_0' extends [mscorlib]System.Object { .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilerGeneratedAttribute::.ctor() = ( 01 00 00 00 ) @@ -788,9 +788,9 @@ IL_0001: call instance void [mscorlib]System.Object::.ctor() IL_0006: nop IL_0007: ret - } // end of method '<>c__DisplayClass54_0'::.ctor + } // end of method '<>c__DisplayClass55_0'::.ctor - } // end of class '<>c__DisplayClass54_0' + } // end of class '<>c__DisplayClass55_0' .field private int32 'field' .method private hidebysig static object @@ -3444,11 +3444,28 @@ IL_0010: ret } // end of method ExpressionTrees::Fizz + .method private hidebysig instance bool + Fizz(class [mscorlib]System.Func`2 a) cil managed + { + // Code size 13 (0xd) + .maxstack 2 + .locals init (bool V_0) + IL_0000: nop + IL_0001: ldarg.1 + IL_0002: ldnull + IL_0003: callvirt instance !1 class [mscorlib]System.Func`2::Invoke(!0) + IL_0008: stloc.0 + IL_0009: br.s IL_000b + + IL_000b: ldloc.0 + IL_000c: ret + } // end of method ExpressionTrees::Fizz + .method public hidebysig instance void NestedLambda2() cil managed { - // Code size 510 (0x1fe) - .maxstack 11 + // Code size 1125 (0x465) + .maxstack 14 .locals init (class [System.Core]System.Linq.Expressions.ParameterExpression V_0) IL_0000: nop IL_0001: call object ExpressionTrees::X() @@ -3503,136 +3520,352 @@ IL_008d: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_0092: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_0097: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_0097: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) IL_009c: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) IL_00a1: castclass [mscorlib]System.Reflection.MethodInfo IL_00a6: ldc.i4.1 IL_00a7: newarr [System.Core]System.Linq.Expressions.Expression IL_00ac: dup IL_00ad: ldc.i4.0 - IL_00ae: ldtoken [mscorlib]System.Int32 + IL_00ae: ldtoken [mscorlib]System.String IL_00b3: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_00b8: ldstr "x" IL_00bd: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, string) IL_00c2: stloc.0 IL_00c3: ldloc.0 - IL_00c4: ldc.i4.s 37 - IL_00c6: box [mscorlib]System.Int32 - IL_00cb: ldtoken [mscorlib]System.Int32 - IL_00d0: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_00d5: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + IL_00c4: ldstr "a" + IL_00c9: ldtoken [mscorlib]System.String + IL_00ce: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_00d3: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_00da: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::Equal(class [System.Core]System.Linq.Expressions.Expression, + IL_00d8: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::NotEqual(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.Expression) + IL_00dd: ldc.i4.1 + IL_00de: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_00e3: dup + IL_00e4: ldc.i4.0 + IL_00e5: ldloc.0 + IL_00e6: stelem.ref + IL_00e7: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_00ec: stelem.ref + IL_00ed: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_00f2: ldc.i4.0 + IL_00f3: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_00f8: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_00fd: call object ExpressionTrees::ToCode(object, + class [System.Core]System.Linq.Expressions.Expression`1>) + IL_0102: pop + IL_0103: call object ExpressionTrees::X() + IL_0108: ldarg.0 + IL_0109: ldtoken ExpressionTrees + IL_010e: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0113: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0118: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_011d: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0122: castclass [mscorlib]System.Reflection.MethodInfo + IL_0127: ldc.i4.1 + IL_0128: newarr [System.Core]System.Linq.Expressions.Expression + IL_012d: dup + IL_012e: ldc.i4.0 + IL_012f: ldtoken [mscorlib]System.Action + IL_0134: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0139: ldstr "x" + IL_013e: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + string) + IL_0143: stloc.0 + IL_0144: ldloc.0 + IL_0145: ldtoken method instance void ExpressionTrees::NestedLambda2() + IL_014a: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_014f: castclass [mscorlib]System.Reflection.MethodInfo + IL_0154: ldtoken [mscorlib]System.Reflection.MethodInfo + IL_0159: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_015e: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0163: ldtoken method instance class [mscorlib]System.Delegate [mscorlib]System.Reflection.MethodInfo::CreateDelegate(class [mscorlib]System.Type, + object) + IL_0168: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_016d: castclass [mscorlib]System.Reflection.MethodInfo + IL_0172: ldc.i4.2 + IL_0173: newarr [System.Core]System.Linq.Expressions.Expression + IL_0178: dup + IL_0179: ldc.i4.0 + IL_017a: ldtoken [mscorlib]System.Action + IL_017f: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0184: ldtoken [mscorlib]System.Type + IL_0189: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_018e: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0193: stelem.ref + IL_0194: dup + IL_0195: ldc.i4.1 + IL_0196: ldarg.0 + IL_0197: ldtoken ExpressionTrees + IL_019c: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_01a1: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_01a6: stelem.ref + IL_01a7: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_01ac: ldtoken [mscorlib]System.Action + IL_01b1: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_01b6: call class [System.Core]System.Linq.Expressions.UnaryExpression [System.Core]System.Linq.Expressions.Expression::Convert(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Type) + IL_01bb: ldc.i4.0 + IL_01bc: ldtoken method bool [mscorlib]System.Delegate::op_Equality(class [mscorlib]System.Delegate, + class [mscorlib]System.Delegate) + IL_01c1: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_01c6: castclass [mscorlib]System.Reflection.MethodInfo + IL_01cb: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::Equal(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.Expression, + bool, + class [mscorlib]System.Reflection.MethodInfo) + IL_01d0: ldc.i4.1 + IL_01d1: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_01d6: dup + IL_01d7: ldc.i4.0 + IL_01d8: ldloc.0 + IL_01d9: stelem.ref + IL_01da: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_01df: stelem.ref + IL_01e0: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_01e5: ldc.i4.0 + IL_01e6: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_01eb: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_01f0: call object ExpressionTrees::ToCode(object, + class [System.Core]System.Linq.Expressions.Expression`1>) + IL_01f5: pop + IL_01f6: call object ExpressionTrees::X() + IL_01fb: ldarg.0 + IL_01fc: ldtoken ExpressionTrees + IL_0201: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0206: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_020b: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_0210: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0215: castclass [mscorlib]System.Reflection.MethodInfo + IL_021a: ldc.i4.1 + IL_021b: newarr [System.Core]System.Linq.Expressions.Expression + IL_0220: dup + IL_0221: ldc.i4.0 + IL_0222: ldtoken [mscorlib]System.Action + IL_0227: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_022c: ldstr "x" + IL_0231: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + string) + IL_0236: stloc.0 + IL_0237: ldloc.0 + IL_0238: ldtoken method instance void ExpressionTrees::NestedLambda2() + IL_023d: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0242: castclass [mscorlib]System.Reflection.MethodInfo + IL_0247: ldtoken [mscorlib]System.Reflection.MethodInfo + IL_024c: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0251: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0256: ldtoken method instance class [mscorlib]System.Delegate [mscorlib]System.Reflection.MethodInfo::CreateDelegate(class [mscorlib]System.Type, + object) + IL_025b: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0260: castclass [mscorlib]System.Reflection.MethodInfo + IL_0265: ldc.i4.2 + IL_0266: newarr [System.Core]System.Linq.Expressions.Expression + IL_026b: dup + IL_026c: ldc.i4.0 + IL_026d: ldtoken [mscorlib]System.Action + IL_0272: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0277: ldtoken [mscorlib]System.Type + IL_027c: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0281: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0286: stelem.ref + IL_0287: dup + IL_0288: ldc.i4.1 + IL_0289: ldarg.0 + IL_028a: ldtoken ExpressionTrees + IL_028f: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0294: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0299: stelem.ref + IL_029a: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_029f: ldtoken [mscorlib]System.Action + IL_02a4: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_02a9: call class [System.Core]System.Linq.Expressions.UnaryExpression [System.Core]System.Linq.Expressions.Expression::Convert(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Type) + IL_02ae: ldc.i4.0 + IL_02af: ldtoken method bool [mscorlib]System.Delegate::op_Inequality(class [mscorlib]System.Delegate, + class [mscorlib]System.Delegate) + IL_02b4: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_02b9: castclass [mscorlib]System.Reflection.MethodInfo + IL_02be: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::NotEqual(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.Expression, + bool, + class [mscorlib]System.Reflection.MethodInfo) + IL_02c3: ldc.i4.1 + IL_02c4: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_02c9: dup + IL_02ca: ldc.i4.0 + IL_02cb: ldloc.0 + IL_02cc: stelem.ref + IL_02cd: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_02d2: stelem.ref + IL_02d3: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + class [mscorlib]System.Reflection.MethodInfo, + class [System.Core]System.Linq.Expressions.Expression[]) + IL_02d8: ldc.i4.0 + IL_02d9: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_02de: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + class [System.Core]System.Linq.Expressions.ParameterExpression[]) + IL_02e3: call object ExpressionTrees::ToCode(object, + class [System.Core]System.Linq.Expressions.Expression`1>) + IL_02e8: pop + IL_02e9: call object ExpressionTrees::X() + IL_02ee: ldarg.0 + IL_02ef: ldtoken ExpressionTrees + IL_02f4: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_02f9: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_02fe: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_0303: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0308: castclass [mscorlib]System.Reflection.MethodInfo + IL_030d: ldc.i4.1 + IL_030e: newarr [System.Core]System.Linq.Expressions.Expression + IL_0313: dup + IL_0314: ldc.i4.0 + IL_0315: ldtoken [mscorlib]System.Int32 + IL_031a: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_031f: ldstr "x" + IL_0324: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + string) + IL_0329: stloc.0 + IL_032a: ldloc.0 + IL_032b: ldc.i4.s 37 + IL_032d: box [mscorlib]System.Int32 + IL_0332: ldtoken [mscorlib]System.Int32 + IL_0337: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_033c: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0341: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::Equal(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.Expression) - IL_00df: ldc.i4.1 - IL_00e0: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_00e5: dup - IL_00e6: ldc.i4.0 - IL_00e7: ldloc.0 - IL_00e8: stelem.ref - IL_00e9: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_0346: ldc.i4.1 + IL_0347: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_034c: dup + IL_034d: ldc.i4.0 + IL_034e: ldloc.0 + IL_034f: stelem.ref + IL_0350: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_00ee: stelem.ref - IL_00ef: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + IL_0355: stelem.ref + IL_0356: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.MethodInfo, class [System.Core]System.Linq.Expressions.Expression[]) - IL_00f4: ldc.i4.0 - IL_00f5: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_00fa: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_035b: ldc.i4.0 + IL_035c: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0361: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_00ff: call object ExpressionTrees::ToCode(object, + IL_0366: call object ExpressionTrees::ToCode(object, class [System.Core]System.Linq.Expressions.Expression`1>) - IL_0104: pop - IL_0105: call object ExpressionTrees::X() - IL_010a: ldarg.0 - IL_010b: ldtoken ExpressionTrees - IL_0110: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_0115: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_011a: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) - IL_011f: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) - IL_0124: castclass [mscorlib]System.Reflection.MethodInfo - IL_0129: ldc.i4.1 - IL_012a: newarr [System.Core]System.Linq.Expressions.Expression - IL_012f: dup - IL_0130: ldc.i4.0 - IL_0131: ldtoken [mscorlib]System.Int32 - IL_0136: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_013b: ldstr "x" - IL_0140: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + IL_036b: pop + IL_036c: call object ExpressionTrees::X() + IL_0371: ldarg.0 + IL_0372: ldtoken ExpressionTrees + IL_0377: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_037c: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_0381: ldtoken method instance bool ExpressionTrees::Fizz(class [mscorlib]System.Func`2) + IL_0386: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_038b: castclass [mscorlib]System.Reflection.MethodInfo + IL_0390: ldc.i4.1 + IL_0391: newarr [System.Core]System.Linq.Expressions.Expression + IL_0396: dup + IL_0397: ldc.i4.0 + IL_0398: ldtoken [mscorlib]System.Int32 + IL_039d: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_03a2: ldstr "x" + IL_03a7: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, string) - IL_0145: stloc.0 - IL_0146: ldc.i4.1 - IL_0147: box [mscorlib]System.Boolean - IL_014c: ldtoken [mscorlib]System.Boolean - IL_0151: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_0156: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_015b: ldc.i4.1 - IL_015c: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_0161: dup - IL_0162: ldc.i4.0 - IL_0163: ldloc.0 - IL_0164: stelem.ref - IL_0165: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_03ac: stloc.0 + IL_03ad: ldc.i4.1 + IL_03ae: box [mscorlib]System.Boolean + IL_03b3: ldtoken [mscorlib]System.Boolean + IL_03b8: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_03bd: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_03c2: ldc.i4.1 + IL_03c3: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_03c8: dup + IL_03c9: ldc.i4.0 + IL_03ca: ldloc.0 + IL_03cb: stelem.ref + IL_03cc: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_016a: stelem.ref - IL_016b: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + IL_03d1: stelem.ref + IL_03d2: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.MethodInfo, class [System.Core]System.Linq.Expressions.Expression[]) - IL_0170: ldc.i4.0 - IL_0171: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_0176: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_03d7: ldc.i4.0 + IL_03d8: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_03dd: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_017b: call object ExpressionTrees::ToCode(object, + IL_03e2: call object ExpressionTrees::ToCode(object, class [System.Core]System.Linq.Expressions.Expression`1>) - IL_0180: pop - IL_0181: call object ExpressionTrees::X() - IL_0186: ldarg.0 - IL_0187: ldtoken ExpressionTrees - IL_018c: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_0191: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_0196: ldtoken method instance bool ExpressionTrees::Buzz(class [mscorlib]System.Func`2) - IL_019b: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) - IL_01a0: castclass [mscorlib]System.Reflection.MethodInfo - IL_01a5: ldc.i4.1 - IL_01a6: newarr [System.Core]System.Linq.Expressions.Expression - IL_01ab: dup - IL_01ac: ldc.i4.0 - IL_01ad: ldtoken [mscorlib]System.Int32 - IL_01b2: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_01b7: ldstr "x" - IL_01bc: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, + IL_03e7: pop + IL_03e8: call object ExpressionTrees::X() + IL_03ed: ldarg.0 + IL_03ee: ldtoken ExpressionTrees + IL_03f3: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_03f8: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_03fd: ldtoken method instance bool ExpressionTrees::Buzz(class [mscorlib]System.Func`2) + IL_0402: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) + IL_0407: castclass [mscorlib]System.Reflection.MethodInfo + IL_040c: ldc.i4.1 + IL_040d: newarr [System.Core]System.Linq.Expressions.Expression + IL_0412: dup + IL_0413: ldc.i4.0 + IL_0414: ldtoken [mscorlib]System.Int32 + IL_0419: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_041e: ldstr "x" + IL_0423: call class [System.Core]System.Linq.Expressions.ParameterExpression [System.Core]System.Linq.Expressions.Expression::Parameter(class [mscorlib]System.Type, string) - IL_01c1: stloc.0 - IL_01c2: ldc.i4.1 - IL_01c3: box [mscorlib]System.Boolean - IL_01c8: ldtoken [mscorlib]System.Boolean - IL_01cd: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) - IL_01d2: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, - class [mscorlib]System.Type) - IL_01d7: ldc.i4.1 - IL_01d8: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_01dd: dup - IL_01de: ldc.i4.0 - IL_01df: ldloc.0 - IL_01e0: stelem.ref - IL_01e1: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_0428: stloc.0 + IL_0429: ldc.i4.1 + IL_042a: box [mscorlib]System.Boolean + IL_042f: ldtoken [mscorlib]System.Boolean + IL_0434: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) + IL_0439: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, + class [mscorlib]System.Type) + IL_043e: ldc.i4.1 + IL_043f: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0444: dup + IL_0445: ldc.i4.0 + IL_0446: ldloc.0 + IL_0447: stelem.ref + IL_0448: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_01e6: stelem.ref - IL_01e7: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, + IL_044d: stelem.ref + IL_044e: call class [System.Core]System.Linq.Expressions.MethodCallExpression [System.Core]System.Linq.Expressions.Expression::Call(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.MethodInfo, class [System.Core]System.Linq.Expressions.Expression[]) - IL_01ec: ldc.i4.0 - IL_01ed: newarr [System.Core]System.Linq.Expressions.ParameterExpression - IL_01f2: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, + IL_0453: ldc.i4.0 + IL_0454: newarr [System.Core]System.Linq.Expressions.ParameterExpression + IL_0459: call class [System.Core]System.Linq.Expressions.Expression`1 [System.Core]System.Linq.Expressions.Expression::Lambda>(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.ParameterExpression[]) - IL_01f7: call object ExpressionTrees::ToCode(object, + IL_045e: call object ExpressionTrees::ToCode(object, class [System.Core]System.Linq.Expressions.Expression`1>) - IL_01fc: pop - IL_01fd: ret + IL_0463: pop + IL_0464: ret } // end of method ExpressionTrees::NestedLambda2 .method public hidebysig instance void @@ -3818,26 +4051,26 @@ { // Code size 271 (0x10f) .maxstack 4 - .locals init (class ExpressionTrees/'<>c__DisplayClass43_0' V_0) - IL_0000: newobj instance void ExpressionTrees/'<>c__DisplayClass43_0'::.ctor() + .locals init (class ExpressionTrees/'<>c__DisplayClass44_0' V_0) + IL_0000: newobj instance void ExpressionTrees/'<>c__DisplayClass44_0'::.ctor() IL_0005: stloc.0 IL_0006: nop IL_0007: ldloc.0 IL_0008: ldc.i4.1 - IL_0009: stfld bool ExpressionTrees/'<>c__DisplayClass43_0'::x + IL_0009: stfld bool ExpressionTrees/'<>c__DisplayClass44_0'::x IL_000e: ldloc.0 IL_000f: ldc.i4.3 - IL_0010: stfld int32 ExpressionTrees/'<>c__DisplayClass43_0'::y + IL_0010: stfld int32 ExpressionTrees/'<>c__DisplayClass44_0'::y IL_0015: ldloc.0 IL_0016: ldc.i4.s 42 - IL_0018: stfld uint8 ExpressionTrees/'<>c__DisplayClass43_0'::z + IL_0018: stfld uint8 ExpressionTrees/'<>c__DisplayClass44_0'::z IL_001d: call object ExpressionTrees::X() IL_0022: ldloc.0 - IL_0023: ldtoken ExpressionTrees/'<>c__DisplayClass43_0' + IL_0023: ldtoken ExpressionTrees/'<>c__DisplayClass44_0' IL_0028: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_002d: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_0032: ldtoken field uint8 ExpressionTrees/'<>c__DisplayClass43_0'::z + IL_0032: ldtoken field uint8 ExpressionTrees/'<>c__DisplayClass44_0'::z IL_0037: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_003c: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) @@ -3863,11 +4096,11 @@ IL_007f: pop IL_0080: call object ExpressionTrees::X() IL_0085: ldloc.0 - IL_0086: ldtoken ExpressionTrees/'<>c__DisplayClass43_0' + IL_0086: ldtoken ExpressionTrees/'<>c__DisplayClass44_0' IL_008b: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_0090: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_0095: ldtoken field int32 ExpressionTrees/'<>c__DisplayClass43_0'::y + IL_0095: ldtoken field int32 ExpressionTrees/'<>c__DisplayClass44_0'::y IL_009a: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_009f: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) @@ -3889,11 +4122,11 @@ IL_00d3: pop IL_00d4: call object ExpressionTrees::X() IL_00d9: ldloc.0 - IL_00da: ldtoken ExpressionTrees/'<>c__DisplayClass43_0' + IL_00da: ldtoken ExpressionTrees/'<>c__DisplayClass44_0' IL_00df: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_00e4: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_00e9: ldtoken field bool ExpressionTrees/'<>c__DisplayClass43_0'::x + IL_00e9: ldtoken field bool ExpressionTrees/'<>c__DisplayClass44_0'::x IL_00ee: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_00f3: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) @@ -3913,8 +4146,8 @@ { // Code size 291 (0x123) .maxstack 8 - .locals init (class ExpressionTrees/'<>c__DisplayClass44_0' V_0) - IL_0000: newobj instance void ExpressionTrees/'<>c__DisplayClass44_0'::.ctor() + .locals init (class ExpressionTrees/'<>c__DisplayClass45_0' V_0) + IL_0000: newobj instance void ExpressionTrees/'<>c__DisplayClass45_0'::.ctor() IL_0005: stloc.0 IL_0006: nop IL_0007: ldloc.0 @@ -3927,7 +4160,7 @@ IL_0016: ldc.i4.0 IL_0017: callvirt instance void [System.Xml]System.Xml.XmlReaderSettings::set_CheckCharacters(bool) IL_001c: nop - IL_001d: stfld class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass44_0'::s + IL_001d: stfld class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass45_0'::s IL_0022: call object ExpressionTrees::X() IL_0027: ldtoken [System.Xml]System.Xml.XmlReaderSettings IL_002c: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) @@ -3940,11 +4173,11 @@ IL_0043: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) IL_0048: castclass [mscorlib]System.Reflection.MethodInfo IL_004d: ldloc.0 - IL_004e: ldtoken ExpressionTrees/'<>c__DisplayClass44_0' + IL_004e: ldtoken ExpressionTrees/'<>c__DisplayClass45_0' IL_0053: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_0058: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_005d: ldtoken field class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass44_0'::s + IL_005d: ldtoken field class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass45_0'::s IL_0062: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_0067: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) @@ -3962,11 +4195,11 @@ IL_008d: call class [mscorlib]System.Reflection.MethodBase [mscorlib]System.Reflection.MethodBase::GetMethodFromHandle(valuetype [mscorlib]System.RuntimeMethodHandle) IL_0092: castclass [mscorlib]System.Reflection.MethodInfo IL_0097: ldloc.0 - IL_0098: ldtoken ExpressionTrees/'<>c__DisplayClass44_0' + IL_0098: ldtoken ExpressionTrees/'<>c__DisplayClass45_0' IL_009d: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_00a2: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_00a7: ldtoken field class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass44_0'::s + IL_00a7: ldtoken field class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass45_0'::s IL_00ac: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_00b1: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) @@ -3988,11 +4221,11 @@ IL_00ea: dup IL_00eb: ldc.i4.0 IL_00ec: ldloc.0 - IL_00ed: ldtoken ExpressionTrees/'<>c__DisplayClass44_0' + IL_00ed: ldtoken ExpressionTrees/'<>c__DisplayClass45_0' IL_00f2: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_00f7: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_00fc: ldtoken field class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass44_0'::s + IL_00fc: ldtoken field class [System.Xml]System.Xml.XmlReaderSettings ExpressionTrees/'<>c__DisplayClass45_0'::s IL_0101: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_0106: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) @@ -4610,16 +4843,16 @@ { // Code size 407 (0x197) .maxstack 8 - .locals init (class ExpressionTrees/'<>c__DisplayClass54_0' V_0) - IL_0000: newobj instance void ExpressionTrees/'<>c__DisplayClass54_0'::.ctor() + .locals init (class ExpressionTrees/'<>c__DisplayClass55_0' V_0) + IL_0000: newobj instance void ExpressionTrees/'<>c__DisplayClass55_0'::.ctor() IL_0005: stloc.0 IL_0006: nop IL_0007: ldloc.0 IL_0008: ldc.i4.1 - IL_0009: stfld int32 ExpressionTrees/'<>c__DisplayClass54_0'::i + IL_0009: stfld int32 ExpressionTrees/'<>c__DisplayClass55_0'::i IL_000e: ldloc.0 IL_000f: ldstr "X" - IL_0014: stfld string ExpressionTrees/'<>c__DisplayClass54_0'::x + IL_0014: stfld string ExpressionTrees/'<>c__DisplayClass55_0'::x IL_0019: call object ExpressionTrees::X() IL_001e: ldstr "a\n\\b" IL_0023: ldtoken [mscorlib]System.String @@ -4627,22 +4860,22 @@ IL_002d: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) IL_0032: ldloc.0 - IL_0033: ldtoken ExpressionTrees/'<>c__DisplayClass54_0' + IL_0033: ldtoken ExpressionTrees/'<>c__DisplayClass55_0' IL_0038: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_003d: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_0042: ldtoken field string ExpressionTrees/'<>c__DisplayClass54_0'::x + IL_0042: ldtoken field string ExpressionTrees/'<>c__DisplayClass55_0'::x IL_0047: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_004c: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) IL_0051: call class [System.Core]System.Linq.Expressions.BinaryExpression [System.Core]System.Linq.Expressions.Expression::Coalesce(class [System.Core]System.Linq.Expressions.Expression, class [System.Core]System.Linq.Expressions.Expression) IL_0056: ldloc.0 - IL_0057: ldtoken ExpressionTrees/'<>c__DisplayClass54_0' + IL_0057: ldtoken ExpressionTrees/'<>c__DisplayClass55_0' IL_005c: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_0061: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_0066: ldtoken field string ExpressionTrees/'<>c__DisplayClass54_0'::x + IL_0066: ldtoken field string ExpressionTrees/'<>c__DisplayClass55_0'::x IL_006b: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_0070: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) @@ -4686,11 +4919,11 @@ IL_00f6: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) IL_00fb: ldloc.0 - IL_00fc: ldtoken ExpressionTrees/'<>c__DisplayClass54_0' + IL_00fc: ldtoken ExpressionTrees/'<>c__DisplayClass55_0' IL_0101: call class [mscorlib]System.Type [mscorlib]System.Type::GetTypeFromHandle(valuetype [mscorlib]System.RuntimeTypeHandle) IL_0106: call class [System.Core]System.Linq.Expressions.ConstantExpression [System.Core]System.Linq.Expressions.Expression::Constant(object, class [mscorlib]System.Type) - IL_010b: ldtoken field int32 ExpressionTrees/'<>c__DisplayClass54_0'::i + IL_010b: ldtoken field int32 ExpressionTrees/'<>c__DisplayClass55_0'::i IL_0110: call class [mscorlib]System.Reflection.FieldInfo [mscorlib]System.Reflection.FieldInfo::GetFieldFromHandle(valuetype [mscorlib]System.RuntimeFieldHandle) IL_0115: call class [System.Core]System.Linq.Expressions.MemberExpression [System.Core]System.Linq.Expressions.Expression::Field(class [System.Core]System.Linq.Expressions.Expression, class [mscorlib]System.Reflection.FieldInfo) diff --git a/ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs b/ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs index ecbdbeae0..985254f82 100644 --- a/ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs +++ b/ICSharpCode.Decompiler/IL/Transforms/TransformExpressionTrees.cs @@ -21,6 +21,8 @@ using System.Collections.Generic; using System.Diagnostics; using System.Linq; using ICSharpCode.Decompiler.CSharp.Resolver; +using ICSharpCode.Decompiler.CSharp.Syntax; +using ICSharpCode.Decompiler.Semantics; using ICSharpCode.Decompiler.TypeSystem; using ICSharpCode.Decompiler.TypeSystem.Implementation; using ICSharpCode.Decompiler.Util; @@ -93,11 +95,13 @@ namespace ICSharpCode.Decompiler.IL.Transforms List instructionsToRemove; Stack lambdaStack; CSharpConversions conversions; + CSharpResolver resolver; public void Run(Block block, int pos, StatementTransformContext context) { this.context = context; this.conversions = CSharpConversions.Get(context.TypeSystem.Compilation); + this.resolver = new CSharpResolver(context.TypeSystem.Compilation); this.parameters = new Dictionary(); this.parameterMapping = new Dictionary(); this.instructionsToRemove = new List(); @@ -248,7 +252,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms case "GreaterThan": return ConvertComparison(invocation, ComparisonKind.GreaterThan); case "GreaterThanOrEqual": - return ConvertComparison(invocation, ComparisonKind.GreaterThanOrEqual); + return ConvertComparison(invocation, ComparisonKind.GreaterThanOrEqual); case "Invoke": return ConvertInvoke(invocation); case "Lambda": @@ -534,6 +538,28 @@ namespace ICSharpCode.Decompiler.IL.Transforms } return (new Call((IMethod)method) { Arguments = { left, right } }, method.ReturnType); } + var rr = resolver.ResolveBinaryOperator(kind.ToBinaryOperatorType(), new ResolveResult(leftType), new ResolveResult(rightType)) as OperatorResolveResult; + if (rr != null && !rr.IsError && rr.UserDefinedOperatorMethod != null) { + return (new Call(rr.UserDefinedOperatorMethod) { Arguments = { left, right } }, rr.UserDefinedOperatorMethod.ReturnType); + } + if (leftType.IsKnownType(KnownTypeCode.String) && rightType.IsKnownType(KnownTypeCode.String)) { + IMethod operatorMethod; + switch (kind) { + case ComparisonKind.Equality: + operatorMethod = leftType.GetMethods(m => m.IsOperator && m.Name == "op_Equality" && m.Parameters.Count == 2).FirstOrDefault(m => m.Parameters[0].Type.IsKnownType(KnownTypeCode.String) && m.Parameters[1].Type.IsKnownType(KnownTypeCode.String)); + if (operatorMethod == null) + return (null, SpecialType.UnknownType); + break; + case ComparisonKind.Inequality: + operatorMethod = leftType.GetMethods(m => m.IsOperator && m.Name == "op_Inequality" && m.Parameters.Count == 2).FirstOrDefault(m => m.Parameters[0].Type.IsKnownType(KnownTypeCode.String) && m.Parameters[1].Type.IsKnownType(KnownTypeCode.String)); + if (operatorMethod == null) + return (null, SpecialType.UnknownType); + break; + default: + return (null, SpecialType.UnknownType); + } + return (new Call(operatorMethod) { Arguments = { left, right } }, operatorMethod.ReturnType); + } var resultType = context.TypeSystem.Compilation.FindType(KnownTypeCode.Boolean); return (new Comp(kind, NullableType.IsNullable(leftType) ? ComparisonLiftingKind.CSharp : ComparisonLiftingKind.None, leftType.GetStackType(), leftType.GetSign(), left, right), resultType); }