**** New definitions: P1, type: b*

> ForEach(p1:P1, If(p1,  1 ))
ForEach(p1 : P1, If(p1, 1)) : i8?*
BndKind:Call, Type:i8?*, Bnd:(Call(∂.ForEach([map:1] Global(P1), If(Scope(1), Opt<i8?>(1:i8), null:i8?)):i8?*))
// (∂.P1:b*) : i8?*
ForEach_1(Arr<obj>, bool):Opt<i8>
      1) ldarg.1 [bool]
      5) brfalse [0]
      1) ldc.i4.1
      1) conv.i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [1]:
      1) ret
  Total Size: 24

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.0 [Seq<bool>]
      1) ldloc.0 [Seq<bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<bool,Opt<i8>>]
      5) call static ForEachGen::Exec(Seq<bool>, Func<bool,Opt<i8>>):Seq<Opt<i8>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Opt<i8>>):Seq<Opt<i8>>
      1) ret
  Total Size: 28

Func sig: (P1:b*) to i8?*
Sequence: Seq<Opt<i8>>
 0) 1
 1) <null>
###
> ForEach(p1:P1, If(p1, "A"))
ForEach(p1 : P1, If(p1, "A")) : s*
BndKind:Call, Type:s*, Bnd:(Call(∂.ForEach([map:1] Global(P1), If(Scope(1), str(A), str(<null>))):s*))
// (∂.P1:b*) : s*
ForEach_1(Arr<obj>, bool):str
      1) ldarg.1 [bool]
      5) brfalse [0]
      5) ldstr [A]
      5) br [1]
  Label [0]:
      1) ldnull
  Label [1]:
      1) ret
  Total Size: 18

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.0 [Seq<bool>]
      1) ldloc.0 [Seq<bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<bool,str>]
      5) call static ForEachGen::Exec(Seq<bool>, Func<bool,str>):Seq<str>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<str>):Seq<str>
      1) ret
  Total Size: 28

Func sig: (P1:b*) to s*
Sequence: Seq<str>
 0) A
 1) <null>
###
> ForEach(p1:P1, If(p1,  1,   2 ))
ForEach(p1 : P1, If(p1, 1, 2)) : i8*
BndKind:Call, Type:i8*, Bnd:(Call(∂.ForEach([map:1] Global(P1), If(Scope(1), 1:i8, 2:i8)):i8*))
// (∂.P1:b*) : i8*
ForEach_1(Arr<obj>, bool):i8
      1) ldarg.1 [bool]
      5) brfalse [0]
      1) ldc.i4.1
      1) conv.i8
      5) br [1]
  Label [0]:
      1) ldc.i4.2
      1) conv.i8
  Label [1]:
      1) ret
  Total Size: 16

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.0 [Seq<bool>]
      1) ldloc.0 [Seq<bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<bool,i8>]
      5) call static ForEachGen::Exec(Seq<bool>, Func<bool,i8>):Seq<i8>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<i8>):Seq<i8>
      1) ret
  Total Size: 28

Func sig: (P1:b*) to i8*
Sequence: Seq<i8>
 0) 1
 1) 2
###
> ForEach(p1:P1, If(p1, "A", "B"))
ForEach(p1 : P1, If(p1, "A", "B")) : s*
BndKind:Call, Type:s*, Bnd:(Call(∂.ForEach([map:1] Global(P1), If(Scope(1), str(A), str(B))):s*))
// (∂.P1:b*) : s*
ForEach_1(Arr<obj>, bool):str
      1) ldarg.1 [bool]
      5) brfalse [0]
      5) ldstr [A]
      5) br [1]
  Label [0]:
      5) ldstr [B]
  Label [1]:
      1) ret
  Total Size: 22

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.0 [Seq<bool>]
      1) ldloc.0 [Seq<bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<bool,str>]
      5) call static ForEachGen::Exec(Seq<bool>, Func<bool,str>):Seq<str>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<str>):Seq<str>
      1) ret
  Total Size: 28

Func sig: (P1:b*) to s*
Sequence: Seq<str>
 0) A
 1) B
###

**** New definitions: P1, type: b*
**** New definitions: P2, type: b*

