gloss_utils/
memory.rs

1pub fn get_last_relevant_func_name(cb_stack: &str) -> String {
2    let stack_parts = cb_stack.split('\n');
3    for f in stack_parts {
4        //split a string like number:package:name:func into number and the rest (package:name:func)
5        let mut parts = f.splitn(2, ':');
6        let opt_func_number = parts.next();
7        let name_str = parts.next().unwrap_or("").trim().to_string();
8        if let Some(func_number) = opt_func_number {
9            if let Ok(_number) = func_number.trim().parse::<i32>() {
10                //skip likely unrelevant lines that too low level
11                if name_str.starts_with("at alloc")
12                    || name_str.starts_with("alloc")
13                    || name_str.starts_with("at <alloc")
14                    || name_str.starts_with("at re_memory")
15                    || name_str.starts_with("at<re_memory")
16                    || name_str.starts_with("<re_memory")
17                    || name_str.starts_with("at std::thread")
18                    || name_str.starts_with("at <u8 as alloc::vec")
19                    || name_str.starts_with("at <T as alloc::vec")
20                    || name_str.starts_with("at __rust_alloc")
21                    || name_str.starts_with("at __rust_realloc")
22                    || name_str.starts_with("Error")
23                    || name_str.starts_with("at imports.wbg")
24                {
25                    continue;
26                }
27
28                return name_str;
29            }
30        }
31    }
32    "unkown".to_string()
33}