(&mut self, expr: &mut Expression)
| 875 | targets.remove(name); |
| 876 | } |
| 877 | if targets.is_empty() { |
| 878 | return; |
| 879 | } |
| 880 | mangle_with_targets(program, prefix, targets, &HashSet::new()); |
| 881 | } |
| 882 | |
| 883 | // Rename `targets` (definitions and unshadowed references) to `prefix__name`, returning |
| 884 | // the `rejected` names the walk saw as live references. |
| 885 | fn mangle_with_targets( |
| 886 | program: &mut Program, |
| 887 | prefix: &str, |
| 888 | targets: HashSet<String>, |
| 889 | rejected: &HashSet<String>, |
| 890 | ) -> Vec<String> { |
| 891 | let mut mangler = Mangler { |
| 892 | prefix, |
| 893 | targets, |
| 894 | rejected, |
| 895 | seen_rejected: Vec::new(), |
| 896 | scopes: Vec::new(), |
| 897 | }; |
| 898 | mangler.run(program); |
| 899 | mangler.seen_rejected |
| 900 | } |
| 901 | |
| 902 | // Walks an AST renaming references to a module's mangled top-level symbols, honoring local |
| 903 | // bindings (params, locals, loop and match bindings) that shadow a top-level name. |
| 904 | struct Mangler<'a> { |
| 905 | prefix: &'a str, |
no test coverage detected