> ForEach(p1:P1, p2:P2, If(p1,  1 , p2,  2 ))
ForEach(p1 : P1, p2 : P2, If(p1, 1, p2, 2)) : i8?*
BndKind:Call, Type:i8?*, Bnd:(Call(∂.ForEach([map:1] Global(P1), [map:2] Global(P2), If(Scope(1), Opt<i8?>(1:i8), If(Scope(2), Opt<i8?>(2:i8), null:i8?))):i8?*))
// (∂.P1:b*, ∂.P2:b*) : i8?*
ForEach_2(Arr<obj>, bool, bool):Opt<i8>
      1) ldarg.1 [bool]
      5) brfalse [0]
      1) ldc.i4.1
      1) conv.i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) ldarg.2 [bool]
      5) brfalse [2]
      1) ldc.i4.2
      1) conv.i8
      5) newobj Opt<i8>(i8)
      5) br [3]
  Label [2]:
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [3]:
  Label [1]:
      1) ret
  Total Size: 42

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.0 [Seq<bool>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.1 [Seq<bool>]
      1) ldloc.0 [Seq<bool>]
      1) ldloc.1 [Seq<bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<bool,bool,Opt<i8>>]
      5) call static ForEachGen::Exec(Seq<bool>, Seq<bool>, Func<bool,bool,Opt<i8>>):Seq<Opt<i8>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Opt<i8>>):Seq<Opt<i8>>
      1) ret
  Total Size: 38

Func sig: (P1:b*, P2:b*) to i8?*
Sequence: Seq<Opt<i8>>
 0) 1
 1) 1
 2) 2
 3) <null>
###
> ForEach(p1:P1, p2:P2, If(p1, "A", p2, "B"))
ForEach(p1 : P1, p2 : P2, If(p1, "A", p2, "B")) : s*
BndKind:Call, Type:s*, Bnd:(Call(∂.ForEach([map:1] Global(P1), [map:2] Global(P2), If(Scope(1), str(A), If(Scope(2), str(B), str(<null>)))):s*))
// (∂.P1:b*, ∂.P2:b*) : s*
ForEach_2(Arr<obj>, bool, bool):str
      1) ldarg.1 [bool]
      5) brfalse [0]
      5) ldstr [A]
      5) br [1]
  Label [0]:
      1) ldarg.2 [bool]
      5) brfalse [2]
      5) ldstr [B]
      5) br [3]
  Label [2]:
      1) ldnull
  Label [3]:
  Label [1]:
      1) ret
  Total Size: 34

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.0 [Seq<bool>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.1 [Seq<bool>]
      1) ldloc.0 [Seq<bool>]
      1) ldloc.1 [Seq<bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<bool,bool,str>]
      5) call static ForEachGen::Exec(Seq<bool>, Seq<bool>, Func<bool,bool,str>):Seq<str>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<str>):Seq<str>
      1) ret
  Total Size: 38

Func sig: (P1:b*, P2:b*) to s*
Sequence: Seq<str>
 0) A
 1) A
 2) B
 3) <null>
###
> ForEach(p1:P1, p2:P2, If(p1,  1 , p2,  2 ,  3 ))
ForEach(p1 : P1, p2 : P2, If(p1, 1, p2, 2, 3)) : i8*
BndKind:Call, Type:i8*, Bnd:(Call(∂.ForEach([map:1] Global(P1), [map:2] Global(P2), If(Scope(1), 1:i8, If(Scope(2), 2:i8, 3:i8))):i8*))
// (∂.P1:b*, ∂.P2:b*) : i8*
ForEach_2(Arr<obj>, bool, bool):i8
      1) ldarg.1 [bool]
      5) brfalse [0]
      1) ldc.i4.1
      1) conv.i8
      5) br [1]
  Label [0]:
      1) ldarg.2 [bool]
      5) brfalse [2]
      1) ldc.i4.2
      1) conv.i8
      5) br [3]
  Label [2]:
      1) ldc.i4.3
      1) conv.i8
  Label [3]:
  Label [1]:
      1) ret
  Total Size: 29

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.0 [Seq<bool>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.1 [Seq<bool>]
      1) ldloc.0 [Seq<bool>]
      1) ldloc.1 [Seq<bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<bool,bool,i8>]
      5) call static ForEachGen::Exec(Seq<bool>, Seq<bool>, Func<bool,bool,i8>):Seq<i8>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<i8>):Seq<i8>
      1) ret
  Total Size: 38

Func sig: (P1:b*, P2:b*) to i8*
Sequence: Seq<i8>
 0) 1
 1) 1
 2) 2
 3) 3
###
> ForEach(p1:P1, p2:P2, If(p1, "A", p2, "B", "C"))
ForEach(p1 : P1, p2 : P2, If(p1, "A", p2, "B", "C")) : s*
BndKind:Call, Type:s*, Bnd:(Call(∂.ForEach([map:1] Global(P1), [map:2] Global(P2), If(Scope(1), str(A), If(Scope(2), str(B), str(C)))):s*))
// (∂.P1:b*, ∂.P2:b*) : s*
ForEach_2(Arr<obj>, bool, bool):str
      1) ldarg.1 [bool]
      5) brfalse [0]
      5) ldstr [A]
      5) br [1]
  Label [0]:
      1) ldarg.2 [bool]
      5) brfalse [2]
      5) ldstr [B]
      5) br [3]
  Label [2]:
      5) ldstr [C]
  Label [3]:
  Label [1]:
      1) ret
  Total Size: 38

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.0 [Seq<bool>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.1 [Seq<bool>]
      1) ldloc.0 [Seq<bool>]
      1) ldloc.1 [Seq<bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<bool,bool,str>]
      5) call static ForEachGen::Exec(Seq<bool>, Seq<bool>, Func<bool,bool,str>):Seq<str>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<str>):Seq<str>
      1) ret
  Total Size: 38

