diff options
author | Nikhil Shagrithaya <nikhilshagri@gmail.com> | 2016-12-29 18:26:25 +0530 |
---|---|---|
committer | Nikhil Shagrithaya <nikhilshagri@gmail.com> | 2017-01-26 18:27:48 +0530 |
commit | 8eb9e3f406f83f297ccacf687791948cfd4ba872 (patch) | |
tree | dd298005f875781145b7210ed4d964c84857b3ff /src/codegen/mod.rs | |
parent | ab6117c6b486cfcbf65adf8702dbc8472b4eb8c0 (diff) |
Forward declared structs now generate opaque enums
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r-- | src/codegen/mod.rs | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index 7451dd11..0cc5a637 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -748,6 +748,22 @@ impl CodeGenerator for CompInfo { return; } + let applicable_template_args = item.applicable_template_args(ctx); + + // generate tuple struct if struct or union is a forward declaration, + // skip for now if template parameters are needed. + if self.is_forward_declaration() && applicable_template_args.is_empty(){ + let struct_name = item.canonical_name(ctx); + let struct_name = ctx.rust_ident_raw(&struct_name); + let tuple_struct = quote_item!(ctx.ext_cx(), + #[repr(C)] + pub struct $struct_name([u8; 0]); + ) + .unwrap(); + result.push(tuple_struct); + return; + } + if self.is_template_specialization() { let layout = item.kind().expect_type().layout(ctx); @@ -775,8 +791,6 @@ impl CodeGenerator for CompInfo { return; } - let applicable_template_args = item.applicable_template_args(ctx); - let mut attributes = vec![]; let mut needs_clone_impl = false; if let Some(comment) = item.comment() { |