summaryrefslogtreecommitdiff
path: root/src/codegen/mod.rs
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2017-01-26 05:11:53 -0800
committerGitHub <noreply@github.com>2017-01-26 05:11:53 -0800
commit5cc25067b27af15ba67be645235f9c90573d6313 (patch)
treef6d1661beefd466b1861240e5c88d195e7de96de /src/codegen/mod.rs
parente4420b601031c4ec8d84fe8340961447e3a2c87a (diff)
parent78aaa32037880c28cce640aa8f989f738280f164 (diff)
Auto merge of #370 - cynicaldevil:detect-forward, r=emilio
Forward declared structs now generate opaque enums @emilio : I checked the test outputs again, and it seems that these changes are affecting struct *definitions* as well. Hence, I have not committed the test changes yet. Fixes #62
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r--src/codegen/mod.rs18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index 0991391a..c92e95fa 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -763,6 +763,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);
@@ -790,8 +806,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() {