1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
use crate::{libraries::Library, ExternalFuncAdd, Unit};

pub struct PrintLib;

impl Library for PrintLib {
    fn add_to_unit(&self, unit: &mut Unit) {
        unit.push_script(include_str!("print.cxc")).unwrap();
        let string = unit.comp_data.get_by_name(&"String".into()).unwrap().get_ref();

        unit.add_rust_func_explicit(
            "external_print_string",
            external_print_string as *const usize,
            ExternalFuncAdd {
                arg_types: vec![string.get_ref()],
                ..ExternalFuncAdd::empty()
            },
        );

        unit.add_rust_func_explicit(
            "panic",
            panic as *const usize,
            ExternalFuncAdd {
                arg_types: vec![string.get_ref()],
                ..ExternalFuncAdd::empty()
            },
        );
    }
}

fn external_print_string(string: &String) { println!("{string}") }
fn panic(string: &String) { panic!("{string}") }