summaryrefslogtreecommitdiff
path: root/src/codegen
diff options
context:
space:
mode:
authorgnzlbg <gonzalobg88@gmail.com>2018-08-14 19:16:05 +0200
committergnzlbg <gonzalobg88@gmail.com>2018-08-14 19:16:05 +0200
commit122198bfbe30afd00cab87362c0026ded4c9743b (patch)
treea53cbc062daa7a85e3c9091fd121d5b22aed65f5 /src/codegen
parente9709955e168098b6d9b327081eda686bb6ee098 (diff)
map vector types to arrays and pass them by value
Diffstat (limited to 'src/codegen')
-rw-r--r--src/codegen/impl_debug.rs9
-rw-r--r--src/codegen/impl_partialeq.rs7
-rw-r--r--src/codegen/mod.rs7
3 files changed, 23 insertions, 0 deletions
diff --git a/src/codegen/impl_debug.rs b/src/codegen/impl_debug.rs
index ab934ed6..9e3e3425 100644
--- a/src/codegen/impl_debug.rs
+++ b/src/codegen/impl_debug.rs
@@ -197,6 +197,15 @@ impl<'a> ImplDebug<'a> for Item {
))
}
}
+ TypeKind::Vector(_, len, _) => {
+ let self_ids = 0..len;
+ Some((
+ format!("{}({{}})", name),
+ vec![quote! {
+ #(format!("{:?}", self.#self_ids)),*
+ }]
+ ))
+ }
TypeKind::ResolvedTypeRef(t) |
TypeKind::TemplateAlias(t, _) |
diff --git a/src/codegen/impl_partialeq.rs b/src/codegen/impl_partialeq.rs
index a05c65e7..936cc05d 100644
--- a/src/codegen/impl_partialeq.rs
+++ b/src/codegen/impl_partialeq.rs
@@ -115,6 +115,13 @@ fn gen_field(ctx: &BindgenContext, ty_item: &Item, name: &str) -> quote::Tokens
&self. #name_ident [..] == &other. #name_ident [..]
}
},
+ TypeKind::Vector(_, len, _) => {
+ let self_ids = 0..len;
+ let other_ids = 0..len;
+ quote! {
+ #(self.#self_ids == other.#other_ids &&)* true
+ }
+ },
TypeKind::ResolvedTypeRef(t) |
TypeKind::TemplateAlias(t, _) |
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs
index 8c113f5a..acf45841 100644
--- a/src/codegen/mod.rs
+++ b/src/codegen/mod.rs
@@ -595,6 +595,7 @@ impl CodeGenerator for Type {
TypeKind::Float(..) |
TypeKind::Complex(..) |
TypeKind::Array(..) |
+ TypeKind::Vector(..) |
TypeKind::Pointer(..) |
TypeKind::BlockPointer |
TypeKind::Reference(..) |
@@ -3055,6 +3056,12 @@ impl TryToRustTy for Type {
[ #ty ; #len ]
})
}
+ TypeKind::Vector(item, len, _) => {
+ let ty = item.try_to_rust_ty(ctx, &())?;
+ Ok(quote! {
+ [ #ty ; #len ]
+ })
+ }
TypeKind::Enum(..) => {
let path = item.namespace_aware_canonical_path(ctx);
let path = Term::new(&path.join("::"), Span::call_site());