luaur_ast/methods/
printer_visualize_else_if_expr.rs1use crate::records::ast_expr_if_else::AstExprIfElse;
2use crate::records::cst_expr_if_else::CstExprIfElse;
3use crate::records::printer::Printer;
4
5impl<'a> Printer<'a> {
6 pub fn visualize_else_if_expr(&mut self, elseif: &mut AstExprIfElse) {
7 let cst_node = self.lookup_cst_node::<CstExprIfElse>(
8 elseif as *mut AstExprIfElse as *mut crate::records::ast_node::AstNode,
9 );
10
11 self.visualize_ast_expr(unsafe { &mut *elseif.condition });
12
13 if !cst_node.is_null() {
14 unsafe {
15 self.maybe_advance_and_write(&(*cst_node).then_position, "then", false);
16 }
17 } else {
18 self.writer.keyword("then");
19 }
20
21 self.visualize_ast_expr(unsafe { &mut *elseif.true_expr });
22
23 if elseif.has_else {
24 if !cst_node.is_null() {
25 unsafe { self.advance(&(*cst_node).else_position) };
26 }
27
28 let else_expr = unsafe { elseif.false_expr as *mut AstExprIfElse };
29 if !else_expr.is_null() {
30 let elseifelseif = unsafe {
31 crate::rtti::ast_node_as::<AstExprIfElse>(
32 else_expr as *mut crate::records::ast_node::AstNode,
33 )
34 };
35 if !elseifelseif.is_null()
36 && (cst_node.is_null() || unsafe { (*cst_node).is_else_if })
37 {
38 self.writer.keyword("elseif");
39 self.visualize_else_if_expr(unsafe { &mut *elseifelseif });
40 return;
41 }
42 }
43
44 self.writer.keyword("else");
45 self.visualize_ast_expr(unsafe { &mut *elseif.false_expr });
46 }
47 }
48}