============ initial translation from Move ================
[variant baseline]
fun NestedFields::nested_fields_direct($t0|a: &NestedFields::A): address {
var $t1: &NestedFields::A
var $t2: &NestedFields::B
var $t3: &NestedFields::C
var $t4: &address
var $t5: address
0: $t1 := move($t0)
1: $t2 := borrow_field<NestedFields::A>.b($t1)
2: $t3 := borrow_field<NestedFields::B>.c($t2)
3: $t4 := borrow_field<NestedFields::C>.f($t3)
4: $t5 := read_ref($t4)
5: return $t5
}
[variant baseline]
fun NestedFields::nested_fields_helper1($t0|c: &NestedFields::C): address {
var $t1: &NestedFields::C
var $t2: &address
var $t3: address
0: $t1 := move($t0)
1: $t2 := borrow_field<NestedFields::C>.f($t1)
2: $t3 := read_ref($t2)
3: return $t3
}
[variant baseline]
fun NestedFields::nested_fields_helper2($t0|b: &NestedFields::B): address {
var $t1: &NestedFields::B
var $t2: &NestedFields::C
var $t3: &address
var $t4: address
0: $t1 := move($t0)
1: $t2 := borrow_field<NestedFields::B>.c($t1)
2: $t3 := borrow_field<NestedFields::C>.f($t2)
3: $t4 := read_ref($t3)
4: return $t4
}
[variant baseline]
fun NestedFields::nested_fields_interproc($t0|a1: &NestedFields::A, $t1|a2: &NestedFields::A, $t2|flag: bool): address {
var $t3|tmp#$3: address
var $t4: bool
var $t5: &NestedFields::A
var $t6: &NestedFields::A
var $t7: &NestedFields::B
var $t8: &NestedFields::C
var $t9: address
var $t10: &NestedFields::A
var $t11: &NestedFields::A
var $t12: &NestedFields::B
var $t13: address
var $t14: address
0: $t4 := move($t2)
1: if ($t4) goto 2 else goto 11
2: label L0
3: $t5 := move($t1)
4: destroy($t5)
5: $t6 := move($t0)
6: $t7 := borrow_field<NestedFields::A>.b($t6)
7: $t8 := borrow_field<NestedFields::B>.c($t7)
8: $t9 := NestedFields::nested_fields_helper1($t8)
9: $t3 := $t9
10: goto 19
11: label L2
12: $t10 := move($t0)
13: destroy($t10)
14: $t11 := move($t1)
15: $t12 := borrow_field<NestedFields::A>.b($t11)
16: $t13 := NestedFields::nested_fields_helper2($t12)
17: $t3 := $t13
18: goto 19
19: label L3
20: $t14 := move($t3)
21: return $t14
}
============ after pipeline `read_write_set` ================
[variant baseline]
fun NestedFields::nested_fields_direct($t0|a: &NestedFields::A): address {
var $t1: &NestedFields::A
var $t2: &NestedFields::B
var $t3: &NestedFields::C
var $t4: &address
var $t5: address
# Accesses:
# Formal(0): Read
# Formal(0)/b/c/f: Read
#
# Locals:
# Ret(0): Formal(0)/b/c/f
#
0: $t1 := move($t0)
1: $t2 := borrow_field<NestedFields::A>.b($t1)
2: $t3 := borrow_field<NestedFields::B>.c($t2)
3: $t4 := borrow_field<NestedFields::C>.f($t3)
4: $t5 := read_ref($t4)
5: return $t5
}
[variant baseline]
fun NestedFields::nested_fields_helper1($t0|c: &NestedFields::C): address {
var $t1: &NestedFields::C
var $t2: &address
var $t3: address
# Accesses:
# Formal(0): Read
# Formal(0)/f: Read
#
# Locals:
# Ret(0): Formal(0)/f
#
0: $t1 := move($t0)
1: $t2 := borrow_field<NestedFields::C>.f($t1)
2: $t3 := read_ref($t2)
3: return $t3
}
[variant baseline]
fun NestedFields::nested_fields_helper2($t0|b: &NestedFields::B): address {
var $t1: &NestedFields::B
var $t2: &NestedFields::C
var $t3: &address
var $t4: address
# Accesses:
# Formal(0): Read
# Formal(0)/c/f: Read
#
# Locals:
# Ret(0): Formal(0)/c/f
#
0: $t1 := move($t0)
1: $t2 := borrow_field<NestedFields::B>.c($t1)
2: $t3 := borrow_field<NestedFields::C>.f($t2)
3: $t4 := read_ref($t3)
4: return $t4
}
[variant baseline]
fun NestedFields::nested_fields_interproc($t0|a1: &NestedFields::A, $t1|a2: &NestedFields::A, $t2|flag: bool): address {
var $t3|tmp#$3: address
var $t4: bool
var $t5: &NestedFields::A
var $t6: &NestedFields::A
var $t7: &NestedFields::B
var $t8: &NestedFields::C
var $t9: address
var $t10: &NestedFields::A
var $t11: &NestedFields::A
var $t12: &NestedFields::B
var $t13: address
var $t14: address
# Accesses:
# Formal(0): Read
# Formal(0)/b/c: Read
# Formal(0)/b/c/f: Read
# Formal(1): Read
# Formal(1)/b: Read
# Formal(1)/b/c/f: Read
# Formal(2): Read
#
# Locals:
# Ret(0): {Formal(0)/b/c/f, Formal(1)/b/c/f, }
#
0: $t4 := move($t2)
1: if ($t4) goto 2 else goto 11
2: label L0
3: $t5 := move($t1)
4: destroy($t5)
5: $t6 := move($t0)
6: $t7 := borrow_field<NestedFields::A>.b($t6)
7: $t8 := borrow_field<NestedFields::B>.c($t7)
8: $t9 := NestedFields::nested_fields_helper1($t8)
9: $t3 := $t9
10: goto 19
11: label L2
12: $t10 := move($t0)
13: destroy($t10)
14: $t11 := move($t1)
15: $t12 := borrow_field<NestedFields::A>.b($t11)
16: $t13 := NestedFields::nested_fields_helper2($t12)
17: $t3 := $t13
18: goto 19
19: label L3
20: $t14 := move($t3)
21: return $t14
}