Skip to main content

luaur_ast/methods/
ast_expr_function_visit.rs

1use crate::records::ast_expr_function::AstExprFunction;
2use crate::records::ast_visitor::AstVisitor;
3use crate::visit::{ast_stat_visit, ast_type_pack_visit, ast_type_visit, AstVisitable};
4
5impl AstVisitable for AstExprFunction {
6    fn visit(&self, visitor: &mut dyn AstVisitor) {
7        if visitor.visit_expr_function(self as *const Self as *mut core::ffi::c_void) {
8            for arg_ptr in self.args.iter() {
9                unsafe {
10                    let arg = &**arg_ptr;
11                    if !arg.annotation.is_null() {
12                        ast_type_visit(arg.annotation, visitor);
13                    }
14                }
15            }
16
17            if !self.vararg_annotation.is_null() {
18                unsafe {
19                    ast_type_pack_visit(self.vararg_annotation, visitor);
20                }
21            }
22
23            if !self.return_annotation.is_null() {
24                unsafe {
25                    ast_type_pack_visit(self.return_annotation, visitor);
26                }
27            }
28
29            unsafe {
30                ast_stat_visit(self.body as *mut _, visitor);
31            }
32        }
33    }
34}
35
36pub fn ast_expr_function_visit(this: &AstExprFunction, visitor: &mut dyn AstVisitor) {
37    this.visit(visitor);
38}