Skip to content

Commit 03c62f8

Browse files
committed
feat: add callees_len field in SerFunction
1 parent 0908356 commit 03c62f8

16 files changed

+43
-14
lines changed

src/functions/serialization.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ pub struct SerFunction {
1515
attrs: Vec<String>,
1616
/// Raw function string, including name, signature, and body.
1717
func: SourceCode,
18+
/// Count of callees.
19+
callees_len: usize,
1820
/// Recursive function calls inside the proof.
1921
callees: Vec<Callee>,
2022
}
@@ -27,17 +29,18 @@ impl SerFunction {
2729
// Though this is from body span, fn name and signature are included.
2830
let func = cache::get_source_code(&inst).unwrap_or_default();
2931
let callees: Vec<_> = fun.callees.iter().map(Callee::new).collect();
32+
let callees_len = callees.len();
3033

3134
// Hash
3235
let mut hasher = StableHasher::<SipHasher128>::new();
3336
func.with_hasher(&mut hasher);
3437
hasher.write_length_prefix(attrs.len());
3538
attrs.iter().for_each(|attr| hasher.write_str(attr));
36-
hasher.write_length_prefix(callees.len());
39+
hasher.write_length_prefix(callees_len);
3740
callees.iter().for_each(|callee| callee.func.with_hasher(&mut hasher));
3841
let Hash128(hash) = hasher.finish();
3942

40-
SerFunction { hash, def_id, attrs, func, callees }
43+
SerFunction { hash, def_id, attrs, func, callees_len, callees }
4144
}
4245

4346
/// Compare by file and func string.

src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ pub struct SerFunction {
1111
pub attrs: Vec<String>,
1212
/// Raw function string, including name, signature, and body.
1313
pub func: SourceCode,
14+
/// Count of callees.
15+
pub callees_len: usize,
1416
/// Recursive function calls inside the body.
1517
pub callees: Vec<Callee>,
1618
}

