Skip to main content

luaur_ast/methods/
printer_visualize_else_if.rs

1use crate::records::ast_stat_if::AstStatIf;
2use crate::records::printer::Printer;
3
4impl<'a> Printer<'a> {
5    pub fn visualize_else_if(&mut self, elseif: &mut AstStatIf) {
6        unsafe { self.visualize_ast_expr(&mut *elseif.condition) };
7
8        if let Some(ref loc) = elseif.then_location {
9            self.advance(&loc.begin);
10        }
11
12        self.writer.keyword("then");
13
14        unsafe { self.visualize_block_ast_stat_block(&mut *elseif.thenbody) };
15
16        if elseif.elsebody.is_null() {
17            self.advance(unsafe { &(*elseif.thenbody).base.base.location.end });
18            self.writer.keyword("end");
19        } else if let Some(elseifelseif) = unsafe {
20            crate::rtti::ast_node_as::<AstStatIf>(
21                elseif.elsebody as *mut crate::records::ast_node::AstNode,
22            )
23            .as_mut()
24        } {
25            if let Some(ref loc) = elseif.else_location {
26                self.advance(&loc.begin);
27            }
28            self.writer.keyword("elseif");
29            unsafe { self.visualize_else_if(elseifelseif) };
30        } else {
31            if let Some(ref loc) = elseif.else_location {
32                self.advance(&loc.begin);
33            }
34            self.writer.keyword("else");
35
36            unsafe { self.visualize_block_ast_stat(&mut *elseif.elsebody) };
37            self.advance(unsafe { &(*elseif.elsebody).base.location.end });
38            self.writer.keyword("end");
39        }
40    }
41}