luaur_ast/methods/
printer_visualize_block_pretty_printer.rs1use 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}