tests/proofs.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ fn extract_macros_items(json: &[SerFunction]) -> Vec<SerFunction> {
4646
// filter out kani items).
4747
json.iter()
4848
.map(|j| {
49-
let callees = j
49+
let callees: Vec<_> = j
5050
.callees
5151
.iter()
5252
.filter(|callee| callee.def_id.contains("\"verify::"))
@@ -57,6 +57,7 @@ fn extract_macros_items(json: &[SerFunction]) -> Vec<SerFunction> {
5757
def_id: j.def_id.clone(),
5858
attrs: j.attrs.clone(),
5959
func: j.func.clone(),
60+
callees_len: callees.len(),
6061
callees,
6162
}
6263
})

tests/snapshots/ad_hoc.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"src": "fn callee_defined_in_proof() {\n fn f() -> u8 {\n 1\n }\n assert!(f() == 1);\n }",
1111
"before_expansion": null
1212
},
13+
"callees_len": 2,
1314
"callees": [
1415
{
1516
"def_id": "DefId { id: 6, name: \"kani::assert\" }",
@@ -40,6 +41,7 @@
4041
"src": "fn closure_in_proof() {\n let f = || 1;\n assert!(f() == 1);\n }",
4142
"before_expansion": null
4243
},
44+
"callees_len": 2,
4345
"callees": [
4446
{
4547
"def_id": "DefId { id: 6, name: \"kani::assert\" }",
@@ -70,6 +72,7 @@
7072
"src": "fn proof() {\n assert!(kani::any::<u8>() == 1);\n }",
7173
"before_expansion": null
7274
},
75+
"callees_len": 6,
7376
"callees": [
7477
{
7578
"def_id": "DefId { id: 10, name: \"<u8 as kani::Arbitrary>::any\" }",

tests/snapshots/by_macros/gen_contracts_by_macros.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"src": "fn $proof() {\n $contract_name(kani::any::<u8>());\n }",
1111
"before_expansion": "gen! { proof1: contract1(arg), arg > 0}"
1212
},
13+
"callees_len": 6,
1314
"callees": [
1415
{
1516
"def_id": "DefId { id: 1, name: \"verify::contract1::kani_register_contract\" }",
@@ -72,6 +73,7 @@
7273
"src": "fn $proof() {\n $contract_name(kani::any::<u8>());\n }",
7374
"before_expansion": "gen! { proof2: contract2(arg), arg != 0}"
7475
},
76+
"callees_len": 6,
7577
"callees": [
7678
{
7779
"def_id": "DefId { id: 15, name: \"verify::contract2::kani_register_contract\" }",
@@ -134,6 +136,7 @@
134136
"src": "fn $proof() {\n $contract_name(kani::any::<u8>());\n }",
135137
"before_expansion": "gen! { proof3: contract3(arg), arg < 10}"
136138
},
139+
"callees_len": 6,
137140
"callees": [
138141
{
139142
"def_id": "DefId { id: 29, name: \"verify::contract3::kani_register_contract\" }",

tests/snapshots/by_macros/gen_proofs_by_macros.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"src": "fn $name() $block",
1111
"before_expansion": "gen! { proof1, { assert_eq!(kani::any::<u8>(), 0) }}"
1212
},
13+
"callees_len": 0,
1314
"callees": []
1415
},
1516
{
@@ -23,6 +24,7 @@
2324
"src": "fn $name() $block",
2425
"before_expansion": "gen! { proof2, { assert_eq!(kani::any::<u8>(), 0) }}"
2526
},
27+
"callees_len": 0,
2628
"callees": []
2729
},
2830
{
@@ -36,6 +38,7 @@
3638
"src": "fn $name() $block",
3739
"before_expansion": "gen! { proof3, { assert_eq!(kani::any::<u8>(), 1) }}"
3840
},
41+
"callees_len": 0,
3942
"callees": []
4043
}
4144
]

tests/snapshots/contract1.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"src": "pub fn f() {\n contract(0);\n }",
1111
"before_expansion": null
1212
},
13+
"callees_len": 249,
1314
"callees": [
1415
{
1516
"def_id": "DefId { id: 14, name: \"kani::panic\" }",

tests/snapshots/contract2.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"src": "pub fn f() {\n contract(0);\n }",
1111
"before_expansion": null
1212
},
13+
"callees_len": 249,
1314
"callees": [
1415
{
1516
"def_id": "DefId { id: 27, name: \"kani::panic\" }",

tests/snapshots/gen_contracts_by_macros.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"src": "fn $proof() {\n $contract_name(kani::any::<u8>());\n }",
1111
"before_expansion": "gen! { proof1: contract1(arg), arg > 0}"
1212
},
13+
"callees_len": 255,
1314
"callees": [
1415
{
1516
"def_id": "DefId { id: 263, name: \"<u8 as kani::Arbitrary>::any\" }",
@@ -2064,6 +2065,7 @@
20642065
"src": "fn $proof() {\n $contract_name(kani::any::<u8>());\n }",
20652066
"before_expansion": "gen! { proof2: contract2(arg), arg != 0}"
20662067
},
2068+
"callees_len": 255,
20672069
"callees": [
20682070
{
20692071
"def_id": "DefId { id: 263, name: \"<u8 as kani::Arbitrary>::any\" }",
@@ -4118,6 +4120,7 @@
41184120
"src": "fn $proof() {\n $contract_name(kani::any::<u8>());\n }",
41194121
"before_expansion": "gen! { proof3: contract3(arg), arg < 10}"
41204122
},
4123+
"callees_len": 255,
41214124
"callees": [
41224125
{
41234126
"def_id": "DefId { id: 263, name: \"<u8 as kani::Arbitrary>::any\" }",

tests/snapshots/gen_proofs_by_macros.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"src": "fn $name() $block",
1111
"before_expansion": "gen! { proof1, { assert_eq!(kani::any::<u8>(), 0) }}"
1212
},
13+
"callees_len": 6,
1314
"callees": [
1415
{
1516
"def_id": "DefId { id: 6, name: \"<u8 as kani::Arbitrary>::any\" }",
@@ -72,6 +73,7 @@
7273
"src": "fn $name() $block",
7374
"before_expansion": "gen! { proof2, { assert_eq!(kani::any::<u8>(), 0) }}"
7475
},
76+
"callees_len": 6,
7577
"callees": [
7678
{
7779
"def_id": "DefId { id: 6, name: \"<u8 as kani::Arbitrary>::any\" }",
@@ -134,6 +136,7 @@
134136
"src": "fn $name() $block",
135137
"before_expansion": "gen! { proof3, { assert_eq!(kani::any::<u8>(), 1) }}"
136138
},
139+
"callees_len": 6,
137140
"callees": [
138141
{
139142
"def_id": "DefId { id: 6, name: \"<u8 as kani::Arbitrary>::any\" }",

0 commit comments

Comments
 (0)