**** New definitions: rec1, type: {A:i8, B:s}
**** New definitions: rec2, type: {A:i8, B:s}
**** New definitions: rec3, type: {A:i8, B:s}
**** New definitions: rec4, type: {A:i8, B:s}
**** New definitions: rec5, type: {A:i8, B:s}
**** New definitions: homr, type: ({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})
**** New definitions: homi, type: (i8, i8, i8, i8, i8)
**** New definitions: het, type: (i8, s, i8, {A:i8, B:s}, (i8, i8))

> homr[::-1]
homr[::-1] : ({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})
BndKind:TupleSlice, Type:({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}), Bnd:(GetSlice(Global(homr), 4:-1:-1):({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}))
// (∂.homr:({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})) : ({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})
      1) stloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) newobj ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})()
      1) dup
      1) ldloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) ldfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F4:{i8,str}
      5) stfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F0:{i8,str}
      1) dup
      1) ldloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) ldfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F3:{i8,str}
      5) stfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F1:{i8,str}
      1) dup
      1) ldloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) ldfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F2:{i8,str}
      5) stfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F2:{i8,str}
      1) dup
      1) ldloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) ldfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F1:{i8,str}
      5) stfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F3:{i8,str}
      1) dup
      1) ldloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) ldfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F0:{i8,str}
      5) stfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F4:{i8,str}
      1) ret
  Total Size: 75

Func sig: (homr:({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})) to ({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})
Type: ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str}), Value: ({ A: 50, B: foo50 }, { A: 40, B: foo40 }, { A: 30, B: foo30 }, { A: 20, B: foo20 }, { A: 10, B: foo10 })
###
> homr[::10]
homr[::10] : ({A:i8, B:s})
BndKind:TupleSlice, Type:({A:i8, B:s}), Bnd:(GetSlice(Global(homr), 0:10:10):({A:i8, B:s}))
// (∂.homr:({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})) : ({A:i8, B:s})
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})
      1) stloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) newobj ({i8,str})()
      1) dup
      1) ldloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) ldfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F0:{i8,str}
      5) stfld ({i8,str})::_F0:{i8,str}
      1) ret
  Total Size: 27

Func sig: (homr:({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})) to ({A:i8, B:s})
Type: ({i8,str}), Value: ({ A: 10, B: foo10 },)
###
> homi[::-1]
homi[::-1] : (i8, i8, i8, i8, i8)
BndKind:TupleSlice, Type:(i8, i8, i8, i8, i8), Bnd:(GetSlice(Global(homi), 4:-1:-1):(i8, i8, i8, i8, i8))
// (∂.homi:(i8, i8, i8, i8, i8)) : (i8, i8, i8, i8, i8)
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,i8,i8,i8,i8)
      1) stloc.0 [(i8,i8,i8,i8,i8)]
      5) newobj (i8,i8,i8,i8,i8)()
      1) dup
      1) ldloc.0 [(i8,i8,i8,i8,i8)]
      5) ldfld (i8,i8,i8,i8,i8)::_F4:i8
      5) stfld (i8,i8,i8,i8,i8)::_F0:i8
      1) dup
      1) ldloc.0 [(i8,i8,i8,i8,i8)]
      5) ldfld (i8,i8,i8,i8,i8)::_F3:i8
      5) stfld (i8,i8,i8,i8,i8)::_F1:i8
      1) dup
      1) ldloc.0 [(i8,i8,i8,i8,i8)]
      5) ldfld (i8,i8,i8,i8,i8)::_F2:i8
      5) stfld (i8,i8,i8,i8,i8)::_F2:i8
      1) dup
      1) ldloc.0 [(i8,i8,i8,i8,i8)]
      5) ldfld (i8,i8,i8,i8,i8)::_F1:i8
      5) stfld (i8,i8,i8,i8,i8)::_F3:i8
      1) dup
      1) ldloc.0 [(i8,i8,i8,i8,i8)]
      5) ldfld (i8,i8,i8,i8,i8)::_F0:i8
      5) stfld (i8,i8,i8,i8,i8)::_F4:i8
      1) ret
  Total Size: 75

