sbpf_assembler/
debuginfo.rs1use 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}