Skip to content

Commit 44951d9

Browse files
committed
Deglobalize argument/return override & switch to function matcher
1 parent af993d2 commit 44951d9

File tree

4 files changed

+667
-450
lines changed

4 files changed

+667
-450
lines changed

binding-generator/src/bin/settings-cleanup.rs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ struct FunctionFinder<'tu, 'f> {
1717
pub func_cfg_attr_unused: RefCell<&'f mut HashSet<&'static str>>,
1818
pub func_unsafe_unused: RefCell<&'f mut HashSet<FuncId<'static>>>,
1919
pub func_replace_unused: RefCell<&'f mut HashSet<FuncId<'static>>>,
20-
pub argument_override_unused: RefCell<&'f mut HashSet<FuncId<'static>>>,
2120
}
2221

2322
impl<'tu, 'f> FunctionFinder<'tu, 'f> {
@@ -29,7 +28,6 @@ impl<'tu, 'f> FunctionFinder<'tu, 'f> {
2928
self.func_cfg_attr_unused.borrow_mut().remove(identifier.as_str());
3029
self.func_unsafe_unused.borrow_mut().remove(&func_id);
3130
self.func_replace_unused.borrow_mut().remove(&func_id);
32-
self.argument_override_unused.borrow_mut().remove(&func_id);
3331
}
3432
}
3533

@@ -88,7 +86,6 @@ fn main() {
8886
let mut func_cfg_attr_unused = settings::FUNC_CFG_ATTR.keys().copied().collect::<HashSet<_>>();
8987
let mut func_unsafe_unused = settings::FUNC_UNSAFE.clone();
9088
let mut func_replace_unused = settings::FUNC_REPLACE.keys().cloned().collect::<HashSet<_>>();
91-
let mut argument_override_unused = settings::ARGUMENT_OVERRIDE.keys().cloned().collect::<HashSet<_>>();
9289
for opencv_header_dir in opencv_header_dirs {
9390
println!("Processing header dir: {}", opencv_header_dir.display());
9491
let modules = opencv_header_dir
@@ -113,7 +110,6 @@ fn main() {
113110
func_cfg_attr_unused: RefCell::new(&mut func_cfg_attr_unused),
114111
func_unsafe_unused: RefCell::new(&mut func_unsafe_unused),
115112
func_replace_unused: RefCell::new(&mut func_replace_unused),
116-
argument_override_unused: RefCell::new(&mut argument_override_unused),
117113
});
118114
});
119115
}
@@ -126,9 +122,4 @@ fn main() {
126122
show(func_unsafe_unused);
127123
println!("Unused entries in settings::FUNC_REPLACE ({}):", func_replace_unused.len());
128124
show(func_replace_unused);
129-
println!(
130-
"Unused entries in settings::ARGUMENT_OVERRIDE ({}):",
131-
argument_override_unused.len()
132-
);
133-
show(argument_override_unused);
134125
}

binding-generator/src/func.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ impl<'tu, 'ge> Func<'tu, 'ge> {
464464
out.kind().as_reference().map(|cow| cow.into_owned()).unwrap_or(out)
465465
}
466466
};
467-
if let Some(return_hint) = settings::RETURN_OVERRIDE.get(&self.func_id()) {
467+
if let Some(return_hint) = gen_env.settings.return_override.get(&mut self.matcher()) {
468468
out.set_type_hint(return_hint.clone());
469469
// if we're returning a BoxedRef then assign its mutability to the mutability of the borrowed argument
470470
if let Some((_, borrow_arg_name, _)) = return_hint.as_boxed_as_ref() {
@@ -519,7 +519,7 @@ impl<'tu, 'ge> Func<'tu, 'ge> {
519519
pub fn arguments(&self) -> Cow<[Field<'tu, 'ge>]> {
520520
match self {
521521
&Self::Clang { entity, gen_env, .. } => {
522-
let arg_overrides = settings::ARGUMENT_OVERRIDE.get(&self.func_id());
522+
let arg_overrides = gen_env.settings.arg_override.get(&mut self.matcher());
523523
let arguments = self.clang_arguments(entity);
524524
let mut slice_arg_finder = SliceArgFinder::with_capacity(arguments.len());
525525
let mut out = arguments

binding-generator/src/settings.rs

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ macro_rules! pred {
4242
use std::collections::{BTreeSet, HashMap, HashSet};
4343

4444
pub use argument_names::{ARGUMENT_NAMES_MULTIPLE_SLICE, ARGUMENT_NAMES_NOT_SLICE, ARGUMENT_NAMES_USERDATA};
45-
pub use argument_override::{ARGUMENT_OVERRIDE, ARG_OVERRIDE_SELF, RETURN_OVERRIDE};
45+
pub use argument_override::{arg_override_factory, return_override_factory, ArgOverride, ReturnOverride, ARG_OVERRIDE_SELF};
4646
pub use element_exclude_kind::ELEMENT_EXCLUDE_KIND;
4747
pub use element_export_tweak::ELEMENT_EXPORT_TWEAK;
4848
pub use force_infallible::FORCE_INFALLIBLE;
@@ -85,6 +85,8 @@ pub type TypeRefFactory = fn() -> TypeRef<'static, 'static>;
8585
/// Injectable global and module level overrides, todo: migrate the global statics to this over time
8686
#[derive(Debug)]
8787
pub struct Settings {
88+
pub arg_override: ArgOverride,
89+
pub return_override: ReturnOverride,
8890
pub func_inject: FuncInject,
8991
pub func_rename: FuncRename,
9092
pub func_specialize: FuncSpecialize,
@@ -95,16 +97,20 @@ pub struct Settings {
9597
impl Settings {
9698
pub fn empty() -> Self {
9799
Self {
98-
func_inject: vec![],
99-
func_rename: HashMap::new(),
100+
arg_override: ArgOverride::empty(),
101+
return_override: ReturnOverride::empty(),
102+
func_inject: FuncInject::default(),
103+
func_rename: FuncRename::default(),
100104
func_specialize: FuncMatcher::empty(),
101105
generator_module_tweaks: ModuleTweak::empty(),
102-
property_rename: HashMap::new(),
106+
property_rename: PropertyRename::default(),
103107
}
104108
}
105109

106110
pub fn for_module(module: &str) -> Self {
107111
Self {
112+
arg_override: arg_override_factory(module),
113+
return_override: return_override_factory(module),
108114
func_inject: func_inject_factory(module),
109115
func_rename: func_rename_factory(module),
110116
func_specialize: func_specialize_factory(module),

0 commit comments

Comments
 (0)