mirror of
https://github.com/fluencelabs/wasm-bindgen
synced 2025-05-16 15:51:19 +00:00
Refactor a method for listing all mixins
This'll hopefully be reusable in more than one location!
This commit is contained in:
parent
b9dc937d73
commit
0a38e44f1f
@ -687,4 +687,28 @@ impl<'a> FirstPassRecord<'a> {
|
||||
self.fill_superclasses(superclass, set);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn all_mixins<'me>(&'me self, interface: &str)
|
||||
-> impl Iterator<Item = &'me MixinData<'a>> + 'me
|
||||
{
|
||||
let mut set = Vec::new();
|
||||
self.fill_mixins(interface, interface, &mut set);
|
||||
set.into_iter()
|
||||
}
|
||||
|
||||
fn fill_mixins<'me>(
|
||||
&'me self,
|
||||
self_name: &str,
|
||||
mixin_name: &str,
|
||||
list: &mut Vec<&'me MixinData<'a>>,
|
||||
) {
|
||||
if let Some(mixin_data) = self.mixins.get(mixin_name) {
|
||||
list.push(mixin_data);
|
||||
}
|
||||
if let Some(mixin_names) = self.includes.get(mixin_name) {
|
||||
for mixin_name in mixin_names {
|
||||
self.fill_mixins(self_name, mixin_name, list);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -418,20 +418,11 @@ impl<'src> FirstPassRecord<'src> {
|
||||
);
|
||||
}
|
||||
|
||||
self.append_interface_mixins(program, name, name);
|
||||
}
|
||||
|
||||
fn append_interface_mixins(
|
||||
&self,
|
||||
program: &mut backend::ast::Program,
|
||||
self_name: &str,
|
||||
mixin_name: &str,
|
||||
) {
|
||||
if let Some(mixin_data) = self.mixins.get(mixin_name) {
|
||||
for member in &mixin_data.methods {
|
||||
for data in self.all_mixins(name) {
|
||||
for member in &data.methods {
|
||||
self.member_operation(
|
||||
program,
|
||||
self_name,
|
||||
name,
|
||||
&member.attributes,
|
||||
None,
|
||||
&[],
|
||||
@ -440,13 +431,13 @@ impl<'src> FirstPassRecord<'src> {
|
||||
&member.identifier,
|
||||
);
|
||||
}
|
||||
for member in &mixin_data.consts {
|
||||
self.append_const(program, self_name, member);
|
||||
for member in &data.consts {
|
||||
self.append_const(program, name, member);
|
||||
}
|
||||
for member in &mixin_data.attributes {
|
||||
for member in &data.attributes {
|
||||
self.member_attribute(
|
||||
program,
|
||||
self_name,
|
||||
name,
|
||||
&member.attributes,
|
||||
if let Some(s) = member.stringifier {
|
||||
Some(weedle::interface::StringifierOrInheritOrStatic::Stringifier(s))
|
||||
@ -459,11 +450,6 @@ impl<'src> FirstPassRecord<'src> {
|
||||
);
|
||||
}
|
||||
}
|
||||
if let Some(mixin_names) = self.includes.get(mixin_name) {
|
||||
for mixin_name in mixin_names {
|
||||
self.append_interface_mixins(program, self_name, mixin_name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn append_constructor(
|
||||
|
Loading…
x
Reference in New Issue
Block a user