libobjc: Remove Traditional Objective-C runtime API

Nicola Pero
Tue Jun 7 20:20:00 GMT 2011

This patch completes the removal of the public part of the 
Traditional Objective-C runtime API from libobjc.

From now on, the only supported API is the "Modern" API. :-)

This is a major step forward, first of all because supporting
one API instead of two is much easier, but more importantly
because the Traditional API was very old and had no concept
of private vs. public data structure or interfaces.  Every detail
of the implementation was public, making it hard or impossible
to make significant changes to the runtime data structures,
such as the ones required to implement a new ABI. ;-)

There is still work to do to take advantage of this major change
in terms of cleaning and simplifying the libobjc internals.

Bootstrapped and regtested on Linux i686.

Committed to trunk.


2011-06-07  Nicola Pero  <>

        Removed the Traditional Objective-C runtime public API.
        * (OBJC_DEPRECATED_H): Variable removed.
        (install-headers): Do not create the objc/deprecated directory and
        do not install the deprecated headers.
        (OBJC_H): Removed encoding.h and objc-api.h.
        * Object.m: Removed all methods with the exception of -class and
        -isEqual:.  Updated includes.  ([-class]): Use Modern API.
        * objc/Object.h: Do not include deprecated/Object.h.
        * objc/deprecated/Object.h: Removed.
        * linking.m (__objc_linking): Call [Object class] instead of
        [Object name].
        * Protocol.m: Removed all methods with the exception of -isEqual:.
        Updated includes.
        * objc/Protocol.h: Do not include deprecated/Protocol.h.
        * objc/deprecated/Protocol.h: Removed.
        * objc/deprecated/struct_objc_symtab.h: Removed.
        * objc/deprecated/struct_objc_module.h: Removed.
        * objc/deprecated/struct_objc_ivar.h: Removed.
        * objc/deprecated/struct_objc_ivar_list.h: Removed.
        * objc/deprecated/struct_objc_method.h: Removed.
        * objc/deprecated/struct_objc_method_list.h: Removed.
        * objc/deprecated/struct_objc_protocol_list.h: Removed.
        * objc/deprecated/struct_objc_category.h: Removed.
        * objc/deprecated/MetaClass.h: Removed.
        * objc/deprecated/objc_msg_sendv.h: Removed.
        * objc/deprecated/README: Removed.
        * objc/deprecated/struct_objc_class.h: Removed.
        * objc/deprecated/struct_objc_protocol.h: Removed.
        * objc/deprecated/struct_objc_selector.h: Removed.
        * objc/encoding.h: Removed.
        * objc/message.h (struct objc_super): Removed the definition for
        the Traditional Objective-C runtime API.
        * objc/objc.h: Do not include objc/objc-decls.h.
        deprecated/struct_objc_selector.h, deprecated/MetaClass.h,
        deprecated/struct_objc_class.h, deprecated/struct_objc_protocol.h
        and deprecated/objc_msg_sendv.h.  Uncommented new definition of
        Protocol *.
        * objc/objc-api.h: Removed.
        * objc/runtime.h: Updated comments.  Removed check to detect
        concurrent usage of Traditional and Modern APIs.
        * objc-private/module-abi-8.h: Always define struct objc_class and
        struct objc_protocol.  (struct objc_protocol_list): Changed type
        of 'list' argument from 'Protocol *' to 'struct objc_protocol *'.
        (class_get_instance_size): Added.
        * objc-private/protocols.h (__objc_protocols_add_protocol): Take a
        'struct objc_protocol *' as argument, not a 'Protocol *'.
        * objc-private/runtime.h: Updated comments.
        * objc-private/selector.h (struct objc_selector, sel_eq): Added.
        * class.c: Include objc-private/selector.h.
        (objc_get_meta_class): Return a Class instead of a MetaClass.
        * encoding.c (method_get_next_argument): Removed.
        (method_get_first_argument): Removed.
        (method_get_nth_argument): Removed.
        * gc.c: Include objc/runtime.h instead of objc/encoding.h.
        Include objc-private/module-abi-8.h and ctype.h.
        * protocols.c (__objc_protocols_add_protocol): Take a 'struct
        objc_protocl *' as argument, not a 'Protocol *'.
        (class_addProtocol): Added casts to 'struct objc_protocol *' and
        'Protocol *'.
        (class_copyProtocolList): Likewise.
        (protocol_conformsToProtocol): Likewise.
        (protocol_copyProtocolList): Likewise.
        * sarray.c: Include objc-private/module-abi-8.h.
        * sendmsg.c (method_get_next_argument): Removed.
        (method_get_first_argument): Removed.
        (method_get_nth_argument): Removed.
        (objc_msg_sendv): Removed.
        (arglist_t, retval_t): New.  (class_get_class_method): Take a
        'Class', not 'MetaClass', argument.
        * thr.c: Include module-abi-8.h.
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: patch.txt
URL: <>

More information about the Gcc-patches mailing list