1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
use super::*;

pub struct MethodNames(BTreeMap<String, u32>);

impl MethodNames {
    pub fn new() -> Self {
        Self(BTreeMap::new())
    }

    pub fn add(&mut self, gen: &Gen, method: MethodDef) -> TokenStream {
        let name = gen.reader.method_def_special_name(method);
        let overload = self.0.entry(name.to_string()).or_insert(0);
        *overload += 1;
        if *overload > 1 {
            format!("{name}{overload}").into()
        } else {
            to_ident(&name)
        }
    }

    pub fn add_vtable_types(&mut self, gen: &Gen, def: TypeDef) {
        for def in gen.reader.type_def_vtables(def) {
            if let Type::TypeDef((def, _)) = def {
                for method in gen.reader.type_def_methods(def) {
                    self.add(gen, method);
                }
            }
        }
    }
}