============ initial translation from Move ================
[variant baseline]
public intrinsic fun vector::contains<#0>($t0|v: &vector<#0>, $t1|e: �): bool;
[variant baseline]
public intrinsic fun vector::index_of<#0>($t0|v: &vector<#0>, $t1|e: �): (bool, u64);
[variant baseline]
public intrinsic fun vector::append<#0>($t0|lhs: &mut vector<#0>, $t1|other: vector<#0>);
[variant baseline]
public native fun vector::borrow<#0>($t0|v: &vector<#0>, $t1|i: u64): �
[variant baseline]
public native fun vector::borrow_mut<#0>($t0|v: &mut vector<#0>, $t1|i: u64): &mut #0;
[variant baseline]
public native fun vector::destroy_empty<#0>($t0|v: vector<#0>);
[variant baseline]
public native fun vector::empty<#0>(): vector<#0>;
[variant baseline]
public intrinsic fun vector::is_empty<#0>($t0|v: &vector<#0>): bool;
[variant baseline]
public native fun vector::length<#0>($t0|v: &vector<#0>): u64;
[variant baseline]
public native fun vector::pop_back<#0>($t0|v: &mut vector<#0>): #0;
[variant baseline]
public native fun vector::push_back<#0>($t0|v: &mut vector<#0>, $t1|e: #0);
[variant baseline]
public intrinsic fun vector::remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0;
[variant baseline]
public intrinsic fun vector::reverse<#0>($t0|v: &mut vector<#0>);
[variant baseline]
public fun vector::singleton<#0>($t0|e: #0): vector<#0> {
var $t1|v: vector<#0>
var $t2: vector<#0>
var $t3: &mut vector<#0>
var $t4: #0
var $t5: vector<#0>
0: $t2 := vector::empty<#0>()
1: $t1 := $t2
2: $t3 := borrow_local($t1)
3: $t4 := move($t0)
4: vector::push_back<#0>($t3, $t4)
5: $t5 := move($t1)
6: return $t5
}
[variant baseline]
public native fun vector::swap<#0>($t0|v: &mut vector<#0>, $t1|i: u64, $t2|j: u64);
[variant baseline]
public intrinsic fun vector::swap_remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0;
[variant baseline]
public fun Collection::borrow_mut<#0>($t0|c: &mut Collection::Collection<#0>, $t1|i: u64): &mut #0 {
var $t2: &mut Collection::Collection<#0>
var $t3: &mut vector<#0>
var $t4: u64
var $t5: &mut #0
0: $t2 := move($t0)
1: $t3 := borrow_field<Collection::Collection<#0>>.items($t2)
2: $t4 := move($t1)
3: $t5 := vector::borrow_mut<#0>($t3, $t4)
4: return $t5
}
[variant baseline]
public fun Collection::make_collection<#0>(): Collection::Collection<#0> {
var $t0: vector<#0>
var $t1: address
var $t2: Collection::Collection<#0>
0: $t0 := vector::empty<#0>()
1: $t1 := 0x2
2: $t2 := pack Collection::Collection<#0>($t0, $t1)
3: return $t2
}
[variant baseline]
public fun Test::foo<#0>($t0|i: u64) {
var $t1|c: Collection::Collection<Test::Token<#0>>
var $t2|t: &mut Test::Token<#0>
var $t3: Collection::Collection<Test::Token<#0>>
var $t4: &mut Collection::Collection<Test::Token<#0>>
var $t5: u64
var $t6: &mut Test::Token<#0>
var $t7: u64
var $t8: &mut Test::Token<#0>
var $t9: &mut u64
0: $t3 := Collection::make_collection<Test::Token<#0>>()
1: $t1 := $t3
2: $t4 := borrow_local($t1)
3: $t5 := move($t0)
4: $t6 := Collection::borrow_mut<Test::Token<#0>>($t4, $t5)
5: $t2 := $t6
6: $t7 := 0
7: $t8 := move($t2)
8: $t9 := borrow_field<Test::Token<#0>>.value($t8)
9: write_ref($t9, $t7)
10: return ()
}
============ after pipeline `borrow` ================
[variant baseline]
public intrinsic fun vector::contains<#0>($t0|v: vector<#0>, $t1|e: #0): bool;
[variant baseline]
public intrinsic fun vector::index_of<#0>($t0|v: vector<#0>, $t1|e: #0): (bool, u64);
[variant baseline]
public intrinsic fun vector::append<#0>($t0|lhs: &mut vector<#0>, $t1|other: vector<#0>);
[variant baseline]
public native fun vector::borrow<#0>($t0|v: vector<#0>, $t1|i: u64): #0;
[variant baseline]
public native fun vector::borrow_mut<#0>($t0|v: &mut vector<#0>, $t1|i: u64): &mut #0;
[variant baseline]
public native fun vector::destroy_empty<#0>($t0|v: vector<#0>);
[variant baseline]
public native fun vector::empty<#0>(): vector<#0>;
[variant baseline]
public intrinsic fun vector::is_empty<#0>($t0|v: vector<#0>): bool;
[variant baseline]
public native fun vector::length<#0>($t0|v: vector<#0>): u64;
[variant baseline]
public native fun vector::pop_back<#0>($t0|v: &mut vector<#0>): #0;
[variant baseline]
public native fun vector::push_back<#0>($t0|v: &mut vector<#0>, $t1|e: #0);
[variant baseline]
public intrinsic fun vector::remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0;
[variant baseline]
public intrinsic fun vector::reverse<#0>($t0|v: &mut vector<#0>);
[variant baseline]
public fun vector::singleton<#0>($t0|e: #0): vector<#0> {
var $t1|v: vector<#0>
var $t2: &mut vector<#0>
var $t3: vector<#0>
# live_nodes: LocalRoot($t0)
0: $t1 := vector::empty<#0>()
# live_nodes: LocalRoot($t0)
1: $t2 := borrow_local($t1)
# live_nodes: LocalRoot($t0), Reference($t2)
# borrowed_by: LocalRoot($t1) -> {(@, Reference($t2))}
# borrows_from: Reference($t2) -> {(@, LocalRoot($t1))}
2: vector::push_back<#0>($t2, $t0)
# live_nodes: LocalRoot($t0)
# borrowed_by: LocalRoot($t1) -> {(@, Reference($t2))}
# borrows_from: Reference($t2) -> {(@, LocalRoot($t1))}
3: $t3 := move($t1)
# live_nodes: LocalRoot($t0), LocalRoot($t3)
# borrowed_by: LocalRoot($t1) -> {(@, Reference($t2))}
# borrows_from: Reference($t2) -> {(@, LocalRoot($t1))}
4: return $t3
}
[variant baseline]
public native fun vector::swap<#0>($t0|v: &mut vector<#0>, $t1|i: u64, $t2|j: u64);
[variant baseline]
public intrinsic fun vector::swap_remove<#0>($t0|v: &mut vector<#0>, $t1|i: u64): #0;
[variant baseline]
public fun Collection::borrow_mut<#0>($t0|c: &mut Collection::Collection<#0>, $t1|i: u64): &mut #0 {
var $t2: &mut vector<#0>
var $t3: &mut #0
# live_nodes: LocalRoot($t1), Reference($t0)
0: $t2 := borrow_field<Collection::Collection<#0>>.items($t0)
# live_nodes: LocalRoot($t1), Reference($t0), Reference($t2)
# borrowed_by: Reference($t0) -> {(.items (vector<#0>), Reference($t2))}
# borrows_from: Reference($t2) -> {(.items (vector<#0>), Reference($t0))}
1: $t3 := vector::borrow_mut<#0>($t2, $t1)
# live_nodes: LocalRoot($t1), Reference($t0), Reference($t3)
# borrowed_by: Reference($t0) -> {(.items (vector<#0>), Reference($t2))}, Reference($t2) -> {([], Reference($t3))}
# borrows_from: Reference($t2) -> {(.items (vector<#0>), Reference($t0))}, Reference($t3) -> {([], Reference($t2))}
2: trace_local[c]($t0)
# live_nodes: LocalRoot($t1), Reference($t3)
# borrowed_by: Reference($t0) -> {(.items (vector<#0>), Reference($t2))}, Reference($t2) -> {([], Reference($t3))}
# borrows_from: Reference($t2) -> {(.items (vector<#0>), Reference($t0))}, Reference($t3) -> {([], Reference($t2))}
3: return $t3
}
[variant baseline]
public fun Collection::make_collection<#0>(): Collection::Collection<#0> {
var $t0: vector<#0>
var $t1: address
var $t2: Collection::Collection<#0>
0: $t0 := vector::empty<#0>()
1: $t1 := 0x2
2: $t2 := pack Collection::Collection<#0>($t0, $t1)
3: return $t2
}
[variant baseline]
public fun Test::foo<#0>($t0|i: u64) {
var $t1|c: Collection::Collection<Test::Token<#0>>
var $t2|t: &mut Test::Token<#0>
var $t3: &mut Collection::Collection<Test::Token<#0>>
var $t4: &mut Test::Token<#0>
var $t5: u64
var $t6: &mut u64
# live_nodes: LocalRoot($t0)
0: $t1 := Collection::make_collection<Test::Token<#0>>()
# live_nodes: LocalRoot($t0)
1: $t3 := borrow_local($t1)
# live_nodes: LocalRoot($t0), Reference($t3)
# borrowed_by: LocalRoot($t1) -> {(@, Reference($t3))}
# borrows_from: Reference($t3) -> {(@, LocalRoot($t1))}
2: $t4 := Collection::borrow_mut<Test::Token<#0>>($t3, $t0)
# live_nodes: LocalRoot($t0), Reference($t4)
# borrowed_by: LocalRoot($t1) -> {(@, Reference($t3))}, Reference($t3) -> {(.items (vector<Test::Token<#0>>)/[], Reference($t4))}
# borrows_from: Reference($t3) -> {(@, LocalRoot($t1))}, Reference($t4) -> {(.items (vector<Test::Token<#0>>)/[], Reference($t3))}
3: $t5 := 0
# live_nodes: LocalRoot($t0), Reference($t4)
# borrowed_by: LocalRoot($t1) -> {(@, Reference($t3))}, Reference($t3) -> {(.items (vector<Test::Token<#0>>)/[], Reference($t4))}
# borrows_from: Reference($t3) -> {(@, LocalRoot($t1))}, Reference($t4) -> {(.items (vector<Test::Token<#0>>)/[], Reference($t3))}
4: $t6 := borrow_field<Test::Token<#0>>.value($t4)
# live_nodes: LocalRoot($t0), Reference($t6)
# borrowed_by: LocalRoot($t1) -> {(@, Reference($t3))}, Reference($t3) -> {(.items (vector<Test::Token<#0>>)/[], Reference($t4))}, Reference($t4) -> {(.value (u64), Reference($t6))}
# borrows_from: Reference($t3) -> {(@, LocalRoot($t1))}, Reference($t4) -> {(.items (vector<Test::Token<#0>>)/[], Reference($t3))}, Reference($t6) -> {(.value (u64), Reference($t4))}
5: write_ref($t6, $t5)
# live_nodes: LocalRoot($t0)
# borrowed_by: LocalRoot($t1) -> {(@, Reference($t3))}, Reference($t3) -> {(.items (vector<Test::Token<#0>>)/[], Reference($t4))}, Reference($t4) -> {(.value (u64), Reference($t6))}
# borrows_from: Reference($t3) -> {(@, LocalRoot($t1))}, Reference($t4) -> {(.items (vector<Test::Token<#0>>)/[], Reference($t3))}, Reference($t6) -> {(.value (u64), Reference($t4))}
6: return ()
}
==== borrow analysis summaries ====
fun vector::borrow_mut[baseline]
borrowed_by: Reference($t0) -> {([], Return(0))}
borrows_from: Return(0) -> {([], Reference($t0))}
fun Collection::borrow_mut[baseline]
borrowed_by: Reference($t0) -> {(.items (vector<#0>)/[], Return(0))}
borrows_from: Return(0) -> {(.items (vector<#0>)/[], Reference($t0))}