Func sig: (P1:b*, P2:b*) to s*
Sequence: Seq<str>
 0) A
 1) A
 2) B
 3) C
###

**** New definitions: P1, type: b*
**** New definitions: P2, type: b*
**** New definitions: P3, type: b*

> ForEach(p1:P1, p2:P2, p3:P3, If(p1,  1 , p2,  2 , p3,  3 ))
ForEach(p1 : P1, p2 : P2, p3 : P3, If(p1, 1, p2, 2, p3, 3)) : i8?*
BndKind:Call, Type:i8?*, Bnd:(Call(∂.ForEach([map:1] Global(P1), [map:2] Global(P2), [map:3] Global(P3), If(Scope(1), Opt<i8?>(1:i8), If(Scope(2), Opt<i8?>(2:i8), If(Scope(3), Opt<i8?>(3:i8), null:i8?)))):i8?*))
// (∂.P1:b*, ∂.P2:b*, ∂.P3:b*) : i8?*
ForEach_3(Arr<obj>, bool, bool, bool):Opt<i8>
      1) ldarg.1 [bool]
      5) brfalse [0]
      1) ldc.i4.1
      1) conv.i8
      5) newobj Opt<i8>(i8)
      5) br [1]
  Label [0]:
      1) ldarg.2 [bool]
      5) brfalse [2]
      1) ldc.i4.2
      1) conv.i8
      5) newobj Opt<i8>(i8)
      5) br [3]
  Label [2]:
      1) ldarg.3 [bool]
      5) brfalse [4]
      1) ldc.i4.3
      1) conv.i8
      5) newobj Opt<i8>(i8)
      5) br [5]
  Label [4]:
      5) call static CodeGenUtil::GetDefault():Opt<i8>
  Label [5]:
  Label [3]:
  Label [1]:
      1) ret
  Total Size: 60

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.0 [Seq<bool>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.1 [Seq<bool>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.2 [Seq<bool>]
      1) ldloc.0 [Seq<bool>]
      1) ldloc.1 [Seq<bool>]
      1) ldloc.2 [Seq<bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<bool,bool,bool,Opt<i8>>]
      5) call static ForEachGen::Exec(Seq<bool>, Seq<bool>, Seq<bool>, Func<bool,bool,bool,Opt<i8>>):Seq<Opt<i8>>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<Opt<i8>>):Seq<Opt<i8>>
      1) ret
  Total Size: 48

Func sig: (P1:b*, P2:b*, P3:b*) to i8?*
Sequence: Seq<Opt<i8>>
 0) 1
 1) 1
 2) 1
 3) 1
 4) 2
 5) 2
 6) 3
 7) <null>
###
> ForEach(p1:P1, p2:P2, p3:P3, If(p1, "A", p2, "B", p3, "C"))
ForEach(p1 : P1, p2 : P2, p3 : P3, If(p1, "A", p2, "B", p3, "C")) : s*
BndKind:Call, Type:s*, Bnd:(Call(∂.ForEach([map:1] Global(P1), [map:2] Global(P2), [map:3] Global(P3), If(Scope(1), str(A), If(Scope(2), str(B), If(Scope(3), str(C), str(<null>))))):s*))
// (∂.P1:b*, ∂.P2:b*, ∂.P3:b*) : s*
ForEach_3(Arr<obj>, bool, bool, bool):str
      1) ldarg.1 [bool]
      5) brfalse [0]
      5) ldstr [A]
      5) br [1]
  Label [0]:
      1) ldarg.2 [bool]
      5) brfalse [2]
      5) ldstr [B]
      5) br [3]
  Label [2]:
      1) ldarg.3 [bool]
      5) brfalse [4]
      5) ldstr [C]
      5) br [5]
  Label [4]:
      1) ldnull
  Label [5]:
  Label [3]:
  Label [1]:
      1) ret
  Total Size: 50

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.0 [Seq<bool>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.1 [Seq<bool>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.2 [Seq<bool>]
      1) ldloc.0 [Seq<bool>]
      1) ldloc.1 [Seq<bool>]
      1) ldloc.2 [Seq<bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<bool,bool,bool,str>]
      5) call static ForEachGen::Exec(Seq<bool>, Seq<bool>, Seq<bool>, Func<bool,bool,bool,str>):Seq<str>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<str>):Seq<str>
      1) ret
  Total Size: 48

