hax_rust_engine/ast/
span.rs1use hax_rust_engine_macros::*;
4
5fn fresh_id() -> usize {
7 use std::sync::atomic::{AtomicUsize, Ordering};
8 static CURRENT_ID: AtomicUsize = AtomicUsize::new(0);
9 CURRENT_ID.fetch_add(1, Ordering::Relaxed)
10}
11
12#[derive_group_for_ast]
14pub struct OwnerId(usize);
15
16#[derive_group_for_ast]
18pub struct Span {
19 pub data: Vec<hax_frontend_exporter::Span>,
22 id: usize,
27 owner_hint: Option<OwnerId>,
31}
32
33impl Span {
34 pub fn dummy() -> Self {
36 let lo: hax_frontend_exporter::Loc = hax_frontend_exporter::Loc { line: 0, col: 0 };
37 let hi = lo.clone();
38 Span {
39 data: vec![hax_frontend_exporter::Span {
40 lo,
41 hi,
42 filename: hax_frontend_exporter::FileName::Custom("dumny".into()),
43 rust_span_data: None,
44 }],
45 id: 0,
46 owner_hint: None,
47 }
48 }
49}
50
51impl From<hax_frontend_exporter::Span> for Span {
52 fn from(span: hax_frontend_exporter::Span) -> Self {
53 Self {
54 data: vec![span],
55 id: fresh_id(),
56 owner_hint: None, }
58 }
59}
60
61impl From<&hax_frontend_exporter::Span> for Span {
62 fn from(span: &hax_frontend_exporter::Span) -> Self {
63 span.clone().into()
64 }
65}