Func sig: (homi:(i8, i8, i8, i8, i8)) to (i8, i8, i8, i8, i8)
Type: (i8,i8,i8,i8,i8), Value: (40, 30, 20, 10, 0)
###
> homi[::10]
homi[::10] : (i8)
BndKind:TupleSlice, Type:(i8), Bnd:(GetSlice(Global(homi), 0:10:10):(i8))
// (∂.homi:(i8, i8, i8, i8, i8)) : (i8)
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,i8,i8,i8,i8)
      1) stloc.0 [(i8,i8,i8,i8,i8)]
      5) newobj (i8)()
      1) dup
      1) ldloc.0 [(i8,i8,i8,i8,i8)]
      5) ldfld (i8,i8,i8,i8,i8)::_F0:i8
      5) stfld (i8)::_F0:i8
      1) ret
  Total Size: 27

Func sig: (homi:(i8, i8, i8, i8, i8)) to (i8)
Type: (i8), Value: (0,)
###
> homr[1:3:]
homr[1:3:] : ({A:i8, B:s}, {A:i8, B:s})
BndKind:TupleSlice, Type:({A:i8, B:s}, {A:i8, B:s}), Bnd:(GetSlice(Global(homr), 1:3:1):({A:i8, B:s}, {A:i8, B:s}))
// (∂.homr:({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})) : ({A:i8, B:s}, {A:i8, B:s})
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})
      1) stloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) newobj ({i8,str},{i8,str})()
      1) dup
      1) ldloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) ldfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F1:{i8,str}
      5) stfld ({i8,str},{i8,str})::_F0:{i8,str}
      1) dup
      1) ldloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) ldfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F2:{i8,str}
      5) stfld ({i8,str},{i8,str})::_F1:{i8,str}
      1) ret
  Total Size: 39

Func sig: (homr:({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})) to ({A:i8, B:s}, {A:i8, B:s})
Type: ({i8,str},{i8,str}), Value: ({ A: 20, B: foo20 }, { A: 30, B: foo30 })
###
> homr[0:3:2]
homr[0:3:2] : ({A:i8, B:s}, {A:i8, B:s})
BndKind:TupleSlice, Type:({A:i8, B:s}, {A:i8, B:s}), Bnd:(GetSlice(Global(homr), 0:4:2):({A:i8, B:s}, {A:i8, B:s}))
// (∂.homr:({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})) : ({A:i8, B:s}, {A:i8, B:s})
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})
      1) stloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) newobj ({i8,str},{i8,str})()
      1) dup
      1) ldloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) ldfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F0:{i8,str}
      5) stfld ({i8,str},{i8,str})::_F0:{i8,str}
      1) dup
      1) ldloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) ldfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F2:{i8,str}
      5) stfld ({i8,str},{i8,str})::_F1:{i8,str}
      1) ret
  Total Size: 39

Func sig: (homr:({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})) to ({A:i8, B:s}, {A:i8, B:s})
Type: ({i8,str},{i8,str}), Value: ({ A: 10, B: foo10 }, { A: 30, B: foo30 })
###
> homr[0:10:10]
homr[0:10:10] : ({A:i8, B:s})
BndKind:TupleSlice, Type:({A:i8, B:s}), Bnd:(GetSlice(Global(homr), 0:10:10):({A:i8, B:s}))
// (∂.homr:({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})) : ({A:i8, B:s})
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})
      1) stloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) newobj ({i8,str})()
      1) dup
      1) ldloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) ldfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F0:{i8,str}
      5) stfld ({i8,str})::_F0:{i8,str}
      1) ret
  Total Size: 27

Func sig: (homr:({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})) to ({A:i8, B:s})
Type: ({i8,str}), Value: ({ A: 10, B: foo10 },)
###
> homr[4:10:]
homr[4:10:] : ({A:i8, B:s})
BndKind:TupleSlice, Type:({A:i8, B:s}), Bnd:(GetSlice(Global(homr), 4:5:1):({A:i8, B:s}))
// (∂.homr:({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})) : ({A:i8, B:s})
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})
      1) stloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) newobj ({i8,str})()
      1) dup
      1) ldloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) ldfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F4:{i8,str}
      5) stfld ({i8,str})::_F0:{i8,str}
      1) ret
  Total Size: 27