Func sig: (P1:b*, P2:b*, P3:b*) to s*
Sequence: Seq<str>
 0) A
 1) A
 2) A
 3) A
 4) B
 5) B
 6) C
 7) <null>
###
> ForEach(p1:P1, p2:P2, p3:P3, If(p1,  1 , p2,  2 , p3,  3 ,  4 ))
ForEach(p1 : P1, p2 : P2, p3 : P3, If(p1, 1, p2, 2, p3, 3, 4)) : i8*
BndKind:Call, Type:i8*, Bnd:(Call(∂.ForEach([map:1] Global(P1), [map:2] Global(P2), [map:3] Global(P3), If(Scope(1), 1:i8, If(Scope(2), 2:i8, If(Scope(3), 3:i8, 4:i8)))):i8*))
// (∂.P1:b*, ∂.P2:b*, ∂.P3:b*) : i8*
ForEach_3(Arr<obj>, bool, bool, bool):i8
      1) ldarg.1 [bool]
      5) brfalse [0]
      1) ldc.i4.1
      1) conv.i8
      5) br [1]
  Label [0]:
      1) ldarg.2 [bool]
      5) brfalse [2]
      1) ldc.i4.2
      1) conv.i8
      5) br [3]
  Label [2]:
      1) ldarg.3 [bool]
      5) brfalse [4]
      1) ldc.i4.3
      1) conv.i8
      5) br [5]
  Label [4]:
      1) ldc.i4.4
      1) conv.i8
  Label [5]:
  Label [3]:
  Label [1]:
      1) ret
  Total Size: 42

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.0 [Seq<bool>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.1 [Seq<bool>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.2 [Seq<bool>]
      1) ldloc.0 [Seq<bool>]
      1) ldloc.1 [Seq<bool>]
      1) ldloc.2 [Seq<bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<bool,bool,bool,i8>]
      5) call static ForEachGen::Exec(Seq<bool>, Seq<bool>, Seq<bool>, Func<bool,bool,bool,i8>):Seq<i8>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<i8>):Seq<i8>
      1) ret
  Total Size: 48

Func sig: (P1:b*, P2:b*, P3:b*) to i8*
Sequence: Seq<i8>
 0) 1
 1) 1
 2) 1
 3) 1
 4) 2
 5) 2
 6) 3
 7) 4
###
> ForEach(p1:P1, p2:P2, p3:P3, If(p1, "A", p2, "B", p3, "C", "D"))
ForEach(p1 : P1, p2 : P2, p3 : P3, If(p1, "A", p2, "B", p3, "C", "D")) : s*
BndKind:Call, Type:s*, Bnd:(Call(∂.ForEach([map:1] Global(P1), [map:2] Global(P2), [map:3] Global(P3), If(Scope(1), str(A), If(Scope(2), str(B), If(Scope(3), str(C), str(D))))):s*))
// (∂.P1:b*, ∂.P2:b*, ∂.P3:b*) : s*
ForEach_3(Arr<obj>, bool, bool, bool):str
      1) ldarg.1 [bool]
      5) brfalse [0]
      5) ldstr [A]
      5) br [1]
  Label [0]:
      1) ldarg.2 [bool]
      5) brfalse [2]
      5) ldstr [B]
      5) br [3]
  Label [2]:
      1) ldarg.3 [bool]
      5) brfalse [4]
      5) ldstr [C]
      5) br [5]
  Label [4]:
      5) ldstr [D]
  Label [5]:
  Label [3]:
  Label [1]:
      1) ret
  Total Size: 54

top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.0 [Seq<bool>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.1
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.1 [Seq<bool>]
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.2
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):Seq<bool>
      1) stloc.2 [Seq<bool>]
      1) ldloc.0 [Seq<bool>]
      1) ldloc.1 [Seq<bool>]
      1) ldloc.2 [Seq<bool>]
      1) ldarg.0 [Arr<obj>]
      1) ldc.i4.0
      5) ldelem [Func<bool,bool,bool,str>]
      5) call static ForEachGen::Exec(Seq<bool>, Seq<bool>, Seq<bool>, Func<bool,bool,bool,str>):Seq<str>
      5) call static CodeGenUtil::EnumerableToCaching(Seq<str>):Seq<str>
      1) ret
  Total Size: 48

Func sig: (P1:b*, P2:b*, P3:b*) to s*
Sequence: Seq<str>
 0) A
 1) A
 2) A
 3) A
 4) B
 5) B
 6) C
 7) D
###
