diff options
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r-- | src/codegen/mod.rs | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index 697c140f..7f0a822a 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -1465,11 +1465,20 @@ impl CodeGenerator for CompInfo { let mut generics = aster::AstBuilder::new().generics(); if let Some(ref params) = used_template_params { - for ty in params.iter() { + for (idx, ty) in params.iter().enumerate() { let param = ctx.resolve_type(*ty); let name = param.name().unwrap(); let ident = ctx.rust_ident(name); + generics = generics.ty_param_id(ident); + + let prefix = ctx.trait_prefix(); + let phantom_ty = quote_ty!( + ctx.ext_cx(), + ::$prefix::marker::PhantomData<::$prefix::cell::UnsafeCell<$ident>>); + let phantom_field = StructFieldBuilder::named(format!("_phantom_{}", idx)) + .build_ty(phantom_ty); + fields.push(phantom_field); } } |