Func sig: (homr:({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})) to ({A:i8, B:s})
Type: ({i8,str}), Value: ({ A: 50, B: foo50 },)
###
> homr[4:10:10]
homr[4:10:10] : ({A:i8, B:s})
BndKind:TupleSlice, Type:({A:i8, B:s}), Bnd:(GetSlice(Global(homr), 4:14:10):({A:i8, B:s}))
// (∂.homr:({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})) : ({A:i8, B:s})
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})
      1) stloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) newobj ({i8,str})()
      1) dup
      1) ldloc.0 [({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})]
      5) ldfld ({i8,str},{i8,str},{i8,str},{i8,str},{i8,str})::_F4:{i8,str}
      5) stfld ({i8,str})::_F0:{i8,str}
      1) ret
  Total Size: 27

Func sig: (homr:({A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s}, {A:i8, B:s})) to ({A:i8, B:s})
Type: ({i8,str}), Value: ({ A: 50, B: foo50 },)
###
> homi[1:3:]
homi[1:3:] : (i8, i8)
BndKind:TupleSlice, Type:(i8, i8), Bnd:(GetSlice(Global(homi), 1:3:1):(i8, i8))
// (∂.homi:(i8, i8, i8, i8, i8)) : (i8, i8)
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,i8,i8,i8,i8)
      1) stloc.0 [(i8,i8,i8,i8,i8)]
      5) newobj (i8,i8)()
      1) dup
      1) ldloc.0 [(i8,i8,i8,i8,i8)]
      5) ldfld (i8,i8,i8,i8,i8)::_F1:i8
      5) stfld (i8,i8)::_F0:i8
      1) dup
      1) ldloc.0 [(i8,i8,i8,i8,i8)]
      5) ldfld (i8,i8,i8,i8,i8)::_F2:i8
      5) stfld (i8,i8)::_F1:i8
      1) ret
  Total Size: 39

Func sig: (homi:(i8, i8, i8, i8, i8)) to (i8, i8)
Type: (i8,i8), Value: (10, 20)
###
> homi[0:3:2]
homi[0:3:2] : (i8, i8)
BndKind:TupleSlice, Type:(i8, i8), Bnd:(GetSlice(Global(homi), 0:4:2):(i8, i8))
// (∂.homi:(i8, i8, i8, i8, i8)) : (i8, i8)
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,i8,i8,i8,i8)
      1) stloc.0 [(i8,i8,i8,i8,i8)]
      5) newobj (i8,i8)()
      1) dup
      1) ldloc.0 [(i8,i8,i8,i8,i8)]
      5) ldfld (i8,i8,i8,i8,i8)::_F0:i8
      5) stfld (i8,i8)::_F0:i8
      1) dup
      1) ldloc.0 [(i8,i8,i8,i8,i8)]
      5) ldfld (i8,i8,i8,i8,i8)::_F2:i8
      5) stfld (i8,i8)::_F1:i8
      1) ret
  Total Size: 39

Func sig: (homi:(i8, i8, i8, i8, i8)) to (i8, i8)
Type: (i8,i8), Value: (0, 20)
###
> homi[0:10:10]
homi[0:10:10] : (i8)
BndKind:TupleSlice, Type:(i8), Bnd:(GetSlice(Global(homi), 0:10:10):(i8))
// (∂.homi:(i8, i8, i8, i8, i8)) : (i8)
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,i8,i8,i8,i8)
      1) stloc.0 [(i8,i8,i8,i8,i8)]
      5) newobj (i8)()
      1) dup
      1) ldloc.0 [(i8,i8,i8,i8,i8)]
      5) ldfld (i8,i8,i8,i8,i8)::_F0:i8
      5) stfld (i8)::_F0:i8
      1) ret
  Total Size: 27

Func sig: (homi:(i8, i8, i8, i8, i8)) to (i8)
Type: (i8), Value: (0,)
###
> homi[4:10:]
homi[4:10:] : (i8)
BndKind:TupleSlice, Type:(i8), Bnd:(GetSlice(Global(homi), 4:5:1):(i8))
// (∂.homi:(i8, i8, i8, i8, i8)) : (i8)
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,i8,i8,i8,i8)
      1) stloc.0 [(i8,i8,i8,i8,i8)]
      5) newobj (i8)()
      1) dup
      1) ldloc.0 [(i8,i8,i8,i8,i8)]
      5) ldfld (i8,i8,i8,i8,i8)::_F4:i8
      5) stfld (i8)::_F0:i8
      1) ret
  Total Size: 27

