diff options
author | gnzlbg <gonzalobg88@gmail.com> | 2018-08-14 19:16:05 +0200 |
---|---|---|
committer | gnzlbg <gonzalobg88@gmail.com> | 2018-08-14 19:16:05 +0200 |
commit | 122198bfbe30afd00cab87362c0026ded4c9743b (patch) | |
tree | a53cbc062daa7a85e3c9091fd121d5b22aed65f5 /src/codegen | |
parent | e9709955e168098b6d9b327081eda686bb6ee098 (diff) |
map vector types to arrays and pass them by value
Diffstat (limited to 'src/codegen')
-rw-r--r-- | src/codegen/impl_debug.rs | 9 | ||||
-rw-r--r-- | src/codegen/impl_partialeq.rs | 7 | ||||
-rw-r--r-- | src/codegen/mod.rs | 7 |
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()); |