diff --git a/src/gl_generator/generators/global_gen.rs b/src/gl_generator/generators/global_gen.rs index 4bf1b033..2a451d2f 100644 --- a/src/gl_generator/generators/global_gen.rs +++ b/src/gl_generator/generators/global_gen.rs @@ -107,23 +107,7 @@ fn write_fns(ecx: &ExtCtxt, registry: &Registry) -> Vec> { None => "".to_string() }; - ecx.parse_item(if c.is_safe { - format!( - "#[allow(non_snake_case)] #[allow(unused_variables)] #[allow(dead_code)] - #[inline] #[unstable] {doc} pub fn {name}({params}) -> {return_suffix} {{ \ - unsafe {{ \ - __gl_imports::mem::transmute::<_, extern \"system\" fn({types}) -> {return_suffix}>\ - (storage::{name}.f)({idents}) \ - }} \ - }}", - name = c.proto.ident, - doc = doc, - params = super::gen_parameters(ecx, c).into_iter().map(|p| p.to_source()).collect::>().connect(", "), - types = super::gen_parameters(ecx, c).into_iter().map(|p| p.ty.to_source()).collect::>().connect(", "), - return_suffix = super::gen_return_type(ecx, c).to_source(), - idents = super::gen_parameters(ecx, c).into_iter().map(|p| p.pat.to_source()).collect::>().connect(", "), - ) - } else { + ecx.parse_item( format!( "#[allow(non_snake_case)] #[allow(unused_variables)] #[allow(dead_code)] #[inline] #[unstable] {doc} pub unsafe fn {name}({typed_params}) -> {return_suffix} {{ \ @@ -136,7 +120,7 @@ fn write_fns(ecx: &ExtCtxt, registry: &Registry) -> Vec> { return_suffix = super::gen_return_type(ecx, c).to_source(), idents = super::gen_parameters(ecx, c).into_iter().map(|p| p.pat.to_source()).collect::>().connect(", "), ) - }) + ) }).collect() } diff --git a/src/gl_generator/generators/struct_gen.rs b/src/gl_generator/generators/struct_gen.rs index 50333cc7..f75de543 100644 --- a/src/gl_generator/generators/struct_gen.rs +++ b/src/gl_generator/generators/struct_gen.rs @@ -220,34 +220,17 @@ fn write_impl(ecx: &ExtCtxt, registry: &Registry, ns: &Ns) -> P { modules = registry.cmd_iter().map(|c| { use syntax::ext::quote::rt::ToSource; - if c.is_safe { - format!( - "#[allow(non_snake_case)] #[allow(unused_variables)] #[allow(dead_code)] - #[inline] #[unstable] pub fn {name}(&self, {params}) -> {return_suffix} {{ \ - unsafe {{ \ - __gl_imports::mem::transmute::<_, extern \"system\" fn({types}) -> {return_suffix}>\ - (self.{name}.f)({idents}) \ - }} \ - }}", - name = c.proto.ident, - params = super::gen_parameters(ecx, c).into_iter().map(|p| p.to_source()).collect::>().connect(", "), - types = super::gen_parameters(ecx, c).into_iter().map(|p| p.ty.to_source()).collect::>().connect(", "), - return_suffix = super::gen_return_type(ecx, c).to_source(), - idents = super::gen_parameters(ecx, c).into_iter().map(|p| p.pat.to_source()).collect::>().connect(", "), - ) - } else { - format!( - "#[allow(non_snake_case)] #[allow(unused_variables)] #[allow(dead_code)] - #[inline] #[unstable] pub unsafe fn {name}(&self, {typed_params}) -> {return_suffix} {{ \ - __gl_imports::mem::transmute::<_, extern \"system\" fn({typed_params}) -> {return_suffix}>\ - (self.{name}.f)({idents}) \ - }}", - name = c.proto.ident, - typed_params = super::gen_parameters(ecx, c).into_iter().map(|p| p.to_source()).collect::>().connect(", "), - return_suffix = super::gen_return_type(ecx, c).to_source(), - idents = super::gen_parameters(ecx, c).into_iter().map(|p| p.pat.to_source()).collect::>().connect(", "), - ) - } + format!( + "#[allow(non_snake_case)] #[allow(unused_variables)] #[allow(dead_code)] + #[inline] #[unstable] pub unsafe fn {name}(&self, {typed_params}) -> {return_suffix} {{ \ + __gl_imports::mem::transmute::<_, extern \"system\" fn({typed_params}) -> {return_suffix}>\ + (self.{name}.f)({idents}) \ + }}", + name = c.proto.ident, + typed_params = super::gen_parameters(ecx, c).into_iter().map(|p| p.to_source()).collect::>().connect(", "), + return_suffix = super::gen_return_type(ecx, c).to_source(), + idents = super::gen_parameters(ecx, c).into_iter().map(|p| p.pat.to_source()).collect::>().connect(", "), + ) }).collect::>().connect("\n") )) } diff --git a/src/gl_generator/registry.rs b/src/gl_generator/registry.rs index 4ffd40a3..c4404b1e 100644 --- a/src/gl_generator/registry.rs +++ b/src/gl_generator/registry.rs @@ -225,6 +225,9 @@ pub struct Binding { pub struct Cmd { pub proto: Binding, pub params: Vec, + /// True if this command doesn't take any pointers. + /// + /// Unused by the built-in generators. pub is_safe: bool, pub alias: Option, pub vecequiv: Option,