use crate::runtime::{Object, ObjectPtr, String as TString};
use tvm_macros::Object;
#[repr(C)]
#[derive(Object, Debug)]
#[type_key = "SourceName"]
#[ref_name = "SourceName"]
pub struct SourceNameNode {
pub base: Object,
pub name: TString,
}
#[repr(C)]
#[derive(Object, Debug)]
#[type_key = "Span"]
#[ref_name = "Span"]
pub struct SpanNode {
pub base: Object,
pub source_name: SourceName,
pub line: i32,
pub column: i32,
pub end_line: i32,
pub end_column: i32,
}
impl Span {
pub fn new(
source_name: SourceName,
line: i32,
end_line: i32,
column: i32,
end_column: i32,
) -> Span {
let span_node = SpanNode {
base: Object::base::<SpanNode>(),
source_name,
line,
end_line,
column,
end_column,
};
Span(Some(ObjectPtr::new(span_node)))
}
}