use hax_rust_engine_macros::*;
fn fresh_id() -> usize {
use std::sync::atomic::{AtomicUsize, Ordering};
static CURRENT_ID: AtomicUsize = AtomicUsize::new(0);
CURRENT_ID.fetch_add(1, Ordering::Relaxed)
}
#[derive_group_for_ast]
pub struct OwnerId(usize);
#[derive_group_for_ast]
pub struct Span {
pub data: Vec<hax_frontend_exporter::Span>,
id: usize,
owner_hint: Option<OwnerId>,
}
impl Span {
pub fn dummy() -> Self {
let lo: hax_frontend_exporter::Loc = hax_frontend_exporter::Loc { line: 0, col: 0 };
let hi = lo.clone();
Span {
data: vec![hax_frontend_exporter::Span {
lo,
hi,
filename: hax_frontend_exporter::FileName::Custom("dumny".into()),
rust_span_data: None,
}],
id: 0,
owner_hint: None,
}
}
}
impl From<hax_frontend_exporter::Span> for Span {
fn from(span: hax_frontend_exporter::Span) -> Self {
Self {
data: vec![span],
id: fresh_id(),
owner_hint: None, }
}
}
impl From<&hax_frontend_exporter::Span> for Span {
fn from(span: &hax_frontend_exporter::Span) -> Self {
span.clone().into()
}
}