Func sig: (homi:(i8, i8, i8, i8, i8)) to (i8)
Type: (i8), Value: (40,)
###
> homi[4:10:10]
homi[4:10:10] : (i8)
BndKind:TupleSlice, Type:(i8), Bnd:(GetSlice(Global(homi), 4:14:10):(i8))
// (∂.homi:(i8, i8, i8, i8, i8)) : (i8)
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,i8,i8,i8,i8)
      1) stloc.0 [(i8,i8,i8,i8,i8)]
      5) newobj (i8)()
      1) dup
      1) ldloc.0 [(i8,i8,i8,i8,i8)]
      5) ldfld (i8,i8,i8,i8,i8)::_F4:i8
      5) stfld (i8)::_F0:i8
      1) ret
  Total Size: 27

Func sig: (homi:(i8, i8, i8, i8, i8)) to (i8)
Type: (i8), Value: (40,)
###
> het[-1::2]
het[-1::2] : (i8, i8, (i8, i8))
BndKind:TupleSlice, Type:(i8, i8, (i8, i8)), Bnd:(GetSlice(Global(het), 0:6:2):(i8, i8, (i8, i8)))
// (∂.het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) : (i8, i8, (i8, i8))
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,str,i8,{i8,str},(i8,i8))
      1) stloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) newobj (i8,i8,(i8,i8))()
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F0:i8
      5) stfld (i8,i8,(i8,i8))::_F0:i8
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F2:i8
      5) stfld (i8,i8,(i8,i8))::_F1:i8
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F4:(i8,i8)
      5) stfld (i8,i8,(i8,i8))::_F2:(i8,i8)
      1) ret
  Total Size: 51

Func sig: (het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) to (i8, i8, (i8, i8))
Type: (i8,i8,(i8,i8)), Value: (100, 200, (2, 3))
###
> het[5:1:-1]
het[5:1:-1] : ((i8, i8), {A:i8, B:s}, i8)
BndKind:TupleSlice, Type:((i8, i8), {A:i8, B:s}, i8), Bnd:(GetSlice(Global(het), 4:1:-1):((i8, i8), {A:i8, B:s}, i8))
// (∂.het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) : ((i8, i8), {A:i8, B:s}, i8)
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,str,i8,{i8,str},(i8,i8))
      1) stloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) newobj ((i8,i8),{i8,str},i8)()
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F4:(i8,i8)
      5) stfld ((i8,i8),{i8,str},i8)::_F0:(i8,i8)
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F3:{i8,str}
      5) stfld ((i8,i8),{i8,str},i8)::_F1:{i8,str}
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F2:i8
      5) stfld ((i8,i8),{i8,str},i8)::_F2:i8
      1) ret
  Total Size: 51

Func sig: (het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) to ((i8, i8), {A:i8, B:s}, i8)
Type: ((i8,i8),{i8,str},i8), Value: ((2, 3), { A: 10, B: foo10 }, 200)
###
> het[::-1]
het[::-1] : ((i8, i8), {A:i8, B:s}, i8, s, i8)
BndKind:TupleSlice, Type:((i8, i8), {A:i8, B:s}, i8, s, i8), Bnd:(GetSlice(Global(het), 4:-1:-1):((i8, i8), {A:i8, B:s}, i8, s, i8))
// (∂.het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) : ((i8, i8), {A:i8, B:s}, i8, s, i8)
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,str,i8,{i8,str},(i8,i8))
      1) stloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) newobj ((i8,i8),{i8,str},i8,str,i8)()
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F4:(i8,i8)
      5) stfld ((i8,i8),{i8,str},i8,str,i8)::_F0:(i8,i8)
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F3:{i8,str}
      5) stfld ((i8,i8),{i8,str},i8,str,i8)::_F1:{i8,str}
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F2:i8
      5) stfld ((i8,i8),{i8,str},i8,str,i8)::_F2:i8
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F1:str
      5) stfld ((i8,i8),{i8,str},i8,str,i8)::_F3:str
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F0:i8
      5) stfld ((i8,i8),{i8,str},i8,str,i8)::_F4:i8
      1) ret
  Total Size: 75

