Skip to content

Commit 2e4df26

Browse files
committed
Filter is never None, so don't use an Option
1 parent 43b059f commit 2e4df26

File tree

2 files changed

+68
-75
lines changed

2 files changed

+68
-75
lines changed

gl_generator/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,13 @@ pub fn generate_bindings<G, W>(generator: G, api: registry::Api, fallbacks: Fall
111111
{
112112
// Get generator field values, using default values if they have not been
113113
// specified
114-
let filter = Some(Filter {
114+
let filter = Filter {
115115
api: api,
116116
fallbacks: fallbacks,
117117
extensions: extensions,
118118
version: version.to_string(),
119119
profile: profile.to_string(),
120-
});
120+
};
121121

122122
// Generate the registry of all bindings
123123
let registry = {

gl_generator/registry.rs

Lines changed: 66 additions & 73 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ use self::xml::reader::XmlEvent;
3232
#[derive(Copy, Clone, PartialEq, Eq)]
3333
pub enum Api { Gl, Glx, Wgl, Egl, GlCore, Gles1, Gles2 }
3434

35-
#[derive(Copy, Clone)]
35+
#[derive(Copy, Clone, PartialEq, Eq)]
3636
pub enum Fallbacks { All, None }
3737

3838
impl FromStr for Api {
@@ -107,7 +107,7 @@ pub struct Registry {
107107

108108
impl Registry {
109109
/// Generate a registry from the supplied XML string
110-
pub fn from_xml<R: io::Read>(data: R, api: Api, filter: Option<Filter>) -> Registry {
110+
pub fn from_xml<R: io::Read>(data: R, api: Api, filter: Filter) -> Registry {
111111
use std::io::BufReader;
112112
let data = BufReader::new(data);
113113

@@ -262,7 +262,7 @@ pub struct GlxOpcode {
262262

263263
struct RegistryBuilder<R: io::Read> {
264264
pub api: Api,
265-
pub filter: Option<Filter>,
265+
pub filter: Filter,
266266
pub reader: XmlEventReader<R>,
267267
}
268268

@@ -380,85 +380,78 @@ impl<R: io::Read> RegistryBuilder<R> {
380380
}
381381
}
382382

383-
match self.filter {
384-
Some(ref filter) => {
385-
let Registry { api, enums, cmds, aliases, features: feats, extensions: exts } = registry;
386-
let mut desired_enums = HashSet::new();
387-
let mut desired_cmds = HashSet::new();
388-
389-
// find the features we want
390-
let mut found_feat = false;
391-
for f in feats.iter() {
392-
// XXX: verify that the string comparison with <= actually works as desired
393-
if f.api == filter.api && f.number <= filter.version {
394-
for req in f.requires.iter() {
395-
desired_enums.extend(req.enums.iter().map(|x| x.clone()));
396-
desired_cmds.extend(req.commands.iter().map(|x| x.clone()));
397-
}
398-
}
399-
if f.number == filter.version {
400-
found_feat = true;
401-
}
383+
let Registry { api, enums, cmds, aliases, features: feats, extensions: exts } = registry;
384+
let mut desired_enums = HashSet::new();
385+
let mut desired_cmds = HashSet::new();
386+
387+
// find the features we want
388+
let mut found_feat = false;
389+
for f in feats.iter() {
390+
// XXX: verify that the string comparison with <= actually works as desired
391+
if f.api == self.filter.api && f.number <= self.filter.version {
392+
for req in f.requires.iter() {
393+
desired_enums.extend(req.enums.iter().map(|x| x.clone()));
394+
desired_cmds.extend(req.commands.iter().map(|x| x.clone()));
402395
}
396+
}
397+
if f.number == self.filter.version {
398+
found_feat = true;
399+
}
400+
}
403401

404-
// remove the things that should be removed
405-
for f in feats.iter() {
406-
// XXX: verify that the string comparison with <= actually works as desired
407-
if f.api == filter.api && f.number <= filter.version {
408-
for rem in f.removes.iter() {
409-
if rem.profile == filter.profile {
410-
for enm in rem.enums.iter() {
411-
debug!("Removing {}", enm);
412-
desired_enums.remove(enm);
413-
}
414-
for cmd in rem.commands.iter() {
415-
debug!("Removing {}", cmd);
416-
desired_cmds.remove(cmd);
417-
}
418-
}
402+
// remove the things that should be removed
403+
for f in feats.iter() {
404+
// XXX: verify that the string comparison with <= actually works as desired
405+
if f.api == self.filter.api && f.number <= self.filter.version {
406+
for rem in f.removes.iter() {
407+
if rem.profile == self.filter.profile {
408+
for enm in rem.enums.iter() {
409+
debug!("Removing {}", enm);
410+
desired_enums.remove(enm);
411+
}
412+
for cmd in rem.commands.iter() {
413+
debug!("Removing {}", cmd);
414+
desired_cmds.remove(cmd);
419415
}
420416
}
421417
}
418+
}
419+
}
422420

423-
if !found_feat {
424-
panic!("Did not find version {} in the registry", filter.version);
425-
}
421+
if !found_feat {
422+
panic!("Did not find version {} in the registry", self.filter.version);
423+
}
426424

427-
for ext in exts.iter() {
428-
if filter.extensions.iter().any(|x| x == &ext.name) {
429-
if !ext.supported.iter().any(|x| x == &filter.api) {
430-
panic!("Requested {}, which doesn't support the {} API", ext.name, filter.api);
431-
}
432-
for req in ext.requires.iter() {
433-
desired_enums.extend(req.enums.iter().map(|x| x.clone()));
434-
desired_cmds.extend(req.commands.iter().map(|x| x.clone()));
435-
}
436-
}
425+
for ext in exts.iter() {
426+
if self.filter.extensions.iter().any(|x| x == &ext.name) {
427+
if !ext.supported.iter().any(|x| x == &self.filter.api) {
428+
panic!("Requested {}, which doesn't support the {} API", ext.name, self.filter.api);
437429
}
438-
439-
let aliases = if let &Filter { fallbacks: Fallbacks::None, ..} = filter { HashMap::new() } else { aliases };
440-
441-
Registry {
442-
api: api,
443-
enums: enums.into_iter().filter(|e| {
444-
desired_enums.contains(&("GL_".to_string() + &e.ident)) ||
445-
desired_enums.contains(&("WGL_".to_string() + &e.ident)) ||
446-
desired_enums.contains(&("GLX_".to_string() + &e.ident)) ||
447-
desired_enums.contains(&("EGL_".to_string() + &e.ident))
448-
}).collect::<Vec<Enum>>(),
449-
cmds: cmds.into_iter().filter(|c| {
450-
desired_cmds.contains(&("gl".to_string() + &c.proto.ident)) ||
451-
desired_cmds.contains(&("wgl".to_string() + &c.proto.ident)) ||
452-
desired_cmds.contains(&("glX".to_string() + &c.proto.ident)) ||
453-
desired_cmds.contains(&("egl".to_string() + &c.proto.ident))
454-
}).collect::<Vec<Cmd>>(),
455-
// these aren't important after this step
456-
features: Vec::new(),
457-
extensions: Vec::new(),
458-
aliases: aliases,
430+
for req in ext.requires.iter() {
431+
desired_enums.extend(req.enums.iter().map(|x| x.clone()));
432+
desired_cmds.extend(req.commands.iter().map(|x| x.clone()));
459433
}
460-
},
461-
None => registry
434+
}
435+
}
436+
437+
Registry {
438+
api: api,
439+
enums: enums.into_iter().filter(|e| {
440+
desired_enums.contains(&("GL_".to_string() + &e.ident)) ||
441+
desired_enums.contains(&("WGL_".to_string() + &e.ident)) ||
442+
desired_enums.contains(&("GLX_".to_string() + &e.ident)) ||
443+
desired_enums.contains(&("EGL_".to_string() + &e.ident))
444+
}).collect(),
445+
cmds: cmds.into_iter().filter(|c| {
446+
desired_cmds.contains(&("gl".to_string() + &c.proto.ident)) ||
447+
desired_cmds.contains(&("wgl".to_string() + &c.proto.ident)) ||
448+
desired_cmds.contains(&("glX".to_string() + &c.proto.ident)) ||
449+
desired_cmds.contains(&("egl".to_string() + &c.proto.ident))
450+
}).collect(),
451+
// these aren't important after this step
452+
features: Vec::new(),
453+
extensions: Vec::new(),
454+
aliases: if self.filter.fallbacks == Fallbacks::None { HashMap::new() } else { aliases },
462455
}
463456
}
464457

0 commit comments

Comments
 (0)