sbpf_assembler/
debuginfo.rs

1use std::ops::Range;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub enum RegisterType {
5    Int,
6    Addr,
7    Null,
8}
9
10impl RegisterType {
11    pub fn to_string(&self) -> &'static str {
12        match self {
13            RegisterType::Int => "int",
14            RegisterType::Addr => "addr",
15            RegisterType::Null => "null",
16        }
17    }
18}
19
20#[derive(Debug, Clone)]
21pub struct RegisterHint {
22    pub register: usize,
23    pub register_type: RegisterType,
24}
25
26impl Default for RegisterHint {
27    fn default() -> Self {
28        Self {
29            register: 0,
30            register_type: RegisterType::Null,
31        }
32    }
33}
34
35#[derive(Debug, Clone)]
36pub struct DebugInfo {
37    pub code_span: Range<usize>,
38    pub register_hint: RegisterHint,
39}
40
41impl DebugInfo {
42    pub fn new(code_span: Range<usize>) -> Self {
43        Self {
44            code_span,
45            register_hint: RegisterHint::default(),
46        }
47    }
48}
49
50#[cfg(test)]
51mod tests {
52    use super::*;
53
54    #[test]
55    fn test_register_type_to_string() {
56        assert_eq!(RegisterType::Int.to_string(), "int");
57        assert_eq!(RegisterType::Addr.to_string(), "addr");
58        assert_eq!(RegisterType::Null.to_string(), "null");
59    }
60
61    #[test]
62    fn test_register_hint_default() {
63        let hint = RegisterHint::default();
64        assert_eq!(hint.register, 0);
65        assert_eq!(hint.register_type, RegisterType::Null);
66    }
67
68    #[test]
69    fn test_debug_info_new() {
70        let debug_info = DebugInfo::new(10..20);
71        assert_eq!(debug_info.code_span, 10..20);
72        assert_eq!(debug_info.register_hint.register, 0);
73        assert_eq!(debug_info.register_hint.register_type, RegisterType::Null);
74    }
75
76    #[test]
77    fn test_register_hint_custom() {
78        let hint = RegisterHint {
79            register: 5,
80            register_type: RegisterType::Addr,
81        };
82        assert_eq!(hint.register, 5);
83        assert_eq!(hint.register_type, RegisterType::Addr);
84    }
85}