diff options
author | Mikko Lehtonen <scoopr@iki.fi> | 2017-02-22 00:51:35 +0200 |
---|---|---|
committer | Mikko Lehtonen <scoopr@iki.fi> | 2017-02-22 00:54:21 +0200 |
commit | 5f7636ea752da80dc222d05239dac74a434013ef (patch) | |
tree | 23a2b7464c0965c35b627ad3853996668408c0e7 /src/codegen/mod.rs | |
parent | 31c9132cac96de3cada18722d3e2d2bed6ab54a6 (diff) |
objc: Implement categories, id, selector
Diffstat (limited to 'src/codegen/mod.rs')
-rw-r--r-- | src/codegen/mod.rs | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/codegen/mod.rs b/src/codegen/mod.rs index aab59946..46b0a3e7 100644 --- a/src/codegen/mod.rs +++ b/src/codegen/mod.rs @@ -647,6 +647,9 @@ impl CodeGenerator for Type { TypeKind::Enum(ref ei) => { ei.codegen(ctx, result, whitelisted_items, item) } + TypeKind::ObjCId | TypeKind::ObjCSel => { + result.saw_objc(); + } TypeKind::ObjCInterface(ref interface) => { interface.codegen(ctx, result, whitelisted_items, item) } @@ -2276,6 +2279,8 @@ impl ToRustTy for Type { let ident = ctx.rust_ident(&name); quote_ty!(ctx.ext_cx(), $ident) } + TypeKind::ObjCSel => quote_ty!(ctx.ext_cx(), objc::runtime::Sel), + TypeKind::ObjCId | TypeKind::ObjCInterface(..) => quote_ty!(ctx.ext_cx(), id), ref u @ TypeKind::UnresolvedTypeRef(..) => { unreachable!("Should have been resolved after parsing {:?}!", u) @@ -2461,10 +2466,12 @@ impl CodeGenerator for ObjCInterface { } + let trait_name = self.rust_name(); + let trait_block = aster::AstBuilder::new() .item() .pub_() - .trait_(self.name()) + .trait_(&trait_name) .with_items(trait_items) .build(); @@ -2473,7 +2480,7 @@ impl CodeGenerator for ObjCInterface { .item() .impl_() .trait_() - .id(self.name()) + .id(&trait_name) .build() .with_items(impl_items) .build_ty(ty_for_impl); |