Skip to content

Commit 927aa84

Browse files
authored
Prep for type name deferral (#2955)
1 parent fcb6f2b commit 927aa84

File tree

14 files changed

+104
-108
lines changed

14 files changed

+104
-108
lines changed

crates/libs/bindgen/src/metadata.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -418,10 +418,10 @@ pub fn type_def_has_callback(row: TypeDef) -> bool {
418418
false
419419
}
420420
let type_name = row.type_name();
421-
if type_name.namespace.is_empty() {
421+
if type_name.namespace().is_empty() {
422422
check(row)
423423
} else {
424-
for row in row.reader().get_type_def(type_name.namespace, type_name.name) {
424+
for row in row.reader().get_type_def(type_name.namespace(), type_name.name()) {
425425
if check(row) {
426426
return true;
427427
}
@@ -473,7 +473,7 @@ pub fn type_interfaces(ty: &Type) -> Vec<Interface> {
473473
"StaticAttribute" | "ActivatableAttribute" => {
474474
for (_, arg) in attribute.args() {
475475
if let Value::TypeName(type_name) = arg {
476-
let def = row.reader().get_type_def(type_name.namespace, type_name.name).next().expect("Type not found");
476+
let def = row.reader().get_type_def(type_name.namespace(), type_name.name()).next().expect("Type not found");
477477
result.push(Interface { ty: Type::TypeDef(def, Vec::new()), kind: InterfaceKind::Static });
478478
break;
479479
}
@@ -601,10 +601,10 @@ pub fn type_def_has_explicit_layout(row: TypeDef) -> bool {
601601
false
602602
}
603603
let type_name = row.type_name();
604-
if type_name.namespace.is_empty() {
604+
if type_name.namespace().is_empty() {
605605
check(row)
606606
} else {
607-
for row in row.reader().get_type_def(type_name.namespace, type_name.name) {
607+
for row in row.reader().get_type_def(type_name.namespace(), type_name.name()) {
608608
if check(row) {
609609
return true;
610610
}
@@ -635,10 +635,10 @@ pub fn type_def_has_packing(row: TypeDef) -> bool {
635635
false
636636
}
637637
let type_name = row.type_name();
638-
if type_name.namespace.is_empty() {
638+
if type_name.namespace().is_empty() {
639639
check(row)
640640
} else {
641-
for row in row.reader().get_type_def(type_name.namespace, type_name.name) {
641+
for row in row.reader().get_type_def(type_name.namespace(), type_name.name()) {
642642
if check(row) {
643643
return true;
644644
}
@@ -741,7 +741,7 @@ pub fn type_def_bases(mut row: TypeDef) -> Vec<TypeDef> {
741741
loop {
742742
match row.extends() {
743743
Some(base) if base != TypeName::Object => {
744-
row = row.reader().get_type_def(base.namespace, base.name).next().expect("Type not found");
744+
row = row.reader().get_type_def(base.namespace(), base.name()).next().expect("Type not found");
745745
bases.push(row);
746746
}
747747
_ => break,

crates/libs/bindgen/src/rdl/from_reader.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -169,12 +169,12 @@ impl Writer {
169169

170170
fn type_def(&self, def: metadata::TypeDef) -> TokenStream {
171171
if let Some(extends) = def.extends() {
172-
if extends.namespace == "System" {
173-
if extends.name == "Enum" {
172+
if extends.namespace() == "System" {
173+
if extends.name() == "Enum" {
174174
self.enum_def(def)
175-
} else if extends.name == "ValueType" {
175+
} else if extends.name() == "ValueType" {
176176
self.struct_def(def)
177-
} else if extends.name == "MulticastDelegate" {
177+
} else if extends.name() == "MulticastDelegate" {
178178
self.delegate_def(def)
179179
} else {
180180
self.class_def(def)
@@ -294,8 +294,8 @@ impl Writer {
294294

295295
if let Some(type_name) = def.extends() {
296296
if type_name != metadata::TypeName::Object {
297-
let namespace = self.namespace(type_name.namespace);
298-
let name = to_ident(type_name.name);
297+
let namespace = self.namespace(type_name.namespace());
298+
let name = to_ident(type_name.name());
299299
// TODO: ideally the "class" contextual keyword wouldn't be needed here
300300
// but currently there's no way to tell the base class apart from a required interface.
301301
types.insert(0, quote! { class #namespace #name });
@@ -356,8 +356,8 @@ impl Writer {
356356
}
357357

358358
metadata::Type::TypeRef(type_name) => {
359-
let namespace = self.namespace(type_name.namespace);
360-
let name = to_ident(type_name.name);
359+
let namespace = self.namespace(type_name.namespace());
360+
let name = to_ident(type_name.name());
361361
quote! { #namespace #name }
362362
}
363363

crates/libs/bindgen/src/rust/cfg.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ pub fn type_def_cfg_combine(writer: &Writer, row: metadata::TypeDef, generics: &
8080
type_cfg_combine(writer, generic, cfg);
8181
}
8282

83-
if cfg.types.entry(type_name.namespace).or_default().insert(row) {
83+
if cfg.types.entry(type_name.namespace()).or_default().insert(row) {
8484
match type_kind {
8585
metadata::TypeKind::Class => {
8686
if let Some(default_interface) = metadata::type_def_default_interface(row) {
@@ -98,8 +98,8 @@ pub fn type_def_cfg_combine(writer: &Writer, row: metadata::TypeDef, generics: &
9898
}
9999
metadata::TypeKind::Struct => {
100100
row.fields().for_each(|field| field_cfg_combine(writer, field, Some(row), cfg));
101-
if !type_name.namespace.is_empty() {
102-
for def in row.reader().get_type_def(type_name.namespace, type_name.name) {
101+
if !type_name.namespace().is_empty() {
102+
for def in row.reader().get_type_def(type_name.namespace(), type_name.name()) {
103103
if def != row {
104104
type_def_cfg_combine(writer, def, &[], cfg);
105105
}

crates/libs/bindgen/src/rust/enums.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use metadata::HasAttributes;
33

44
pub fn writer(writer: &Writer, def: metadata::TypeDef) -> TokenStream {
55
let type_name = def.type_name();
6-
let ident = to_ident(type_name.name);
6+
let ident = to_ident(type_name.name());
77
let underlying_type = def.underlying_type();
88
let underlying_type = writer.type_name(&underlying_type);
99

@@ -72,7 +72,7 @@ pub fn writer(writer: &Writer, def: metadata::TypeDef) -> TokenStream {
7272
}
7373

7474
if !writer.sys {
75-
let name = type_name.name;
75+
let name = type_name.name();
7676
tokens.combine(&quote! {
7777
#features
7878
impl windows_core::TypeKind for #ident {

crates/libs/bindgen/src/rust/handles.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,8 @@ pub fn gen_win_handle(writer: &Writer, def: metadata::TypeDef) -> TokenStream {
9292

9393
if let Some(dependency) = type_def_usable_for(def) {
9494
let type_name = dependency.type_name();
95-
let mut dependency = writer.namespace(type_name.namespace);
96-
dependency.push_str(type_name.name);
95+
let mut dependency = writer.namespace(type_name.namespace());
96+
dependency.push_str(type_name.name());
9797

9898
tokens.combine(&quote! {
9999
impl windows_core::CanInto<#dependency> for #ident {}

crates/libs/bindgen/src/rust/mod.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -186,13 +186,13 @@ fn namespace(writer: &Writer, tree: &Tree) -> String {
186186
match item {
187187
metadata::Item::Type(def) => {
188188
let type_name = def.type_name();
189-
if writer.reader.remap_types().any(|(x, _)| x == &type_name) {
189+
if writer.reader.remap_type(&type_name).is_some() {
190190
continue;
191191
}
192-
if writer.reader.core_types().any(|(x, _)| x == &type_name) {
192+
if writer.reader.core_type(&type_name).is_some() {
193193
continue;
194194
}
195-
types.entry(def.kind()).or_default().entry(type_name.name).or_default().combine(&writer.type_def(def));
195+
types.entry(def.kind()).or_default().entry(type_name.name()).or_default().combine(&writer.type_def(def));
196196
}
197197
metadata::Item::Fn(def, namespace) => {
198198
let name = def.name();
@@ -230,7 +230,7 @@ fn namespace_impl(writer: &Writer, tree: &Tree) -> String {
230230
for item in writer.reader.namespace_items(tree.namespace) {
231231
if let metadata::Item::Type(def) = item {
232232
let type_name = def.type_name();
233-
if writer.reader.core_types().any(|(x, _)| x == &type_name) {
233+
if writer.reader.core_type(&type_name).is_some() {
234234
continue;
235235
}
236236
if def.kind() != metadata::TypeKind::Interface {
@@ -239,7 +239,7 @@ fn namespace_impl(writer: &Writer, tree: &Tree) -> String {
239239
let tokens = implements::writer(writer, def);
240240

241241
if !tokens.is_empty() {
242-
types.insert(type_name.name, tokens);
242+
types.insert(type_name.name(), tokens);
243243
}
244244
}
245245
}

crates/libs/bindgen/src/rust/standalone.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,8 @@ fn type_collect_standalone(writer: &Writer, ty: &metadata::Type, set: &mut std::
154154
// Note this is a bit overeager as we can collect a typedef that is used
155155
// by one architecture but not by another
156156
let type_name = def.type_name();
157-
if !type_name.namespace.is_empty() {
158-
for row in def.reader().get_type_def(type_name.namespace, type_name.name) {
157+
if !type_name.namespace().is_empty() {
158+
for row in def.reader().get_type_def(type_name.namespace(), type_name.name()) {
159159
if def != row {
160160
type_collect_standalone(writer, &metadata::Type::TypeDef(row, Vec::new()), set);
161161
}

crates/libs/bindgen/src/rust/writer.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,11 @@ impl Writer {
5656
pub fn type_def_name_imp(&self, def: metadata::TypeDef, generics: &[metadata::Type], suffix: &str) -> TokenStream {
5757
let type_name = def.type_name();
5858

59-
if type_name.namespace.is_empty() {
59+
if type_name.namespace().is_empty() {
6060
to_ident(&self.scoped_name(def))
6161
} else {
62-
let mut namespace = self.namespace(type_name.namespace);
63-
let mut name = to_ident(type_name.name);
62+
let mut namespace = self.namespace(type_name.namespace());
63+
let mut name = to_ident(type_name.name());
6464
name.push_str(suffix);
6565

6666
if generics.is_empty() || self.sys {
@@ -106,7 +106,7 @@ impl Writer {
106106
} else {
107107
let kind = self.type_name(ty);
108108

109-
if ty.is_generic() {
109+
if matches!(ty, metadata::Type::GenericParam(_)) {
110110
quote! { <#kind as windows_core::Type<#kind>>::Default }
111111
} else if metadata::type_is_nullable(ty) && !self.sys {
112112
quote! { Option<#kind> }

crates/libs/bindgen/src/winmd/from_reader.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pub fn from_reader(reader: &metadata::Reader, config: std::collections::BTreeMap
2323

2424
let generics = &metadata::type_def_generics(def);
2525

26-
let extends = if let Some(extends) = def.extends() { writer.insert_type_ref(extends.namespace, extends.name) } else { TypeDefOrRef::none() };
26+
let extends = if let Some(extends) = def.extends() { writer.insert_type_ref(extends.namespace(), extends.name()) } else { TypeDefOrRef::none() };
2727

2828
writer.tables.TypeDef.push(TypeDef {
2929
Extends: extends,

crates/libs/metadata/src/filter.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ mod tests {
8484

8585
fn includes_type_name(filter: &Filter, full_name: &'static str) -> bool {
8686
let type_name = crate::TypeName::parse(full_name);
87-
filter.includes_type_name(type_name.namespace, type_name.name)
87+
filter.includes_type_name(type_name.namespace(), type_name.name())
8888
}
8989

9090
#[test]

0 commit comments

Comments
 (0)