libgir/
visitors.rs
1use crate::library::*;
2
3pub trait FunctionsMutVisitor {
4 fn visit_function_mut(&mut self, func: &mut Function) -> bool;
7}
8
9impl Namespace {
10 pub fn visit_functions_mut<V: FunctionsMutVisitor>(&mut self, visitor: &mut V) -> bool {
11 for type_ in self.types.iter_mut().flatten() {
12 if !type_.visit_functions_mut(visitor) {
13 return false;
14 }
15 }
16 true
17 }
18}
19
20impl Type {
21 pub fn visit_functions_mut<V: FunctionsMutVisitor>(&mut self, visitor: &mut V) -> bool {
22 match self {
23 Type::Class(class) => {
24 for function in &mut class.functions {
25 if !visitor.visit_function_mut(function) {
26 return false;
27 }
28 }
29 }
30 Type::Interface(interface) => {
31 for function in &mut interface.functions {
32 if !visitor.visit_function_mut(function) {
33 return false;
34 }
35 }
36 }
37 Type::Record(record) => {
38 for function in &mut record.functions {
39 if !visitor.visit_function_mut(function) {
40 return false;
41 }
42 }
43 }
44 _ => (),
45 }
46 true
47 }
48}