rust_verify_test coverage (fbbbbcf)

Coverage Report

Created: 2026-08-23 08:37

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
rust_verify/src/verus_items.rs
Line
Count
Source
1
use air::ast::Ident;
2
use regex::Regex;
3
use rustc_middle::ty::{TyCtxt, TyKind};
4
use rustc_span::def_id::DefId;
5
use std::{collections::HashMap, sync::Arc};
6
use vir::ast::CrateId;
7
8
// The names returned by this are intended exclusively for matching in `get_rust_item`
9
506k
fn ty_to_stable_string_partial<'tcx>(
10
506k
    tcx: TyCtxt<'tcx>,
11
506k
    ty: &rustc_middle::ty::Ty<'_>,
12
506k
) -> Option<String> {
13
506k
    Some(match ty.kind() {
14
32
        TyKind::Bool => format!("bool"),
15
66
        TyKind::Char => format!("char"),
16
12.1k
        TyKind::Int(t) => format!("{}", t.name_str()),
17
16.1k
        TyKind::Uint(t) => format!("{}", t.name_str()),
18
0
        TyKind::Float(t) => format!("{}", t.name_str()),
19
435
        TyKind::RawPtr(ty, tm) => format!(
20
            "*{} {}",
21
435
            match tm {
22
321
                rustc_ast::Mutability::Mut => "mut",
23
114
                rustc_ast::Mutability::Not => "const",
24
            },
25
435
            ty_to_stable_string_partial(tcx, ty)?,
26
        ),
27
0
        TyKind::Ref(_r, ty, mutbl) => format!(
28
            "&{} {}",
29
0
            match mutbl {
30
0
                rustc_ast::Mutability::Mut => "mut",
31
0
                rustc_ast::Mutability::Not => "const",
32
            },
33
0
            ty_to_stable_string_partial(tcx, ty)?,
34
        ),
35
0
        TyKind::Never => format!("!"),
36
0
        TyKind::Tuple(tys) => format!(
37
            "({})",
38
0
            tys.iter()
39
0
                .map(|ty| ty_to_stable_string_partial(tcx, &ty))
40
0
                .collect::<Option<Vec<_>>>()?
41
0
                .join(",")
42
        ),
43
1.53k
        TyKind::Param(param_ty) => format!("{}", param_ty.name.as_str()),
44
472k
        TyKind::Adt(def, _substs) => {
45
472k
            return Some(def_id_to_stable_rust_path(tcx, def.did())?);
46
        }
47
375
        TyKind::Str => format!("str"),
48
28
        TyKind::Array(ty, sz) => {
49
28
            format!("[{}; {}]", ty_to_stable_string_partial(tcx, &ty)?, sz)
50
        }
51
1.07k
        TyKind::Slice(ty) => format!("[{}]", ty_to_stable_string_partial(tcx, &ty)?),
52
1.67k
        _ => return None,
53
    })
54
506k
}
55
56
/// NOTE: do not use this to determine if something is a well known / rust lang item
57
/// use verus_items::get_rust_item instead
58
5.24M
pub(crate) fn def_id_to_stable_rust_path<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId) -> Option<String> {
59
5.24M
    let def_path = tcx.def_path(def_id);
60
5.24M
    let mut segments: Vec<String> = Vec::with_capacity(def_path.data.len());
61
5.24M
    let crate_name = tcx.crate_name(def_path.krate);
62
5.24M
    segments.push(crate_name.to_ident_string());
63
5.24M
    let mut one_impl_block_in_path = false;
64
11.7M
    for d in def_path.data.iter() {
65
        use rustc_hir::definitions::DefPathData;
66
11.7M
        match &d.data {
67
9.27M
            DefPathData::ValueNs(symbol) | DefPathData::TypeNs(symbol) => {
68
11.2M
                segments.push(symbol.to_string())
69
            }
70
0
            DefPathData::Ctor => segments.push(vir::def::RUST_DEF_CTOR.to_string()),
71
            DefPathData::Impl => {
72
504k
                if one_impl_block_in_path {
73
0
                    return None;
74
504k
                }
75
504k
                one_impl_block_in_path = true;
76
504k
                let self_ty = tcx.type_of(tcx.parent(def_id)).skip_binder();
77
504k
                let path = ty_to_stable_string_partial(tcx, &self_ty)?;
78
503k
                segments.clear();
79
503k
                segments.push(path);
80
            }
81
1
            DefPathData::ForeignMod => {
82
1
                // this segment can be ignored
83
1
            }
84
6
            _ => return None,
85
        }
86
    }
87
5.24M
    Some(segments.join("::"))
88
5.24M
}
89
90
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
91
pub(crate) enum SpecItem {
92
    Admit,
93
    Assume,
94
    NoMethodBody,
95
    Requires,
96
    Recommends,
97
    Ensures,
98
    Returns,
99
    InvariantExceptBreak,
100
    Invariant,
101
    AtomicSpec,
102
    AtomicCallLoop,
103
    Decreases,
104
    DecreasesWhen,
105
    DecreasesBy,
106
    RecommendsBy,
107
    OpensInvariantMask,
108
    InvMaskNone,
109
    InvMaskAny,
110
    InvMaskList,
111
    InvMaskListCompl,
112
    InvMaskSet,
113
    Atomically,
114
    NoUnwind,
115
    NoUnwindWhen,
116
}
117
118
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
119
pub(crate) enum QuantItem {
120
    Forall,
121
    Exists,
122
}
123
124
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
125
pub(crate) enum DirectiveItem {
126
    ExtraDependency,
127
    RevealHide,
128
    RevealHideInternalPath,
129
    RevealStrlit,
130
    RevealByteslit,
131
    InlineAirStmt,
132
}
133
134
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
135
pub(crate) enum ExprItem {
136
    Choose,
137
    ChooseTuple,
138
    Old,
139
    GetVariantField,
140
    GetUnionField,
141
    IsVariant,
142
    ArrayIndex,
143
    F32ToBits,
144
    F64ToBits,
145
    StrSliceLen,
146
    StrSliceGetChar,
147
    ArchWordBits,
148
    ClosureToFnSpec,
149
    ClosureToFnProof,
150
    SignedMin,
151
    SignedMax,
152
    UnsignedMax,
153
    IsSmallerThan,
154
    IsSmallerThanLexicographic,
155
    IsSmallerThanRecursiveFunctionField,
156
    DefaultEnsures,
157
    ShrRefStructWrap,
158
}
159
160
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
161
pub(crate) enum CompilableOprItem {
162
    Implies,
163
    // SmartPtrNew,
164
    GhostExec,
165
    GhostNew,
166
    TrackedNew,
167
    TrackedExec,
168
    TrackedExecBorrow,
169
    TrackedGet,
170
    TrackedBorrow,
171
    TrackedBorrowMut,
172
    // GhostSplitTuple,
173
    // TrackedSplitTuple,
174
}
175
176
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
177
pub(crate) enum BuiltinDerefItem {
178
    TrackedDeref,
179
    TrackedDerefMut,
180
    GhostDeref,
181
    GhostDerefMut,
182
}
183
184
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
185
pub(crate) enum ArithItem {
186
    BuiltinAdd,
187
    BuiltinSub,
188
    BuiltinMul,
189
}
190
191
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
192
pub(crate) enum EqualityItem {
193
    Equal,
194
    SpecEq,
195
    ExtEqual,
196
    ExtEqualDeep,
197
}
198
199
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
200
pub(crate) enum SpecOrdItem {
201
    Le,
202
    Ge,
203
    Lt,
204
    Gt,
205
}
206
207
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
208
pub(crate) enum SpecArithItem {
209
    Add,
210
    Sub,
211
    Mul,
212
    EuclideanOrRealDiv,
213
    EuclideanMod,
214
}
215
216
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
217
pub(crate) enum SpecBitwiseItem {
218
    BitAnd,
219
    BitOr,
220
    BitXor,
221
    Shl,
222
    Shr,
223
}
224
225
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
226
pub(crate) enum IeeeFloatUnaryItem {
227
    Cast,
228
    Neg,
229
    Floor,
230
    Ceil,
231
    Round,
232
    RoundTiesEven,
233
    Trunc,
234
    IsNormal,
235
    IsSubnormal,
236
    IsZero,
237
    IsInfinite,
238
    IsNaN,
239
    IsNegative,
240
    IsPositive,
241
}
242
243
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
244
pub(crate) enum IeeeFloatBinaryItem {
245
    Add,
246
    Sub,
247
    Mul,
248
    Div,
249
    Eq,
250
    Le,
251
    Ge,
252
    Lt,
253
    Gt,
254
}
255
256
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
257
pub(crate) enum BinaryOpItem {
258
    Arith(ArithItem),
259
    Equality(EqualityItem),
260
    SpecOrd(SpecOrdItem),
261
    SpecArith(SpecArithItem),
262
    SpecBitwise(SpecBitwiseItem),
263
    IeeeFloat(IeeeFloatBinaryItem),
264
}
265
266
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
267
pub(crate) enum ChainedItem {
268
    Value,
269
    Le,
270
    Lt,
271
    Ge,
272
    Gt,
273
    Cmp,
274
    Eq,
275
}
276
277
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
278
pub(crate) enum AssertItem {
279
    Assert,
280
    AssertBy,
281
    AssertByCompute,
282
    AssertByComputeOnly,
283
    AssertNonlinearBy,
284
    AssertBitvectorBy,
285
    AssertForallBy,
286
    AssertBitVector,
287
}
288
289
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
290
pub(crate) enum SpecLiteralItem {
291
    Integer,
292
    Int,
293
    Nat,
294
    Decimal,
295
}
296
297
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
298
pub(crate) enum SpecGhostTrackedItem {
299
    GhostView,
300
    GhostBorrow,
301
    GhostBorrowMut,
302
    TrackedView,
303
}
304
305
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
306
pub(crate) enum UnaryOpItem {
307
    SpecLiteral(SpecLiteralItem),
308
    SpecNeg,
309
    SpecCastInteger,
310
    SpecCastReal,
311
    SpecCastFloat,
312
    RealFloor,
313
    SpecGhostTracked(SpecGhostTrackedItem),
314
    IeeeFloat(IeeeFloatUnaryItem),
315
}
316
317
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
318
pub(crate) enum OpenInvariantBlockItem {
319
    OpenLocalInvariantBegin,
320
    OpenAtomicInvariantBegin,
321
    OpenInvariantEnd,
322
}
323
324
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
325
pub(crate) enum OpenAtomicUpdateItem {
326
    TryOpenAtomicUpdateBegin,
327
    TryOpenAtomicUpdateEnd,
328
}
329
330
#[derive(PartialEq, Eq, Debug, Clone, Hash)]
331
pub(crate) enum InvariantItem {
332
    AtomicInvariantNamespace,
333
    AtomicInvariantInv,
334
    LocalInvariantNamespace,
335
    LocalInvariantInv,
336
    CreateOpenInvariantCredit,
337
    SpendOpenInvariantCredit,
338
    SpendOpenInvariantCreditInProof,
339
}
340
341
#[derive(PartialEq, Eq, Debug, Clone, Hash)]
342
pub(crate) enum AtomicUpdateItem {
343
    AtomicUpdateReq,
344
    AtomicUpdateEns,
345
    AtomicUpdatePred,
346
    AtomicUpdateResolves,
347
    AtomicUpdateInput,
348
    AtomicUpdateOutput,
349
    AtomicUpdateOuterMask,
350
    AtomicUpdateInnerMask,
351
}
352
353
#[derive(PartialEq, Eq, Debug, Clone, Hash)]
354
pub(crate) enum SetItem {
355
    Type,
356
    Empty,
357
    Full,
358
    Contains,
359
    SubsetOf,
360
    Insert,
361
    Remove,
362
}
363
364
#[derive(PartialEq, Eq, Debug, Clone, Hash)]
365
pub(crate) enum VstdItem {
366
    SeqFn(vir::interpreter::SeqFn),
367
    SetItem(SetItem),
368
    ISetItem(SetItem),
369
    Invariant(InvariantItem),
370
    AtomicUpdate(AtomicUpdateItem),
371
    PredArgs,
372
    BranchBool,
373
    ExecNonstaticCall,
374
    ProofNonstaticCall,
375
    ArrayIndexGet,
376
    ArrayAsSlice,
377
    ArrayFillForCopyTypes,
378
    SpecArrayUpdate,
379
    SliceIndexGet,
380
    SpecSliceUpdate,
381
    SpecSliceLen,
382
    SpecSliceIndex,
383
    CastPtrToThinPtr,
384
    CastArrayPtrToSlicePtr,
385
    CastSlicePtrToSlicePtr,
386
    CastSlicePtrToStrPtr,
387
    CastStrPtrToSlicePtr,
388
    CastPtrToUsize,
389
    FloatCast,
390
    RefMutArrayUnsizingCoercion,
391
    VecIndex,
392
    VecIndexMut,
393
    SharedReference,
394
}
395
396
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
397
pub(crate) enum MarkerItem {
398
    Structural,
399
}
400
401
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
402
pub(crate) enum BuiltinTypeItem {
403
    Int,
404
    Nat,
405
    Real,
406
    FnSpec,
407
    Ghost,
408
    Tracked,
409
}
410
411
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
412
pub(crate) enum BuiltinTraitItem {
413
    Integer,
414
    Chainable,
415
    Sealed,
416
}
417
418
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
419
pub(crate) enum BuiltinFunctionItem {
420
    CallRequires,
421
    CallEnsures,
422
    ConstrainType,
423
    GetFutureOutputType,
424
}
425
426
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
427
pub(crate) enum GlobalItem {
428
    SizeOf,
429
}
430
431
#[derive(PartialEq, Eq, Debug, Clone, Copy, Hash)]
432
#[allow(non_camel_case_types)]
433
pub(crate) enum ExternalItem {
434
    FnProof,
435
    FOpts,
436
    FnProofReq,
437
    FnProofEns,
438
    ProofFnOnce,
439
    ProofFnMut,
440
    ProofFn,
441
    Trk,
442
    RqEn,
443
}
444
445
#[derive(PartialEq, Eq, Debug, Clone, Hash)]
446
pub(crate) enum RustPrivate {
447
    Path(vir::ast::Path),
448
    FormatArgumentFn(Ident),
449
    FormatArgumentsFn(Ident),
450
}
451
452
#[derive(PartialEq, Eq, Debug, Clone, Hash)]
453
pub(crate) enum VerusItem {
454
    Spec(SpecItem),
455
    Quant(QuantItem),
456
    Directive(DirectiveItem),
457
    Expr(ExprItem),
458
    CompilableOpr(CompilableOprItem),
459
    BinaryOp(BinaryOpItem),
460
    UnaryOp(UnaryOpItem),
461
    Chained(ChainedItem),
462
    Assert(AssertItem),
463
    UseTypeInvariant,
464
    WithTriggers,
465
    OpenInvariantBlock(OpenInvariantBlockItem),
466
    OpenAtomicUpdate(OpenAtomicUpdateItem),
467
    Vstd(VstdItem, Option<Ident>),
468
    RustPrivate(RustPrivate),
469
    Marker(MarkerItem),
470
    BuiltinType(BuiltinTypeItem),
471
    BuiltinTrait(BuiltinTraitItem),
472
    BuiltinFunction(BuiltinFunctionItem),
473
    BuiltinDeref(BuiltinDerefItem),
474
    Global(GlobalItem),
475
    External(ExternalItem),
476
    HasResolved,
477
    HasResolvedUnsized,
478
    MutRefCurrent,
479
    MutRefFuture,
480
    Final,
481
    AfterBorrow,
482
    ErasedGhostValue,
483
    ShadowGhostValue,
484
    MutableReferenceTie,
485
    TwoPhaseMutableReferenceTie,
486
    GetFirst,
487
    DummyCapture(DummyCaptureItem),
488
    MutRefTracked,
489
}
490
491
#[derive(PartialEq, Eq, Debug, Clone, Hash)]
492
pub(crate) enum DummyCaptureItem {
493
    Struct,
494
    New,
495
    Consume,
496
}
497
498
#[rustfmt::skip]
499
4.38k
fn verus_items_map() -> Vec<(&'static str, VerusItem)> {
500
4.38k
    vec![
501
4.38k
        ("verus::verus_builtin::admit",                   VerusItem::Spec(SpecItem::Admit)),
502
4.38k
        ("verus::verus_builtin::assume_",                 VerusItem::Spec(SpecItem::Assume)),
503
4.38k
        ("verus::verus_builtin::no_method_body",          VerusItem::Spec(SpecItem::NoMethodBody)),
504
4.38k
        ("verus::verus_builtin::requires",                VerusItem::Spec(SpecItem::Requires)),
505
4.38k
        ("verus::verus_builtin::recommends",              VerusItem::Spec(SpecItem::Recommends)),
506
4.38k
        ("verus::verus_builtin::ensures",                 VerusItem::Spec(SpecItem::Ensures)),
507
4.38k
        ("verus::verus_builtin::returns",                 VerusItem::Spec(SpecItem::Returns)),
508
4.38k
        ("verus::verus_builtin::invariant_except_break",  VerusItem::Spec(SpecItem::InvariantExceptBreak)),
509
4.38k
        ("verus::verus_builtin::invariant",               VerusItem::Spec(SpecItem::Invariant)),
510
4.38k
        ("verus::verus_builtin::atomic_spec",             VerusItem::Spec(SpecItem::AtomicSpec)),
511
4.38k
        ("verus::verus_builtin::atomic_call_loop",        VerusItem::Spec(SpecItem::AtomicCallLoop)),
512
4.38k
        ("verus::verus_builtin::decreases",               VerusItem::Spec(SpecItem::Decreases)),
513
4.38k
        ("verus::verus_builtin::decreases_when",          VerusItem::Spec(SpecItem::DecreasesWhen)),
514
4.38k
        ("verus::verus_builtin::decreases_by",            VerusItem::Spec(SpecItem::DecreasesBy)),
515
4.38k
        ("verus::verus_builtin::recommends_by",           VerusItem::Spec(SpecItem::RecommendsBy)),
516
517
4.38k
        ("verus::verus_builtin::opens_invariant_mask",   VerusItem::Spec(SpecItem::OpensInvariantMask)),
518
519
4.38k
        ("verus::verus_builtin::inv_mask_none",           VerusItem::Spec(SpecItem::InvMaskNone)),
520
4.38k
        ("verus::verus_builtin::inv_mask_any",            VerusItem::Spec(SpecItem::InvMaskAny)),
521
4.38k
        ("verus::verus_builtin::inv_mask_list",           VerusItem::Spec(SpecItem::InvMaskList)),
522
4.38k
        ("verus::verus_builtin::inv_mask_list_compl",     VerusItem::Spec(SpecItem::InvMaskListCompl)),
523
4.38k
        ("verus::verus_builtin::inv_mask_set",            VerusItem::Spec(SpecItem::InvMaskSet)),
524
525
4.38k
        ("verus::verus_builtin::no_unwind",               VerusItem::Spec(SpecItem::NoUnwind)),
526
4.38k
        ("verus::verus_builtin::no_unwind_when",          VerusItem::Spec(SpecItem::NoUnwindWhen)),
527
528
4.38k
        ("verus::verus_builtin::forall",                  VerusItem::Quant(QuantItem::Forall)),
529
4.38k
        ("verus::verus_builtin::exists",                  VerusItem::Quant(QuantItem::Exists)),
530
531
4.38k
        ("verus::verus_builtin::extra_dependency",        VerusItem::Directive(DirectiveItem::ExtraDependency)),
532
4.38k
        ("verus::verus_builtin::reveal_hide",             VerusItem::Directive(DirectiveItem::RevealHide)),
533
4.38k
        ("verus::verus_builtin::reveal_hide_internal_path", VerusItem::Directive(DirectiveItem::RevealHideInternalPath)),
534
4.38k
        ("verus::verus_builtin::reveal_strlit",           VerusItem::Directive(DirectiveItem::RevealStrlit)),
535
4.38k
        ("verus::verus_builtin::reveal_byteslit",         VerusItem::Directive(DirectiveItem::RevealByteslit)),
536
4.38k
        ("verus::verus_builtin::inline_air_stmt",         VerusItem::Directive(DirectiveItem::InlineAirStmt)),
537
538
4.38k
        ("verus::verus_builtin::choose",                  VerusItem::Expr(ExprItem::Choose)),
539
4.38k
        ("verus::verus_builtin::choose_tuple",            VerusItem::Expr(ExprItem::ChooseTuple)),
540
4.38k
        ("verus::verus_builtin::old",                     VerusItem::Expr(ExprItem::Old)),
541
4.38k
        ("verus::verus_builtin::get_variant_field",       VerusItem::Expr(ExprItem::GetVariantField)),
542
4.38k
        ("verus::verus_builtin::get_union_field",         VerusItem::Expr(ExprItem::GetUnionField)),
543
4.38k
        ("verus::verus_builtin::is_variant",              VerusItem::Expr(ExprItem::IsVariant)),
544
4.38k
        ("verus::verus_builtin::array_index",             VerusItem::Expr(ExprItem::ArrayIndex)),
545
4.38k
        ("verus::verus_builtin::f32_to_bits",             VerusItem::Expr(ExprItem::F32ToBits)),
546
4.38k
        ("verus::verus_builtin::f64_to_bits",             VerusItem::Expr(ExprItem::F64ToBits)),
547
4.38k
        ("verus::verus_builtin::strslice_len",            VerusItem::Expr(ExprItem::StrSliceLen)),
548
4.38k
        ("verus::verus_builtin::strslice_get_char",       VerusItem::Expr(ExprItem::StrSliceGetChar)),
549
4.38k
        ("verus::verus_builtin::arch_word_bits",          VerusItem::Expr(ExprItem::ArchWordBits)),
550
4.38k
        ("verus::verus_builtin::closure_to_fn_spec",      VerusItem::Expr(ExprItem::ClosureToFnSpec)),
551
4.38k
        ("verus::verus_builtin::closure_to_fn_proof",     VerusItem::Expr(ExprItem::ClosureToFnProof)),
552
4.38k
        ("verus::verus_builtin::signed_min",              VerusItem::Expr(ExprItem::SignedMin)),
553
4.38k
        ("verus::verus_builtin::signed_max",              VerusItem::Expr(ExprItem::SignedMax)),
554
4.38k
        ("verus::verus_builtin::unsigned_max",            VerusItem::Expr(ExprItem::UnsignedMax)),
555
4.38k
        ("verus::verus_builtin::is_smaller_than",         VerusItem::Expr(ExprItem::IsSmallerThan)),
556
4.38k
        ("verus::verus_builtin::is_smaller_than_lexicographic", VerusItem::Expr(ExprItem::IsSmallerThanLexicographic)),
557
4.38k
        ("verus::verus_builtin::is_smaller_than_recursive_function_field", VerusItem::Expr(ExprItem::IsSmallerThanRecursiveFunctionField)),
558
4.38k
        ("verus::verus_builtin::default_ensures",         VerusItem::Expr(ExprItem::DefaultEnsures)),
559
4.38k
        ("verus::verus_builtin::shr_ref_struct_wrap",     VerusItem::Expr(ExprItem::ShrRefStructWrap)),
560
561
4.38k
        ("verus::verus_builtin::imply",                   VerusItem::CompilableOpr(CompilableOprItem::Implies)),
562
        // TODO ("verus::verus_builtin::smartptr_new",    VerusItem::CompilableOpr(CompilableOprItem::SmartPtrNew)),
563
4.38k
        ("verus::verus_builtin::ghost_exec",              VerusItem::CompilableOpr(CompilableOprItem::GhostExec)),
564
4.38k
        ("verus::verus_builtin::Ghost::new",              VerusItem::CompilableOpr(CompilableOprItem::GhostNew)),
565
4.38k
        ("verus::verus_builtin::Tracked::new",            VerusItem::CompilableOpr(CompilableOprItem::TrackedNew)),
566
4.38k
        ("verus::verus_builtin::tracked_exec",            VerusItem::CompilableOpr(CompilableOprItem::TrackedExec)),
567
4.38k
        ("verus::verus_builtin::tracked_exec_borrow",     VerusItem::CompilableOpr(CompilableOprItem::TrackedExecBorrow)),
568
4.38k
        ("verus::verus_builtin::Tracked::get",            VerusItem::CompilableOpr(CompilableOprItem::TrackedGet)),
569
4.38k
        ("verus::verus_builtin::Tracked::borrow",         VerusItem::CompilableOpr(CompilableOprItem::TrackedBorrow)),
570
4.38k
        ("verus::verus_builtin::Tracked::borrow_mut",     VerusItem::CompilableOpr(CompilableOprItem::TrackedBorrowMut)),
571
572
4.38k
        ("verus::verus_builtin::Tracked::deref",          VerusItem::BuiltinDeref(BuiltinDerefItem::TrackedDeref)),
573
4.38k
        ("verus::verus_builtin::Tracked::deref_mut",      VerusItem::BuiltinDeref(BuiltinDerefItem::TrackedDerefMut)),
574
4.38k
        ("verus::verus_builtin::Ghost::deref",            VerusItem::BuiltinDeref(BuiltinDerefItem::GhostDeref)),
575
4.38k
        ("verus::verus_builtin::Ghost::deref_mut",        VerusItem::BuiltinDeref(BuiltinDerefItem::GhostDerefMut)),
576
577
4.38k
        ("verus::verus_builtin::add",                     VerusItem::BinaryOp(BinaryOpItem::Arith(ArithItem::BuiltinAdd))),
578
4.38k
        ("verus::verus_builtin::sub",                     VerusItem::BinaryOp(BinaryOpItem::Arith(ArithItem::BuiltinSub))),
579
4.38k
        ("verus::verus_builtin::mul",                     VerusItem::BinaryOp(BinaryOpItem::Arith(ArithItem::BuiltinMul))),
580
581
4.38k
        ("verus::verus_builtin::equal",                   VerusItem::BinaryOp(BinaryOpItem::Equality(EqualityItem::Equal))),
582
4.38k
        ("verus::verus_builtin::spec_eq",                 VerusItem::BinaryOp(BinaryOpItem::Equality(EqualityItem::SpecEq))),
583
4.38k
        ("verus::verus_builtin::ext_equal",               VerusItem::BinaryOp(BinaryOpItem::Equality(EqualityItem::ExtEqual))),
584
4.38k
        ("verus::verus_builtin::ext_equal_deep",          VerusItem::BinaryOp(BinaryOpItem::Equality(EqualityItem::ExtEqualDeep))),
585
586
4.38k
        ("verus::verus_builtin::SpecOrd::spec_le",        VerusItem::BinaryOp(BinaryOpItem::SpecOrd(SpecOrdItem::Le))),
587
4.38k
        ("verus::verus_builtin::SpecOrd::spec_ge",        VerusItem::BinaryOp(BinaryOpItem::SpecOrd(SpecOrdItem::Ge))),
588
4.38k
        ("verus::verus_builtin::SpecOrd::spec_lt",        VerusItem::BinaryOp(BinaryOpItem::SpecOrd(SpecOrdItem::Lt))),
589
4.38k
        ("verus::verus_builtin::SpecOrd::spec_gt",        VerusItem::BinaryOp(BinaryOpItem::SpecOrd(SpecOrdItem::Gt))),
590
591
4.38k
        ("verus::verus_builtin::SpecAdd::spec_add",       VerusItem::BinaryOp(BinaryOpItem::SpecArith(SpecArithItem::Add))),
592
4.38k
        ("verus::verus_builtin::SpecSub::spec_sub",       VerusItem::BinaryOp(BinaryOpItem::SpecArith(SpecArithItem::Sub))),
593
4.38k
        ("verus::verus_builtin::SpecMul::spec_mul",       VerusItem::BinaryOp(BinaryOpItem::SpecArith(SpecArithItem::Mul))),
594
4.38k
        ("verus::verus_builtin::SpecEuclideanOrRealDiv::spec_euclidean_or_real_div", VerusItem::BinaryOp(BinaryOpItem::SpecArith(SpecArithItem::EuclideanOrRealDiv))),
595
4.38k
        ("verus::verus_builtin::SpecEuclideanMod::spec_euclidean_mod", VerusItem::BinaryOp(BinaryOpItem::SpecArith(SpecArithItem::EuclideanMod))),
596
597
4.38k
        ("verus::verus_builtin::SpecBitAnd::spec_bitand", VerusItem::BinaryOp(BinaryOpItem::SpecBitwise(SpecBitwiseItem::BitAnd))),
598
4.38k
        ("verus::verus_builtin::SpecBitOr::spec_bitor",   VerusItem::BinaryOp(BinaryOpItem::SpecBitwise(SpecBitwiseItem::BitOr))),
599
4.38k
        ("verus::verus_builtin::SpecBitXor::spec_bitxor", VerusItem::BinaryOp(BinaryOpItem::SpecBitwise(SpecBitwiseItem::BitXor))),
600
4.38k
        ("verus::verus_builtin::SpecShl::spec_shl",       VerusItem::BinaryOp(BinaryOpItem::SpecBitwise(SpecBitwiseItem::Shl))),
601
4.38k
        ("verus::verus_builtin::SpecShr::spec_shr",       VerusItem::BinaryOp(BinaryOpItem::SpecBitwise(SpecBitwiseItem::Shr))),
602
603
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_add",     VerusItem::BinaryOp(BinaryOpItem::IeeeFloat(IeeeFloatBinaryItem::Add))),
604
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_sub",     VerusItem::BinaryOp(BinaryOpItem::IeeeFloat(IeeeFloatBinaryItem::Sub))),
605
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_mul",     VerusItem::BinaryOp(BinaryOpItem::IeeeFloat(IeeeFloatBinaryItem::Mul))),
606
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_div",     VerusItem::BinaryOp(BinaryOpItem::IeeeFloat(IeeeFloatBinaryItem::Div))),
607
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_eq",      VerusItem::BinaryOp(BinaryOpItem::IeeeFloat(IeeeFloatBinaryItem::Eq))),
608
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_le",      VerusItem::BinaryOp(BinaryOpItem::IeeeFloat(IeeeFloatBinaryItem::Le))),
609
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_ge",      VerusItem::BinaryOp(BinaryOpItem::IeeeFloat(IeeeFloatBinaryItem::Ge))),
610
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_lt",      VerusItem::BinaryOp(BinaryOpItem::IeeeFloat(IeeeFloatBinaryItem::Lt))),
611
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_gt",      VerusItem::BinaryOp(BinaryOpItem::IeeeFloat(IeeeFloatBinaryItem::Gt))),
612
613
4.38k
        ("verus::verus_builtin::spec_chained_value",      VerusItem::Chained(ChainedItem::Value)),
614
4.38k
        ("verus::verus_builtin::spec_chained_le",         VerusItem::Chained(ChainedItem::Le)),
615
4.38k
        ("verus::verus_builtin::spec_chained_lt",         VerusItem::Chained(ChainedItem::Lt)),
616
4.38k
        ("verus::verus_builtin::spec_chained_ge",         VerusItem::Chained(ChainedItem::Ge)),
617
4.38k
        ("verus::verus_builtin::spec_chained_gt",         VerusItem::Chained(ChainedItem::Gt)),
618
4.38k
        ("verus::verus_builtin::spec_chained_cmp",        VerusItem::Chained(ChainedItem::Cmp)),
619
4.38k
        ("verus::verus_builtin::spec_chained_eq",         VerusItem::Chained(ChainedItem::Eq)),
620
621
4.38k
        ("verus::verus_builtin::assert_",                 VerusItem::Assert(AssertItem::Assert)),
622
4.38k
        ("verus::verus_builtin::assert_by",               VerusItem::Assert(AssertItem::AssertBy)),
623
4.38k
        ("verus::verus_builtin::assert_by_compute",       VerusItem::Assert(AssertItem::AssertByCompute)),
624
4.38k
        ("verus::verus_builtin::assert_by_compute_only",  VerusItem::Assert(AssertItem::AssertByComputeOnly)),
625
4.38k
        ("verus::verus_builtin::assert_nonlinear_by",     VerusItem::Assert(AssertItem::AssertNonlinearBy)),
626
4.38k
        ("verus::verus_builtin::assert_bitvector_by",     VerusItem::Assert(AssertItem::AssertBitvectorBy)),
627
4.38k
        ("verus::verus_builtin::assert_forall_by",        VerusItem::Assert(AssertItem::AssertForallBy)),
628
4.38k
        ("verus::verus_builtin::assert_bit_vector",       VerusItem::Assert(AssertItem::AssertBitVector)),
629
4.38k
        ("verus::verus_builtin::use_type_invariant",      VerusItem::UseTypeInvariant),
630
631
4.38k
        ("verus::verus_builtin::with_triggers",           VerusItem::WithTriggers),
632
633
4.38k
        ("verus::verus_builtin::spec_literal_integer",    VerusItem::UnaryOp(UnaryOpItem::SpecLiteral(SpecLiteralItem::Integer))),
634
4.38k
        ("verus::verus_builtin::spec_literal_int",        VerusItem::UnaryOp(UnaryOpItem::SpecLiteral(SpecLiteralItem::Int))),
635
4.38k
        ("verus::verus_builtin::spec_literal_nat",        VerusItem::UnaryOp(UnaryOpItem::SpecLiteral(SpecLiteralItem::Nat))),
636
4.38k
        ("verus::verus_builtin::spec_literal_decimal",    VerusItem::UnaryOp(UnaryOpItem::SpecLiteral(SpecLiteralItem::Decimal))),
637
4.38k
        ("verus::verus_builtin::SpecNeg::spec_neg",       VerusItem::UnaryOp(UnaryOpItem::SpecNeg)),
638
4.38k
        ("verus::verus_builtin::spec_cast_integer",       VerusItem::UnaryOp(UnaryOpItem::SpecCastInteger)),
639
4.38k
        ("verus::verus_builtin::spec_cast_real",          VerusItem::UnaryOp(UnaryOpItem::SpecCastReal)),
640
4.38k
        ("verus::verus_builtin::spec_cast_float",         VerusItem::UnaryOp(UnaryOpItem::SpecCastFloat)),
641
4.38k
        ("verus::verus_builtin::real::floor",             VerusItem::UnaryOp(UnaryOpItem::RealFloor)),
642
4.38k
        ("verus::verus_builtin::Ghost::view",             VerusItem::UnaryOp(UnaryOpItem::SpecGhostTracked(SpecGhostTrackedItem::GhostView))),
643
4.38k
        ("verus::verus_builtin::Ghost::borrow",           VerusItem::UnaryOp(UnaryOpItem::SpecGhostTracked(SpecGhostTrackedItem::GhostBorrow))),
644
4.38k
        ("verus::verus_builtin::Ghost::borrow_mut",       VerusItem::UnaryOp(UnaryOpItem::SpecGhostTracked(SpecGhostTrackedItem::GhostBorrowMut))),
645
4.38k
        ("verus::verus_builtin::Tracked::view",           VerusItem::UnaryOp(UnaryOpItem::SpecGhostTracked(SpecGhostTrackedItem::TrackedView))),
646
647
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_neg",     VerusItem::UnaryOp(UnaryOpItem::IeeeFloat(IeeeFloatUnaryItem::Neg))),
648
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_floor",   VerusItem::UnaryOp(UnaryOpItem::IeeeFloat(IeeeFloatUnaryItem::Floor))),
649
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_ceil",    VerusItem::UnaryOp(UnaryOpItem::IeeeFloat(IeeeFloatUnaryItem::Ceil))),
650
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_round",   VerusItem::UnaryOp(UnaryOpItem::IeeeFloat(IeeeFloatUnaryItem::Round))),
651
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_round_ties_even", VerusItem::UnaryOp(UnaryOpItem::IeeeFloat(IeeeFloatUnaryItem::RoundTiesEven))),
652
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_trunc",           VerusItem::UnaryOp(UnaryOpItem::IeeeFloat(IeeeFloatUnaryItem::Trunc))),
653
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_is_normal",    VerusItem::UnaryOp(UnaryOpItem::IeeeFloat(IeeeFloatUnaryItem::IsNormal))),
654
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_is_subnormal", VerusItem::UnaryOp(UnaryOpItem::IeeeFloat(IeeeFloatUnaryItem::IsSubnormal))),
655
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_is_zero",      VerusItem::UnaryOp(UnaryOpItem::IeeeFloat(IeeeFloatUnaryItem::IsZero))),
656
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_is_infinite",  VerusItem::UnaryOp(UnaryOpItem::IeeeFloat(IeeeFloatUnaryItem::IsInfinite))),
657
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_is_nan",       VerusItem::UnaryOp(UnaryOpItem::IeeeFloat(IeeeFloatUnaryItem::IsNaN))),
658
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_is_negative",  VerusItem::UnaryOp(UnaryOpItem::IeeeFloat(IeeeFloatUnaryItem::IsNegative))),
659
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_is_positive",  VerusItem::UnaryOp(UnaryOpItem::IeeeFloat(IeeeFloatUnaryItem::IsPositive))),
660
4.38k
        ("verus::verus_builtin::IeeeFloat::ieee_is_positive",  VerusItem::UnaryOp(UnaryOpItem::IeeeFloat(IeeeFloatUnaryItem::IsPositive))),
661
4.38k
        ("verus::verus_builtin::IeeeFloatCast::ieee_cast",     VerusItem::UnaryOp(UnaryOpItem::IeeeFloat(IeeeFloatUnaryItem::Cast))),
662
663
4.38k
        ("verus::verus_builtin::erased_ghost_value",      VerusItem::ErasedGhostValue),
664
4.38k
        ("verus::verus_builtin::shadow_ghost_value",      VerusItem::ShadowGhostValue),
665
4.38k
        ("verus::verus_builtin::mutable_reference_tie",   VerusItem::MutableReferenceTie),
666
4.38k
        ("verus::verus_builtin::two_phase_mutable_reference_tie",   VerusItem::TwoPhaseMutableReferenceTie),
667
4.38k
        ("verus::verus_builtin::verus_erasure_get_first", VerusItem::GetFirst),
668
4.38k
        ("verus::verus_builtin::DummyCapture",            VerusItem::DummyCapture(DummyCaptureItem::Struct)),
669
4.38k
        ("verus::verus_builtin::dummy_capture_new",       VerusItem::DummyCapture(DummyCaptureItem::New)),
670
4.38k
        ("verus::verus_builtin::dummy_capture_consume",   VerusItem::DummyCapture(DummyCaptureItem::Consume)),
671
672
4.38k
        ("verus::vstd::invariant::open_atomic_invariant_begin", VerusItem::OpenInvariantBlock(OpenInvariantBlockItem::OpenAtomicInvariantBegin)),
673
4.38k
        ("verus::vstd::invariant::open_local_invariant_begin",  VerusItem::OpenInvariantBlock(OpenInvariantBlockItem::OpenLocalInvariantBegin)),
674
4.38k
        ("verus::vstd::invariant::open_invariant_end",          VerusItem::OpenInvariantBlock(OpenInvariantBlockItem::OpenInvariantEnd)),
675
676
4.38k
        ("verus::vstd::atomic::try_open_atomic_update_begin",   VerusItem::OpenAtomicUpdate(OpenAtomicUpdateItem::TryOpenAtomicUpdateBegin)),
677
4.38k
        ("verus::vstd::atomic::try_open_atomic_update_end",     VerusItem::OpenAtomicUpdate(OpenAtomicUpdateItem::TryOpenAtomicUpdateEnd)),
678
679
4.38k
        ("verus::vstd::seq::Seq::empty",       VerusItem::Vstd(VstdItem::SeqFn(vir::interpreter::SeqFn::Empty   ), Some(Arc::new("seq::Seq::empty"      .to_owned())))),
680
4.38k
        ("verus::vstd::seq::Seq::new",         VerusItem::Vstd(VstdItem::SeqFn(vir::interpreter::SeqFn::New     ), Some(Arc::new("seq::Seq::new"        .to_owned())))),
681
4.38k
        ("verus::vstd::seq::Seq::push",        VerusItem::Vstd(VstdItem::SeqFn(vir::interpreter::SeqFn::Push    ), Some(Arc::new("seq::Seq::push"       .to_owned())))),
682
4.38k
        ("verus::vstd::seq::Seq::update",      VerusItem::Vstd(VstdItem::SeqFn(vir::interpreter::SeqFn::Update  ), Some(Arc::new("seq::Seq::update"     .to_owned())))),
683
4.38k
        ("verus::vstd::seq::Seq::subrange",    VerusItem::Vstd(VstdItem::SeqFn(vir::interpreter::SeqFn::Subrange), Some(Arc::new("seq::Seq::subrange"   .to_owned())))),
684
4.38k
        ("verus::vstd::seq::Seq::add",         VerusItem::Vstd(VstdItem::SeqFn(vir::interpreter::SeqFn::Add     ), Some(Arc::new("seq::Seq::add"        .to_owned())))),
685
4.38k
        ("verus::vstd::seq::Seq::len",         VerusItem::Vstd(VstdItem::SeqFn(vir::interpreter::SeqFn::Len     ), Some(Arc::new("seq::Seq::len"        .to_owned())))),
686
4.38k
        ("verus::vstd::seq::Seq::index",       VerusItem::Vstd(VstdItem::SeqFn(vir::interpreter::SeqFn::Index   ), Some(Arc::new("seq::Seq::index"      .to_owned())))),
687
4.38k
        ("verus::vstd::seq::Seq::ext_equal",   VerusItem::Vstd(VstdItem::SeqFn(vir::interpreter::SeqFn::ExtEqual), Some(Arc::new("seq::Seq::ext_equal"  .to_owned())))),
688
4.38k
        ("verus::vstd::seq::Seq::last",        VerusItem::Vstd(VstdItem::SeqFn(vir::interpreter::SeqFn::Last    ), Some(Arc::new("seq::Seq::last"       .to_owned())))),
689
690
4.38k
        ("verus::vstd::set::Set",              VerusItem::Vstd(VstdItem::SetItem(SetItem::Type),      Some(Arc::new("set::Set".to_owned())))),
691
4.38k
        ("verus::vstd::set::Set::empty",       VerusItem::Vstd(VstdItem::SetItem(SetItem::Empty),     Some(Arc::new("set::Set::empty".to_owned())))),
692
4.38k
        ("verus::vstd::set::Set::full",        VerusItem::Vstd(VstdItem::SetItem(SetItem::Full),      Some(Arc::new("set::Set::full".to_owned())))),
693
4.38k
        ("verus::vstd::set::Set::contains",    VerusItem::Vstd(VstdItem::SetItem(SetItem::Contains),  Some(Arc::new("set::Set::contains".to_owned())))),
694
4.38k
        ("verus::vstd::set::Set::subset_of",   VerusItem::Vstd(VstdItem::SetItem(SetItem::SubsetOf),  Some(Arc::new("set::Set::subset_of".to_owned())))),
695
4.38k
        ("verus::vstd::set::Set::insert",      VerusItem::Vstd(VstdItem::SetItem(SetItem::Insert),    Some(Arc::new("set::Set::insert".to_owned())))),
696
4.38k
        ("verus::vstd::set::Set::remove",      VerusItem::Vstd(VstdItem::SetItem(SetItem::Remove),    Some(Arc::new("set::Set::remove".to_owned())))),
697
698
4.38k
        ("verus::vstd::iset::ISet",            VerusItem::Vstd(VstdItem::ISetItem(SetItem::Type),     Some(Arc::new("iset::ISet".to_owned())))),
699
4.38k
        ("verus::vstd::iset::ISet::empty",     VerusItem::Vstd(VstdItem::ISetItem(SetItem::Empty),    Some(Arc::new("iset::ISet::empty".to_owned())))),
700
4.38k
        ("verus::vstd::iset::ISet::full",      VerusItem::Vstd(VstdItem::ISetItem(SetItem::Full),     Some(Arc::new("iset::ISet::full".to_owned())))),
701
4.38k
        ("verus::vstd::iset::ISet::contains",  VerusItem::Vstd(VstdItem::ISetItem(SetItem::Contains), Some(Arc::new("iset::ISet::contains".to_owned())))),
702
4.38k
        ("verus::vstd::iset::ISet::subset_of", VerusItem::Vstd(VstdItem::ISetItem(SetItem::SubsetOf), Some(Arc::new("iset::ISet::subset_of".to_owned())))),
703
4.38k
        ("verus::vstd::iset::ISet::insert",    VerusItem::Vstd(VstdItem::ISetItem(SetItem::Insert),   Some(Arc::new("iset::ISet::insert".to_owned())))),
704
4.38k
        ("verus::vstd::iset::ISet::remove",    VerusItem::Vstd(VstdItem::ISetItem(SetItem::Remove),   Some(Arc::new("iset::ISet::remove".to_owned())))),
705
706
4.38k
        ("verus::vstd::invariant::AtomicInvariant::namespace",           VerusItem::Vstd(VstdItem::Invariant(InvariantItem::AtomicInvariantNamespace       ), Some(Arc::new("invariant::AtomicInvariant::namespace"          .to_owned())))),
707
4.38k
        ("verus::vstd::invariant::AtomicInvariant::inv",                 VerusItem::Vstd(VstdItem::Invariant(InvariantItem::AtomicInvariantInv             ), Some(Arc::new("invariant::AtomicInvariant::inv"                .to_owned())))),
708
4.38k
        ("verus::vstd::invariant::LocalInvariant::namespace",            VerusItem::Vstd(VstdItem::Invariant(InvariantItem::LocalInvariantNamespace        ), Some(Arc::new("invariant::LocalInvariant::namespace"           .to_owned())))),
709
4.38k
        ("verus::vstd::invariant::LocalInvariant::inv",                  VerusItem::Vstd(VstdItem::Invariant(InvariantItem::LocalInvariantInv              ), Some(Arc::new("invariant::LocalInvariant::inv"                 .to_owned())))),
710
4.38k
        ("verus::vstd::invariant::create_open_invariant_credit",         VerusItem::Vstd(VstdItem::Invariant(InvariantItem::CreateOpenInvariantCredit      ), Some(Arc::new("invariant::create_open_invariant_credit"        .to_owned())))),
711
4.38k
        ("verus::vstd::invariant::spend_open_invariant_credit",          VerusItem::Vstd(VstdItem::Invariant(InvariantItem::SpendOpenInvariantCredit       ), Some(Arc::new("invariant::spend_open_invariant_credit"         .to_owned())))),
712
4.38k
        ("verus::vstd::invariant::spend_open_invariant_credit_in_proof", VerusItem::Vstd(VstdItem::Invariant(InvariantItem::SpendOpenInvariantCreditInProof), Some(Arc::new("invariant::spend_open_invariant_credit_in_proof".to_owned())))),
713
4.38k
        ("verus::vstd::vstd::exec_nonstatic_call", VerusItem::Vstd(VstdItem::ExecNonstaticCall, Some(Arc::new("pervasive::exec_nonstatic_call".to_owned())))),
714
4.38k
        ("verus::vstd::vstd::proof_nonstatic_call", VerusItem::Vstd(VstdItem::ProofNonstaticCall, Some(Arc::new("pervasive::proof_nonstatic_call".to_owned())))),
715
716
4.38k
        ("verus::vstd::atomic::atomically",               VerusItem::Spec(SpecItem::Atomically)),
717
4.38k
        ("verus::vstd::atomic::pred_args",                VerusItem::Vstd(VstdItem::PredArgs,                                              Some(Arc::new("atomic::pred_args".to_owned())))),
718
4.38k
        ("verus::vstd::atomic::branch_bool",              VerusItem::Vstd(VstdItem::BranchBool,                                            Some(Arc::new("atomic::branch_bool".to_owned())))),
719
4.38k
        ("verus::vstd::atomic::AtomicUpdate::req",        VerusItem::Vstd(VstdItem::AtomicUpdate(AtomicUpdateItem::AtomicUpdateReq),       Some(Arc::new("atomic::AtomicUpdate::req".to_owned())))),
720
4.38k
        ("verus::vstd::atomic::AtomicUpdate::ens",        VerusItem::Vstd(VstdItem::AtomicUpdate(AtomicUpdateItem::AtomicUpdateEns),       Some(Arc::new("atomic::AtomicUpdate::ens".to_owned())))),
721
4.38k
        ("verus::vstd::atomic::AtomicUpdate::pred",       VerusItem::Vstd(VstdItem::AtomicUpdate(AtomicUpdateItem::AtomicUpdatePred),      Some(Arc::new("atomic::AtomicUpdate::pred".to_owned())))),
722
4.38k
        ("verus::vstd::atomic::AtomicUpdate::resolves",   VerusItem::Vstd(VstdItem::AtomicUpdate(AtomicUpdateItem::AtomicUpdateResolves),  Some(Arc::new("atomic::AtomicUpdate::resolves".to_owned())))),
723
4.38k
        ("verus::vstd::atomic::AtomicUpdate::input",      VerusItem::Vstd(VstdItem::AtomicUpdate(AtomicUpdateItem::AtomicUpdateInput),     Some(Arc::new("atomic::AtomicUpdate::input".to_owned())))),
724
4.38k
        ("verus::vstd::atomic::AtomicUpdate::output",     VerusItem::Vstd(VstdItem::AtomicUpdate(AtomicUpdateItem::AtomicUpdateOutput),    Some(Arc::new("atomic::AtomicUpdate::output".to_owned())))),
725
4.38k
        ("verus::vstd::atomic::AtomicUpdate::outer_mask", VerusItem::Vstd(VstdItem::AtomicUpdate(AtomicUpdateItem::AtomicUpdateOuterMask), Some(Arc::new("atomic::AtomicUpdate::outer_mask".to_owned())))),
726
4.38k
        ("verus::vstd::atomic::AtomicUpdate::inner_mask", VerusItem::Vstd(VstdItem::AtomicUpdate(AtomicUpdateItem::AtomicUpdateInnerMask), Some(Arc::new("atomic::AtomicUpdate::inner_mask".to_owned())))),
727
728
4.38k
        ("verus::vstd::std_specs::vec::vec_index", VerusItem::Vstd(VstdItem::VecIndex, Some(Arc::new("std_specs::vec::vec_index".to_owned())))),
729
4.38k
        ("verus::vstd::std_specs::vec::vec_index_mut", VerusItem::Vstd(VstdItem::VecIndexMut, Some(Arc::new("std_specs::vec::vec_index_mut".to_owned())))),
730
4.38k
        ("verus::vstd::array::array_index_get", VerusItem::Vstd(VstdItem::ArrayIndexGet, Some(Arc::new("array::array_index_get".to_owned())))),
731
4.38k
        ("verus::vstd::array::array_as_slice", VerusItem::Vstd(VstdItem::ArrayAsSlice, Some(Arc::new("array::array_as_slice".to_owned())))),
732
4.38k
        ("verus::vstd::array::array_fill_for_copy_types", VerusItem::Vstd(VstdItem::ArrayFillForCopyTypes, Some(Arc::new("array::array_fill_for_copy_types".to_owned())))),
733
4.38k
        ("verus::vstd::array::ref_mut_array_unsizing_coercion", VerusItem::Vstd(VstdItem::RefMutArrayUnsizingCoercion, Some(Arc::new("array::ref_mut_array_unsizing_coercion".to_owned())))),
734
4.38k
        ("verus::vstd::array::spec_array_update", VerusItem::Vstd(VstdItem::SpecArrayUpdate, Some(Arc::new("array::spec_array_update".to_owned())))),
735
4.38k
        ("verus::vstd::slice::slice_index_get", VerusItem::Vstd(VstdItem::SliceIndexGet, Some(Arc::new("slice::slice_index_get".to_owned())))),
736
4.38k
        ("verus::vstd::slice::spec_slice_update", VerusItem::Vstd(VstdItem::SpecSliceUpdate, Some(Arc::new("slice::spec_slice_update".to_owned())))),
737
4.38k
        ("verus::vstd::slice::spec_slice_len", VerusItem::Vstd(VstdItem::SpecSliceLen, Some(Arc::new("slice::spec_slice_len".to_owned())))),
738
4.38k
        ("verus::vstd::slice::spec_slice_index", VerusItem::Vstd(VstdItem::SpecSliceIndex, Some(Arc::new("slice::spec_slice_index".to_owned())))),
739
4.38k
        ("verus::vstd::raw_ptr::cast_ptr_to_thin_ptr", VerusItem::Vstd(VstdItem::CastPtrToThinPtr, Some(Arc::new("raw_ptr::cast_ptr_to_thin_ptr".to_owned())))),
740
4.38k
        ("verus::vstd::raw_ptr::cast_array_ptr_to_slice_ptr", VerusItem::Vstd(VstdItem::CastArrayPtrToSlicePtr, Some(Arc::new("raw_ptr::cast_array_ptr_to_slice_ptr".to_owned())))),
741
4.38k
        ("verus::vstd::raw_ptr::cast_slice_ptr_to_slice_ptr", VerusItem::Vstd(VstdItem::CastSlicePtrToSlicePtr, Some(Arc::new("raw_ptr::cast_slice_ptr_to_slice_ptr".to_owned())))),
742
4.38k
        ("verus::vstd::raw_ptr::cast_slice_ptr_to_str_ptr", VerusItem::Vstd(VstdItem::CastSlicePtrToStrPtr, Some(Arc::new("raw_ptr::cast_slice_ptr_to_str_ptr".to_owned())))),
743
4.38k
        ("verus::vstd::raw_ptr::cast_str_ptr_to_slice_ptr", VerusItem::Vstd(VstdItem::CastStrPtrToSlicePtr, Some(Arc::new("raw_ptr::cast_str_ptr_to_slice_ptr".to_owned())))),
744
4.38k
        ("verus::vstd::raw_ptr::cast_ptr_to_usize", VerusItem::Vstd(VstdItem::CastPtrToUsize, Some(Arc::new("raw_ptr::cast_ptr_to_usize".to_owned())))),
745
4.38k
        ("verus::vstd::raw_ptr::SharedReference", VerusItem::Vstd(VstdItem::SharedReference, Some(Arc::new("raw_ptr::SharedReference".to_owned())))),
746
4.38k
        ("verus::vstd::float::float_cast", VerusItem::Vstd(VstdItem::FloatCast, Some(Arc::new("float::float_cast".to_owned())))),
747
            // SeqFn(vir::interpreter::SeqFn::Last    ))),
748
749
4.38k
        ("verus::vstd::std_specs::fmt::rt::Argument", VerusItem::RustPrivate(RustPrivate::Path(vir::path!(CrateId::Core => "fmt", "rt", "Argument")))),
750
4.38k
        ("verus::vstd::std_specs::fmt::rt::Argument::new_binary", VerusItem::RustPrivate(RustPrivate::FormatArgumentFn(Arc::new("new_binary".to_owned())))),
751
4.38k
        ("verus::vstd::std_specs::fmt::rt::Argument::new_debug", VerusItem::RustPrivate(RustPrivate::FormatArgumentFn(Arc::new("new_debug".to_owned())))),
752
4.38k
        ("verus::vstd::std_specs::fmt::rt::Argument::new_debug_noop", VerusItem::RustPrivate(RustPrivate::FormatArgumentFn(Arc::new("new_debug_noop".to_owned())))),
753
4.38k
        ("verus::vstd::std_specs::fmt::rt::Argument::new_display", VerusItem::RustPrivate(RustPrivate::FormatArgumentFn(Arc::new("new_display".to_owned())))),
754
4.38k
        ("verus::vstd::std_specs::fmt::rt::Argument::new_lower_exp", VerusItem::RustPrivate(RustPrivate::FormatArgumentFn(Arc::new("new_lower_exp".to_owned())))),
755
4.38k
        ("verus::vstd::std_specs::fmt::rt::Argument::new_lower_hex", VerusItem::RustPrivate(RustPrivate::FormatArgumentFn(Arc::new("new_lower_hex".to_owned())))),
756
4.38k
        ("verus::vstd::std_specs::fmt::rt::Argument::new_octal", VerusItem::RustPrivate(RustPrivate::FormatArgumentFn(Arc::new("new_octal".to_owned())))),
757
4.38k
        ("verus::vstd::std_specs::fmt::rt::Argument::new_pointer", VerusItem::RustPrivate(RustPrivate::FormatArgumentFn(Arc::new("new_pointer".to_owned())))),
758
4.38k
        ("verus::vstd::std_specs::fmt::rt::Argument::new_upper_exp", VerusItem::RustPrivate(RustPrivate::FormatArgumentFn(Arc::new("new_upper_exp".to_owned())))),
759
4.38k
        ("verus::vstd::std_specs::fmt::rt::Argument::new_upper_hex", VerusItem::RustPrivate(RustPrivate::FormatArgumentFn(Arc::new("new_upper_hex".to_owned())))),
760
4.38k
        ("verus::vstd::std_specs::fmt::rt::Argument::from_usize", VerusItem::RustPrivate(RustPrivate::FormatArgumentFn(Arc::new("from_usize".to_owned())))),
761
4.38k
        ("verus::vstd::std_specs::fmt::Arguments::new", VerusItem::RustPrivate(RustPrivate::FormatArgumentsFn(Arc::new("new".to_owned())))),
762
763
4.38k
        ("verus::verus_builtin::Structural",              VerusItem::Marker(MarkerItem::Structural)),
764
765
4.38k
        ("verus::verus_builtin::int",                     VerusItem::BuiltinType(BuiltinTypeItem::Int)),
766
4.38k
        ("verus::verus_builtin::nat",                     VerusItem::BuiltinType(BuiltinTypeItem::Nat)),
767
4.38k
        ("verus::verus_builtin::real",                    VerusItem::BuiltinType(BuiltinTypeItem::Real)),
768
4.38k
        ("verus::verus_builtin::FnSpec",                  VerusItem::BuiltinType(BuiltinTypeItem::FnSpec)),
769
4.38k
        ("verus::verus_builtin::Ghost",                   VerusItem::BuiltinType(BuiltinTypeItem::Ghost)),
770
4.38k
        ("verus::verus_builtin::Tracked",                 VerusItem::BuiltinType(BuiltinTypeItem::Tracked)),
771
772
4.38k
        ("verus::verus_builtin::Integer",                 VerusItem::BuiltinTrait(BuiltinTraitItem::Integer)),
773
4.38k
        ("verus::verus_builtin::Chainable",               VerusItem::BuiltinTrait(BuiltinTraitItem::Chainable)),
774
4.38k
        ("verus::verus_builtin::private::Sealed",         VerusItem::BuiltinTrait(BuiltinTraitItem::Sealed)),
775
776
4.38k
        ("verus::verus_builtin::call_requires", VerusItem::BuiltinFunction(BuiltinFunctionItem::CallRequires)),
777
4.38k
        ("verus::verus_builtin::call_ensures",  VerusItem::BuiltinFunction(BuiltinFunctionItem::CallEnsures)),
778
4.38k
        ("verus::verus_builtin::constrain_type",          VerusItem::BuiltinFunction(BuiltinFunctionItem::ConstrainType)),
779
4.38k
        ("verus::verus_builtin::get_future_output_type",          VerusItem::BuiltinFunction(BuiltinFunctionItem::GetFutureOutputType)),
780
781
4.38k
        ("verus::verus_builtin::global_size_of", VerusItem::Global(GlobalItem::SizeOf)),
782
783
4.38k
        ("verus::verus_builtin::FnProof",          VerusItem::External(ExternalItem::FnProof)),
784
4.38k
        ("verus::verus_builtin::FOpts",   VerusItem::External(ExternalItem::FOpts)),
785
4.38k
        ("verus::verus_builtin::ProofFnReqEnsDef::req", VerusItem::External(ExternalItem::FnProofReq)),
786
4.38k
        ("verus::verus_builtin::ProofFnReqEnsDef::ens", VerusItem::External(ExternalItem::FnProofEns)),
787
4.38k
        ("verus::verus_builtin::ProofFnOnce",      VerusItem::External(ExternalItem::ProofFnOnce)),
788
4.38k
        ("verus::verus_builtin::ProofFnMut",       VerusItem::External(ExternalItem::ProofFnMut)),
789
4.38k
        ("verus::verus_builtin::ProofFn",          VerusItem::External(ExternalItem::ProofFn)),
790
4.38k
        ("verus::verus_builtin::Trk",              VerusItem::External(ExternalItem::Trk)),
791
4.38k
        ("verus::verus_builtin::RqEn",             VerusItem::External(ExternalItem::RqEn)),
792
4.38k
        ("verus::verus_builtin::has_resolved",     VerusItem::HasResolved),
793
4.38k
        ("verus::verus_builtin::has_resolved_unsized",     VerusItem::HasResolvedUnsized),
794
4.38k
        ("verus::verus_builtin::mut_ref_current",  VerusItem::MutRefCurrent),
795
4.38k
        ("verus::verus_builtin::mut_ref_future",   VerusItem::MutRefFuture),
796
4.38k
        ("verus::verus_builtin::final_",           VerusItem::Final),
797
4.38k
        ("verus::verus_builtin::after_borrow",     VerusItem::AfterBorrow),
798
4.38k
        ("verus::verus_builtin::mut_ref_tracked",  VerusItem::MutRefTracked),
799
    ]
800
4.38k
}
801
802
pub(crate) struct VerusItems {
803
    pub(crate) id_to_name: HashMap<DefId, VerusItem>,
804
    pub(crate) name_to_id: HashMap<VerusItem, DefId>,
805
    // RustPrivate items also map to an underlying Rust DefId (in addition to the Verus DefId):
806
    pub(crate) name_to_rust_private_id: HashMap<VerusItem, DefId>,
807
}
808
809
4.38k
pub(crate) fn from_diagnostic_items(tcx: TyCtxt) -> VerusItems {
810
4.38k
    let diagnostic_items = &tcx.all_diagnostic_items(());
811
4.38k
    let verus_item_map: HashMap<&str, VerusItem> = verus_items_map().into_iter().collect();
812
4.38k
    let diagnostic_name_to_id = &diagnostic_items.name_to_id;
813
4.38k
    let mut id_to_name: HashMap<DefId, VerusItem> = HashMap::new();
814
4.38k
    let mut name_to_id: HashMap<VerusItem, DefId> = HashMap::new();
815
4.38k
    let mut name_to_rust_private_id: HashMap<VerusItem, DefId> = HashMap::new();
816
2.96M
    for (name, id) in diagnostic_name_to_id {
817
2.96M
        let name = name.as_str();
818
2.96M
        if name.starts_with("verus::verus_builtin") || name.starts_with("verus::vstd") {
819
913k
            let Some(item) = verus_item_map.get(name) else {
820
0
                panic!("unexpected verus diagnostic item {}", name);
821
            };
822
913k
            id_to_name.insert(id.clone(), item.clone());
823
913k
            name_to_id.insert(item.clone(), id.clone());
824
913k
            let lang_item_name = match item {
825
18.9k
                VerusItem::RustPrivate(RustPrivate::FormatArgumentFn(name)) => {
826
18.9k
                    Some((rustc_hir::LangItem::FormatArgument, name.clone()))
827
                }
828
1.72k
                VerusItem::RustPrivate(RustPrivate::FormatArgumentsFn(name)) => {
829
1.72k
                    Some((rustc_hir::LangItem::FormatArguments, name.clone()))
830
                }
831
893k
                _ => None,
832
            };
833
913k
            if let Some((lang_item, name)) = lang_item_name {
834
20.6k
                let lang_id = tcx.require_lang_item(lang_item, rustc_span::DUMMY_SP);
835
20.6k
                let mut fn_id = None;
836
24.0k
                for imp in tcx.inherent_impls(lang_id) {
837
24.0k
                    let symbol = rustc_span::Symbol::intern(&*name);
838
24.0k
                    for item in tcx.associated_items(*imp).filter_by_name_unhygienic(symbol) {
839
20.6k
                        assert!(fn_id.is_none());
840
20.6k
                        fn_id = Some(item.def_id);
841
                    }
842
                }
843
20.6k
                let Some(fn_id) = fn_id else {
844
0
                    panic!("could find Rust library function {:?} {}", lang_id, name);
845
                };
846
20.6k
                name_to_rust_private_id.insert(item.clone(), fn_id);
847
893k
            }
848
2.05M
        }
849
    }
850
4.38k
    VerusItems { id_to_name, name_to_id, name_to_rust_private_id }
851
4.38k
}
852
853
#[derive(PartialEq, Eq, Debug, Clone, Copy)]
854
pub(crate) enum RustIntType {
855
    U8,
856
    U16,
857
    U32,
858
    U64,
859
    U128,
860
    USize,
861
862
    I8,
863
    I16,
864
    I32,
865
    I64,
866
    I128,
867
    ISize,
868
}
869
870
#[derive(PartialEq, Eq, Debug, Clone, Copy)]
871
pub(crate) enum RustIntConst {
872
    Min,
873
    Max,
874
    Bits,
875
}
876
877
#[derive(PartialEq, Eq, Debug, Clone, Copy)]
878
pub(crate) struct RustIntIntrinsicItem(pub(crate) RustIntType, pub(crate) RustIntConst);
879
880
#[derive(PartialEq, Eq, Debug, Clone, Copy)]
881
pub(crate) enum RustItem {
882
    Panic,
883
    Box,
884
    Fn,
885
    FnOnce,
886
    FnMut,
887
    Drop,
888
    Sized,
889
    Copy,
890
    Send,
891
    Sync,
892
    Any,
893
    Clone,
894
    StructuralPartialEq,
895
    Eq,
896
    PartialEq,
897
    Ord,
898
    PartialOrd,
899
    Hash,
900
    Default,
901
    Debug,
902
    Rc,
903
    Arc,
904
    BoxNew,
905
    ArcNew,
906
    RcNew,
907
    CloneClone,
908
    CloneFrom,
909
    IntIntrinsic(RustIntIntrinsicItem),
910
    TryTraitBranch,
911
    ResidualTraitFromResidual,
912
    IntoIterFn,
913
    ManuallyDrop,
914
    PhantomData,
915
    Destruct,
916
    SliceSealed,
917
    Vec,
918
    Thin,
919
}
920
921
4.81M
pub(crate) fn get_rust_item<'tcx>(tcx: TyCtxt<'tcx>, def_id: DefId) -> Option<RustItem> {
922
    // if tcx.parent(def_id) == partial_eq {
923
4.81M
    if tcx.lang_items().panic_fn() == Some(def_id) {
924
13.6k
        return Some(RustItem::Panic);
925
4.79M
    }
926
4.79M
    if tcx.lang_items().owned_box() == Some(def_id) {
927
11.3k
        return Some(RustItem::Box);
928
4.78M
    }
929
4.78M
    if tcx.lang_items().fn_trait() == Some(def_id) {
930
1
        return Some(RustItem::Fn);
931
4.78M
    }
932
4.78M
    if tcx.lang_items().fn_mut_trait() == Some(def_id) {
933
217
        return Some(RustItem::FnMut);
934
4.78M
    }
935
4.78M
    if tcx.lang_items().fn_once_trait() == Some(def_id) {
936
435
        return Some(RustItem::FnOnce);
937
4.78M
    }
938
4.78M
    if tcx.lang_items().drop_trait() == Some(def_id) {
939
8
        return Some(RustItem::Drop);
940
4.78M
    }
941
4.78M
    if tcx.lang_items().structural_peq_trait() == Some(def_id) {
942
728
        return Some(RustItem::StructuralPartialEq);
943
4.78M
    }
944
4.78M
    if tcx.lang_items().eq_trait() == Some(def_id) {
945
842
        return Some(RustItem::PartialEq);
946
4.78M
    }
947
4.78M
    if tcx.lang_items().branch_fn() == Some(def_id) {
948
65
        return Some(RustItem::TryTraitBranch);
949
4.78M
    }
950
4.78M
    if tcx.lang_items().from_residual_fn() == Some(def_id) {
951
65
        return Some(RustItem::ResidualTraitFromResidual);
952
4.78M
    }
953
4.78M
    if tcx.lang_items().into_iter_fn() == Some(def_id) {
954
230
        return Some(RustItem::IntoIterFn);
955
4.78M
    }
956
4.78M
    if tcx.lang_items().manually_drop() == Some(def_id) {
957
1.82k
        return Some(RustItem::ManuallyDrop);
958
4.78M
    }
959
4.78M
    if tcx.lang_items().phantom_data() == Some(def_id) {
960
4.35k
        return Some(RustItem::PhantomData);
961
4.77M
    }
962
4.77M
    if tcx.lang_items().destruct_trait() == Some(def_id) {
963
542
        return Some(RustItem::Destruct);
964
4.77M
    }
965
4.77M
    if tcx.lang_items().partial_ord_trait() == Some(def_id) {
966
1.08k
        return Some(RustItem::PartialOrd);
967
4.77M
    }
968
4.77M
    let rust_path = def_id_to_stable_rust_path(tcx, def_id);
969
4.77M
    let rust_path = rust_path.as_ref().map(|x| x.as_str());
970
4.77M
    get_rust_item_str(rust_path)
971
4.81M
}
972
973
#[allow(dead_code)]
974
0
pub(crate) fn get_rust_item_path(rust_path: &vir::ast::Path) -> Option<RustItem> {
975
0
    get_rust_item_str(Some(&vir::ast_util::path_as_friendly_rust_name(rust_path)))
976
0
}
977
978
4.77M
pub(crate) fn get_rust_item_str(rust_path: Option<&str>) -> Option<RustItem> {
979
    // We could use rust's diagnostic_items for these, but they are only defined when cfg(not(test))
980
    // and they may get changed without us noticing, so we are using paths instead
981
4.77M
    if rust_path == Some("core::cmp::Eq") {
982
1.40k
        return Some(RustItem::Eq);
983
4.77M
    }
984
4.77M
    if rust_path == Some("alloc::rc::Rc") {
985
3.48k
        return Some(RustItem::Rc);
986
4.77M
    }
987
4.77M
    if rust_path == Some("alloc::sync::Arc") {
988
3.08k
        return Some(RustItem::Arc);
989
4.76M
    }
990
991
4.76M
    if rust_path == Some("alloc::boxed::Box::new") {
992
446
        return Some(RustItem::BoxNew);
993
4.76M
    }
994
4.76M
    if rust_path == Some("alloc::sync::Arc::new") {
995
40
        return Some(RustItem::ArcNew);
996
4.76M
    }
997
4.76M
    if rust_path == Some("alloc::rc::Rc::new") {
998
36
        return Some(RustItem::RcNew);
999
4.76M
    }
1000
1001
4.76M
    if rust_path == Some("core::marker::Sized") {
1002
29.2k
        return Some(RustItem::Sized);
1003
4.73M
    }
1004
4.73M
    if rust_path == Some("core::marker::Send") {
1005
58
        return Some(RustItem::Send);
1006
4.73M
    }
1007
4.73M
    if rust_path == Some("core::marker::Sync") {
1008
28
        return Some(RustItem::Sync);
1009
4.73M
    }
1010
4.73M
    if rust_path == Some("core::marker::Copy") {
1011
641
        return Some(RustItem::Copy);
1012
4.73M
    }
1013
4.73M
    if rust_path == Some("core::clone::Clone") {
1014
2.95k
        return Some(RustItem::Clone);
1015
4.73M
    }
1016
4.73M
    if rust_path == Some("core::clone::Clone::clone") {
1017
875
        return Some(RustItem::CloneClone);
1018
4.73M
    }
1019
4.73M
    if rust_path == Some("core::clone::Clone::clone_from") {
1020
0
        return Some(RustItem::CloneFrom);
1021
4.73M
    }
1022
1023
4.73M
    if rust_path == Some("core::slice::index::private_slice_index::Sealed") {
1024
81
        return Some(RustItem::SliceSealed);
1025
4.73M
    }
1026
4.73M
    if rust_path == Some("core::fmt::Debug") {
1027
325
        return Some(RustItem::Debug);
1028
4.73M
    }
1029
4.73M
    if rust_path == Some("core::hash::Hash") {
1030
957
        return Some(RustItem::Hash);
1031
4.73M
    }
1032
4.73M
    if rust_path == Some("core::default::Default") {
1033
586
        return Some(RustItem::Default);
1034
4.73M
    }
1035
4.73M
    if rust_path == Some("core::cmp::Ord") {
1036
842
        return Some(RustItem::Ord);
1037
4.73M
    }
1038
4.73M
    if rust_path == Some("alloc::vec::Vec") {
1039
25.2k
        return Some(RustItem::Vec);
1040
4.70M
    }
1041
4.70M
    if rust_path == Some("core::ptr::metadata::Thin") {
1042
2
        return Some(RustItem::Thin);
1043
4.70M
    }
1044
4.70M
    if rust_path == Some("core::any::Any") {
1045
0
        return Some(RustItem::Any);
1046
4.70M
    }
1047
1048
4.70M
    if let Some(rust_path) = rust_path {
1049
        static NUM_RE: std::sync::OnceLock<Regex> = std::sync::OnceLock::new();
1050
4.70M
        let num_re =
1051
4.70M
            NUM_RE.get_or_init(|| Regex::new(r"^([A-Za-z0-9_]+)::(MIN|MAX|BITS)").unwrap());
1052
4.70M
        if let Some(captures) = num_re.captures(rust_path) {
1053
21.4k
            let ty_name = captures.get(1).expect("invalid int intrinsic regex");
1054
21.4k
            let const_name = captures.get(2).expect("invalid int intrinsic regex");
1055
            use RustIntType::*;
1056
21.4k
            let ty = match ty_name.as_str() {
1057
21.4k
                "u8" => Some(U8),
1058
19.5k
                "u16" => Some(U16),
1059
17.7k
                "u32" => Some(U32),
1060
15.9k
                "u64" => Some(U64),
1061
14.1k
                "u128" => Some(U128),
1062
12.7k
                "usize" => Some(USize),
1063
1064
9.31k
                "i8" => Some(I8),
1065
7.53k
                "i16" => Some(I16),
1066
5.87k
                "i32" => Some(I32),
1067
4.26k
                "i64" => Some(I64),
1068
2.81k
                "i128" => Some(I128),
1069
1.63k
                "isize" => Some(ISize),
1070
1071
0
                _ => None,
1072
            };
1073
21.4k
            return ty.map(|ty| {
1074
21.4k
                let const_ = match const_name.as_str() {
1075
21.4k
                    "MIN" => RustIntConst::Min,
1076
13.2k
                    "MAX" => RustIntConst::Max,
1077
2.97k
                    "BITS" => RustIntConst::Bits,
1078
1079
0
                    _ => panic!("unexpected int const"),
1080
                };
1081
21.4k
                RustItem::IntIntrinsic(RustIntIntrinsicItem(ty, const_))
1082
21.4k
            });
1083
4.68M
        }
1084
1.68k
    }
1085
1086
4.68M
    None
1087
4.77M
}