[cfe-dev] Introducing attribute objc_pure_virtual_method

variadictemplate . variadic.template at googlemail.com
Tue Oct 29 15:16:32 PDT 2013


Hi,

currently there is no possibility in objective-c to mark a method as "pure
virtual" like in C++. I think the "pure-virtual"-construct enables an
elegant and clean way to describe and specify APIs, although if it may be a
rarely used construct.
A workaround for objective-c is to declare the method within the base-class
and add to it's implementation an assertion like assert(false && "has to be
implemented by subclasses"). But i think it would be nicer when the
compiler gives me a hint that there is something wrong, instead of crashing
the app at runtime.

So, with my attached patch I'm introducing an attribute for that case,
named objc_pure_virtual_method. It can only be attached to methods of a
class-declaration (the other way round: extensions, categories and
protocols are excluded). If a subclass does not implement the method, it
will cause a warning. If the subclass redeclares the method within it's
@interface-declaration and also adds the objc_pure_virtual_method, no
warning will be generated. If the call of an init-method to an instance of
a class with pure virtual methods is detected, an error is generated.

I'm not sure if the init-call to a subclass of an abstract class, that did
not implement all pure virtual methods, should also produce an error, as
this case already produces warnings of unimplemented methods - in my eyes,
this is sufficient.

Surely there are some issues with my current implementation, as i'm not so
sure if i have chosen the right places to add the logic and about the names
/ warnings i have chosen and I'm happy to hear any suggestion /
criticism<http://www.dict.cc/englisch-deutsch/criticism.html>
.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20131029/b78ac530/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: clang_objc_pure_virtual_method.diff
Type: application/octet-stream
Size: 14756 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20131029/b78ac530/attachment.obj>


More information about the cfe-dev mailing list