Func sig: (het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) to ((i8, i8), {A:i8, B:s}, i8, s, i8)
Type: ((i8,i8),{i8,str},i8,str,i8), Value: ((2, 3), { A: 10, B: foo10 }, 200, bar, 100)
###
> het[::10]
het[::10] : (i8)
BndKind:TupleSlice, Type:(i8), Bnd:(GetSlice(Global(het), 0:10:10):(i8))
// (∂.het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) : (i8)
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,str,i8,{i8,str},(i8,i8))
      1) stloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) newobj (i8)()
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F0:i8
      5) stfld (i8)::_F0:i8
      1) ret
  Total Size: 27

Func sig: (het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) to (i8)
Type: (i8), Value: (100,)
###
> het[1:3:]
het[1:3:] : (s, i8)
BndKind:TupleSlice, Type:(s, i8), Bnd:(GetSlice(Global(het), 1:3:1):(s, i8))
// (∂.het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) : (s, i8)
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,str,i8,{i8,str},(i8,i8))
      1) stloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) newobj (str,i8)()
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F1:str
      5) stfld (str,i8)::_F0:str
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F2:i8
      5) stfld (str,i8)::_F1:i8
      1) ret
  Total Size: 39

Func sig: (het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) to (s, i8)
Type: (str,i8), Value: (bar, 200)
###
> het[0:3:2]
het[0:3:2] : (i8, i8)
BndKind:TupleSlice, Type:(i8, i8), Bnd:(GetSlice(Global(het), 0:4:2):(i8, i8))
// (∂.het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) : (i8, i8)
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,str,i8,{i8,str},(i8,i8))
      1) stloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) newobj (i8,i8)()
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F0:i8
      5) stfld (i8,i8)::_F0:i8
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F2:i8
      5) stfld (i8,i8)::_F1:i8
      1) ret
  Total Size: 39

Func sig: (het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) to (i8, i8)
Type: (i8,i8), Value: (100, 200)
###
> het[0:10:10]
het[0:10:10] : (i8)
BndKind:TupleSlice, Type:(i8), Bnd:(GetSlice(Global(het), 0:10:10):(i8))
// (∂.het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) : (i8)
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,str,i8,{i8,str},(i8,i8))
      1) stloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) newobj (i8)()
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F0:i8
      5) stfld (i8)::_F0:i8
      1) ret
  Total Size: 27

Func sig: (het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) to (i8)
Type: (i8), Value: (100,)
###
> het[4:10:]
het[4:10:] : ((i8, i8))
BndKind:TupleSlice, Type:((i8, i8)), Bnd:(GetSlice(Global(het), 4:5:1):((i8, i8)))
// (∂.het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) : ((i8, i8))
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,str,i8,{i8,str},(i8,i8))
      1) stloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) newobj ((i8,i8))()
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F4:(i8,i8)
      5) stfld ((i8,i8))::_F0:(i8,i8)
      1) ret
  Total Size: 27

Func sig: (het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) to ((i8, i8))
Type: ((i8,i8)), Value: ((2, 3),)
###
> het[4:10:10]
het[4:10:10] : ((i8, i8))
BndKind:TupleSlice, Type:((i8, i8)), Bnd:(GetSlice(Global(het), 4:14:10):((i8, i8)))
// (∂.het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) : ((i8, i8))
top(Arr<obj>, Arr<obj>):obj
      1) ldarg.1 [Arr<obj>]
      1) ldc.i4.0
      1) ldelem.ref
      5) call static CodeGenUtil::ToRef(obj):(i8,str,i8,{i8,str},(i8,i8))
      1) stloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) newobj ((i8,i8))()
      1) dup
      1) ldloc.0 [(i8,str,i8,{i8,str},(i8,i8))]
      5) ldfld (i8,str,i8,{i8,str},(i8,i8))::_F4:(i8,i8)
      5) stfld ((i8,i8))::_F0:(i8,i8)
      1) ret
  Total Size: 27

Func sig: (het:(i8, s, i8, {A:i8, B:s}, (i8, i8))) to ((i8, i8))
Type: ((i8,i8)), Value: ((2, 3),)
###
