Skip to main content

luaur_ast/methods/
printer_visualize_block_pretty_printer.rs

1use crate::records::ast_stat_block::AstStatBlock;
2use crate::records::printer::Printer;
3
4pub trait IntoAstStatBlockMut {
5    unsafe fn into_ast_stat_block_mut(self) -> *mut AstStatBlock;
6}
7
8impl IntoAstStatBlockMut for *mut AstStatBlock {
9    unsafe fn into_ast_stat_block_mut(self) -> *mut AstStatBlock {
10        self
11    }
12}
13
14impl IntoAstStatBlockMut for &mut AstStatBlock {
15    unsafe fn into_ast_stat_block_mut(self) -> *mut AstStatBlock {
16        self
17    }
18}
19
20impl<'a> Printer<'a> {
21    pub fn visualize_block_ast_stat_block<B: IntoAstStatBlockMut>(&mut self, block: B) {
22        let block = unsafe { &mut *block.into_ast_stat_block_mut() };
23        for i in 0..block.body.size {
24            let stat = unsafe { *block.body.data.add(i) };
25            self.visualize_ast_stat(unsafe { &mut *stat });
26        }
27        self.advance(&block.base.base.location.end);
28    }
29}
30
31#[no_mangle]
32pub extern "C" fn printer_visualize_block_ast_stat_block(
33    this: *mut Printer,
34    block: *mut AstStatBlock,
35) {
36    unsafe {
37        (*this).visualize_block_ast_stat_block(&mut *block);
38    }
39}